}XkV0bVsq}H&+=don%%~yl>vL4)IL5A@XT8R9jo3)(RnsUcLQ(&AG5C{Y
zWzk?eXKkh%Cw|qY<>dT=yobmz%qKe{!Zir8_Q{
zt#{GRkz~{M_(HOtkoM4wnvw;NU8&d&eO%p2ntsUheafOC1Wp&iA*J}P10OO%L}vkw
z>^~k6k3ckP*{*oX(3ZV>+MpbO6?sGjA_EbRRG#uG-G4=xsx}fUUX`J~MsS!lRaU_?
zOIxtIG`{w%y`*d{TYxo{)`GIMX=ms2o?c+==a{HuZiT4Xv^45c{Y);xq+_azKFdgi
zb2y0Jh`a*-7Erq0wMle(i!~@oM7HHCvK1oyUAKdmKd>au?mKB<0^A-v#X@_mkgres
zk1CBS-P)9*XnT&bX4-i5{R;|vsDsj!eDW0|aub>(^{=DL;gSnIK>$?jI3|(XxO+As
zC>P1u0d|mq!ocW{(GNGENIed1vm{(r9~h661^+$|+rYqD`)h3*2EwXe5t(v;)2D?c
z`^E|(?-7w%wrHjBZqm|nSCyP3%F&<$hW7Bmb+hcyDBnq4`mf9)x`vf0#DnS_mi_%wIH5^)^8|j
z2WF&N?NI=`C`{;!Oi?Xgw00PJD`CLC4dR6;cSYba%QdprN6Y2Yya(3PYvw_DLP2
znpf3MB*+J6LQ7kI>eAi2PYf;xFj{d@Y`G+6dPw6Yw0Mp!WO!wAnHSM)U!s~)Bnf$$
zEs1(li-HdzTvZc6^FcCIm}NM@Ly;GF5QFFy1cqhzXJ-=GVN@v`P79Na3o;CpAvcuR
zBQ!7bV|nvE@RAntzz;4Y!+=7(!CNICb`5L*vKZ-SI{A1YV(?R`*f1??lzmdBAp<|j
zm(hz_!xDpXJG>x-ZEVrpeEAi;)^=A=Ti
zMTcm-1m-kiZkrD%ds-;L$iM1)o)lOAAm2&3KWW&KY4u;ggXhSXI1n_E-1hf#1masTGbwQ^gc7arwKdKSOz;G8QtXb+aB&V*gF?
zA0~6=^W|16205B&YEw<5&yRPEEGk(z2;r3HCMDy2Tv_(n9)9?9`9;29zDVO(X$)pr
ze!550bYV*6@T;#(i(6bv^`)n&Ndw{f19B9nI^SxKe{>b?g=TW|
z=dR!5AF`ED$irEsiai-*T+Z#2O%7wKn``}oK@Q};OZonq48sNo{xc5Xy&A&??FWve
z;E;e>#Do
z;yR2)-6aU91kT5Sf~f3quur){+SUWpIfA=s5SU4$?4OxV=K=&U#e^#cXmA`t{?17Y
zt1r)guxSlK{5TV`Pu2mOB!uJ#JXJCse&8hxKP3@_N(K!r;aZ;?f%*hci|wzx6qU+8
zr4FGUjJs7+CMs~0?NUkjd~H>tR20}r-W^KKq+)|7dQRfrd#Y7={Jh2|=>C+_6!+hZ
zJFgGqk$(YcLS8@NpTKfQ;A1jO|f
z8VHXpsMb+O|Kg@k2w0BU-At3o#d8n)Js!ic>#{slG_gP5UoW+X^FzKWf&*XsJSzGX
z6&3dkx1Q3fVr=}mOU)aCxq{`!?*0y7GDE+~6x|u|#hoN3LJ9$RXk?mU_PzsQL99j`
zs^bUK=~epN))G1$^Sw^f4jr^EwO+Ma21PVGj4Djb>8Sr*{FmA6YW6Os;3lniBDx__hVp&gJR<^6
z2uSlo;tRH&=d??^{+5vA6j~^zv8RIMV|c!KL@^Tt4N_D_#wBwti|R)rSoc1=e#&B!
zJDK|E2lh
zM?;8x@m7b??zf-ygR99(gzNno)1T2ReGv=#MH5~6g9#2WBen|YqjCGk4i8h2;#}fb
zAYQkpgNoz5p?`G#PGG$OlC4o3#+r2;CU#R~ck2TO2?qJZW=EW7osAO4HP
zqo?ZS_ujBf;wQXE87V3@)@am*;4FX}JBTzGyBqYfW}B>pcf_6_&Nct4p=3DSZ~qzm
zPhf09F?IZ!Ix{Y-(2Au?9BR?R29LJO`-U&8pBcj&@0j+%Rb3eE-b9jvexFz4Y&40bX@wF9-MiJ&@uxJ+FeUOuQbV2a^Qjk
zcmEtdCjviw?XGSX%T#$^Y=gJequD-oZ{NWJUO*DNeABGCt}QZmqf2gQ3KOs+6=&K;DuYiC4JtKg5E35p;vIMLYQE7X}&*Fm;V%W*cNS4G`2B``R5>EgvfvG
zko?r|EH2+8Mgmq80u3%F;)Aopn^#_rK%><~A{IFw(o9+kV%MgOUP-5Hrm2SV;td&9
zSX-&eSqzz&;?%?$`iUDebg1g%jSQ^%NdPsL*yWn&OxM;{&3j7GI<0B%K^K9e6vQ&t
zS27Va_+qBV?B#W_Wmf+i{pxSvh!ukazWrH%jPx*|#m}FY#cD#1OFh7j=ax~hE
z+l6;Z76W3Yxh{!ufNCKzQW0*0&z-{>0O3c^3=rlGSEjHC?NWMgie7<#?D_32%}j-8kdf`^r7JD**+X
zj3ClRj^@4!{oUw~buE1%+a_g+b~z89AfxV0Xv&EG%FRCKSP)guK@|Ny#~GH7CLN?l
ztJ*UsPKYkhl2Vz;%Q}_*a$m)K{cQ#lUYiJLab|bASZjh$a3&H^$L<5X_LTa9AF@h`
zb}KpmR%6lx8COCrZT_zG_TPPk>)E7tl;_aII`Nz}@{Ty|-wam{QF;UodPH
z0UH0SF)moz$B6iRtv*Osr*ip)S
zD3aB63)7?O`{U11FZ33M&DKCkQ8x~eyR|5-v5vgdm
zin{XBL3Z}uHG5D4@p{}#oRcN7W{Ycc5>>wzSU?)|d$Usr4@U=LY!rwOGSF{nN2@RW
z!IyqbGAenZ?5K|EqX_}GA5-Nwkfd@dfh6A-R|*%)Gc+XVZC_c-uprEprwceYZ9Y!*
zc16ZKdfW0)xm`7zij0TOZ2H8K%En>Y60;i~py`w!lAj{Y(j?eE)A`Jase1hyt&nFeFd#iwFR@M#dxBmXoi$of|P>|jv)q@C7`2q$M!CTy}>Z<#5RN5IWjLL)e
zU?;(zaqpsbBDTFT2F;%v{VX?_7_;@*q8K)gq=ky|O|Z{$y_ThsCrh|(K&^Naz2HBI
zCEpYvIz6S`nr-Lnv`FT+Tp@MbmvoREe$~q_B1KcpWxDd`XNp!=xFzk45^w)~|GwuW
zUvQ&)YRyPJ&fa~SL>5H&{V;~T3(#(SvnI+!erZnp!KUIvm&RA^;^Y8xVHPh-oU|FY
z)`tGySV`Xn9|W)Z4MhCl?KV2xQNY!tmjH?jp$@=oNH%D?8V|>2p~+z7$ANhYeM(Ra
z4-|Am)TR>1k5lNyweaQ;4FV|2ClU4Hh9sfC1#}mxzXdHY>UGTQMGg9Fc&ZvjX@sh8
z5_4CVmidHhrN#}2a3>mOY&?}OZ6$h&Z7?0ynWR6bv1&4%{oVe^R4(J|(2!%v0P%69
zD#eJIInv+`s+y1v29`WSl-P%pI-GN#!H)v3@`tnGh*+OU8GyXX$@~App`V_BrmA+M
zWpPw9h&TxU{;xkOEoOU#fIP~Sq373&6JZQvmhHlmXeHS4yfT6sKg#hbn@JM?mX{PQ
zWZ}e0_FH;L#kDEXGLL-3(8C5j?`SDL6+sHuZ)T^_px5I&PpY7{@i50F>#?SNz)^(r
z_D?Nhoh<(FhyR}LPPLx~(&14&E-G}*gT6pY0dy%$3#}!HvQGA#!QoL-8blYR
zC+i*J1bk@kN0;YP$Fg;U;3M6H-t8Gp+r5y7_rhy6pMqaEO#_uos0|+mTx+bEUc~{szJTuP|q!YU0}(C;IgXCrxs+aY6kChzLdIkUcgFW-c_zhMOFLX
zIukF4ZY|a9nnj?-X1rW*1!I?AAv-seUGN~>Gv
zy7WO#rsr$QNxl{%OIALV2*=UiMoT%ZCwqw&vk_q*>hp!?
z&uS44g78cLquVm|hF7=I5^TmSFXRpaKfNUswJ1RJPIt>vZ7qs5hx7j5^VUB6;ahXO
zq4mqx{MAXvLU@a-wQzLO6!;=+C;HTFxz_j^bSos1oBm`DblU*$OqP6JsYQ_nX+^52
zodOgAOUc?1gt55S3h
zU0!B+1%2bpL)gXu@X1&k8|cr6P+O)Jld>TnN&_J^5GRSUYAk{^{HW1R{IkBLlueEz
z;Q}t0U{v#83MN@GZ4Rm^1yd4$ZvRz7HxXfTNIrvI4QfDF36}H$Xr6GR@*-;GljNZvOVzOts>9F-7n+?`3oh)T9tWv)R}()$D8>bMhVm{HmPx!p?&M|kUe{%f%FEn*lBNbmT7g9!nNK~
z^g%tea(H!+`knq^m_E|{ZOtu7lu@n}+@OQJ!cs*9auCF5elhlU;{4DEpGJZg|~8Lv16xqe3vR>pYO
zYqV34vdf*4S~Jg2nhyppXTIr>79))?{?d|qtSHS3%2|tE_11_4+CC00vSUbw{p%P`
zeK|gu?S(1wn60%(XHF@h&xrDbuVdNc%R(#YY5`Xq!fw07px=P*nzU<&oQAMYyq|DtM80Glom^dxB&w
zQncn&>va7Tk-gvCjZ{jE$Xh-#S5eA@p4P(wv=9o)OF@Puw_njgzINZGDVC~%{#QQq
z+bI76EgRERb<#TJLj2d{;@~bq0(Vkt?FS0PWh$*uac0Gw`Iy*L;T_VC$5!bL$~1%;
z>KD_<9o#8{~X%rYGP5t1GtMh8JVPzTK*7NN}XWfFhCT0mPf
zqsl`5o&B|^l19xLiZdgJ4>+>Vaf{fJZ$bBx)fvtETnPYRT>g&>5VnFa?DJ8|iJ$@w
z&B)b)?7&Y#QEPBw$6LS2&pybi%uK*{2S!~18*FLE$$u~K>$$;Nlzr=rUOurZZ(Z+i
z;nvb3Jm)4hL{DvZ8G22MOM)?12tPefbzcuf%{lC2;y0lI;mQ9p^AAdS2X
zA5R22DjcwvdA5!yV2sZ7cF%sL>rx4C$Ml;L#WYCQhIQ(971_f)7(KWxh#}~|4iIZl
z4%1&9}~rDxJ7n~p3Uu&zyD@c(Hg*lBLQ$M0Aq*xZ8Ync=NR`vsDVD`txI?i9sIHl
zPvgU18bk=cxu+Rg?c?ACVPeH{phr#5iydLl?ij?Qo-qCExN=3S*-$)%X@-=S*-x|c
zCTy31KX6M4o;e>cQfB$!M{mE~3eJ-{Ys}H`W1>3yRN>+_epQgjo2<@a`o&u7`gf4n
zUb-ucIUgIG7VL~}zslibl9tA|2%O==`j-MQLDerX!NOm<5F?MVOaaF?r)@;?Iq@$m
z;{LCvp7anEr;kpASk!~W)^BHc-Y1QpGmVYoA-gO!Kdy)zO6NF3ZnaaH9flQaL#J|@
zCiz;lm_}#@>?hzyrDe1`ruW%h@PMS0%@
z=I6Y?708EG+*b$~bh9TNg^zTbJsbSzz8(yyS9h@qNDyH-U;Pu50ajJsY4uvAtW27R
zghc^U(FfcuM6KipCQYQXbxe?p0Htr%W7%$UiIf^{FD4&Rt;iHvv#yLkGUHP<`EXv<
z@1w=q{P??iK;@NUr5wrC@w_cZS;h2|^b@}phk89l^+Kdh=8K6En8Gm?(k0jF0tO8}
zm~=gzR6A%CBg1;c9r^O`0q~JbvGqbk?y@|2d67gjBy``I+>nl$%4tSVkeaRbtMIw1
zZO~DAT&<^jVm{pc3?H;lu1cqa82B9V3H(85kmD2SQ5l}jVs#%aCja55pt9?(_HtYB
zvO69@DUT!~-~@KWN-Ly@1d1N?3229#P&m<6Nm-}(n(A#MhKw{u#xhN!z~%&Ch@)EO
zLO4zck%5|FalpMG8BDR5vkmKPI1Mo|^)%MW#1Ve8DX(*(mG^!0m7bf7v(3j$11UkE
zf)0B2(yrvlH3Ew@ha$g7j|q<1dsh&sR?7BtPXn&({0~%Ya@kJ0u6iP4NI^9M%u)Ro
zLiqxzgjWRjq*#A|P!MjVKzaZucu2Dv%BG!_{R}}Mpp{~aF9|sCBp%?h3*YO4z{v2%
z1f%B{3z4jEy&gM&lP9^5*ijv3P9YOVvftV=c;58rVJM6sb)
zr}Y9djVERa;%B%wP_Szo(p;_D1@erlC*-R%@jaRy&
zD9pUSiJPWP=&DnXuTn?z+l=UQ+R5V@5br}p(yx@xHo$~uea&`arN=&5Qo(yOnIA1kg)z2WK44u>`F6-cNDp2d<
zAV=bYi_(F<;HPY81Hw>Z@oCPJG_@x)xk-nQahX)5mvUkl8dbvgacy!N5QA{&Fk)D1
zj9M`mVI)!MA+A^JIxCImxGSyo#_<98F=41!sRt>($}W7|1fLV|!*odHD>hmGnw5xuG*AMc4<{I~qv`(@3Y?`$xoov6^p{FFYCr6e
z5iIOoNuV{X>rLK4-K@ch>{VBE_D*#_`*k)vr
zG{IaO!PU~S7R}2d#RX%0h_eF?UTd9)WwxOuly+D*Tu0T5x?~d)9F=xHJ)I8*)o24Z
z<$2(u)Rv~jp3jclcL#u@eoUXhJRfQ>1Gd8s7c7*r#W!k9`WJ(R%x`4c4RRYkrvg$^
z(4A%Y}YT
zdX!x@zZ_CC-;RnCv|ZJ^?IYSTrsXiD2}=eAx-k3*il!de4H&pNMtaWoB#ygGBJ3f#
zuGO9DQ~c&vVIk>OBiqcbU3EZQoX#$U|CC2@;7Mk_?dlUv3t3hZmc^NWM{!dsxNZ67
z?bj`wS#=sD$#_^mI2vcn~*rgT|WOjWW?ZqPHZPZ
z@KYk*qz5b#2>dB}j9z+UjUV`6Vs??Y6v_9j6x91gB6y
zFPW<0)&Kj}CeQam@Gj4j&9whoL#3XRYVL0ZE$;73e+F1N{FqGUNiVuGVwayuN8KM|
zLcMcl0&K@R)cH7l3Zt1ff#8tK3o!<{DdUvtIC*UV^?6vWai>nee*=_NZt6Rk)j9gc
zF8=5(2}EHwzpv7NzLZ{X)_i5*aVqa~^jtGdp@H8XA~a1Y&krEsmLOSRCIEGpONGcB
zwL|Dd`KOLCTYh_CMe%UqeDD#lkZnPXoU=Sacj@2=34YnkN+3By%YBC8siP_mReDyo
zne;G-e*f~LT-Gg%$ELycWAPop^75G5l|VD|R6X%14RXO-e7N&^t*nG4ix8Vlveh~h
zPC_dUe}p~>D;>1LS?q)aV}IpBQdi%}xk(qQ&+J)i&rAnxZEif77)mV7CmKI$8LGbmjfnbF4nz2g4!qg+4+?9O5CgK1Cie8=w4d+n4^KagH8)nO+FkG&ke%RV<|~hr-hKUAR4A
zqbI62;3FKC(O4w$Opj3Cl$p$qfbd~sa{?bU1ifOTEw~l8?|n-Y5H{DYlF-^2Nb}IV
zrUSp-FgJgM#E=t@zON@dvb-Xf5TEORer9Rg5@DV{gP=wu#5K=%MrLc9-w99VPdbAM
zOO`;s4Gmk3-`JIP_-PJfQpt)HgPvi8Zgirxiqem)Z1B%MubhXNuYa`yND_%Lb#ruX
z!f<)_NC3vZ5Hsob|Rd*`$X#&U$t
z-W~xNlE}|nYPVOn>^lo%|8h{`ZUAJOLZs{`jyYBCJ)15$q_9+OX8uvxJSyheik;q_
zWxX;I$cdq9^7yGH8Jf;#tAZ-sZRQlW@_d1w0KDY*KSDX$?Jb<3T#OEv8?DgN8kV(L}7)7_XuH*LbA&}BKl{<&LxHy
z@o|3Zac8)}XF6$;0vb?g)0`(qP~Ga6a%l%}zx~K@qsqhgHNu%DN=1w5f`Df#BUMzs
z9%?&18W=Jb!2vb`mP2GyUwd>^=UXw2I_x^-Ur=F>Iznv0>Aa=sN8{6<(HBX$P}wP!Iw
z-V03pyi0es3LycjpwdF%5ifI7sEv992c}aKPcr1u%ovjyLOpRjS5>*2tT&b&C@){oP$>$H`5`OZYr&Ri|QPrM-+{
zGa@NWX}u@*e0rI|yXBS&k|Ne-xhQ7v!DWK=0p8*qAKDUAK=3V)DE-(
zex{ohkH?JCulHg8YxJxS=6($Y_S1bfwRk341Abm=#3rj^?JstsY<)?yZFVm$ln3)E
zGnQx*m!ki>WoP(j<<5ur&FN$B&&DsyDnMTdX`cZtHijZmfB&Zt%YMr>uSHu7YqLAf
z&=8m!4mMG6F@M0wC%D0zFxNUxS;pz~_JEf0zkxX1!!4gDMm8NYlx~
zM+9c$*r65thI}|=&;(t1vIa4P{m8_&W%VZO!@VeQh$<50Mvq0t0CGQ|mP-xCyD!3#
zAim9O$SaZDl(*+Mb4x>NGo0;UJUlOkU*p+7pFtzcHNhMY?^XA@*SynElgGuPzybi^Dk{imJ^Z%)_rXAW_|}?tKnDO06lJ7z
ze2jJjtz)RClK*XHxbIo5TMgxXlzrFtW2a*6P$c5hf^nGPPBtp3z6tWz-Rx~ebh}TN
zDOxltTH}hVfEc;ILw|}4lXBiq*7s)2=@z`6PF``>f#=O*fsOk6y3ON<)rK||U$^uo
zn%6}yGt%jMvsZDx{e7(P^4C(<&B-c`0ufN8*Pq}`fVGtv-K}=BKoasobj48=!MCk7
z^`L-<#}xnP$K@oToMh2dm$;oi@MeHs+W(cGRE3O7yP&Zar>$=u4h;Du|Hu7QOuN?Pwa~4y;+v}YNh#Of3}6W(a}*!
zVd2a1SW3ZC)O-+vU^AiY)>I7j0f^HeC~{tM<={_eu
zw(4+kUaj^Cf-Li^eOqtF__h6@(fBo^vU4nNiNxVpubm%1cofyumpsq+7QRXm2;r`v
zq9Vr*_C@p1hq>m$+ON
ztqT%kMJ0jRk;vnO+UUXy_sT%ee2wFr&aT;2Z7
z|0pZ+mO|=-P^MyEY9ZnJe4yw`dO?y{o)jmAIG#rQ)e0IYlYRH*qM6ygKKnfFt4vnB
z<&OT|saAhfbTqo3pWo!4hTm|IVU&xS4AfQxvDJssl;YJ@RKy+@zI$o&*VqB+GuUmG
zWgN9dxP;kt0Br0TCY>0I(0;>fm=He+|LW_&7e(!F-d_^~Pft(pkADf+q~zTKzx^b{
z{~PZaqu)xGa!nT9*8Fc^yLkf_3bw*P`2<{4m7boB03VP~vAoMh@0hNor?a|tY$l!9
zuQOWl$vl5m^h;v@^sXY~KSle#vvg?o_Va5X9DaKVZiM`OBl4Nmf?Gb6)pKU
zl^%=iS1SY!UDtO-r@uAVHd;#PIj)GI?r%17w}a%cVE`ong)@8G@Da6bLbNbV0FoT=
zUeI41rq%hl29+rq6|MUO?*AueTlEqqQO*nmP;_`{JfWYBCIcIg&sZdcpovsO>$GRs
z$7t%|4N*SlE64=3?Vj$w6WjM50!Y$;egeE?5RC>rL(+gg0jN&^Q@4l_dmgf|3v;Hu
zd^HQBrS)p&2brdtrN9VU4##*6WE}56I;e8$Cp{zsXgum621ZF0I`5XEktx@{WuAxq
z`3tPvM&}2ew>c!HDDnKB_YGkxTfdSM^=Pja;OOKdIX-Twx+$Y5xL&9vT9gz84kS1mU3fE2fskqfN{rbXe>&s8*W%fkA
zLB(;q0cDmC>lIb`4zKBUd<<7kzbjwfxcSvuLLPR-wJf-9=E|D7e9SRvZ`Qnouh5)D
z_%4mGScIa#vbn`^MiG#3`uK&UV6C601xS{}Wy<3XtVRsnf?=!h4;PllOnJnW9
zaFAA|;HlA?!ACgt>-p<<%zOC~Eo9W+gn&<=OVyiw>s*Fp=Agxi?KJ)2>&sI8EW-Zg
z=u@ZuNwkBs9sLIfU?$UXd)xGNir;AcwyAQ8+-SWy>(76F1^;x%68%Bwm|qO5)os6#
zef!sbhGg5ml1rr9yeUVw{S?56cw6oyh*XRsH15subs&1#{=;=!7k)?6X@B!ejCOBE
z*$A4`?D>2JBobB8nnha-=wo*7U;n(ySPQr>fg-1#Km8E3`XK0k*AyN6w=SUU`0yg!
zWmumd9Ps{Dmfd~V{rUQF=PZw&R
zILD%>=yyWbb&6H)pYZlx@y2G_TNM;q?@xJK+2frQec0J?sQiNIE%--Ra%puvO=D@#
zW5ukHS_*~dF(oB2!LO!u`3^%*qZ9w5qa!in_I>Y@(^E`*53ejiE5`lxfKQgVpp}>m
zduqzRzPwNMa=z+>PeAW|=zA@;Z>*{Ff6aOaxDxmXe$?aL`=2c5;)vC8b)v*uP{9PG
z5Xic!VYY6@kc5M|*;$MAp-e4fW66CA^{vA?_&gO`#gX9ET7QLkH_VY07h{C08_eJR
z)7bhlNRIIjhx-k`{bWx|;I&16%G3EzmW%po2ZOii!|B_y{QVZ(!#8n)O95k4C@3gj
z$-r--K*sQ5_mDb**FRsHwFO(4;+G8UJYhp`*E3&FeBU6Vcc83inn)MavL4o-I{5p3
zIRxkIq-W!cRA)1@)a!quE-u$J9&ITs*#TM-_m{){XS;KQ`~r|JENJa@a@~a??1(Gq
z5c{$nKM4LHMpAArUAvlC3s}zJ*c(hvN-}R*F<81vX*%lTu%eQXXG*`On4PGC*!I)5
zP!O-wv^=Y*aJgT;ezF@%ehPic_lKim`}qdFRl-3<+r+eO9+teKV_{3JBxp7%649ACWWX3=YTY-+r&5?C)6JI^ppaQ{n7)g16GcO459cNTiJGjRw=0B+St!=9H&eQks7uj3?`a^%53)hXnjIqtf3rSFRrdHm%`rIMG8ou{w
zX%v++3*N2QhL=O$Ee!Z=8aLd0Txl;!0V^BZyFOfsR|8iog+ssi=P~|@w-yoDslRiW
zt~C~*5@JQ2;D4|Cntl_0LqcS)WS3J(6zOW_(?i7|gcgCGU-nhoZ+0%f@wPy$NoLbU
z(QAK}Y5J}gnUkB_UW7kAs8LQCcj-(c_X`8=riXQT9o1c?^%)L|3Xki>g3cS4dgFs{
z%%vI+UV;NBUFZ48UR+RR$_g2oFlf1&DC^@L7Bg>&K$ns|?Q?W;4E^WZLOa3styS|&
z4{OW)?S8s6WI3X(b8svQ9XSPin?|(`O~l}>G|3Acu}@FSFQ}KL5O7Wme`>%)8LW(&
zsx;X1GmeJfG<*zAghMq>z31oj8=QEt_qp=7qmm;Wnaeks=li{#*z0SM@z~qt8+8=m
zIWZwOo}^Ij8SmlYLH?J8ki0W3-1XqCwXh`ZDgg>)uN_|nzm%AjI^KZ>yhPrkFB(D+o87Tb
zyh0Qm=IeeF+%MfOEL}c0o7rvO8>3lvjfYUTz0yh8;wFBbmN75J*8Y5aT(CD>eEFvF
zTtP}UndHL@1v|YsmBMynSX?sZ)^M9hK?0D9{GvU^BOuJc5PxN1lcRhkPunZq6ET!%
zx+&(b*C27Hp9S;w_rmW&SUDp
zA_sB)aeV=8HqNOr;u{HBhjg1g!-?03-i=dAo`Bm1DkS7~+^?!A!p;RZgVx{-L%>tO
zPC=v_XBPBP--0&mWhLZznc|ID(Eat&Fci6`Q4N{@&)m5%5#Rt0FrH9?A@4QeWP%St
zur^|KF}id?=d6dg;d$mCB&z_*;!o+*G_aL8KVflBGz5Lwkvz(9fShwh{4tPwv9|F>
zC00ejPCYwM>iZ|OT8apWC`y@{n!w5S0Ljj4Nrn}3ULMHjthyjwKRNVOCEvt(wt-YJ
zg6A~jA&&V>Kd__4#%I`Q!;}{r0_WFUCRyoE3coCcdW+9g`QL6%Q*6NzGo(ii3NR5+_}*@yd$FQRsW
zj%<5bIX?_^h<)0iN$4#NQmh}N+w^wog`J%Lne^n*Y?V7Y=4C2_8x}+qT3~fE;w<$l
zldb*PNXYp5HNjwF?FZW3efUj)ZOH66n%Pc+r?NySR|_@JSf0t4*ft1IjLZpgWTeVc
z#6SOBwuBy2y?E
zg^6?^@T4L2m?OSkd;6l5bq-&g?XhqD`^4zQW^WoLrEZi@8+8mT-fh*-HhcytK9!cF
z>>NF(`t^Q6knz*4G!I_p9U;awUc+9dQ%R!1>BNsm*p2m7DoXP5c^K^7fnb>`=2v6g
zq+Z|$20sXVK4ZW=j-pd|Id!-<7prOz2{!^7f<@ZUH$NaAPaPD=utAeer*F^nMs4RaYCj34&?*~R!F
zLhGY8EYARG`e*i#%u;^(MTLHlPm{ngx}Y#D!%bFDSEQg69c|G)nR#?m$<=p;Yrqs}
z_ImUaJLt%Q9(u*b_cRx~ehTR>bnuhI(jHYsJP|KLSS_EWcl;I?r#oLJ-|gv7F{n=F
z(br~s@OScd_Ib3x52K^ie?86vj+;w6+EynS_UB%KY#d)7`iA;3Q25{^DFA$8snN?F
zfdN#-JZp3mx=E;Z-H#2tsM-dRXUDgA>E^bLQs$^gGRUR{YwZ^&2U3Wijjit|9X;K?
zQcub?S)X99aegH^@7BE2lYW3R9a3RhZmFml@xv_)r(wbLAiW||7U6C
zw`RiA-E!)NXl#pb1enfDvPVzq?vI6L6WLt}uMPu=B%36^0J8conSO*$nzupOPaz9n
z*&|G(8S!xLx=+QxzrVlV>>5=d@&k8_5!Fe9iY9cq$jKpLc9L|a
z$}3asca7$(5(gu-ohk)JGnvy6jnH-D^2BDzlVr0Se{?PC*@O!L-nfC`3buM2ZbN8c
zb7uO}bF3o^KFJqY$H#d;$~Evhj@>~w6T$uCpD+e+4Cv`~zLI6k);XcgqKS-xV{;NT8%r|yZ`Ml#k(@NiCrSCF||)i@NFgs|(fKOQ;v
zef<^^fceg>6C>u?KLlX?J@e+fkHbS;
zXv0`YuYmH14W+ngVk}8ZlAler=g>BULZ@@b(#JKShrxURwZqlXM@52$D&;VS>gCc1
z>#5}<9^`a82)M6JJn=$DJHUvsYmmSc6AY~s&f8i@Bq$^X%#jp-{o}_&_BC1$pu6_Ji
zWd#|TwBuL;6Hak)d6m!ZDVX7Az+C_lrT7-(p)$1)N;jQe##%%D{M}qWlpoK;Kb0mG
zY(~O{nL6tgfuu*pH;9Ig4oRvIlJd`XM?D0|6fYc!V$o@yG&RjCOevuFQu|949q#8x
z^4hMS_$sN0G9;bdbVeUzo6wWpqw~K-eP#A
zi8TrDI#PLHr8N_}y?Qdfb8y003WFF5K3*P}8Eq<+0upB$tR!jk#0hnfVE_j8-gPw4O!$k2h{;a0XEN
zy51~G^`p4Rvv*p`Hw&LeO@nE>wFS2y40!(|7G+=Whj~VX5V&~xqRd{84>U7^BHqxWgvG-lU3p^Waz|qccQ~JELn_30
z_;Bzf8SCHv(t2&kVk?ZwgKYI?(D%BV?{su7$3!V(h-&eXJa?2RxQhQ0kz~ZA;&x6_6
z2R09(w_4iDhki+XupP0Ck_TXrSsW^<0%Hxq51tCI{y_<*!^byv{qcKrl+sQ=AV5v9{ILv&}#qYQN
z!JUPUy{>q(dNUATNS%{aqFm14LjVHwSiv+K4HhV2uOW+kWcqF1Z4x#ovoBC9;3K^T
zoe^mJ_JPM;v=#e}CPP^La}ODA%5hu}GMUwtSiV0I|fMj>bB2TFs%Qy+`mf(c1Mi
z{6l-WG|Cu(NAsQ~kvi>t3f(P(`N0A`8LQx8nBtrcmP}jSis38V~||LOAeJGV+?;8hF>4B#7aA3`-qe%I-dw>n$OnQ
z;~ahsB)Iu5fE>f!LIcgIt-HQn+SLxAocSYDB4dzOdXDLLrbKp2l;t%0!o1-T-*==S
zXv0(%v<*jG(cNieIFf>8r2+S{va)13lAmJds}SEm2T2%lYlyW^2=Rj|lAKWvGI@B0
zoHxNLny1soy)BdOD2n%naGu2L@I|#@Rp;_!6yZ$XX9FpK@j)Z+w=4BNz8Tsh)OqXF
zo~$JO5pWZMoZMLfF4^`hBpi@Ca~r{bLaG?Gn2?oEqm+Q8yDGP6tO-%;7&ZwT&?hXA
zD}N!5)K+yj2;MeGNrfF$Vgz9<#;%C&YwNZbAz(l!yrj#o*uE$=6)#7@>fWeM_BSrH
z%LYq_W<%mVbZFRPvkGS#ucuahP+APX;a){8S8T(dvC#CwNXB)5wJx`Tq8c%O>DY%`
z?TA$->3fvdOKDaJ^OIwR_~2+jg>-UU-qFTvUx@IJuyAlu8FeR6=8Qs*feH6BrfoImmh4=r!mQ8Uw>9L3Fv`
zCu+6V^UaeDKQn?WfHOvVFip0>vqMD0rdxIy+L;}#E80m2mTvwDuJt4`gkJ~8paED)
zCG&K#marq36@!8Gwi!~U@ihP6(JMEjDPY8Zg%tfj`Jx8b1RyX$yb3dqaR21@q$p3v
zqo4m`e^?(g+YUy&dZQB=kSAKM;$~+M8SKJ3>p*mf4=XWG7etwh+z1rP$U4FFrtuJ!7Xh6+NF|rqm6GqQ;B#e4AIXe
ze<#zec2ffDqDQ`VCQH{bj+o_QcxoTz24qG99}zRQZq-wpT%lvYM~9zFGy8I2Nj9
z@+>mdmJ+ZhJ0uTc0%%`6?BJDk>M;l91Hfs(*!Ehcu0J(Hop5n<-3O}eS-z&
zuw~A7SCsl+x5d_QC;d?|ASsf9J!+TXkG^Ux(39Z_&fp0mZdXOgw8LJg{Q#^@u8ZvQ
zsU$`YY@AU4p?5$RpA|eW@8#5G=K>eLQ@Z~h(I2^slJj9wB&?C;W2u9Xn^IIh7S(s6
zm!FGmLesV0G*PXBN3pRz6fy!+xh5^B_0RJ$X+zOe-)I(2%p
zV5Tcz>7HD4liLC&j5=Pgza&xv^S0?Jh7WPnYUh*ij9Dm*cPUYh``%yRG=yl_=_MHz
zADnPTm~-S&C_90FK?$s!(p>y3kfs<;w_#?ffK+(57=1h(wPpez06E`uwlrupn!U4C
zETjgd(q!1{EJZ#y^KY{KKwXQY)Ht653{?>9kFTZ}**tOGs#iFpj7E-NuT$)>0{_^d
z478k!sYQOkB3Lb$WS$wHWRyK9S%sRIZ?I0i?P_>ZQ*85G-Y(B90H;I5|BOlp&bLtg
z7wi$iM`{)rM?*#w^HxV3EQiQZ9Px-20wy*O!y6%Txx7MCqa#_`N(62J{~rCe%6;>@
z=HQ=5cX`bTF06wU!eb3FQAS4K(@KO(Np83P1#8ouo`LPi9sK
zG=zJtBd#>8&)ga_W4M4NGJ>Mai>09r7f;-B@y(DYN2XvzU4*X^MGs}@o+O3~+6nbn
z%}w)YX%>WuJ6<(}9JLUZQ&R8%v;hohj(%n6Lynx>pP2M%|
zH*IGbM;3VdN|>7Sv?N44UrC7gDmDDhjFaWpmICGfre<^&guQQSOZ>g=#sV5V(2*2l
zm2g*bs*sA!L9ql=X%;Xv1z>Ft(m!YQdGx_MW}T=9ggh%&C+kZ(55)U8Tp+
z!(h|EUa2i@(cHtq>7!>}
zQY?F@LIJqNpP@i$Qz1oC#66OIWwrpmO`tEzQK+U3^%yQjq)>WrqR=C9mHe+9|CPm2
zF>)0PXU{cm@U}ys6ZVh-S|2B&Jz61WWuU}_3LZL`L~yyk>(Z$;ut*kQb$Yc7JzN^E
zRy;w4-|?J)KKa}$L-OzEE*e+~28kE;eaiVbG@q!*+h2-$Dbdvh(fL6gBO2U*oE;N_
zJI>~SudDy%7!H|DXB<)pyuW(Tl@V=ph!#;*G
z_LdYSt58|DpAKh;I(r1W1rynzH7c#lUhY3y4j3s;aE;;%t@iwppHFdb7>BZ!6hHDB
zJLoRGcE9hEW6ILSK`RSEzli5i!T>g`^2j0^1k$(cs&$d|{xU9Mnx_#k^{k4IYkfg@K2X=>u`h
z-wuQ-m(0Wq)A|66&hzQR6)S0UqI=kU`V*KU|CR3u!8HvvO{DSAzY(uhxQk4#l_8&T$
zhUbdc*4Dt_2sk3W8e;Me*c6=gbY8tkb#vy!4C`xqL3HUld)HK|G
z0`1gsk2nKwScN@m!Fu_0vvUy=_$BG+cSN^qfK9-kvlPTxf5PGg?l*!rUNFzEKv>T4
zM_?d!o)Ra0pYPG$VbamIU|ioOcIxU`Gy3}o_71?q3M)oJcQBrqwF>IwZw
zfH9Iowo5%IlrfxQM5vzA4=XIOQt%*
z7cLkhv+D&^Ou6k+m>@LTim#dJtFFfqED*Zx3aFyJ9SJiT_G}70$LWhDuXs5u|FOyN
zwXKIgK(8eT0YHw5H$~|o3k6RRfA`SVKCjc6a?oaFht1XYd>uw~&;K9{ysu~`jG2|^
z=0TS$WPHS~MiED~ajrtuA0kR}YGlPAmgLxrVj0JKaPICuJ}@89Uck-jQ_q~bd}}(x
zFqZsDzrcTCR)llOoTy$pq+uzb?xru#RW)`;e~CT)6~zGOF|UwOg!s{LYcTO9$@EJi
zrexWoBz__Qgi!xV68={e&0*l>U)d-@iKnWPG4Bnu=}%g09^>U>Qr_}x4Q|vjw?Cff
z;jbdNFh`(bo#5qT{ml5>8G)Z3qYGX3U%Jk!L+$v?7_?YZ#f10_5;{+yROnt#$uF`+
zpZM1}N>MiORId25*ZE*Y(p*!90787k3Ws?Qs^~LvL26Q#XZmmj09BerT$vNja3~DpXAW#o}8TO`AN_u(iy)xC`prQ+2`o_MJf(`o`4lxo5
zK-6^f4EFV+KMl+Ilm9H79V6I^=q(-2#&nPy`8PIhpL%|F0h9!iDpAFdJ^Xv-P#bBt
zo#|&Qw~yQYO^fmEcj>X{oN54_FS~tcc?4y$?WzppIsBHg(_s$!1;5?aHme1NojNZBVKKEuT)_ZjzpTmt7EC>Bs
zx|*!T0SY%C!0HbOCij%-(A^p0TmO;xvsz55Y)-in@*Q?5TiGx}%n5$+d2?zEu&~@f
zxFkc+bUY+_#EGYESFGAb{vFTnjYIG9L%H?f^S^N%ya$>k_8bpAqcohA*bt&tTK3^w
z!)Y3u!1T={4P8x|lktJI5puXb98UN
zhFyfYDyfLWjxt|qT(nR|&rina#kfQqDM+_yVznK1`P24r8T+FMv_0~jo};aTU?9ut
z0el(FGYK3+AfgzHPf&sIiL1hQe~mc@weK=psrNQ1_Tm)i+{j;YM!`2Lv}=J>Dv_0f
zegCQ}H-C4f;EhY$FzRn(VF10iOb`OAM>jdfhVH9J!EURHmt*VMDb
z$V|DkO+aZF`w#DX30o->&PSAXg>iItI0yMF7qg`as9e&o2ih09&Y0%#?gMn@@}}mm@ZI@z+}nEWd5P#XixFIPd2G
zQh|=i7VQzk$kfO2C2Awz$y_|?@ju03X9(^|z`CcmEGTa83Uiz+a?RK%8>P?aB-eS^
zTR5NHuhYNE&H>>@F)9>&oS(B`a*q_RuN~&A2w%pdLy-JD{3B1t!UEwzJ{c}e-hZo_
z&i2sV4&_ACTyPcXbaJ=?{$L-~4+nCZI4?giz&>H;xv#?L@?jIiM3VV!&OyiNGoO9j
zY?UC^vkI)zV>Ib2TBv3aY^lD_J}tCg{#Heh0H;iD9q2)(Zx#^((pFNg@z9>aqcYK#
z0Fj5%Oz2d;#Gf0)&i1D1(Y+j#c}gUfJBoJ(%};J}?wrpsrQIln>2$G(c*HoyzN}a!
zIg9}^rC@=p+w~mv4HS#`EV1i~jEHvc2+GCW;CMaR8Q5nTSttX>^xAhEU3G`+_A299
zX5v76%aT^gT|KB*&)f7`!i+}F+I?>&T9AOm{%QoptZ+*QUxqHw1%z6823A
zAXK`a;w7L<-l;iQG=DXX-I=b!>-J*{XNhdNCqbH%f`dWI3G~)N*F5+|GFn(7FquN9
zS=JOvC<|>^9w;EKADiOZm)^HtqV=*dNfdz)lx!xKJeGZcrC#Sy=0JDDKC%Fr?J2>si^{kHT
zgxG-N9ITV$?E86uFko=QG4Oj!A9VfF%ilvcwO4iI67vs7U=!
zf8WQW{3He{`Uco>!{+#r!S^Y+T5q3>JRyJz{^BN7yQ6IsOJgk)eqe^PP(RKtE~jQj
z4+ls(BxI`dAi0m?Q?YYG`oU1s?W6&-pf%Ne(jwlY<9J1+Nei~H2eY?c1nx+r&i3F)
zx&dS;stIRD3R!U&K=Iex^rA*`C((#Nl2@nDG?Ld*6hEhlz#&fgGj4L9Nukv!zKpUQ
z6L^;$bS8Q82fq@O&wb%=9iCJ)xC%>8Ec;IQvh6w0_(czVrU6DK1rbKL@B<%Z;{$Mo
z2L%m|>V^EpM0!NtQcMH>a>!Zdez46knr&NF^V=Rwvs6AuJB7d5QhrcgsltR)#fSb?
z;;as^A!^gz1B7rIU1$*FS7=3PZu_xzVX^7kJ+74{X`e{z@1GCW7nO|&Y|Q>@FDH-G@sClC@x9>1EQwxJK>LTrpG=Dt5h7DJQN1
zZ7bs%Y8d)QWb0x~Y7&A)4xYyktHNul?d>!}bQ$>be-&^uW6MY|Z1f=q_pG!M@iIls
z1gaEK+iU@KgsteScaA6MS3U6qc!2yGuT8NlWKkaE}Lz5pEmVU*HLEEBW;f2?uVkH@He?X+Fr?4eckrzXc
z$DJG!BpLfY+TXeJsV^q=66foBb~25O(Kx6N5kxmcX%`
z;xF9dGZ5stdS>#}y$=rOWaCC#WZZ86=@;6Z7;VaSd4|psvDP|)mJ`z3i3`*y;UvJL
zMH+&1MV>GE4?iS8-*(Y-ku!)ND?k7|(BSVEy?I{4n%pdl5JAGvbNC)f!RsWjO>QQ`
zl4_9~lR6&&m=602*N##yD5pc+a#v;m;mq$$Y@1t+M@7nLk?P9hw)1xN7@61$AhIqX%~L)0>WUd%8II0gtlkY2o@2=hm0
z^8?;t^xLF0FK{z(hQ-gR9NvXJ2N#Or(a4L`GT4Fg!B8)^6en6}Xgi$9kTWiTq?&{d
zHMfdYd-j!m!QWHi;~)Gn`{$W`mHaHD9?IluwSfYo-gu0
z9p+~-PB(h%FMmuUbsE9>K+{h#A7vK);ax~IUDLb6#r>|iH7>J}RbCU*Yg;On?v5>1
z7q*MhSiWF?n8{8c{)8Q}f%+L2p{5%Den?m7Q4gEpgF6#^3d!*&7h*!#P=aIpM;n*x
zm`LgW$Heq!O%#`;6ij%M0>R5j%4B}q({5|4l2lOOF;i14Q{x<#{)1r77;%b7w=SZ=
zE!uWW_%^yQE$Se6b@V#nfzwHCJN!b5&z$+xH;BzH;-KvDJqr~#j1M2N?R%2@s0e;Q^<0+En4I%ix9#i657
zBp)K0n5In3n8El$McnN~lQrpq9~>BGLFSPBEp%{n;sx`9kQx;1x12M(-S4NNDq|Pu
zTwqchw(D4v+b_5LgkWks28aDu0x2{4u=2dv*TQOV}SbP?ivN2ze-)x=tJ<-y=*g
zaJu4J@=$ohD}d$kIY-4jV8RY_PsRX5lK8qIIGvbQVIpK*USV!epv!N`j1-`7nxFfO
zO6mS=1Q+RAaAN8#W4{6=qd-)rQM4inTjKX`p{E^3(ySRXEK^Q6{S(`r8-u6fn~(;`WWN(g}O;y8AQF?>5Cg*!8ltIoFaO40?E|
z!=q#kLiPt0epoq*Xw&@rr<5p83&hIU3I22J24%cNRBEVLf)QJ&qfg&EJOGFDXvi-5
zlk3YlfzZn!4`oWwbn*F}UW9UZbclpr4c2NtEqWDt2}uas>i!cboL4t1xa76Ou~~kV
zK(044w6gxv=AF?kTQ65ITFJ2N<;G7Y2aWb0-Tm-12m$vi($I2g)VLGFqOS6~tRSCC
zVSz0BhOs}3SPfQF)e4kY=ANBT;duC2)gBb$lk_R8ll5O!Zw$vjKlwXK+WXX3ZuIC(dRG{4;Y>eg
zQ+FMOfB|c1=A>`tJgMbwIjEInbACV7e4?~CNyNi43nKOPMMR>V-vhHV=PQhJW+*FY
z_5QpM^qc01OYG9tg%ke)ntTUZ??DXChWl!m`$EgUeu78$~q;>@x#ODnP
zGFt~j_u7GB8WYHc-lBC}1lgfzKv@9>wCuCb109^pz=&Pr+fN!hw{e<}Nig0Y-u?wt
zi>Xf=YXtkl2mSLJywY*v%90mz`Hv=lOPbWCNPb*+te6*$c-o<@W`E*IZ~>eDvc@X0
z6#GCZ&uun)_I?S=^&|(8NBow4Wn^=#cjnVd7^h38LZQGL74v5oqpuug;T5A%Oc6Ry
z<61m*8bh!AuLW7{d|8=u>#0-P=~5T-3e>Xx389eH!)B%d5GU%9?-P_V&VwnZGe6wjQ+DQBwehI$s>a8i
zlayb`C!BG!TC35fjulGqWs$pypRK%j?t0aw%flC9-iqOAj{YhjLyqAq@A7P_W|%)}
zV^{n`9$v>kF~=hQ(8G!juf6&*|KfbvF`VL;;dJZG8rLxCPi}?}AqB2gj@F)Y4#b?X
zs4(nnT^?UZn>zcOvBd`-4qv{(3Q)vMfCI6;A#DKDL51d2v!P#mSbiZlFB7}}yIvu6
zM(Pt>KG(mQ?uL>@>la**<2G_zjF$QR>SHNEJBg{4e@#tQ+CaZ2tJNj-(Ms@j`*i`X
zKTC}u4-HL$hV(gY!vrS-=n~tD3LZgKD%U(Um1=?_y+HJgBlzgClhgNw9|#~i|NlF+
zU=%{BWz*_*(QwyMwfq?{kuU|M%UPHb*t0O}qju#RUt^G$q^;k$UR!(7f>h<2?48@s
zkVy^W<^H+%DXgSbGem_pOPC8M9~dO_T7L4sSif4Avuebf`UcqxXXI@
z%Q_)DzBpuEiCuiyHf18T5!qtOL#*BO7
zgU_&IAf3r`pGU*3B+!D?SF&tVKYI{Ug~A@j0ibVDkq~W@)~AJ>Wv+k{#K8Q2K~An6
zdRLRN+8G77!1Vq{7$OEdq*rQ{KfSoN==mz1W2c+#%+@R8(UIln)#(JC&)Od`hsu>q
zak$R>G!>%)?HFb#IC`4aOL2yluYLy?ea6Ymx9(b#m%PirxnODK!}Q1v%9#0R2m6YP
z05%2rPa!e2tgNb5u_g+68te(#LI_rAAw3}UWm*x)U?6QUB}jmSuIcvVQ=8se%I_$G
z6s5|X>haiL(~IIOS1NbW#-HK-`5U}KJb*{td7Ex|AHtGoW*D|Ny1*m62oc=U6uvq$
zaNEDj6WdX1zca>wG2B!KuKJ>a^T*#S}d25mSEK9@bYeoik(8WPg
zk4%6R#d29;*06@e^;|ivq;8@EW7!O{0@8MmcXIa$JlhGyI%V?+X;QHPnV(W+#L@
zQ&9CkQeP~J4QIkwmdnF{9+J~|5cQR32sgpYjulX|9*$iMVY!+y4m@?&iW*0iqy2P-
zU^v8zGFG|e2FnFx9J#1zGWogH=SCKMEsTTqSe8}SD35m}LL8GcR;~}CUN=1B%zmAo
zU~ta77PS86t4jZje#*dqR)VRY;+DX3?tsT
zsm;VPMQO7|`B>yz?w|QkS;g`GtFU8ee+Nads-p=L*OLq1SW8~NBu_Vfb}#X++2`ex
zj+FKJ&8Bd
zt8~FZR?cr5jmhN4+<`2kYS!dLF;&c|Oefp>M
zQ+e0Q!$1b#D}uXX*QYe%S1AE8%Ou)wi@UeNr~2p|4Sh=2e5=Rd>8?{})NU8ckm9F(
zDR*C4ESD#Js{}Xs<@askJ@C(a>g@xM7K4&4Bx0L1eOzlyqk7gi(P-$lbtEn9{YATUVK4dY
zdIOIvMvXE#DqZelS_qO-X9W}-^TfC*F^S?W4=CwYtLVZhdOgAx#I*VFCKRr$ciIS_;$K^5;!bb@BXD-Kt877pG#~W~v9#TxeKk3O73h%_Z;u&_8h3
z+eOLLVxO&<=-AgW(BYqLTcnzkHYSY}U5onPJxtbezh1eQx9gOfZ*@H;J)tg1{&z&g
z_A%>2;#oS6*FB9NZf+aRZ8)=40)`+joVq#F?efl0*c-b;p&S6r&;R`|K&5n?aoy9x
zvia=O70ObZ@lcO1afASe=QqYbw8vsJOLWZTkG?v7nU*W}3OD~n8Zxw)BYD}Y9+O5E
zpJt*PQq&mibJK}%e?6{J9$fq``Ardq`$JG6I6fIu|D-=~-g16BG4+U^3eYp1X^4E=
zbuP4ypi1n1<>E|4iLK`Jc?n-Q-YdX`q7|}7%UUZa0PspACxo!di{%6a8WbKQ%sFJ@
zyBiw;kcl7T(ZEKcy%;l}zV_DlL!<5W+=1QSu?VjIT=VjUnLTdHLQyF!$CXwpat`7x
zS7q0w^+Q(WelK_|^ll0Ff?f3@w)J72YZYDc;(uDX_J5`qH~!g>xn(Z7&1GhxxgX?`
zTqh#Zg$N__byjZaBDrm5I+nRRB#bz|6k$>B_sc}(C`*SGS%*`IVTNI6-~ZwJ>+^a)
zuh(<=;dx%~=aLd&e>=zyXiB}Z-P~fKdoOnB)Qi$dGl`xL*A{bA9A>{8cRqNWsU+NK
zjnJ)Da;QOVwc>fL8)a*Wbk|PHL;ck|I1ziB^wX-qmg=RQLBckj<#LjnF#54hXFle`*dSSE0
zs=*YxbOiOQs(nK0Eo}Ht>~`@)qBfL(jVB)~-gfF!p@jvcpgsrjIYHyCy$6v(djiWN
z0YVj$DRsjLp_s$W5VdH~)7Ll4Z|vxO7
zcg@czs4!K$j}EYJh(pS$Wt&u~Y31<{?I-1@xq|?rxYM~SmIJ`wr*S)V*-92OCWvmM
z+-Vov#1O0Wu~hj-oNHl>4P*bXiO7R6knn^}3!YAVGt$##aDiAc73{I%#LFwb^vgPBd$JGs?&<(#t5d5x83eJKaY2G|(uXPZN4Z%t-#Kn3xnC5&
zb0#k?f`CkRH6`6bJ=^aPNDsSERn{)p3!R}UZ1mvDkFD+-4kQWAYcgKK
z*@;mtSm%VGi+_tr)KyCXmvPV2E$z+FO48g2vkLMe)p?%Djt`Xu*zgwgFu3ygNLr5(
zW~vRs5_EP3v^WDFeU{-?H_c`uT)l8-mmx|(8^+dS>9_DL+%pMtvN{pHjjbD?Ca8q!
zvZ=!Ip>O$e(O97%?9zb5%UX7vXFV33Aix@2bIjUi6dC~v;W8{X)0dw9_o464%t8S+
z$z20*zb0_(C|gNq#-y@4T1+n51`~N*2q;tbL8}UA2E}nD8WSds@*lt=K@}Nt(FpQ%
z9E~D3-tGPf$J)JNpd<-+BX`C{%I2j?&ShXG*885S-`OlscfT*ZYC58^y9
z2r(@TmTv7?&!vYq6!lxG#nA^X+h#S}`FS9~V(h=dqYm6=ero0-H6!*HIS)y;s@+Fg
zNVnaL6{dl!Ik957*PX1q7F}o0{Nsj$H{2iGRAb>?;RjTlTA!x*4dS_`uO*xTcCu$Z
zYdF5QygiUS{cUkES#foSUnBCr7X}2EivDnt-Q*|1O%fbJ5$<#Md1AWx+jfHf2vKLD
zn3koyd?3@X`mj^Aj9#7^8zZ9e;Iwt7xLJx*=Df2IVFn~j0D(Fb`9}MPOvgt1N{GHX
zYXnP4qfQ*(wu#u*$IBp-VZbx6fjAIx-b(?K<#P1SOO(>Un$eK3_QR$H^Qf*7zx4Ki
zfr&WbrLo?$u$VD0&~7IU17z@y`Y5Qz8JPVl(BXLhn{YMooWoaR!|pS4aKwkxJ8Tu5
zFPp8Zbf-=Z|Hy+qY{t%a@JmK{Z3s}B;S1{Hi2=_X%t+?y_Rvt)FkfwNf?wmSoumml
zL7hln@}<3*74P7duN&~ST=$WQ>MB6SS$?(%5Z`Dj(5OX)Mt}+P&}97F#0XTv!-k!R
zv7uje7=n%0NG>e)4zM@jlX~nAn^lMSS)LqCR97AN)8w+$``RWqu!xhEB&!$5?FxyW
zQXOAGCq#FNnSWt9^8)o&dh#oZdIwHkSt2qq?LBJyFAn(o`y!%*5_vCgSB9ntVMg?L
z4g?Rbw338R1rvUx`L>~<*AXKD>FvJ633$y?jI?Mbv&zzNz9Q?qXQP$f*e+u|vzSLm
zfmV17g_~|*Z?ZhJ0BQq~$JC(;4l%^#{KRVEH-uZ^cLO&pr2M3AJpIjuOzn+qJb$j?
zJTIZrocMXfi>MtF9zh^QYls8prIEmpP>z^y-M5?=D#+hkOcYRQbKCmCrkUCa`Ny1j
zy7!O8un_PSnF4kY3u^Cm1N_B@cx4M+QLn!)7z=rx4is>w=WfNywjcUHYeT(W>KG1b
zL}%3nU##>oY?O7tFVB??X&4!gTr10S((jYBWWYUe&E!D7|HKKel>}@&BTlX?P%n5^
zM8){ST>QI_2do1_6OVHni=+vA-BW$q+a#G}1Vc&(5)pFGG%=r4e)FpTd+DZCpvEoq
zc4Eycv?$w6p8XfA<9>W8rX1bv5})qgYvS2n98o;;Fu-5|F3X|uh@YX+c35HT`;l(&N_Rd8ytg)
F{{o?o?%DtV
literal 0
HcmV?d00001
diff --git a/src/all/asmhentai/src/eu/kanade/tachiyomi/extension/all/asmhentai/ASMHFactory.kt b/src/all/asmhentai/src/eu/kanade/tachiyomi/extension/all/asmhentai/ASMHFactory.kt
new file mode 100644
index 000000000..41a2563d5
--- /dev/null
+++ b/src/all/asmhentai/src/eu/kanade/tachiyomi/extension/all/asmhentai/ASMHFactory.kt
@@ -0,0 +1,13 @@
+package eu.kanade.tachiyomi.extension.all.asmhentai
+
+import eu.kanade.tachiyomi.source.Source
+import eu.kanade.tachiyomi.source.SourceFactory
+
+class ASMHFactory : SourceFactory {
+ override fun createSources(): List = listOf(
+ AsmHentai("en", "english"),
+ AsmHentai("ja", "japanese"),
+ AsmHentai("zh", "chinese"),
+ AsmHentai("all", ""),
+ )
+}
diff --git a/src/all/asmhentai/src/eu/kanade/tachiyomi/extension/all/asmhentai/ASMHUrlActivity.kt b/src/all/asmhentai/src/eu/kanade/tachiyomi/extension/all/asmhentai/ASMHUrlActivity.kt
new file mode 100644
index 000000000..c984eae77
--- /dev/null
+++ b/src/all/asmhentai/src/eu/kanade/tachiyomi/extension/all/asmhentai/ASMHUrlActivity.kt
@@ -0,0 +1,37 @@
+package eu.kanade.tachiyomi.extension.all.asmhentai
+
+import android.app.Activity
+import android.content.ActivityNotFoundException
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import kotlin.system.exitProcess
+
+/**
+ * Springboard that accepts https://asmhentai.com/g/xxxxxx intents and redirects them to
+ * the main Tachiyomi process.
+ */
+class ASMHUrlActivity : Activity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ val pathSegments = intent?.data?.pathSegments
+ if (pathSegments != null && pathSegments.size > 1) {
+ val mainIntent = Intent().apply {
+ action = "eu.kanade.tachiyomi.SEARCH"
+ putExtra("query", "${AsmHentai.PREFIX_ID_SEARCH}${pathSegments[1]}")
+ putExtra("filter", packageName)
+ }
+
+ try {
+ startActivity(mainIntent)
+ } catch (e: ActivityNotFoundException) {
+ Log.e("ASMHUrlActivity", e.toString())
+ }
+ } else {
+ Log.e("ASMHUrlActivity", "could not parse uri from intent $intent")
+ }
+
+ finish()
+ exitProcess(0)
+ }
+}
diff --git a/src/all/asmhentai/src/eu/kanade/tachiyomi/extension/all/asmhentai/AsmHentai.kt b/src/all/asmhentai/src/eu/kanade/tachiyomi/extension/all/asmhentai/AsmHentai.kt
new file mode 100644
index 000000000..f470fca67
--- /dev/null
+++ b/src/all/asmhentai/src/eu/kanade/tachiyomi/extension/all/asmhentai/AsmHentai.kt
@@ -0,0 +1,274 @@
+package eu.kanade.tachiyomi.extension.all.asmhentai
+
+import eu.kanade.tachiyomi.network.GET
+import eu.kanade.tachiyomi.network.POST
+import eu.kanade.tachiyomi.network.asObservableSuccess
+import eu.kanade.tachiyomi.source.model.Filter
+import eu.kanade.tachiyomi.source.model.FilterList
+import eu.kanade.tachiyomi.source.model.MangasPage
+import eu.kanade.tachiyomi.source.model.Page
+import eu.kanade.tachiyomi.source.model.SChapter
+import eu.kanade.tachiyomi.source.model.SManga
+import eu.kanade.tachiyomi.source.model.UpdateStrategy
+import eu.kanade.tachiyomi.source.online.ParsedHttpSource
+import eu.kanade.tachiyomi.util.asJsoup
+import okhttp3.FormBody
+import okhttp3.HttpUrl.Companion.toHttpUrl
+import okhttp3.OkHttpClient
+import okhttp3.Request
+import okhttp3.Response
+import org.jsoup.nodes.Document
+import org.jsoup.nodes.Element
+import rx.Observable
+
+open class AsmHentai(override val lang: String, private val tlTag: String) : ParsedHttpSource() {
+
+ override val client: OkHttpClient = network.cloudflareClient
+
+ override val baseUrl = "https://asmhentai.com"
+
+ override val name = "AsmHentai"
+
+ override val supportsLatest = false
+
+ // Popular
+
+ override fun popularMangaRequest(page: Int): Request {
+ val url = baseUrl.toHttpUrl().newBuilder().apply {
+ if (tlTag.isNotEmpty()) addPathSegments("language/$tlTag/")
+ if (page > 1) addQueryParameter("page", page.toString())
+ }
+ return GET(url.build(), headers)
+ }
+
+ override fun popularMangaSelector(): String = ".preview_item"
+
+ private fun Element.mangaTitle() = select("h2").text()
+
+ private fun Element.mangaUrl() = select(".image a").attr("abs:href")
+
+ private fun Element.mangaThumbnail() = select(".image img").attr("abs:src")
+
+ override fun popularMangaFromElement(element: Element): SManga {
+ return SManga.create().apply {
+ title = element.mangaTitle()
+ setUrlWithoutDomain(element.mangaUrl())
+ thumbnail_url = element.mangaThumbnail()
+ }
+ }
+
+ override fun popularMangaNextPageSelector(): String = "li.active + li:not(.disabled)"
+
+ // Latest
+
+ override fun latestUpdatesNextPageSelector(): String? {
+ throw UnsupportedOperationException()
+ }
+
+ override fun latestUpdatesRequest(page: Int): Request {
+ throw UnsupportedOperationException()
+ }
+
+ override fun latestUpdatesFromElement(element: Element): SManga {
+ throw UnsupportedOperationException()
+ }
+
+ override fun latestUpdatesSelector(): String {
+ throw UnsupportedOperationException()
+ }
+
+ // Search
+
+ override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable {
+ return when {
+ query.startsWith(PREFIX_ID_SEARCH) -> {
+ val id = query.removePrefix(PREFIX_ID_SEARCH)
+ client.newCall(searchMangaByIdRequest(id))
+ .asObservableSuccess()
+ .map { response -> searchMangaByIdParse(response, id) }
+ }
+ query.toIntOrNull() != null -> {
+ client.newCall(searchMangaByIdRequest(query))
+ .asObservableSuccess()
+ .map { response -> searchMangaByIdParse(response, query) }
+ }
+ else -> super.fetchSearchManga(page, query, filters)
+ }
+ }
+
+ // any space except after a comma (we're going to replace spaces only between words)
+ private val spaceRegex = Regex("""(? query
+ query.isBlank() -> tags
+ else -> "$query,$tags"
+ }.replace(spaceRegex, "+")
+
+ val url = baseUrl.toHttpUrl().newBuilder().apply {
+ addPathSegments("search/")
+ addEncodedQueryParameter("q", q)
+ if (page > 1) addQueryParameter("page", page.toString())
+ }
+
+ return GET(url.build(), headers)
+ }
+
+ private class SMangaDto(
+ val title: String,
+ val url: String,
+ val thumbnail: String,
+ val lang: String,
+ )
+
+ override fun searchMangaParse(response: Response): MangasPage {
+ val doc = response.asJsoup()
+
+ val mangas = doc.select(searchMangaSelector())
+ .map {
+ SMangaDto(
+ title = it.mangaTitle(),
+ url = it.mangaUrl(),
+ thumbnail = it.mangaThumbnail(),
+ lang = it.select("a:has(.flag)").attr("href").removeSuffix("/").substringAfterLast("/"),
+ )
+ }
+ .let { unfiltered ->
+ if (tlTag.isNotEmpty()) unfiltered.filter { it.lang == tlTag } else unfiltered
+ }
+ .map {
+ SManga.create().apply {
+ title = it.title
+ setUrlWithoutDomain(it.url)
+ thumbnail_url = it.thumbnail
+ }
+ }
+
+ return MangasPage(mangas, doc.select(searchMangaNextPageSelector()).isNotEmpty())
+ }
+
+ private fun searchMangaByIdRequest(id: String) = GET("$baseUrl/g/$id/", headers)
+
+ private fun searchMangaByIdParse(response: Response, id: String): MangasPage {
+ val details = mangaDetailsParse(response)
+ details.url = "/g/$id/"
+ return MangasPage(listOf(details), false)
+ }
+
+ override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
+
+ override fun searchMangaSelector() = popularMangaSelector()
+
+ override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
+
+ // Details
+
+ private fun Element.get(tag: String): String {
+ return select(".tags:contains($tag) .tag").joinToString { it.ownText() }
+ }
+
+ override fun mangaDetailsParse(document: Document): SManga {
+ return SManga.create().apply {
+ update_strategy = UpdateStrategy.ONLY_FETCH_ONCE
+ document.select(".book_page").first()!!.let { element ->
+ thumbnail_url = element.select(".cover img").attr("abs:src")
+ title = element.select("h1").text()
+ genre = element.get("Tags")
+ artist = element.get("Artists")
+ author = artist
+ description = listOf("Parodies", "Groups", "Languages", "Category")
+ .mapNotNull { tag ->
+ element.get(tag).let { if (it.isNotEmpty()) "$tag: $it" else null }
+ }
+ .joinToString("\n", postfix = "\n") +
+ element.select(".pages h3").text() +
+ element.select("h1 + h2").text()
+ .let { altTitle -> if (altTitle.isNotEmpty()) "\nAlternate Title: $altTitle" else "" }
+ }
+ }
+ }
+
+ // Chapters
+
+ override fun fetchChapterList(manga: SManga): Observable> {
+ return Observable.just(
+ listOf(
+ SChapter.create().apply {
+ name = "Chapter"
+ url = manga.url
+ },
+ ),
+ )
+ }
+
+ override fun chapterListSelector(): String {
+ throw UnsupportedOperationException()
+ }
+
+ override fun chapterFromElement(element: Element): SChapter {
+ throw UnsupportedOperationException()
+ }
+
+ // Pages
+
+ // convert thumbnail URLs to full image URLs
+ private fun String.full(): String {
+ val fType = substringAfterLast("t")
+ return replace("t$fType", fType)
+ }
+
+ private fun Document.inputIdValueOf(string: String): String {
+ return select("input[id=$string]").attr("value")
+ }
+
+ override fun pageListParse(document: Document): List {
+ val thumbUrls = document.select(".preview_thumb img")
+ .map { it.attr("abs:data-src") }
+ .toMutableList()
+
+ // input only exists if pages > 10 and have to make a request to get the other thumbnails
+ val totalPages = document.inputIdValueOf("t_pages")
+
+ if (totalPages.isNotEmpty()) {
+ val token = document.select("[name=csrf-token]").attr("content")
+
+ val form = FormBody.Builder()
+ .add("_token", token)
+ .add("id", document.inputIdValueOf("load_id"))
+ .add("dir", document.inputIdValueOf("load_dir"))
+ .add("visible_pages", "10")
+ .add("t_pages", totalPages)
+ .add("type", "2") // 1 would be "more", 2 is "all remaining"
+ .build()
+
+ val xhrHeaders = headers.newBuilder()
+ .add("X-Requested-With", "XMLHttpRequest")
+ .build()
+
+ client.newCall(POST("$baseUrl/inc/thumbs_loader.php", xhrHeaders, form))
+ .execute()
+ .asJsoup()
+ .select("img")
+ .mapTo(thumbUrls) { it.attr("abs:data-src") }
+ }
+ return thumbUrls.mapIndexed { i, url -> Page(i, "", url.full()) }
+ }
+
+ override fun imageUrlParse(document: Document) = throw UnsupportedOperationException()
+
+ // Filters
+
+ override fun getFilterList(): FilterList = FilterList(
+ Filter.Header("Separate tags with commas (,)"),
+ TagFilter(),
+ )
+
+ class TagFilter : Filter.Text("Tags")
+
+ companion object {
+ const val PREFIX_ID_SEARCH = "id:"
+ }
+}