From 3e5333cec6780d149235629fdce2729f6e3c9683 Mon Sep 17 00:00:00 2001 From: 4aiman Date: Thu, 21 May 2026 00:06:50 +0300 Subject: [PATCH] Recipes, nutrients_guessed, seed import fixes, search improvements MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Recipes: - Cooking methods table + 6 presets (boiling, frying, steaming etc.) - Recipe editor with live KBJU calculation including cooking loss - Recipe detail view, log-to-diary, ingredient search - Split food log into "Products" and "Dishes" sections - Products screen sub-tabs: Продукты / Рецепты Nutrient enrichment: - 1620 store products enriched with ION micronutrients (guessed flag) - Purple tint on guessed food entries, * on daily kcal total - Seed DB v4 with nutrients_guessed column Seed import fixes: - Rust: always refresh seed DB from bundled assets on launch - Rust: check app_config_dir for main DB (plugin-sql stores there on desktop) - Rust: ATTACH-based UPDATE to sync nutrients_guessed for existing products - Rust: read all 27 columns including micronutrients - Rust: emit seed_progress events + indeterminate progress bar animation - JS: boot screen with status labels during migrations/import - JS: nutrients_guessed column created in JS migration as safety net Search: - Results sorted by starts-with-query first, then by name length - Default limit raised to 200 - Modal search results scroll without max-height cap Bug fixes: - product_id=0 for custom recipe ingredients (NOT NULL constraint) - getRecipe JOIN for cooking_method_name - calcTotals applies cooking loss from selected method - Ingredient modal targets last overlay (not parent) - select elements dark theme (color-scheme: dark) - renderToday wrapped in try/catch --- frontend/css/styles.css | 131 ++++++- frontend/data/products_seed.db | Bin 8097792 -> 8572928 bytes frontend/js/db.js | 297 +++++++++++++++- frontend/js/main.js | 631 +++++++++++++++++++++++++++++++-- src-tauri/src/lib.rs | 166 +++++++-- 5 files changed, 1134 insertions(+), 91 deletions(-) diff --git a/frontend/css/styles.css b/frontend/css/styles.css index 9584c6b..89833be 100644 --- a/frontend/css/styles.css +++ b/frontend/css/styles.css @@ -251,6 +251,15 @@ body { color: var(--on-surface); font-size: 16px; font-family: inherit; + color-scheme: dark; + -webkit-appearance: none; + appearance: none; +} + +select { + background: var(--bg); + color: var(--on-surface); + color-scheme: dark; } .form-group input:focus, @@ -868,8 +877,6 @@ body { /* Modal product search */ .modal-search-results { - max-height: 180px; - overflow-y: auto; margin-top: 4px; } @@ -1369,6 +1376,126 @@ body { font-size: 14px; } +/* Recipe components */ +/* Guessed nutrients indicator — slight tint on food items with estimated micronutrients */ +.log-item.guessed { + background: rgba(187, 134, 252, 0.2); +} + +.seed-progress { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 60vh; + gap: 12px; + padding: 0 32px; +} +.seed-label { + color: var(--on-bg); + font-size: 16px; +} +.seed-bar { + width: 100%; + max-width: 300px; + height: 8px; + background: var(--surface); + border-radius: 4px; + overflow: hidden; +} +.seed-bar-fill { + height: 100%; + width: 30%; + background: var(--primary); + border-radius: 4px; + animation: seed-slide 1.2s ease-in-out infinite; +} +@keyframes seed-slide { + 0% { margin-left: 0%; } + 50% { margin-left: 70%; } + 100% { margin-left: 0%; } +} +/* When progress is known, switch to determinate mode */ +.seed-bar-fill.determinate { + animation: none; + margin-left: 0; + transition: width 0.3s; +} +.seed-count { + color: var(--muted); + font-size: 13px; +} + +.sub-tabs { + display: flex; + gap: 0; + margin-bottom: 12px; + border-bottom: 1px solid var(--border); +} +.sub-tab { + flex: 1; + background: none; + border: none; + color: var(--muted); + font-size: 14px; + padding: 8px 0; + cursor: pointer; + border-bottom: 2px solid transparent; +} +.sub-tab.active { + color: var(--primary); + border-bottom-color: var(--primary); +} + +.recipe-macros-hint { + padding: 2px 12px 8px; + font-size: 12px; + color: var(--muted); +} + +.recipe-ing-row { + display: flex; + align-items: center; + justify-content: space-between; + padding: 8px 0; + border-bottom: 1px solid rgba(255,255,255,0.04); +} + +.recipe-ing-info { + flex: 1; + display: flex; + align-items: baseline; + gap: 8px; + overflow: hidden; +} + +.recipe-ing-name { + font-size: 14px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.recipe-ing-weight { + font-size: 12px; + color: var(--muted); + flex-shrink: 0; +} + +.recipe-ing-cm { + font-size: 11px; + color: var(--primary); + flex-shrink: 0; +} + +.recipe-totals { + padding: 10px 0; + font-size: 15px; + font-weight: 600; + color: var(--primary); + text-align: center; +} + /* Loading */ .loading { text-align: center; diff --git a/frontend/data/products_seed.db b/frontend/data/products_seed.db index da7e4e9934ec4dc9e8d540880c7e9151b90e7935..977d99929c88109f378cbae1e9892066ed69bb3f 100644 GIT binary patch delta 148570 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%0Aez+ z|38Z)8G(#CuxuV-u| z+s4O$2L&SpK{kOd1pp=#?3e%^RC-Jsd?r1nKaNR{x$5#QsT*Mbv+@o#lAy`zl$Z}l zry((yWUI{1K(?o?UnyT&o`f{Ym@JkrnqHT2IDRLTv$!jALpbO0Pp<>n1CRk7ewZf15JT8%4%Pa4cLQ2~MOTnBYfz^0?NJe>`=QOPq#M&bVJV%$`nMqt;vm3#*q@Pgh@e!a%$iSm8Iu;p2A+)YVM} zTzm@C4XY2QMUbV-V;wAcY-Q}k$+kmC`&RwYGD$4q9L%Ak@$4>;Rg<>>f(NpS68ygx zvwHlE*r5+qSwiL9zg4sP@ts(EOG`Bp7V!z}4Ok3%>Ii0(Oj=sw-sPP2 z`j(lut5;=Kez7oaWNW8c)i6sx$nj6(_cBl5vk%yRclf+pmYQ1*QVp~oZ22FJ1+n-w zJ#Lk!Xx5e`p*(IFatR0$Kb&0Nfv>Jg565;RE+bT);e(Pik%T+rz+2pF#LY@{G8+(N zJYJVph+X*c+$?q@#mO_nfMy{rrDIy$XAqEGQqP*X!c@e7xCKoOXNb&WLKgg6O5CHw z7!vm`ELy*M&}Gx9QwI$xg-l0;9~jpW9OE%mWw-JKT{p;H|$4t%TqCK#C;~po!J{Y$fPWlb1Z)=`%qob9~Q*I|7 zjXP@iJ@swOEMrPKCQt(^`SD4qt?~88;;ukpu=>{27zan?c7?&}0Z;Z>LSMSm$@e(#&nHN{sKd;U5y(eK#95ffo8~r&JG5$s#)=fSL0qM-9L|O zk{rE}brzf)Y-Q;pb`#>be*l?6E&zP$+qj=4$I|*?G-28dxq#+c6RJCg@4OLr&hXE# zhdfh22h69`q6B&VS6MR6H?ls1=F!ttn2yil;T}BTx42g1?O)^C7}TRu&`@N(q%K#s z$iD#^=z2a*szHs&$RURRin*idmhr`tjDanI@R)o94(Cz z*TFfKGfcfB{TM9%cjWu7-XV&^*Rp=0wgz5+ztFV*td(ZPfdSq{kcCsf;P0xb8Ns&o zkRNECp9zKIXg29%$=>kh{6}^t(k`fH#V=vguSadBlALAv(v12w zue2|*&$H*?;o08y9^3o2H*K%lUb3CHov|Ia9kD%Td%(62*JgV=;4|6Yw)o3z@5oqd zqxFFGA?tqYF6&lnt#z}t*jfltyOq`@aEu`bPn+TG*RNTVx=5X)W~+CpW7U!BP<5c%7e6<{+X??P!yAjkbG!+-Z;p2$F3jl zOL;$^&#&fl`33weei}cKAI%Tv)AH{Xr##JA-W_-Nk4>u}g;mbV*-!3>6Mp6zV} zy_;V>9F{t-Ivo$6>-8$ks_Hgyzp}aoUOm@4gxP>k&-F$s%*?7e@b8?e8TiAw-VrVc z7cpb2fasYql?8AeUAYPmoab$=FvBYQ!~LC=-SP5y-p-7Q_s#PT_AuQmCd0q)sK|tC zw~B#q?OHJa|2EItL1z*xc(`xBc_UogZC- zW$;z>YFR(HUM%Yl*QT;0xV}@m2b;WnWwYE4FpIhYJAWemv{Gu$JzSuiOL5qS5;eKIo7Jg*0 zcZq@~2B{xCA;{pCOS~f_I{1u0E4+3I9ri#!X2E`DH%*PDR)_|xIOw?750z5IRQ z+S7jrTzmLC!nM1<9sY8OcT%e& zgZtCFI>YtUuC{PJxhny#Cw9@+$9Dk-uutr=;VY|P-PuDs7r_0&owKpNn%+OOlfM1n z&dxYxHIU0fT)7&^g{|B{KT@#+7>C`w1JWnhO*>#W+43E*plsRpbq#BPTG-(B8E_le z4h+Ehw*!T+zU@FEY~gm;7PeqJ>?6BzdsjSg4Nwd07dvm;AbfrePzyWpZlE4^!rkL> zhqXX0?BK0H5bU6>EAalcKrM9acWi|Wv9)xRo$!3P?}&47+jT%KY#ZDY?pxz7aBYP< z!L=m@X~4F?aP*B$z)^U?I`1TDB-}U~hT<32d2cG*ynBJ+xw-fD#OK$80O4lb3yIrY z_PuU=eZ6-`tEF%=X8%06j@}Pj!Da2whHK{jDR3RNA9#Qpxql3vk_SRXf}526pxU_s z_bh{J|9j@*lX);uuE#yVsa*Ga+TySBK&WiM(fJ@$xP*PMpIrPtU`@`u4_2Iu+n0=2 z=fkdYVS87@y=QMOT-|%;<3su0v6O0Y{FOy9Ja_hiuH?x2l(r1dRoyoVkKgF+udrM_ zjFV;SXW(5My$5*a<1KMGb(VLCi%O!)b+FRRrMe8bzEPKo_s;T;Z7lQ(NinP&X%W_g z){*K3b&B$vB|~m2{x00lPhtOH-PC@840_+}25=e7*yg|0{Jeke5ijp*(-21CS}-j_ zrw8G;iK^iD4tjqibB=jmXZ5KKh6XwqG$?ft`yhPR32&ypq`?Jcto}@b83O=zYI+z} zPI~XuH#Ru`yQHa}-QdvDZoQC(@XnLoG5YKVJ=8h$Zg&3ZVedo|amxF((_MgUrP{OV zA>}2@Ptp|8$3MkgpqhTzG^*)EmPEbbeUFC`J&v0j^su=_Bz{e-7EZk zP1A<%w-D>w)inLVd)u0(-gwAr`@I8SFKqf&{Ot>y@}(~9BB#1>E(pRe zz|PxOH~lsK->aKqhy;uSZv|p5|F`Oqai63jZM81e}^Q=SFqtQ|1czt%bBeG72{ zj?Ck(L9tT|C??1l@RiYj6g%yg@b|?|F>qfqkp8#DP6sEL#ZGbiTOQKwik;$iI8^L3 zBjN9goz6*^07Xdp<79FIbNy+>Qw;Hw<|A?cS@9Hi{{K|*bjSu;@pM7L?JJ&^B$yRX z@jwW?m}GkUil@~H|69dVJP{5^hn!)~tfgZfL5AX^wBjkA5UO~J$J0~P)Rp|Nil;{s z{x20zUr(SFPtPTo6;Cm^ju7cLMJssq@Y_81e4C1=7*ITWXny~fil=yz34#FAmOwlR zKoB|?v)li*;_0LfwBqUIg#W4HDIX}n>&eyb{685edx{|_3A%@>u>UA~`cuN~%ARs9 z%(ACA@Bd%fQ=>&ci0Uv~A!1=N1t3TiG>4?3Kg*tOW&bRD8q?x`Eql5(>~>{Od4IuH z52^lttetm26ZilB?~=RhK!AvfiYN{oD8q#~!juh8+~TTx?}KxlwSSf-L1N zA{0BdF0`$-c3HdZ__TKK_V;|h6H>t>V81{AxQ1TF-TU6-wcd~C1|c2sxiz~`a*Of+ zI`!CPpYAd`VV}nMI$)os`BL`jt`;`-=`JKQ<1Jyp`s~wP*k_G`I@(hj!#>^B?El6- zo#@*b_UW#!wd~VHzKngks~xRiunZ5F3J%$)t9+faPcwWe`*c^Zbpt)ZnzVEPp)K2v zh+6jP24AP_(_N9Qa)U8>zVy2CQVH1&hhoqFukT_)%3 z(^6l?KHY`vC@U0nz&_m-ZDpU9`#NTy?n<$-Pj_KU9)f3VEv5}3w~T8m`}7rG2kg_E zzKngkYiPsl)3<${u}^o6cg;ZMBwdI6@$;x=u&_@*@@;^9x@(bzeJb0vkX)N2en;`A zyRcP?$E<-d|Kd+~d)V-&yWQz(N7KEH z!JqDKYCsf%t-@tnI>|f+1y$CbQBZdW z+ozzqw6{k=?cAPGP5SD zBf&&XS@e`T6jZ^yVE16M?UZ66kKl-16zcLd428NI8~VW%K&rx`51{@Rg}QrWEedsQ zdnYK=L+u#~b@xn1DAeQaouW|RY|l`ryD=;spip=*3q_6VNTH~ERR%MP z*=SoifTHeITA`>Z9qmC;1#{fqVA8a`I*yW2_Xas3qwWo~kx};suq-b%Sn88e_gecg zoZrVIqi$Y9$*7-qbVNp#`7tu;-a%Np5O{-i0mE;ejf}cCx|WQp@@t5Ux)%=|3kz*G zdt}tTgBvEJdipUk>R$Bu1&>Qc?d`|NsC!3Rd^tQi)Kgl0xmq%6M?WWI)V&k!l2Lc9 zp=8v)evFK|cZ?%4YCpdQ$f)6djEuT>YNN=gd#BWrQDe~XkC0J^`!O==-s%5=jJkKO zWk(O5lRYx(-Z`~o)H#0k$*6l_pIXSM%l#M`b?-b&tO*_WKa)|P^P^-`vmYg+?nRwm zQ_Iv*hm0y@Mekiq`d(GPCToH9u>m~lKDni|0ew2LwzR>9N8Ly39xUdx?PMK1>WMWJ zkGji`;ZgUlX62G>e832#<&w2{)V-@}@u=B;j`65R{TLo~pYZ6feo>geJH1Jvz&5-M}66^Aw25YH589}+phsU>c@TzkGc=h#rE_k z5saIPt8suw{ld>N9(5n4w8<9ttU)~LJ_P4b77t&}QkC^69(AAp{{@e_4@ePf@UI>o zwPhz~c+{Xy43D}Gfp;f()ZU%!<57=vVtCYj*t3V+3jO!Ec+?A>z@Bs~?!@q@`=0nO zc+`qc4)Lh_=Ck@PYWvV=KrJ5i#ZLC{sDgRoekJKTN;{DNJ=??KsaEiH9FoHUVo7`9Un(Ncx14*UJc=&Raej*zJr z*HC1t)Y%C#^`*`XnYthKrx<&5Dq+=jc9E%?Ow9e`A3em}(dpzT>} z?)I+broPqLDL3`|&WxM7e>AhiU=BIqrtXIiwhE1BeG^_=xT!*Bv;8B<{rI*bDaIsZF~$g{K~H zu?tTDpJPJ?U(ZxAD^>h~sPd(g)!BY=-J}x}dUqBBe#cB;YOE;}_F-W&*b)CP0NPHpe+l$|P= zXJ@+;uT3tqDL^&bjSV-NPsBFHi8g?0HdrLo*sudo&Bn@PO{zKvs1ERF0M%^WV*pf# z`7?lOHiCa}_-V+Z9zZqL-#$Q9xt0P{NBKJdsAeN^iu<7rXBVKFjg8n^%lSG0RpA+r z>^5Xhnai_IDXJU%8AUZ4nOr%(g*ImkbU{ShAEBsbx3|Gk^>rw!+3jp6fZeE1QQhwE zgrb_=-$st1u+WAms@aI+^`w_+g_!oVQWPGhsAh*Yf})z;mp&%es*goc&5mGpyzK%I z>!v&JNi9V+JKVMtx&ex6HWDw^l(AikYPP9CifZ;it6dFmxj7oI6}uP<=#`=5BK*@&Ycszq<)VO(roo@#c=zrBoJfVG!N5A#&j-5l~%J-RWT zYBs2a$(CdT<$~gM9iFOJH>W(+>@l`VZwEZp?9sMO#ddhAox0WKsb<3fqGhG{SD&XU zmgWjZb8$&S2st2*L&K_A+$QX36rF7ZXaM8o% zAe?c=zQSccQSvYuUfLc-6k$8^Eg$>(2112Qk-STRZLa>=qHnx8hZ!x;w$Ec3eyGsw2BQ#;YD2 z-!NYF;5aK@^||hL@v4Hk+d)+Md%AU_jMalko3dSC4KP-3cW;QXdapZUtR7tBh_U)< zcgKv?Lv9T-R@(+RVyqtWcFI^C8Q_qyni;?ttB2q|T2mv9Wvo6Ez!A zSUrRlKuP^ESRlR_2LCcvUkzZ4)kERvge>7&m$7;&fH77NL0P&B`dDKat2F^m8LPg5 zjInxX6!SD-c-3R99s+MW%rdb!W~?4cwE=YMGFAfuoiSF0_3npekhurk0RUPR8OT7Z zhbI4@K&w*%1wr2W&|ETYr@IeetB2;;qJQ;atB1gFz{*IgL7c!=M+G{Ct@c?W_hpy_&-`UD>1% zLBB-$FYMKv@LIB8`-j-8#vsaG%?Y)~UKN5Edo`!GJ@%?9r~&qB%v#D`Z5m{ky_z$% zw&=z#dv#`zL-y+7AjV$JSx{R#?SQ?SgE}L}?A4<|jJ=wJIRZ63)ReHpUOf?HpS_yH z7Ejh!9%ZizJD27xA$*uu}kQ&T^Xz zQy;*Zvy57|>`EIAV7(i}0IWHy9ROH!RyhZ-3ePXiSxKHW8dp9-VZ9gRjKV5xNX`{V zagZ^YqF8g~^_$>f6l<=`=1|u|vHlv=0E$%=Oi`@4DhDXmTxBCsteW5kP^`j+uv|Z~ z`mixvE;r?NBni(Lt0|K;7hB2^gy8ElSw{p@CTp$_i=fgF#p5tpN3Gqa5VF?h`jZRC zjDMphV`*+zCty}#eSB^g(!aoX8Fbd%&UWdnxt;ziopn(#qqF9MED>y({HQ8`Jv!^k zVCQsJb1cSA0qCqH!OrNcF9tI@ zYwj@H3P#tR+S0R!=&Y{?KNg+!ZZPPqHNlk5nmf664)=eQ&U!N#bk^L7wFp+c!$xO) zBN%kn-0`)iumIGdv%VQj>8!c1_pG&kk4a~}8*GQp`dqsn6wZ1Wd-9RJVOeQf4-cM@ zT{!D^!A{_;h8_&gdKd{iE4!i|oK@&y56C}k4`*G{qX9T;aSsM(J&Yg{C{-*ijV<1IT^G)J7(pb2I_deka8}a8A)NIvf*`0R zrwfK-IO}25zBCADJ&edr8_SYWAI^F>g~ke)iG(;@qv5QF(XZNATHGF-b=F!6XZ^B= zV>s(!L^ymcG5C6L)}B2Xob~W*I~&64!dVZ`a)e=_aMr^!9eqKiup#L1403I?XRw?h z6YUUMg^c-!7f5+ec|HK9_3(VVnAVh@PB5(tdooPxVJzfUU{^g%>tU?pPBE=(dfLad z9^nmUwv`e60_Ej+U5jazdNNGw;k6b(A>6+PFs=J~I>59ZacBLRj_^kqrjKG;zv{^_ ztw&rR2h(~41;zcX-J6oY>SJ1u04as@>=G#0&3fJrruB%2&8ck+rgiCBhG{*5O`jOD zba*{-i#AN_5#&VRFSCoF&$c#)jGs^)Rg=y&8pS4e!M;tw$^=dzu@qhiQ%NWgpWzzZb)_9_if>ru9g# zMq*l9QYfl|tBYx+!8!AYBLm0@mo=ahFI>>e9f>5__O_2}J%XTwH6&LL*Se^;JzT4h z+3m<&(&=KeZj{-21fC3Ayz4VtxA%6=Y|ZV>n5{<^HjdePytiFuYjJPJY(28f8MBr2 zcEoIbvo~Y59+lf;whHDMkj4!3YCeO4TaO|Ff@Y$l%s#mF-QLc?twN^DQ7;lUs<{iL zw;pY7pWfP{52Lpp#qI|TMYiJgW_zEU(OZvV{78+>wIHI=}_hIzbqv4L|t!35tWjpxR zqsdP2t-|^hN0Z3rPF}xJhU?KpTe_tl!}Y5^ju@`OrnIAJ5RLLmqafF#C{4Rw{|U(D9!blp016kkg!j4J%;Ln;ne!8 zPjmey#1YLksxPCt9z#h07G1Vy&mPV77)k;n=y?Ps>7s9=xu*2BM{}Lrm(g60`CE+G zx-?f|v-`2GWbVlpl0&5HF&O^Xb3lL2KGO9VMkTWLbm6XpbQLmX#{$XUl`UkH>v}AJ zRcEk*5)`wbZ5qvW-PD(HU61wnPh8hyAr82%$ND(py6)`jfa}^KlyO~;VXV%w^vuWM zx*i*5eQ=L*U5~+!amIB$Hl$&$>#@PCVh79bLtIy3%d}%Dr1{L2|8ov^?HNkpuE$2( zgS++$rEu3{BP{u5OdR##uKhwC!(E4jGPvupY5zC4tFUqYv8BZGNXrM5@Olg-=m=lZ zzGRQ^IwO=3UXNjE$3`w%lwgPOIukc#hw!>Qlo4K!!STSxLi!7j5?znja%_(`!EKdNP%?ajJ*w8btDY@LTRj6Io>%CCMdd+L= zg!TGKs1w%f521|pn%B`$5~lSthGnb3dd-7_FauK*9%nt)>tCVHSg)S_80$3;GaO@1 zA`It<^_mxGpY^Kj=ZN*17iwj_?pe!NuX&h{5P_f<>45brm^spPMnt!gOxHE%?t(61x=HH?1En`96Dx~QLB z^lL^xhJMY%rlLops!V)}_H%-MJ+8N#eX*cl@AYd4 z{d&Baee|o)zX9~?aU}h4qtp;^h<@$S-y!<-IO2n}PK6FqS}cfqcaUS_Awl(Ae};ZN zjw&%W4DF&{_x5*$e!bG4ppR2<(aJjfB8z z2S!FVlB#zSvoQ-r*Q4qU8wjf2Nfe+srs|CxNU3@!751olCq;);y_14Hs@_StJ*wVG znLVoBxPgtL>Ma?_sCp;8n1{&1MRel+m#Vj7pjzRA*rfmlq!q14+#t*d?d)|rnSvy5 z9QYJq`dv>V_8axkpnr(2ce1sGu2;5wAa9_lV^Qt}DHKU_aNtEs_k+rfSMI_b>bhcy;6-&6#DD0eLv~vI%fMe$9vg?B zM4~s|a_w7a^x>AIOn%_nxBdG=YpHyysgUe?!oycRtK#y!p?|mlVwNA z?rEkb=$T0;;kcs8nm$)%`a{xW$V3x5@Tpm*p@N6Y0sdD;lNHaq>~h)ZvejjSv~rQp z(ud%$Df4}L{ePp%dP|2FnWl_)x#n`w^|EOKRFnhO7v0j4YbT?SOD@K+hwt-_yWQ8@llW|D?2HU+g5 zzAy8{-`|zFj5dOY*W}x)tVpF6>xOEz&W#O&U zi={qGOw-#6FP+A92``=o)l|4p3V5>4W5cFoBdjY1BUVT+ZXxwsW;&n|rWDb8np`AEpDZ&) z4iQod!Dkgl6n4jPcwt8zhZXwZIJ6KedvYQxN zz8rtYlrO?@Q2A^eqs#H&#i(-n?#OcN!4@ORhu|1q9w*hLr}=n_{mQ%H@6d8Iso1w1 zcQ1yNw~+3vGI<%q9%t$I1)rtg7j$-(B&;@t)2r!l7LQkKf3~AEWVLClLDUmGVo^t$ z6_K27IMYOsgiDusTChBbzWndu91IxVl*JV-<%jK?OS6yEFD~H@|Gs8G=*s5 z@xNcn3*$iTb-U~7+fuBk0`ONnR|SBxSY8!@Xc7RTvuL ziAs8v$1CxK#k|Vt((E;~g$`Br#oq@j(QU-+N`EP5P1<&MOIk37(|@7PS1b_s$Y)3y z@0)s&+vRIJDaffOO`&qsx1U7J+`582MQ1z+$!+xUAS>3JnhNBLr%bJ6da7xo{z4U` zd_r~}6#m$Z=K^GZdzd?%gwiYZB(N;diEsjp%5zIvNvki+c9rIb>s_VpSC$wg(~GlP zO9ywD3dp8sOeX~QjF^+l>8i`3Y&=_a#~)qdCB?6X{88dFCXIA`r)d)j+GToE>5|Op zN>m?0OvfyCl4CteQ-$&*FUNF8?qwc+63z#zrdarcVjO}IAilA#=8ROhOWTU19x_3^ z$$Zq5sWw8!_(lCe-FdM=;K#Eg%Ul_jRR8sqw2`64SDV2d%`bAcT`|2v-H zMXHKSTX`X)N4_9sEP^=8p-R(anU|J(lLME(nSPaqsMX59m62ky{0V+3_omcldu!tA zo!>-Hcg&*n91Sy1@=uL!A(bu&cbB@gY^9XEJ}`|Z?k}2hbZ!~V@^yMx=Jc(ofr4E= z@q%d!IepEP$YVrf#Y*K|j_cE*Qu>M_Q+Oa>&A&x8q6U)pKQXQ4J=Xi?V@C;GT)JeL zX&rE?MUET7-t)0>dVYROnrdfz%4zv$Mwm_a+dxizZ1U&b)*JF$)K-YvhwEnEGX0^z z^Uen>vd;4+C*CkM<;n36Od}cLO5}%fE<<(iYrCqKk_V?FB6#xtYioT~!up{6wnV>I zR>G66Uzy&X;-=)La{AvP?e()pC+y&7VlWhirI7N;VIohyP6^9Vxo13)KbU6EX!pwS zW&H$h-P`Ww_W3FHNWP@?*sxFK%{1I-&NWhBq4`X`Q>c>Pl`odf<)?F_p;t11?0a|Z z6oFJt35)1Lw;n0^=Q! zns5X7@xRoB;*v?+xK1ZxLAGCUSaF(^BavelFbMk3yR6x5NaaIjo>Iu8mL8;{8D! z;d_P$@+~(66u8^=>^2I7e5YM_M=iTM?mbTbfv!X`nR^eN;R;#t<=TxRK*$B2HV|?F zs%OF;@+wf6@}L%kOg`uz?%USl5!~c7F{=GCJc5;n=p$$+BR407UxsjR#{xJeaNgKV z(iE4DIwIY~aET`|GsCMyw;WDatm2jKqMN)}cA6*X_yMk4+{|tTohS;A&1I-ZoF(me zD%?v-c{*GrO`RWpPsmtN;3rism$xGW7lq%%$R1mO2sM%wY=2CBfHHAg68?k6Q_UrD zE+P>q5CJDVs0P=1I-g@Sbva{w>ZWSKnV})^t;)E8Y?g^2E)@RK**!1{L(R4?H$z z1{S~vvZloxQJVjGHhh%an3+=0%aDOZkN(SQg?5EZPVs8Fk!;%)-c?4v*b}~1&J=eA z{(VmOo07=W`1ffizRJ6s(+dXBY71Hkv3>@fWy^kFy8!dnA8Q%6xuBno+gyOX!q!c= zb-2xCMd6}>sTh@N2WlczEyQy9TQ(J=6)%Tx)Ouvb7Qm&Vt1kX+n1E~4OW9Y$yGi|D z4)-9bFNXidx1wjY+y+jct21kJG!^Qdstm}T>SZtS|3g>sX*Gis-U!!0|EqlgDr>C8 zfElzrwvANWPuW~rRTKUfskjp!-$Zqv(@qvQ^Y`g(-r>oMzl0x>8@G%o7;D|Dg#wpl z_+TtR7T<-xDw4^6gy#y{9h~+g7L%vsaGcz>yRGBNXJUkx#%!!xvBE$eM!@n|RVcC*oy2Y*+vueK?o*^k-FP6=A|R@^YCEZ6A${_>@FklQl6X zpYn7yx3+u*z5y@caZfCcm@MgwBi!6{)`k3zR7bE5?jhhCZLdZ1G@~EFm z#=XFwA9o?5yI@f@-T<0;x^JuJ0M>tKl^m#uNXF@FAUljo2fSAO4Ea z%gDBS5k8`pex;0GhSdwh!LVjFPnPlN^Y!GnA0nFbtUXk+2xv#Ezg86}pMV{GQa)4` zK_6@v8HtcZb`y*l3r=AkvxWpRXu=5>6v#(@M4nJa?(IV@4F#l)T_mkS`3@xG|B?Mc zKmR%QlX0gII<;2pX3*urmy^y$M?N6`L_{tFM03I^Y)yweD-E!3pi!a_Y5G_3Ey*@h zWDgm6XHaCoavRxbnQ$<{Eb z%?y{0t7z`ywKj=X{IUUh0N+k`}?=#A73!PK$IkmOAQo{zjL19AP-92;@{6lR$y z%LuMRT(?aB@&rz|T=Rjlvpj(|az8nl+bn&j(sRA%DI`9y#fL4i^d}%ymi^3*3?I_^ zNF*kZ<@u3M%XOPMU63|N(?hk5|BR~5E;E`(om$D3bXG_=4jg$S=;(lJ>+Dbl(sBg%X?;>{#?q*G)%ErjWc%Q{d1H%*@q^bvzx5(6= zBiqY8_(BvBFq5Mm44w@8GqOmoQ*hy&%Mth~E@Js}hNvLYqf`0?xySmTLRZE@rc*K9 z(`9zE_y%chS{cYo9n;XH9sM*ZB(px`1n%?Z_a%I)&+WgWQ)m=WDcQc%<< zJo%zc)OwZ2lS2xTO=0;X6#v4A$rx^lNs`V{UZRQ)G(iYLU@sslQbw(&&v+8lBkE19 z>sC&y(rBTiT`ZoF{evc~PVS2)?C+jAudt(IxcooiQ8GPZESNCYa{6@Lui7P=2kKKo zOF2S{ZfPy2k(Z`KfzsH!u$w)~J=s4ZYO)$Z+(JJmfP2=fM1CQsYop3m^bkrVLt4~x zxVo#x4gCud{*AZTi*=awp5`@$D1sVJdmE}RsdI|zrDvr!i=w zuPww}^%!jXLKH=@tp#8W)15-;P{$di@sZXZ5c*n#BMbHjI+C?l7$Rp80Fhh7=}xHL z7LUvE5)W-6xwI&%x6X6JkV0UFu#{k) ziS^W377XZvcyDrKM-)U>75k%pM@ud$#D;Hd3ZU1q89qE-laF^sO_o1@FiLdeuW`D6 zv?nxis>{lM6hDf7WP#h9v#veieD`3~Z_@R=s4GVEs=`6G zG_^SucNqAuLa8?~oQP_U82Q-3XtsTa{=79AEdjpPn-rgnYJ&5F3t=2ulhsTq5!-u^ ztnN*o$e}m!Pkxk)ZJQ7wOzhHK7ejPKQ4iQKG02GSOjJLmasA{%wp!p}AZGxdkxnIl zRz`toxjwNFH4k*5ptC%U1B7s-b!k*3UsfHZFu0E4bdq+XDnW5V{8~QuU-9s_$;)p= z_0xE4m|BQZv!1l|z+-}4l+ja)8Pg<4TK-m)FWGZ5ikGu8bFD0Z)A!Tu(R`?hP|sGK zSH2}G<-f`99W!hfX|UeNO9h`qm3Wvv3Zb4m*|O?TYiTk^rreDZcmWgIWRg-YXfW%? z6;7fTZ80Qh!-lX~zcsn{QPf_Ul=*qoeM8s6G(8JC@Z7}aZ6ETi@GE;K!{Q|SF=VvNcn+SC2xj>p9xXk{UPcD z-Xp7RA<9!(hvvAA&2d#x(v6>@S^%ROwOmH3eu|3j+(gZ5IG47%8tn#6Gu1X_tZ-7+ z8w>9P#dk(?ry_xRk#LLE7N0kadoFu<3(57iyQ}nL&**PS&o#B5P& zs3Sg*ZkQh=rFD$%C*AH4{fcqDScFYs-D$r^ufnzzyteV#wN@F3eVwA`!pVs)T+5PK zv;$yu22!I-m*_q?kyNzWev zP1R3I58llA?+9y3ykfBe7`Nz)G_+Khd7C?E(gt)qXuPfwiAV3~Z&cL3RtgAJy`{gW z>!DhS+)VUvI>mo4C#jLqzJhUMuOh5AFdeABN;?={lTD`RqjF(==OP!vza!-H+`#EqYl>7aNiJ#8x9C^F%QH-lE)_l3&nQCrFx0Z5X3`b4o<;>Jni)M@RLhl| z=1s*Xau&<@O-6iIN53!k+&H_awZV-2&h$by&%uR^vrb4)+k|(OWcZ@!Ai3w0enkLh zVB(?X*Y+;>rA73;8LOg4+1{%lNz0-S3vP6Z6lL)+KD4vc7iIq-U05@xGaVBKB(TiU zYm^@ATNlA__P5Mq_7yqEtS!-dj0PUju`J!Q+Sw|Fa*X^-^sJ(=U$Ewk^339ku&{Kb zV+Ix>?KK^_n%&a2+~}U<_k+=WF%ixwf@jZ`6x<+v$50CfitNpej+K*yyyy_INyeNa zEQ-wXw5QKOvI?RzWQLbG?aP{f)E8CT6}NeLztt*(8cZJbCp@^g@`9 z#v&NNn0*Y%1$xk^cz468*BT zOEIV4ty`k`RXtujBWx#wKbXCrC(VA0zOOZAPA-aVNC4#dfC%A?Fo;j_;1R}j*GKDm zYwl?bN>28t%$tTYLy`R(R0N7D+;YtFb!0#u3>oyj(mf-oXm)L+f$Dn9;hz6}ZAZyx z$e`Wi-snNTq8^{qeWDb_`SR7W8FvGhFKYlMU`&S&sMoHmGWt~FwYXll*(@XA_P+`>i~gqgPtc63eAjZHVq(wwj2o06cP2fZRA(H{?*uYl4? zv8O#1lRzoy2~jOoP8Iji_aN-X)3pno1FeSFbmuEoIw>}?U$UN9W>q?w^!1<|xmMub z;at8~`v@;nYcJ+?Ql6U5lun8ljdv`D@d3a^AfCh@8Whg=g6U`Nil}E)q$!bY9eHL7Plog zo)n*#k)L!iZgS0coTjaOhb)Bq4i?!*?&iqiuCADZ8_JO zk|rf45fja2(spo6jEh@_d+|X1C_EaBTLhs-aniDsm@JE7$(M23RAmpbK)At|p~oHO z$vabH){5?%S{Fyt2n03x9+plask35E32NlrH9f@sG6TJC878bw#jss^(^=LEbL-8K z1-HfKa^vPj#qfVuSWZ1EkYd~tQyj;982Zsi^;}$;&%xzznrX`JA~;%zwLU{4HpOJ2 zc0(w}RvRqy^rM+HH4^o&KBXI(zAok^o?P4-(+457CdG*cGmInp);i)Y7MD}>=kzAk ztBRwdKfR?^BJqDNW(5y%mg1q-xBvozFiA0KVGG0gXJbN0yJuojOdyy;EF;jW+_oW!Qf<>OV{+z3y z%WnN1U6yL6B9iNmZ|Nv(l^0JXcbh5%1&O*9lPEK8oL4-Vg0=05|{ltU*e@Jx4E1{xN1BY5P07$`QqgNHnL96w4?Luj1`wkI|2;{3*s; zMxy?TIqyz~g;LfA2{ml2Cw~61@5tCV;8Qrw3yM~9jbsRjU5i2fG6`OlevXF*d5NCxq_qsd7Se*P zZl2Qq{756|v^@QejI`<%`$corBF<%sK7?O{k&do+U`Q-e@G0@IMJM{x=mbG@qB&2d zjE_AOsN(x@O1=0DFD=l|>4_iwnH&X~$|m7L$>OsB6CFdBsa&z6`Za58@}_iMjA3|7ff~e$%6* zt7R=gG7i21R;@i!*uCc7Qs|-BPlb)iC0$71YQ=Tr#NA84(H>)2Kps&CBKfCcN4sI? zx_*=Tys9PUvDN%Ew8>CBIk%GjER9S%A=Avj63!q-n=ZtDOjf@byQ#mY2EkpI`^bF` z)I_U}DYl5e$wwp9WDW3oLNlmjDAf#F09R>#$q>?J2jqju*Rr@T6^O8xU?Q?QOlB;- zc>UbixVEH)CJqt0^}S0HY}+t1sA=1RJ2N)UiG@RPT)W1bi34p#i9J? zbhf(9ljJ6G#TwTQQ%c|hcDLMi9UUVhGtamdoNk3SM*W83j@-z#IQDGMI5{!;#`RDc z&Hg2$*hkq4j(&izA=Pc-S|RA)HExSsr{-QqB46{W>RH7#^uD-rq*qLwfEx-gnP^}6 zh&@%Pzsn|*W+`#;GJS?e$y_~)$s>C%6?csFmZnaK zn@xTn5;tB&21Ud{gCZg+u8OBOAm`g~`T$iW-v&?10|PlD-Bm}%jE$?2m8HdDGbZ6w zOO>xHP78##%Q1n3ZH;?DZrr9QS#C`^^4y+a+}v=E?8}T>sw~?c$NSLSuYy~_xvJIg zt2QgoD?UYlNI#9}UWuEnAa3X54x?kFlwyE2wM@Han$T>@k(9d%6Au@oRA*^A4Bs7e zcV&03X0PObCeE8=7RCK4Na`2j{?I7+*E#(g+T~g=7{_tvc{1er^iyiG{BqpWg6b}( z4^b`=?$XP?30v8%w7J1-jX2VY6t8I-rM2|-tvD}fzCmm%sc*-HlBBode&)%N+i_cC zP@{zMuVI{ifM$YvpcpR@w+G%4@*@E<7$-E)KNJHEabM z$PqU;Wu?3SyoKb2)D6$YRtm;pU9=<@%@wvp%bURE}U^& z?JXF$v@IQBn>uzmkwvXB>k#qBXDXFClyr3x0cpq$Lq<5o8!L| zb+n(##L=84MI23^W|C;!ys&hnA)~crSnj}jir3OVrSWZv&vWtB_{pxNsZ3sne(%mG zoL}(o_YNhUF2uwCEZZCJC0J4&q6??V5s6!X`(JX*j|!g5J`w+{Xnb;XDaP+jG@ zhuertZ%d3v;{B|75}^gB{tA7=#3N({OIZQqD4`VjM(ZGa26H)0jN$sui{z{FcrS$t zyInOu3D;d|gjp3m%KB+7nXG@8&0fFAjuA}E` z@ox#SRN?QY~#e1K`w`VOSVm;A{nkH(0$>l-( zM4UxKrhgZI3PRXZN`Wh*fhSD#OK{8BxYo62aRWH}zOZ>& z=|ZwPSow=^I>Ab};BqJQkbF0+)4Q6To>>b|V?Bq~0kupvAzy>nRtI02)JtI` zue48)WX30j(?~0@*_yMEHZbMhXqND!Kz?kMppzLl%T6P7)Wz~Vx1ovgn!wjvhzhLO z(sWnWrSKDU%4uyg^4z7qO%k?P;=SB`PPJA3Gj|`u_YN7Gmws4Dw)!P3>CLJs#9&UJ zq4`E3iNUm|`idlYYQhxWbJNh%C^<^D4DhF@WtD8pzTHVnXd{qsW+pTfwIevqNOhKc z6AzQtt;Q=#dShY28Dr*((`~FfGGLeW#-}ko^qrqDLq;|&N?6;~Q98rpM_(n&QF~%4H!swT30G+7o2A?(*crKy~fPbz-+({gt5x4=h0DM2TofzyBo>4kbr=c$EAet6?%CqPJ2<4qIgw&PTq?C zrWSVY;?r2{*H|JFS-!YZ{A$hN@Lp2Ni*sDbpf?g)%LKFk>3(GH^Gbi1`nM8HYS&y& zdtP0ld=G(SqEI-H^k33 z@dQkaIj6B;V-BXhGjjp%8c~QAZ4%$-$<20&-L;lnXLC;Xs`efA4{A=Omo=viCZZyK z{^=QnFH=4cJu>EdiF&MRi{fvwTv#N}z?H2t?I6Bq z(^Fvns87R-ur4ndlkuBaU;Zvj?@Er8r6&UNnRt373*DlzGcfg|=4H;v#23ieQHfeA zCU|-oh1RpaTUSi**0{v(=o16rYUu`R1nf&PkurNsN9hvAH9 zjr*f}c;E_pa>Q$5BC0~lrza*V)oVG;80EL}?&zv%Ej!b$8bt;yO)Ta;H}^ZEbuJ0` z?XtwCF^1cm%K+_7%|z85^i?x=8~yYGdF7?VlX6${iZiH|g15<1t1G0dKSi~c5N6kq z-PMUvJemJm;v`rebI!D4&{ehw(|~-ev}$oHA2RaAMBueEr=Mv_YMQF1%gBIhi5Gd@ z*PJd@y-jvQN1@Q3x^`le+{CIdp}3G)Or$|xxVa5eJuXGu#?MsOqPy2f+E(lVLB9ATME z?1@fVOg%xxY2Ol5v@`uFC&BlVuA(}pV;TH^)LG#9S{(WnY=cZo>FM0o3Mu_xpprJ1)BKGP{RqW}Vh8>XI?P?o(;nvFG89T8az`(Lnd_r0#x1h@g4B1b zqL1X&B>831ice0Id-NQ$zX`ZEjQgewM5t6r}*lMv>fYlDuAN%xYfdVXg8;Hm(c4E|?=9x+QOxmH8wqd<;uCO@{I>MWyhbe77u~ zUvh>n?n1_pvi8youdCi9R|X}+L49&nS!>EYV-w9z>Y(=Lq;4JNw~#hRCwCzG!je0S zmJE)3HmAR$L)2S!R*v$xlreHLduVc+#+VsUhDjvE(h0JL<13KkFb+=kkv*RhDYz*3 zo}8|oy017}SSR023@JKap0u2lJXPj4xvV?35wm}0Oya4W)O=#{TV&mo*S*{ZK-#P6s>bXc4 zC+E}YIh@EpOaDtveyK=y6|^@v{Q*ssFkiNYd&VuTT3GK_7I&steS#-_FDAdLG;SDP zHi-I)Ec8RQEvT=Ef`R}kWsIjFedCd&lIHYMXr#F>CA*LptCPQjwKcvhn#E*bh|m%= zM6QIFlT$2J0s^dN{aw9AnN=Hsap#R&Wo1bgBLoXs9l=xM7QPHQZP>9af}4tFMIi0M z-Q@P<>D$Q(BGJ5`{ELi+0aRQlrwLTWDDoA&P%58>ii}W9FTUi`ugR~9kYz0!;z*X2 z*&A{qQWaByg zerE!Nl%?6?yJma{Z=vwUcE_Sr4a%Y$lC0qldFC3?0U#LmpHCgXPI6K` zE#;)xa+9HKB`S2-<9iAT`c+)bP9%e{3!|n|T7XR?L@_btBRQEhC*}FJ^czLRY|d5b zV$?+tm+dL7=>$CxKIro)w?&Wji3Cwmgs0g;osMf-W-)&|?@!qSb7&q>S@H^q8p6}X zcu9IL#ZPk0PAPZKSVELI3A^;+lb>74cjT)$^;}dyRf#E*;b2M?y@djll?^5a(tW%d z6=<0=38pyM$!Zkq)3Q{&Cf^-Q8I6qpv6KiEcKaZpyM)tC)a0tYRf70|@UdJg8_g|2 ze;GrPUP?i3C-6+l+q^Mj89~lVZk>7&r(n5Cm>bf*H1#E8W?O=E7t;Q8&qpQ=1|eV@ z`0b!3()=q1SF)xk1(v>WHsvoRi(_z8IG6p}o9YhYC$b~_+gPz`<|dPMUh9~EEotpY zz_#VOfpYT6D=ADxm$bChRl=hTtf!(YWDO!M$n#4Kr%O6Dtfxz^{x2oOT@7DKA$}=GO$PI# z(2+*LYSj%MByag-GZJix*`aecpkeE=c_~4{964P~PLE3HT2egRN=}=jj#p%GEAhN% z8n?;`GTtnr$8&W=ZApgb;4HPr5Kf=1eM7TUbzjv_7$a{lOXP{$x8_$J%l0h{6i%)npziAFJ8IlkbiWHmEJ8ep^mg zrX8(1EViZAnY&2Zo*8VGdu9a@Oq-LfraYY|CUZ3hrNE(@;nMt38jaLtm_|eXt{B`~ z=4l>D7P6E+wd5Fx=24+rvfw`p-Ii4kM!@t>PMxI+R6dE_<$L(++@EN(&q&J6!9A6( z<`ja;RfkHp!q#PE1&LdxS*9qvJ6MsX%jC2lDa#alQ9+Q2v5T}rZqyK_X?xa}+LG+w z<7(PY91?(MFn9>lv^|T&3d~5_9xSsJi?+M5t)`5w7B%N;iX{F>yoXfKHqKQ#{=24| z^x!wm=R`SXh(k@=vppENhAw(E^jWKEJ86gmP202aHci{JaV*?P2hKBy>>}JrVuxyr zMDoFWfwUg)+Q%BRbXt-TX+jGfGV2~~;4mE9G8Qzel?YR*)P1|$B?Q7beL#7^NV(LNA zd-?YSo` z0Z*K-uW5U3YQvhg9Y!!s+jBFmC8UVk(G_2AN7MG)44ZTuFIVl^)i#JqPr`G;4?ukqo@1iltVi z*Bvs~kLAWq?a!gubE>5)JeH&2q<7t?LU4RGs@_#jLD-^8!ngz3|1swYCkGGcY zD^OMOfx$Htg?)W0kX%T%e3M;G+X{j1?xAsg+AymuzawqBF~>-}n!4`54#KbsWJ76J z$9o)W+EySJih^)@MH^|@AQbz>Te;TAtX0_;5nt2vP+S!j$PgVBrcw7l1u>KM6{x*< zw5c6w+EyUnVGX<6)wHdEod9+a9Ts*qZ7UGmXkxj_hoxR^nzj{)`zo!iMdxFswcQ)g zw5@QnY1&p8Y?`(e2xm;Rei=F}Uf0#Mtw5Bvwq5CuwfgrV`jA>p+X|GeL|MLMBZ514 zO)m6yy)3g7R*LSN?m6{L*44DFF#g-i=ml7NSshK= z<0Bku+Ln%Bnzj{9ZOLXT%ZlDsN7MG)2&bC16^IIBZxWr~9cbECpq4no@(w$iwwFfK z)wHdE1w>Pz_-9AcwxWHlrtQrU_BCx+tfQK?pN(jQrY)b!G;J#o=jdda2pE|Q0J2F3 zU3s3osZMpGX*(&EY1&qdKp+>3G6GR(Je#KN>{KV3wmVaqrftQfT20#ugf|^%+E%1V z7ERj`wqliiP1`%E4QSf_n94M5&ttBu z#g))oMEuaIY5Qra6HVKV>!_yfuc?kTZO^xDSkv}=8>^;m&ykKaZO@0=G;PnL1Pj|x zXt#fgmaq6rZvF}nsl_LrZc@Cbn?K2RcY8-p-dQ%XAx&HJNTz9fK8%77*yCkhnjR&; zZQKxi$;=w*Skw0WaLoSf-+IKp5jlQFIvAVOOqxHsi9kxz++ujr<;9VXG;PmMVqJ=M zgN@XpM3)LYJEs$Q|2a2Qi!A+hq(e>HcB7c4?Rof*v9uL9uCbc7!K0X_?RixHSSvrM zKe&b?l{efX`7+a}1~hFeu>xQ}30=(UY1%$9ifP(bD(q|8&KSisZ7U&C)CKb~wfm5Q zGIx>Ep7H7;jSZNglB&nd(@OK-oa#nG1otFa+5AyXHEmxS#WZazTQOGyhE+XH+e%dN zgjpV`V@=!27BuI;o_k$Q+nP}gXxdi#*J|2+GKy*1R(7<8CE#T9(xHzcjgrq(?k%Mi zX7_&N#dYpK)FNXRbNZ(dn0rgHM_49XjwHxIVFJ+$qp7BCWl*iAZDpV>T3BDxwlbhG znzp}wmQKALITRz@*%iq4|z2czRT(zG>> zZdlW{GRdZCTZs%DqH@%FV%u+Gtw6^87u-ddzVj+kRZM#w&ezkl?KGNc+E#-2P3tl- zk_O?jnpmnUq^qyEL(|rObOV~UmBVbBwv|I|1^zUEtbat)w#Vp(G;O0sGfmsdRC-Cc zAhvIXUQ&j;rtKq|wuz&erfnrcanuvW9oo^fO&QGx_+XyWa|1coG?zX4kMy0j_f>vM zgZR6UC!Zi2$qz(7H0iy`vYn%;rmcB2)3mL`45PPZvwG6|u{I2=o*2@`<0sPjsnL!# zZJ!;@G;J%FTG_}J%-Vm`w5?Lq>LH@w4@Od#VIJd2`RUPA)3!3*o~G^L(M;2}a+N(z z+q}^YXxiqjqnfs4v|UZxs!p|=o$PAbYQ{L!w2d6YG;OPT))LDcXxdiwU^odpeG3(B zoF$K_zUQ$9QU2&LOw+asbA*Sb+uG5zjT>WM)3%B&o~*Cf)wHb&snxWt>SLFxZqc+I zKgOY^ZB_sJg09Kamv@n_t@1QT2R*Qn<*C)4N@=Cmc-Xk%iK>1!7pA_ZZB-}(UeI3M zXieL7W0DwkpP^Xf`n(wG=yS5h2dyd{v76Jv^_ zEV~oJIL%E>7wpBm3V_9@ia7ZOR6e+O5;lZY&92q7t(s-iw5?+FSX&7aVi22l8aI(+ zKaZiBwpCMD2$fb>K8~hs`8uX)TeZNZX+_?4zQ#FCaXMqIi0n^+atijddz&>o$&w+P;92TWm69_mhZgXwH$XMNP18Aic@B z21IQKk7J^?)rcY`(jEdIfLcq5)F@~YN;dr5qz8&e=2Rn!geVg|Usu#Nb(}*{+iFBX zu;U+#k`qzeYE-45tdQRN4q9h`vO)yOdPv(^dxn$yUY=i2pm{YyH*G9$sxN9=ZKS~h z`f*CdK&5h;!LzkAw~410N%QdZv($fym~r&U8c)T0l8cY$55`R`s?o7%aRokSPt^AE zIx1@Wx@WDZZFLX3qP7plIT5vWAJ0T>tFe-^9jUPH5e>!bvh$uxc+d5k zYAocmN*Ybb+-sB(JR`L(@oY<6i#?(4d7#yJ`=YkhQ3f-uJi`a;iQ4ua&qQsj!z~*I zF+3X(we2_Ffv9aYc08d!(-HBA;_IWLwp+$CQQPXFk0WYZjh#u>=d+EbJMe(o%y92Y z`ouTgEf}91RE-@{IL|I2_22V$L~W~6ZC-6-L~U=aW1_azW2|~Yc5cxoYFmw@2pnd1 z5zBB9VVqQ7)V6566H(h2$1_peYFGd*EJK+^%35&J*J(|^C+Dw>cPMK6#&{-bTaEk% zifq`%A=(UXs9>Al^s)V@Qi@=wxBMP752WYfW> z7ZgrJZ7;}bMQzd#dz0ivqYpm;J(YYsB>ilUlAE~B!tgF=I<7RGT;YZCb@+2cR&912J;4~&`dm)s< zPiRGD>$B_;irYFEn{cZ!a{V_A*mgD=ZflN(l>n+Df_y z>0VORB2%2yW4@13QD0F(I7>bj6YVf2F(zm8nYEbwneT z{Po#5a@WVA?CziIi8%g!y&sN$UGIeBpVv_cs`%qNHX0~?zXpQ8;CXVl49)sh1m+5V!zk8Wp*PY8y6;Ql$8Ss0>+m}&ds5skj`g9!Me0?O2Z@eCdZLh2UbzHe0mbD@ zNjScK39YNRbcx>5#Y^5ezIF)}b&6M2mpJ_Am5Ym{s(;b}7UdM>7u!mAm!!RDQ0#hb zApVwK1I1qP{A+=vWNF$pxkmi{0xE~Z@2XczPp(Y!(THDFkHgac%G~$J-#rV6rYPM9g zD$Qu%Xl>;~|A^xE^d7uHnRORUq0GEH1;_Pw2TO5(qzCyaSAK{lP_Fn8zolIMA#@Uy z%RX3&FA&7UDK6ew};?w)9o-E2i`{SP!70_-l6P&8@)r>@3tJr&|B!`%D%Vo zoRuNB@SK%>ZkcfGeJcRRUblR3?0M_|RrVg>QB-T(_{?mXt+Tt?C50p;A%xH&^w2}- zJ#<7$s0nP}ETITw1`!KN=SY#FB8rIgV?%mLAqhxmk*bJ@B1KeG@c*0LWcS|tUGMk( z_j$c zy!p&T{I}_h{7g90gJ_=3ZxD=JXRk5(wYn6|CwyZ?O@ttp_bXxPwHL<+`ez^RDc4>H zn+?Ru!&Nie5;F@G7jh5x2=&iC3~MVWvdpUjNn?%W`1nz_m{jVr#- zRJ34(4*J2G=Bi&*-H|tjfYAih;}H&z4fW4HjMg+Tk;*((<_fS!-pz_xPoEW!5A@GI zJUUdkVNo0K#aOw9Vk}8m)z?H84T~8_+@qsSbo`K*g=i!^e>Ucngg7PyMq? z$N$g%*~!^~{@I6T{DlWs`&gPeHv6CYXJ=;z`ez?e%g2O`G9v7!NNh)m{3fLQe$4j$Zp{2&`ez@p z{_p>ofAr5jQYX|u`v}5f5x*c~$p7k}eWZ3k0}9AfP`<^a zf9jw8b@u?6G( z3j|PfL0Ui-SX2IG`JOWi&J>VmuXc^3(&L)#S^CqI3ICV=*+&M4`ez@>lErY`q5s}L z`v@YLhRMp#fA-JbFyWv2XFr}0=%0NA;YUzm{;_}d5riLQ%Fp2dkp*i+=r3Ck`wP2w z;(u$OZJiispMAs=RF~n;iVq}7J-0bFjzjzGBkup*KKlqv42^@c{rC3SM{p?-wIW}O z|7@Rq#2;#(eIzds2o{K4lTDc@K)ZqzsAt*8+yk-cwEZWsOI5){f5kXPuU9TqjFSmh zmVyp#J2B8c`^d~dYP?Kl-hf^##gMeCN-G)Ecuq8R9gU^RsyYGhGTeD~H1jS(&sST; z7Dwj(L;LI_F9f`wGME?0p=PK6+4)TDRF@>aJ@g7YS|bn~2=XS!F8dhre0E$Z+GiiN{XewNzBN&9pMA8}e`}xp-9)*4_R*Tb z&=$~*|7f56UzG!l!Vp=+?l(_TZ{lBN^nUeNIIga1 z=F-jkCY?hO5bIG7e1Y}B^ic3}pfv%0LF(E$NugTg|9lele?ECxH`@)Q*BY1V)@dU( zQ`8pKY{d`3LJTK4dR{fwlfo;VI z-=O(QUCntE$XcrWUD;YOmpjg>qmI=x>g}q{is8tPH~0O^_F~TyP{vSIL5{C{X{t3Ak%DxS zIj0SB?t7j9?fv&h1dm$N9BU5C(akk-CN+p*8!@I@f}m@x{z=_RH585JKIYc3lx>6s z!c=JNp2KRbi^iNl0SPT;flTna0_)V08+~$8Xse8z4-`}wknS0yk)jv-sMTa_SR zPLqn1j?P(Od%fWaBxVPK7g&bW51x~9Sk5{%&3-;-lT`}{>$$#+sXo=Ya~iS8jjDkv zq~4sXh6r)UiGiqJkP?VOkipZKh>LSl$P1pFO;rW<528FSDnA}WL5MY)d&n_;QFd?I z-lIQ=Ih7i-@x)m4+^hm`EQ&IkJ#n>2NkL8&d9xq~9+b!vV~le!fxI(o>>PRg+GKv+ zngYodbDpEeUd`#aFcC{MvRfIGQLq{l^`~_QwYxO0@x9eb<*!PftANC2w!FmBt(M#| zD1)AHGR7oXdsdGrS;?82xh=?`u6Y{L#FCpywnXLbi;y~epgW(){0E>qQF9 zxgXKjqH|}p(J7hxjMlE4$iiXMEay5TIWgj7nlU>DtA^Lu8lTM&mpwO$*j>4k=#t^N zSCGM`I*IcK;Q#f4OwY=Ftfcl)xo@g%T4o(1WEwZ=3$?!>EoZp0CflEw%X=;$SkC&8`Ls@|E1 zchdglor0X)MR;e(NwDquRqy2Eo%(@yD8|`@ilqrBTcBTIa8rymUXFUju9jLCq@QdK zvsu-5vG}fIXl$fxJ9881Hb-t28zAy3*1{NDXm_e#CuVo zSMsq8Pc4D6K*&qesIAMgPomRt{q}(a+mLEakm{2&dvmR%!-u&|Xpa%omT6XZnWk39 zF#N+{i4b&TNS!wAlFGVNcQV^785;*aU6*N%m5lPI?P;e8(+=^guji_$$~}!;8nukk zp4Z&sAF6**D^=~#z-c@xM!{o;t|oc(Rd)I=g~fjom2ToQ0b`cQ#pdHl)|-l>mo$id$Ozkv5&F+`!?is$)A(q0BULYDPu%qN7;tLD8QQJ6y{;P7 zlusd)ZN9uXDBIR#aXu+&Z%?IvHM7UCbXr^cT0TKw)-u94V>`oGeV(p~wxebo8kp5p zK2=raPvcpqYq1WlxYhy_kEC?E+F%i>1RS+kGg{+x67ke;l?knK0OXoIV+5|4wC- z;!Z(284(p)zz8g0pxIHAEFWTjNdJD`&M9Isw~0By2qxngR6{S%SfE4$B=JtOp^2MZ_~mY`$}bm*rbpXa^tIE zo{RSuO|oyICa3)&n;e*~m=V4e^u}I>7Wx=nFKu7VQr@Z_rdqB{S2SSDNV6`p)-4-k zpnpkrCGxIE6e2TbR^RFY#aY}KimE?7Svq>5{SE*!t1uc0SyDiL#feCTusI4Fv?i;kahq~FT3}UN&y~Q-0#a~!Q zfLJJ({{_`|}id|sk;n-t@Uur)%o%X@>)Jc0=4SoL; zRB=YT+CtQ7Go?Yg4?tNmv13q)d-EQ_4ZoSU1>M6 zv~h*KSV`y+`weS);RG~JuVyXr;y7$x?srJh@6f|+{u&APuMF~7dX|4cNtSBVW6?UVY~i4-51)4nzg)JJx3L*6u67* zGv+R2>f_|@b$bi?**EqFsKZ-`M4A@qxVym%nSska z_$JP1br-ub+QOvERB?pSY4}$Eo$iTF(EQCm;RmjY#wks(Id0KftRqbwA=WL56ava{ zV3g6AGS1+5lRn`cKPhbD>>{WnO#usth%$yZ#q(1}#}DLNgX2}3IJw9KUrd-NSnwDb zItgT{)ubWGCdUps;+cILn;N(W(;!g`oKb5?)W_;-Xr5|f!GF?K9l_G(a-Xt$nQ1_S zt~RMhQDcOs$k-Jmm~%0zj9nDi1@1E{QhXhSw`(|l$3c!RN)`OwA*Te$g&%K@u{uuE z_-Ka$#ZcKI*d#j2WIQ;MOte78AJD`&#|@M_V;F&1%9xr7%h57#mVU6Vx#m0mH?)%8 zpqxSw67N-t4U5{7%?F$f$)!}W0JTSp(C1@xe8ATzQ_RsUu15+RiSm&mQp9Zy#E(H& z`xHUu8IuN;QeIZFI0k3axvtm_l6O<_XZl^V7|Yke>?Y=j{;v3)yThIb#_XK`jP!Ro z_E75($A>CwdXXCiHbXEHeg6WZMx<{RuJ(bEj&4=>)sqp5jr$FK^uu+>weO%Sj7L39 zbzFHHZ4Ulo529MmpxX3wo?|AsS$eSwN%~PCSmXy_L0|VdEG&`o9Y4`K6CF2|HgRYX zB9#!|&GSK^@z~E1yW<#rC)Xic6>^H;{#2xeqzVOASRG#0i+r=w(VVQvc6>fa5x^glCCecZYFbd(9IG#|~Oh*O|Gqu?X2~c9E%HFt3i2h%g`+!}bG=(6`SV4`F4E`?8Nn6BHDG2L7`ps50J3Kb z9ghO69aR06@w_p@Fj#LvdH0`DTEVIMNO?tZklW7A4AAs$Hc3|uEi9#dwO|t<|gG6TDp<5C1^0+=i~ZE6J&!r$%H8#f`yp2{On@h|WA-0)M5Aoy z3C9wan)f^ELR5?{?g`-?1vmptHCgN#B#OOu+2MxRRhja_I>(C9Wv0ASzByoov z$LZpWj?ExOeTzpS$Rb3TB~_3ZfiNRPP|PbH30pw5EGU}-3VPsA(btXxFpdb~aN0 zx;By)3=;o@kT|LsmUB0YN8O1392_ zZlsIV&R3umxk?0Ke(!%-&Z>FNL1dxUxs3MEIc<=YpD#hyR(|Npiuo82S2l^hB{&<( zw*j}Yu3YT(no(o0p$Fk&sBvBSTxdR@C}R~(I3x;PuZcqHN9#B>T%?#=0)otkARuGK zzfj1dv`!6YHxN5@Nm4)pt7cQOa0HpqM!tw}-lX1W=L}p@TS*KoM`3w76$f|U>XdC9 zsuHld7HvXsXo2rNhxmphzPUMxBw9d=KQ=qx4$z&yz^sku(74^AJ*%z3f1-Y>x~iH% z;u4+LX}4VQ3pM>D)tSMA;gujwD>aOQsWJ-Y45&lU_QFWE)OH>TVBb&(0LE*E-}D=F z^R-j>XMAgQmTHS~yW$l07E4iDJ`H8)S~&aYY|^k2(DYg15y6e=gJ#a|EQ#sl{2q;W zN}w^Mhi`W}p5t~4>{hn3la(p9k@=7jnj8D-J-S?NFHLuJtyQW9D-Lrnu?1w=vw^SC zFNQiJ6?8@qXC~m3@Y{I6 z@SJ|L?qls*{;c{#<=;v*i5uixNw4NO@8RSol{|;w{Se8Lv=|1Fx^Y1U>hd~!krPv$ zcW6tyvqWKA(5+;+Sqf+v0SYHgt(ukGUhWmh{UJ^-x$bZ_C3}ZBFVeN6oKw|F0jN!9 zOdXAL3?`6>YuZ@N4E4vVRmwEZjtY*`LB)F0-TBUw3hVfiDPTB2*B~E|RR6jfiq$km z(bGB3o17)7WFnd&}iD&~fECdvwIXlK-w?Mz|G z(Fx9T5mHXcIJ0DJSWR|d@83SkS&LRobar4P7IZ2>`FKZ+rg}||AQPND*|{3cMy5ND z%2*xOmJxn8PBhfi?b6=Ri2NF;uP;EQ-oSm#?j>%cBQipoS&|QSoK=06QWP*$ony+Y1L9!KhkNtvmuW;itg zCYkUyW9lFz7;78W>fhCUuN@CVRGK+NYPsYr)o?l%n-rvVn9sRliZEYI^^Iv zXDn&G(YZN7RF=#U5N#CrS(E!>jIjmI8B{4cuW~Y4#>vWlBqR@;u2}0qCd(rA3{_7h z%dKTUke6w7(WP!thubspv<29ZRDH++Y>??ZT|ZBR0glZRztqyf%bgj4apRfS7-6$< zn0|+Dfp)d#0~moNRkBjetzezZYe2GG`fRgP%UNBgQO_twzBz$yNZ1A`A3vZTC7YaW z(Bku5=bw5RYX#YD_(+H`b~Y^4H`f-U!gxm%EN4{;#XfG1>^iiv^yyJ2EV&i?ob6a^ zpVN(?ILpFAa9|d<9l}F9+~e7&;Ui6vh36pXWP?GY-OeAVK%EaY5t8;a2ypw@Y7|7j zi|i}T4&==}&VvE;>I9QBte4S-RNed9G5j<2AL>D>Or?!m#)@$HsN-x>=hF~#N64od z6ir|)r?byFo1$8Jg>wbK+3<8atOsF3=_ssWXp}3FoIT?FlV%=weyNkq=|&b+AYU~O zG$iT%&~?y`(oE)4R2NhNjVpH|OZxBcosU>+%hM?3IwDMcWYc_r`kcPy%xB35KROGo zQlHb1Pv?e3j=2G2VJzKw+X+j`p?l6QfQ(STRzsufPjNU2?v!mJRL# z^Bf~AGO~u2`Yi4DT86KHnSm-lS5R&do6S6jqis!-es_+6{KlLf3Pu#3vIXen!HfQe zr2ivlJyPemKY=7Za?Ydk{&arNTAH5DLbgwA=psy%?^#{);Zwk);u#n&J$BvMQb8X5 zlWq++*tm(sR(OX@w zsKaHjc3}AUxY2Z8f%rPeDRUa$r}WqmNl3?;on0)tS-NDQ_*4-o^*aqQaa@?^LRdmv zQ>P_jP5SX0B4Sv-epM`^C6AoLlmTYgS+--CjNSE@bkA#t15!V!Rx4eKH@Rc%4KTwl z#yFOml&+CV%aGGf5WO&sv4&~PzNM}>2w9U(Bc(JpgwC)jPv@P9qz32OPp4>HZWO}p zaXLqsg}6ugXHA|3Q2c6ieG(}SIgKb6MbN7z3!{p_vb!wpmH_j;io7wQtC8dVl}qVXc)18>m8Jh#dLqI#8}iokr{_W>2z!K5 z+0G>6qP+q6((HO0`7EbFpz7BLfeK!M`dnx7sl|1Lc8PKw*VJMo7?V{>#a1xF+s2XlOZp7$ubLnDch!E?3T28y z&mI6GC3e|Mb6dLFaF)nY#BU6V3MuwO$gb9|CdA#$b(wB#?aG3)pcF=i+z=NNa{)P4 z@2X2)p6pB~Z!~wAh_1QoBl>e&*I>|!o~1UpMMGyV8L>hc%Sp2vZW9^P!u2)HXzx0v zOkq{BQ=z4?pCL!TU!R5!j>|QD`BmyO>V{}@7{fj0nzJh0&`RpgbUk3LiKQTfeIXH5 zLAEcKKzDU#YK@tmGr)c*z;^%7m z&LUSc?9Nw;P`17RrCb6ZpzMnYABe7RXwj>#HmcefP(UubaL0HH)la|EEzvqPGod;j zSNW7)MLIXOnqJ*~$Cbd+Gb>#+0FnWvv&>Sm>@x~j-K1oI)|EhV&bqeIPcFN( zthG~FB7i=u8WF@fSn$NJa31tfrE55A9a;w0QG9s(c#Qx2Vb?J_@QAAb_L6yJAeke= z*I@*nKRE8XmnCDml|he7i;x0y_d!Els85@)Tn z`In!VT?Q$veLPMjXccY``hdOUM*DTIjyR4-!YvS ztbrUR5W=*M*jvpruFAkcS(sPQvja+OGee5LEzp0qW-tGxdZ%g+!ZogNPdNiSgRr-} z*);KytD(~RLK(up+Q>%Z;Evj0NB8f$ex!YVbIs*tKz7D8Z&AH45fq)=dFHx@Ub|(T zU@-=*tb#>TJTcyIog*-tbyzR(o$m3%FAH48C=4u{_e_1(OCxa)?QvlP>yU5tXV-=&OMA=V%>}A z8lAhY(#n(##2pM9?R#TM*9G@|s(R>(WrK(eN2zet_=DjC{YqUS8twh28G#-nm8#RK zBxPqsGN)lvfyjTu15gGVSuDJKRlH2*6>=GT^5xDhF{`(THWL4_XdqkO6=&0dTf~|Q zvNqcNA(uk%PWXYuZ4#%ETJ_w2*~E@zvt`p# zNM+%%dl(cyB9-;sSFPf(vY8+|>7mC_u;q1j*C7K^-EY(74c$&9$$4Ky3;PCT2uSjU zkHm+S$WX*4x|gA{fb2#M?hh;pm#Ig5DlPa>6!6?r<}ynyfSOgzpanj?zFo`)P3~U? z@ir;UCz5bq-X&*tc8R1P?hsS(@su)$S!x=ZSCX+4AE(f=x5YHJk&K=Z%mBvJ3RlH# zsHyLxTdFP9?Bk#EW7K!lk*a~pZHia9RJIN?0O(Mg4ru1?s=}s_{?;OaCPI zdo-!G`$q*i)xcepERQWP6B*&DvB)q{|0;kyRmVoc4^_V+%~>=eJCMLWg1Mk`n+|im(M4B#+*+MwPPu%U(?U3sLCUk;No1YdT|zg^aZgny zu_ifG?t!rlz?7jIqMZR6{1){34a)h77uoBq30t~DCrj>i#yDwkIkc&mrq#niu}>&} zTV{yp7M{T(aK|FL>$3Zoy4fx=x3w@IGp4kF_;^ZxPhS(}!vmU8JgfRvxmIzMyT>(T zGfCFym__u(Z`?1y=k%5PGq}&sbV1ZjXAYq)0jVY%hcT?&4Kls{f_uKg6m_P9Fu6Xb z4LbZLlTOFo@ucvK+evFyx^F9k3ayJVwKP^5RzpKPq|MbVDnkAXB$ZPOqR z)E+C@`OLk9Ji6{)Mk{}E*X3mO-o!j&1eZ}Vbkuj(Woqs4DhyYfRgFm8efI@A^^~{< zo%eosQz(G*&cJ2f8So6D2nMy08GpIICf)yZ|Bgu6Gb8@Xv=q}qHI<&ae~MUOJTuHJ z4UuKs0KB9jp>6Qg_sBh-4Rq=d0CI<+Z0 zKdQCSZSd3_S6xv)QKl;L zIKtjx<8i2u=+9{$y}~l!Y%H|c>Y!$XU=p@D4r^ALrvn*~=JC)cEj@a?$CMDhi|065 zG{jR(mJIi7psl)kN{q;AV{A;W95M5T@u`tPGpvD-o~dRI{|HVz`Es044pw~1{mR9% zi$F=Po7>SFlRS46bns9Q8jXsnXFCXfXp2EnPFArF4fd>|jYoJcXp+s$8*N8IGQy1jRhg!;WXVEX#DwkZNAuZ&RTP&+*f9tp@A+(+ko$@?hD((5`~5RmRX5Y$)gc(d*(u!n*Ej0ETxUB zmLQ}wvg@QLk}TcksZT%JQzhK1H)18bx$tJLjCBmB}YMk6q*`#>ILmU{zJ7|`Lp5z7ad3~ zfYQ(|!n>cd*uH{TGfLL%gO-R>I*BTLi~7|c(ujR@)4jB>E zXAw(>ukebn&r05g#t3o1Iaoj&hBlAZdxFo~g>)IEL!q+*uTLW{-^RSf5W`Y$w4lxf zlYc>RU18++kjh)$Uu~kN0&z6yVKG+Tc=bE=Na7Qupd9#9tViCx?ahHGTLE=# zRQT;t|MGSO`TZMjS)|mVB0gXnsuqkvxS#`_S=Kv-G*g(=)OpFP$El=N#32fRPM z6kOHB&Y!$BiJ9#pkhdO-k)+vKua2~@^nPrUnpA)y0?sSqLD@u>Ju|=ZzKdWBZ{Gm-7a%7JKN<@S@9Nj+*27EGjkl@_ zl^aOhb#E)1RKKDL4B}xpOoVWQWyS!LTosL>2I9!8#+KE|Ax0TQk+!*t7Cfv23KtXTKm6Z7P<9<_moZIE8tA;3FuUTpeL5_^sX1{PO5-0 zBRl*gyLxe$4JuAT1uPob;o(D%FWvM0Y?I6taQ^f~w0G6)vIdQc#j#}RP4BJdGEJ%h zPHoZ{|3t^mG5S;b9=hGyTiWL|^Z2jOYIPH0E^jJFLA;LV-U9jK!PF|y`l%w5oZ)@2 zF+JrhWQX3z(=NYw59w{9zakCfq)iChWpWaLP5yoFahs&AXohWuAuVq+@EDMel`n&d zTz`ODBj!~!g|j7m@KC>kFKQookL~rb=0Nm6tCMs19vFT##6gF0YrUF6*oHc&o}y20 zjG_&vM~KLM^*6Ll9Uo%wPFj5?&N8`TEF{mcoxd{~-_X~Il(+CjlV8m~kyg}z#%LK> zF&fk@{91kawZ`P2*;R|okMOC`+Ro>prfAza@F9qM(e zZ&bBmpq<7IXWh&~KyP$}IJE+VGb227hCFm5@@gyJM-k$L3aG4si00ru>qs^akmqgT z+e)3SedR1oPw`EKlGUIhN0=kC-@tn?QIUdSk&$F}vhO82prP+GFl1B3L>T776XgcC zx;@c%lxUjzp2$%L7G@M*b3=gRb5c zbKuzx50)GPh>=X{3AlA^>wBcqiIXb8P*R}%lZ|tHk)+3v`CW)@j@wMG`&1_4Oz;`W zwdTI(Npxr5onX$(EZG&BVN5i{>SMLPYFld(z^`hn@|69!uh|R4Jl;5r%*yhuC!Y=W zwV??kd>53wa2}FGZWKuy>x&|_pZ7hYoyPc%aMY3EOM!av!g&o289vXd%MNGCY+ns> zva9csQew~ZWXA~KP};Pc5B=N+4D{`$PrLh!Y`|_LFt->8zv=oy_>fCA5Bc-zC+dla zIeJZz!NoJTaE6EX-ICsejl^&sOk*N6qpC{_l15Go(qD9)N@}8}HLzSI9~4{a6Mnp} zHd!^tcVU0F4{|?1Z)V0Zrg}mL^qidzc6dlzj_}=|)FrBqmFpC%xHnh_GY+%0iI8;X zp%_k#4NpW4`>~xq3w^igb1(Vob9A-OcaB$zbI-RTt`~gm$aR;>KsI{%8%cg95WBz6 z$D=d3?=?F81>YJ)w7~3PgnP!Xk>ju*jR4<+w7Eq+OO-(43Vej7z3D6Csr0f>;%l2B zE5L4i*ErbF2Bu0qu&O0&&ok@8YTYfx5eD zzbZ zizV(|K(hV`l7alX)3=_^{?fOI4PN>MjHwUIdA}Qa>Tl>7-FWRXO_3%UVM1e--zv5u za%U^E0DBol3(xsbwLlzw0ZCR(p?FtejBFS>{gtnnmYnz1W-aL#AVC{Lk0m3ydfpdH zdmQtb5i&XBg4rx()u{d$p&RZKJ{z5V$Tt)v3{Lpo(aH%ACgvAL_*zgJ+d`17(Ef%v zsGs;cpyQO(D)*hIe0}LCZbqWjeohk>*W4RozN?L>ULC$TOB&u5(J3{_)5+m!&&y`SMv)?F&r>52TIY>OADy zFTQvpZ0;OIKE3Xn5FxoPG(j+BX7vS^5>Q9Q*NDD(!`BKPtlPdxoMrljhE?X=ASKO^ zm*1Y0ed9|av%UerT6D)ZTOEke4 zX%nYj$berVESkdbN3^QE3kXuXfD1Z03@Ug`$P+H_F}0}knzGh57htW{;{H|vTZ_lp zeBM?%SE+V?p&3aSC<;wN{@J&uE{Gw*dX%a`UtFXl3|VhO&!&q(|oDXBEd8o zU0;>3d$gnG@wJ)*+FkRu!zbI~Vk9J>7S-Ss;i4gFY`4~AY(`!>88j}>M%awJP4v0$ zd1KTdGZzJNdQ4s`@~m&(DVx~yB8agbK7lG~tH;+Kwp$Eo-al_cgcx(tAb3Ks@dSrX zCN;X|A%kvP;6EEd`YYbjkq;{P$ z-Znhc-`AbgK7uQ0A(Hi)sQ!Xk!>kyL&{rqZoNj+N?>4$7uguF+8pK`~Ws`Y8OD50l z%d1U<<#`)u)|$LM>bM9PT214S_&v%Hqr0lBr3DLr-3tvX_^c>lDAPQHMkT(272>4(#YL;_l)o> zOl64fP+p>%tIJMfrh=TL(@_<92SHBeT!PftH@;d32>3_ZUC6sjQ;z0cGsIcs?4vuz zAB@A{Gv2A!YrjTQ^Wo5GJE>kGiRF0*=_}vo<@0p-#k?JSy?|q?pRmKY({RY3(c5$i z&DZ=Xz8Uz!G39M#lHxV)EPIcgO&i_MdkoV_*Go79Xav<1MAit9N4Fck=Sy&Or-W`V zasdKQV#t`^@(kp{A9<-{@gI3}>9NOoN*G7XmvDK8h3yc-NYbZyG33-Yd2wXr-+5`I z<==Vh>Es)Eb@XhC}SER%z-iOq@k8RRTl|k+WY)D^?B7kl|@;D`;8mH4u^WbldVsO zn*B%>hc&PjOhZ*TCcEPopBa!q*aUwm9TDMo>*z^?zg-|v*a924@HfP$friHV0lLfD zA7Cc8@U2PoAn6KyGDzyEwuvJy%?Je5S3}H#5ff)AV#(iQrBt$gthA6?MoNX8#dFD9 z-D(@&?GbqG;{)>(Nx_eqDzbi@)QJulE#2hEgLr=#9d7Zn?CNHIC9wWm!YBH#kh~WD zZ|SKde+L2BvlZCW%wJ2b$mII7i(n#W=OEbSGN^yNtZ@YiPCTY~zni}Vr+OLcw>9kF zv*O9&b_{t#}bh z(q*btrG`5UL*W2GwVBCJ?@yJ?8nU~W|0YoPGSo2$!PU^s09o*7`0vscef)!vOFs27 zl&n&X;QfeB+VvV=gBeRv$A=C_O6>~>0o~&r6u8VS7CIBL5#+*a|ijC(I>Sv;EMSX2c_*(MS>s6an z5y~lwH@M5lcAr8v+uWn5BHRCx-ZJZQe<59lKwwDO5aJ&1pH5$~`(IGRv$67sKBPBH z(v1PJ>%fmz_fVM>KXSJ?1u=JFpU^d4|0siX_GJX3b`ITTsWX?b-{YSKW8yr&l?7&P z2R-#~Ax&2Kf2Qk1{}dr0z#>9NIBopd@QI@#;S^&{&*x6Z%E+P;zjTfm1^ zEZv9?udefdXqkU`zA&bG!1yuv-^i|xBM+AOhtW^g`+F;bT9=P8DG)z>$501Zfgfw` zLkdoU(lbQ43XH?w1iUTYYM&)hRcY2<`e%? zgV>=GRw2C{zQYpNX@4X+_?h2C&V1@$ViRXp!u-=F3_jW3f?>ZWr#|<8X%qWaLKq0R zMrGoVAnJpUgH7XU8V=1+yB+qx27$^0;R%3u9~Kasw%$**Ba zo$dbP260fOAa4)UBe1RsL1<2MuA+x{L2SvsTyNPLsNaEuCMkr&3RSl_-RZXiZ`t`f$k zhG8<<5ThX&G?lzHKEXsb7WpkC?zn$}O=?*QI_C-_p$l|QMpe>#pxQ!WPWb<@NxdrT z!J!_4rewuCO?Ua5kdCMP!^rKE{(X?cD^rEs5KGM^aqIlis|)@4wH}o%k;_mGx@1X~-~$w=;JiPc)r#iI7V@p!a^qJOjgk+S(OZ9VDc3|>}g;7=gKd_@R|}r4Fo78khNF*u<+Nb zgxwX^gK8S)!;=8s-M;Go!6r?pM9g`^FuOvq6wN*CAI#boXet|;rOXgkOPTmGgw?e5 zQU3t8O6Y<|>mdY$(MaW9quZ%{TeF6Dsi~Sn1m|$Yi(DDI4}SP+pGrc6sIBZPOb%I@ zWV&H~9Uw!7hvWff_aD1UUz-;Qj$>CdMWXBj&Z`cTS8jk7L>)z0QhR~aX>aSE^sanH6u!#MEIR?>sJ+=6yw-hw{7ym>} z1j(rh;9wkoflv? zI;JX9o>dxQVHv^_<{bI}>~+S_`$O_i!ibP@wI7xot_hSxZnVsgB!gbcSCM{Q^R;Af zM*b3Vwp;$w2+?!34}zD%?`Hk`yQk=}9{F9gbt9NfjH#ROg7JN$TK`C&gWVm_oPr9_ zT=kOju(GzI9k-NSLdsVLNC+fzaRhoMFBGi9TB=X+P3j(6r=V zP>ZTb%J-D9+yxkn`^pZ)G4#dk{3j|){#6*DhJ@2;hY-({{6zBF`20fp!qohiH3}Qk zkMQpN?)1|I`5&|NPfxyDXb71yf|<#frXgHqnqiWD5#-`0+F1TKevtY()izZfAY2j` z&n{R2H8o2CdOjdKnCVRb3cKGQY=1~gJPQU0PdD3);tkyZw6 zU_LGWL~6y;uStG`=(@*Y>;wCojNDz9t}AkA2)|c-P~8khw1o;kSI+){JcHv{^&0wc zSN=S$rT(>EW{HnMVoD(3OyY@nJU^P07v}Ti#LoP`sO$55GBoi`IkE6K1kvNV&$M?m zAFA)G<5fKnN!^5N#=gP4i4ncD$TG8u(bD8P=pvuMX@ez6Frwv~{8+lmJX3|-wpufd zEH2NR&~#=lBi&leJW3RuX0D+3l4e>_S4h@LIx!|QBFw%ustj%PBT)#;i=c^R>bvR& z$dxEksu5?`4Z#bYX#Z|A(H@X*IWr5fhNG_|t2il4CS~K!kL_m`M~Ho{4@bCJh*61A z#NBje4Eej=%t+Fy+rO*GF1!89x{({ zHlMkHuI@C`$<_xgU`#PWKX}?-!%@AYC7SOc_m5Y9sJf&4QQ1y0mfOnSVta#54jL2% d(J-BkJSDx)FG}e(6aQx6-)x%FYffd){|~jSoxA`5 diff --git a/frontend/js/db.js b/frontend/js/db.js index 69023b6..e67fa15 100644 --- a/frontend/js/db.js +++ b/frontend/js/db.js @@ -115,10 +115,11 @@ async function searchProducts(query, limit) { WHERE name_lower LIKE ?1 GROUP BY COALESCE(store_id, id) ORDER BY - CASE WHEN name_lower LIKE ?1 THEN 0 ELSE 1 END, + CASE WHEN name_lower LIKE ?2 THEN 0 ELSE 1 END, + length(name), name COLLATE NOCASE - LIMIT ?2`, - [`%${q}%`, limit ?? 30] + LIMIT ?3`, + [`%${q}%`, `${q}%`, limit ?? 200] ); } @@ -154,6 +155,184 @@ async function addProduct(p) { return r.lastInsertId; } +// --------------------------------------------------------------------------- +// Cooking methods & Recipes +// --------------------------------------------------------------------------- + +async function getCookingMethods() { + return select("SELECT * FROM cooking_methods ORDER BY id"); +} + +async function getCookingMethod(id) { + const rows = await select("SELECT * FROM cooking_methods WHERE id = ?1", [id]); + return rows.length ? rows[0] : null; +} + +async function getRecipes() { + return select( + `SELECT r.*, cm.name as cooking_method_name + FROM recipes r + LEFT JOIN cooking_methods cm ON r.cooking_method_id = cm.id + ORDER BY r.created_at DESC` + ); +} + +async function getRecipe(id) { + const rows = await select( + `SELECT r.*, cm.name as cooking_method_name + FROM recipes r + LEFT JOIN cooking_methods cm ON r.cooking_method_id = cm.id + WHERE r.id = ?1`, + [id] + ); + return rows.length ? rows[0] : null; +} + +async function getRecipeIngredients(recipeId) { + return select( + `SELECT ri.*, p.name as product_name, p.kcal_per_100g, + p.protein_per_100g, p.fat_per_100g, p.carbs_per_100g, + p.fiber_per_100g, p.vit_a_mcg, p.vit_c_mg, p.vit_b1_mg, + p.vit_b2_mg, + cm.name as cooking_method_name + FROM recipe_ingredients ri + LEFT JOIN products p ON ri.product_id = p.id AND ri.product_id > 0 + LEFT JOIN cooking_methods cm ON ri.cooking_method_id = cm.id + WHERE ri.recipe_id = ?1 + ORDER BY ri.id`, + [recipeId] + ); +} + +async function saveRecipe(name, cookingMethodId, servings, notes) { + const r = await execute( + `INSERT INTO recipes (name, cooking_method_id, servings, notes, created_at) + VALUES (?1, ?2, ?3, ?4, datetime('now'))`, + [name, cookingMethodId ?? null, servings ?? 1, notes ?? null] + ); + return r.lastInsertId; +} + +async function updateRecipe(id, name, cookingMethodId, servings, notes) { + await execute( + `UPDATE recipes SET name=?1, cooking_method_id=?2, servings=?3, notes=?4 + WHERE id=?5`, + [name, cookingMethodId ?? null, servings ?? 1, notes ?? null, id] + ); +} + +async function deleteRecipe(id) { + await execute("DELETE FROM recipe_ingredients WHERE recipe_id = ?1", [id]); + await execute("DELETE FROM recipes WHERE id = ?1", [id]); +} + +async function addRecipeIngredient(recipeId, productId, customName, weightG, cookingMethodId) { + const r = await execute( + `INSERT INTO recipe_ingredients (recipe_id, product_id, custom_name, amount_g, cooking_method_id) + VALUES (?1, ?2, ?3, ?4, ?5)`, + [recipeId, productId ?? 0, customName ?? null, weightG, cookingMethodId ?? null] + ); + return r.lastInsertId; +} + +async function deleteRecipeIngredient(id) { + await execute("DELETE FROM recipe_ingredients WHERE id = ?1", [id]); +} + +async function clearRecipeIngredients(recipeId) { + await execute("DELETE FROM recipe_ingredients WHERE recipe_id = ?1", [recipeId]); +} + +// Calculate nutrition for a recipe per serving. +// For each ingredient: (product nutrients / 100) * weight_g, then apply cooking loss. +// Cooking loss is taken from ingredient's own cooking_method_id, or recipe's default. +async function calculateRecipeNutrition(recipeId) { + const recipe = await getRecipe(recipeId); + if (!recipe) return null; + const ingredients = await getRecipeIngredients(recipeId); + const servings = recipe.servings || 1; + + // Cache cooking methods to avoid repeated queries + const cmCache = {}; + async function getCM(cmId) { + if (!cmId) return null; + if (cmCache[cmId]) return cmCache[cmId]; + cmCache[cmId] = await getCookingMethod(cmId); + return cmCache[cmId]; + } + + const totals = { + kcal: 0, protein: 0, fat: 0, carbs: 0, fiber: 0, + vit_a_mcg: 0, vit_c_mg: 0, vit_b1_mg: 0, vit_b2_mg: 0, + }; + + for (const ing of ingredients) { + if (!ing.product_id || ing.product_id === 0) continue; // skip custom ingredients without product data + const factor = (ing.amount_g || 0) / 100; + + // Raw nutrient values for this ingredient + const raw = { + kcal: (ing.kcal_per_100g ?? 0) * factor, + protein: (ing.protein_per_100g ?? 0) * factor, + fat: (ing.fat_per_100g ?? 0) * factor, + carbs: (ing.carbs_per_100g ?? 0) * factor, + fiber: (ing.fiber_per_100g ?? 0) * factor, + vit_a_mcg: (ing.vit_a_mcg ?? 0) * factor, + vit_c_mg: (ing.vit_c_mg ?? 0) * factor, + vit_b1_mg: (ing.vit_b1_mg ?? 0) * factor, + vit_b2_mg: (ing.vit_b2_mg ?? 0) * factor, + }; + + // Apply cooking loss: use ingredient's method, or recipe's default + const cmId = ing.cooking_method_id || recipe.cooking_method_id; + const cm = await getCM(cmId); + if (cm) { + // loss_pct is percentage lost (positive = loss, negative = gain like frying fat) + raw.kcal *= (1 - (cm.kcal_loss_pct ?? 0) / 100); + raw.protein *= (1 - (cm.protein_loss_pct ?? 0) / 100); + raw.fat *= (1 - (cm.fat_loss_pct ?? 0) / 100); + raw.carbs *= (1 - (cm.carbs_loss_pct ?? 0) / 100); + raw.fiber *= (1 - (cm.fiber_loss_pct ?? 0) / 100); + raw.vit_a_mcg *= (1 - (cm.vit_a_loss_pct ?? 0) / 100); + raw.vit_c_mg *= (1 - (cm.vit_c_loss_pct ?? 0) / 100); + raw.vit_b1_mg *= (1 - (cm.vit_b1_loss_pct ?? 0) / 100); + raw.vit_b2_mg *= (1 - (cm.vit_b2_loss_pct ?? 0) / 100); + } + + for (const k of Object.keys(totals)) { + totals[k] += raw[k]; + } + } + + // Per serving + return { + kcal: Math.round(totals.kcal / servings), + protein: Math.round(totals.protein / servings * 10) / 10, + fat: Math.round(totals.fat / servings * 10) / 10, + carbs: Math.round(totals.carbs / servings * 10) / 10, + fiber: Math.round(totals.fiber / servings * 10) / 10, + vit_a_mcg: Math.round(totals.vit_a_mcg / servings * 10) / 10, + vit_c_mg: Math.round(totals.vit_c_mg / servings * 10) / 10, + vit_b1_mg: Math.round(totals.vit_b1_mg / servings * 1000) / 1000, + vit_b2_mg: Math.round(totals.vit_b2_mg / servings * 1000) / 1000, + servings: servings, + totalWeight: ingredients.reduce((s, i) => s + (i.amount_g || 0), 0), + }; +} + +// Log a recipe as a food entry — stores calculated nutrition per serving +async function addFoodFromRecipe(date, time, recipeId) { + const nutr = await calculateRecipeNutrition(recipeId); + if (!nutr) return; + await execute( + `INSERT INTO food_log + (date, time, recipe_id, amount_g, kcal, protein_g, fat_g, carbs_g, fiber_g, note) + VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10)`, + [date, time, recipeId, Math.round(nutr.totalWeight / nutr.servings), + nutr.kcal, nutr.protein, nutr.fat, nutr.carbs, nutr.fiber, null] + ); +} + // --------------------------------------------------------------------------- // Food log // --------------------------------------------------------------------------- @@ -161,7 +340,7 @@ async function addProduct(p) { async function getFoodForDate(date) { return select( `SELECT fl.*, p.name as product_name, p.brand as product_brand, - r.name as recipe_name + COALESCE(p.nutrients_guessed, 0) as nutrients_guessed, r.name as recipe_name FROM food_log fl LEFT JOIN products p ON fl.product_id = p.id LEFT JOIN recipes r ON fl.recipe_id = r.id @@ -484,6 +663,19 @@ window.DB.deleteSupplementLog = deleteSupplementLog; window.DB.getSupplementTotalsForDate = getSupplementTotalsForDate; window.DB.getFoodTotalsForDate = getFoodTotalsForDate; window.DB.getActivityTotalsForDate = getActivityTotalsForDate; +window.DB.getCookingMethods = getCookingMethods; +window.DB.getCookingMethod = getCookingMethod; +window.DB.getRecipes = getRecipes; +window.DB.getRecipe = getRecipe; +window.DB.getRecipeIngredients = getRecipeIngredients; +window.DB.saveRecipe = saveRecipe; +window.DB.updateRecipe = updateRecipe; +window.DB.deleteRecipe = deleteRecipe; +window.DB.addRecipeIngredient = addRecipeIngredient; +window.DB.deleteRecipeIngredient = deleteRecipeIngredient; +window.DB.clearRecipeIngredients = clearRecipeIngredients; +window.DB.calculateRecipeNutrition = calculateRecipeNutrition; +window.DB.addFoodFromRecipe = addFoodFromRecipe; window.DB.createGpsSession = createGpsSession; window.DB.addGpsPoint = addGpsPoint; window.DB.finishGpsSession = finishGpsSession; @@ -509,21 +701,90 @@ async function runMigrations() { await execute("ALTER TABLE gps_points ADD COLUMN seq INTEGER"); } - // Repair old tracks: assign seq to points where it's NULL, ordered by timestamp. - // Uses rowid to break ties when timestamps are identical. - const nullSeqSessions = await select( - "SELECT DISTINCT session_id FROM gps_points WHERE seq IS NULL" - ); - for (const row of nullSeqSessions) { - const pts = await select( - "SELECT rowid, ts FROM gps_points WHERE session_id = ?1 ORDER BY ts ASC, rowid ASC", - [row.session_id] - ); - for (let i = 0; i < pts.length; i++) { - await execute("UPDATE gps_points SET seq = ?1 WHERE rowid = ?2", [i + 1, pts[i].rowid]); - } - console.log(`[db.js] Repaired seq for session ${row.session_id}: ${pts.length} points`); + if (!(await hasColumn("products", "nutrients_guessed"))) { + await execute("ALTER TABLE products ADD COLUMN nutrients_guessed INTEGER DEFAULT 0"); } + + console.log("[db.js] base migrations done, starting cooking_methods..."); + + // --- Cooking methods table --- + await execute(`CREATE TABLE IF NOT EXISTS cooking_methods ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + protein_loss_pct REAL DEFAULT 0, + fat_loss_pct REAL DEFAULT 0, + carbs_loss_pct REAL DEFAULT 0, + fiber_loss_pct REAL DEFAULT 0, + vit_a_loss_pct REAL DEFAULT 0, + vit_c_loss_pct REAL DEFAULT 0, + vit_b1_loss_pct REAL DEFAULT 0, + vit_b2_loss_pct REAL DEFAULT 0, + kcal_loss_pct REAL DEFAULT 0 + )`); + + // Seed cooking methods if empty + const cmCount = await select("SELECT COUNT(*) as cnt FROM cooking_methods"); + if (cmCount[0].cnt === 0) { + const methods = [ + [1, "Без обработки", 0, 0, 0, 0, 0, 0, 0, 0, 0], + [2, "Варка", 2, 5, 3, 0, 0, 50, 30, 10, 0], + [3, "Жарка", 5, -10, 3, 0, 0, 60, 35, 0, 0], + [4, "Тушение", 2, 10, 2, 0, 0, 40, 25, 0, 0], + [5, "Запекание", 3, 8, 2, 0, 0, 45, 20, 0, 0], + [6, "На пару", 1, 2, 1, 0, 0, 25, 15, 0, 0], + ]; + for (const m of methods) { + await execute( + `INSERT INTO cooking_methods (id, name, protein_loss_pct, fat_loss_pct, + carbs_loss_pct, fiber_loss_pct, vit_a_loss_pct, vit_c_loss_pct, + vit_b1_loss_pct, vit_b2_loss_pct, kcal_loss_pct) + VALUES (?1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11)`, + m + ); + } + console.log("[db.js] Seeded 6 cooking methods"); + } + + // --- Recipes table: add missing columns --- + if (!(await hasColumn("recipes", "cooking_method_id"))) { + await execute("ALTER TABLE recipes ADD COLUMN cooking_method_id INTEGER REFERENCES cooking_methods(id)"); + } + if (!(await hasColumn("recipes", "created_at"))) { + await execute("ALTER TABLE recipes ADD COLUMN created_at TEXT DEFAULT (datetime('now'))"); + } + // Ensure servings column exists (Rust creates it as INTEGER, we need REAL for half-portions) + // Column already exists from Rust, so we leave it as is. + + // --- Recipe ingredients: add missing columns --- + if (!(await hasColumn("recipe_ingredients", "custom_name"))) { + await execute("ALTER TABLE recipe_ingredients ADD COLUMN custom_name TEXT"); + } + if (!(await hasColumn("recipe_ingredients", "cooking_method_id"))) { + await execute("ALTER TABLE recipe_ingredients ADD COLUMN cooking_method_id INTEGER REFERENCES cooking_methods(id)"); + } + + console.log("[db.js] recipe migrations done, checking seq repair..."); + + // Repair old tracks: assign seq to points where it's NULL, ordered by timestamp. + // Only runs if there are NULL-seq points (should be one-time after migration). + try { + const nullSeqSessions = await select( + "SELECT DISTINCT session_id FROM gps_points WHERE seq IS NULL" + ); + if (nullSeqSessions.length > 0) { + console.log(`[db.js] Repairing seq for ${nullSeqSessions.length} sessions...`); + for (const row of nullSeqSessions) { + const pts = await select( + "SELECT rowid, ts FROM gps_points WHERE session_id = ?1 ORDER BY ts ASC, rowid ASC", + [row.session_id] + ); + for (let i = 0; i < pts.length; i++) { + await execute("UPDATE gps_points SET seq = ?1 WHERE rowid = ?2", [i + 1, pts[i].rowid]); + } + console.log(`[db.js] Repaired seq for session ${row.session_id}: ${pts.length} points`); + } + } + } catch (e) { console.error("[db.js] seq repair error:", e); } } window.DB._migrationsReady = runMigrations().then(() => { diff --git a/frontend/js/main.js b/frontend/js/main.js index 78c47ff..b0a2884 100644 --- a/frontend/js/main.js +++ b/frontend/js/main.js @@ -29,25 +29,59 @@ async function init() { return; } + // Show loading immediately so the user sees something + app.innerHTML = `

`; + + const bootLabel = document.getElementById("boot-label"); + const bootCount = document.getElementById("seed-count"); + function bootLog(msg) { if (bootLabel) bootLabel.textContent = msg; } + // Wait for DB migrations - if (DB._migrationsReady) await DB._migrationsReady; + try { + bootLog("Миграция базы данных..."); + if (DB._migrationsReady) await DB._migrationsReady; + bootLog("Миграция завершена"); + } catch (e) { bootLog("Ошибка миграции: " + e); } // Recover any orphaned GPS recording session - await GPS.recoverSession(); - - // Import seed products if needed try { - app.innerHTML = `
Проверка продуктов...
`; + bootLog("Проверка GPS..."); + await GPS.recoverSession(); + } catch (e) { /* ignore */ } + + // Import seed products if needed — with progress bar + try { + bootLog("Проверка продуктов..."); + + let unlisten = null; + try { + unlisten = await window.__TAURI__.event.listen("seed_progress", (ev) => { + const { current, total } = ev.payload; + const pct = total > 0 ? Math.round(current / total * 100) : 0; + const fill = document.getElementById("seed-fill"); + if (fill) { + fill.classList.add("determinate"); + fill.style.width = pct + "%"; + } + if (bootCount) bootCount.textContent = current + " / " + total; + bootLog("Обновление продуктов (" + pct + "%)"); + }); + } catch {} + const result = await window.__TAURI__.core.invoke("import_seed_products"); - console.log("[SEED]", result); - if (result.startsWith("imported:")) { - const [_, count, total] = result.split(":"); - console.log(`[SEED] Imported ${count}/${total} products`); - } + bootLog("Продукты: " + result); + + if (unlisten) unlisten(); } catch (e) { - console.error("[SEED] error:", e); + bootLog("Ошибка продуктов: " + e); } + bootLog("Готово, загрузка экрана..."); + // Apply safe area insets (Android status bar / nav bar) try { const insets = await window.__TAURI__.core.invoke("get_safe_insets"); @@ -87,6 +121,7 @@ function renderScreen(name, fromPopstate) { const screens = { today: renderToday, products: renderProducts, + recipes: renderRecipes, gps: renderGpsScreen, recording: renderRecordingInline, supplements: renderSupplements, @@ -148,22 +183,30 @@ function buildNav(active) { async function renderToday(container) { container.innerHTML = `
Загрузка...
`; - const [weights, food, activities, sleep, foodTotals, actTotals, suppLog, suppTotals] = await Promise.all([ - DB.getWeightsForDate(state.date), - DB.getFoodForDate(state.date), - DB.getActivitiesForDate(state.date), - DB.getSleepForDate(state.date), - DB.getFoodTotalsForDate(state.date), - DB.getActivityTotalsForDate(state.date), - DB.getSupplementLogForDate(state.date), - DB.getSupplementTotalsForDate(state.date), - ]); + let weights = [], food = [], activities = [], sleep = [], foodTotals = {}, actTotals = {}, suppLog = [], suppTotals = {}; + try { + [weights, food, activities, sleep, foodTotals, actTotals, suppLog, suppTotals] = await Promise.all([ + DB.getWeightsForDate(state.date), + DB.getFoodForDate(state.date), + DB.getActivitiesForDate(state.date), + DB.getSleepForDate(state.date), + DB.getFoodTotalsForDate(state.date), + DB.getActivityTotalsForDate(state.date), + DB.getSupplementLogForDate(state.date), + DB.getSupplementTotalsForDate(state.date), + ]); + } catch (e) { + console.error("[renderToday] DB error:", e); + container.innerHTML = `
Ошибка загрузки: ${esc(String(e))}
`; + return; + } const bmr = calcBmr(weights); const intake = Math.round(foodTotals.kcal ?? 0); const actKcal = Math.round(actTotals.kcal ?? 0); const expend = bmr != null ? bmr + actKcal : null; const balance = expend != null ? intake - expend : null; + const hasGuessed = food.some(f => f.nutrients_guessed); container.innerHTML = `
@@ -174,7 +217,7 @@ async function renderToday(container) {
- ${intake} + ${intake}${hasGuessed ? "*" : ""} ккал приход
@@ -204,13 +247,31 @@ async function renderToday(container) {
-

Еда

-
+

Еда: Продукты

+ +
    - ${food.map(f => - `
  • + ${food.filter(f => !f.recipe_id).map(f => + `
  • ${f.time ?? ""} - ${esc(f.product_name ?? f.recipe_name ?? f.note ?? "—")} + ${esc(f.product_name ?? f.note ?? "—")} + ${f.amount_g ? `${f.amount_g}г` : ""} + ${f.kcal != null ? Math.round(f.kcal) + " кк" : ""} + +
  • ` + ).join("") || `
  • нет данных
  • `} +
+
+ +
+

Еда: Блюда

+ +
+
    + ${food.filter(f => f.recipe_id).map(f => + `
  • + ${f.time ?? ""} + ${esc(f.recipe_name ?? f.note ?? "—")} ${f.amount_g ? `${f.amount_g}г` : ""} ${f.kcal != null ? Math.round(f.kcal) + " кк" : ""} @@ -292,6 +353,7 @@ async function renderToday(container) { container.querySelector("#add-weight-btn").onclick = () => showWeightModal(); container.querySelector("#add-food-btn").onclick = () => showFoodModal(); + container.querySelector("#add-recipe-food-btn").onclick = () => showFoodFromRecipeModal(); container.querySelector("#add-act-btn").onclick = () => showActivityModal(); container.querySelector("#add-supp-btn").onclick = () => showLogSupplementModal(); container.querySelector("#add-sleep-btn").onclick = () => showSleepModal(sleep); @@ -436,7 +498,7 @@ function showFoodModal() { debounce = setTimeout(async () => { const q = searchInput.value.trim(); if (q.length < 2) { resultsEl.innerHTML = ""; return; } - const results = await DB.searchProducts(q, 10); + const results = await DB.searchProducts(q); resultsEl.innerHTML = results.map(p => `
  • + ${esc(name)}${cm} + ${ing.amount_g} г +
  • `; + }).join(""); + + showModal(` +

    ${esc(recipe.name)}

    + ${recipe.cooking_method_name ? `

    Способ: ${esc(recipe.cooking_method_name)}

    ` : ""} + ${recipe.servings > 1 ? `

    Порций: ${recipe.servings}

    ` : ""} + ${recipe.notes ? `

    ${esc(recipe.notes)}

    ` : ""} + +
    +
    Ингредиенты
    +
      ${ingList || `
    • нет ингредиентов
    • `}
    +
    + + ${nutr ? ` +
    +
    Пищевая ценность (на порцию)
    +
    +
    ${nutr.kcal}ккал
    +
    ${nutr.protein}Б
    +
    ${nutr.fat}Ж
    +
    ${nutr.carbs}У
    +
    ${nutr.fiber}Кл
    +
    +
    ` : ""} + + + + + `, () => {}); + + // Wire up buttons after DOM is ready + const overlay = document.querySelector(".modal-overlay"); + const logBtn = overlay.querySelector("#rd-log"); + const editBtn = overlay.querySelector("#rd-edit"); + const delBtn = overlay.querySelector("#rd-delete"); + + logBtn.onclick = async () => { + await DB.addFoodFromRecipe(state.date, nowTime(), recipeId); + overlay.remove(); + history.back(); + renderScreen(state.screen); + }; + + editBtn.onclick = () => { + overlay.remove(); + history.back(); + showRecipeEditorModal(recipeId); + }; + + delBtn.onclick = async () => { + await DB.deleteRecipe(recipeId); + overlay.remove(); + history.back(); + renderScreen("recipes"); + }; +} + +// --------------------------------------------------------------------------- +// Recipe editor modal — create / edit recipe with ingredient list +// --------------------------------------------------------------------------- + +async function showRecipeEditorModal(recipeId) { + const isNew = !recipeId; + let recipe = isNew ? { name: "", cooking_method_id: null, servings: 1, notes: "" } : await DB.getRecipe(recipeId); + if (!recipe) return; + + const cookingMethods = await DB.getCookingMethods(); + const existingIngredients = isNew ? [] : await DB.getRecipeIngredients(recipeId); + + // Local in-memory ingredient list for editing + // Each item: { product_id, product_name, custom_name, weight_g, cooking_method_id, cooking_method_name } + const ingredients = existingIngredients.map(ing => ({ + product_id: ing.product_id, + product_name: ing.product_name, + custom_name: ing.custom_name, + weight_g: ing.amount_g, + cooking_method_id: ing.cooking_method_id, + cooking_method_name: ing.cooking_method_name, + })); + + const cmOptions = cookingMethods.map(cm => + `` + ).join(""); + + function renderIngredientRows() { + if (ingredients.length === 0) return `
    Добавьте ингредиенты
    `; + return ingredients.map((ing, idx) => { + const name = ing.product_name ?? ing.custom_name ?? "?"; + return `
    +
    + ${esc(name)} + ${ing.weight_g} г + ${ing.cooking_method_name ? `${esc(ing.cooking_method_name)}` : ""} +
    + +
    `; + }).join(""); + } + + // Calculate totals from current in-memory ingredients, with cooking loss + function calcTotals() { + let kcal = 0, protein = 0, fat = 0, carbs = 0; + const defaultMethodId = parseInt(document.querySelector("#re-method")?.value) || 0; + for (const ing of ingredients) { + if (!ing._product) continue; + const f = (ing.weight_g || 0) / 100; + let ik = (ing._product.kcal_per_100g ?? 0) * f; + let ip = (ing._product.protein_per_100g ?? 0) * f; + let ifat = (ing._product.fat_per_100g ?? 0) * f; + let ic = (ing._product.carbs_per_100g ?? 0) * f; + // Apply cooking loss + const cmId = ing.cooking_method_id || defaultMethodId; + const cm = cmId ? cookingMethods.find(m => m.id === cmId) : null; + if (cm) { + ik *= (1 - (cm.kcal_loss_pct ?? 0) / 100); + ip *= (1 - (cm.protein_loss_pct ?? 0) / 100); + ifat *= (1 - (cm.fat_loss_pct ?? 0) / 100); + ic *= (1 - (cm.carbs_loss_pct ?? 0) / 100); + } + kcal += ik; protein += ip; fat += ifat; carbs += ic; + } + const servings = parseFloat(document.querySelector("#re-servings")?.value) || 1; + return { + kcal: Math.round(kcal / servings), + protein: Math.round(protein / servings * 10) / 10, + fat: Math.round(fat / servings * 10) / 10, + carbs: Math.round(carbs / servings * 10) / 10, + }; + } + + function updateTotalsDisplay() { + const el = document.querySelector("#re-totals"); + if (!el) return; + const t = calcTotals(); + el.innerHTML = `${t.kcal} кк | Б${t.protein} Ж${t.fat} У${t.carbs}`; + } + + showModal(` +

    ${isNew ? "Новый рецепт" : "Редактирование рецепта"}

    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    + +
    +
    +
    Ингредиенты
    + +
    +
    ${renderIngredientRows()}
    +
    + +
    + `, async overlay => { + const name = overlay.querySelector("#re-name").value.trim(); + if (!name) return false; + if (ingredients.length === 0) return false; + + const methodId = parseInt(overlay.querySelector("#re-method").value) || null; + const servings = parseFloat(overlay.querySelector("#re-servings").value) || 1; + const notes = overlay.querySelector("#re-notes").value.trim() || null; + + let rid; + if (isNew) { + rid = await DB.saveRecipe(name, methodId, servings, notes); + } else { + rid = recipeId; + await DB.updateRecipe(rid, name, methodId, servings, notes); + await DB.clearRecipeIngredients(rid); + } + + for (const ing of ingredients) { + await DB.addRecipeIngredient( + rid, ing.product_id, ing.custom_name, ing.weight_g, ing.cooking_method_id + ); + } + renderScreen("recipes"); + }); + + // Set initial method value + const overlay = document.querySelector(".modal-overlay"); + if (recipe.cooking_method_id) { + overlay.querySelector("#re-method").value = recipe.cooking_method_id; + } + + // Servings or method change recalculates totals + overlay.querySelector("#re-servings").oninput = updateTotalsDisplay; + overlay.querySelector("#re-method").onchange = updateTotalsDisplay; + + // Bind delete buttons and add ingredient button + function rebindIngredients() { + const listEl = overlay.querySelector("#re-ing-list"); + listEl.innerHTML = renderIngredientRows(); + listEl.querySelectorAll(".recipe-ing-del").forEach(btn => { + btn.onclick = (e) => { + e.stopPropagation(); + const idx = parseInt(btn.dataset.idx); + ingredients.splice(idx, 1); + rebindIngredients(); + updateTotalsDisplay(); + }; + }); + } + + rebindIngredients(); + + // Add ingredient button — shows inline search + overlay.querySelector("#re-add-ing").onclick = () => { + showAddIngredientModal(cookingMethods, (newIng) => { + ingredients.push(newIng); + rebindIngredients(); + updateTotalsDisplay(); + }); + }; + + // Load product data for existing ingredients (for nutrition calc) + for (let i = 0; i < ingredients.length; i++) { + if (ingredients[i].product_id) { + ingredients[i]._product = await DB.getProduct(ingredients[i].product_id); + } + } + updateTotalsDisplay(); +} + +// --------------------------------------------------------------------------- +// Add ingredient sub-modal — search product, set weight, optional cooking method +// --------------------------------------------------------------------------- + +function showAddIngredientModal(cookingMethods, onAdd) { + let selectedProduct = null; + + const cmOptions = cookingMethods.map(cm => + `` + ).join(""); + + showModal(` +

    Добавить ингредиент

    +
    + + + +
    + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    + `, async overlay => { + const weight = parseFloat(overlay.querySelector("#ing-weight").value); + if (isNaN(weight) || weight <= 0) return false; + + const methodId = parseInt(overlay.querySelector("#ing-method").value) || null; + const methodName = methodId + ? cookingMethods.find(cm => cm.id === methodId)?.name ?? null + : null; + + if (selectedProduct) { + onAdd({ + product_id: selectedProduct.id, + product_name: selectedProduct.name, + custom_name: null, + weight_g: weight, + cooking_method_id: methodId, + cooking_method_name: methodName, + _product: selectedProduct, + }); + } else { + const custom = overlay.querySelector("#ing-custom").value.trim(); + if (!custom) return false; + onAdd({ + product_id: null, + product_name: null, + custom_name: custom, + weight_g: weight, + cooking_method_id: methodId, + cooking_method_name: methodName, + _product: null, + }); + } + }); + + // Wire up product search — use the LAST modal overlay (this one, not the parent recipe editor) + const overlays = document.querySelectorAll(".modal-overlay"); + const overlay = overlays[overlays.length - 1]; + const searchInput = overlay.querySelector("#ing-search"); + const resultsEl = overlay.querySelector("#ing-results"); + const selectedEl = overlay.querySelector("#ing-selected"); + const customBlock = overlay.querySelector("#ing-custom-block"); + let debounce = null; + + searchInput.oninput = () => { + clearTimeout(debounce); + debounce = setTimeout(async () => { + const q = searchInput.value.trim(); + if (q.length < 2) { resultsEl.innerHTML = ""; customBlock.style.display = ""; return; } + customBlock.style.display = "none"; + const results = await DB.searchProducts(q, 15); + resultsEl.innerHTML = results.map(p => + `` + ).join("") || `
    Не найдено
    `; + + resultsEl.querySelectorAll(".modal-prod-item").forEach(item => { + item.onclick = async () => { + const pid = parseInt(item.dataset.pid); + selectedProduct = await DB.getProduct(pid); + resultsEl.innerHTML = ""; + searchInput.value = ""; + selectedEl.style.display = "block"; + selectedEl.innerHTML = `${esc(selectedProduct.name)}`; + customBlock.style.display = "none"; + + selectedEl.onclick = () => { + selectedProduct = null; + selectedEl.style.display = "none"; + customBlock.style.display = ""; + searchInput.focus(); + }; + }; + }); + }, 300); + }; + + searchInput.focus(); +} + +// --------------------------------------------------------------------------- +// Food modal: add recipe option +// --------------------------------------------------------------------------- + +function showFoodFromRecipeModal() { + // Show a list of saved recipes to quickly log one + showModal(` +

    Записать рецепт

    +
    Загрузка...
    +
    + + +
    + `, async overlay => { + const selected = overlay.querySelector(".recipe-pick-item.selected"); + if (!selected) return false; + const rid = parseInt(selected.dataset.rid); + const time = overlay.querySelector("#rfr-time").value; + await DB.addFoodFromRecipe(state.date, time, rid); + }); + + // Load recipes into the list + const overlay = document.querySelector(".modal-overlay"); + const listEl = overlay.querySelector("#rfr-list"); + + (async () => { + const recipes = await DB.getRecipes(); + if (!recipes.length) { + listEl.innerHTML = `
    Нет рецептов. Создайте в Продукты → Рецепты.
    `; + return; + } + + // Calculate nutrition for display + const items = []; + for (const r of recipes) { + const n = await DB.calculateRecipeNutrition(r.id); + items.push({ ...r, nutr: n }); + } + + listEl.innerHTML = items.map(r => + `
    + ${esc(r.name)} + ${r.nutr ? `${r.nutr.kcal} кк` : ""} +
    ` + ).join(""); + + listEl.querySelectorAll(".recipe-pick-item").forEach(item => { + item.onclick = () => { + listEl.querySelectorAll(".recipe-pick-item").forEach(i => i.classList.remove("selected")); + item.classList.add("selected"); + }; + }); + })(); +} + // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // GPS screen — map, recording, sessions list, GPX import diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index a9af8e7..2290399 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -2,6 +2,7 @@ use tauri_plugin_sql::{Migration, MigrationKind}; #[allow(unused_imports)] use tauri::Manager; +use tauri::Emitter; use serde::Serialize; #[derive(Serialize)] @@ -83,40 +84,45 @@ fn import_seed_products(app: tauri::AppHandle) -> Result { // Find seed DB — try multiple locations let data_dir = app.path().app_data_dir().map_err(|e| e.to_string())?; let seed_in_data = data_dir.join("products_seed.db"); - let seed_in_files = data_dir.join("files").join("products_seed.db"); + // Always try to refresh seed DB from bundled assets (resource_dir). + // This ensures app updates deliver new seed data even if an old copy exists. + let resource_dir = app.path().resource_dir().unwrap_or_default(); + let seed_resource = resource_dir.join("data").join("products_seed.db"); + if seed_resource.exists() { + // Overwrite the local copy with the bundled one (may be newer) + let _ = std::fs::copy(&seed_resource, &seed_in_data); + } + let seed_path = if seed_in_data.exists() { seed_in_data } else if seed_in_files.exists() { seed_in_files } else { - let resource_dir = app.path().resource_dir().unwrap_or_default(); - let seed_resource = resource_dir.join("data").join("products_seed.db"); - if seed_resource.exists() { - std::fs::copy(&seed_resource, &seed_in_data.clone()).map_err(|e| e.to_string())?; - seed_in_data - } else { - return Err(format!("Seed DB not found. Checked: {:?}, {:?}", seed_in_data, seed_in_files)); - } + return Err(format!("Seed DB not found. Checked: {:?}, {:?}", seed_in_data, seed_in_files)); }; let seed_db = rusqlite::Connection::open(&seed_path).map_err(|e| e.to_string())?; - // Read seed version let seed_version: i64 = seed_db.query_row( "SELECT version FROM seed_meta LIMIT 1", [], |r| r.get(0) ).map_err(|e| e.to_string())?; - // Open main DB — check multiple locations (Tauri may put it in different dirs) + // tauri-plugin-sql may store DB in app_config_dir (desktop: ~/.config/...) + // or app_data_dir (desktop: ~/.local/share/...). Check both. + let config_dir = app.path().app_config_dir().unwrap_or_default(); let main_path = { - let p1 = data_dir.join("baldav.db"); - let p2 = data_dir.join("..").join("baldav.db"); - if p1.exists() { p1 } else if p2.exists() { p2 } else { p1 } + let p_config = config_dir.join("baldav.db"); + let p_data = data_dir.join("baldav.db"); + let p_parent = data_dir.join("..").join("baldav.db"); + if p_config.exists() { p_config } + else if p_data.exists() { p_data } + else if p_parent.exists() { p_parent } + else { p_data } }; let main_db = rusqlite::Connection::open(&main_path).map_err(|e| e.to_string())?; - // Check current seed version in main DB let current_version: i64 = main_db.query_row( "SELECT COALESCE((SELECT value FROM profile WHERE key='seed_version'), '0')", [], |r| { @@ -129,48 +135,99 @@ fn import_seed_products(app: tauri::AppHandle) -> Result { return Ok(format!("up-to-date:v{}", current_version)); } - // Count products in seed let total: usize = seed_db.query_row("SELECT COUNT(*) FROM products", [], |r| r.get(0)) .map_err(|e| e.to_string())?; - // Import products in batches + // Emit initial progress + let _ = app.emit("seed_progress", serde_json::json!({"current": 0, "total": total})); + + // Ensure all columns exist in main DB (including micronutrients from ION import) + let extra_cols = [ + "composition TEXT", "name_lower TEXT", "category TEXT", + "sodium_mg REAL", "potassium_mg REAL", "calcium_mg REAL", + "magnesium_mg REAL", "phosphorus_mg REAL", "iron_mg REAL", + "vit_a_mcg REAL", "vit_b1_mg REAL", "vit_b2_mg REAL", + "vit_b3_mg REAL", "vit_c_mg REAL", "vit_e_mg REAL", "carotene_mcg REAL", + "nutrients_guessed INTEGER DEFAULT 0", + ]; + for col in &extra_cols { + let _ = main_db.execute(&format!("ALTER TABLE products ADD COLUMN {}", col), []); + } + + // Read ALL columns from seed DB including micronutrients let mut stmt = seed_db.prepare( - "SELECT name, brand, kcal_per_100g, protein_per_100g, fat_per_100g, carbs_per_100g, fiber_per_100g, composition, source, store_id, name_lower, weight_g FROM products" + "SELECT name, brand, kcal_per_100g, protein_per_100g, fat_per_100g, + carbs_per_100g, fiber_per_100g, composition, source, store_id, + name_lower, weight_g, category, + sodium_mg, potassium_mg, calcium_mg, magnesium_mg, phosphorus_mg, + iron_mg, vit_a_mcg, vit_b1_mg, vit_b2_mg, vit_b3_mg, vit_c_mg, + vit_e_mg, carotene_mcg, COALESCE(nutrients_guessed, 0) + FROM products" ).map_err(|e| e.to_string())?; let mut inserted = 0usize; + let mut processed = 0usize; + let rows = stmt.query_map([], |row| { + // 26 columns: 0-12 strings/basic, 13-25 micronutrients Ok(( - row.get::<_, Option>(0)?, - row.get::<_, Option>(1)?, - row.get::<_, Option>(2)?, - row.get::<_, Option>(3)?, - row.get::<_, Option>(4)?, - row.get::<_, Option>(5)?, - row.get::<_, Option>(6)?, - row.get::<_, Option>(7)?, - row.get::<_, Option>(8)?, - row.get::<_, Option>(9)?, - row.get::<_, Option>(10)?, - row.get::<_, Option>(11)?, + row.get::<_, Option>(0)?, // name + row.get::<_, Option>(1)?, // brand + row.get::<_, Option>(2)?, // kcal + row.get::<_, Option>(3)?, // protein + row.get::<_, Option>(4)?, // fat + row.get::<_, Option>(5)?, // carbs + row.get::<_, Option>(6)?, // fiber + row.get::<_, Option>(7)?, // composition + row.get::<_, Option>(8)?, // source + row.get::<_, Option>(9)?, // store_id + row.get::<_, Option>(10)?, // name_lower + row.get::<_, Option>(11)?, // weight_g + row.get::<_, Option>(12)?, // category + row.get::<_, Option>(13)?, // sodium_mg + row.get::<_, Option>(14)?, // potassium_mg + row.get::<_, Option>(15)?, // calcium_mg + row.get::<_, Option>(16)?, // magnesium_mg + row.get::<_, Option>(17)?, // phosphorus_mg + row.get::<_, Option>(18)?, // iron_mg + row.get::<_, Option>(19)?, // vit_a_mcg + row.get::<_, Option>(20)?, // vit_b1_mg + row.get::<_, Option>(21)?, // vit_b2_mg + row.get::<_, Option>(22)?, // vit_b3_mg + row.get::<_, Option>(23)?, // vit_c_mg + row.get::<_, Option>(24)?, // vit_e_mg + row.get::<_, Option>(25)?, // carotene_mcg + row.get::<_, Option>(26)?, // nutrients_guessed )) }).map_err(|e| e.to_string())?; - // Ensure columns exist - let _ = main_db.execute("ALTER TABLE products ADD COLUMN composition TEXT", []); - let _ = main_db.execute("ALTER TABLE products ADD COLUMN name_lower TEXT", []); - main_db.execute("BEGIN", []).map_err(|e| e.to_string())?; for row in rows { let r = row.map_err(|e| e.to_string())?; main_db.execute( - "INSERT OR IGNORE INTO products (name, brand, kcal_per_100g, protein_per_100g, fat_per_100g, carbs_per_100g, fiber_per_100g, composition, source, store_id, name_lower, weight_g) VALUES (?1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12)", - rusqlite::params![r.0, r.1, r.2, r.3, r.4, r.5, r.6, r.7, r.8, r.9, r.10, r.11], + "INSERT OR IGNORE INTO products ( + name, brand, kcal_per_100g, protein_per_100g, fat_per_100g, + carbs_per_100g, fiber_per_100g, composition, source, store_id, + name_lower, weight_g, category, + sodium_mg, potassium_mg, calcium_mg, magnesium_mg, phosphorus_mg, + iron_mg, vit_a_mcg, vit_b1_mg, vit_b2_mg, vit_b3_mg, vit_c_mg, + vit_e_mg, carotene_mcg, nutrients_guessed + ) VALUES (?1,?2,?3,?4,?5,?6,?7,?8,?9,?10,?11,?12,?13,?14,?15,?16,?17,?18,?19,?20,?21,?22,?23,?24,?25,?26,?27)", + rusqlite::params![ + r.0, r.1, r.2, r.3, r.4, r.5, r.6, r.7, r.8, r.9, + r.10, r.11, r.12, r.13, r.14, r.15, r.16, r.17, r.18, r.19, + r.20, r.21, r.22, r.23, r.24, r.25, r.26 + ], ).map_err(|e| e.to_string())?; inserted += 1; + processed += 1; + + // Emit progress every 200 rows + if processed % 200 == 0 { + let _ = app.emit("seed_progress", serde_json::json!({"current": processed, "total": total})); + } } - // Update seed version main_db.execute( "INSERT OR REPLACE INTO profile (key, value) VALUES ('seed_version', ?1)", [seed_version.to_string()], @@ -178,6 +235,41 @@ fn import_seed_products(app: tauri::AppHandle) -> Result { main_db.execute("COMMIT", []).map_err(|e| e.to_string())?; + // Sync enriched data for EXISTING products (INSERT OR IGNORE skips them). + // ATTACH seed DB and run bulk UPDATE to copy nutrients_guessed flag and micronutrients. + let seed_str = seed_path.to_str().unwrap_or_default().to_string(); + if let Ok(_) = main_db.execute("ATTACH DATABASE ?1 AS seed", rusqlite::params![seed_str]) { + // Sync nutrients_guessed flag + let _ = main_db.execute_batch( + "UPDATE main.products SET nutrients_guessed = 1 + WHERE nutrients_guessed IS NULL OR nutrients_guessed = 0 + AND name_lower IN (SELECT s.name_lower FROM seed.products s WHERE s.nutrients_guessed = 1)" + ); + // Sync micronutrients for products that have them in seed but not in main + let _ = main_db.execute_batch( + "UPDATE main.products SET + sodium_mg = COALESCE(sodium_mg, (SELECT s.sodium_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + potassium_mg = COALESCE(potassium_mg, (SELECT s.potassium_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + calcium_mg = COALESCE(calcium_mg, (SELECT s.calcium_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + magnesium_mg = COALESCE(magnesium_mg, (SELECT s.magnesium_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + phosphorus_mg= COALESCE(phosphorus_mg,(SELECT s.phosphorus_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + iron_mg = COALESCE(iron_mg, (SELECT s.iron_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + vit_a_mcg = COALESCE(vit_a_mcg, (SELECT s.vit_a_mcg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + vit_b1_mg = COALESCE(vit_b1_mg, (SELECT s.vit_b1_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + vit_b2_mg = COALESCE(vit_b2_mg, (SELECT s.vit_b2_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + vit_b3_mg = COALESCE(vit_b3_mg, (SELECT s.vit_b3_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + vit_c_mg = COALESCE(vit_c_mg, (SELECT s.vit_c_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + vit_e_mg = COALESCE(vit_e_mg, (SELECT s.vit_e_mg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)), + carotene_mcg = COALESCE(carotene_mcg, (SELECT s.carotene_mcg FROM seed.products s WHERE s.name_lower = main.products.name_lower LIMIT 1)) + WHERE main.products.sodium_mg IS NULL + AND main.products.name_lower IN (SELECT s2.name_lower FROM seed.products s2 WHERE s2.sodium_mg IS NOT NULL)" + ); + let _ = main_db.execute("DETACH DATABASE seed", []); + } + + // Final progress + let _ = app.emit("seed_progress", serde_json::json!({"current": total, "total": total})); + Ok(format!("imported:{}:{}", inserted, total)) }