From 2b7f52978f813b29d0c32d9590584230a471a143 Mon Sep 17 00:00:00 2001 From: miteruzo Date: Sun, 8 Nov 2026 15:31:02 +0900 Subject: [PATCH] #455 --- .../public/fonts/noto-sans-mongolian/LICENSE | 94 ++++ .../NotoSansMongolian-Regular.ttf | Bin 0 -> 183016 bytes .../fonts/noto-sans-mongolian/SOURCE.md | 11 + frontend/src/App.tsx | 27 +- frontend/src/components/PostList.tsx | 2 +- frontend/src/components/PrefetchLink.tsx | 14 +- frontend/src/components/TopNav.tsx | 92 +++- frontend/src/components/layout/MainArea.tsx | 63 ++- .../components/layout/SidebarComponent.tsx | 229 ++++---- frontend/src/entry-server.tsx | 10 +- frontend/src/index.css | 500 ++++++++++++++++++ frontend/src/lib/locales.ts | 18 +- frontend/src/lib/useLocale.ts | 11 +- frontend/src/pages/posts/PostListPage.tsx | 2 +- frontend/src/pages/tags/TagListPage.tsx | 8 +- frontend/src/pages/wiki/WikiDetailPage.tsx | 2 +- 16 files changed, 914 insertions(+), 169 deletions(-) create mode 100644 frontend/public/fonts/noto-sans-mongolian/LICENSE create mode 100644 frontend/public/fonts/noto-sans-mongolian/NotoSansMongolian-Regular.ttf create mode 100644 frontend/public/fonts/noto-sans-mongolian/SOURCE.md diff --git a/frontend/public/fonts/noto-sans-mongolian/LICENSE b/frontend/public/fonts/noto-sans-mongolian/LICENSE new file mode 100644 index 0000000..c82d72e --- /dev/null +++ b/frontend/public/fonts/noto-sans-mongolian/LICENSE @@ -0,0 +1,94 @@ +Copyright 2018 The Noto Project Authors (github.com/googlei18n/noto-fonts) + +This Font Software is licensed under the SIL Open Font License, +Version 1.1. + +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font +creation efforts of academic and linguistic communities, and to +provide a free and open framework in which fonts may be shared and +improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply to +any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software +components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, +deleting, or substituting -- in part or in whole -- any of the +components of the Original Version, by changing formats or by porting +the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, +modify, redistribute, and sell modified and unmodified copies of the +Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in +Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the +corresponding Copyright Holder. This restriction only applies to the +primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created using +the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/frontend/public/fonts/noto-sans-mongolian/NotoSansMongolian-Regular.ttf b/frontend/public/fonts/noto-sans-mongolian/NotoSansMongolian-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2af5c0afed9ce008d83951ed91cd87085743381c GIT binary patch literal 183016 zcmeEv2Ygh;_Wv!rn*xONETs2BdfPOTkV-vv=>kGiT16Idj^~3Zftg&iGFw z2n97I#kdj$>Eu6A+7}lT7A4iBE*7L#x~?uZR@O{jI^{+|YD>noUvbT_yx8Eo#^HLX zAQb&xSreDIrvFE%L%b39>&H!QnD)Tv-`830jXzFF{Dq3*rZ{ElmyM z^`E|vmc`z9KD7m3*hf38!F2(yLs}-!n)_|uT+}6gE(rQblctVqi2Zseu0#GQ2))xL zH_V-;Gl+d~zXi_+Olg?hbnEknb_nA~$(XJr8b>E>sseEtu+gTSKJAT$q z(LR7n9iHWX@SgU8j(6~XJMRCfox*BTZc?H1rf=~7R>4`AB-q*9*Wg+s`-|%YEf82K zjle5Icqxt%5=BRR+e<5Hv>Hj$ED;1*5<>`6)_!qiWwDqm2%Vh@4iAW-c%S+rhzF&U zC<5^C2w@EShN!K=J)Iv&195MDXQ%j;;3z(hdlPY;4=@OhQZ}v^;~9Kr_wkI>D#QqT zaX$@c+%Ck(Q9_LLd*?;zUVP^Yco^R`cXmpT;CnnP#i5R0J3FK%-1`F8cLKfwY*#*a zqAbL{4GQeT`@Z<@o6b&o7e3Ea$~mZ$zN32|0orh{6m_EyCitndLyiTGz)i(hb_MP} zs2hD`u-9C_<^(>YUd?n~FMG$QvxWLA*P)K%ouA6?XbU(o9DhVffWC_RK^F(mU=ZqX z!~5IuP8tC1$zz2W5peSpJ#Axi%W(CSX+(ZAQRNP;RXTQZ~qTzYK3-~+<+%y-k z2=~^a{0I1AGrkW1KGe_CfExkBJO7Z=I{%QI@LAyxsT1$)!L#vzYT)*v;Ha5^ae5!L z0Da}Va2<($fH&n@%qkHJViWAKukgYSOA{aJXgtg{*S1?s zB)*il;4|UXiSeF>cW*&oX^g=Kn(_Ef`79s9yKeY?Bfk3-_bPE6h|d@wHn%M1)L*%l zAYY^xQ3v=-M%$YH`200KV~)$1;~MachUUgWjM*f7o&mrd*Ane%T=IbPY`_kDZ}~3u z!?wQ5U5^H>G3VHv-w(P>f~)~3bJ;ZR(n{RR0e}aIFQhl{`6fUZt^)vbg&5*9c|1NF zZ0JogfMg0}jb;h%(L4apX%67|M>(H};1xC=SQ%+NXdJqX3&w}!oJsD0S4pOk{Ly@l zcb>%cPP7$)vHb(jO~-cyykznN^k&!d@C?Zb$Ow`ZBq!)vgSn_)Yv$uwBkEJWr_ZK) zkSXl`EnB0Ke5*I=ifsQ1@NRH682>A0&OC|?#kLI{0*P`5rYsdgL4=@JO zUI57}Wv+BLCN%G9y<#P;H<=wl0wzQpS$aSD~?q?iOQ7G&il)7+1AEMso{% z*g6DUEb$@QTjFhrzxq7k-rYN_pET!b-BQ;sT5FX4NHyRW%v<6gO)lmW=A@<%=trL+ zr{&Pj7I_*V4rBQV0J4K*G3)OZrT?dRY5I@qGUqN5`3S)c- zGUAYQ63=YvJc#!X$`|Q*JU5#?dkF6wvc1-n0S~M>8h_vfo{&DKegTp&w;uuM@EJ50 zp8}Be@D|n@Z|DIf=qKqskfl;C%8zjGH4t2rs7DEqPzTc?p#w9yMzW3M z+BiWFerGfhM4!&1Vgu=wC_n2wYPr_4wLw|ynLhnE-hrMXgJ)Q~Xx~;Is&bZOF7YiJ zLuI^a?$Nvwk9EFnHTN;bY@BUmt6GO`o$9sixXVY-CU}wbby?4OM_Puuzd*Z}soSw_K)N#WJ!+;S*qh}fKW3I4!oAC_Bjg2SSU}R5F8=biSFo5h1^p%Yp z=_?pR8b5kYCjA&TBh7VY_uhninC~>#Rb3KxKn$}_Rh)x49&8+7JJ7lVS;q7xb&X|u zlQKRue`y}8dVuXbL4QrQvK)za<8iI>6$}kk=Q8!fqFZXCFHBac z{0AJb1V5EO8QrVCP=sGHiRx>*}a+a_FKbCcdKKa2ZMp+42#I)~49;JZrL6eV~j2a_qO6WjRAM;FvA4PzC7BuTnS0SFS0&l0{9UaQ0 zxMwl9rD!~-;!S#O1AwlT&#XTrYl$YRELCZ%+K-pJe-7`q113WrKMt8q?W?i|?b}{! zFwVpu#P^o+6n%^lK?mk5vBxuOFdx0pC-A;_$fCsj1)m7gZGaB|PoSPD0L)d;%(^|2 zbr=T;GL5bK=_o(Kchm9RN&v|~!V$7sg3PC9*nJy4L7IvC7Gq&)mqE4(@?zYl@w^W3 zCLkOALmM<7RU3_bHqc#6_8Hk<^gP*VPFy5m&)(Xy2 z0l>ZUpVC-B7;uNKN3u}-1#^?eLxcK^C@WEpLJ8SUvPX`A{J}heERK=-p)RnN*n!Uj z@O}qAzX~Av2OWpuZ^J+2TVi|;{}S1#R4<#`7W3LPr%5J5PSPLoIn+NFFa)15cjz67 z_#AdW$!e0RB0ggcqV+RI!rYJs;d2DO{{rO^@Bn-s&>z_PQ+VG zuEJg=*-LU*mBoac__2UmFJh)$bd+Za!D1=sM(|?iZ{#BrNIqbWsdJdk+e*{{zX|zI z$ZtYArAfvpbLVo`CRw4*EsJ@`=B4diQ+)!^ZRBs!C!4Xby_SiV!vLV6j2>!;7vBdw zfY0D1lMEh=&xi30rqrU?jap4gd`>uOzZp$kzzHN9qgs2gYtW2V1=hzP~K_ zpXlec(7~XW(KU1vRzlaxA|PKP0rNw@D?Ehuh5#}Ec8D+304DWBKlz`XRUCxvC~Ehnoq3dRUCNq{6`F47SGSsIEf5uZa)I--|D1r2#W zg+w6$&qBTneS{z(5_)Kkuuboz@28)uzdN8$fO~*%KwLmc$i$EtAu~f?jF;m3c4T)H zbavtmdM5z0n!h9Ho%I3wB>}wy+yZ>?&ft*xkXH7N81L9IuwxM35j%gvO8k~~n|5dC zcvb`Z@6)F~{pHhspH2{j59>ZOesJ#f`(OXf?rOVP3}ZovH9Z+66bU0ldvTQdjW}HW zWGZFthdK{=4SckV*dXI zySzylAtsJUR~{@6k!$2(a;-dFxLaN#-yk27 zpOufvugIUt=jCtYALL);-{jx5x!U)&gS2_to!ULxcFjJ`i&~8)R2!k$r8%fMp^4F) z(tN9F(oEF+s5z|pQ!`yNQ!_{NtL9$KLz?F`TQ%*Pdo+(}HfX}Mg63AOk2X#-MKf9Z zg!U=zLG2;!)7odWPihZqpVb}#4e-ZaSy_bpO!Nl3<1=YX1hljTC;-hF6l0+M5M>Yt zod-%tN^qN?qjzICXkS8^!$JEI%54gOm-YBa01ZXZ;~fHwu%JhK1c-tNdbCF%Z$(M( z0JOy@wH)L-QR)D8_Hz??;I_K_IxH>;-T_Ju6W;| zGhfgT<^TyG=u0?276|%M4v-3hp6CS-en45qK_osZ=O7XdDmXxT2>MD6G$-^%4ixRv z6MX^F(P)_3@-++>y1IUL^&fq}SsD35~XtRQT76*981pRCd@@FWo z<{+O(IfsM%4N4ksfcyhWY7ao#pMELeT73QuMzX`fcAZq*8_l;b`Z+t9JIs( zH*(PKK}kFfK$KR{ujHWFhjJAM&5I~+;-J-_Bz^*DLQ$^app8JemIGN!`gI&M2T|V4 zL30A-EgUp4C~xJUIfe2z4w`RK-p+x%3i|aNG#E4e1`e7ZQEud*IgIiS4w^qv(mV&i z@)PvbAAp8vznO!E=(>f2=2w(=a?sq1lK2~-c?jh;4w~mtZs(w(`#U&jsBWSofV6u3 zT^uxzp``u;G=%SN4w^8OL~DRnK)IKLhG;;v255ay5^n*taacBcbI^eA0{U>!Oh)Mj zaK|$*qr^J_zF0TuJ9-D89gLEo1fTDNidWA;`vl4c0O+cH3grY2+9y#q13+Uf=o!)q z0Pkwi_mG(!w9g4bDENRt`=B7iivS6q51@1e^aT#GAao1_WaImXP=e<=3h?<6LG-K# zOv2}{(Rp{%-!x&2ut7L1oD(jJ{lz-*2JtcRyyP#1OXX56G^u-}bJ7JlR4$Oqv-fEZ3}sp7NOHoVJ&Cu-2%(O}kn9iS{e)kJ>+V8eMOlyUs^9Tz7+R zjqYjPM|OIvFBj-7XKhoOSutHN*89*E4SJZbRKhxovj4%Wc2g!)~v;z2_e7zR>*{_fzg~dgwfy zJUl&8J(hbs<8j>M6;D^sL7vk*=X&n;JmUFJuU=jiUUz#v==H5WS)ZjZ(3j~q>(A)l z?PuRFq2KI&+xvajKdArM{txzlvi}ipckgoVcJIU99X{DUbA6Wh+~{+{*U`7cx7~NA z?>)W``99_Qm0yV8Airk6>-~=UedMq8&-Y*C|Ahau{v8470b2vU4$KOi9Jn*^p1=!% zKL=$6T_1E`&X?7CU|}DJHa0ZpAU%-Nejsh8608^ z83FyjC1hI2+>j+9H-@YW*%-1dWN*lUkjFy~hnxsG73v>4BXoY~wV^9RZwcKLx+C=N z(6eFv!(>3~vvAC;a2^^AUa#VG*$rOCoNJSQoJ|Vq3(Ik>!!Y zB1cC)7}Y1rBg!`_G%6-4C2C;Qbx|)w{XQUIK+}N917;6cINMvM$eDlAN_Fj!RY6sUyMEz{ciLp(O*UX82x9ACZ>1H=$IWbr(=GI`6D(bc601q zvHN2mjy)LreC&&H4skAV{o(@SBI6R`*2Zm!do8|Kyj%R#_&M>5 zi#+>Qb&rxi00Nl!sD=H%w=&v`iKV6Ip0(%hE@#Scmw z)IR9bytq6=UQS+d-k!Ys^S;abEk83qKYwTbJq1F6eL-D8W5L4(2MhfR!wau1{HpNB zqWYqiqT|I$#hJzH2MdGk2RjdL8~pm<_ex4is!D209xn|kjV@hY`d#U7Lq-i5Kjh$$ z=gWM`Lduqx-Cg!#*@g1B@`dGRE21hAE2dV=sn}g{U&T9>Zk73!Ln=2_?x?)G^1;d{ zE00wEX3R9^8;2Oz7|$BtH=Z+IF#c@psM1wARn=FuR86azTeYO>#;SEy8>_Ze{Zw_a zT3g+xy1Kfqy0QAf>L;s@RG+NrTjNzTp=L_WV>KN^D~HY+di&5VLw5~*Z|JAPe20Y& zs~@&&*uBFZ87>bWHhlE(rr~>rUl{)L@Q$l$uG)Lm$q{xVGDl1uF=xc$5s!{|dc?6> zyV_y3dutEWK3;pc_C)Qe+BfT5>&okHt$V!g-MUXkhK;NqSvRtA4m1#P46^)+;o0Ip9vlld?$oXh?!73;f@J!HTP@IZXVbCc=IyGzXO_)8F!S44hFLkYif7$6TRXeYY>(L!XCJvb`0Axs zuekc=Ieq7}%sDqVbMEH3cg@{Dug|=;c_-&b%}<=4F+Xp9>HO;Xb@LnNx6Yq2fByV~ z3xoys3q~(!S}=LR>;(%K+_T`J1>al~aZTej?bm#?FmmCfg|imkvGCx+=NJC6uyaw$ zqJfKMEZV*3?Ztf;w=UkZ_>(0$OV%#=WNG@+6-z(4Ht^ap*FLe#VcD2v4_zl;H}<** zu9vSLd;NXa|9Qjo8%``wT)u7jg&POnc$f zc5U<8scYw~-M#j{wePL#zb{|}rD&IQz*44M3z0LKu(YNir?Z9oX-uBjQAKv!G?Y(YyyFK#u zw%cD=Z@<29efj!p*5A2)_xk(RKf3pM2+HaKnY+~Bt% zY(wmZ)D06iOy4kX!~P8)ZunxucN>1&n6h#D#>Y2y-eI_7+8ulE_;OS9rs_?%ZF*Fhn@7jOcT)27t<~uj<-hAKYM>jvc`Pdd|OVF0WEfcofxaH`U z&O0;joPFoLcmBM!cI$?%Tet4ndjHnPwmEEb+178{=xw{U-Mj6PZHKn^-R`yBe|z}$ zxb4?&U%CCA9q~J^-*I-w`#a9Rp5Gy6LX>cMaTCxT}2E z#$6xpI=}0O-MPCr?B2S2&+ec04BlhhGh)vjd$#Y{x95R9pX~M8>%X^}{k?PV?tM=C zJoh#2+r00tef#gWzkAHxPu|n_o)!1}wqM-uu-|2Wzx{#xBlmB;x8J>i_eS1(_`byZ zGVaT}@9z6O@Atbu?EV7>To3d=5OmM^Zb$LPd@+J^Ism7jyfK7JsN(r^l0_bx}%LpTaV5-`s%UF zWBJF19NT>Ci(}s%`|Y@R+~K&(@qWicj%OWjIzIXM?Bg4bpE&;e3F$=6iP95oCuW{F z_z&$rhW=ycKTe zUu=AF^NT;d^vuiQFUP&y{PLQY+wu4GD}Jv`eC6<|-lyD8`J4(l6@6;nsgtK(JN5Rd zk4}Ag>ibi_zbd`z_^Rux{a?NA)t6t>zjp0wD_^_iwN0<>c`d&L)HB&vnU~L;eLe8?#@Ab4pYi%LXI;+rI~#a5@@&G{ z^s|G`mYl6RTYI+Q?8LLv&(1r$^z4eWH=n)Z?Dn(!&UU<^dt<~K^=~}*#*=UMeKXt@qyg_HF5H@3+I>Ui9|sZ-4QQ z`#TT6^XfYn-syO^&%2@T4t#gzyQkhucyH@_Kfho1{tF)r`QV9v#{Bc44?RD;>7!mB z&G_iEkDEV!_LGWFUi;+zPtJex>!*#Mwto7LPhb7?t#irevd-;2ci`OP=MJAcaqiT) zH$QXztp8^%pWX1;vCrQ4Jmd34pKtqo@8<_Tf8+BHKL70VZ$AI!^Ug2qzUcc!-4}O! zasErsFB`wy{bk4biRWjYzwP|tucWX1zpDT0v9F!Jj`%wN>-w)3e!cqZ&0jzK^^0GB zc0s)0av|WtzzcO3W?Wc#VZ(*HE*!h?<%P~~0>3HzrtX``-)w*++2^s)~uQl zxtV_72_n4urII6jKmE|292OQFWS4>#K?yG?n@Jw5QM-@&Yy9J4vx_qf8G1?91TLy5 zPtEMFaV!5BLyr0;cXx4=m!8Ps`J8*i z}xM;D)Y6`^hcefkHxW=4kiyGe{nhRl9uDrw~C{^<_d-VWtnb{b8= z{!ukXpPW>R zQEFCBLR3-ttwpRmBW9E>u54igeXIVbfXnFry9CU?(ZANd3s5)pSU-VHRRIdp52^2BHTQ=2V}xYhEWzL z2?tRZJRmM9NgfBqNk${~|Dc_EX*l-$=!8t(X6GUKAxMF6As)UE3{_aT_4LR1LCSFU z;8P-$1Pxf;Q+lf=)Xlq>Q_@vM1tVicF<#e87gLoob6Q#Xb)#k%x{0|RuecktE}lzH z(`qls`P;@NPR|*>s4#!lV3)jnw}Q5;$DVkgaa_&DX5*M=Cv6&<>zCj}av}ye4VHdI zB#_N5pv3->d?41e140VFa)hKQA(@_@KK6D_j&50r8G{3J(~Fm;PBK>1C-o8scD&?f z%*oH3my4mkF}*!Iy?YeyN!9UTYCbY4WOdbFw&JmLPMc~T-R zk>016kRdD#{EVrYS1rt_Y-o5(u;xt40kIj-jru7y`|`eg$tI>I6HDd#~&L9&L24Nx}p)=YL^V*tvO5a7%zCuQc}>n zq_7kw+0kDTjB!^Nh4_6Z#sB2tKCfh|^Dw{OV;32XIn%Q8oM}{JkoEBz-qum10)6R3 zU#`cf>I9G1sP>r7g^aVXYIsR9ry3@_hr3-cjU^K{-?n3I=@9MRd(CQSbFS>0SuoVo z;J-{Xi1x&UEd57rg zVQRu7C1}}#U#~G5D{|Bp(&xfmCnCSDxA=neI$NF0BW}ke6ypQi+E=VfYA!EpOwtxNdX8tyo4UT*6kpIF!C;qm_7kr_Dy>cIN& z9CnVAmZ1lpG~(JIKDbP#dogY^t%W2a?L0ljoXnv)zWt(Hq-7Uh>>sMHh#fsCx*{Sr1E!8K)WjMM3F(DV!PUiVuGdQkWe359$zeGV9Hufg zRzg`!QY5i>yIaRwp8AB^tdfy&x^G`|>p1v@W>7)upn9?QfVPC}`m};uuQoy;k6Jpf zFnb8&1zxj`MK&Q-(649EFLxop+%IAQQ@5Drp!RA(?#Mhp-^f1FEv8=8mzg_Nwyesy zrHu7y%GjDFbC;-Pr6nE3&bnX%E>yS_JZ?~UJdgyO!s9y_lXq-#m2Oqp+_z8tLY2+= zj2wp<3GXu3qS%b|^y2&+940Aq(Z{}zU7}}ULRIfRVrIu#*VLe489BW*hJ@ZF113y} zHdfr6Uvf(^=40_P(c!iUFHA2>Wb?gLYLzyTjusjOC5wa>tzUjpzm2qO+G}4?rY<#lov0$sk`GhzEB-e z)~l{fbv(gWtSV*UViYftj)Ouvif|%pf>xAoAqU(9Z%ET<(2b-y7oOl}TAOt`Igm+w zH;DBVjD=@lBIp|I;r?4|wwc?CmnJdQAVGyw95;UzzZ zYfr%sD-R+B7I=Aq|Dpd}0c!QP)b)DfwAk8qS@fzmwitJAza)Ohv>LTgg3=wfzrI_eYL`zf!Gj-O?vh?5pkB(pcV>2hDW{)>yWkNp4&BF|17Zf-yxoP&?k+)-# zKp)3iSq7^lkZT*HW!TvTcd<_tRbvKdZ=ae4RXeZ0CLq?*P!ZR0eSh*BZT)l7ZWi0J z%S`r)YBg}}i);)7*$X6Nf@L>1Y4~f9D-XLts2fR`_wM)+TxF#nc7H9$ORGWgI>vR- z?Zgby?X(}OTuT-n?!!9eTx@yGq{9Nn^>(oe*ORnRx!9V^Y1Vcg(wxKdWHH7Hi2pOo zN1dxoQMAy@yu=>lil#ScI8~jtaZJiI+)~?1{JrBu#^gVvxR_ab{lt`v^R6l4RZPs} zgQxinzI)f)$69DYpL|w)hYOn#MKuLea+t8`VYX@tSU;aoXSZcPIi2P4n5|I7z*#Ls zN9hMhCmN+B2tx=XSTM|dv7_bL&COXG88oogFRV6YuCKrJ$!l!rCSBFLe?`Aud8y;l zFp9)mWbvZr2&#!VlUcl8HZ@wBFLq`FIMBz{*C%77fAE;3xxo=yXIZg^iTPl@Fz)J= z7v0O7noJs%7*hkom^hEP8djb>7cE1!T3dNGjeC%p$@tJTajZl0Ejpmcm* z|81hfl&kJKFcCeD5$fec$OFt{*q@BlhHNP*(GA@rJ(o#X(%jtM)AaEQ_lxQmoM4we zuIQxq$N%)Guy+_TB)>*i(YHRSp**IK(M7CWIJo0e<2CE@SC_6@JZXAiM+dF#F|Z1b zV@DJuJ7xX3SuNvkCW`=KJ2(hDLl(Uu34P?^<25cxALWJU9PH{EWP|7&jm$ zB1YfOe~f38yXe``=@Q^9J8QKGm&|ndeE0{vcjrkZ;$Fz7kqkDr~ZQ}MV!L5B;v-)jhOh<y0`n*>dy-(IT)?&pGc2jZT zkodG~hKgmK*oT<*=yjswZARmQm)i`x-mWlCd#Q!3Ii0KIv9ey!N$`i!8infwehp2L zBxnlqU<*ih4JD<#ht-)oR0(${*+Y8UI6GJ0{USXMURL)3c`>7s2gkUlXh*E7v|X#o z>00;nqjzTIZhiR4kqifDYrUW$U<56-wH|TdiW|h4yO*SMONk=IZ9@0xw2%g;_jO__ zTw04EXF_sTrY%NL^bwX`XjJA~q@ zGRZqEM~Ks=?j2jZv4QC~d-lRVOirMp)=c<^v%SghBXq71KW7%Wwf#*i1O%yvPD~kC zlN;z3)K~nxqq%RG-YYgaz~G~wQ?#%uu{qUfOm0n08lDt25(Yf?rX7Yq2fKWzA56^- z#1gDJkxV+HV%TGSAon?33*yD`Ic+Ff69bzV(;Rf2OsUzZr~jT{U4R_4n}xD*y_ z5%zSyGE|oD>Hq%g(xs8vvB}ui-7)oh1I#~QSg|pDl1+*j7G3m&En#zv*1VLb;_f_F_EZ~?0W7W z3{(tFOZ5Ul1u|-|HtMniYU2|#wAzkOvKQCSxmo``W1QAT=1Fw%h^@&;u8uN#IOe7L z#`TRxU}67mg>&FO96BsxRB|t7NkRsZh3f-bDn>{lNd$ML*_(paxG8BzUb>!4-D7@! zW#tyeu4_TKN7#1N-fc@wKkt?z4rhw!qcJ7v$!^;=n2p}3IBiU3ezG)!E2FiAHAR!N zxiV^|H~B0Sj67>dByTCOAbCz!Zk2ZXR{KG*Abb6)Aqv^;hb<`{*JLcaF`ul? z&S7#T=8KN!sz6f4<9K50v#-5_<4p{LwGY{$LSJ@1MJ@6#1qlI+E z7T_GrEdfI}lTFow;6gS}H~F8i2WCsjBMjY4JMg-sWp>rYmz23jra<3d=Zaam-AqF8 zJ#4K_W~QfpDVm{9r~r*fhl`M20naEtkTH zP#GLBG%h;5~t)cGNg1$wzwcY-CaB%QJ>Sx9qgN(RU0#7&!`EH z&A)pW^NkFe(J?b?^5BY{wEAI}fjk?S=!8k970l!vxK_L(Jz~avB$q?3=GF%8B9SI` z=q(XUbBEu?8bLCsc5O9bIB=2~Ly0ib39TGMjQLSqhrzNiSXh8PkWkTkZ84S4lL;tI zY_p|iW20gS!p-sLUaf~=K1Q8Z>->C@R7zIABBq7g(9|N7v5Cb7A3);i>t> zv!~21TDi7xW-%8_H0=2X-0+s%2+ht5LFmOD<;i%U@(qhG~*QG#?CASqXZ%CFJPs$GK#Jg$BQ>` zW%p@bTps0eE8|F^;Lo5iNh3=Nniri*3_8qvQZeL$qT#_287@w7HTgY{{PddRT?=yVoGJlFA*N@>hs-<;<@W#YrXfL0u~l39#3si%m9!Y*4f)Ap!d1C`v4~pIsFkuvYCO#q8@#ynZwE1C6I?ap zhJhp0Fh&-k(~?j_lz(rlfsCz8)B;5|YAS{pC?$v*!i14Bj`@hOwq|iORUJD9` zR#R^N_9iB`P~$IMYxD}{T_y3QRycL4U8&YPC(F9R2cM`}RIJp;*2G}(B-1*sCGH?@ zVp<9I7a&@a3QIMdcwY8$k{5>Q6Z-q7NA(idcN}*N84&Bxb_^#e0tq#bkt+T zm9B($y4R-%TFJZawd;=0tc9E)LrUYc70{OSsUuQZ^M5 ziI%E)7gC*N`bA99*cp?@=O&qQtdNG0o12@Ekh_HY<|5>G(0)I}17VHYWNuvsfuoea zB)@YlM_`$n)ukf9vYCus5I|OwlIukh8N1V||2o<&2n`r|rzYoL!bg*%5aj;~AH{Qo z6=9gNVw6fl8GgffybM;I>6*>mQYHgv?pk@8xbdWVnm*s$lb;DRVA*bH5wQ@;e(U&E zdKzmGvl+QpCtIQz91H;^@r|1?unAZ`na++mbYKV&UwDeE-O>}{2KwK8!@M;zOM{E6 zN}f5@xM}M2ZNnmlBzXt9cy#>1^5Qyv4UNd1oSQwdE%%mP*Uwk7;+}YH*510Y56mCD zbYWpgS}Im~aT!mPqy7TBJAoZm5)0f2x$ZPrvjR)&or33N!Y|t|bI!<$)^tfxVrzl} zNr`pr_@rXpxM}Uxk)<5bUjw5DwdUotv<@0`Q~977WlWLn?Zy<@EZ^vvdq>tE0H%uy zIHn4QIgmo|G+ST@1R?!+5YxQ2FsxV{Q>e4Kw6vz{&6qIFEc z4sC9Gj!<6V7kC`VWvOEr^7lLD1JfGP*d_nInsy}mTS%P<3Xx>PJ zUJ32rEd@A~7DuLe^~;RRE1qc+-@o^XoFL!yaZ5|o5dXxci14V;@g2hu9%)l|D<@4t?!9lTJF3$0BX(gf< zR+?LX?^q`vr%~4yF1yiKc0-0Sb!x$&ri|(1C9Qq`(&0?cRNB)Cn@Ngv{(qEI@kq6?kqoO?0>Vggg zIF%F*E*~+|Xq+@-VE+L=L4EpjP2Q;FmF;9a9D~*<&kPC`Zw;NH#&{Z!Rb!Hl8f&Mv zcuJ4j+Nc1uwq|g7-E_;wkbfn};(WFS^Z}iSc~Syp7v!N}YRo@bdzCo9;=Rl)Iof^Z zum?K!i<*X%5+||;@SaqG_w4D^0OdUdG%engD$bZ+HFo@Iei!G0NSh(WJeWV!CCMd; zyM7eq6?Q{t64EhZipONOQXr?>D zzIhm@%2CV$ZC1<%szGwwxaPX{a?r&QYkWG^kW@Oc0{-uw5uqq)4|(5s%Ts!3;&l61mW15} zuXtU-!n(pqWdk%uZPJ*c!qM^Y`XeVirfQ%e1xA!6V#^-N)wV>mY2&c03D*`oRxUH< z&n$7z&hd=atYGng+rVH>;<s<0KBX$fAy`3qxiaCUTklqMA zaZP|5TH;f^0z$%EHBRpCSq8*aBfUfP4o*(;x-B`oZuJOr5xqP9=pW=zlDTU2(uAUc zSt$snhGc~pa-FlUyDmFtVYad57Bt6bD9=Hxg=uXphJajv?uQe(J6Pw;N%+zOV<))h zcR!lqO`iQMlhJL5GJJ9z%T3QtBK;9-35{hj%k+4d=}XYxXdeKy8J&79&tcb(U_MZ$ z^dapO;2mws(y&l;d+GqocUPPUkVl%^kotZDw9TITAwS4HvuD^g1Imvl{g)I{+a58e ztf~-W&ccg$C*~~a!#s<`0zY#qy%`z#c{4I65Mk2X*;C6D%3`VZo7Corew-el*ZoY6 zk^XrW?IRP)TAvIwFAS87r7D(U8D9mu31sfdNlna;jHYlVt?|y%2fSX3EM9Y+YO14} z&dY06vmIGdud2|;rONN^;BxNIr!;r7) zZNh^Ol#Sseeh7Y{A(H1alZK$LwS5$*uCBSdY1Z4hGdY{|oe0^i-WGl7EHQF*bW3WkPa2hkp@4jK!l zRQrs4`jI=chJE3fstT*7nMSFZffa%xz07N6m4#{1M-sS~&lIH`t~YqkyC!9} zr5VgIG@dgG&%Htt>(tDV1=VWmC~0-bW!F3oEOkO5_ckiBjn8Ek=hfuFYaJtGC>(@c z6RJ){`G6)R)S^e-g<3ntH+6~nQmB=8>2)dTDpT}#@uV)%-yNHjncLUTxpK}R%djig z(nu~~QR$+kSzzUEr9p|->KaF*Tcu5D8LFFi6jR+8Rp2Fk6e~b7QH8ttY;wQs)W9$8 z_foB1Wd-vT`+ih>WBt@(r*NN)QGOvqv*w0HNs+EBBJA;6(>(0`!gdd3?-xb)TW+t) zG#2v&xPjAi^2f7qtr$L|N!je7#`!xxWchX9tNC?^beOWif;mcVZcd_y*Sxf$;Q?1= zh4j~)7?Y=Q ztZ=X!RJW|f-nqhAmzOg)Pi>y9H6^kua=qbWx6Xz)GZZah!QH3Db8hM}IbK=StWxCJ zI$El6gS6Js$y8>&1alL53C5!tG-<{8ploj&+c86eLrI;q>n@X$=f65j2vBE?^a~o1 zjvXRjioveo`Cj_$0nPpNlv|nSc7o+sMh*_({57m}@gzsr3OBpFY$$8AvS3I^mUfPl z6EV;H$uFTb?cuPb2(y++m~vf>1cmix4o(@<=7;XKbSU$!n~fcy0gIYr<`E4P*+a&j z1tD}EDl?igE|_<=G|9fd8)bZkT$MgIGSas_Pcs zSl@>&Dx5lNWczTU0Oja5LRy-lvuYSoo!^$BBTKq?da3av>8;3tt|1;)QHQvyln+gz z359p~-Yyo1$Tu!cY+7gzA7R%g3m+jWp>Psy@G{4b4r!8^L_fhKI%$LcbS=(g@i5wn zb)4dm;ws8Jfc8sSv=QL4-o#}X{`&6U%3kBq)5Hf2Uh+cMXS=cU%_jcr%01RfY8c{JW-GoOgW zGMyoR*d|t`62${VwQ@76ONv@N)gOnZ+FB~(m_DawIkcJgqE&6HOFj$Ycg<2i{x3-FqI>tw#Zg;Ih7ASTIEIGx}6=Y2Yun1t;ip*=& zbKh03kURnYq@KFI$m}d?=z@gFc|?|(EKfkoezZf8`<;4hS@A~kcDpxI#Jf#Css>xz z#N_TG%YHfY>SPIp+;WEA(NnX?Y*zO$_%)L`EsVv&Y zy^|5=65@IX_wdXcP!%d|*=0*AczH4>Tszpp%TqPAUsz$li`>z}y%futcO{B+ROrRw z-1zBX-f#zt341t#Jltgg=#PP)r3aeA&yths9OSm1ZTu%p$=0Hx6r4xiIzZx+So&^tPrBA97$;0x7;>*A!ez`;|D?icPnqm9m} zXe*1hIims$8|(&##W5B0qN_rrCm+UooYAzb#Nwz5@MlP25cm_PRgl?f9Whkq`|Z%T z5ly)Cd?#bTfN7RwHSbk6uom)7ZqfaUeUm-EF;9Qa0_M{$qH1F!QYNKYN&zPIZimFD z{XLhIdMYlI8P0v;my&)eHsW)akb(+6R-Sa`g_mxJ?tqgxI7VGtW`6wj`e^rJ|0EBw z(cHuXskK27>64PpRgzysmRnJy2YKm~J~H-Gh->bUv>xJ|sW(+rH;8G4KI6NT5g|lF za|6utf`|iJaAIpeqoRtlI&vIik7zH#c#Ua@9*C=rBz#Rn!n9Q8Z^z2C7qf@?Y)QJ| z`X2TA%6+(9_z!;Yj$iR3um>rsV7UuHQBph5G}jkhSLzoR?;jaLvlLlgr_sJnxIkJuW`V_?R=SUC zoGXI8N!4LrAwGS@-oZ6 zqn_pi(@>gS-D66}?sSi8Hc%yUE9nvL(kMbz@7KqpBZZ0G4g}jXno}9M300QAfl%^| zCD6eFC=I|OZv$iAM3{=$h{7?a+&5s(uJMgU<{*Y*#!A3;q-v`*zHDs`Zx7dO-?p}f*uu=cAll1j{6ege_GAgm=x zO6Co$aYcq$Ma`Kp-d()B?3RhW0=BDBxc zdt23zIo}&Fs-Vi`+GNMErPJ7>?*_FU7CSghsNJ}mwksu#xVY(Z$ni}}#;bD)J&SErkUOyZ zG`*Nl$cwE$WCs$yI?+?%8VC6xMwjq6S;5YnUD(j7+t^gU3Xkl|2ibzyPV9q$1w)lK zq}Yjm+z|cqaSHR3u|HLGB34oY{^d(5$OukFxSxDQ4w|8VTg#7f!~60rGnzPP!qKu$ z^j2u%Ag^WD{Z*Q1DMu@TjVLJyDJfk@0ujg^5^x6Ul;eOXAxWXnujHSwAWwE}nm4&6 z?(fr^(qfRQROfIJ4ai^G6_DAV0$)Edf+-YR2fWx!RJ)E(Yq! zwGDlsyi&|U=qJ$nS)VR3OZoF8`|v!@Rv@W^^_yg27*=P*e^oo%9Kf>?hh*<{BX+)p z?b+CaP|V1LtK#B7E73!?_R>}*gl8ohjW_s(6$O0UMLNRkLeeG*8e!I@@iYs_zlbas zlUI%|2}?icZV{%D0LENi4&dAcN^^M`1@2-Q(Q*@3afR|d$a}LU(!*NRMc~_&FB#e= zykD_Tyj$a3L*j_btVknQRcZXoV8W&FTdH(}dw(G5ceFf^c+=1fkB92U)UsmXBUm_RZkivs*; z6?4OVC1wvx@)>4%DUo+vA73&txaU|C;7h*I7vo*$2uKm=%6 z<`jY{mV1}Y5lUqfb9#ibiJ8aqUQJB1+{&y3X3HA=3kU@;zJmZyRO`aMhJ<#N#vC7wDtJxv>TH+RYALA})|12v@Cp@Nb z+h6cSF=@-r3Ig|4DD_#KiVAMGI?If=Px*>?{s29XZ!C6`(0z^%?gJl+jbR7pGDHsy zU~86z&|{2-QprqeH%O;!?8Tvc8OCh?=%AjWRC-kbZ|)oJw)+YIM$9b z#0@fBckqQ{DM+Prf}e8RD}MBvTf_kWEI*tJtcZSy{pb>3Iu2MFZCn4K9qPM;C)4a7 zysm`vl*ErVIE5XCu8#G&1cmyX}d!66vjAB$YnDXQ3~5V#1?zO`Etn=2+I9Z_Oz>s zJ?h5rzDdK)2R6r6rLc|Rvx~4X918(u%3ADf?_qzqn&5-|;aDJ8;;g#Coo^FoeSs8Q zP2O0s1>RVuIZ0RJ8cTE6b7CxGdn`Q*D{{8!$OYscnWK8PN5t^M7Sw=V)pg|-C&chp zDa)1e4Mz^@{uO%OB98B!JNR*}9#O5!^W?uZoqW?xd&Db88P%t7s#~{@?^bB$vi5J_a}3wJaGl>p zN?u}W;W(o1CFWl^1*EIU?EWy2JcDnndLj&l!AfLu86ls7C794vMwpUB&8DE0Opsns zLXKuHA02?7)?8%eVOj=GU8sXv?FfiTXY#{cV2#R!M zzl<>Lw`+{Ea!dyU)whqrk0O9W$z@MJjX+-7ET!c*bwAmaw61trR1UZTTslOn;m^Me zYP+n4oQ*Ls)q_Ul6GLo`=%oIGI?;t%%(AgTGyAf?C2{e*HI|u|{AmdrB-!~LEW4R< zcMxg2(y_Ef^YSBWi|1dYCi1Y5&A$e}QQ*olaO6O2a!~ft@JNW5qzD1A*{x&0zF%T( zX7#9W4gZk>sb5BNdN!F;X*s#|sl(PclK*g2(e(VmnJ~Ip?eaj>?#=QiZE833G5r=o z_swu7X1|DF)7a44$15wHxk>bfJa=?bjZR3X#17I&*r^f@v6j(-1}Ja?$;IO=lm>II}Zxp=9e+2jIL&K_6Yf2NbiG5CMC&x?9# zi7BnD{CAC@zc^Z8{&3HjCr>DyHU$Uu_~d4=t;UD%tyx;Keb107S$u0TWGnUlg!BgL zgf2&v#Px5WhNVwbjn`W`Mb&71PNj~yETazJ*RZydhw8b1l5_=?wmLDLpNyugM931g z)t?z>C@oy+@~9rHSgf9i1G~1uzz<<%=R4#z!uAH|^cuFPh#$5{KNiD|zO)E|5vJx7 z5*yhGiRv1o6F0M+3zYMOH56J9JE4H+MCS*AZjDSUy5#$c%%@+%39^(EUAxOUSDI2V zs;@&pcDkV`SY}5@vR}ce9Bcj+9EgC5S%Y#~bLj+0>tDdJSYZ%PFiWLwS~E{ht3}4L z*~!KV)~w}1GvgOpXlxrduQWtY_!dci>%^U$o~E53cVP`@`!d*xbfKgtDUqNgwuOhB zh)F2Q`byf~`mF()rxVilj^-9Yk$CWF3Rr8Zw`EjZVHCc%{(s3N^$|HjdCmC05 zR8Dr~p|(mKrdn5rvs9g9d^U1EjX-`IVY>%>%CM8@#MwZM^QEw3Sx0>Pkp*Jzu0X7L zu?1pvORK};YX&N4@xv}H(JH!TcSHG{d^1vP?kHz;iu+z=atqcBZ~_N%&nd;7a2_qL z_b?8`nV#l8T>gFY8KB+QZ+oAvZR*k#B*2hw}%Wjfr?Lu(#NExe5>20D+=; zgT(8^14^hAdRvM^3Hz z6ad~s6Q^0`pxRL&@p6Y~Gq;p-0)XW~+Dn$VSspB9aga8h;Y()#*qo$2rl3;ImR0(} za(%^r@KMI7bI*B$+Ak&7xWP2aELT|khiR1m!uyPFf7|n%&g`^>2;{M(3xm}8VnJt% z1x`J2;fe^(4teI9RySm~`MoY{vRfR$U_*S1AMjGRg#GqU7*6V7@g`d?p%si2Fzn0H z@r32e<34=H^m@|||In{mDZdJ2$u)~_ycE}*e3pLfsvF+1K%estKSM%%L**47r4ipy zdBgHPjXjUTh-XdDv(-{OYkHpjq7dC@W6MuU4uM|Eyh}D&Nvdh{UiZTsI~qTfR1Oa-6kXfvP|c==L*GK`&V=RnWxfeEPq)Uk`v+|H6s&e}BK&IsEj?7RmHG zu03;`$<*j+h{TsIQntJQtqTSFFM4LPuD^WI!)TBmP3N=>5|IAXGuCh~S;)d}&T6qf zURQkOicfB_9*Ky*bdHN{pSTvytt(-)vX*8sYv$k3$16Xb=I`z!A}{!r2UrR%Y9E;m z{{Nw@gIqV+qXM0}&twF%NB_RwbT^^?O_KY6r-b99Wd5ZQe$8!c;h;Kd|CN9i;kExE z3CMhgE11Mfg4Teeekj@!ZlNof;srK#l9EoQ{x(G4;Gj~A7!~{d3dMEU;_* zR^b=C@hcWeilX_qEO^XH!HZU#{~O$F0xrrgZCn|q-JV!}dBm-M(E@yrU*yoZGT+k$ z9>au2L)S@c4gDK>rJTV2|FBnVY{HaZYGnJ@FY{}SI5ftB(=YkkjYGMLvVj+u_$5ar zgT0w+!Yta|`5%T8(=KeYRM{_7VbTQ2JKf^{K0;IE%-v50bGR&+0TEq0a2&Uj`PfjxVf6(8@N6Bmr zbDzb3tzQe9;D5;awUyxfn&$=xh&1xJz<(vW^mOwQ6|IWGh&Ab`SjAX~5>_@(QmY+5A?m6e4d+xdC zp7T5VG_L*voqjK{pChcASEpj?iTStFk5bV8e=e>|`ShaiuUW?1Wk$V>^(*^3mRZ;3 zDDR;{JSQQ(q!K0T38dUAHueL3-Q5R~NOHTM2elqJHn@46n&NUxAJ3kaTAk^ys z2n#{zIZ5>+A->vpQBs7Rnw4?+fO<(+ho74LBV{#5N0mPG5URC*?kXkpW8Q`Oj-y}O zW`FqG0}g5?#CI!ajBAVuTqTl8jpLet=WJ#`b;7IgBnLFedl!;7h0K-XBge-IOP3$* zdwY@5lyQ8ZUm(yXn5@MmO8)={?6HKat+lJpty+5Xq0Wrd{LQF;n3*|ad<(Rpk}AlHHr>_zJcx7*9bZ;d zK7OP}5-F~I`URjfky_TEkqQjO%+{$ULF(|C&#Yc?$G#RKRc0}H5xnf&rk)!QcQL_` zCeNpFgUHJDF`u)WqXZw`8xZ zx+FCXJwUw`5H${q96Oeao*LEbYdk4&jU23&5GA~8P?rL9&!oFPsGtB+L0zB*q#`TM z)%E=oVb-4AHZ;0Q1B}YXX!ZI3w!~HBS6UJeZy06}m4;n5hhzV`>d|u16`l4ZdV8>1 z#-kA~#1x*afut_Fh9kKdtlTvka`WuDEt|2lSMtnKN58Y z)``{wO5cvVm&xiAQEl*%L$!PN))cxb3pC@5$ocLT_S3h0eesS^V&kLv{Q1*mdNHRf2vEB()_%YLF5tVes4{^iW6*de@@q zp{SHmkw0+0-xvJzNuiW7^gQ`@D~D&6<=lc0X6FsH3}qpr-UV~hTQpl7GACkj8Y)6s zwK?(>ir~o<%QEQEWFX>KYLCXV$M3Ng&r621cJ(s$_&#UWi&`13{-O2cPaYvT?zQZW z*SgeJE0!6t%VHUpN)suw(4aYrWrV&IlWOb;y$sHJsoVxwY=C`)bZ9IQ*X=42%1EeOv2WZU)zw@cWvyCpI`0$4kJ zHLX3}IjNT1#272UVO41InEGi@WTo0IFN)YH3`CIfa7CNdMG(1(pC)otRgg1KpKi_0 z)RQCJMjbUROF>Oqj*c4RB&aE3aa%en=$0vp~IdR#i5f zPF~>Tv^;is?WT_2iSmUH{yd1_fgR0tz^Pn+!$9|mQOC&fE>WsZZ|YQ@SN9okvd2*u zJ-^Wu44nn(z)7#Uernfb$MRxhZ*XUILvvYS=VNznKGJolXJSQP+u(Iw!mAS%;=#&U zvX^{9{|b45%2~vvX@rHw$MFoGT2h-MVt_E$xinEitquZnsv! z{n@GOdL?i-X}e*e`ZM-Iw~4ih@#8Pj_!2$bd;B%mE%g}Rc!I~@;u`-QJm*XP1yZ*c z`*7eqnum=rIJbuYG<NJ`F!i@oj zmpV-7;Qon_N2T8-i}^5$Gt3TA`3+R{Z7iRi!WvN>Gw^fssUK6e&V^-SQFn*%NVU7K z1DDj#E#yl#7+0#Q!HE3f? z;Da{NzDUDT#>$~$bw()mpb*9BUWLAH0tGg)-xB7H=O#1?V;%-3G1mcm*M%E55dN^b zmv&LQ`B!h^=RH_|bY|dOlnbg|Un@LOj{;>nKm;nOr_%$q$@M%jaBVuONy~lCvDOC4 zp8&NIa1TP{@nLkX>VBLZbi@b=8M(S&J?NGgdw>TZF~U49mI%yT=^Y4xIV8l4{Xxrx z#!l(pDq%hY0y1w+x2LC9XJk~Tr&ndB=H*&abMt+pGCO}PKUbZB?^NWarsn2Y(zE}D zDCHfCv6U}8_Dk50#S;BFi823-4EITpRe>hKjRn2Khs5=O(69Oyv)sdI53x#XilDG) zYe40H+U(QmMYdp+8(7DXgzM6`o{*cz?gOjOjsmD-^_hOTcj)%Y3mm7TcO6<>cy5xj z$B{N!>`})wn=JRtqaJ&fwr9^~*Y}3yV%W!Kr6WYYS9$CZCpBv14soSM4ew>}4Rw1N zxhIYZLQ9oNEu$Y$$AMuIRZ%HLFXyMw{0bH9ra^eE#w!8jaq? zb(_w)wo&sV8gTwd`H+V7ui0GQm9BQ%Tz~MLNhU}mR_Yq8=>kh z@jhMV6rCWhRa@b+vt@`EHrY;~b{tX$5Hn6L-sbsqUX!(=a!*mF^WW9huiNZ(sn)E9 ztYoV-IW^OI3I1B$p3)HCTIF!`txHXdY|PDV%w#%qm*K_#WSb zXDkB(g_T73WF03F1~l{~0kY~-Y8dPya-{8g3^7!T%L7DlcXh?aehnR}!_inZ<=A&{ z{HA3B8tULB<2UsSe|1V-FzZbceV>+kaaUEvrv6>KLwbXgni|E6F4>J2{nOK9$2!G( zpclVD2YN#93RZ9YBHlam3yH(8>#ZlD4#fe-sv}z>Z_t@8UNM^MDkTj6<}Hm?-{`6m z82pyhID1w>KA=}~a@)4GXc+t_cCEO%-*L%qK!E{*zhzGq(Clr46$p$gz(JehTY?lX zDd{c=h{NRW>e?;s?i&KI**Qe=I&ygGOs~8i2p+q<8!f?abAZ=(@ZP7G*IU?bzN1wS zsJF4*OqNw6b_jxX(pkP0#~)rhaBzvI{R9;p&Gyx^3rAtMet0xdB*{DX%)$YBkZmQKBcE!{83pJ(s%cJ}9!(Fu>RsCX};$f{?XF+IsFIBHhoAv<-c zuBncf__#^Uozl+hn(651CjVaarg=rzXAHB6J~R{&_S5f2PnX-x_f6c|jWN+mSix&L z;)FowL7uoTm`xx_7LpT^JSQXzip4qLPDmEE0=WhMt3E;ZlC)o96`(-P?cTYK+G8=+ z#o@^jorNU{fYj?-XA5$K^tUpko~6+eQy5>^-r`s~da`Hu%vk82O9i-|c>nMHyDNvrH8*sU>ph!=Kn82U z*vT&82kKc{ecjSorVIE^v?^&8`s%629-)h9A>e>Etba!h02(3^!$RUCJ7bFCV&y&E zY-4t0h}^=I>g3Rzq{58mw9$Tmfboj-bPENAydDX$V77H7JQq!@QU&I;Z@$R%XXtzq zDomayXbEesX7L`8nyXnnM&ILgOR_GZ`!=$8!qf6_a=n<5me0%Z^}z6Lm=dJ}gjOpw+&4$Y=eoD-S%W8g->Mx} z)3U&VRYYdloBy=>IiO`R;#m;-3BZfyysHomt&JyxA=Mc-W$XhP*0EXz|zX8SXzk z+U0m~L|K{jQ-^J;v|>#owX;!ew?(tgVW-%RxkEfcLoAeDJgJ{hLD95X^ISJA4Ar}? zlryC+-+v$?B6&b~t7vdiv$b01uCgv}o=UE@G;9+6n)w_$Be)AzKhNh<+_@^B0=Ib9 z?p*cH(6fc6cS$-yeF9&~urMfv&=`Ycuk4wJls|%#Aj3l7gc)&8G>4#Z&8zn+ufBB0 zH}{?zT&c!6oUdoLD~q6$hM9-dMABJ8_>HG^mcbvt_F6U3`G)ws@}fig0&DR@>T3P_ z#TQ<^S1s4R;2uDXpgid@f*|PHYn3M@LAn7b+EAtZx3OLJZbxjs%0`(cmG)}84f_es zPBQ&osc;->?u{%fDJvV8EbdB3Nc@f{-meN8zi!acx@#=?dry3Jll`Xg75}WW4`cdU5Thn&eWmwJxop-m!Tqv%`x2GfGP+ z9Sate#>ULTPMhZ#vc%6=gwpSS42sgsJg0t?wI_^w!J)gCv5)x|z2=Zxp|0ibT48ea zJg1!EXXrEAWRGXQJJh33)Ay_KengGqvF~eFuN>f@M1@b+FH2EQ$uNdM_TKgFtqv_{ zu>lC*BniX)hF9^HMeuz2t2orrKD7;PZY`F_6YsBR%P(>u6N^7vfL_v17!oPgh(4>d zxryG<1c4`m8p^qS;bc*iJu||d|BAB?c)BmJ zj-BIMR%4Yd*A|Z>5H7XsHoD|8n$1aLZ5azpCN;>E(YEYAUpG@&`iB$dm{4=*#1Elt zkX0z&aY8)@%kzy6ih#*?B2NX$9y~^s@_npKiXCIsfJcvEc$GG(c3XroR!MgpY)SSQ z(;QV=5>wDxGFjPO93z&fYy9?IBgvD`J$ZLS%RNv0^90|J;LLoO^}2u}qKa5Gh{6LX z7BWJ#O?0V37AapSbK6P|!128pkOa{{?xRA{L)UDIX%qR&NhTOx(2yRX!4z zxOq)YbKLVWn%Ym#P}?l;{Oa7DrK|Ukw6rwY%3Ds-y$E`kbTNH}bgMW&`fzoJef_)$ zRL}er&Azz1S6~7i)DRB@wv-crppg2?O)!PrZBN<;DM7l|@TBE_DXX;`&{u52$Dq5` zx0N}xQI?dIEum4MHPp@SE!eg!++k`Kh({r%o{fwvxsPiV<6X0VHv!{r>njd&1Xr%= z=$I^1m9mh~;F6&R@@h=RTwxU7|Jl=@2QF^y#w&Y6hp+5!-QOG2(h>_NXJkc7z2(=! zR)S+*`@yvKC2fRL90F;uM3gfukr>KD_Lhj3_Gkj3Mr+Dse1cCkaTIJRXR$X|KpWOe{y(U7D4NORDUxo=V9`-RAq@u#L)lWN(4?m`f?4|k? z7OipShckJ~eR4O&x(&43$z~g~HoeEiOnpiG@U^)*9~X1fsO_=T_ao1>i%WaqZy%TA z&fduXEKm^-JQRAy{=z8ogm59BU&6@{_#*U7`;i-OL_WJw zJTAg5B-6|%|3Eht?wbkF=vj$xocZodl|r`$!G;Kqo3mHvYFY?!Q-w#c*{rFOlwT_(ZsNon;E9nk>_V1Ord|rdx0S&HCZV!S~FpU?M+l)f~_V7ec*Wuq*N}m zdY8}|XRawcKG#x^Xe|$^UEleY*Zr%|?FQEvGQKa$)CrCiGT%Vu>M^>cb+mPe^9f>%jC z`9*sZuQ%f>&Ua6o^V3cpIar0kErC+Jq5o>yNaqgg1+pS~&@Zp^PI6=^RJ zqL|VQ7o|qO!AVKe2CdJ>uSJ8bCXP&MB)mVZ_4c5^WY~!8iUkP^?5BB;_GKY~3m=W* zo*!@)Bn=<-ERg*){ulHGckM2H@yu{`1&sB1kkA=TPbTN?Ut}y7O7i}`IXV}K_yVdx zm?l(a=xE|NAVPuUZ+fXOj>&q0=EPlc(^DU?;}dBP?LZeojW&Uk7n_=wE^xkF1bqne z^>-brtLRU*SLop^wMwJE>(Cr+>EM@h&LZnI-*W2xavzB|bdZs`9q?^ry_3=-toFG% zQLtUB|NEj5PrC@1Blm{xR*pY3MHd!jNM=c2995ir2b~)@J4IRn?5uOr=f3cy^X2@A z^uAdMNT#ow6`U{F_q-T%CixfUMWPcqtF-T2_hI8H zyxh=;`S!~B^mMba`*^z93YFo>*pd30E(vk^7hZn1(&>Co=Xom+$h=TB#FZ(EuRF*6 zJL1ZBTgd!q(0RdM_)(RY0IN(Ucc;IG3T{C|45v*!dl# z-ZXTglt3H_((0yv@h^|B^{OeL)lp!qW@+UD&vv%7+yg>Xt^qxyvwU) zRscDi?}0%{r<`W5%x2}q`5hm^TwjF5U6TCMGv{-fU=74+LU4!bw?N$aKV_dx*X z*tsdNEv-m4IgBY)g`Q*-4>gJ`JB^OY6?+>)8+UcOX+gr>h%Uzt(%1=Vf{m#n#}3c? z`Pm|J>|pOnT1D>qGfi5&KjD6fZu){SHJcr!g7WYZwB&8ys)>>0h>ogPg0e2dAbbWo*&{JeX4&|rN^B#Th(@!^NruJPq%zai%%ao68-I$jPm3NNmI%Ue3 z+|xKPWC4CPqo&Y zG_Z)3!-D$T&tKGT4(2O!<^Y{*>HakhYqyGHhcd%ZFLw@KV_hJL{d~!9ov0nYRJM zGM7GGL=&J$O;h78f+^4>@TaeSP?JD;J0zQ(7hx@B{F&AgC?+fRq0W}%<*#nGuty=v z@JncJxj+b|`VkS-@!T%GHzvA8j@NShjpqEOsHoJiuylLLtZmcg@<}?!Di$lv&eyV! zOn-{Epf<-zTgBeyC0m<3cTi~smtHyIcdp~q1jRC zqPb%k(JV{iUyB*D`y;)WHvet)ZqjAN#)f}gFE}8p0a<^MtwxEk8sKObKbOL41PQCc zdYGa0oBqHyUEcKld2BjyfbQfM(WcKL|3k9r!dEfv!)#c!PUW+F6}Ki`nA0NE$dBu? zueSOfbCt5JqBco=N9VdoJ)&mc9vhObO}yy2@toqhC>gXUy);R=U`G3myTn?C?ez7)8Pw`r)(soo+ zJ3m*_GubIx{c5lg**D^u>=vF;A3fLF`k>$EGf}7dlKKPqDyWFcE-_NWcT{v(Gjprr zY!y`Dfvg&lTLV<4Tsuxm$}`~^S=rGhQ$$!)Lt|-Sab9skV%qAsf*2*vITMv0`K{EY zgIQTQL;YzzZMWWfb$ME6ZcAt4QgeO7vmH0}IofX=G^RFGM%6`EHR4K=Dqc#|^`Ie@ z(78oEESzK1n8<;xIVzEb3VpLMkM_8DP?fSEJftG7qkL#lxKi)@R&;gdSY7iXlf8V= z>+yDrr6w_}ve8nT+*7z|Q;}ofrna7&yBxhYcU`G0{Me?i?(M5^{v^IQE-rIXU1DKu zX%flOz_Nhs5m^^>8H zQoWf`v56y0obn5^bM%gahO!-Pdv^u@>UFd8S5F3Y_LdG<`>A@NK6Sjh>dZ~#<4g&I2*x|Uzv1*gUu~A7WH9uT!E32(7 zEyd9XzN_Rp%8)=@gG;YMXqjggB$$njQEoLmzY~{GKHktXQA*4@gy-fQ`MGIHd-W1< zT)4fwX{x6EmP5qy^CH3R^2;ynXj&>q1m~2U%Oh%go`3PG$HfSr^ebg|Uan7Z|0TFI z(0nqN8IZA-t!JFy#Qs4rY@BO)HNM|}I^Zqt4JOMQtgOSH-zB zva%>P7DHfjp#3Q}SXpE5Dhv+`OR30-jVWztNl-eR&n#S!(N~k4P+z;DrS@p+rJbYE zW0CdSx|cZ$#|j>$&J-9`8ztB{CZ+O%T8B}yT%+cqo+`k=`)!>VI6{5+VUMvFEX-U= zW7{U`Y98gv~*#wfzDHMoIOKlfCkq})*>IIC6qJd4{Lcox%K{W z`L#*a^6S^xn(8S=>*^Zd51(Jmx6HB6c2VuASvm|5U$gGUCh|Y^5~s*b5PMHR3x9@Z zX1*hPP0xjojG6j4kNm-AO42hc|Ng_6DcZS#^UwK^jEbsx3vMeQ5?;lT$Lz5*Q4XrrtwazhXo-NEz6A&4L*R=w1&41If-m&L4 z&#$!x-FTo!3DXU9hI!J>HFFZJXMW`B8)wXiPF-fK51M|m-+$`!+$pI0-}9$V ze;f@+oado&F5>iORnVrZix>(lxeGb)`J{VR@_T?og>P=O`iS|T2E~4>)kpxXXZ||k zeMt1llcp#>4sO0#c;BThKD;T)vcZW+W`#Bxdgo2=d=5&!GI>wTeQNTP7W(r14pDp? zXLV&Lw;BfK&C|ROSAH3r>-;hoYjZgveC|Tb$7O*6)sN^ckbaH-#zzverdAie#KoCV zdG-8h^9UaWBF;0GG?%)21my&Eh?NM*VO`Ewa;`i;Rf}*1BJrXuONy{lbVbk#YZ-{v z3$d2IIQR<~OOuEqNbB>VtkixVy3Qu(!(OS(o2u1GTx`qgm#x6DiMh;A;7|qKau|Bl zmyDMnKJ}=G=i_-jo~^DsWjn?538T^~ZkEaL$O~P*OSbl3b64|&w;2Vu9OZyEo@XEtnneotQo%s0mR^Nhp%slO%6DsfLA;<}~> zsGODY!?YW7<(aVbtej|5L`+PBoo?v!3&YcHR4%_IHYZ9+cK#_Tb74>Ynd>hv?`&+S z!p;0Z^{J+&=3`BcEjQzuO7euU()6+;fHJ<3pDnke%H{X^7n_&Rw7J6jgN-M(xiUuM z87M~b{$DZ_?*TaCe_-iF`3`}3N)Vr8ZB8;qJvR*dr>mm z!2IxtNF#|bxje2X)5@Y%Rzh|?)%K3arl#QsMz2~;;*|1J9>$w-o9@XE5Ycg=C6WlF z&Ovtk&X~dkQ)7)=*_wtP9PPWVY3mzDgr4F4TImMX5RlXCQMM>(aa3{7>#t9#Tb#ee z^)pLVd?MI*jlA`rQj!Us$asywEyWvL&zR+gnY)zls_TjW_$GAR5;f4S1}ma@M#zKB zTbtXL)V6QR`$)xPW5?>U+O_rTNAJ9~XJBPl+v>88_8VH)Rk!T!S$gL=z@4h}R`n>q z75J9{-b)GNxyUY|3rAmLyw%e)YRS&F_#5kwV^>`@mb1IPZBGvIVz|ess*S`8GW(HH zK&M(!f)7M@+`rH`!D{Hzv*!ke?zy9LU}b0fWQ8EUdCxuIX$pLHv@oBxiN^LdWz36B z9R>2MjjH2j@j~el8nTuPjYeMe@Ngl_BY#BW6#pJ_u5zNT&R$mAU9n-aBRnC@YN4mt z__E%O!>iWiXY^K%lzpkECp#-En4%Oe=bIGu^o|L~i=phT7rG-t`CinU_el2)JoW4cq7B zg>WyC*6+!nPz)V^Av||>;tvRB+8;LlSN9+1N_q;)igQYv@-|F%EsPFHPo}4|x}?O( zt_65Z5s$XXu7Oq7)Rv6YrqTMd*;!zp{vU12wut|KRWUYPSXfe!Q=Zyhys>XoQ4*^& ziz@PSt%>CcwJG!u@ikWY52a0gqpKa+{i$VZvX`cotZKiaX*{F9YK1+utyKO|H&)i3 zEdQwPPltrcXMT^)CT{=}7To}F^UM<9!vu0sNSA1V&>dNvlDhxW1DCW-+7k|4($o^4 z(9+n{5*ObR`plD0f39xRRZE|Fa_QjJL&H}M3|=)fa&J8ILt*B;}VTY}@z5_#sn7XlR7V9#z~OI@(v>SCltg zT2Q!Zlk(zpwesV|{f%`4QNQiq(|}PbW`3`{jZx5bgl^7h7~sl@VK6^Axi)4;3GJCG z?H?>{tZ8dr($>0U_4fM7s@)L!szaA83kq7Z z@siM$cWr$3#qdSL>1XfiJKE#u>25o$M2#vtHXYbQDrz zY!zQup3Kdw*){CgR=NMCnS$ob!JgXgjNH7buWy{Zak%G-v4_6k7{1}Uo=v-3ceQPQ zo>0c|W@8)P43rAjn>qD}Ro4A_q1|FIZQ|oG8d}?|t}9P8x}x4k_lvoLE} zqSc(zY^!Wa;o(=_INH+Ecg679hgL}ns+aED^x`(h)yLaFOUJGjB8TXaT8F%Yc)1I) zEQP9Zj)Ruw$VTi{dqIJH#rlG-;o9belH#=3gw*lzgZsy~mEIW|F&I5~)A}o~ELqmj zToc+GwtmftkBr|j^}?4i4mm471K;V)cdkpQWPibRl^m4RJKmY!o05`Iy0&-Awt|9H zPmj0NGAvP&>xw6{9Sx(qnmZ?khaR}Q2k*z;t*X$yNW8zv2=!J& zGFZ)H^A@C657lnibSzX^6d5sO+5WkQAD+0&`N}732TJxlNirya3>=^hc%?y^BH06z zi@lPUAezzeLJ<@q3qvUHcNplY<_g;!Dr7KLB-=9%7uZIlPnt&AAIpnMmaeSD@J-bjw& zc&mY)lomXN7>=t=yqk6#&L~dxe)|1!{yl%1zV#ml+LiHhrex4|nD>4Rd?*m=Fc(-2_L51{nHl227otD^g;zR8v);LFoWYPM*F zO~8Ie<;^)tS9-QN5R>{tKlo4mJ zyI~6@ns<;y_;o>^lgYYp4m^Ikym?^OF1}<>jlIDx5L`E@4%B%Z9hqP@08f z^|9>hf32ER~F=Zzc z`Yd75Ivha4KHJhFaDjP7Jg|7RQK2uNVEtfpVxBR^>ZKWUP+#e7Br0AH9twXu1UF zo!#l!`7;ltq%|Tt9|J#oqogDU_^EFq(=3nB5AA`WQ>ir&wo^&b_q}kOJn&OT#S*z) zt`z^+O}`X0ZoZfr^`Wk9tTxP_5eU1;lq;lNMb@mqfpIxV!c}B5Epxb~F_E%Ucg+dU zG5wB^ot)mb`hX~n4|+`XESYmSu`7rb4-_UvYm zF45{%U+_Nt=2&X@)G>#nc~3(toCUg-_-mrZ0BXwIvI!L5G)mcU#6ZgCO~0b~wOTfp zU@VK)9M=ScRs2^&3FrCFPbOyaXLj8*>N4*3&+oeZn!;ps6ydNzJe)B0dEol+Pqav_x1mL9dUE;d&dpom z%}YxJZ4s74b46xB{-TA03}0W=@ykLqE^I99bp9dPf~Kj~rsVqdtpk^|pV(Etyd-1C zc2GNh*XD}h!J>@5e6&rCNDou`a|?Sc9cgvz`KJX}VeD!x`iq<@ z$Zz;Fo}MmNhXm?G@TM9}ciP~9b1LXrIYrL``;g86hBcyV17W}O=huke!-Kh(ey^OG zyQ>4e50)TcR|r(>qJJRhStaO!=Y>wCcwWupd30#N`|zyq;J|g6|ID99kcNJbI?XfG zb;7WPI^@ys{db+1i$1o6$BcGZCM?l-)#!1{fnyNEqgdHckZt_cIUL>O6^F7QChWl4 z?U93v>)S`;>}gjjc4dJqrp@lm+_|zMH@&2}t>Kb-rt+A2Ek+3@f0OiT=9t>gXFNn9 z*ghUp-^cGWHT&o;1x7udHyKYhPNb^+8XeKGE;3@PGOs-HhocTj#z3=1MeQX`%#cf@FJ2LVZzb-rgfM z`m&n5$(6lDqOQiHric0EIvbpEQD-Bbm2Yv~%{$bKg=XE7FZBHk9izW-=B5-DfT#%PJh|s*rT0#{EVmgICcHRV?5`p=QkkBn@%=! zjHo}$)O(Kj29M}I#>`?+e|(YSy)DN>Ww)n9H4ZVJ+vsQq%v#TZ-;@Ja3ET5WalG_B zJo>=dTJwv<;gY1>q$a8V3EbB-MjhjesvN3gCr2kYK$4_V6E`|KHWJsnp|Wb@lSSPH z1zp9(-33KG1=*FhoNSw|sWt7k)$49bZ;jt{rhnkf#(N993yb*w;_m!TTXuG3Wp=g= zr~YEY)5>qvU4}5~Y>L}S8Pt}2$D|9UMD9Fv>9$>mF5TWWIM~%WIQaDb&D-`K+_ZJC zqr0`Wr>C{Gn=O{%P4(xh1CdUywnYpz9{qU9q{k zYRmYRvgLIfYwVk9np>-?T3eOf@-J_ek5!Lt>F(Y(QZrWC-MzG>+}7M!RoSTh6g0G` z2O!ghxZj3ni`!_k*%oCr8gse7U9Rxx5ws7cT55#zfpi6rG6W}};-2q*uczmG-wiS? zhz-AbjU_kCq#BLN)AXlmS`fGRiZw}jE$SoApD4-GE0iSXPq#*-MLu>UwJpg&VO6PLJwA{9pK|6;aYyeQx(%c_rns8*=rS$t9@$>_ z?$WGvt{2^_{U_oQ`L9inMT6K;AS)%bHku7WK1$* zgG1c+Awhhowpvu>9kVqmepS=D^>Oj)O;febd+jYTFT^N!#->GPM82~yyEHYaF0;Do z;O5#DxsKbOUQL%Hh4p7*o4c(oDLJcfP#{~Ks=R`67tlQ>a(58M3J%EyxCi|3R|-1{ zf|PrvYU{#ti(`Hg){@$A=H^bksV8^MD(jN#>H7wJpE|vTa^FvUpYpQg8!YOr>CGhz zl(z@*iio@-^G|}UrK!b-E~{|ROA6Lbr01=fkW{G2c*{bHl?W=dmuO_XOD_pb$F2MZ z#6IW^pu>xdTLV);{#mNA2k$T=A0o$N4n))%HeELjBqL117sMoR_`2sz$v~>}UcQ@B z?hMZd5=a z&4eyigzlVm8?WpM9lUC=ZGVr1L#1;cjd>Vj5}!WCj75@~$C!(s(2v=>YiV|`>F|2@ zh{L)O+Ya77a?fYvcwO75%z*dF&tkkXVa*U9&h;1oPKy`gIQ5DEvihC;#^|irBwOXG z_K6bNY<;N8O;FQ`smX&KW~IgXT8yKi&2f3f#$&fFX>B{uO$-Bb)h&#XJ2pF3|Gynf z5wP(#f}##QunPsKBhK-$(!H@K`#!1T!!g2S;?CYU<=K0D(avqX8!P2}4BOn)cAVZg zd89l1f4tg~*KO9fC4cx4G*gw+C8^*2$eQsx)_S%o=Xo?90~bizoIQ^aA&%9vxKVVI zDXC#3Pd&*cL)wIjaT&GKMHO1SlHUbi!hx}aP32;5g+y!kxlHc0d1@~|m$;q>__-K+ zFYAP99iD5U6TqGF)N-F9*Bun-)=vFSw!I*2QG{)I=Ny_LLl&$bT?cm^>|A!dgY=^f z`mxPZKV+sTX^HSHO;t>Dwcr6!pKJKJRKyRkj(&yb6zoyRU9poI^8&7t>z4z&xXH)n zWfX010Cp>YUmr~wSWwYaTjhLl?Eby`&JIdM&rhhSp>4bRPMlV*7m#T`X>|b9HSE&Q zZ{GgY0S&*iZ-2`*&Q6By6!tRD_&n%HL*5GAWBZ_kbb)u!xky=i^LW^sE-<$MZ7ioc*W43*!KPY%Ci?@qsd$DS(Qcn-+K1ogX=u8$<%nn$vcF_ZY+j5^ z-MljFO)>TJWXB7WPREq+)k(&n876IhJQ7d%e3Rf25yYQ@#~ffFqCX9Jo306Ab@x&n zwtw-8r`C9(*Lmm=@vHoi5$p=Ql*kQR=hh~gK0>bZ& zwHscthWp?{#o&bcRCVQ~IL_beL9Tz5H+G50$@?$4sr9G(5{sEBl#&fVVSq*8o5;Y6 z!55+aRt0297W1}?KqZG^|`3J819W$Z?8Bn*v-+{_|wOta^fz?-J#PNd2JsCe-e-NFU}t< z#IXz3D#^q})++MUPMa2CPXNw6-QQs2nvb)_*aGAY0i?~ivU8a=uQqzIZJB>xZQ@Wz zv~t#YFf1=4qdB`eCI0a8p3&#FNMFs{mmj@jlcVm6&dzRva}zW^0~*_A)5v`h0y&f% zASI8|FSVjmLZy4T;?N<;g?|wiR$S$W>Tn64>^_2kY(%J&>N4_+H0s&9oHqWDcil1R zXP!2Fl%JOgUm0<AFsZzS)b-h>fw~pb~HV2g}m@EqiwC?wXQ^ z#FC*(_c^ll%Jt*Nx)vyD&Yzsl&$fpzOy0A9_uUWE8P3B+-t~z!%l~1WW8;mB7qJI# zSZFH0s8p2>>14d*%JnOWs?R(7eNff8wO&e9PZh}$RGC0o1yG<{wTFKZDH~=x3et0 zlmTQn@BP^5?OT)%$L~5r450eTEKyudAgmw~_|XT$eMX9;;H7kRgS8Wq z+8v)4wK=D9S^1zfeYCWw*7>vHTh{G5H+*$urg{38%1mhcuBE-Z8SN;^~hi>Zxqp0V>%loHFiZiLR4Y z;gotmKd%*Da%gXWL<6}j| zBL_Oy?5qqiWgH*qx7R0{LR(`)$5$-fYPYsdHKtdFx7rU5UH7S#{inCqul?lS5l3Qk z?M+JNt#=GxJJR*h1DzSE`I|vuv7i86)kbk9!gB@P_?b3JignLyr3W}4i}DTVh7)&F zRhmZ7-4S1}2Gh+EDawiD){=_4?7m&)MTdH_mBrzdT)O>LOVLnGVaq=`;uf~qt&wTC zR<*4yaX7YZpQ@dx4#OyhnE|yOkvzYna7~!CoHa8*2Njma?JB!q!=XY~3+c zKWPgS9;M(V*t8WkheuW3`XHk!Z*8@d4ch{Y%4div^;*t9j01nT!}reJ%@#@OLAq-{ z#mJYshy(%3`J^uY(D@vlB#Jte5ZQCs`Ifmty_S-WpD=sgJaA|2Uf-Ck+)I)+`+T-jW_B#~ z&P@NA`LntzGe5zmz2MJ?_n+4b&dsj z+|B+d$&_AF($rOFuS-ykSc}RQ=RZ_8U^RYIbT;N*$Z4s0d8sLR1-;7lroO};OU0@s zqa%)_=9-%l)2cJA)fVwt?kJXDH(9y&DqdhtTqu1=-@N0ai_f zgOv)M5@@-^56oHZZmja%a`i|4tKdnBsO*Fyr#@(YobceS z{XQ$_{Zh-2@Bkw4s;H+OjnEJNHf5~LT#$^h#i5#>lF2AlHD1b?nu1qBFA9^A^9w$s zm+|+%s)KaUB#iFim>VpewCo&9TF(1F@+VRyg7PA)j8Ab!^vBb4^-6KfPGD;c( zPgnz2byu7+Nd$2lZ7hA_0!_@7J8%OMof;awd1K2&1@08c5LP-Por2qspGmXP5V!Ugr*d%ic81 zv+=W%=QdQ12VA>z^2{efd2@H6tnww#2Vj!!e9K2P$(=aCPAnoy2&o5GIk3-bwkb~RO&={Id7ry^+Eh89;P zg)+0(r0XH4hGUvB-@IEm|D`a!F$Fs#ZR)&l{Bhg5<@fE`ap#D?^e{< z-Hlm{X?p9Pl3Uc9(qX9!rrn;ll=t6!^uc|fSiSnuz1juD_CwP@m~0>F+Sw>BA(&U= z^DbWN3@yM+7@DmybMWdJp}lZ+*T4<`wkzzfv8?Y!Ge4G>Ubn_|$w54?YIkTnlR6+? zb1QfbHeIE4cTvB@&sV+~II{ZAd(?A#rpKviK-cv${%;1UN>>nMYTG@%FPvH?pC@c~aT4?d<5lb(0>qn6l|2ON*mlnzVe{ z8(-R^xb8T8$!ESI`2u;pegyIB=`-_T-Mye$mxg5Ww+3J7 zb@#LD>>=j0A@HnHEvC5mcAxP)nv5xBKF&%HMOveyGb5?vSaiLwj$=l0bcGCrflAHI zvA{t6e(bL9o`Z$68<73YQZ3G;Le|Kgn8%sacPF)P`4ICx?iOWU4b}Y0SL;#c-CK=g z5Is2AEjC0TgA=iKQ0gxXg0?BTZfZEz5lWhNuKQMbC#;Zr%fhklUN@a@zNl;aX3S`} z!2s%v7N6;U@0Uo@0-&H!|GRW#&LEmbS$_fbGspu2LV0E`&2-)%F6%!he)RZL$X|FA zi-`F7Un^yV93%Sm5ds8dm%67;>e%WF`h!jP;Oxr$pmu;N?BhAc=_7KddE-WpmUhhNY=%POj7LGeSjm~y zIF*o`i#tx~o83t+i6a15PXCM6U66y(Sli;1svSI>nVwznzC&E)C#U8e6Ws^F1tV~{ z;^noR@97nh1s6UJ-)skPQ9ykO=@d?P60S%ku7i|A`l;YRdU1!cK+Z+V9F5yTJm&19^iTn1Ewo$~o(bp-#*E|VxEvHG$lCSoW0q3fJ&gO#wXY2jv z0=6XNTd&i6Glc3dHrFSto0kD8!X@ezXILV^~rakX$o$YOEb>3#JQ9lB|G=kg+BZ*XUI zLvvZ7^Cq^gB^{mT&ZIO~-=x2M8Q(i_vTx(M@qwW$dYr#xi<(|XcY+#)!6sm8VWvV2 zt;+Y*YZ$ZDXe0mM{QAqCedrec*4|dN{VNXVx9D5)Q^BTB;#+jLMBftFCf30Iv{AlQ ziPc#n?OG&H8_M%4k1vYIJ$5b>B>ZK@gdTJK?*`K2DqXcPp~4bKGfJ95f}?8lxV%`2 zPU%ni`qwLJc60~1N{LqvEM4X3TWdi%F~3cD1qfsFe%sESe&0rSKSAn0$vJ?wdGFh< zodDWJm8@E&G}Df0X4;is_?Q%DsRv8Si1X7#hMy^#cGpeon1#-0^aY##k^WA%6Y58p zUaE7oQx1vu*&xGv-_z~U8M?pYDpP{@JRtUK9IP^{6{C2-#zmXA+@X~g`Ij#ee9M~Y znWT|AZLj7}(j|mz-)7CD{aM?mrx{vj^2M#>e@G63O`m0sh{H#jBMUM}s%b~?=Ex>E z(vHu3wIG+go+14N$*Flo$IN@+ucJcn^<|B(YO#?QIIFek0#eMAu9?YVa^8rmU=x5Z`JNm-r)5l}-j{cx*EDfEilP(kder0Sj6xyNpWEjVdfq*| z{hsya(aW1+JpZ@&;ojtOergSf#d_cmj#WKmJ=BBWcX zkl_nzBHq84@LZ8tK~V#CLw$_!pKYx%33-dvMCVuCLnMVqm@!0mOaG0n4qt;X59)G^ z5h3xYX$;mXUre;L$EKA=s|EToBpY2z)_i{4*ARja<;mH6_>`37LwQmssX5u;xp;{4 zu@)GRHX3gP3l!N8u^X+g-mAtt|NF8nQ(xG7YH+0*=lD%`Y`d~Ze&-R;6zMw$+7plh#H*So)@yy$R`gl{P`{=Nl(R~LD@Z&BRnA?1&Rtq-11 zDJ-!qa1f5Qnu#+R?@{knUVZ6~Z-P5@v54?Y9|N1t*E5Mtjz2x5uJ(8jIjZ!Y4Edh4 z220~)!o6y_^9}7q1d`Pcg`LK0l_&MAS?Z^c>R!a>9>|C#D`wqn&$Y$B3W+%H*toZEcoj{! z^D}L?KgDMn(2viCYBR?l#udT%0)6L%4rHo*k;@kp7N9GMCxF9L_G2 z7HM|k;K#}D%I*0hHL>SbuB@mF3Ua=U)cv;YeZ?r6u3Xi@g`-gm7nP3Ilr|L<#MVrv ze&_T>CUq%RDy*hL=YUjEk@bC#dDBGxC1~p4yPB`d3|xoW!_WUFbA}zpyYP%?o*$aAC&Fgn z&kzb#V9()WHvU0o<>JKSORV*mts39g8pUPU%c^_0Xghx6@+Hd(1F^FG6YIwA*yvdM z^13W8+`jIHj{RLi&PjzSnIvbjwGPfC&qp3PYA-$L)+Lcs^opGg=AFZuHTDee%TKh!lzK15ZJazcd2REjs3EI?HkF;_@ zsgW|Yi=eBB|N5a+yVpJsVux;7xAqpQ%T>2-_f0TT%#YUEV^lZ6lmbuL91UhHZ0EbOVLYM{EPh|-a^`RRvN zD#HaqqsP0vl|=9{2|ff~iZ2`CT@61M;jj~jZ%X(dN())EZJl33(P~dFU_@`nsoWhv!355}+b<*jE#n4( z^XuP0k~i!y-Epxw*_J(4M-B;XLqoT$r_ybW6F?t(a#Fj(s%=V3cWJdwpRq*3N5Q5< zQ!;Y<7Dg-vO7h3=lbh3`WKUD?L-WW}5Y(=%IH7 z<%RAMv#Tl3cdLMMdK6dA+A+jNDCO~G=J!o)<(e+x=bvjUlPnfi=D+jG#Y!g63D4h@ zE7`k3+~KwaSjmyNC0~b|=_I}nMwbgV{5H+Ias`IqXo=eic`w})zIgrGL1VNM?wkor zj~mG<3^p}1MJ$@|yqC6JTK=(b4cv5-qwPk=RZ8qlmG>X6-Bam#D-A9+DuPYFBC2QJ z0#y~D3eSwN=J8BEt-+$a2gJ2B+_3OQuO)4eJIGG8Y!@D^q%}^YrKHtv>d<uwwv{>ZY>BYO^BQnYcRu3#cET8{90jDWZak01wdHBE89ziBeH z91c=`l%mFu<3Ua;m)Fbg`a=>b+)gD9^)>KDpwj>X2Pro%Nb$avPy$w=a7LM!!#Fib z7XY9Bu~sKBehEO84bEs?rG)a2G9<2r^~Dvuvz5b*vujZVy%gk!_Ms|;r5$YggIF_? z{$SI4B1#8@_)_5UaJrqr_!?R(DwZ_W z+G{E91d0eD@PkwIgEuY$MXb>UM#gM3O-qd~Fd7KM(DXhunmpgLssRy;Ohis#NT|(Q z4jP>z-w=2?3~7~%rl){N!};yLcyoA0G@2?FHW$PucaAg^{Pv#A!k8O24V11dUtODS zc2o>+s94({*0H4OK$F8!+|^mUVXrpIhB-#TcJ5~sWrcHk9^XY3P?9 z+Fs?!jy8cFXI24Xq324?{59B;Gxh_Tp`gXC8M~gJBjt>pVvAJ7_#1rkrW2%%>>)Mo z<3NqJiE4(E>ecz41M@^yQ|&=5eZxRbO!WU2ytd_d=yj*VhI=&I2}`x4YN0jh#)@Y3 zrI3YGNUt_-ZOdO}{rRySjx%?p>8LA>J4qlq%_bPT7hP@GPy^ zb4n1N&F&FtKr0qEMvT89E-xxFalv9G=nIiinbyL#f}z};B}uj#jFVqn(%VD*WQ)<; z>R<4VX!7LfhK(1+^+sDQe539FKzupixQdvJ%TsBry(b!y8-qd{8_;TeFjvo}1 z+LqhvR+KwhY*kGyw#sIVKzVM*m`Zq~JOT+tqz`d4Qh)cVSrm(bf2~T4xR`8Ft|8VgM|3uN|4~m z<+wwhoCP7ZE8K*zrH3w|hoPE7BV(qZQLGy;C?sW?Db5{Z#UQ<4V4e5sx(gzrm0O(8 zEL@P$NBt3yIyg1#aO8~?J|=o1;HFZ!1#bur%Hg@E%q;5TM_8Ph9N?AN9#Av96uvDq z5bKxxun_6<)2~S4%8rhz$_7h8xEk&pSeTiZSQMR=o0*Z2l2TWYZBMi>PBBMDM9M9OIvkFehWz|4OIq>b)TFG`qBOm{lJYD* z4qRmFXw|MlhmmWbvB{LBhcrFFPE=7&UaV&_o-$lm8gvHX)!&6~T+z^6Uf?{drQG%3 z(n+Osjurbx#s>zj?Q|#EaTXxDM_v!?mf|_H0KG<>BmHmgv_DYek@Cmf;!5=zKIMCI zJ1YZ`l8ilg?pR(d(+!z-;8_%Rbh=sZJ26N(hJt;*sl^E})X=NmXWRfA!KfNK+=+M` zRAGgypqsW>1c&1oh5`-&!%zfDTXDfqWTZr=rqoTOSy$UGvE~Iu8VQr)CvP(%#piVg zMj%pfezt~45!PB1mOPLc)@qxqC?1jE6v}fr7`yVMT**<`m8WM;8`smWYS<@t+0&+I z-eupFyX)pdK*9PPNVtncWDv>$G?FQ|??iO9%Mf*V>r6B6A&J|Ii>5a8@-5D*lU6)ty za12b@!jwj_CpcdsfwKZr3DSGD|$C>?8UL9 zU}=8N#P*4u&9$}7y9<-km!>8+Rkbxbnp$lw$*D{0*G;r6i!sG4YgsjAP^M#yWixl0 zwi%k?uyDMFLpbCK(q2ipPVvEX4-UVABZy3rO@PIE{nPY`+KTSBvSzcoxUrx#Ej>G2 zU62r6iZg(DVN^+eQK2ORpvzkXINVKU9|AZ;d^ARY`YJ zg>6Y$Noh)ac};tFQ=RsAXy0_G(LS>w=pV7aZ#CRaR7-ycxIGmhm@IV&phc{ibdy|B zWs4C3ZKj^&3F1TkOy8NF9ImV^XiQY2mv3!S!?TMLGQ#p>3aYX?;$w1(#&U|{&E;9? zso9aSMTJ=(%12HAJy~kc$s0In?~2J8D$Z-ku8mE~7|6>@&rVA!jf%|9|Mw640a#(H z;VR=s^#MaVJku6vuhDG7Q3R7=cl}hXbU4C+HU$4`&1Ue-t!08p(d=+&3q4nEGjMB6d4y3l%ASnim*iG=JIE9bEDD}o7X>Fr9>)`qm6ZSjichv z>99W2yCN?d|l-_V%>;RF5aJ)lNgF@-cNEG7>jZ%K<>5Y%Ur)bVs(ST>XurM_+9Sv<#!@!*0&7mqc6sD_udXElpGEIc0m@3A? z{E(>9Ffh-bDn^vFlWq2cDJjB#2+RnKOWk3Yz%E@f$hkzuf zZBlezz?TY1u65rnLxg!L&%(b;mLjBx0+2finUnF+=SMAKBme}dim3{{(5QJAHw#d=B7C>Lz&upCZJp>Az!;dXX)y2G^=KUwzgtsU_UMD6Wq=L> z6D7iDfGUy2vq0&m(;?3t5PInIhGIE4dE)zq!Vms^ zIy*4V2jPGVq!w`|Z~=OFC;4#v6SrEfn7eeuIFpAj=m^w8helnUZ>y1+J-U`6CBs$! z;qD~TUz1=7kJTW0BwV(OoLmyH$h- zrL6O}UKC1YD~9_Z&inR#IFthS>;uob2bn%PMFbM&tOg-ESqi;2J;nP#hwps=dW`NY zxWhrdntLCCmhe78@e6V9N_tMe_gn|_SvME{eTtF8>qVzS_z%L5b0NTs7*$Sgh}C7D zHJ>-$n8&d1gAT-`R;+F+X<59WwQ9%E;HFBG@&uu(6FT{x{nuY}rt4s5+kG4D)svZr zm9{l!Czszi2AFpQaK*@Z93AsH@_Ys!%j0qTH&vUI6vCMI9(VOJG3?k4D`;5A7bxz0 z>lqw$NW}EeIr2}SA~@)j5J>n`tplKfcFZ}xY9#22!9A5?K#S^Uul)fEzFQd!a!OJt#x^um6 zkv;FZ15oD95Skx(12?V{T`%WFphy#%MIuQT-smQl<_Q^TJ|+5z1|1iXW^}RtH|kF+ zy52(%&a=K}bZXxuL@QCd20)M*XGDO_$YG^e5XZ zTo)N@&aJ{lhGW(h26oB6(HjiJ)0~C^&MZYf7w)YEkh3dkH7@?d<@U{;?o`$0x`KcC zv^zz0;?`kaAFv0vQZ_1ZDkw&G5#Gt~c$sVtby9?c>7BY~{2OPislh=Dc#Vc)&GxC+ z(*OK?GMFiwYXDCYx8qC_5aTH(pUT_zs21@%gWDcUxc( zW!p2VGD4K@GUv6*+udKg+wm@bkK0Muzw7DdS9dds9fT3_L#%dziH{4%v{F6py&BU! zTIL*QWENa1w)AQ+_wU|K*ekTNI{%=4THJZNDropRgHsM;LXhc*Ku|0$7((cuQH!k= z$uK&&@`$-Qzc7w~Fr7~Xg_sm2I)33uP0dJmdjyhd{$c-t)CgN{MrN$@59!6Ig|TNd zz~$n?yhS023nEn|(UF)~HEeB5b8McfZng|o6m%5l~2uc?m+|<9WBFM3zueHO`)n&KlRcze7phTM{cQ=B) zr$*0=gzmX?{pO>G5=RnmV8k5O?_ucT6X=paw^4G@=+a6!hvj=a_Ev7{?OSIHa)k8r zKsA|p!w=jya(U12nK6Frk;8Z^=^u3UF-QWL&{0Upz~6T`9Q5yyP$m971bQi(T`1w^ zKdP0lvv?3!5ZXJXP@V}sg$iwa-)cN;-k{v={*Yq$qv5;CL+SwKZrOqB!m7lnFMlj8 zDk>cxS@zw5pz`YK@}Pl`@s+EVVb8-i)GP3foS;vEju8BbdI3cJjv6Y}FB{_!>(9n~ zAT!KN;-?}?y1hVguT?5b6SC##Vk{)vX0(QI;tf89dC9J%o|p8uqmx@Fx2INRC8RHi z>|7YKAS2mY6x&o^(q5uGvpumkGb<@IBP;3uv-ck0SrtqC@Y&t7CnR)24K1`Jw2<`CcZbyeR!9b2^QAopia9@D)z*0yo`dMTL=Tej-fuwj>` zt-E(`lND>+bm4)6mv(B?A+=*_YKQ*)0YUALPFIzo>W0*cny5`bEVbg=!;-r#O07t? z)V}-QQ41-F&N$UiH>}g{R6d`q=+w3Cpssx~M~Tkq-6wP{Z#NL$?(d?t_*~ZJJ1FVd zWT1jzYuw?n<8ivdoZ~OgF^3yEi`FIr=iPJ4`S?OctJF>o-uBOe6>l$Fp>?_&&wO*0 zcGw3v!=3Sb%l9JZ1m`r+hG&HQ*;4zPYk#%XAuwTDlUUW`L zNm-PV((>X~t#CIr5RuxlWs9aMEmNw7wrZKuwPni`u@NyCvJk{k3e-h%!Selbn_^6}qPBRCXsk z=TpfY7>eCHb`0OKql#fmu~Mw8I=AXv{}&~vp=4T6GFjy&s}2lB{l6_KoLM4A%u&T? z(@DmMygD?TC2)E%N7k*V!n7%z-Uq)BeZ{Yo-YhS-VQ$0T+xj)D5YHX>iB?Ti`YbLD zicR@+WXkI>OQdcan6>SDs%ci$_~v3Wj*LmJZ3@?h{HDH6xeYrs?9hALw5s2}&)U{( zme_pYr{?0ls_}FhBIn=+H$|O?XM^c<<}8`Noo5)VkGwFH~k3>;f ztbi>^&hRz&&zXDwn##)a@1IA%IRj3cU-{ADxwcRcqt5b%(;2J4|QSKnx)lAbn z;`yp?r-{Z@m)A(sC#46Tkh#^kR8})B$pwLBg^i%8kBx5v*4#%x;3s!yRiu|?XAMp7 zkv+RlucPw1SH{lAZC!n9q_^s}&6$G+bL%MhEcx?I9Tr&O^d`QyAq|A zZgr|*#3cvkXz2J%GBk)CPSz;gI#4s!KXsawF?{Us3C)T+bWIWCs(xwEI=9)plS-Bj zT~JnI2dZ9f(zK$uZ?TuqLgWs=OY7-J4VaeQp*q+5)4Q5A^`x0yxzO9?^a25o4C7^_ z6<`A>&@`{+PQ6re{^C|Rf84p*iuu}085x^0|AZMs=fx&=Ea_6xzqqt>zqA_rwr<7d z$*vmW=`&VkbeunB?vg>P+jbq;ZAf|VvQ(Ht9j90Q@b#2QN7TpgWipZxc8O^0!;?zJ zkv`*{xAzns?qL_tJA%%BFsOe~pMoicFa^EK`;F-}yLi#^V=H3Cxuy9%Dw+)MQ$Aqe zs6M4N_V+&p6I-PY%gZfm-=QqG$I$j|M)vJFJY$Nuwp&5t7Ck$5$?R6OCNI`2t6Q(O zEsCp4xD*~njS?}})O%ZIEU0TCw-uCwxtw2t$p^eSr|OYH&ySC?%8cHWOb ze>LkbKSxE6(mMH5Agj9CM=RyIs(TkPw`+cW zSNd0D52uViyRygV`MoZ?WW+h&tUj<^oYcRgi%K#&&Rx7{;qi+XEvlx&{qgOnX*EkR z*)AgaxL&?}Obi2wn=#voC=bXzuzGw%yg?e? zMjg}ZAD3s1p5GIESbY4#h1KSXJo;X5O%^Ngc38ym0b3?U~2D)eX5?L z&ew4*M*cjoI~Mh_e~>etHKlu)%A)T*&>MsE%E&xlo3YX_cs z>cI6G#mySEtyfKN^PEvf-WPNQ|ND|9*MZ!i4uKnVL|)L)h<>(dHN0J6>B-62$!U#6 zlb7n$NlzIuZT_q&*+@Dkho##@>o^a~4nO(X>TI>5z7=+j-RB5mQDNkM3Ocyf0xfqgiHZ zmss~6ooilOoHOUj(Fp?*^QQOfKW)UMdHt7)x)E)CqJ43C@8aBEh1ExG-jVp@zSbH^ z7qn}Fwe=A!lqQBU{ZkzO+N9U2zNk@x-Q#S`1AVHb!1WYfoUhl{8SIR6X4I^q8t*XE z#*UpM+0}#0q9W_`KYM-R>;;+Kk1iiFDX&NGqS?bIPOW+&klVuU8C^0m(>i4~%E`^m zEhy|-v+8~^E5A*7X6b-|r9Jwmqz=g%JZhv^5|Lm|r|yj#_vp|uJ-zC|wA`GG^jM1~ zbfr}sXZkrKoTF;yODCTtq`~}N5T7QbQ2Znscui?X*ZuX+7SW4Avms~QW zgL2cx4IW*dXWW}hFY9xAtIVdsv0 z)9{E9?>C6!M2dI>YiTDL*BWH}D2}VFwDB+b@$H&q;H7;^Fez$VBt>0iQt0$!Z+g!N zPicGNZFtyq+($y|(00TJzG@;N*fGSVTiD0%z^ib3Hw88j5wtH@tGJheMAfX>jT?#D zU3T$36yclJ=9DaMh8SPcCBLP7Cn51Ab2RNs^OJGf0(xR@?xhIcyS8Tx>bGey{Djic z*`u=Y?sdcNEw8G2GXASE^aM8g1le(M>b$q2+ao$+54w;~0smbe{cAV=u4^yPnsvyo zy)JVm9HvvNk3B@EM$~WHpmIgO!*_?CW#QD#T6*5>%(Hi2WVp#3esnk4I7pD5mpiHG zcZ~Mf4=+J;^78LGcHj^ln|%7nw7+!g3oENbbgSajTc%N`vPNb%Nc|fbnfKeANBKzs z>EXlZMK?UbE3r4E;Ur~ayJS7AN@5oRkJfNP`*3QgKEQQS%Vlgr!6CYa0})d5^;rjY z9#R+kFL-l7{SFN(mz5l%qc|gh+q2f!q>J{wy{YEOWV|#Qg##(Cpbm$CdS@SDtdF zb)7lMzS%TodM~{7RFaFgo{CEgdgHC9R63XBzkliJ9*~_nIM10T{>?Y?q~UhT>dzQF zL2tgszn2NAsbqgU4}^*A;MqfJUe&hb2D)?mJ`>w?nv{29>$XzdSap2zyVY+E%4?4@ zRTJ^#Z^8IFDfH%L{>(x;JI3TF7!e%R#k}I*k!NJlm&BSr##(6N&5)sz(6U) zSpNx9A|B9C*%8hUDo37z=RsZZB+O2)P3e6u!_u^LoMGp;B+-Rto%n$TIZLPGQBG#x zyf%$H)b$@cb#CTAc#`S-xao((J{}ru9tgo|JK!t5rS8$QI(}4_oGf}qpVTGciSUmq zgU;(kpLI6FRENikcqr6_Jk}2M2`G4S>>Q8>%O|Znu$@O9W6${w+2Emc{T4|LTdl0@ zl$=^Or9-1$ojbNomUs_#xV%Z`=`6Kw=IUq0vc5Ec^$pUlIz` z2q+%cw&VDs6I-RqPmItPj5n_s8%5`t4ri;>1E~ACEOWM^LTysB5FXn7P~qMOuahU^ zyJeobh|fXvc5YBo_Cfe!6F!(L$H-?9{)Y`WklpAkmAZsRI-coVr`pJwINQK?LpAds zF5tO-_>M3y>Pf58bJ-8YA|k{$70)j&D=jLUld&#mN}uwnSw+)(eK2Uym^QeOsnY(= z9CPjEgDNKt=sz{9yzHWWGxAFo4H|OoHA8OZQbpO69Me?s;)gqR?AVFvxdF6I z1HI)XOmFVwK4nK|HSIdCXRonc(rj#-j>#DlE18tpqwBPmIc-aNrgv|m#MwvBIqBrg6|3@(x^qzZz?8D=cZmV!h{Zatqgzms|=>21K(74NJ=`HF=Dkr9VuO6UF)tXT_$zyl$o~U zNJzZD>&dgrHw+$d-O!0=WK}IX1i>z}WIs+e65l$&Q^vPu4$ZrGip^INEN|0~n0}cV z&_6K1{`;QP)GOFXzgPA3Z>}eMY@?YS(h(=i6XD4;#E8W-jvHm@)lk(C*Z<&CS*u>a zjXXW^T4hK-5M_)d-tP{R&5dP^t?g!!Wu5eT!C{vriNS$`~sS3tJiczlWxrh zw9Rc&8DC+KiJdcw7R2J~O*)vTvT%B=HTxX+3=s}<<&g&4^JDzh5iQLU5|Y`#(e5Iw zTf$#XE{SDy7jh9#&a?bWm;Bo*a*is+6%};92u;FOUq$X>lFq$YVfMh{QjyPulL>JL zavqJIUQteXjE1-}1n2JFRCSEURO4Bnk# z2GY5(WK116BT0h=ml}*7Fm!aqfC1&Bh7J%HuljiM)Q?VB_Wslf@5A3&fHI>@8G&bz z;iM-<4H!DAe87N;(Nt*V`xB~%$r7Jv#YtrskJ|ZOYw)J!5!TS$RlDCRfq~g?1 zdMDk)|9^;ogvtM%z^9d_F@((HODf%|iU0p!N{ZBIQR!?r_$MfCW!f|}7l5$bybZG6 ztg3M>a3Be<+V;Pi3W?Q#A#=aP}OWgp?nnDL?)>k2H9l^NlzIZxGbtFVVnyH^Fi|9e0fwWL>Xw zW3^+e3+#{VU9VNGqZ8_7wKx&TRIgr-7Lhse-2Rl3#7kF!Us>LN*Jj>z=JFJ&j+;#Guw=J%n z6w$!qcmg20SUkZg6H_c+3v=rRizi}+e!=4OrA*R5qM^3aSH>(}$LWnVwTZ7QuaI|I z95>SIGCXr$r5u{=EJe;G&I-U;$XSWf%kVGN8SP9*Y05PW;f1Jk5o(yvv7?ZCuCpBB z=_s3na#>74FFr*&9I#hVlV8tYYv~SZqV*hE+ti0>sc{G`0iE-iO5%l2jbGpYLcx6Q z`E>Mt8ET&n-pqE6MTxliXU&|AfVfkgYd?stjGEmbKJ2gFUx|jYk(MqT*nb4C(XsZWe zXM^@0pulKCkHeHc4(TS3>1SBOQj}i~I!Pj9P}=aag7cHMjs`Xdc}`${5{FC<(yp0k zowUyMb2)J8(-P!ahMFkvXlV6N{0?XC5}(4FhsM>=4QbW2BOCpuf5hD*r;PeSy`nKU z1AQaTk{pNwsptj4_84QM@jD2xJ%0Ofm_kIyc*Ku^4H@o?#V>_Rp~s^DD-j-qeLyNZ z95JaF;lmMI#w7+ZZqh1{M)@b=cL-7`57j*zR2l9NpJqEJf-_6-yA*#!BgM{#Y!~zR zHRGK4I2(We3tv+qJyWYMlcg++nP_DW{>?tmmy{ueu=x3PI^lAX$ivq7+Q(A<=nI7$V2@wW0EMUN#ClEhozvHB)b@`E`@Fo zZ42;AeVmJtFdP~-6f*>^KJnkdYhhy!@t@Zcj)fEoD^wTv(|RI7)WZCoBx;K~qOPbX z>f=JDhN6*37L7#{(Nr`O%|#154{Rw~;iP{X(N?62cA~xLAUcXpB2A==47@4OMRXP2 zM0b%XdWbBMjkDajA|~=gz9q$#XrO)xX<-6aXIb`zEWHzt`_UXHR4)v9o}uZL2M8= z;@jXi;zst@#OvY>@uql7 z>=kc|cf`BmJ+V)`k8igN{NHLQsd6^1X)Wa$|PA^){%8(Jy~BikPT%c znJgR2CbFq)CY$4{hbgk9Y$aREHnOcumF@6uMhDqZc9Ll_U1rG6vWx7Bo!su&d+s5# zWH!Ekkt<^|Pv*-4StyHSPuWZM#!hfwSu9Irsq82F%Q9ImE93wGIZw{Vt-i;~ z1@bt#P%gsy{CK%UE|tsVa=AjDAWxJl+SFyk6cQH^>|1P4Z^B zQErmA$Xn%Yax=c7e23g3x5_)^KjmHWZhY7JUfd{uzkERcOFk$ck`K#ApL}0_AU~8J$&Ybo{eJnW{7il>zmQ+bujJSA8~LsLPJS0(Dr^c%ZYNDE?CaWpxC^c0bt){8zYKEGrW~td~j+(3Hsrl*{+!nP!9j6wmMYyN* zc(p_=Rm<=ds1@o2b)s6SR;iQJ$?6n!sya=rR;Q~o)S2om+`@8>I#->i&R1*HTD4AH zpe|Gwsf*P=)FtXtbs26oxK@$Sa-X_iJ)r)j9#jvhht(tMQT3R5Ts@(-sVCJ_xIyU| zwOu`{o>M#2^XdilqIyZ~R4=Pt>J_zHy{h)8*VOCk4fUpaOYK!}t9R79>OHkjy{|q{ zAF7Yk$LbTcUwx`RQ=h9Z)R*cj^|ks&eXG7x->VuQ{$O>k?uiEffx+pXi)b?dqH-3D$$w~?FdHg=o1P2Fa0bGL_xP9GXx5O=V`?>wyGPm5Va0j>p-9hePcZfUG9p+ZL!`%_?NOzPw z+8yJLb;r5m-3jhQcal5Vo#GzlPIZrVr@7PJ8SYGXmOI;>Fg7E_Ii=%iR_33GRvRN_Ulel6$gyihHVin!DOP-95uS(>=>Q+daoU*FDcY z-(BObb=SEUxEHz?xfi?ta4&H$buV)-cdu}-bgy!+cGtVtxYxSZx!1clxEtIX-J9H- z-Hq-h_ZIh7_cnL4d%JswyT#q=-s%3+z01AZy~n-Rz0bYheZc*f`=I-f`>^|n`>6Yv z`?&jryUl&lead~>ea7AHKI=Z`?r@)XUvOV^UvhW4FT19zuKS+5&wbzh!2Qtu$o<&;#NF?H>VD>a?tbBZ>3-#Y?SA8a>wf2c@BZNa z=>FvX?Ed2Z>i*mP&Ha!2yZeXxr+dJyat~@p3oW(MuGZSq3A&a})JeLwuA}Sfdb+-D zpd0E&I$1ZyLcXbPrkm>)Iz_kCt#oVMMz__ex}9#XJLrzOlTOp=IzxBXU36F7O?TIs zx`)ov**Zt(>X^>c`MN+C>LT4!_tL#}AKh0M>k?h6`|19=Oqc5lJwOlCgY;lML=V-& zbfq4yN9d7ylpd|e=&^d79XmwxK1rXfPtm99)AVY6x;{gnsn619>vQzE z`aFHUUZdCQb@~E*p}t68tpA}e(UYMb< zdZXT?Z_&5v+w^9AyS_tj(OdPM`k(qPeYd_x->dJ__v;7rzx0FpA^os^L_ew@(~s*X z^fvvZeo8;BpV8a(v-&x`LqD%y&@bwj^iKV<-lbpByY;JjkA6+RuHVpa>bLY>{kDEb zzpLNV`}F(z1O1`?NPnz9(fjqM`ZN8x{z8ALztUgpZ}hkNJN>=>LI0?K(m(58^soBg z`ZxU_{k#4{|EUk?Dt!=-iiIaV<++~rJUqa!gzb@sY=UA=BzcQ4cH;bnQ* zUXGXR#k@Q(-z)G6y&|ut*URhe_3`?8#a@Y5>h<&bdu3j^SK$rt26}_M!QK#Ws5i{3 z^oDyQypi50Z?reY8|#hp#(NXIiQXh{vNy#$%A4vP?M?Hhdo#S5-YjpnH^-an&GY7a z$9Ttj3%ujJh2A1>v3I<;#9Qhu^Ok!nyc4_=y_Mc7?%tMd%L_> zyxrcb-X8BY?{)7D?@jM5Z?E^Z_m20j_a1ik+k5-G_q`9i5514PkG)U4{obeEXWr-D z7v7iNSKim&H{Q42ci#8j58jX7Pu|boFW#@-zrEkQ|9HQ9e_$V{j`yc`z^n2OCO8Qq zK_;jKH$mea`hFPxv1RhpH! zJi9O_D|62Lg^cB99yfcI#SmB9q|RSBe_S@>xs-EUHs{Epyd2BexNJ?i%Q>wmsHcKT za7rPk6lS6}F2$IwH=kln4Oyj}uRqmLk7_JE8X$)vpewmCp9EljSz8q{ z6GgcN)KYE%C0op|roiV&F87Ud=Wre-gu}Vii`-m8Ij1qsX)z9G`6T4@r~0_pj2RAs zShSoJ^f5Q=F7r7WjOzhQDNL=_Kkj%m6-|eY#E8C}BBC#+$nQBYpT0t(c^vmOr!W$W z^g!;wxjgfNd&NDqvNX7YZY8)5h)c%a>nw2tp0wHT;1OyMqt-DFO39FNIpt)L+chVlrBV21W*u556oxsX?!YI((#h1qS;uZ&Fvt1?%{!7#H8A~W}y4Pq`E zG-e$SqOb#84Q0&Ap-3Z#K-eZ2+7-5cxut>PmHO(E%UYb9PvNjjc3?##kRDYK=7BM; zF&>t&9ACeIfz?DaFcf1f7@je%n+T6_4-xitoK1sO+fu)_oPItA@{yBk3#OD93*E*c zmFs0AiWG!RZ826r(xLo((%xLkmd8UZFBlNOEV01+sw$}Jyr4N?=o**Knu>J*Rz=l}tOlm%lK{Gt4Rqz5OLq!g3Q4ZTDPADgC zR|~SGA~LK^GgDx>&)A$8m#hekCug<7xzi zf%uj1P~+lu&_!@F^w_hou^`9}OZJUofdK(#b<1Fu4DLJ=P{afj`2++Ld5j$|uAVVl zkf(Pp$i^iWj?R#aY-UJkF;=Hwl8W_X_Vo+;*v}t(F&^$D*cgj1i%T1naz}&cPBe&~ zhe6iHXb_o$T4StZ+yDd@t<^|0C}+eP27^h&lnu;^3Fe0xgL%%TQ1_y#pf#kXAWR8n z15=I#9!-raR~V+Sl%v78_E^SYdqrVJ7IHKgSB^!@l48%9h27tVeM)##@uVCxXuwY! z^lP-iXgMnfN{Pt92BYPSShxqA%03*ohvDhV&!hyLwn4PV{iC39TcW{eBWB4GG?HUf zkE;pAX@k*nF`fj1axpfPhBzZxE)z=D2IH#W5gb-wB+D5?$=YCCxlpp4Y9wpWc)sw+ z4SJ3t4Zg5E%UGUel-puxfUw+PbOJ-}Iy5HB2&bAqXZ zvjomVelWx51nx+VG1g|y!6GITh*&gWXH#D5Mrk%etC23qF_{hYU@Y^%)|hIT z3t>4nIMHAn*^yN=`@3NStlFl=K(+l~9Gz@N!*V=NnvBfgFok^;lfujli3+sdPelWy z4SqF7k^Kjj7^d6d7)CG^R{pkeD}Nhe z^$6_@w>K`gdPGh%0(^|mL3PCCpom-&nc2BAW|plJ%&eL4YzTr6t2TxuE*)(})2Zo5 zOQySV1<-V~K(+1}eUGc58m$GPU8R*CaoTi(ZFpEU2d$UE9$F52XzWEWW~?k?(Ezi8 zSH;HO8`Q7fhJ03pLEF5I@L3TCO zaShwqCT!SD-rN-CnFtvO8OhnSI5LbLM#yB%XZG9dp(;co;wp@z%M1h~d0T)uWVDnc zjFuV{9AZ82LlLqA4Yp}>>=j2P$!pn=R=bxG_9YwvwmM>lm<4ZBuzCEthxdunmq^&z-%61sE26F<%ufXSG7UpBOSD<(Tpe;rkGiX%Y^=g z4Wf#$TV3;wSlx)Vh_Ep@b0XE4|$G}t+OjxF7*|{NB8xxFXM4Rjh@wzxS zSPcV13N6ab)PO~KWOm50t94L;1RFqS5umzbG{hoXE;eYpXH%mYtrD0N<}y)hgJH(N zcl0yH)o6A#xUFzk!v^CT2zNC&)$D2*)YneaK;Q%VLCdTdKQWH+7B6?6F@N8JH>8<< z+Ml+YPzDXEw?UsQ8$|WoSq?HAqQSV#frAz^nZx!B8#p#(gAK-25wd|(4I2y^PiM#m zn+iI~)a9|YAnnQHbrZstL3zA&kr!-T07KJUhV3wQE3bf-kb&v*gO)@;hzhA|HW;8W z9_EE-=fo-k~XqZ;lTZ*=D|FS!T2`C>6EvAn|gzSy8o zhzmW2sJUwpandMA$s$~_2HK8OPsxxc*M zo)_%00|OD9n>Uy^Pd|eBM(V+KOkS|f4$N}K-^sRpw?VFhciHlSy)|H6nID50=M*^Tva!H|Skw~9%MZzHIrCtS2X7t^S9Gw)GeQbv8qq#5 zn8qMmKJQ9$36PA$pp@xNG-w5E_D_vJmd~5K`MgiTY+}ra53xQQ15YA97IxU6L7O({ zci0BeVWyRXK> zw#Sqb>9Gw)+cP~5=(HTBj1dmoV6>d!Fb@TuD41t_Dj}a|3Y!9&SY-SFpVg9^GQns{ zwTymK=D~l^aSFod_}WcD)4iZp+i_d2S~Wh0Of^CC#^gnVQEH4y3mV8X65%RB5!hg~ z90-dxA7M0Q&gVr2A8g1E78!mpu3WIy#i>?6R7FHUHW)1z83L4A$o>mgQ5g6yelS`N zsptiZlf8}nz{dav#3z(mW zy>?as-l8(5)}Vnh+Mv%%8$|nIIb*&!B{W|)7*{SdUzBR+6@$jL7tvgs8g0*x1xhia zgjL)IqwPg>lTxj&7&NXuC`YthL|53O$mgNS{UyKOJd4dYDAg0D7*22sbAlxiEaXuS z`oYxN!hWkZ7?&C>l1)p@JFYJ{E0WIx)yAPLOPl?P{J@I<=4&PU6Rc$%XZ-`tY4o^& z{fvUZ&j1DjseWLn->n!oI-5Wafm}6g+-Pbtix2r_(IG#2#6n1pkL3CYpUTYUZS?Fs zDwSv$gqH57RP6C*(`Qp%p-Es4fCYb3>-Sav~&@Xjpw7l zsLNQEqAQi-LfqyJ+(MJXIA|6(t=Kt_>tmeju#0Hh3hL%qYc@ERagN2%qcc|#+?>VY zAsNQQocQsmFNh~RvWsgrEloz~B`WrDNXQhzF)FTr$S^ozG{G3Qkm)xV+32NJd8o_ZH@fE*;sR%f*Oelh-3O9xT%?S+{RLG zc;ldeoilhPG;o4|)mV1#OeD9#E*;mv*tl$Ra*z(1tY1R`Gh_?c6=UbtqC}Qyh0T+1 zBm7j5L_^&KdA_u0e8yn<^i!kdjPc@>(0KX5X!FK+(XNe2WyzRbEkA;p7*J%UP)-Y{ zP(K*0*-W7)ge$aN@4_Z-}AU|HS zXneU~W7AKKE5}yeqy+PwAB<}+nD0y~??PCV+M{iEKRAvZCqEQd3$vLN!B0g|qX>Qk zvd2e&+z5lrrV?ikx7qw)w5jl9lS$<#eirq|h95)|G*tYc9aAP4b~M~>u_^J@aMwtK zO)76uSTs%`W`8AYkF_c&XC`(o2ju`IK}MrB(ICiX)hZ)c%DP<|Xf!aCCcOoQoP-qy z(>E}i3e471#L8L3CXt#c;zK>bj=2f4ep=Kg&ktJm`$5|%DntS`4-9eCRg;Bv)}oXW zZ4^bqjI5+4W1ysdFs{)+Nlhw08nP(HVOT%&CK`;ZB~VhoC}=Y}=|_Nf@ewF*l$3KA z!)VbsF2NE;n=*zmAjC{2(O{Hc#wc>F#wZ31GD^cKq0;!lXnV%q1Pz3~DQ8A7+Me-g z{S>Q;95g4hg64Br*Zq`ed*T9VVM8=>RqhcftPBqGI(YW?PW%pB~?HTpr6msVxbcSl_r$)==ur=Tm za~3}!48dss5R5CwrpuHIcHjJ9T)E&mW+~6}rNKN8%qjyg)XjF66{a*$7+`*$Kw(PR zvX%zUCNMuw@Zg}7oz_xzjmR}HnDOj^`}x^{wdshn&IK=&3VBh)c0O1#Ar747S%P)0 zFwnVDc4^lGNl3c5QjW$p=blzyc@};jDu!sGbmLXW(*A$r*b#K za%LX3Dd<*Mj{6p7G?Of63_QUi8;m0?7%e81{T_n`!^)-*o#gNNK|2+4rECi0BS4*< zdu@(5a>L2irh+Itm2!kJ;RYr7g&hqXC#J*Bfs`>a2ijn?oS6ezcEhPa-(Ko%xA0Y77yAhWK&ugm{MT2C1AD| z7-GaxNn?_YgiNfZx|G<+D*^BunWI6}Lfo;b(G<{2DSTqt@Xexr6@Cy^P&q&7mor<6 z!D%{h)C^ueO=rdqt=}TS_;l10O-C?39UY0LBWUL^-Z3lWJ+Z=k+G;DLlht<51KGk| z6BDr2W|3a8?IHnY#dKw5ztJN|P++EI6Cb8G&Zk95tjs1l&JtsP(xk9@Fkd)@EkZQt zbIp_scxr=j?Xl%DwFb7_526cUt$`sksr(qgqW+-tgK_0}rVD$)#~4gTHZx%Z!7&Cu zHA<)P!#E}M!~9^hJ+nLrYQ@f5Tq>(}G&RcNyz+of<1cap`GFti2ctD2HOlRLo}_~Y z5UiFOZ7)B3o!t1t+<;j&1yvvzZO@p;fKEGjNV3MP1mzHnmNSEbQu#EKS=mrEHW*E@ z<@}6R4kl>MBwI~FXToy9BFAR*_1Xkk&n)Weiyw?@FVHhiHFCFTT)EKy_EV#D8u@Wb zC_g_KZO_OrV1$taXAI@w2czYT9D?45%;(G@^Zj6yxWYn~A3cL8EDVlv+BMr2`P%*l!Y z2Lzs*MNcLGbLz}mv~1bzSu^J^nYm!LUS3h2i%lj#90{!`k0BEv9&`YrQ9wKZ$%*CT zkq96f1VkP{3mokNRuC-URtmWO zg2?MM!6{{$!Ei%G{8@KmbL7bbk0|4&nq%VZ0@%~TTmjBiMk@DDS(?ldCpQ`qsh>TF z=wW346sI{p9BrPTm)Yh6rHZ}{S7=sG!6VetU`GK@jnJ<~P`4a9pO%BUkQE`jF-7%X zksTLFT7%^WbAoX;sP-`nn>6Eho7W0YqycEC<+U9J{g;icaq{2#L(p5Eot>YbWqz{F zPmcM?H9s-)lV^VN%};^(DKtMt=BL#B^fN#GxnX)fZf1E7^2slr^r<7}I3k|d%|3DF zg6YR)u1Gq5`Rt|3<}X^9xgvp8+x`}2u3+_smO;s(Wq{B!Kxi2tv<$GK_TuSFW-nYY zd(N`V6?GV2GJozo1QNJ_{VlVP&L*VG~Cjw`k#9+-&Yr{rJL$`OlBh1iT(@a@a_lq5KNG2mK!HA&)@!b==UJa%05 z8>JDZ`&$hB$BlpgiPU*LXl{@D!n5!lqY8X;Y?3o8@lo7VyV_Zk_?vT?BN8*I2He+6 zbxGX5?5VqeujSZx{T7@rd`vy+V}j_RGM-aM{gZHfE6SEs5Bs^)BLTME$Mi;v5kDv3 zCfj$M&v6gzCE`ci*7=lt0rw*A(l>(w;&3grkm4la#>Ja(hazrLlwa|kmD|-Gq$W9! zIM0ZIR0_9Z{(u`TQ8w(q7=_#IyWuYM5`61)3U2;g?5x6l=@&XzIX5|5oM)X6oZoTN zZJH?I{uY8R)AMJ2TE!&BxRS5q`bl@yE*06xD=L?e2-K1MN>4ltX`rNox~|dUOR!W zQ7==xU%zI`^(M}HOC;}~lviKJc?I}cA7Ak4hg+aYa;w0}JDhhQxipr+n?`o}R`9}? z-k;7%xCgwzX)7*v9>n)w@^DLiJ>2cw9Ahj)jKt`<+F9dV>|E*G;B0mtbBfey7>%W3 zG^Dm0-$&T!eCT}UeB*rQ{E9n?d*SZj0k|)CymKjT=v8wv&F(FF5bk%p2lqNYjGG*v#_f$S z;>N~3xNY&@xMA@iZdFXc{fHfL8{+l2Bk(rx;3SOb`mk&5z_T9q5z^CoWaf5-XQ`P})|`3YK@kGqr0FiytezT-=9C-Gy< z_0G6`w;OKVosO|{0q(E80e8^e%lFPc&Jx*!J7mqsXoI^~2jZsH(YRT4B5p}tjr&g@ z!)>G(F}O$cE8HFW6W{6C9XD&v$1R#maeL;axB>GT+l9HppvmH{z|~2$cQM?@_p`nrzM`7;_Ie+t9ani{C2# z()rZ+9^=o&z0;|H zjdiH)=fW*{HotRcfblq`I-J*nxVIQH)V$C52Y{xwPlH@v`pTrc`K_;QUp6|>{*YKyZKe#kCole5p+?|kL_;QWI7 z(hG5`d4<3%BNjNba9{W~bqner>x_ri=ExbifqETomc9}9L*FkS7Q=88^mg3%{JPvL zM#!IW19My4i#!-NAdkYG$CGhy@#(mk_zBz-yaV?Ee}TJwe^9^Rp51iZt2-C>-7doY zwkP6-+N*IZ?M?2jx*Kkuy&E^qK7?ClpTfPe&*L`PS8)&QueklS3irKwxVg1G?rHr% zuUCKQJHYdk|F5%5Jz$$|)whSXNl5k%`r?}hqj0neFE&|foJ?j~H_188#f^>fKU-^CR{+#JTZr1+U|IUCT7 z##KSCuLA5RA5#MYY-oU;6<~XOOsDyn8~7%=yNxrmc`&jthR6q_`NE8xU5dvI^d&l* z(_N*l;a7HoXBKl_#&;fuJ6+&gRyuva!P(AQcvx3B*NNWnvU;jhaGU5qox5TCUw7Vc z_B!u@r(eSI|Loj??*o+LI{<@l)Bmx!bH51p-MJrl)d)J$9#*>())a$ayC*>}R>5*_aqgBY`3Chz)OL);B(UE)0)0E{u65E)0J-K3vS@(`Ve2IFK>zs>#c<^ge<^UKGva~E|BFoBW>qwTV5hJBx9xH zVs0-E>b07|d5K?#%Iouy>Tm;1y2Wyx>LnY#&6gF{IYyS`8#M<-zRt9;@f23@I(#V_ z8a$^(HMuoHjyhODbmKLbUrSP?7Sg<;NZ99(KORiYvKqe?MxNg%j3erkx`1mTx|2<- zSp9ax&Vk?R*_;=rGtFY4Rh&iJc);zai9Pe=6ay|#| z+H)H+N)h-Y?MNqmAnpb&TPx8lpv+i_W>`0Fgf5S8reUSuz)20#%}5Q)msm;@@I4*M zmt{-Yp28oD@5zJlVQ6oBdO>{Hj{KlKJMs~>xBqy3*U^so^mO}jN&u$q*Y z);A;-7o71i+ArWZUK=pRD*?hhF#HKfX9VDA_{IX?m>Lf_3xDL1o(y;<{scxR>Dn6n3HHGS z_6IHlem(XG=qr*p0&d2ipgYq6AH<))-oaylPvB2rm*y$JXYnVnKd=+puYg z;{56ecTzElL*2mZdGuM`1Rhyj2TFcJj5J2V4u0X%#`UkU=eOk56l zC3Y|beEw?y9~X}UZWG%8e}N1HzL1jv*j07~%#=LIX(iimg5y1Pfq80e+2=o`< zY-kCHFE#+S*EGU9>Q3l8X%p#%WSqieyGTEpLqnh+;!DIyd^d+^S_vyfENjWKmMm+@vX(4s$+DI#Yss>fENjWKmMm+@vX(4s`m*H(sGnplS=N$eEwR?x z1S&}4k|j=-;X&Xeamf;wEOE&amn?CK_1Qj@BDqVJyJWdbmb+xROP0H2xl5M2WVuV0 zyJWdbmb+xROP0H2xl5M2WVuV0yJWdbmb+xROP0H2xl5M2WVuV0yJWdbmb+xROP0H2 zxl5M2WVuV0yJWdbmb+xROP0H2xl5M2WVuV0yJWdbmU}p2y?XhOHOZa+9C-3%C(KT3 zd*>2)jJgc_-41--jrgL)8{QWErFWI%;0p(@B3C|aLtSV<3zmF3!ad>j7enfmkT%x4 z*k_#u`TDD8^8BBGe?I}=@tOf1UIgA<*n!luTAALCo za;pS&zD?3-xi0jP_TV*ZAiZmSqi-y3pfscnzdQMHj;Imfy-{jmP=tJ)*X1J%mki|Rhfn!=K!A}(UzQr^{QrF zRM;EA>KgLf0!a2q(YKJ0N>)j+JXJ7nWb-WJu|yMDmYQXm$nr~M`6aT<5?M}y<>axP z5?D?NETKe5s1lqa2_>?G5?MBhER_V7Mppg#kN|owEo{ZN0X$nBE|Sn5lPoDU-O8Oj!K$} z?=hxfq}LN|*ke}u7Iq3i_cjSD-ZS8h zlSiQN&#$d+@sd^ZwOi3DyJE=%Kz7 zl|Fs`{z6agO``3c<22(i^~!iRChYg#PbZG~>ERsN2y;hYl&4m%t+gI`>SKmV!k+LZ z=>IOWD~!F}y|h=XcCcqH@O3BJ*^r#qpU(u!P8M z?KF#$-`)l=6@TQtrvn@1w?@F%dNc@y9*_!B%M3(Uta z0jC*RU{~{dz@PCau(yd-A&8{m)fNAM1xc>-*$ zS_Ae|{Qw84L4d>5Fu;)tyGz(b1y8V(3aAMC(p0>)f?K^%LrbATV~9t*g{MJw2s zT@JX?MUSvQdl}$W?p1)-y4M13aM3&L*J7Q6JzMBL_HDNS-swVbuz!pGVh{I0z(-uH zjb{EjA6%>nvFnS~8g_nv2Rz^& zz^K9>ApQevqcJwH8{7e~v&PC6{xN97-tha7I5d+j5sfU^41BfkLhRZYduwbi+1~o)zKTg-#N5GOg#224gPQB0yoX=%Iwkvt zlD?h`32&F^CHBUj1AL2Z1W8-rxl$6~ZnYbbq-6XrTKgq(T{tg8fA|9LV8>(Y;!(@! z588&MA?u=v0!W-_pc#VvVQ3P2B8ojX#cM$Y>p?y@t@{9k-*+b9)ADJIN#ebv zue1VwAU{O>&k|+ntEzx)6?lSYd!>N=Re!(=RRK5{TvqhOQ@~Mb6yO*&25`KZ0Eq9M z0^;kXfTya{08dw^1D>hQ1UwHXu9Wq;jh}5iY+Cm#`o<{W)9M*Oo*i(u;YCQ4q^Rg? zp@8^SC?LKR3W)E7TD^ewir=h`LW?0|-id`~JHU-@llMS-amGIgcQ45*8`~Y`pfXek z{i7L{LZ(*KfmI95gEU@Dj`-1$>AWp!(dfW4se#zrT_{##R|_K@x|f7`X}z-#mgqLj z91?qG;TqA*T$0xbg4YRx$BS8|k#z?LdERxSyIOcQ^*Z|b9%f#%u2Q@bAlpo;0A>=_ku^Y64CdEOURw zcVScTP0TCsz02DZIwo9SE49{)S{oB*BrZ!lHSxT}hZDc9y|7M3osa5nskg9xM*WW( zbZjuE!EFuRZdj*b--e4D-qY~sM){3SZ1j8b$;mG_PHo(;@vO$Tv`%ZXy2%SoUTfO4 z>4c^;nl5O1XS3DKM>W5%Mbj4NwfH?{OUtR$A7~5hAvVVs?0e#w$6!2foaD@Kj&YVi zDraD3xCE<}>#@&&JI28ScuxP6vje`@YZ|kgQ;O&FAM)>7@e%*7(|dT#uF)8m(1W$& z1O8nnzJgpvBmdX@yH;R!LwKFui}Wps|D1o7b@~m{NBz3(<0rO{ZzBB;oXB~Lf7gmn`FEW-m-~1$s4Et0 z0gJGLpg!W%C;B)K^luh;Qh+}02Y!e6mixE_sZ(?z_mNIn{o$lSasx3s$3S+|z_SIA z-idg!dKTn&G0p~D3orUMjQ#uI0d2!9{u0iFy#+gHP6qty{3-F|13OJIdeR_KvluCh z5K}Ds02WEKg6A3~fC;h`(353=C9)iFs~iYeDhC1nOO7I%<#3`|l4meRjv>nBM50`d zL!K%61i(Fd1>i1?GZ)ToeG=e$eJbFG`ZU0O`V7qOPwO)Qx9f8N-`3!j+^ccwL%pcM zE3EYJWCl{c5cnThhg3k5>6GMD?5P}s=TR%*=bYi3hp~1U?EVIH{w1F&A)(4P1aGfeXceMH2c1F7yXXko^EXIRLOk zRse35@ZZ3N!GQmg!$8yRax~y(iPKx)1x6WoF%mIbO`Tb~TLUY`#5pkIg2@hu>p>p#~i^9J~*-taEHE_IYOuMSnu`kD0w9; zZhI#KPuyb|;U$OSljwweTC}Hr3(~*@L1WDmDS&$fPPaL`unPjZL|ef1qBGz|kp{R) z(9^CDMOVOmA`|d4(F1V5$N~IDk-a&7)@rPXZE`5Tic1|(K`=>76La8Ez)vGv<&COOo@1W-woQ{PG)>gQI6^q~|jK<=m?630lS5&JMn z94*keokz09h=i=6f9Ss^4(!oG0C#D!z`Hec1`@~kfyALXkT{K&&opVsemx2B8%=b6 zr9m6U2CN3g#%#b{dKTbL4Ocgs};dyipX0pDRv*@heIM6=>c4;A`^l#+SbXE(qJJmASIRLoF zsRG<39|PPi$QN2K6yQeT0&WrsfFHusByFh;_?f5!xL?!<{6;hY{0e(Ef8R1`wRZl) zE&mC8uyYV_k076TmwXg(w~&DAg$KA%XuwS(3GhRa2)Iww1N=7$h0e&MI0)BM_ zBc&tqY0-f-r3LT=(HzhdtpWFlR)D)iJHXu{6>z=C0Ng0j0XGTKoexDfz3pZRJO=T5Bs2(pgH)Z}5>j>6%f*17$>Ra{%VmJy z$mM{Cs$o9j_sC-bcS&dgYJf(d2513lfJUH(69B)FWRt(bJeviXAJS4B%A$(<&FB*U zvZLx+)S{s$G@5RJ296XP5K}BR0v3sz0h7dLzyxtCpeODCED>7(w~BuPmI{m}%U31F?D)ofWrF@6V&zR2H)wfk!d6DBGd z^RTbq7+xl8n*11J=4tr};CA^1;4b+k;7*BBILZDE;9iXSXo*h|_q5y(xLtk@xJ!Np zxKn-$__q8Ga4+n`G>nzS82784bFjWXj3-Q*s9I7{GV;D+7$FuJCH2oFb$j-DZoEi zwdVng@J0<;wQhh3m>Y;|q?09(Jz2Ffz*4k8R;_}h0ndS?0UHC`HWzS=n1z@v0u~4s z4mt)4w-WiMi0OcX^>DyFnz+47j|AMUM*yzZnEfC(cmr%d|0oF zBk_&IO3TlMmY>)MV2_pd0LVk7(WfC(;wQ!t_(@~1SkO2sau5T4(r8VZ_LstL5)V&B+0o)m;CF~~fRA@5&lDYF$_xGn%1^N)5IZ}p39BvTXIaY8E+{{R zDaUvR<=_}J;RV1VXed!my-RS&N_c{-L5U!1uvMG{SSnV5s@ugGO!?`+w}`Wua>_GB z=QHJbOnG!AaYWvjc)(CECt2zrG}KGllOeuek2bWpj;X(islO31#o`vgBC!cDN!$*Y zfU|-`{hfd%Vk_WQaTj2zxR=TlouZopeyE!O?$a%}C$Q@{6Jh2O~M7#{RRlEvVDt3da+r{fl z|7%3QZp4%~MCue>k14OqlsAE8iaEVuhlXNRV?4vdtZ6jpBfd-Qz~XnUti`|UWD@Ac zDor-B`jpJSYh`2pT_>9&9jh|&EBEC$&`>O@0E?spm?S;GQke*PHcL>5SqM6US*Q)s zEK`v>MSlr6SYN`FU&fUGWd;}j=KBAGoWC)eJR&)`Jro&CnL`u ziSdgW9CiaUIBCmzc^2Sj5+e~a_<4Ze$nyaY9Gy1bTuJ;0Q{r2fk5W4Y)~S z6r;rTfYnRTXx8#(E^#aHjgm(5CV26syF8K%GP9*`~Rtj*hgchh5C1i!2rN78iLXxNf`hpq`0Pd210`62A z@NMM+?p2U5_JN^ChpItA$K}%s`YyLCXcqR2Fb+@y^b0k>9-)R7TtmuXYQTs`4H)sL zp)uetl?=F3!E&L7W`KKDE3Tm>*HGgcP_+lYw1PImpC`E{s7`>M>WaFaR%w9SRS&>j zDid(0$^d*@r33C&F=+A-l?OOj6>_UZ)T-)@+HO;Qfd5gmZ>>5o1s#b3)rBeO%oKD- z8&9ilfZJ6z;4YN~xKrfAfGAd#T4{p3W}M6zDz+9{DD^0*TU*3ZgncR zI-Ogc!L80ly-%w-fZNr4Zs{0q={T-&;osCajcYubYn;V3&g2^BagB4i#sysCv0UR~ zu5l697`}P7lxtbWwJhgaR!}WipZRYqui_jlImgMI<0Q`U7mXFrQq1{(AhlRROJRYa z=deJKFf1AIeTu%CsL&YQkX3XJKeF9G%yn#o>suS#z}R4oIfdpDiCtOzu9bE9cb&F# zi)>|Wa%*dontp2N*-J(X~PK?Xo5EjF!-S z%jZ4wiUr?D-^7S(Zpcli@q2WA5=a> z9|#e_qz|n=RA>dA#!%2ig3^Zu(KIj_rVO^0fuU;oP|&0rlBR{ZrP+QH5hB4-Wd>{4s%+Wc;(@&onE|K+sc1TDN2TKFgS z?wGOiPwp#|?kh*ZW96U0Pn9o%kCZQf50`&q?7>pf>-^iwm!R(NIOVkGI;lR(xC7;L z;3vw%;IZ-u_^I-F@R4!~e7HR3RR7{sSLzKko9Ef05uN-%l}K$JGa@n@GS-c3(6C-M zV8mrs88*zf7;%|jZ?eH&TL&Js&r!40ZlKSIZ39o(jo>jOKC^NA0(hq>N~cXxI%Qjs z`G8#ye!@0L3;UF`u+K;f8=EH-X1YtHijmN}$n~!P9m#c*?GGjjnZ#KJ6M^ z*!>pVZh7q1Uo|TmQEoWpmV!|l%DHs`Q7 zKJiHX&G1z8AR@3nv4Hgtfd>t5h9fZoN8$p1!gui};sEQ*gGcQZw>}<^_5bc1|1k%S z#2Orl4LA}Na3n(DNZi4Z=z`;M=lHU7R3z>-MdGNv<{V$8&xo;h;CZh*NA1OXp1`K( zDwZ+6RlemC82KS9!Gm@Vc)$k0l`V1!mbwJzxdcljL5s-aZ9q{tVi$rZY#DgWR)EKC zIe4e72Jg02;5~LJc-k%jPuUum_yhBoxID%9R(aYb&dCp10Uop#c)%)fW#_uYtk%rZ zVwZT(B_^_vSWz}&=YuEg0`Qn!1Rl3{gLm4+;N7+oyvN=Hp0@Xbr|f+$@%vq3R>2nW z?hq#A6%ngRk++WzH@6UXF z-p{QBZsr#Hu6a*!Z?UWRDYtq~aHnUG8$FkBW9KIB>wMF{KR%#ax8);z>3pV~C=c;< z`f~2nZ0E+yGklT$3A-sKllA!=;EO!J!*5PL&YKPLa=xP9vMPtp?Oe`!R@Xh~Ic&#& z{rI`(9|9|yRWquZ{5r4EuTied_HklyKTq1dl)@L+$Ju+W=PioY8qU@WB+=JT{r3^A z#kz?dzTE3Bbe`!hbPkPQfOUIPv#HawYv7~XNGeyH9;_v&o31%eW^OZarm>}Cod1fb zrXYDTc3^FK1!?>H_Ugz&`m!xcS@xv!q=$117Hn%3?lrW(D1RthR%NZXs*9_Y)%n#0 zty8Vj)w$JRwWwNLy{kH}T2d{omRBn(`B95I_WQVP|8$H0Thf|ty_8i|UUBoGT2@_z zo#3-H%TJuA@@!wGcayW1JiJrFw+d!k?AsJ)asI6PSZZ-)0 zLfWNIqrYU69M8?`@3cmAj7E1L8vL^I4? zuv0yUv2IO1%rEv2@~JK8lb00@QtGjFnxq zPYCcz?N@qchrINTp98fm10Cs6EeQl{}2HFkZe)_9Dv5C*av(yI& z{Qe5h7@nj&4=8>MO@Zi!e4XaMfmRGVDbE9ZAE>?HED*~c`gN;I+d_HHsopCB)X#CZ zseD1tx5I7lI+bOQkk&R=TMWg+^obyryK6q3mw4WkPutUSJQvD`x#&@^y>tV=Bi{{b zKMMYvz9W{K&{^;e#w)humq&r)H9SumK=sP2ja2U*<&ruLwoCR*Zcpur@cG!baXzdy z@p`Ftmn9viSUv?UrHMaxl+{mi^@#U|FY@{OX{|%3??{uFO=GxMIo8$nihRobE7jv5 zy2bEESK!+aAv$ z`P2>}7E`}%{I&Mm{BGom;XcZv~D2%i0k1 zE;mvJLOD%S{vCAdc!=x6dKc2Tty@0T`5i9@TZS}_JLMDGHZfbrWH+6<)%iXx-Cw2U zK5;I(t>1V0a|b`It6k>C>*NEqFZg>v%5$DF6~DsguhI!AbQb~az5RK@^S`{IeJ<+f zohjY_vK+4$%BOx4uRqGC?S0FsUHX+%zv+t?nH?z=)+d$DF;_7(Cm3{hSUticv{0k@V%vt0u6>uR`#R4{DA z`SvquLAltP- { const client = useQueryClient () const location = useLocation () const locale = useLocale () + const verticalPreview = useVerticalPreview () const route = resolvePageRoute (location.pathname) const robots = isCountsPath (location.pathname) ? 'noindex' : route?.route.handle?.robots const pagePath = unlocalisedPath (location.pathname) @@ -393,7 +394,8 @@ const RoutedApp = ({ locales }: { locales: AvailableLocale[] }) => { + data-vertical-preview={verticalPreview || undefined} + className="app-layout relative flex h-dvh w-full flex-col overflow-y-hidden"> { const LocaleRoute: FC = () => { const { locale } = useParams () const location = useLocation () + const verticalPreview = isVerticalPreviewPath (location.pathname) const { i18n } = useTranslation () const { data, isError } = useQuery ({ queryKey: localesKeys.index, @@ -421,10 +424,11 @@ const LocaleRoute: FC = () => { refetchOnMount: true, refetchOnWindowFocus: true, refetchOnReconnect: true }) + const contentLocale = verticalPreview ? 'ja' : locale const activeLocale = - (isLocaleCode (locale) - && data?.locales.some (entry => entry.code === locale)) - ? locale + (isLocaleCode (contentLocale) + && data?.locales.some (entry => entry.code === contentLocale)) + ? contentLocale : null useLayoutEffect (() => { @@ -435,15 +439,15 @@ const LocaleRoute: FC = () => { }, [activeLocale, i18n]) const redirect = legacyLocalePath (location, pathname => resolvePageRoute (pathname) != null) - if (!(isLocaleCode (locale)) && redirect == null) + if (!(isLocaleCode (locale)) && !verticalPreview && redirect == null) return if (isError && data == null) return if (data == null) return null - if (isLocaleCode (locale)) + if (isLocaleCode (locale) || verticalPreview) { - return data.locales.some (entry => entry.code === locale) + return data.locales.some (entry => entry.code === contentLocale) ? : } @@ -455,7 +459,8 @@ const LocaleRoute: FC = () => { const LocaleRedirect = ({ to }: { to: string }) => { const locale = useLocale () const location = useLocation () - return + return } diff --git a/frontend/src/components/PostList.tsx b/frontend/src/components/PostList.tsx index 6e25110..e330736 100644 --- a/frontend/src/components/PostList.tsx +++ b/frontend/src/components/PostList.tsx @@ -34,7 +34,7 @@ const PostList: FC = ({ posts, onClick }) => { const cardRef = useRef (null) return ( -
+
{posts.map ((post, i) => { const sharedId = `page-${ post.id }` const layoutId = sharedId diff --git a/frontend/src/components/PrefetchLink.tsx b/frontend/src/components/PrefetchLink.tsx index 27aefc7..1f050ff 100644 --- a/frontend/src/components/PrefetchLink.tsx +++ b/frontend/src/components/PrefetchLink.tsx @@ -1,9 +1,10 @@ import { useQueryClient } from '@tanstack/react-query' import { forwardRef, useMemo } from 'react' import { flushSync } from 'react-dom' -import { createPath } from 'react-router-dom' +import { createPath, useLocation } from 'react-router-dom' -import { localiseTo } from '@/lib/locales' +import { isVerticalPreviewPath, localeFromPath, + localiseTo, unlocalisedPath } from '@/lib/locales' import { useLocale, useLocaleNavigate } from '@/lib/useLocale' import { useOverlayStore } from '@/components/RouteBlockerOverlay' import { prefetchForURL } from '@/lib/prefetchers' @@ -38,15 +39,18 @@ export default forwardRef (({ const navigate = useLocaleNavigate () const locale = useLocale () + const { pathname } = useLocation () const qc = useQueryClient () const behaviourSettings = useClientBehaviourSettings () const linkPreloadMode = behaviourSettings.linkPreload ?? 'intent' const path = useMemo ( () => { - const localised = localiseTo (to, locale) - return typeof localised === 'string' ? localised : createPath (localised) + const localised = localiseTo (to, locale, pathname) + const destination = typeof localised === 'string' ? localised : createPath (localised) + return (isVerticalPreviewPath (pathname) && localeFromPath (destination) === locale) + ? `/mn-Mong${ unlocalisedPath (destination) }` : destination }, - [to, locale], + [to, locale, pathname], ) const url = useMemo (() => { return (new URL (path, currentRenderContext ()?.origin ?? 'http://localhost')).toString () diff --git a/frontend/src/components/TopNav.tsx b/frontend/src/components/TopNav.tsx index 22dc2dd..4be2888 100644 --- a/frontend/src/components/TopNav.tsx +++ b/frontend/src/components/TopNav.tsx @@ -4,7 +4,7 @@ import { Globe } from 'lucide-react' import { Fragment, useEffect, useLayoutEffect, useRef, useState } from 'react' import { useLocation } from 'react-router-dom' -import { useLocale, useLocaleNavigate } from '@/lib/useLocale' +import { useLocale, useLocaleNavigate, useVerticalPreview } from '@/lib/useLocale' import LocalisedText, { formatUIString } from '@/components/LocalisedText' import Separator from '@/components/MenuSeparator' import PrefetchLink from '@/components/PrefetchLink' @@ -137,6 +137,7 @@ export const menuOutline = ( const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => { const { message, label } = useUITranslation ('shared') const locale = useLocale () + const verticalPreview = useVerticalPreview () const localeName = locales.find (entry => entry.code === locale)?.name const navigate = useLocaleNavigate () const location = useLocation () @@ -180,11 +181,12 @@ const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => { let node: HTMLElement | null = el while (node != null && node !== nav) { - left += node.offsetLeft + left += verticalPreview ? node.offsetTop : node.offsetLeft const parent: Element | null = node.offsetParent node = parent instanceof HTMLElement ? parent : null } - const width = node === nav ? el.offsetWidth : 0 + const width = node === nav + ? (verticalPreview ? el.offsetHeight : el.offsetWidth) : 0 const visible = width > 0 setHL (current => (current.left === left && current.width === width && current.visible === visible) @@ -202,6 +204,7 @@ const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => { const [moreVsbl, setMoreVsbl] = useState (false) const [openItemIdx, setOpenItemIdx] = useState (-1) const [submenuHeight, setSubmenuHeight] = useState (0) + const [submenuWidth, setSubmenuWidth] = useState (0) const [wikiId, setWikiId] = useState (WikiIdBus.get ()) const wikiIdStr = String (wikiId ?? '') @@ -255,8 +258,22 @@ const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => { animationsOff ? undefined : (reducedAnimations - ? 'transition-[transform,width] duration-75 ease-linear' - : 'transition-[transform,width] duration-200 ease-out') + ? 'transition-[transform,width,height] duration-75 ease-linear' + : 'transition-[transform,width,height] duration-200 ease-out') + const submenuItemMotion = animationsOff ? { } : { + initial: { x: verticalPreview ? -40 : 0, + y: verticalPreview ? 0 : -40, opacity: 0 }, + animate: { x: 0, y: 0, opacity: 1 }, + exit: { x: verticalPreview ? -40 : 0, + y: verticalPreview ? 0 : -40, opacity: 0 } } + const submenuVariants = { + enter: (direction: -1 | 1) => ({ + x: verticalPreview ? direction * 24 : 0, + y: verticalPreview ? 0 : direction * 24, opacity: 0 }), + centre: { x: 0, y: 0, opacity: 1 }, + exit: (direction: -1 | 1) => ({ + x: verticalPreview ? (-direction) * 24 : 0, + y: verticalPreview ? 0 : (-direction) * 24, opacity: 0 }) } const prevActiveIdxRef = useRef (activeIdx) @@ -287,6 +304,14 @@ const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => { return } + if (verticalPreview) + { + setDesktop (true) + setDensity ('auto') + measure (moreVsbl ? -1 : activeIdx) + return + } + // Measure the same desktop elements while the mobile layout is active. layout.setAttribute ('data-measuring', '') const previousDensity = layout.getAttribute ('data-density') ?? 'auto' @@ -351,7 +376,8 @@ const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => { removeEventListener ('resize', schedule) document.fonts?.removeEventListener ('loadingdone', schedule) } - }, [activeIdx, moreVsbl, desktop, density, user?.name, locale, locales, menuLabels]) + }, [activeIdx, moreVsbl, desktop, density, user?.name, locale, locales, + menuLabels, verticalPreview]) useEffect (() => { if (desktop == null || layoutReady) @@ -378,7 +404,8 @@ const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => { measure (moreVsbl ? -1 : activeIdx) if (!(desktop)) setMoreVsbl (false) - }, [activeIdx, moreVsbl, desktop, density, locale, animationMode, menuLabels]) + }, [activeIdx, moreVsbl, desktop, density, locale, animationMode, + menuLabels, verticalPreview]) useEffect (() => { const unsubscribe = WikiIdBus.subscribe (setWikiId) @@ -392,6 +419,7 @@ const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => { const update = () => { setSubmenuHeight (Math.ceil (content.getBoundingClientRect ().height)) + setSubmenuWidth (Math.ceil (content.getBoundingClientRect ().width)) } const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver (update) @@ -403,7 +431,7 @@ const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => { observer?.disconnect () removeEventListener ('resize', update) } - }, [activeIdx, moreVsbl, desktop, density, locale]) + }, [activeIdx, moreVsbl, desktop, density, locale, verticalPreview]) useEffect (() => { setMenuOpen (false) @@ -479,8 +507,11 @@ const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => { className={cn ('absolute inset-y-0 h-12', 'top-nav-highlight', highlightTransitionClass)} - style={{ width: hl.width, - transform: `translateX(${ hl.left }px)`, + style={{ width: verticalPreview ? '100%' : hl.width, + height: verticalPreview ? hl.width : undefined, + transform: verticalPreview + ? `translateY(${ hl.left }px)` + : `translateX(${ hl.left }px)`, opacity: hl.visible ? 1 : 0 }}/> {visibleMenu.map ((item, i) => ( @@ -529,10 +560,18 @@ const TopNav: FC = ({ user, locales, resolveLocaleSwitch }) => {
{localeSelector} + {verticalPreview && ( + + ᠮᠣᠩᠭᠣᠯ + )}
{menuOpen && localeSelector} + {verticalPreview && ( + + ᠮᠣᠩᠭᠣᠯ + )}