From b6b32ede71dfdda7952b4aeb457021b9cc8380ae Mon Sep 17 00:00:00 2001 From: Kan-Ru Chen Date: Sun, 15 Dec 2024 10:14:46 +0900 Subject: [PATCH 1/2] feat: change icon based on system theme --- ChewingTextService/ChewingTextService.cpp | 41 ++++++++++++++++++++-- ChewingTextService/ChewingTextService.h | 1 + ChewingTextService/ChewingTextService.rc | Bin 9990 -> 10246 bytes ChewingTextService/chi.ico | Bin 318 -> 318 bytes ChewingTextService/chi_dark.ico | Bin 0 -> 318 bytes ChewingTextService/eng.ico | Bin 1406 -> 318 bytes ChewingTextService/eng_dark.ico | Bin 0 -> 1406 bytes ChewingTextService/resource.h | 2 ++ scripts/build_installer_debug.bat | 2 +- 9 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 ChewingTextService/chi_dark.ico create mode 100644 ChewingTextService/eng_dark.ico diff --git a/ChewingTextService/ChewingTextService.cpp b/ChewingTextService/ChewingTextService.cpp index 5617cb6..c157d10 100644 --- a/ChewingTextService/ChewingTextService.cpp +++ b/ChewingTextService/ChewingTextService.cpp @@ -26,7 +26,10 @@ #include #include #include +#include #include +#include +#include #include #include @@ -106,7 +109,11 @@ TextService::TextService(ImeModule* module): // Windows 8 systray IME mode icon if(IsWindows8OrGreater()) { imeModeIcon_ = new Ime::LangBarButton(this, _GUID_LBI_INPUTMODE, ID_MODE_ICON); - imeModeIcon_->setIcon(IDI_ENG); + if (isLightTheme()) { + imeModeIcon_->setIcon(IDI_ENG); + } else { + imeModeIcon_->setIcon(IDI_ENG_DARK); + } addButton(imeModeIcon_); } @@ -885,6 +892,26 @@ void TextService::hideMessage() { } } +bool TextService::isLightTheme() { + DWORD value = 0; + DWORD len = sizeof(value); + LSTATUS st = RegGetValueW( + HKEY_CURRENT_USER, + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize", + L"AppsUseLightTheme", + RRF_RT_REG_DWORD, + nullptr, + &value, + &len + ); + if (st != ERROR_SUCCESS) { + // assume light theme + return true; + } + // 0 = dark theme, 1 = light theme + return value > 0; +} + void TextService::updateLangButtons() { if(!chewingContext_) return; @@ -892,11 +919,19 @@ void TextService::updateLangButtons() { int langMode = ::chewing_get_ChiEngMode(chewingContext_); if(langMode != langMode_) { langMode_ = langMode; - switchLangButton_->setIcon(langMode == CHINESE_MODE ? IDI_CHI : IDI_ENG); + if (isLightTheme()) { + switchLangButton_->setIcon(langMode == CHINESE_MODE ? IDI_CHI : IDI_ENG); + } else { + switchLangButton_->setIcon(langMode == CHINESE_MODE ? IDI_CHI_DARK : IDI_ENG_DARK); + } if(imeModeIcon_) { // FIXME: we need a better set of icons to meet the // WIndows 8 IME guideline and UX guidelines. - imeModeIcon_->setIcon(langMode == CHINESE_MODE ? IDI_CHI : IDI_ENG); + if (isLightTheme()) { + imeModeIcon_->setIcon(langMode == CHINESE_MODE ? IDI_CHI : IDI_ENG); + } else { + imeModeIcon_->setIcon(langMode == CHINESE_MODE ? IDI_CHI_DARK : IDI_ENG_DARK); + } } } diff --git a/ChewingTextService/ChewingTextService.h b/ChewingTextService/ChewingTextService.h index a298d05..18d1891 100644 --- a/ChewingTextService/ChewingTextService.h +++ b/ChewingTextService/ChewingTextService.h @@ -95,6 +95,7 @@ class TextService: public Ime::TextService { void showMessage(Ime::EditSession* session, std::wstring message, int duration = 3); void hideMessage(); + bool isLightTheme(); void updateLangButtons(); // update status of language bar buttons // reload configurations if changes are detected diff --git a/ChewingTextService/ChewingTextService.rc b/ChewingTextService/ChewingTextService.rc index 2c43609c27d401fcb07ec9d56f7d11d260a65923..c13a7576b05475cb8daf8130b9cf4b123a066ed0 100644 GIT binary patch delta 95 zcmZqkYYW&giHp~R!IL4L!G*z*A&9|yvY>?YZ5U@Tn?uk0`(hAQB}L z@&8tsS!?`z7P68jTv1gCDxp;Py{`CH>hy8ed+x5ze!4BdQLuMFBHR4peHyZErN@2b E1ke5$DF6Tf literal 318 zcmZ`zu?>JQ408n%Bb}I$Song|=xLp}gA=%bU^hsBfTVWZ)NKOvVw_Z~l% XIVNDgVXZhju?!cq&&}zZHM`>gk_<-w diff --git a/ChewingTextService/chi_dark.ico b/ChewingTextService/chi_dark.ico new file mode 100644 index 0000000000000000000000000000000000000000..1c931077cbaed84e439662ba18a2eed446d0b059 GIT binary patch literal 318 zcmZ`zu?>JQ408n%Bb}I$Song|=xLp}gA=%bU^hsBfTVWZ)NKOvVw_Z~l% XIVNDgVXZhju?!cq&&}zZHM`>gk_<-w literal 0 HcmV?d00001 diff --git a/ChewingTextService/eng.ico b/ChewingTextService/eng.ico index cf68a5369800b190d6662894958871961725d6df..78742de5f21f48e6258fb17b262ab1f74a82a0eb 100644 GIT binary patch literal 318 zcma)$F%rTs3nN z9DqqkVHAA7Wwq9=_J6(7%wO7)q8JjTBdQ#wNM;k&v+G|ENjLvwm5smmd4F4G{xwU# dYj74W4>$|geaEtZaXWUbCs?2T?Yslez5u757ry`i literal 1406 zcmai!u}d6L5XQeF1}Z+B!LuZ{0pv1 z5vSHB7QsT0K(sTYnEc*s&Ldc4&)MDicHVryop+}+;IqCij-g&Wmd4yYCz|w>7@+4d z=r8y8_jxDrr>^TSoVnF}KG*!)TsL1oYGq|b!{JbCYik;fMjDUD+Su68=H{lhwzjmp zyQ}GRs_pGC_5D;<9NjFAzAsD$^ap&6Q?S<|8~Dd+{g zpcnLl-j-GLie5=7dPV0VM|X5bcLYZd@*odSXX9-68;y)brcl~*G8ha7gTY`(Bp3_^ zgTY`h7!nf(gTY`h7z~C)hrwVl7z_r3!2%5qgTop}L{0#OYx`8f3H0{LuoTP-MunyY zmK*~Q3pWLp0!xksjsi!4qrg$%$Wg&jU??yY7~1Fx90i5~gX0yPbA*$`9K2X=H;Wt=hsA+#4D%}hi?h%vas-EkKY~8&iNoS; z9?8L%H=uyZE9Fe_SP0=%b(B9sj_V@R7aB!g6Y^KxGQ=Ocg==}U#7Z(@0yu8%)^|fwq zZ*_Nfr<>oQ_s7TljytB?ego}7zsy?SmWEaz926{%)m4g?2j#5$yQKAO`JzdGN7g*@ zVgG#5qCIH!|Bpq}MeTz;yDa-~mrQ;Al0Ne#ee_lTym6buod1Iz@#eeqnmByYNB%C@ U(|40Tj$TSfzxvwlQI1o80FEfyy8r+H diff --git a/ChewingTextService/eng_dark.ico b/ChewingTextService/eng_dark.ico new file mode 100644 index 0000000000000000000000000000000000000000..cf68a5369800b190d6662894958871961725d6df GIT binary patch literal 1406 zcmai!u}d6L5XQeF1}Z+B!LuZ{0pv1 z5vSHB7QsT0K(sTYnEc*s&Ldc4&)MDicHVryop+}+;IqCij-g&Wmd4yYCz|w>7@+4d z=r8y8_jxDrr>^TSoVnF}KG*!)TsL1oYGq|b!{JbCYik;fMjDUD+Su68=H{lhwzjmp zyQ}GRs_pGC_5D;<9NjFAzAsD$^ap&6Q?S<|8~Dd+{g zpcnLl-j-GLie5=7dPV0VM|X5bcLYZd@*odSXX9-68;y)brcl~*G8ha7gTY`(Bp3_^ zgTY`h7!nf(gTY`h7z~C)hrwVl7z_r3!2%5qgTop}L{0#OYx`8f3H0{LuoTP-MunyY zmK*~Q3pWLp0!xksjsi!4qrg$%$Wg&jU??yY7~1Fx90i5~gX0yPbA*$`9K2X=H;Wt=hsA+#4D%}hi?h%vas-EkKY~8&iNoS; z9?8L%H=uyZE9Fe_SP0=%b(B9sj_V@R7aB!g6Y^KxGQ=Ocg==}U#7Z(@0yu8%)^|fwq zZ*_Nfr<>oQ_s7TljytB?ego}7zsy?SmWEaz926{%)m4g?2j#5$yQKAO`JzdGN7g*@ zVgG#5qCIH!|Bpq}MeTz;yDa-~mrQ;Al0Ne#ee_lTym6buod1Iz@#eeqnmByYNB%C@ U(|40Tj$TSfzxvwlQI1o80FEfyy8r+H literal 0 HcmV?d00001 diff --git a/ChewingTextService/resource.h b/ChewingTextService/resource.h index 945f7b7..c927f68 100644 --- a/ChewingTextService/resource.h +++ b/ChewingTextService/resource.h @@ -17,6 +17,8 @@ #define IDI_FULL_SHAPE 106 #define IDS_CONFIG_TITLE 106 #define IDI_HALF_SHAPE 107 +#define IDI_CHI_DARK 108 +#define IDI_ENG_DARK 109 #define IDR_MENU1 108 #define IDR_MENU2 109 #define IDR_MENU 109 diff --git a/scripts/build_installer_debug.bat b/scripts/build_installer_debug.bat index 6998444..6bc3d78 100644 --- a/scripts/build_installer_debug.bat +++ b/scripts/build_installer_debug.bat @@ -13,7 +13,7 @@ mkdir build\installer mkdir build\installer\assets copy assets\* build\installer\assets\ copy installer\* build\installer\ -copy ChewingTextService\mainicon2.ico build\installer\chewing.ico +copy ChewingTextService\im.chewing.Chewing.ico build\installer\chewing.ico mkdir build\installer\Dictionary copy libchewing\data\*.dat build\installer\Dictionary\ copy build\x64\libchewing\data\*.dat build\installer\Dictionary\ From 01c44e1126d08327398cf63c0c7cae500d5526d2 Mon Sep 17 00:00:00 2001 From: Kan-Ru Chen Date: Sun, 15 Dec 2024 11:02:30 +0900 Subject: [PATCH 2/2] refactor: convert .rc file to UTF-8 encoding --- ChewingPreferences/ChewingPreferences.rc | Bin 31312 -> 16823 bytes ChewingTextService/ChewingTextService.rc | Bin 10246 -> 5321 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/ChewingPreferences/ChewingPreferences.rc b/ChewingPreferences/ChewingPreferences.rc index acfe3f55f9d43618e592cbe59c96aaa0853e4afb..62924d5e2907a238b791c1925af7d9a03a20730e 100644 GIT binary patch literal 16823 zcmc&+c~cwLmj9nmaYw0g;YtUzu}$TrN=pMhG-{2y1$HV`8d;V>6CqKOcurEODPljK zS%YU{<6tx1LL9u}C5bV{_J;}GlK#q9nBVQ&YISRA;R>#iH+1`+<(_lyxo5fUk7f(W zshK26<=1!UtC_+b> zbL3x`p3Zg$hEG99vJ{Vn_(WI~Pm*uHCDw;ZAU2W+jVdR*#6V;u9vI;X{Q*NlgqL}a z$nl_cAfdzpVL=h3NI=wS+2kNZCZsVweC(^IR$x&%zIJtatRti=$d3q-E`pE6WWR8` zy7)-AtIOMVvT5m7b1~t3o#9-r&~zH6HWe+T&!r3LTq<4cDWtqEmx<-0bnYy)f)CbV z?wy*j=pH@B4;2o`2&sHdmy_``IiD#_lWhKcx>zDYnEXANolBG1Y%&EGa4u88Xem$9 zx#Cd;VJ2_N^-jJ_e?6?o0;iJF_HEdPkX=w+|MyeNf#28(?q&Z#4>eJ zO~{D}J|@Gs6GCKIBE}c`a~ByFMBW%6UO(q?b3Tusb9a$wObW+CO3P;yXjlx4$m0Qd zjJUt@ofGK>rJE)Z=7aGOhF710#~wUQXNzh3sGE*b3u42PjG2D7+wB+GfO0y@V+hl9 zCb47dBlT?&6s6D@aml3uY;`!3O$)hm5GvI}eUko-O?3O|uQS*|bdY}R)9A=VK#cRm z70S=dCUaj$k~3)+hp$X|bwJBhN;sTmCk@0-r)wKes|zoyw_a2Z_SA)+wHH?_JCD^T z*W1DyDxsC#Fm2OE%Oiv}Vq5SOEh0N4+Nncm( z3+WD>Bwn}I-x5#)Kn67FQge2Zgz~v_nJIXOmVnVh{_I?;RO9u%2yW1azdS=- zvT|DFNmx$EyfQ3B6!IF;&VI z6LYg?^XGFuuZxQ_aR%ez@M%F8DIE!j!bl`0jEqtl>jR*!Tnfx|KWw9I)teOMKo zyvMKe(n>hh+ut2UI5;ehCY>mvFDf3d_ju$(@qJJMdHbCtWZ294a%E>(`);>#Z=?L+ znznI?8qxMI>eKZGBl5esfkAGttrbyQPRPRNx{Q2-e@R9rt`8`mLC)W2kx!E~m#^#` z?yaepSF3l{D@)IrDKVi{*M3v~XVu(uhTTh|6w~*T5Dq9j=L*i1O7sW~vTYO^*ot0i>aF*jdS|)3GOz9JX*-*Y5Bmd$L-+; zyfuMDFB{3@DKTqf?q$6g>bl*o;RLBUbq_K@w<=t3@R_Z(w;1rAKj~L-fDjaA%rzfp}|3? zW9abp&xd=<+K;;oVdc(F`T9Rth^Rfd^5?;7<-tt^jpZAA<*UD!pWab7p8R=m{fiuq zufx6h%AHkAR~LR!pS-GGd;>IiNdA~#RTuwRy>nB&yjI?M_Q(9%-!P;--e#kRdn*9a zmgcpsB}Nr9fbqi4;j3Hf`mW9rMXjzs(5}1%861mjBKT34E>-S7XJ56gifY4hxVE_a4KGYMU28N?Tn5ujD@n zJO=%`b&JDuK!QKT;wzBn zPbJ{;#wD2^|F!RuI4MNJ(j*I&2Ae~rx|w<`R@$^{|BFeNxe7QC{PMt~^|#*R9_wr` z=flzGG#wEQjiVTHAJ^w~p6;_wNA%I>Jl$`d-p36gnsZ{N&pI9U;qAbDzjZz^`+d&% z2dwj{2s^MpXq}J43=xzg|K`3kbcOxq^Kku+Fm5Xij|UJP7NI21*g&Ypy!Z`ywK0iM za<*s#p%nZBs4}z#k*71~keSv^1LqB*YrwQ8^Y6C#eH;QQ@a15tlQw{Ut{?Jp1mJA| z103=kXMmUufQA8ZO^zfK8w3kroFPtIAz-ndJ}A+VM%)GgB_N1*h7fEJIH!l;&K+q; zHVEK{9-JYfHV8lG^>rR)wm4;>Kp8| z4g^d#7^=X*4pfG05Ol}ZPd_u-=09&6aQg-ja1RW$3b+xG9KFngI9L1e2P3-E>!y}K z8ByU^5;Tsy0Q%)%i`D95e~U%o12h497lZB2H&tD?i=A z1ePGslwy0IMezuv5%;T4*R)GZn1Eu%;ofst%Hi7;_1*;}2{Xhj%pxh!7B@f~!y?HS zzQI8G@e(N6vk&d|fqJm6zFVl?UWCfj%ZrG{0iz^|at1H}P#1njT#tSpsVrW?D5-Az zzyOefFwWGqW%bS7^8Nkt<{Mf=S-AM;!3_Ygd<0yONRKNk&sbdsOEse-qqv9djT4C`its!#>T^;w#-lh{58?ws zDXug{@bCsGk+%!s$E9#U9F7IXX(CZ8ea85am=urD%BH;lif3 zv^=Pw^*IzRYpoXY=fN7$Hup8;#Wz>97dzJWi;asx8d45(10>SgwV$=ETNDr4DnxztD@x-;+gc>rwA!PWzknA( zfCoi{Hhw|-eo=e0tZlr)-UH&sRiOm!LycF@&zhE{K3&xAELQJrpvKz*7UiM#u$9-h z;CHJVD`l)~egWXw%o(GhiET}X)vX_^*OwbP@*`?TOQj7-=dpc%;e_2BIOsa z%fCIN^@>|R(^>{9BegCXoL2eDGcq+dl|Rdo|16@r%8@UVxx(BRxi50mPb{rf4(`*k z!If8)rCo}5>k&YzZ?CBEb_+XjMb*t0>i$cNGsc0xu~#<_*Z5B$p-ADY)a~o#ohK-x zXjf2aSuNjq0y65$=jGpjs9b!bZr{eZw*ITSx}dE*BIC&vL1hHx8R}~p=&Kj%`cvJ9 zevxAyn@nbMsO%RBvo`AOv9M@pJelK2>Kn*5NB!R6{=UHnD;N@s+_l?#>N_~h)$%W| zwe2R6uFVmm{rI(lWGfbzAXqWm-no4+DYq+xWOnbV{_^M&| zI$@_MeSZCHXoFG+8WHqZ(ANnQYW47c?U*Y+f2;j$F52G-S-2xBgBz(VT$Ewqr0nA;khlCO8%xa74z=LL}7A$Ouz!jlscA zIH6b+Oj*&m$pp27yR<;Qa)2YghHTw z#n5R)0G$saOli||V)4k~{whxH8p|jVbifJKJM@r3fml>Da%1d7=gk5Rp>!&NHXMfX zSzL$u@{{l=2}ES0@B_4+b`EN1z>9tDjF$kfR47fGi|@3Fa2W|gZO`vyzVPKt61_rN zD+HgN_L1I>WBAOh7MF^I$VgM5ueXrAzE&BnJ&J#?{8n4~0kJV{-dxx}O1N&l$k4O} zjBr3NmlE~e!|MDkb@7t6e#6Xtm|*w_y;+fvM}=Xf$=WRKRm)+F@)$SNUY`bKTH6)# zsV|XywI_>QMy6M@iniWU7zkixOE3#Z=Sh}W;2PTd(5G&IwrpC9oW;Lr zm)AD`9a;#xdJBv&vSEHWfSz((S!-arNQup@w-GcL?KCZ#<%hVy z8Nrk;#ri{40-1>h zmo{3ahkM0vA&6wbf5_;*Y8Ig=?WGtXa>`pjcNu6OC<-ZmPGRb)N_}&;u>Jc@yKKQcP*4=VH|dibcQhj=vEgTQQ>N5^Y8q z7D9>>-sW`}8is%?FLx_%AFB&{Kpj3=e>udi@rJcuUey6+^69ggRH=a>Iv494m(b4* z)mLdl(ae$Uu}izUS-J4MdT~eHT0y0UaoB876o}GlPpCB}gh@zAp}bZofsY1DN5_f# zy*)NMe*1qs@d|EWtNW%`d=e)%}OS#<#{c8jwf%Fh_() zAfyNrt@f~S%eK}vG+RsECqk`pB77Sb@KPH-HDMT5PVW^syD|0ceYBv!Z@dL=U93xIv(0j7oCzMXOL-G1vo&~GaH9^pKp=$tm*-F2P-D^~o^xB>Uf>-d4`iN{!r%bUO z)vLZlM*NZSKzy6A1O%TZqvKi(H*4<>W@Qi~V9{}0_=-tPba literal 31312 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 diff --git a/ChewingTextService/ChewingTextService.rc b/ChewingTextService/ChewingTextService.rc index c13a7576b05475cb8daf8130b9cf4b123a066ed0..3fa9594353b15273b10933bf621db473ee749471 100644 GIT binary patch literal 5321 zcmcIoTW_046n^)wm?cu=s9DEOva5Yqt%L#FsKi(Xl18e8s6CF+5*%UNi`0kicB6KC ze`wRI+P$>eG}-hjZL+=Xp9v267kdV53<0}&NU?-rX1?#7Iky>RY{k-+mNiss)v>yw zE#dUH-(<772{bi@6uI#Acc~OS&FM9()owLxG_SWint_;O$Iucsv8CC#jx5}6b*vgj z?V6>p*cpJN#&ol0bm|yU{oYKIN~Ol?xS^XE(G^KnSYA}C9Lvy@9^+{ZvoWg%jW-NmQx~r?P@DfzF>t z;ZB*Z7FDJsPoxC8TvX^HhsXmo@nufpCXuA%!wsrjrCDC)#WF2;vLbfi%k$!Kjy>|( zlPCze99~nYT(||L@?4QGrx0ABkUg2DQe2r$rKX1t4kA4qE&*<4DDI?n(xiNO!RRq; z*1`I4fxbbG^o>Gt@dz(s1Q5g5TBc`@-ZMI*+f8J&&fvCWk;Q2?J#8ihU!pZ4)Q%aizwaSX-RntBAOvUK%$7(NQA)-~(L5L_%5 z_+l80hAR$JZsdJJv*7pPR`_JC$lM3 zsfw(^$ccRfR1oN*G)GIvQTFUiLm<_ZR5+F8@=DR?^@c!q4tlZC#?jU+X(eUAZx$sO zIh)O9X9d4OUIZUx&%!WINhq&_mO%~63nFtIQIc)x=2Ag7FmE;>bBOZ>gScr`!_m_w9eCl!Xb)jEw5H3@itIUypr&UtxoiepkO^rR62zM}wqQX!pp=Zy+7h-->ouII8%Cle z0WWC=(^@%a=}S%9n^FG-rI`sdoz2Z80!0AmAd^hej2a^>*QzC=D^{!Cso8yn4{4Sj z>T{MMOBS(C|GyUv^O`j(6ng%J{ejswyqXTyAi*~~iE`6f2>u?Ww<3O#{G7vP$4gG0 zt*UceSwZ9$TAM3kMX4al`}6G@jZ-q5m$^Aa?caUWUHcHXYkHiXfO#FbcvhwJq9O<3 zKOk~$UUdJu5D+;p?seDx-TUXw-sb)E_(Gfus1~@q1X?7J1vGox4|aF1xa&9E%{Axx zh4gqa&IHS^TC9pnB~B!96}n2xVm01Hx$mFsZ{F@c`rCcCx%c1~=lwf(>y>l!%Ko*N z?#5H+;bZ5w*Xi;60eK(`DpZxLh}9%3bl}e6Y8@?tXaL zBfYQ+^Kjm60xy@$TcV{B$Btxl*SDM(4+4FI(v}`)k~v|Y1Dk-j@8ag@1w6!?yZzGr zwB@YsfU4}opr}L>fEZ&CyY8)P9$>kJ>w3*jR%TA*h?@d!A{23rBHdK?&VBdiH~SaY zokv&QjmN%*@%$nn;-uk%l9~2i{SNMeSWcn@K8c^J9G=s8brWJ2ERw|L=_l~AEQ~P6 zK+EpsTQJ|DTpk;27GR^0k0{u$$x$ps2Y{`nE`Nh#zh0+#S}W5mj0TsO*n^8qR>5F9K^{b>+WdIS|(N-WmS<&FLO zPk{l_Ew*ArRA4!QOQINQpw)G#qQIWC9!1zCPM`(Y@4-b}{N_ CPNTyB literal 10246 zcmdT~OK%%h6uui&sfEH%m^xCGKpH1)7hNDk9!_fNB#y^US~bMV!*&9BDRG(@*cxLY0bIANHK(T4ids^uIE$)`wo$aLsx>vK=JC|4UczCik}9Z0oGWNA<2r-3 z6uI(#y^df!m$^o!k3vjepMM$&Q zFqYqc*q}s4I>z8^H40WW0$SmH#^DTF%Q%-{2}WzXM#m&t*73Zk+5!-<>WZ&9M7*Vr zdE#tFwIZhafiQ_L8?lr_r1b)0c_1x?gX3PoVTDp=F-8V>&V%kOq;1n&Q)nGRYYx`| zjakzo{fOuU;x?f*vC*#w+=Ry8Bacxtc*k78SYQt5MsHe;C-Y6Q4nD|h6jbNHtxr?z zPZYS3;2(}Cl(_WvraQSYUhKn zTolInRFj;?5j*3E4w-2jt;6`V=&a0GW3ptQ7wS#xk6ve0uG z$2@vXI<~#WN-0Y)W}Z!%^pPutvFDeY=3G%#d9`H=`x$ zkwji&#);ZLh8bL>q)wElqpFRdko*}*QIEazKk1WzK1){fbuxk+jY}}CXECqdUap*9 zIB%Q_<=-sVJZ6GPpzF<0t?A8vSYRNOH+|C#e|npUFNN@CKCRDHP|-MV;=exE|HI=YII&DHM6X7OCel?$2Ge5f!@8VA#q{G|E941 z;iFq;whALZ%m?dKe{^rOnNb-L9XcX9su9r#Wo|fKlerM)XR7uB18AFU#-+Co5=v)IF%g> zR_R;`n3`S?&rBxyfl=Fq8G*S^a-+!WNbB73JpLQnKq5AokriZ&UDU`7rnu>1_g!-_fQhx$(;G?$M*|v+_tLY$hd9Q z_%)QlSL%^RZ|=b6Feat<_YC6sz5U${;rZ#sZwvP}e|n2t$0BhRo@0=|2N_H>iON@a z{=9j3=xF7~%BwcH4n*QAtK2+#vqGU4qVeSJRvH%K-c=TqnTT{T_500-x7$m1Z(h6f zcw+gz2X_3U&nv%;cAclpJ-f&(Hj=7_yXHhorUC!#%s;yIz~0y%ySTAEQ8ApEw~u42 z`q&WOTwSt;%R^SyR*g&1yye8pZx6SweOWnL6sgbdBDF!SNY7o&1n|g;mb;pKNKH5q*Yb2|5`SP7LI zvcw=Fi~bO_2T2#sKblR#>0|0b;ojAq?IUA%DzsA+|C!NDK5I^LKj&jtb~f8fQTYpo zn7aoNQ+t=-`Elf_hO`$6Qjj2vgX_ko?`SbwOBYjbWR47p%=|tUHC99tzs$YbCvF>t zOB_>&Zv6eOaE_Yg&1eP*jm-0?lngS5tS z?_lxUzXpF$E>#_9aFO-Q~9`h&7R61%KS1NWi<2U+%Fd^Db4|L_18Ps3-v}Lw&i~&+&`@y zM_Mo%>c_bH~HLw2<26F uvg`dThG;*y|9aTl|D*VSf%^ZCGPc~`9uLR