n>DIh5DU-Gl5Z|swpz6 zY*o_`)MTle+1rf%la$P9_AQ{+CGkOK4~)kS=1G8p*2nw^VuHGr%g!d@Grsb+sH-s@ zP|i_sckIlJtq43#Qnwg^vE4@55?P!RYtN)*(U6(N>fkMJLYjXWtlbo=tGJ_G068Z1 zABNRgW?*&K3TH)jjfo1>>;=PJ-0W6E8-Y_a2d#mWE{>7qwe(TdvfipH^uMs~rjFS`Ih;3{_W6}wrhG9)!vL#zk9yR0g$ zV{PS1xACRhSaT-)>wEC8 zx@-=_XCm|lw z3ub0GXQVv oHVWW0|#J7Y8vr0dd|!n)4s2PE-Ch N`0W zJgNKk?~x))kCFw?VZ1vEk0!!*#Xa`I?pCG~5(I;pK*Rm$Z4opSQ9;=Yk9}sDH&p0* z9juod`MD~}$`K$&uz_nON3G(iRV=mYme#Q!f^N(Ft0UyO=Q(Q&Z*2h|Yf;6}y%Cx# zYT%0+*gR#xty8OH2B1x&G+Vz30%zIGTQ;*MWsvqzvGuK-WhHM}$(ocw+^h@qM%az~ z|C9!%4v`iHaee-ur8J@eL0X&tCQ8HLMun8Lh_r;+kDv>{-O>njJ1|}VN@~yzX<5`j znCWYP5HLQhGY 9AvD@(jwb~y73?4dDZW^{? zwCv)cMz7Xv4U{4vUX5RPd(d%A-7)>9vR z5kG(A{!R8Es(*ICC1AG8d)#UV^A#2r_wV3AD<|z?Vmc8eSU LbFs2N3G _?rO7XDV)UPkbPmE4o zxw0_+!WriA_0T~t#!XJ=fuPGP<}kSS7&Jo*Cux}mj4eliRwmrx<@33^ zX$F^taI}TN?Pv_{@?f?jcnrah5uhR$(|EcA31e|b3lyJ*{Ol?fgyoXeIZmKfe#s0Lg zVs~0tu{VGW@&u4UhA9tAJ-MGF;XBtP)i!b!J9}x8fcvO;6XF8E%C+fI$(Hn|`3LH* zC?Lxtvy%kehG8!m+?2qsB5Bl>ZwrOBCQMmJ9a7oAKCfqwFz;ivse|iH9X*V@DRo)` z9(=t$-2yGvVg@Lp;(_^?F_R^1dW;pN5x9CiO@cZitV&@q#?10eaJ4hyQbr>qgN`$i zWar6Bi6k1=daOp4obH)Z);zjDgiV$)UEokJ9KU4>u$no5{}ZGM>9puX7yR(C{7f>O z`4A4D#4KW(a6-2SPTm6bVg%a}I_pGJk|0i?-XVNG29-+jYtDt(->Fq1#ahFhghwRB z{%(L^#ZalP5jHkEM2RN$b|Ff%u+xPov6j7Eh!P9f>B7u7%UB{SM2UH9c8C&nY<7qe zyVyGm*Hnf98*8*j=CTdD*+-w^R8RA&r<3ZZNfpl9nQ!61cVh0}#2YLswNo`yU12=_ E2U)EZ)Bpeg literal 0 HcmV?d00001 diff --git a/__pycache__/main.cpython-312.pyc b/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..382d3f538ce6305eaecffd1e7b2356322eb9e536 GIT binary patch literal 9997 zcmbU{ZEzFUwY&P3C4UP`vTS*cZEW!&8v}tD!k76lUxozQfJ&mu-nA_uS =3VgpIOp86_nv$1z2}^(|IE+N!ywJPrt&R!VAyTckdh`-x&IiBVHYqGBXK_# zz+E_w>I%OipzKuOSU@G@YL_Mh*SfR -T}FXM< -<##!bJ#mg}>TWEsSHaYq3z)xN4x(`?UcWVTPtQgR2wDJpYnFy{kTh zYj8CHy}|DYEOjl#F$G2ykw!9~EFcT7s6^Q)u$>rLbP6MjslqEt5q2dbHrKKf3P;IZ z)N VSvsX?G}jO_$ftQZ!$*g< X|?uvyuA(;uWb$Xvea>w zR~=+MG_RwnZZCtn>QVbpFz9C-3SQ$6c6S3XAMx87WT8`+x7(rNRqa8N;?)QIz>Qab z-AhtIUcD;-pX1dC#qg>fUOxpa3K$rMH`wd$_jnQi;)7xveV-2c{S=KRuopfKrH=Hl z6zdI82-d>}{0J7J{e2#qq4*LHjG`mRx;x15@eX%~*YD@G9i&hR89@{?AO36lmDlfF z8<~0kQdqsx+2m~M%m_> ~;JC#tLARol$bwD{2hmaA{abM>))`kVu4<%uQ%zbQC6zD51BQgqF0o zMVusb*x^8_lPEa_wDeL-=qH>O2yy~*DB8nSpbVbIK4Ef9 )g;Z@|;X7X-xp;Rb#0rdWxvzX#Nm z*TY7lpcC6e+hIVwrnASxdP&$gDu(iR(UkxcF?zSV)9+yzx0^vSAqe8+-#4|k9Q_(Y z(acc~8SwTVb!G;C6wT;pW=2OJoY7Gjb+5DU1YHfB!o||cI;H6m0A`+o?5`)Wo4Win z+Jw$BWS-DfPcE_!s0Q;Ut(8y|OxmgjR1-SOWVs!hg_HKhsA-eI))s-PtO5$dWLf!u z>J`I%;EHu-lo{3GNW!r1z~B8T$o613Y!?pmL4AJm$$FB-z}m{Z9@0zJpgFx{UJvOd z>(-oJvTi=4m#lSjddVX=fxoBh#~q507x3w`SMQ!YGyU>A>Gywl=hd m!@8I-OC>SI}f?f_e zpNCZ3>+yTTRJc@DjVurmG3}7eAoZBlVCD7^+psNVbtbINj9QGWA6}obH79J%l7fsZ z8(x+wZ%ULm394eN$|dv(S=awdXj(Q-GBC+2;4>dSW N4y zne+x+^%s@dV`pKi2 eM56JbEj=&!R?GuHlPe%ga(RdxBZXYy!ZQCBPFr(U%lRNjvXm>FyE22{ z 0iCpw &_P`L<+fq#9|FY0aFO z!3WKp0p#8);j<-Ye%C6|hVy}=VQ_^CgL!Vx(nvK)t`Q4Y%$Ue>&gk1I;j*Pf1$)tU zQ5h-D(Vey|l~nWXk!snJE0#u-(MCZhBUW~wM8jEGbV~?H(ssI-vo16qvO?kp9RC03 zP^HYJoIN0Y+lLI9dCB*+c>ri~vW$hZ!WOCE%0WJM&h`ezRe)BjB9&Y*t>B6ym5<=Q zzzNMhEq&2 R}zLD)O)i}GvhdIbTlZBFm#B~i8sp6`9ZV8ty zAH8oR-hyihMz_Qhf7Gp9%@u z_)`@|)^dh05Fdn_3>R**eyj#t3D!(Mw2y!(iDQH9$CXF0e!K=_k%29wT8v&CA#%R_ z%?u)^AnQ0{?n!n8W*i~DO`I@_Wk24JiM$<4+C%7CB+}PUg3&g8=JL#?LE_Hvwe%;i z-+l4@JMVu$gx~@O{JBr2uDwO@YHx2x@OW57?0<>~Yj!-fe;=`!#}|inb>xb=jumxB zLTId0<8M!oUZ0L#N?$+QLZr|BB>mQ@JJIh>U3)40);kTMA|P>0zXq1#7+8()9k3ch z$O=fGJqOjPU;N_E@F(f$E8wZN5WHglo)B^@MY`$en|D6^QTnY9W -rtU~xppNA6 z6*Rh&ctw9lr~oQc<1f#A^2y!dQ!u9%0%W#gBM~YGga}H1^wacvL+LkTU?GcRY#~B$ zMq)Fsew03YetIC9ercp7gl=g *?);c#SxEMG#^(0(+e>b%+ho$RQU;h#Xfp>7{uMbsR!9 zKpO0$KuY~I@|M*UO$TX5wcxWLCtGyB;kyN59lUR*KS-0j0j-rATw{ 5QVgS;?jvSCEdc(>4g!yL8o|qhlim= zs1k+PjJ;HUc8!Ja3WCPFc${L8K?_lXf1X4aP$x_ZR68d&Ac0l`8|E|c$WUmY;H=?{ zAzrp}to9@42hRA)EjKK2)9wk~o?DBo7oI)$>_FZvYh}vnNLU>M1-Ht|F9gp82Mjk0 z%Tk3zqL3K1B@0&!sAg5q;rfP2W6{~&XLd)!qZ=oT&9|Vn=ggiV?SzrIRZbxH@wci} z+u`4}9ZoJel4v_T-W4kw)5MOCJ@>o%$K!2>6HAUH%UuI|rc4zV_MY4O{q~e;S;Dj| zwmWHBJFtDqSc2Ha%h!!B8rQ}*?T=dyOc K z$n(R`$5xNol2uP6j1>brqHU9fi-t@uefwrvRh(FzEL#&VS_3Yyg&4)pJ)bf+B+Ly- z^U~O=*y^~sX`pS=Qa-TjrmbeQEoEB~)!wS9zua=ECDuI_PS$Kq6cJI)kZ!WnI&|oJ z8z)T_Q$$^gSeGEyjazP1e{8$) @1zmeHQ1tr56YR*$%bT`_gC(iz?HS#|x8`WB4PEq&S+c5W zNX6T#CM)V =@oPtH%~M%;sUW4XK)SiJEoEnwIF^KbK$? zwYTb;#>^ktKd>iPZizQ-y-^#l**T>90!ST~H(c6~s(B(&^Tc>hvS#OR@k9+0N6o(I z-kav?(d8eiC(Msc)~`y{w v36XSB(_9%-K?v> z{Pd-#Q*~<+b!*1_$-35a?a^IB%&jGjqu&_A#~fp}@q^>r<275Od;egrnyhaGPF2+- z{lonu+%Wg IlOapTdH<-qIUK8ws`I8WbKxTimhKNF?;ir#Xe#fHjMU;9Uj{~ zPTtsX!x^uA^7odfGKlz+%{MA;6vS)y|K4)oUJ%DBSI(}*Dx9-^1!k%leLPXRJZ@b6 zw|o1PSiKAXl2ZWBc;(7}d|| ;2;=dLzK2WUvZ`BqAiyPG_FIFEYhm$~n zRO+A9DdS5lPb!rOr5ftICQSBF{ysRs(IY`;uB8Vj38n HMGBO2iZ^86_&wEm`~r?cxK{|jDceI8Krz=^69*_;XgJ|e3Z?*!ygc66 zhaMo@G{u0O0~q9B)29(ei{`~1XBjjPI9tU7R1@e#@Nl6VKNA5z10rS_WJ2t0Dsz6C znkRItCQGaX+R1{_Q~{AFAVznNKAtRaPUxI}6T-bOI-77_5eUE?e;jgkxT_-&=**3D z$#VQUu$RNA$cmenu4LK~6-W;CnwL1$LnVi|I~4T406qN@WDr)A RvFkiv;(+l9cn!1v*v$Vy|+=o85TkWzC-8ubo* zjuN4u9h%Dhy`V6U3KDWSiN7lc-9Uj93n`E!CU9=Fz*$HO1p%|cxkrZs;k&9FrwN%o zB41?a&Pxjg0$JIy%)X)c7U(OvSP>PwNMh?l2I;&60YO;o+&~)p&&Px;^LdF=a`K!a z>PLJ}g94Cqz9)whIW>e4Gus`UR1K`kLLoifyYizJgjZ1DNXuy =( zCczc7s4zV^ap<4)B@{Y5_<+-hU>VmguU+tHz}%ud0l_mtPlbYU>JA I2c#R%9vIG@+q6Y4$YW+2k;C_*m4b0G?BUK#}m z_#)cl1?vvn5U}--aVl8JbO+#Q (n@)!lCGDCk;Xd+_}S%@@>-e%7(dK+q@!<9Fp zhf&EjpeX=3bmA5ktWFpJ(--UotJo;p{Kym+->3xEC>+VFkU h&wYG1HKN@mOlRu;JW>QB~~FL}~MYZc O_|Cr>^!$KWvWe>YTr5>BY*sCs%~APZe7y!_<&xv zN*iL Yy$NlTY zmTgw$uh*AC{u`@$TaA|P2QaUpDK fi9e5D6H|Qb1ZuiqBD%cA;hA%s0bTi zPbfL%LeC&R`6L7OnM5i{W$vlODdD+S9eNqid6{)3X0BcXUwXHP3HFL=o+qQW(A`Xn z+(I2Bcc+Drx5S;xW7!^03Dcg}Y4^eX?IJnEG7f
ZQ}`;g9kP?y7ba|xJ!M*&FfENQ+mtkI9?(ykDo59iE{$!E6U_-zGXQkODV+r# zQByj5LT4Xk$H=(OKA~GbS!e;Jp;2sp&Z8GP2fqV<_tC48c$v#@hsbyQ=WmC1UpqN{ z^@ZGrL-Db2=0{i3uZ%-9r7``&oA5|Dec|Wm*-&^eMDK*}V00re&wUKk!-)Ye%kXQ7 zaEZL7W!My=Mt3jV-7jF7yIG;a9i`~09Gw{ORG#N{2ZCe>p1Iw;(d~XN hDA#Q9Wpf9DfDHO{RCn2GcV+wl;7`m zJ8*g#K!wR{7OXNFS$#r=qHD~Xkp1-(Hmk~0+eWps7!+fbe?i4Pi$=ZbUeWWox?%R) zN=#!q`SsJ!zVK|cEvc@YRVdYs@x{&eFevW>(k?(?|I1|Cl4>ggu8I>)vp}|LTqzVc zR-sO-P^WSMf3K(rD3|1`t)rc@7!)z`J}Um#j;l#r& z&LB-WGqDF~1mO5ayMk9C1cWQZUmn0klY?r7x)_~OAwB1dC1##JuT!wkX(WG9>}YZM zqFf5NjA(J?(9ut$Usj0m8$%A2c>SQIMhJv2z)u`{?La;HW7{Dp1cOaCEng{8r{D1W|ZwknQ&W*R;g1Aof!oa)hUH( z{Ko@+AqqyH2YTKJkxCG?Q;4sLx2d2x?;vJqt7d{E8$`9 b`f65I4Sw&HVaUkcmzr9z1-{-VQh%V$`@ZOnKZ)2Fe@ z+gQnMtn`oAqT5*EAF=8`;QDx;eN-RY2rew%`h{YL60Fw&_C6+5K$jHT@IQ-CVQl{g DADPUc literal 0 HcmV?d00001 diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4a8b2383214db7b8410f4e453548ed68adb29554 GIT binary patch literal 13321 zcmcgzdsJJ;nV&1^3ZVyxw*VW&(-F4C!#oVO;{YahWJ6+PVp^Q&C?K$6kjRzf*z}wp z?6fh?%Q$iTij&}MQj?|)WV4N*dAR9GAN$8j6{+a0&xv=70PjB~A$!_x_K*F(xw;pD zWs>a4_MW4;Gv9pk%{Py4?tH%)&Fge(0?&W$s&^{Z5b|eCh>tQ7ng0)nyhyCX%4{bV zhGUEvmu;6> TFRr?uCpX?36?}I z(W2+{mLx8T(%J3FmJ}|veFvzTV^InjIdGy~okC-{JD|+DNK#uifb~DfqZXx6A7| z;N=xoubtynoTJC-!J_e)-sN`pdQ382+3W7<0iq7&HMqS{sN30NQu2xxcb9`_ALs>X zJo})t%i-qP`}&|dp2aK=uejIQ>i`i69#F&ScG(`cJ5hd;RY+s~oV&Nz!C?b-K;?X* z9cp>R?X^A9W$WB)_wwu`T>}Rm@oAxz)9(#U9~ztf#nZE6FAlKf<}!0xXQVIaE7E6V zzMUcDVHo{Agk!9PlUW%~Zk6p(Smk@zN<|x~WUPuT@~G-j1*f#KS%iz*qiRi#7A3@? z@0C>`3m q@I zuS{g2DM^}@fjn`HNxQKZ$_fwV6D^ G14z@(F!{$=JXIdK_Lp9?Z#M>j&fFaP)X3&Prz&n2*Ba= -z@5mQ`b`g!QTeS4VCU_TtH yR){x>^%{-JMosl_?ae}@71pMY3ASfV4u%kB83h|{+t29mv zIWR(!tRALD-p!a~J}2adkB!|LJUadKo8h-#nR#wJeC_b`&)=9i`=jY&&re-_FFf>e z_`=iSXHHI^ygdExi+{QHO!)m5fOF~tB+ib#A+XK7b9L(S)8XOgrmmfxJ@V7=Q=_xv zPt2ScMFv{%&x40sOfotgoDph$li>>C %K9<=FO zWRT1$NqW|)j^iDnwBkToF?5*v?{shvugqn5Wgm=WZ$HmEaCz;F?hZQbfiT| 2uG9pE@5tGdlCsd((r5j8ai40x~>ayRk#!44)ehzdTqs^VV4S*gu7jU3@4~#q={r zK(df4F$-cPVNwL7_V?Nkex2Bvb5AdbdJZNQOruk?=SL+uQUnCrySkQ@7uAH}XJ;;q zKNQXV`jP2(M;|g8r!QU&KQ$s%8iQr((iQvksrP1|yBI!pQeq6h^Wx0wSEfEZ51%hd zDJcTl`TD;L?Oytq>67D9rOQ;;<>-yp{kAa+4~^V9^SUHS(o~8F9qR5kcI@0qM_KF| zYRxlmpPw0iGJO2B#4kmlAXFY*FjCjo6*S2?4NPuc;dFJoc`eKjr_07UJicBpWTBCB zX3UR6i}W7wde8!4o>Qae)?!woWbJ}g HFe`z_h$l&8ZjvNjCq)Ie+Fkopdgxts@eSw*}c0#r? z_7OtL2sQWU1th}VCbP;`L40{xz$K4x#aJ@L8i7j@;X-YfJW*V1ge!gt3nZhslo2i* zmL*RVS6qZkw}b_fQCzABSK_i<@e!`1Wx3Q5u9RiDG!d?}Wx2Ewu8d{5bjX!MpnrAP z{V8PIW ^NTP+Z2X2{;qFVDy`F=t!>=%PqXEi68@Vmp%z(olKM?eh!-J z3DFQE&Y4(}^!N$6z0@7JlSJw8WyjqfeL4!nm^g;5MIvS4ZA})-x?s=UieKL)PpfGO z0g|9cEIUwCMX2||9&s-i_kQL@c?+wBcJ_RYby!odf9-D((orJT*9v~)(kCC~EHk&P zskKa$1Y9|mJn#`u6WbicS+;}?lCA4*r&-g#VOg=$qeMXeR!1cxQELV+d@-cP*4-d- zma;Au`l9xBiEXUNBhI$3?fp#J`}TiG?`MhHMfHB&?X7@u%C@esuB?@n%D=;w=Fpbz z|A(|RS8Qpi%*A$W6x-N}UcizET5GiC)iN&SHyzVE@F`2BE$TNO{e0RdR|zR4t~mIq zzOk-xt+0wNeL6}-inT!O0r3qhUhFcG{oSE=B)j`MNo^7ufOWw-4|e2=?|}7Ic%a{w z`GQ#s+u}
qKP?c%O<+{1@a1>I$HslQV*rQ;Jh<5_Z{4@Whik5Y?SzjVzcqMhcJRkQ#V_*` zYIykB@Xt^A5+FzNS)f*6#;uCLeCve|2K0^YzJ9k0oU&a9`yJ+bFRgOw{gL`zQ&*n+ z%eAvUbnvE6fWt5jgsDq|(=VSFih~E~!$tE>nc?v#XJ30u*x%27cq07LE8)RwzC0{( z?q?AV2G7oZctnU#)2 fL^l49`m91KK=3=;Lgl`cxLL-PazXj z9H`yv_4a$}N=x^;`y6J9f| -#HcxqFf7dqamdf`22X^nT-``;S-uC sT_ zD}~0D4b)aXYTMsl_WknCW_!)Pe%E%(13p*#fqGZ@uKRcFtZsPxK!v-hrSbmtV&lqd zYuB3?t_GSXXe-Q};i2&5_h#S!8O$nS9^Xb5<{mZnsVi5e&s_mnSnhMWxb+|^g4emc zF#T8;; 9M&vC!l?NN;H$(=k0a69K1f7=mm4* z6P+GgKj++U_c{a!R|N!nS06}7LT2#YyxnfD&xYf|YmkIUn$6k8>x6`>%fVriYUOdz zBxTlOeh=sN^ Wb zxD8N)2hEluI*~xYxe@?wxA*o+ZOo9o-^Cd?B|H ;xn6>ba^ZX9YFHV3qMG+i4gtPK`!h$d|c6mAL@ZjL6^1q$ne%NAU<=E4up z|1h|!W~j-ZToBL}Qt2B4g&Tr}n?z9scZCWn0|k}Af@&bG4QP!wP3DkkW5BdAXu2Cq z76r7$H`i8#);0vzHU!shL7FL`ExB2|I#j$qP`o}^T!*y$fVSXfUU4XIT_A5=Fs};4 ztqy2&<`gQOelC?{=A7O)VJI0^+(=0u_MSR;{NM|B`-^HmO{tm8$_-_$31qDq{lTTm z4{I*hTr&CBZV6^JeVW?zIZHBEd?A(UJgNG|lR+WZlF>2ZJ2)?o6spmy6$v8=yz zPcZA@p)JpBpIUL(OD&-l6@e8M{&f!qSL_~Yo=i?ZwdVMmQ1a?P^6Js1(3&lQHCsOF z3nuRhX?F#*yC!wXAzgkzmmky>jwS?k)l>S^Q*qD7ovsRHn*-VAV0KwRUw#9K>gUz| z?9!mVj3$n&L;C!HKHp#Pa8PfPNTz_^G+H=je$(u)eK1h+U{JqXDq9iMuba~-(_rxD z5~OC0v;~t_PiR;F9~41V LeO^GHH&XZq{i@G( zB&+z#1ZdreI*__Lx=B(C<_bu{rZ1|9u8sM-2La*3TMRqnnP25Jq{8cy3TCHL@yR+1 zCg?{IvGlQ*r=PnJ9(pe}q?G`!w}4>-$Pp9NTEMQUW5B?+6;>4Cu>v?{Rn*F?Y==Uk zDLZgcrVku8#YG=Oxnu~XpffIR$8UG}m)~e3B%mTKX?dgrz&PQFBX)pKT=F~UuM+DL z_0I*E!6mPkw^R%7Zl;4CI-@j@1waCT8nOE#zC!}L+7zPPXh(ce9g2EI%U-Ah-rY<$ z*(A>;-Ao?#^D?f4kt}d7(hFb>m!bndVD!1ep{DxlG&B<0e$c50`(cr8)RoY*_*O#= zx6U4$`rt#@h`?5I=J4gItAkUQhw$_Uw#BbMduwnoeB_Ezc-=xD^ O<`o9nXeh0mIsJBWJ)r^~~u@dGEE3R6gT(VWEbd;xy*C4jU=4yTw{hf@Hk!m%%P zJ^{vn-jwDel#V<=jRBWhB|uFayBPD2w8n{27TzK*6M>|bflmP(lx9;ae!rJI;Ihlx z Co#unaSnTlA4 z-eR3g-!Xdc+l+<;IEiv&$Rn+I3cKX7Dy?x=RjmxxqHo$;@wB&o3INX6j1Kew9tJOY zL=B-v394;1E@6V?oq8~~RI3_bDu%*TvFC7%5nO=jM4e*v+P4`6jVMQa$B_43je?er z0_;n_mDTD*&BXWrqlN-t52LY_Y5v!5sb`|7pZNavdTy09!`BnRp$NQV0g#7jd7Fku z;mZeG(U#xA?+5TR(e+v{KtIA#Owp3?#ea^ZDE{!=8v^1Hfi2$t#X!np5QSdsq5dY| zC<34%KqnG}z edlwwP+u+UX;BXF{wa8*Wki1wL`coVt)_0H?K^m6mK<^mcp+v-e zUs8fzPKs4x`t4sp9e~-Gl6Z~iiBS&{Jwxh2!UYe&Tez*DB|UrO$}qMKgZnUe00Ufn zxfTr2P3IN+9FBhKW^+4`h<$5Pa(0XZSV(x*+2wTi@mh2N@kf0+rI6y lb;Fqr!HiY@ z)%OH5?wQOfc=gdUkB+8=OdA5G4cD4JY`)U`o8o^f`E5yXV_VSlU@&KQ$gtaQ*u8|) zzwyDKX?HNEJ!EM28`>ug`L8CPNgS7bRCqcuVA#62rp>{O%{L4=uWHU}M((|^{rvU` zL)neIq6?X?WsdG28+dczBjv9(*ENB>9e!i;X?96fmzsj6hG0%($k6CFG%m^fR(ix} z@wY4ghueB=x$+Z+tzYDk+|^%bNZP&37YQV@o#74bpQ}mc7Uqu-QIgE>F+%uv&yQd> z9Im#cFqasMOmVp(2cjQmFcwz%v0)X)H!~KM@>irG3lg7XF&2&TlWffRwT!Xol)skO z>ml)*6vmRM{7vd=i2qhmfZ-~}lBE3YUD*)-9m`;-qM?R{IvOU@FbPA79mCo(``(Y? z1_i}w5BUl}Iaq9FPP}^S#F^Q#G1yzqj$NERbYkY+tI{=tI^)2KSXN+kaGaZ~Gn&)_ zB7`4G4)-=3Zu@xcE@30ugj{@l(}7M$KbjadabAtaZ=*MRgqsH}m1bfW@EmR*ieYR# z 7z{T>sQ-7>Lrm%r`7 z;LhCvu*UTEkiOloZ~tmej(lIiwW+8&zM4ujfB XVzRRxMaUt9LT&U zq^%EV>#-o@|BvSgH2*NOg=KzJ(WoUCHT7BKx{RqeD6Y#D7?0Bf`FaL&TsJUC$x=5| z%C8ru)^CzuU(Ytwkn5XtK>4NG*ib6}WeHM#S;``%QjYPOdU$MJHI^RZUFMJE3^ zJ->02{Nwd3$ozN{3zT2U LQn5gbxv#27GJ_;YB|!9y}nATzKJ=?cH$ERs{b5Uj-B~ zTbg~hXMO}_Jw^x?-G!+d@4C3}oqgjE`BNJwR9hxh+Q{vfqE!s9LiC@avP#b3^>MC6 z9ftM*8zeICg&_LYXROnGaCanU-z96$OMsi&>tt);oCq9td8|&1<$eLoK!FBymEfK# z>%$v&>e;cYa23m9_qbicrb4Z*=XyMK^h%Q0ggT>;2M0`W_e-sAr45QOS*-WB2-$Em z4sTh9$1cylb6(A%b2Px39|h5{?cwA4?Hu&8hgUfcfJ =j4jPaBSFPrl5D3;zk_24AJwMAH3C`K-2^6Ap3A~r73KY=oyMhFJU zm#HKzCzM+9`_vNu>W#tFO+)dMsVhfHMw|S`ia=@wBvnZvl>sh|hEzELRnCZayvvWV z4U>rmzskVf1#&tW2*d}c8Z`&>T?KQHZhPV;X8GHmw@wUBj~$A>>M30BgoCy4vzOrX zrZjx$99-+f&j5f^^ol3m?0l1OB_KTdHfKD{ayVFkqXs@%>IjMUDRSdXyhRR?$kdf7 z7+AxNKokxK(2t{-K8J^RCIj9G##s$Fg4H%#pS#Nkn=2cywb>r?*?S{7i8foelk?CM z5SQC#;}8wturuftT@JAk4u=g7Tl)H7hekg+!acNP`caW=lb)IA=?(p6;p#CSTJrMx z9XmLj!JG$!{TR@_Ct4ME7=tGv;M3r`F+J?F*}Y!Q`H0W!fE&oXE^-;U(*b7yHaJBp z0%qEC_t0s?;pHS6;11R^1;O8*By$QSn>`XYN8mNS@~`;%LN8}m0SK(r9(nli!^7Kx z?8-S=DqHH$ub3zBhR=;Mhf?O&08@y~`8}I+dVeUlI*?l(%B>6J)&V7(?OU8xWni5(Ht;> zoG^zF;NlQD5>^gP6qn$H;3VU7qR67Ea9SkkM30~7Sr$Scf|G)$QPdyd^Tg7$r9Q8- z*JED%4-HP*D)CB~pH5c~mxjgZr1>$%a7hr>Bh^O1Nbcrd0UE9n9&`lZi_S1%V)%@h zgT(wNlK3a0`HVCMNaJT@bC7KQjI8~PG>1s@UuAMe_FpQ(82+7!_p7r{?;dfD_XL@{ Zzmzq}nJ#9?J5Oi?23fZGbAd?f|6h7MNgV(H literal 0 HcmV?d00001 diff --git a/_conf_schema.json b/_conf_schema.json new file mode 100644 index 0000000..b406af6 --- /dev/null +++ b/_conf_schema.json @@ -0,0 +1,29 @@ +{ + "email_usr": { + "description": "邮箱", + "type": "string", + "hint": "邮箱", + "obvious_hint": true, + "default": "123456@qq.com" + }, + "emcil_paswd": { + "description": "邮箱授权码", + "type": "string", + "hint": "邮箱授权码", + "obvious_hint": true, + "default": "123456" + }, + "emcil_imap": { + "description": "IMAP服务器地址", + "type": "string", + "hint": "IMAP服务器地址", + "obvious_hint": true, + "default": "imap.qq.com" + }, + "emcil_white": { + "description": "发件人白名单", + "type": "list", + "hint": "只接受指定发件人的邮件", + "obvious_hint": true + } +} \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..43e4347 --- /dev/null +++ b/main.py @@ -0,0 +1,230 @@ + +from pathlib import Path +import astrbot.core.message.components as Comp +import datetime +import json +from astrbot.api.event import filter, AstrMessageEvent,MessageChain +from astrbot.api.star import Context, Star, register, StarTools +from astrbot.api import logger, AstrBotConfig +from astrbot.api.message_components import Node, Plain,Video,Image,Nodes,File +from astrbot.core.utils.session_waiter import ( + session_waiter, + SessionController, +) +from typing import List +import imaplib +# 导入email库用于解析邮件内容 +import email +# 导入os库用于文件和目录操作 +import os +# 从datetime导入datetime用于日期时间处理 +from datetime import datetime +# 导入email.utils用于邮件日期解析 +import email.utils +# 导入email.header用于解码邮件头 +import email.header +from lxml import html + +import requests +from urllib.parse import urlparse +@register("astrbot_bdzxb_bill", "bd_bill", "账单统计", "1.0.0") +class MyPlugin(Star): + def __init__(self, context: Context, config: AstrBotConfig): + super().__init__(context) + self.ceshi = None + self.email_usr = None + self.emcil_paswd = None + self.emcil_imap = None + self.message_target = None + self.emcil_white = None + self.file_path = "data/plugins/astrbot_bdzxb_bill" + self.config = config + self.chatid = None + + async def initialize(self): + """可选择实现异步的插件初始化方法,当实例化该插件类之后会自动调用该方法。""" + # 读取配置信息 + self.email_usr = self.config.email_usr + self.emcil_paswd = self.config.emcil_paswd + self.emcil_imap = self.config.emcil_imap + self.emcil_white = self.config.emcil_white + # 登录邮箱 + def emaillog(self): + logger.info(f" 开始执行 登录邮箱 {self.email_usr} 命令 ") + # 邮箱登录用户名 + email_user = self.email_usr + # 邮箱授权码(非登录密码),用于IMAP协议认证 + email_password = self.emcil_paswd + # IMAP服务器地址,Foxmail使用QQ邮箱的IMAP服务器 + imap_server = self.emcil_imap + mail = imaplib.IMAP4_SSL(imap_server) + # 使用用户名和授权码登录邮箱 + try: + mail.login(email_user, email_password) + # 查询收件箱 + mail.select("inbox") + # 设定查询条件 + from_clause = " OR ".join([f'FROM "{sender}"' for sender in self.emcil_white]) + # 获取今天的日期,格式化为IMAP要求的格式(如"21-Jul-2025") + today = datetime.now().strftime("%d-%b-%Y") + # search_criteria = f'({from_clause} SINCE "{today}" HAS attachment)' + logger.info(f"严格模式: 只处理今天({today})收到的邮件") + logger.info(f"发件人白名单: {self.emcil_white}") + # logger.info(f"搜索条件: {search_criteria}") + + # 执行IMAP搜索命令 + status, messages = mail.search(None, from_clause) + if status != "OK": # 检查搜索是否成功 + raise Exception("邮件搜索失败") + + # 获取邮件ID列表并只取最后20个(最新的20封) + mail_ids = messages[0].split()[-20:] + filenames = "" + for mail_id in reversed(mail_ids): + # 获取邮件完整内容(RFC822格式) + status, msg_data = mail.fetch(mail_id, "(RFC822)") + if status != "OK": # 如果获取失败则跳过 + continue + # 解析邮件内容为Message对象 + email_message = email.message_from_bytes(msg_data[0][1]) + # 验证发件人是否在白名单中 + # ======================== + from_header = email.utils.parseaddr(email_message['From'])[1] # 解析发件人邮箱 + if from_header not in self.emcil_white: # 严格检查白名单 + logger.debug(f"跳过非白名单发件人: {from_header}") + continue + # # 邮件日期验证 + # # =========== + # try: + # # 解析邮件日期头 + # mail_date = email.utils.parsedate_to_datetime(email_message['Date']) if email_message['Date'] else None + # if mail_date and mail_date.date() != datetime.now().date(): # 如果不是今天则跳过 + # logger.debug(f"跳过非今天({mail_date.date()})收到的邮件") + # continue + # elif not mail_date: # 如果邮件没有日期信息则默认处理 + # logger.debug("邮件无日期信息,默认处理") + # except Exception as e: # 日期解析错误处理 + # logger.warning(f"日期解析错误: {str(e)},默认处理") + # 遍历邮件各部分 + # ============= + for part in email_message.walk(): # 递归遍历邮件所有部分 + if part.get_content_maintype() == "multipart": # 跳过multipart容器部分 + continue + + # 检查是否为.zip附件 + # ================== + filename = part.get_filename() # 获取附件文件名 + # 获取正文 + maildata = part.get_payload(decode=True) + # 微信导出文件需要点击链接下载 检测正文中是否包含链接 + etree = html.etree + tree = etree.HTML(maildata) + a_tags = tree.xpath('//a') + for a_tag in a_tags: + # 获取到url后下载url + urlt = a_tag.get("href") + if urlt: + filenames += self.download_file(urlt=urlt) + content_type = part.get_content_type() # 获取内容类型 + # 判断条件: + # 1. 文件名以.zip结尾,或 + # 2. 内容类型是Excel文件 + # if (filename and filename.lower().endswith(".zip")) or \ + # (content_type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"): + + # 处理无文件名的情况 + # ================ + if not filename: # 如果附件没有文件名 + # 使用邮件ID生成唯一文件名 + filename = f"attachment_{mail_id.decode()}.zip" + + # 文件名处理 + # ========= + # 解码邮件头中的文件名 + decoded_name = email.header.decode_header(filename)[0][0] + if isinstance(decoded_name, bytes): + decoded_name = decoded_name.decode('utf-8') + + today_str = datetime.now().strftime("%Y%m%d") # 获取当前日期字符串 + base_name, ext = os.path.splitext(decoded_name) # 拆分文件名和扩展名 + # 生成新文件名格式:YYYYMMDD-原文件名.zip + new_filename = f"{today_str}-{base_name}{ext}" + if filename: + new_filename = filename + # 拼接完整的文件保存路径 + filepath = os.path.join(StarTools.get_data_dir("astrbot_bdzxb_bill"), new_filename) + + # 附件保存处理 + # =========== + if not os.path.exists(filepath): # 检查文件是否已存在 + # 以二进制模式保存附件 + with open(filepath, "wb") as f: + f.write(part.get_payload(decode=True)) # 解码并写入附件内容 + logger.info(f"下载附件: {filename} -> {new_filename}") + else: # 文件已存在则跳过 + logger.info(f"附件已存在,跳过: {new_filename}") + + + + return "获取成功:"+filenames + # 查看白名单邮件 + # if from_header not in self.emcil_white: # 严格检查白名单 + # logger.debug(f"跳过非白名单发件人: {from_header}") + except Exception as e: + logger.error(f" 邮箱登陆失败 抛出异常:{e}") + return "邮件搜索失败" + + + #帮助 + @filter.command("zdhelp") + async def mchelp(self, event: AstrMessageEvent): + logger.info(" 开始执行 zdhelp 命令 ") + helptxt = """ """ + yield event.plain_result(f"{helptxt}") + #获取解压密码冰进行下载解压 + @filter.command("mm") + async def wxmm(self, event: AstrMessageEvent, wxmm: str,zfbmm: str): + # 登录邮箱 + emaillogtxt = self.emaillog() + yield event.plain_result(f"{emaillogtxt}") + + + + + def download_file(self,urlt): + response = requests.get(urlt, stream=True) + response.raise_for_status() + + download_dir = StarTools.get_data_dir("astrbot_bdzxb_bill") + os.makedirs(download_dir, exist_ok=True) + file_name = os.path.basename(urlparse(urlt).path) + if "." not in file_name: + file_name += ".zip" + logger.info(f"下载文件名是{file_name}") + file_path = os.path.join(download_dir, file_name) + logger.info(f"下载文件路径是{file_path}") + with open(file_path, 'wb') as file: + for chunk in response.iter_content(chunk_size=8192): + if chunk: + file.write(chunk) + + return file_name + +#保存文件 + def get_json_path(self, filename: str) -> Path: + """ + 读取Jason文件 + + Args: + filename: 文件名称 + + Returns: + JSON文件的Path对象 + """ + data_path = StarTools.get_data_dir("astrbot_bdzxb_bill") + json_path = data_path / f'{filename}.json' + json_path.parent.mkdir(parents=True, exist_ok=True) + return json_path + + async def terminate(self): + """可选择实现异步的插件销毁方法,当插件被卸载/停用时会调用。""" diff --git a/metadata.yaml b/metadata.yaml new file mode 100644 index 0000000..9b973d8 --- /dev/null +++ b/metadata.yaml @@ -0,0 +1,6 @@ +name: astrbot_bdzxb_bill # 这是你的插件的唯一识别名。 +desc: 账单统计 # 插件简短描述 +version: 1.0.0 # 插件版本号。格式:v1.1.1 或者 v1.1 +author: bdzxb # 作者 +repo: https://gitea.bdzxb.top/bdzxb/astrbot_bdzxb_bill # 插件的仓库地址 + diff --git a/static/files/ceshi.txt b/static/files/ceshi.txt new file mode 100644 index 0000000..1a237b6 --- /dev/null +++ b/static/files/ceshi.txt @@ -0,0 +1 @@ +这是一个测试文件 \ No newline at end of file diff --git a/static/img/server-icon.png b/static/img/server-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..df32239170609cfdace080053bc40bd3096ac60b GIT binary patch literal 32319 zcmb@t2UL?!w=evls1%hVT?7=64$?acQcREl3B5}1HT3FVDbgi$2ti5+p-Pt`2uQC| zrArGP=^ecBeb>3?to7ZyzI*RFJ8P27%shK$p4l_A_iqn>e*XCdkb{*$$^ZcY01)6m zz@Nn%oS>I4O*NqE%AnUu|0=ja2jJ-jIRH30d$>bY6j=214Osr>{Rf#@z+L}?|6ly# z n$9L8e&r{j_oA>$4oBx}S{>!^-L0{tQ ze8TgbHvfe;|1Z3^hpPv^PS@Z17Ow7p`58Pf #?!h7mtb7yQQta0ILX761e|0~P>3 zo)ZF|0fK B#TjyLbN)H4OzFD>FOW6Xqw6pYn(c zJmnJMdi>;>yr77rw49tAJHI06rOYdFSvl#yLI_AmN$=mg&qz+rD9!nVQ~Lj!{(J){ zh;ID8@%tvh6W|5~!A%N+Ki`3e`02YzfT#a>0r>g6L3r!t?K}9w7v#VVf}1x832)xU zXA$1SS0cD^laPY)@hw4l%?D3}%-sHor&54sm+!KgxBQ@H6Lw#C`EE}{R10yN9j1tv zK=)Vle--|33HTBgihmX0+s3#5@5TuzZcskP3%>c_iQAtk;4VJ@2E|PZ;5l%W`k&qV z|8Rsi@clf#@d97ahfl}&^xsJYH(6e>vWXGCOYa(26I>(Xv(Ou1s$)BNU13E-2(bNk zHU;2^azp4Pf)#qB-EvpEpDOWNBj#rw?g9nRvgq)H9tk pAyy+2mk}ic#`^P`afSJR0HL@K@_saB^L6ot8ntNpv4h5=nGZ${ z*g_AMY-Y@wXc;YJZqbu{eR|me=G$>Mk&9ci6Q; BuZZ@bOxDoi*phk@w{Otd71^Ed z0vmph<80f14OB~bS6`H+>FWM+%QpPrhqT(YDJ=2t?_3ruJD(+1v$<9mhe^)g_L;!4 zr?rv&vZ-ru-EYAehZV0forou{wd3>y6Jz}@)J{Y>m1LaL)?MtRM)r7QYy$iDB14|l z1^qKJB1 oUk+c2>3qL(}uhpot=#Ii4W}oD8Ufm;KtV#F-6wzIp+`T_M5XkxmaEvDlHB|TM zQC(o`-j-o4Cr$TcU&ay(tRQR(5pvD}LW|J{$~g`wNz0_~KB1K(I`pOk8H4?_dW~|a zj2R|8%1y)0l-Euvy&TF9prB%r^PHV>-|`KjuEFocc@zkD;BNFMz|s-`hzTkGpQrcT ztDF5*HA?I `jI$yt?3UAshz>W+N$4b=JfqgGxhY?pJT}C8MQi_WOY%UDjTkj z1ouJNESz6p#exgBkf8A@rI^ATQuf(_w?8V%S Yer@qai#4UbEEKxlW$&*zkyI(mW7|`NWrcyr%ZISb676>%RQ{Bc$2YY< zvxhAFn#&kS=6NxLv`qCCl%f@0l?nI((gT|mW~DX8hbN%E7;K8EE@)i7o Jq4Sj- z3 j#|j)G zB0ZO=(?Fd#>nut%nX3DnJ 1kQoa}aEHA+ZU-lfg4k(=J22%PAr(+?) zYI(yxTmH8>L4+ayuhT5A-wR%SXDBpLMq*c2g_5-K-X(pS4{sgFYqAEXkis+% n!3bS)g?d0FeO#yP(Qz^3;kZ5uL za#+qrN&o-$vbCarm9L7w1#PduO)?pr;XYdp$Pb%MiA7oono+H$X{u8r&GlN?4bAu8 zYbURF9W}riA!5S8u`>tJw4yc!_A%5Swor1IuhmtYY{Px^HGZ&9*-evy>aXcLPVUK` zCD7H$hKUyQ2lkI2YOz!f*6D5LtAO*7ODW$DmTPgI2I|gXq#u+iojiG%)X4!mwg*Vy z1AyNo0N}Pegs6p+=;qDGFMt>Lzu!`%%p^zlJpbATLdx#;$hyw{K9rf+_%Vk;$xUBl zN~Cs+8kw$ApZutcX5OO-y_~)dixjmGP3_^`LxfDAxGteG_Csp8L?rum#pSyR1KBvG zu0@4&ba9e&^nznv?G>bidm{&OPo!tnLV@t9Uh&^f{9n*p!gmBBuUM#Fu@LC&!cWmX z*^X2Gy_U`y`&F(I#j_4wLxu&7&GUUyZenF-ppFErfYw|Y9O50cTu{K4!uFwKt jju|Ds^3>@${%Dvg-qWaTOQScc-qw`9j_!zeGPPYtuAfL0TU?K zQ7jZ5Nsg0LR<-shM}_gEDX9WJ2}AD^P?@<6Ps$QW Auxj>i%*%)sXjb*I!@a#zR2$hLG6S4M(mIU(?lP`@F>}-tTd4^OqZ1{(NPk=Tvs| z{C WqU1?x6H`@83 zzP+;tdP1Vr^h}E3Af~cbfd>}TP7kv)E9MP}uNcOOu5-2OM{S%l#2++r7nhVa_4AEZ zMqe;1rdgyIt>^(d|EE(x4gf@iltQ|$)GPpd60g=1O?pBxYS61+5}QlH1E<}ysDy|d zjm3jRUy-i$HpjYu_${&xUH}nmz|CQkwN&vtiIXNT%6XvmeXez>%PU;YX 3)r6r72E@Km#hWG!1KW@IEUq`s?2&JwA4spAPcR92BR9{q8*KtQ+o zTT-J5)LZyFe1W4$D&6cBRe8mh4!K6;J3ajqek!2q$*L@;uqGxDr4U_?6wW3Q3|CY# zuxoP)t1R_l-|Fp%Ua9XO85!g|xLcLY`CRbshqpHYkS#RvBti(y370p4>+4CLjPGdf zv6ORuy*htH5WTT=7KXMiFI&{qnlI&Hrm~at;NX@~*1F!RIeVmFu&(FeD^blp%M}#7 z8%Qm_GIQ2b*1kBJvH%JS-VeMh=`=Iy_6J~{U}blIz=Qbqe`uTDl5ekF+Do3GY7{>( zO^^~P l+avQSqjA1u@YKZz60^Z7ZBqaQp+%fE~1KM9i@~f6;B%Nw;yEaFylrC zLRI?dIl_6vAsPTf6>$3npkYa!Sf!#>ce|Xrup`=26(y$Z-~%qc1QlOXoiq6+&30z^ zv~0i6j 1H=o<~T< 6uGmP)T*)cM(( ze#Z2<5iPqUa&6l!O=_QE+j{(SP>xjoH$8;xs(n1bIM8>d0tLBq>e Ng$`2 V9eBF)RyKR`%5_+|r%xZv0)SdHnTsL%+ z_77?75xNu-(aI$$cT4ZF5n2u5Jxv~QMeOVwJB*!g+MCR?xY^Fk>5Gy^x+8VxV#QPp zlJvCSA=y)_Kc=L7V#pCyj4u5w##PD+z0JD}g|||sC3~V_y%0kI*p)(82`GO#c{Tlg z2e{`erzlakeZYxfvdiP*7Xa0U^z9p@so&T`BiGd}9vwL)(LEQoPCw8p=*eBHc{T}6 z^6gpl4}X2-RE=4Hsxn!}Z>UVnAj)llCpTHp_CIp(NV=P5922gjUvDY~NVsq 2#gUBi zJ*kv!qI8Ui4YB8Pp|=sp-lVs`#@wb%FUlW=Is{HlpLFfOpwTp?J{#J8cIw$K_ayc& z<4H{Z0I4v8@{gT0JSbXllgVzt0VDmAgTEP{mepcstwrfGBOM154w6AN^@VP@ny??j zE?AtE+QHs)C9U&yN 9Of9o#$i*LOesJk>i>ii0!|Dy7_zs{X>gxJ;>Sp=t z;k{+M0U(IF{;CCwr6ngo^yC%r3P13-00B-#Ln_q{0ER0 1Xxlj8&!Hj0hxI$NXEeVR975AkQ0z7m}TS_SeRO`9V6cBZ_qI;2R) z#Cp_Zd*#}3(=jnHjugxvL$sBM?q{k@$2@}0WBT~om-tLspy_@Oeuo)J4k74>9&ki| zR8si>y0{fhd*I2zK;c5UdU5uU6Q;GmV8@1dHu-X!R;X}VQ{D0UY5?KXxb$Xytotn> z`4-@a@BM--b2d|cs6ggbJJ`8q-(2=fV-g2#Z4GL7 TDi^xOa4HLe zxdi$?lC*Ey0z|+KyrTS1`UDUryKO}e`|;BrSPoCd?n6Xvn_WjwkITR?dy?G9PLW-m z%utad2(<9v1f_0g?iQUfZ+?6L_jjku 60WNG82XcR$ia4F2*FQL>A$40~Fx z8rFQR=5oD?{G#;-I7>=6t?}5)if8Ze?EV9gHHPgrx*Mb87w4xB@(Ts5J-bGB?zyk; z`IHonB#CGCAFe`*sTN0~_@u}S$|dr@_Q4l4qTF*i)GnMUf6k-6r)uqRb_in0D4)m5 zT-%P(b5OG#cLu#wsYsXEFdE6F1D-+u^sb15a{*qpjyhO&@`?}&NOg68W4 D+#54ws7#slElk$J&0F=#0Ib?*sGKhDimh?u?? V| 01N{0CgCJ%bmwck2b(>kp@3sbq zC>^NjLjoCjSw01tS!;e74DnpJ!_(V;^-L;~n~S|`(8?LB8C{M;%>0O^{tVFl%i{c> z+6e&nKM82kAKX&cGFwz1R9SS9Yy|xQXi~n5_6CYHayEV8vm8lW8WYh;-&Z>9P?uwv zZY-{U(q5W#jjr11k+T|kEjd c?ynIJi*{;>oa)~;JYoQ5; zTHt$ofB`=XOD#)VtBH{K_KkkSr*ev-b>~EAFuXoa8;nRXM(9ZitDQ43H^^LSld&t0 ztRNj*iak!9@=zW%6W$4myah_WTxFlIgmZ;H(G4e0L|4G}qF#e@ulXkmvk7b7nX>6a z y+pOCGcmS0%RDJh%Fr`Rerr5 zp~u0QzigTQLq6utY8Gs&9;07y+$*lJaERsYwomb{t9rMACF1loN0@Zxff2^w zl)lx@KY*$3)rYxry8NnntE)A(C;JUJ_wC?_K!c#)YaW<&_pRpO?EZy@G3@o^Lx-%` zIE9-816Ke5>PBChaG>I)Dh{9j)Bicrb7S!A^TXApysyv6Aw=?#lqwnzh(XGHO|Mp3 zq#IVn8!gTmes8SRA~uc{^`IVWT&l?Ag<*9y9;Xzx8V)b }vBX=KfEqV5V?>ianp?()f?|QgR{H z?wTztt&Jl^q9=9FyG+!Th*gWG&lx0)nePuXUABz4M{r9}^z!OT*~IHMYZh|lDXtO~ zzvG=6uI;!x<}9kJ#JAGjTfQV!S)Ux~@S0ZgL==XhYvJ6UJ-K1mMjB+3^D~443B-x- zJ%zTCT4h-b6n|c9NVs(tW8!$Lci9&kOndWAwtnk_{T{AM)wdRetI%;n99rhU|JN}j zW{kH?#PsRe^3YONmT;z zQD-&dyYvDU+k#ev44)- zh(Ti2Sl&!9BfNH5{`30|T5>EiZ?Y+SV%7*pp;_MByAgzUX%&|f fm^`s_@{ k@|u}h*5!ot)3|w`7pam#?^!$#e97*HoTj90 zADUN*Mkq!p;j*v17;PYZW}@yQ7RoV_^;wwSnK{Or#33IyWB01tzIq}_WyI3K|A5UU zke%;?#SFt6fC9j4-(RA-sgodTnA*%PyV85|v9YspLs>|3EZLAFhJ=CAlfBS*-r}b~ zwDOk@X%q#rXw)H5bJYzBE5O3^=e-<4C0d@=m-RhmR{^(3?*9@|#AQEvoj$_1VoVXO zE7ohEbP8(znjk9~Shx>030=Rsx51qrZ82h=!vktX=ADTq$j0!Ic(M-|qK?dQOAzV& z6PZ#DZjIgb^Ex($I7x9|ZxX=+1?m3MRdb{kYraf!xA(K%3mauJIjr+!b0zef4f@~@ z@V>|MdW*HxIQdkDpWiC$e)^@1tzp`2HUK38I+zF4aj `m%Yw3X-& z#%FBD(BFsrsT<@_Q7VMpid?}V9%<=Lh)x_(<+8ANJ-W~M)=Kg1jfz%^5Z9ExkD%@m zfPm^>y2kLKhNMdW=}V>W6Cv?kwfk-iL%$O$Su^13N?Z0Gh!%^0@web*`Fw#PfG{n0 z`D<1a{ig#g^AZe|wGs@~SsHEsZeI;~X0+V@m7=dX7?(} Lq?J$}va3wR^OA9Sk+Iar8hLnMiv*6|TltQC<*`}ums+^iLCeKo{ zmyp`%L*l1jAI_}qk?d${vCLTUI{WK3zRN8n oPQ_`e3mN-UfRT*La|eO1k1Hl5)n)c~ zZSe{>CfH3G^V#5u^_Ths jB_O|UKHw9i_K+ytpgpQ7w@NcY8)$4+jn|%)PRblOfhnV_V8&&XU*xG zF>na*`Xd|CaN^LlbQQ3R4SzSXDCX4D?kKUjprmU}&&3L2JaHtF`bFnbDy6)t;O>Ke z@*)Z==*^2uBx$SI9o!z)(`yEAC`j9!l; -Wsypz7f! zQqVtua;3A-a*lO4alLCsHA*K75*)PZVzK(AqzXHx>w(!o=tT}f@PJQ|g?p(}E@!h4 zNOh62;}bq=TJo#^nWg)^_hO|ifRZwqRH7MF%7$uWZBXM5d;N@%f2|ZxAdgqdH6(^) zw?qw02~}_UDIlS2mtRR!`+7yErl@VBXD7sHi6c$kLo9a0PHv_LRz%;l%|tVywS(mv z@tw4fT7583g?7^Y9-e;h46#<90(;o93dyrqf{+Q?VALXeU>t03QZEvV@K8Omy=re< z1iYg;4s$9oHi_(>aRVFVEut9@UoEefcHu4dagO{(#vr13h5eYpb9nD|{q3r^M4td+ zRrhX3Z6QyF=&{J&j{~yNNiMdXy=6jMQIDT~z09|dk1>eNI8q6o9}P7qzWjmtaOiT2 zrz6k2P(jsTHMHN8U-XG?_Km7S fur_oZXe_P+{_6Vgh5Ae`+%Rm62Rl-gm??-HhO||@lK|FWD@PuGn) Q$bM)RA}l z#a5Ykr**xc^i_XbfnDAz=ULtvgS~bLZQAdjqQli29ih)DAu`7*Pm4FS-LYcHzDnEY z861$3@5qg9qTf_|gUh}h)7!9t7!lnTN80p~OyU`kRzW$@_MTL%eWJKeq@jm!&(748 zR6spqf1#$yT9(!bwDO!ch?pfgA#2K+U9y{#Uynz!A+kJI)wXl=0u>jo6AkC;;0h48 zzL2(sh8XB4;9Aey&2B;R-qgQ9XTIvlw4X)kfWD&LxHyyrJR@YA11S)T!r-LzBegTc zb#`);1bAaZSCoAvs&!!UYI!;k{?O1D !2=5ah} zYuQ|0QIfT!j5PWe^D|@L?bma2e}k5mecU*07yRUoH5p=%g2Cq-&&f6%I&db8RlDb^ zXKMO9)IJBdU~PDCMW3&$LnC1(>9e+x>%Nc4G*9~dr^QKb_at?GXqT+o=}KkS;2;l; zr%l1{JAOYrl+tzGbtw99)SB{bb Aml~&9)Q{p zUaw4oy=dJl3ojFVF#=wi{tP>zeZ{LE3K~0Q{W2}0+SkAgE?mW6x?U+AT@u`Qrs95H z?P+?1!4IAQsx<@IdxAOu!9woyQ|?7ne^BTyqud>-@ygMvTy0ftPMKmG@ZjibZzu$L zscN6@x9(IHKQTbg`g)W@vt1$2O?2>Kt~?$+Bao2U)Yf{l%Ks`oLF0XbQ&H!3g7Z zLuGn9c*m*uUH^f_TJmI0aiUVE6$Z|!5%i-y$sqB%oJ=}sSZXP V~-^c1F*~&jE+3@2pz%Mrb29l#}GrMji23GF0=M-3CDP5nvry#Dqe$rIg$S^;%&C zo4unGM}L5K{2NkZxe8>ZhT^b1Y>N`Vd~?*>o0+eGC-@~!qE&!xg{3Icw$q9~tBG{7 zHjW-Y9xDxw&~Z|!Sxrh}u9>Z`JnWQyR2chA&rpn(HJn7UG3nKQlvG3sPhI-lz1Fi;f;@z_O6z<_Km-vcaO>@ z+;%wcNviq-P~{AZzv(U7M#|d-x8?0M!}D@JXIU`c&sm!;QSW~)e5KYw`1Zza!}IG~ z#pn}M*T_1~Z6|-{G}>utJ! -X06&I>P-yxXZSU>j zuUE&M?JlB$Z62~KF+!&(My4W+L3JKVL `?&=zfV3=wC@^71il&Nee1 z>!yuUz~Z=0lyds(M&AP1yXAKTl|R@Xau3 A&yw+D&- z%v~M(UTTl4TFyPS__;n(SD9Cpzcg I7K#XO7lz6>Kbf)Qoyj`!99rErkPXD{Svhmeq5Q?gXy0rNA`l7{YBRrck{?^ zydjeu!>IO4TC7dRdXE*3M)Qq+K3@nb7LcjYE@24F*v=dXT=AXAnk=u~&fqjSbxi`- zSF_E_s)XN 2~s9v0b4ui#}qD&|@maZlPOMEJ8q=rvc|OsKfP?mn9OGYeBax+ilY z69}1x2j6#s#tgrqInaJ}7Lq#(h1=N=RkhPZaR{TPywb+~iNIh|y|u6u-hIP`fV*CY z+-}^ZC4rjxSxM|6?F=3zSy4Vm+9?tkWI(*{>}VM~q+OJ0+rl~DpxjvyZ2-mG2ir?* z#HpSSghqx)_S-4TvAS@J*nxg?h+@B9KhMsudenbJSEj~qPQP9jHhqPf 9|A^7bDwI#g=bj1%j+eV1FRPTU2MLN{W2N&$dk_^-M(7YV8wAxJ+o&2g6Lm{8z zpK1!Ev3YRMk>l zkQ+XU!p9AIvYj~F&+^mt#gVGb2Q$hdh^dVEpS%Vka{YFYgd;5!W>>c0r71NQw$skm z6e?gMur?C+nl&4oXt&C^y#LdFUfpw$ZU3=5M+PfC67m**d;vh2OtOrbrX=Kf$bH_F z(2m923itU9@1<@=CYCBU1Ae&@Q07mW_FJ2a?Us5)f+1Rf5^!4!{~WCbK&v7i^-@g~ z&aBP#)W;3vgOp1e^{r{f4u8cg8fb-kz_~g*ex)-PqJj%_%?F%IGP#<{Umr`(P?klQ z(XC#|u;w@olu$9XN+;wM7Xp$6^1N?{iRthC5-QTSvh0P}bM8kU2|IOC{(inx9>|nX z!enhQj$+?(uyTwqS1iqn@&L$npe<_d7oT0${K)kReG)FoHev%+CBaZ^u23Kx84#O# zGs($u8-*Q7Ts~+TWQMiwh!hU$hI6XM&&aGmsAXN%m#8}Un}VqJ_;84`3^RzfMLw#x zt_B^-9p#C+D(KV=pU69c6;54Belw;eb482GNIrl4`B;X_(B!3HtQqY|Zta>Mtf@@C zBh$cH^{hF2sJ0I6TF%U~Nuy>x?&tMG&1ZQ0YJbo^sx>-8e{w6%x6Kpd@(*rlz6>Xt z#UbQfE6R4LY})MJ#7vQRk~n;lpaN60U{taTnx<^*-J>!Ktsa~&W8cQ2HcF%f+re?p zWlux1LBE^p)X1@!b|MrD{HzL0nRutl`8hV-d(6H^GZ&&Ni-*+5bZ8QDOSP5`O|fC# zn#e;944s!*lMQ;o!l1ZXHyw1KZ$0g=hkp>lB|1@;Of!}X8p9fZyhi^33cVj}l%#n0 zwm*(5H%zWo75%1(XC#R>vspB=Pgp$*ekt4EIGeW$g}T(5^GQV3E*!4ElzaLID7y@o zYm%acdTtc?1&s8?ICFC;@x^C^PfG|e qx*1lsoXcLq! zZ%{bY)i{1dN-zPsks6y&ruaA{&LdLE(fC=v@v}7GS;8HvrVCywi%j@RoQ2Vb?fVS< zmL81b@6t@a=@vip6D8sEL5DVslrvfdeNl^KpcbdA*ZFL3Y&~%#<&LI7xDcg|MAP&x zDj)UNE`VyK@qTLxHe+piIQNmr0^KFWR!X@e;a5o``+Gz0JM;aoh!^mHrF#2&r!i`S zkeu;tdI_!Oko6|F$+)phKNr=zsP_eHJ<*Ji%3M2M8L%3g|D>kQ@lbx<5}cVLE>0(g zdR#wP;4+h~F NFLy!|jXK+%Vqt zF&gl`lsCjgy3RJ)RhB?VlGv$gG+STs#2fg1X@4$OEaFYsa!@tbB)E$r%ekfJ&4S!g z^zHGpp`JMu8t|=)6#csg5ZqP`zEZPvkUVz(1IWTB?()!*;{%-qmzp!-Xh!|cZANq1 zPy1eMD|9%)v27%NGq_MSmr7fK;xzX)BTw9gL3_mF`Op3UTh^5iTl(A<4SRd{9Whfr ziIP)T^n|W3pVYTyIbkT1!FWYny>(F#my;<4?0c57m7zTG3jU5JIY6bDY(5bfYaF?6 z4E0}BKaj$34?44YGR0xs3ngxj=xk)H(6dN$4hgm~CrpE|PZRGr!Uog0V1I5yphw zy~&dNf?UUaq=Bypl%Ch9zbKcrq5T0q!Mks=B+18C!y@%6nkvapqZK)7xSYX1Alv5Y zgEY&`>F-$fBIZUxEkg}&0u%{10Rqi;lLXq|THa``LXkF)g!Esp8o6d34WZKDZBnUp z$6btmjNs}!3q~&~V!NwGwmi)jo{P$W{AEzyVu_`!5&2mlj%dc_0~w(_E52WIzfto; zsmZ~Quuy2M;GPVJlY|Rs0afGeQThvMT{*^Zm{ lB<#66r=<-yeXN zS$-k^C7S8Gsl?eztGyjOqpv|l^0KGZ+pB*hlsLHIWpKJ&%nv-)PG`10@)okRnr-3f z`*hPj+T>y-2xBtPky-3U#5OPH7$f?FDc!Y>aI^Z6L=T^6rm}s2&|H!_rJ&!}{w`X^ z%R;P~#V4!JIxi_!* trpc4Qpj@mv_$&5eOi@&|g085@sO=W>aMhYcGp<9-@|H=3vIca|>; zjme`1kH7NrS=m5fyGK${T2*}e9*=dX&1WoYa1Bg9qILRq%N&u7V3*hROITRo7n(o7 zMeWtr`AeJ~E{i%cMb^J^{iA^$gWq!bf}2EZhF`r5q0jW9H#Nr(8CJXG4hBxFocqk^ zi@z&PAK6Q+H2wv9`5W(ny+`ZVKXc!5=S2&A9z_PiQ1hvJ`l_c#JgR$nO?S*ZBu==+ zhH}BuV3^v)j_2Zi#0ldu{Y(NC>?2v~Gex^Nive^s19tPB(~;~8-54Gp4TCpx(w4^n zC%z@#n;8y&fCl3r=FRfq>#&FT3uLKZvV4Dy(r+#0#*9NZn~$VTR-eXQp9ol8J^!^y ztGBuF;&vK@xTB5m*OM=I5o}5}bp;EL1dmkX^^_EtPEBDw0`2vQbsaKszC`naI@-xr z`aBp`$wMdf@%mW$=86=c{4t&dAFQ$bsHLn70)Q?efQTC)K_+ENj7CKd+Z|dp5k631 z`dV$s-6VT^6pqB72dpI)fuxakt9^ByW#21f(P0%?@Jy4C?flK5p0>8gEqfiuOljXZ zcX#vJ`j~#Ukr7_r3nq`>80Fe<6AAU swsu?>=gz8xfIQ(&IWO9{dw34~Ck zc*@6AHi?(r{vv*r{iO@TTnz~WA|YrAk %k6?%9Y( zjJihC`m&z~!*dH(+|Z#4>Uk3z@AlVJ#`byVU-s&x*3rBlyQg?*U$WynhGo!zXS6Cg z7%7A>;>yE&Wd deN}RO@(T2x~o`@?0hz zXA4{MnX$UjcC9ctHay8c-Rp1$cdUvVByD0P4Tdnk_D{7PD*Ikkn1sxQWO05yIQP22 zHH>X{rUrpJLJangY`iihTDb-FR1^IlfRm&=M$M>l>REqKM-6|WV ldD9|zmH za9h}q5gVoEw)hUqB?r3p-;%$^@Q&@_;<=JQ7f(ie)>*GsL*|F#_5g_Z1Jmn{G5_2u zRPUp%M8I1(h(zv<+?&>Kf6-FB$XoA{Fgb~sNoOB@rFxR!Sc5c&N$ZeLb^Qg`Hq~^T zn$dz4$~l6XaesgsENlLo+&{pV@v~ryPj=}5NzX6f{j!fye{0Bcz2cBfV^n7KtImuM z9ODqC1AFwi+UkaF{QEE?rB*EzRn8nm-RDhmfb|W2ao!+cqk09rdqF@BkO072Rc;tm z@l#$M4e%zD) Hj3 z^j{2>v;wD`f|R*>a61jPSiXB6hO9+4ZBE-zHwZM)QmgOHAAow%q^we@^9mtr)@enP z 5(=6!Y-Q`>%y$*=uj{MCfqIKzKnt6+EaoCKl4?PJO* zO~i8U;Nt+R)AJ`4`Vya)s28dYhy#TDRbqZz41JVw^r(8D!7uJyr|^1EP8@2wuGyvk zC_+n9KLNyl!5DSTw#wmTKU!S|9XyoDl)hM{6 iE z`gn$0sM@)<&@|rWTY(31V&vkH)il77>00Q@Rd%?Vb@Ha0hqPBGFIynmePZy=C_&V! z{uVc+I?qN&D7t>t!X$HCk~&f|mehmS9g7e4w)0L&2GM4Pok YjJh_Gw?aIi&J)7kMoggNS zDo u`7syxJkkqxmulzItj(W|zq0B*k^P 2W(Zs-pH?JD+l8M1MW0sx^h8$`QJ)r*x`jA>+R p(`{w+vf4=_@+xn)^lNYBIZjttopcj`jEw@}UTBgp@e zl(vOVdb<8-g^!zoMm-{%dUb7{^%iM*%>$3k{9mZl>e?Y`_} fw(e)R@=S&})bLF7HB4#PX*x`z^ z< N$@-DW z)#RbppkrQ--GMy^gUKhsxv4r1gOp^nOyi02rgReAi6mCS{UxNJ+gn9C6rv?#PbRGO zdHC{}C(C51Dw)V1<#n`Vl8!X(I^;<@+^Z{M&_avN^=5zng4~=}Kn+43`j`9xY}ehW zODQmq(2`5m@Lb$df~hwV{xywVh;o(5XjRS}q>xp&^|SBJjHNsp`H7p^<1CzG S(u->*6|pT62DPY zp4^M49Bh`Q%AlyIWkdwx9Y2Ubke=~#<&Ns*XY0CLXqA?omd8nN;E!zkj*Fxefk?v+ znrdz(xV@TxdWngxQZI^hZpd>Rt!4pl3s=2tG<&WkOndY*bzLC8N=~VK=UMOL0 }KNBZD4mcR6EtJ)!I&fn+bFUf?`ZuN_){ zsgr~XgxtF?EgBBJZ#?4~8(K?KQ 1+v0ZpgYQqOb^88J$fqrg zaIAQ8>{7Q14gRjNV-lqI%YrMqIv|S4BPHG+_4e*bb>>5Gg3<8LA-GS~3b$J}Ev{f< zGi!}-H_}-wGWSTWrvHje+Q&!d@K*}^`(Z;xo=|VxlGZinno&;)$C84o!jTek{SWXU zMqtIpz`+3Fz?00ts?I>W_hrAhLp7}u*3wm9S)^=gTa5~zu++ZLivSpuUhAG{)_htSP)F=ICddU{mrYBA z*tYnZ?_MjG9Eer9o`NxF5xxAzOt{G7(V~_PS9RH88?*$sYc!Q>PCbpVu|<^h!wfs0 zMBJ#ZoydGwsvAQUD!poY6NRy$=aEoWRn<36(|PtX@<&jK=IO5=4>yDl`yzg7WE=*P z@KZb2t3D^6>ujDf8+TY%nX(HK*zoNPo$lOe#;!jEYaF%&w5(mIJ*`O&BC4{NbdNeq z(E#~cQ13q#Y?~1ZMFg}F+05LCE9ZJp>n>lo;Kd5w(odQZE(FI&`eEBI<479i=JKkg z+~VpZMJXAQy0eIpGNbm@+uc{1%d5dwjWZbP+2!qzONA1_smAc_(-Q8~7*n>dyUx)| zqJ?}G^)vnOHalH?f4Ox!xqfdmK8=JT=C&}3DK?zO;!whf0TW~Lq(5r_cWchR8t6i# zZz0ZT>t!1&D;yN}dV5!eOMBP(H@6Bxm8WjRD3<#`;oN;%Vt(TR1LuT?)x*?a3`c~r zKuXtkhg&*Cfa^%k&?pIMw~CyHHMFjB8FH#KeA+!Y3sNw)XmV5iy0gX~Ke}t?n&>k! zQe~O^JeV~%@X`91sh3{xeU(gmJ0pdhQ%h|Bp&QSaX~S*~9Kz=n&b3~s%oQW&kl`Oy zcU7|~I46?)@OZ;%fqcX (%4jdroUt5lEn2A z)*VDD>lG`o(|ao-HXGFVq%%{cl3Ts7E>HBS?+#)^wHL9b=H#=F^TQ}5vgh++i!ZGr(xQBkx#*d52O{4Ge yQ9>@k>4tvJNZjYsuYa1dGaQVv_1AauHD@8*6dW_WX(BN1&DRJ5`p|oQF8Y zac>^JqB76&RZqj#nk1FMhg7SZaczHqsPBbp7mb<4tHWo=Qc|)bj@hlr(Pb5Isgy^+ zfG7U?Pa^s_DnJ3Wl2@LUJ*uesQJMcy@Nw!Ft$nSqemTs`MYpnT3?$FF0DnO-jlW=R z(x`RgUAp0ses>1RFg_4@ll$E(Hi8v59T8hd-W-+r&UZ^SQGr!r;lV@gJAr>c0P>| z1s{pPQamc^k#h79_!q2+f9=z+&Hfpiv#pJ2NE9sj*}S<^0XJ3E*DNvc_Mjxwuh@{( z!jCUF9mUw334t4LZ(#p BMvxa;g99aIemY;yT zSvwEZ=Sz4yx@$t^gW)KsBj6(6Un?6@I08+NM_`EarjtZQvzpqJkJ#C(DidP3Y<0Ef z+*cUO%;(J-(7YqaEZK@Uo+!T|6Sjkh-hty~vWY}mRHDE7dFC|Pl~rHh(m5lY%y@nZ z2m5*E4pXJK`? a&Q#O}7TWTq-3x9Bpa z2@=TfXrg7?dXqBia>QpvbQMdwvo35f<~4z+PX3Y52S37DRYv(1Xb+bxL95LadS7a?X7>cM=D+oSx2^YNH9=Z69H`1<$ yaB0KNP>2jd(fCVXAYP-&}mW^a`J=Kq_T --KeM(QRxstks`eap*KZ}2@)WohAzE?j&$`P zpmZq-0s*9i5FjAEgCIqE3rI&o6HrR%sCaYE`M&?Z>#qA|v9puK+Iwa)Gy8pKp67Y7 zt1qeyg1|contT)P&O_&96Bc8eY~wrdCibG9*{hM*X0dPG45pids_jM-RY&(lEf-{P z{otCM7c(lJ#V4#}??WAjJysA(kyh`Efe`pua9orxbEP32DFVl=raK}sbfzdsstl;m zDXvn=Y8H}J?K%=zqAR+LXBe{?wDUd6G##>PrMMwrP5Vk7(+e2|dqLEzXJ)VBzZm2K zUH- mV- PR^(1snuu*6NqV-l@gRe?+ zz5U_z!}6vo6*u$l#%~!1)pgp69aS~;s2US2#4ORSf-NH3cbCt<%wYwmct2t}8XjCV z_eEE$rdfsn?vhPJR78x!65%Q=!oI0idmG;w21?Y+ZxBfEiTun@A-n{a5D4jZsZOcc z77XJG_eO8zCtANI*5$-{3aHuFS*zc%oZ9(ZX=(7en$+ORM)xUsx{kO7r>r#_pr8I^ zHFocL|4}np1Xy-mjU{rx9#@8oSQPa8HMGE^_3lHEss{?O2Q3g^*==Fr8&@)BD<)?b zU=Y)V;(`7xp9Yp17lpna)YjlA5TWIWj#*I`0L!2mbCP3UrOa*V)TjGtv(#~#9xE#i zODTM-Y_Fp=*FCVxW4bbN`|hCX1zT3M@@zq{78slj5s_a>lknL>KdwK}bEJ-)X5ZP# zN9uMf4Sr98bJTb3M{oh9f)`~Qc>*m{uzH=D1M6$Ub{!pKMkP(fO*nMk=mcg7A|b)} zV@_sIDkJJ$^Xid`Pt%fJ=C?ro2wX;rsb?xeSw6m-r|3~I3J4a@UUB>xh*vu28Am&h zEpl-Xqfjih_bbpH)B1G@xV8D-<@AjpOY;#lZ@NnIb|1PqZEweyYgun2#ptnH;qnPu za#%!I^)g>hv3afYW=DgCLSw)LUKQ*h-eb7d0Ss)>?vr{gUC_YvphPs#Vlo~mg=yf{ z7Kt?(H8+$+V_Y?MXMjS&=}?%(0MSn5XRksq%#*8$4TpFpr+RJNZ*7l8<%39@0`J0D z`D<@QSQ_fg#PhE)i=^)6=PYv~?Q2pQ{onkT#JphJF~i^s;de(cLEdxWVTU1qA*3c) zb3nVpc3cE)rI_Ae-_*f~2LPLE7O +m+u^!o7t3@yw%)q!}!S_B_vM)B6P(lGXQFc_FdMCljL1#QAaX zv2Nill=BedDu2SML`77nqE~-D%&K2)Zdh?nebJ@8S1fai5bVGE=ETESa1R0NbXB>- zJUBvt<_+A-IO0)x2mrnPhc)rv(M@@$au9danXNbP0si{oo}^s^87aub)M}adds{(4 z@0ag%jxKqsW9KGZXR2` &vAsv?;;}!c$ehaN6+o-TU2vm!k|X0r9X<5N?ts% z+Ia53 U+^IBQHHBsr; zP)%1SvdAs7dqeb4!Cz>IbiKyKwm;RILi;Sk)-mN;(McPGR>-Evb*;WI47JZrv>L9Z zN6#6PqL{Iyu7k{ZwlV*ny~E2%y}8}U^*bcB>sF_ZnSgp`|yZyWj$eh4qliNr<_`CC&fQf5#ETg0Eb%N?)7 zDq|-}-Z8tS6xdkAPbTw|2?QyNAVXc+CjwN+epbC{q0?1@*$)?Taxf;Cc>6YeD `JkEu9oTICj;=z3H8(kYRnfNaH5B4HDXP+e4aU5{za2HXe$ep4;l6 z0199|ADA|NlNHWd=Q}|!#tKf4UsPL1&qGjZv #$gSIt1p&FNx!Lw$}pu=WFOm*#Z(1m*b7o%Mk%mv#@cNk(nSE4(Juf zJIWXA!=3K)-K(B3OE5sR 4z6t-h)^--3EmzC#L8HQ(Cf&DI9?2QD;huCwWV4cB@;!ACPeA%Uo<^$69^^xXo{G>PD-#Gr zrV^L}Ual#OArF&^PYup{tP$~;?=N ?>y&ld7v4yIx)@~HsUk?i#mEZm zIh`qDu3l>4z`3$A=Vij7Fq)~Ceg6;O?xep+0XFLofKO___4D#*YdKQl`WmAfx^UNT z!#L7eNZqBZ%cNd7-9`j0)lVTX{AW(NY`+_$?BQWV>!FvUk>HTkyzP2Y1NWXjtvhpv zRnPz4!rg)Ttxx^XqP?lFL-UM|x(C|-^s~(cn+purN=aBY)SkFDEJ3UwtBoP`&H~c* z*|%p 0u -nAs#Tl!;&LG0 zLZ-dhC%Y7So=i@K+(N)MQZBDwi|ovT=zYpqj~w8AVZE&<9gplR)=$Rz(rAY|WV!m^ zmB-QC%h9jzf!%K;sb0%LW0)(3C6@M8#BE`codTB=GGvv%H_xfB@7+TOx%*=b8 =vxuX5#vwAvb_W2 zeu&cF_nvW4qr_Z%w(Slrzhib3P >YyG`xL3MSZVreNIXxfDWwm0wp?;uM3HG$3fn8tWS!oa#$Jnm z(_7zrY<@>6XZB_kK4AE1KWvY8E8hz91?}xd(kK}ZpAb4&@pj(Th9zU%T!wWyevvJA zf#pySrayq1KLB5-!tFX`?QUq6!b#w|5HjblWVvUlc0%e>CGeEg rDH_SQ|46?K*2*Wy=-$uxv24NOS z%y^>D9xmMwedfJk8IBkgPKs249~AgHDb7KcHI=*L?xd^K0MC0B4`qyUP+^_16D5$z zj0wJsgC6BR75sR-pkS9K|1g&x-R#-3kq|jiU(0L$;yCX|otb|4d&k?YuTenPwc--l zU+iagizJSU{MQCqu4Bz*DgG+L7NmsKEqMM_p F^H--Q!O-15%@v;!Q+d$A{UxW_yM?*T$zc9UbJp(84q743rt`ak zy(3r-w|?E4N<~bq@~YPLU<@y2T?}X<)zM*?SMtRbww@g*ZRD~4rbv5`1(PN6^UY{o z8p)-oY|Vp39g<0ask(^%V#t{DWA^J1$$N}(;_Kz-45j`y#kyhwcHjAKG$g6p` RD6 zEVYsvcKygEHh$mDO)DjqQ`RdSK~S(}@ApLNvAts9O7k${+3iCiH@C{g%X!HO?KsR) zT;}Z6tjq~bxmL}U19QWa+0XL9u0xq2Yl0Psmlqf%8Qg&m)Rnw=k@WITlOj=Sn4O^aE;CubVans)pMr#nHSNABB+QMoB zrMuCZZYIP|T$%vJWfm+*9@8ZZb!IbfjboUJwN6D(OaU4cB}q=``p10sb`m_$@r#PW zM5QHEI<}1@aYHidbhSb&o68*!GXn1G_`YZ6WiP1h(SY8R;r?g-yT%F2ZbG8>f;fe% z*B{Z7WsGAm7KpV36WYwkpz)O1bd>9#Gi;E-d@HLD%SYW%uIBoMa8fzu#NeRebxi z!cBs#_#A|lVfSeKeBcx3o$a$Rm!IMim~#_F0m|@sjnCd`<{D;@S)At-=PM Kw)C!clMAfRT!?r}sAp)y?G#e=>^Y}^oEZ9D?NcbBI&B7NnAcd4 zUdi?$^=T12u`&e2q;eM2z5K>vO|o!9yCm6VdCk}liEKVB*fK_MiWR1|TCEn(4G#iq zmLV#z`E;DWI wf;ec{0X$teF7(f`oxjxoe4y%3PKV=7K$3vhvL0>sFgA zuA7*=NoK{c>(zlM8Y911@8lODPYY$$*}qv|jj4aND)?IuI0v0Uk7ZlibL_dMrW)_; zxA!)aSa^Mb&(58HpzB0ngh5gY)R2%o-->*Wm3L?suq5h_v-|W9y$GTseTQeJhAx!a z$4uBkufx5;qN`Oygf2ye$pcJgNzCz~5l})`d1srZj~Uxpwk$RwuY7*~`l$#*$F$wm z_?Bj|uesE={?5m1Z@zi-tyJj=CWJ6B{=TPk+9wIqbBN0X&h>Qu0UQ_sH^Sp(@sI^6 zOM@NunnNkC2G`1hKY-NvDE4Yzs#nw$2Y~(>r!m5PB~1Yo&zj_2TiAx;+!j!PlCv)N zR!>iakFv0gUbX-@uxh-Go*SnDBowwWa9?yL4>wRY=(-!9`be4Z@=tWG*uT`ZFuyDH z-u3AzU!HxTrRJN{YsvaIysjnQxZpY )24qx~sXRsRA_9 z1HE9;Hd0d)Y$Cx@m>IIu8wNed< hubr zUVq+% lui92^gWY%|%dI z&-D!@E1qJpyqVQn=$3-=)9j*d7mrG#go4|4IZykOGCIm*U1)+cOp#T3++B}Oe_u25 za6sf^wM^ZJ3sWMUWvg1k7^!s?^c|iLaiW5d(&N S(^a$Q?m1E1Rc0bGUL9~OH_e&%;;LRiu#j8rE9)K36uYCZ$=oNV{# z3sAXiN+l!7+ei23_NXZUrMcDV3l$U?MG3~Hd8}i5y3b$2BX3WQRwAW)4e>T7w$R7{ zW|8qkBDQu%P)k=amVenB@;n{)-R3nNRuCuVf*joD?_gZWa(P5rJm%i;-Bfkr@%N|? zIp>>)ggES^`iYg{=h`WxpVQQk6<+{%WpDSxyR4UeWT-myUvzE48KcCJV4D?&i) z2?nzQ47_uH1^+rMiAtKqMD@lc$Ls|Y9e*V@n>+~hP z$Wk@NYD`OkiS8RL5(u)-%iGeCfPue~vr^aQc%vZ}o60|S&wy$jHhVEuiNA+`Ms{G? zRvU|2>Hh${hH)872hIjxU_O~T^xD2dY_gyQ%NDKus#K p&^m!zWNo%mYhAA5!$?EG__( z1R`}j*>?IAzE3A@ZjHyzpF0SIXeqCy4fLxr(d-ip{s86{4+T$HgnThM104Mt^@P%( z0dfvkRiXm;S41Fx vQY{^pDeOp73c{uQukO|*pZtt!A7a1>7r8Q_emSQK^hL#V#dJY =v+Zi;8{w;2wH=ym4u6Gt8)&>Y4Jzit=0^yMJO6kW*jez$5# z;>xMmIIid+$ppO41<|9`A*n fbaJ~BYDNj-b?m{WZfDlFuroV?~) z9TgiK1XdB@4lddNi$^B&Dy6*rJPJYCLd4-1+r7YEkMka`O_GTe1@RpTUPgxZmOxs% zz8^dSeIp~0r`Z*`Zg$staRUA3YgR3tVt1Fu6VuCu&3`{Rs!eVv+M4(HQm9;UK%W%p zcIt{Qf_G1u{?@IX^ed7OHKd@Q9DeIEMA$JWcYH_4Kg`qz@bDPKEekfQMGw^1;cd-( z>da!-Z}-6U-9+e}RM nZ<5*Ghu#M6G}Hu)k-aallXD`^A8}cTMd=%Lpo+ar^6G1311GC5GEBF zq;8Zy`omex2Q$0A+32yN3Yn!}x^FR#RrK;3uM%M$Yq10OVJfvlH+0;3JgO&f!hy3w zvUCE=71^&0VmQ?o3j2^cr?sH&0{-6hub)^cve|JLAFxmmXO{sK-4D$^q-cPXY8wM) zb!nOa8~X8HWyh0OOOcznspD|DNvz{L7IM8t^Ou=i8h@k4)b1j!m5hH`$>wqU*mP*O z!r>UKgPn>cV%;|Dwfg-E$;W`0_yjdzgLfSAD|vHYCtHCFkz%+c)Sqf>_9>sOQ$D|J z-0M|`tsTKhQ@=WbvAZ|>6MKi{74=eTfT?}>BN2NFwBlj(9hj8VwZNCxq3{3ckbfU8 z2!{K(8TfTW1i}qtOG#hjQj(?Ke(qI}xr+IUW6kIb za58%=NZFmRWEr?`5Zt=Wdeb!4jRSmAcf)YDZ|7BBK6CAv4T{spJmg~G`(zqwDb<2z zmW$6W*krx@o7Vb|6>M~bKshwqwG_OXT+UohUi@$$7U%F~UDaA89O)@N*Vf0hz2PkN zhP()tw!Zv3+T_^pw;$i{F~vl#7d)JIRbOPU$SU;5YTpiqpW4)&47PeL%aFBtv|`qw z5-ZWh&&X!GclTqibgS*fdXUd $P?k3u?5wez{Bk>( z$?c$hq^=_0BLzp5V?vxDR+zOI@@Y}z6Dcl?fe+m~i#HaZ?q0)`g(U $m;K|V9OezK;sT9XkrY3ciJxv!&4 )NMIqCQg8A6WG% zd;p3Cy}Ty-Z_E92q e(M f8xZE)3f3PrE~&z!vJyC~Q6+)*Z{GDF^YK3$Dmp%*;a#f28J}eRDs% zk)#+FYq0~pm>(8)UaBlFo`L8c#c9rt#mnE@t#h8vhYM(>eh!j^tYKx=3l|$>dE^dS z_eXx}*!dP_%sWk|7f o^AANckQx4OjN&c6UhSF@C2{ME)O+T;%8qvMO@gzBFKy4A$o?OM)6C552P zp3{h@wGI)BKH2^o)-cXZaj!F$*LZ>0a+XafU-7}B(ECIi16@^JscB6;m&^Wl@s|WU zM1)5Yi@_Y5-nS6Xi!;mOVo^n lw>4LeR4$Fh>s8Oo30Lid&QuHgt?p>eh&-_>?>wz~>_THJJE;S( zq3-23zffc!7Z+*4LQy-TxPnq3b6y`ACOn&VGT$ZnDN5C8UjkzOQ-4ah!EYwjWgwDd z_E>Nx5nrAuSjH=sNB%h0aIqpp6fN7wm&nl$A}9JJo6+4-@r76@?)Su;b7t=;dKqB+ zdz@R2#Qc%BV#FD(P*qN9kw)3+2AM&)%3+%=t_Rxcj~-C&^Ad3JhR_-5)Zy!q^xT>x zRC!#FpLc3~aU|2VMM5+evz#g0f%sZ*R*Lr4n^z5D(4ngd@WACr&FIWcrSFqHUt4uU z^g8fWI=OQ=8NQ4lP4BI=+WDwXd;53Y?AN(jWPp(R?02?#MqeU|)LrltT>Q6QlSuR7 zf!sptz8OW`n?_kC*F(iOV+U)HO>%z#msQ8Zkm<%z^<|%To{HRJ@rtX&!1Y?!yvqf| z(^%?Cu;9KM^T1{K{(%gaBc8hJwI!Q{Dci|f9J|HD+a+%4{3q7uS~7|WFBKq1 SlQ)b(`WI|3nM Y^1V3kT%Q4qDi zuCruBQICuEnho8ZRk3XsEH?t{toZ@h+d7JRMiuTgJT(;qvVp=_c=;N2#J*0dJTPYY zkeofJEis3?p6UuM-HTZH(z(~x5YHayZ5321VP_P1gLXk!XW-Zlt>_*ua6>sf# ;t+BuWv_RA0Ym&x$)U zN;k2E{{ies49p*LSha^WY(>G-&QQYOXUM#*NW`NTH&nNEGoKxCSPo<_=woSJC_w#M zvDKkqv|hjz_HlzI$<$fYtnlHodLyP;p%<@>^PQbbrA3Fvq`Po%-_$jI`;hkufXV^@ z_?Qe}3YWBq16IgThfm$zm)7_jpYk^c i#GlkU+a2thFzAqhsSu3NuMwS)TU znx;95_oy43^RLPt_09FuvdJY{29YHE&^_vrK) 8cqw5c;CF6XL~d7JMA!w{6b91!FEgE*lz3Ci|G|3ux#1EOX7 zyA8A%kHlx+jFsPcvXK7M^AA8E46`7i2_1rMUBzF828VQ;^)#qFL9>Lq1?rW_$zFZ% zuMC#5hh1?*{zU#%X 7wMOYaY z_p9bU)Dr$=nx@;E+^ZX4sa`;-=7p}(y{_fub)Agy={uTw?$5R5qRoq|xgM8;SmBm~ z%Boca7aH*C2h$$-xSN^%HoD6&TaKpo6g8;i^i2Bg-drgAZ5gp#xc_RJAB>^=VVCP3 zZ~ybC?Dcys^N24#brBQn a9Y^-{OIoP=J+4L@8sv- zbRyes40;O)?y!D=1qqi#5MO7+6RS?F?^&_c{8-5i(4%u8@$L4TTM5H|s`TuxbEW3o zOLUo=F-nLwipx8b`Q5AQ5=TVC`}mvlQd13?Z5wqiqi6jE2Yua3JlXPeLi0f$o3py= zq||CcP3g8@j1iW0#4Drk_+o0A&_sgEpsuQEPV4UHL?Ca@c8Khc-9t~w#Ai6uq@FKBzq;^S%E zoJEgSZfK0c-vbQ69+8UZZ!Q_iE-OwA;aNhO<)V3$>kUkc-{3iA0<<2OE&Vik+J@XB5DD>EF@#&0g;7V#YsCigWl@UzKIsrVd%NMDf# +f%6Y?&TVkz(E7%42 zd>B#-9trR}@EA}5Y(HFN*TYkufo!ar_Dl}u6wNu{2;dUG2N%*jOIdZxj;~alkX?dk zu#U{~ctHjVu6&9f%8V1|CZ^06xZ|u?c#9?Yw-955tqAk&(LwyDGQobz3PxV*mU| TN+~~0=M4l?ZJ`c6=kvrNSa{#bB@B!-PZq-x{Q`H3NDDgE(>r2$=hp}kApNxF z%#TimL!D*ze*C`IUE10CD{tL &vTx3<;=zP%zBp8cXfcJ-;kxSTq~l_Fo(4|o2+THVi? zPn5Zhi)<0+@*&zm5od)n?TsA;#pe7lF^D|O6Q2?@Qkbjr>Gf-&K{12r-|BV_w>S(k zQ$2*`58|@Df+h*xNPl|RgjR@;x%8k?zhHyI9Q=FbO3eIZfPOv{V`0CNIZ^wuM^`zo z3)W%PPqngsRwQj -uecNTus zG|B&vqP_uSKLRcSc`yG(|B#;Xfzd-gDZvX-$I l zbu9-}Y;cG>38yiSim@5&t}b4ihpuHA{ZdSN{<+K~W3oUhu-p9r_W5aN?V}6tC@B-V zj4F*jOmpyjetCiUZZgH;FQSx+-Wfo}oW*Wvis7LM#IMbH;ni{Ro+>wXcYY5Q_2zcP z{|>(KsXm{7+(g5VAnsxqJ}O^(b}yKSgBEw@<%H&ESw}(`_rx5R`CHRI7j9LI@Frdt z@^&YBZ1A-)8~12Mu8Krv_~?c-UvYQ&2GdhwT$sNBtQw`!spNrL$?Uk8Z^o^zeM|3c zAo+{PK_y2y_dRn~tY%`{>hZ8Lg3$LAp0n_LVR%F+zJSbICnY^QI9d+PM;KRUZYSpA zU^3h|wp4F%wE+t_MaioFx-RmSQA_6!ktRf9-*H3^tQ>x_seN6{W|zcDZpdf3W5|cQ z6El3QVk=q@EX!Hy`=dUgu`k{ghEp|fG2@LU7JMDYvrmLiFfaUI2xHMYT3GT#6D!gE zN7Ej>PS6$s3Zy0KWIJ4DdJ+`^@xL`s7`Au(kdcKEVBaux=|SJt)$*d|3#Y9%Y|;Q( zSehJ2E_lrZ&>JSA-HPQXycHAHtck%ml+qiBenOw8J1<_nMR5;`sR{VBq6?8MVdLlm zonmHcWqt_v5%PxuywPijXBVPo&SgSt*j^iiO~&Uk0xpdJkS{5}+yel!Aw_Fw1>qBC zR}AZrKMo)h }QN!(XAv8A$aYAUglcR^zMdkah=FuwqAM9l}uF*Afs=# zfWTttt-Z(yt?D@Dpy!d4OHyd7? 2Aypa`NLRyjR>nG-9{|7c(ge>;Rf#S+JYLm-5O;5kc4 zxT|t+Mn_>;ouQ5PnQo4@qNv$eVl2lGT-gF;(-TN9KNSw-i~9I_ApEhkG2jyY-#7b@ zU3v@v5FpH3+DuVJRq57|6S)GgvHV1Gq5nv4b?DqqJ&Hz 5(`hDZ?d~?GJ#{<978>!KTjO<=z7op>C67Mtq4RZZ%5wlZr$s#_1?V zg#EBv$$`nvDjuRpQC9=E2~QEWQ_I$o@Q gGKzS1fQ2TFuX+WPDA zUfzw$d1|||Ze^-ffI>VsBaj 6tdX;x28y zTcZFW+z@-Rx=eQu5^(6;2ims95^7W`_O3V2`%9VbQ6AN-cKi}Y&DnjA bUO}P;%Ei9o#yejAL5#R@x~8a) zTka4_r0n+oRpAew=vy7 CqfzW#eY&Z?StaU_ao=~b^QiZvc4~#>KzZ{*$eQS(uj15xWg0B74RlDf7Tq4%|2VhrD zJ5p2yb=7HP5gyOivsh&>`|-+DVjQOh%H6=Py2-mQI;n#MwP-x!TH=gHP=|d4V|w+> z0j8CqYM9RSJE!8d2aiGPMRzNwcqw^=q%;9k07>X2LBN&tZ9(A=vo7Mge#*#Auw#}k z1#^@6 {M{I*ufgu^kK#k6`Ah6$KkP zB!$adOM^3o0|oeG?cV?x9#Gm$A3#ZG#!3-Og41N=aF_xNX}E9Qena8I6|i#}Hss56 zWhst$W0=$0q|LyWEQII8{rEN!;2!r4Pdr3foxpJt;5YXo{p(J3&Lfo&SEH}XFould z7~9E!a%#hPQ@lF3url~SLFT*2G =+#DVqUH-?xwXLZ=In=R57R@!V{xSkDe{<^RVnGr%V zU*%zAgOwKs02SQHu92xYD dod2AM!&>4TdN!*& C7YPNc=iLL~C%W86%+ShfgkvZ+gw*f$;G3uMk5auCbMHDq^8^ftvb4TaS3oFR9L z)q@v`RPr(uC1YYf{b~;rdV`HOIMNuxII$Mw@0&^O0rgQT(AsEizsz;A!a;eto2Gik zM10ljdMCKAN9o#TN3H$B-U=dXesJL~G&`HzKR4moahG6JpMpv0v%DU!c>lFv0qfD~ zi&xOPj2f_-y|7omk~0pLZxHfS+sRV?49EUcHtq`uS$? @dh`c4A@9(Ree_n(^@pyHOs2m7a}7 zA52lY`e*3 1=T#6? zGGkVXyq=3VSiCNRRBKC&E@s&nbd=H!xUUz9FkBEeKaABf+hw^U0~~{`rP$t|oy=(z zxGxVp$-;Qy8!N2)Q*^IOLy=n5Tnhf5l`Ua