From e033e5ede53ecef3359bde41199045916efd8b13 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 19 May 2026 05:00:59 +0300 Subject: [PATCH] Backup for MikroGig created successfully at May 19 05:00:59. --- .../20260519/20260519050055-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260519/20260519050055-Config.rsc | 2667 +++++++++++++++++ .../20260519/20260519050055-Diff-Config.rsc | 8 + 3 files changed, 2675 insertions(+) create mode 100644 MikroGig/20260519/20260519050055-Binary.backup create mode 100644 MikroGig/20260519/20260519050055-Config.rsc create mode 100644 MikroGig/history/20260519/20260519050055-Diff-Config.rsc diff --git a/MikroGig/20260519/20260519050055-Binary.backup b/MikroGig/20260519/20260519050055-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..50220f5b085417efa1d8e4821cd1c3bb24086664 GIT binary patch literal 164162 zcmV+aKLEh*sF8C*fdT*@>N{GM(or~gU2;_Zpuv6s0000K{QrKS(F6ck(&={VRo?kN zdHhCxE>p~rxYQOw#tqr5!?=hNr7y_9EMa;Jk9A@aC`xpTQxv615Vm!I-n%@I8u&=} zu?&lgE$9FUOW{F!2J|xdjM~mDqC)&Z2qj^kBVe=T`w++r@CLDhKU$V}R|8ZD=fXt& zil9w27Yv>d!*rT(3UQ+eEbqIJ{`!5Q&(cMr$YcH>wK0LaIpIwv=d~kuo?A)cZ_)0C zY=D0=S7E?^~moVV+X#`)(60(Ezi#{sgA@;_|TY$=tU1z>w#c;tF3w&WVsbY-) zbgP?UuB6ACSe~>LyIaRj4pQ~`-ME%Ij^u4_79Y+ASS2ze!xYEEt-fc+Im_S}{|*+x zM|Tq?90@2D9CU9T{hWd|H!!oA)n&`h=hFu-En^q+8WHfX{aj{*YogV+3dAe_5J?md z0^A-0s{hF)S;Y^mYyEUdKdaiRO=PVgT~N;2Ckz7}HI|UC*hk8Ciu%}ZP-uv?=6!#M z&DSrF-i({XSPwd^D3o3L-|S`nT1hIu2ra+V4KZGgVwULczP2OEsbATKx@INKm;z7| z^5k3fb^NI&8*g_+3%ad`(Xi=tU|v2e=|Io#Dl7RkCM{GTzsmFrX#U+H{pxL=U1>S5 z!3nmDOSi||r25B#^ttvH?M8gcqNKQ;?WhNx=M{- z=Xca@UxH9KX4#U!64`nF_tAB-219nK>C_+!NKbOgsb?!$%VA@Ary({|B84mKQRPF~h<`T`ic6S=W9s8tBz>e{~ zuaYS}wbH!|^D45@Yv&H#>RZ`K9O{1V!%|}DT!k`0;jg(}57OEvf?0r&pU<5YGlN`Uaoe2$xnriU zz)sBc#wGH-KXgVn1bMu<6@EM<;Fx09g_x(E0Dhge{gm@$QYrGZiRkmI|5cacna^JK zf$F%38|NlKeSpnbMB|#8&A`ox*z8Ch6uz%W+em%(Mv!!4;4SBf@qNXk{NRw5?=3Y| zRI}Bbw;2FgGt2tZDe+dye4%NO@^3Z9i00O!w*KMNm2Dr)*?^DYTUx3T}*}^hFZSz zSgPr*LqR%?-ALph=osN%e)^r1+aS$@9>g!Mq%*lwJ5`76KL9DETc`aTim)?O_Ickf z1FM0f*}kaFN^9|HZ_y_$`UdO6o>_dNoq@s0_iAW8x)$=<(v`Fg3Uk?`N1t#i4l@Q- zP+wR|3Wla15}l%9x|lg>8KBX9=56Usk$vSgC^JZ-M!2`rfvC<Ls?YIqVZP6l5N2{!w&RCnv%vR5csl*xE!>4qVLb z+r;-en*vC&9BcTrlQLa)xAZ^>u8CAWM(-&Q(LV=w>~qn3@X)us~{vSY2?)} z$u?no1N}_ZRFhDVta`|f9RWK8moB#v z%8OeFO7l4kzru@uAun1pDh&HtRyj;6z>pX>&MMMkSNjQ^FDfbI9q%lR&a<%kij>`c z)prHM`o{KptqM+t5H(6!#3EuzYSsHKD-N1h1`0$YZK#+%7XBI+hQf6 zN>xS0NZ{A$1G--pftbf`0_wuvv~S>ZUK#bHOE&QBaBeNwi`<-YBg9fvNH~Iqtq|#L zPW<)dJJ=`svXHJyT3^OYeB2ONU?Y}Vm;8?Mt$aiXQsEKEw&!Bwvph$kGX)_di9T1{JxIYmq6UM9Ge@cQZzwziKJOr@Ta6!+#+-*OrE06iEP zw;0K5Q|}igbejA3@fkhE4NmvdxDuxP{)rjk9nS6i0luF^z@a@dV(2 z!@AeQf!oHR2%9zXIlYxZ43N=<{nr$eJ(M!UUjs>8^9A;B44=k_)yBE;j77JPimtkA z1s~JUe0dR+(k@9t&x3#`Qh1fr>~l!F|4T~BPhH9#q?(ZYw9N{n1#F-9&ZDTAi9m51 zw=`T5?k^*)Sl(kI2w#?N`C!GstcxuM%GKM}zYgAyuu3|ZsCm-~$TQxj(1sw94aDGJ zA{Sf!k!inPcy6AzCp8z2f5xFi{2X@9Ytv;`?7`U5AK zR+;&X@ipD&8d3=~dzMvz3`Nc?9JbU*>reo?L-H{8uTEQYlK5>6nMa8{hCd!4?s7RS zkyuG9LDvJ(ICr8O5Gt~ZBWJQzUP3h??S`OGKUZ-xZ_l=H8}>+na_9cK zU@}O7-D0Kceu(b)Y9L#>!@a7`+@m~utGso1Hdb`n2OweWOs2IL?*(tu$H>6(FsuP( z;Lp|ncDD1ZXFlJubJ~2mZBrIPXCDu~j>Kfpfr0fB@qDB~Db82;bGD_eET$t3ITfE7 znRB+x_A&rgI#p&V_6#eEm1nj8V1@JKX6l>~rQD(ve*x{A{}&Wvi7o$L#u01KnlQ&6 z*b##__6){WXuN|33lSEkES#<{xWUK>nrQVKlCNvy)Q|S?AHuX)Fttwwt`lggR8Y!) zc%5=+!xpmh;xhp<;bc+r>PnXMya*xI17vAa5i=E-QTFwQm(1TBjR z^QVh_oa>&$*2?CPWQN^MlnXd;dMmXN$>-kM*?nq?ow5Aywgf{iLE~Z5O_Z$o7F_+A zp!9Itr>JBT{qR`_~nT}K5_)3k^N|~9ZSy3nmkt-y=AhcBYDU0cM={3mp&Um;_Cb5r2 z9?f%Kp2Kdh5Vxi!#R(~RO?A?ZJmtayNzAW2&bDB3{S>lrqe5BcqV`g zASJA(0pIgz=3uQP9El=D;$N9<%I@0L$G2Y&r+mL3wH;mnN?f3$ue61juP=2nxg>LPzWRde?kXYcO zWyN~E{9iizx(-QRLp@34j(nX>zW<%TYN~X%yUV-6_MNeE_%~X=wZ#N)=)-TWMUt;v z*lC)5K$b)q;Tp($2s{|I1N-jmRrjeGigc~j`P@hl9=QT066wFLb8@RHb;&Ex zRf*}V7ZGf)%-$pyK?d`blx`@ZOO^5SAXY-hCe|FhffL~cGb|BO*5;CCdl8w{d^O_T ziN!OcNTJFfKqnwVJI+du#gu(tao(}Wj^q<*VZ9h>;6Ot2z0t~CKqfZ#heUH z?C;NBR~bac7&_r5F>b=4DV9*zgV!ysTvyuj-SL{ir1Wo!k$hjb5$HT0;MFeS-d+w9 zyV?VBx4wl^JE94f_}K{(bANW^<}f153Up@R$sOH%Yya*U;?8^8`CVgXnQp=LE|4cJ zrhm~Di*G;GOB8pYIIf)C7X5f|-V!C4-7krAm+>Hh3w|WC3s5rAZ7KAoC8vJnaF%|Z z;)261XSv;Ad5sL?j8i<%>O5Jfj=6dUtS6fU0a3i8HX}WIFS_NN8S;gb|E-l^2pNB* z_a7l$x)#-C#~WcBECYA4z;{5V==_8FgSR;{{SLKa;U!H_#OdSm;xKLQjpkJ7%uu*e!x{HBw3D(1m6;4T9MU>4R`r56V`Bro z4|%0^&!&x5sk5+7xaqINceEbY0^s6}Pzmadmmdvxk>NN1{``(7MH>%`J(8P8bZ(^s zQtz)1jF9x(41+kM)5lH@asN(o?%S~9a2uPYnu-3eCxFFwL6>Z*0kZ21clk4&|3Jfo zjZozaTSwYWW?uY1tR;cfR;s`?4Nlh!*qStJAe=!i9OK0&czPp2DA1+8VNvB0T4D@^ zxhLuN@wA-h>84B$Ato`b{($3L*l6^Z)1uli9M}Lh4%zF4F%i-Z)Q7~sqID^f-l&e! z3dzW6d4R6ETan#4TG=C1>}Us+6ld&q(Pyx9AVDM^3A9{-UT)w`iWy(1x31f__QrFh z)vqD(de**Um#WzztBO0=o08xg_3TsoJ40i$RvTX4vjU`OqXMsL4TCO6P4=M^ta1H9&7|lj8h@Q_KYw_$f6d& zPBt+!vKnn?QD4Ma6A77ZY%O{_fn$EC@qGvgS+Nl{{kl-ra8rr6=N?KU;FoM84*-@K zwJUR1fmOa{aU|)G-vkYadTTJnR5At_3?U4GCitmA|MB4vle(cZ-+_$_c3^lx`Ux>{ zkFg`dd8(<)fR|SB4#AP0rd7k`Xfwb0exBfA{SzH5QzU`t{rkw~R@*kSZ@sj8aznR7 znn9=j%jfecXX&^p5}Oe+#@h2V9CLUHe#HrsQi<{?KF+O-D7Sey+HeYgYVIn$3Vu7K%{^;uP?3eTCOiSGs@o-Ug&@YE-@Lgyf7IZXuV z);tD5DU)$PK1QpjM2$sVc2u2|2V zsYHyMo+^$O#xQQ8*bT(E%mWyYxO|L6Yki}*@uYE1V0Jpb|K8n_ow4j8yN+}E<7Qy$}0>nY)Pj9DVJB442GP$;nZ zTS-ymF~@D`B+GwM9^7YNJgvUn)8IQub%xRSgO0O@Aj4jh4;tw{S<(DtN6G2XV+x0+ z0l(^30Zs3z=5HzTEqygPn<4_iIlj#Chf*tGq%$a%`Yi}U5t}-tOy#-kfg3SoH4*xH zx(h0$Xq@?}0|h;6X2HqqM62w3q$&VzLfH3DoLm#ML{nm5m9!W$`;IL?uqF&>S-qyl zd&G&|sJq%_el6F?fvQ@ypw?x?v%hfq4DiU%91|Dm`vnz?qQm;%A}W3Sf8 zLQEH2WWWhLYBycI@BP;7oyurINz0kRX{=xhW+6XZ7DsT83Mbd5SdOHWLPr6OYeeaY zc9G;@k)R)*6>F6}mZwHGT(aPpJnLtEq9YPV^nm@WuQ?httKcBgoiMRU)y&IOO2exa za*F~{_6>~-^#87kCsKt>ms_&1}7#VA{(|dx< zFGBN3p3IYPfl%;_%;?OOu!kQvUNG3O8ZV%X2gHFe94drQ5vR7F|JS)S8eAY0!2!Vf zK_Ehc(;A>{q3=;dr*ik23EvRgfKZ*~U>4A8%+%h{BzcfK6EwBC%!N4iUk<>`nIM9lYKwi0!AYeO|QrC>0CCL8)$)mFCm$0E*w>!nAnQv!&;AInBSYLHC7Z{=DAk)6~rx~Guq)wG#n4mwT_8V^?vu?#cA9;CEhe`ZB{&_ikv zGTo-Q*@_Ss|M$0%P=;w6{1x?5`_18V4<=(+5XW^_mn1xx-fRB{M({AEFCvzzt%?X@f? z=h6DyFS*6CbAR#9f}S8l8ccW2E`_r*dB@JG%a~;dPgH5#^!4Rrq6`aaVUyT?2&Bzy z4KpqWF1f|v<|n}*y>QVy2QAKncdad7W{uG2|9-&Rw~!YHRYxA~!yKBYF6Ms~e5!0) zfmB_0$3LgRcx(iBc`S&~88Kn(kDPm?jr;ONg(opycZ&>lW;Wl5eZC<8=NA(mOZc5z$b#M^yzFG}|cD1pkaA$O-J&&oo;0C1f z2I|v-%K)D_uy}WSj04J>bkJY^8Wl*5DVxlgd`{C=wYoTk3JhC11?nR{Dp4UG@=y*3 zmo&ubQR_AZ=pO%-kp1WJiry~Fo=<7aP!xjpH=v0-a|EV-phnV1xGeUB+ z7m-ZOzk;wQyQ|A5o~>6dksV=Xq%|iCfBr4!p&ek0yF#xCK4mD+Rl&L`y-Qorg<5P0 zQ`8qHq>bcqYXduOUC#%*q$j1ouIEy2uA0x#WfqthU!;1!WqTieS~mYB$1*1zw^UIv zvx)CeHPLVJe{M*e2G6RX6bxBkZ0*T7C7b$W=vq zf;mHPs5QxAQQ!KO>RWRo-5~9TC9wGEHeYXK*=N~o*zCIq{Xe_!AAUpUC`^UKog){a zMWY)xnPb;?FzJUHlyoE{k&j>yJ(ZNFw1sWYnjEip_&}4~Bt<;%<7QAb8Kc`H()oJ!r2F=LvxxKaSs-(;QU35U22}gdscrm1_>+^y6Q7-8 zr`C06frkI!NEjELc^D@Ad&fRSVUb-IrnWqH0e4U7KK|Ca81wS@CuI?1QNSsn5Dp9& zn9!abv(dvefFE4!Z*8BHT_eFtZx3y$%*Z(URATh7EZ|83?-Q_|X+d-o8m3HMA{=He zLqPvNwALK(V0m9Z{-z-AE1V_(??+M0rw3(==p3g#9!Pe`mt_5MT?alO(=S41uc2Hf zPp=!R#JX@-o={it{gA;66nNrwS50*GXYI4bG2(;x2jlgFH2@F^#Y@jCL&SvK>iB@w zUpf1p(=FYxlTb(`T^nta?Ms7RgzdUeSaB{O(NY<$4E z>Hl5{pw3q&8)$UPeQP%Pye9$02M2uipIgDLvqRhT5YhU`we6zDJ~2dO5+bnsaGSnx zxtFTz|K+%o8qkQfJdv9(9O3tCgI3*Z!{1ciXL4V*CL5Ln6Urji3xqy11oSW)cCf>+$Q5Y`At3kQ4wpLW-&s7hv>TI``VfCNe1O!$Kk zsUa5P@~8{(L^PHj>%(3$I6INF`rufKHvQd6I<_SeI!I#}luS4w!Pin^z|T1kwU)P_Zhh&Z?0jpsKDD`#9`s z=nsXheDgp0OxZuR*|igm@27i#_FNf_`J9x@M;Pm$6q zP1vkJD3(bMr2?Q<`nM5i8zo>o2!5MSgv9xXBbI^7pgr#2CaT zH#zmLYv|UF@X`J`UawYXT@C9LoH&g=H~u{%#^~y+$PV(#3%{_IZibyZ83Fsws$<-Y zn;LpfNE{CAZjr-!b&Y9nSZl8D@t3ZfG8yHuwDZ=!>W;!-NiRjUESDQ4@a5V_hU)M906zA~qF$%D*7^+36S(Mf&uhHK1I~kaVzTZhqgDw&Ywo7P z7k8WO>}(oGXf!zfq5FE3C4T!sthDn#VLP(G>f`n#NdM*gF+yDJ-S#FGI;*e#@?L2D zgYIXt%=rmuYI^Z6{BXqRXjjtZ!f+uh)b%|<1^5c9g5bDCdO5Dhm<@zEVyQB9c07WB7;ToTwS2Piy1(#d64-*9X2h= zpYjAlDUg6VoC(Q?d0L83nt&0%2Vi*olaI};@}NA$igxrOG535&)cc#k9U^rm&HLhn zV?VU>q+qw7&?x%nJgg-0OXX=OA-MwNIQ5=Sa(J1aFpo|M;_19OGCsNf)yD8RjhRx! z{VqzrQun9_OCa^dHIr14TZ8o)OohWiKuq$oZovjg3B}*pp}!f=aMDM7-~-qY^Wzd* zIIs{wLu4(4u87ZEN_FUcS(oR+jU>EDX(%p`7ky^+dlGiuH>ab7dBQxQzPc@Xg9?P` zE3Xf=HDgSHSE$eaj)?e z%*jTE%C(Z%B#3Yx&5t2Yj6HbQEVFU=0ig=>jpPm(NVlKvpgSe##Iz*P>g8J^N|sN< zSJs&0ee)RiRxeSn*)oUI83y%|#v)F|j3Cs|AKm5Nn;G#sMwG4L!BHd*kiix+2g{;V z%X^9slX8qA{5iltJrr}y;MvSrf-E`WU+q3kL@}~~2CA%{mZ4n-q#%B&R%>%IikY!C z(%&SQl)zg`!F1Wavd(WtWP+ElGH0n4k`#(fBb%DP2v%0BPa*FuoUwlTCMLb1WlOGn zPm6I?C{vN)L%~>*LnN@l=V3;gLZY7Njy~Tk)Sv=UCnGL?+FYk5TXGK(xC64`JLorS zL9Wzcvr1w*+Ne7(S^7$ zpmue??Bk}7g{?h3B*saXW6w1FgmuiI!1b9Bw+A|eNU&=c zS6#rQLlzz;fLj?$eg;R7>ij56$B;8q%4|DDFjNNBk+JtSjpKaA^W$rJ4wq~9Q%!}) zM6O|*vC!FKDyU%W|F4sV(c2d)!U=(H?Vv>MBkxClSyrH25+d3azZ%1fUXI=;S4l`p zeF>pBq2&gv>;hw8V$Z!>+f+AQ3ukU}6K=!jy(w=+K+#Z7kP!r~gVtk5!zY(kzB$x_ zC$!D|k<~9A89}e1gaXXVB!3h(ouX`_v^gg6@lLmfN_#G5S_=zHeXJ`Qz;wk}LT(`8 zKC9`wo`6y+CtAT}wpbvg2w>czAlDI;Oy&ehuX}+qz${cu>vW_eH1#RcBm1<288Cz+ zw3O?pCy6Q|IL?f=pPs$;x3AY|#W;0eHy|)2dmn}rOF)*DU}TyQyxU#rR`}?zN~A#? zQ(ys2>(6+iPvU&Sa`7dAb=_PhzI2VIjC`VQz@hnXp*xY9I<|BlS76wSN(gf~M9 zgs8e$o?YeV3Mg&ii&LH7hc|jI*S={wP+f56-?CVG&k0AWoo5!xwxy60%?waJt~W}vHpGXCcFgc3>`p#v+OyWmzd+t z6{fiF;m!3ysbb#`o{Q~(p?8NeXFD?;>HojtgdotcR?VNnCbcb+G z#31_jEB`^hgWh_{j#bj+>dhWU2j|(S^VX!7A+InCN@l?Tokg4SOHy5!`uuB|NOnhx26sg`*tfRM({O<%ut70vWRLrxzae8kgqrnEG}; z%*2556;X5y1B_{afB&KG8>kvdojwr)!DfIm(HqFcsnRsk6eHb)E5C5xxP6DG@SNlw z$fYNxQuV&_R90ty9GezESHWi}6HTSCXIJH*a*R!%jgBr@;q(}O30(^*Dr|ZH%q>^g zkSJdmp>cFS4svR#$^CLnn_+UAd@zxK(ORffcsn+)-lN59h!UbN0t+paTR>25>^odWhAQF^ew`f>zBgzs7+e<&S#*&=AH%F8^}VVvieC*0h>>t%n6! zrKI>YZt7695<)D4Ji@*t7YZ!3^)^40eELOoRAW(OTqzC@FYX+o$AEZ38+I+F_@aU&DaaGv`;8g|zuUGnC8 zeN&zO%5y{gD}ZV2@_Ds?fByAuw8+84N9aX1+k>y84!vL;JuXCK8$1<+`DVly>=j_eNLD>*orHQq4TDfG2OoiK=F>@+1I zzuh>LuEV9EI6Sv!6^&0a6~{V(E)2B8nFFhO=*`hg_;@hm4dpC~y{*&0YdJqT%Y<5nvlRKj*mzXioSQA#lqrlDCNKE0Y2F_-*{_DLghZx+I46C%V*=_>%A<``mu^b0Tg2LvMUri(j{YY@R`HC zT;4FN^?KKGc`|qJjjvK}5Dbb0x35m|F~gubi$#4?hgg%>5>_63PjN5Cjb0A@>%zEc z<@!aUTi?~M{t3T7KH{YNm15u;Mu;Zwo?@+G%wDtN;zI5z{#Om!gALV1Emv;=!3&+M z{VV9Gc{*EO``(}$G`uZN`-44@5UZ#xRBolbtE30oy=Os6J?VyK-~O|8 z1%308jBLUU9tyMLgn1##vy%i!1!bI|CM z`JnX`>S5?C@+{gCDwSDqFEs?Jf?z>6`Cq06<(;SqEFcnTWz{E&E*pF_Ya8#}{9=I! zk1>X&2JH$q3Ks%LujFqXKu8lS4wjGU7Fc3B3>W7=S*ZZQ8LhQFUph$3TO%pHCK#8&ZTz@Du}ct)&V)ix*dlAocFaHQ%8qOVqFk#CldFJB7+7i zAT}vZMM2!5o|Pco$Z-h0cKC@B!9&_lmqmRGvTvJ2QVG9s|104|kDUGb06V+)*cfQ= z(X?LuLVHc0KZB#Q3vtWwyTiLAj`TC#*0!x-NS9}_-4)}uF$9wFw-JM1kN)yxR4=br ztZa`*+?|zc5oP?iTpBDC-LZ#Q239l9TcCcT)c`RAc!&zadq<)V$o~NFvaUue0&S3U zsrg{cw=E5rdyP!)XT_WQF$usHI;DB{pMrl=?N+?T|-W!6;tUjAxtKS##sy zi*42IlY0+9W`X*+{_9we&Lq$cSw*>|TSKToC64a68y z-bVnorq!)hvM*}2z1+z1tim~=Q_%d)q?#85w9+FioqgTC#9yE@0mbckzO`(QOgSti-&%rg>9iRd1j&bsf(JM-9bE5L!KACNjA}eIVM=19LfJfq9QsqI4LhzJ1|+jG z6K*Zxc+`#lpWgHdSPQ{`bN|EPF)QrL-i9nV zv;EcpAy^w#TM*e;A5f}<91aD-NMTYhvc+!O1q~l*BTszqzY_|H)UV#SVVe*mxhdZ) z@Ty}O$%yv1(g<)Vq&xlcZqn}(`?ikc7MvSAmk(`?n|IyQ-TlzS>)uC zx?GIk(&iO8?YGp_8XS-pjAQ>-eYItlCbHYpz_BG#8qkyA1roD`>O@1r-acH@JvV74 z27F<-K!eZuQ#q~2Crl$x+@~TjL@&QU2?g0f<^ z4_R`GbIcMv3hTvRkll|UEmNnjGu%k|WJ)yY5pC}Uni7C}azqRTrPZBD_xIBst$Q;J z9t2>d#Nwq+6|_;VU+jQXt6BAjHh=Z$nsX&|h~Ls7FwIA!v{8WrLC0Sq(5eWSi-58P z+)}z&q2PQ;NgfGS7vhFaPTJq+gYi$`syfyUC+wX}G^?M)W&6-u1#EQvXQM@A0=R-| zU0@B7YBTke;R=MwiabO*zRFw0!v|Q2m_=$`vm#Nf;B^$UteBZA? zBRXP98MO62ZZ!ZYBrC>V=*l2Xd0~ON6Q44TnWSnA09q&X7GM&(CPhcLjN?y#NhET* zgBM(u60}dYpNo$a%DY7V2QaH~$$%#>%GuJfb@jBCxGxGI76-P7{13IhCa-h%JO+ByS$`1|2!*YJtnlB* zdfW^_8#PRJJ}PmjDDOxSj8ePU^C$7fTGiAgkF5lZLBK|N>*WZwIlJ`^sM6doNeD3z zqs7afrnpOs%AD5-n4|%oyr6qn6v32I?2b%W?z56U-)TC`Jfsw@CZD-gcv;O9y)J^l z*@f5XQ9hBC0y$s9joq$M-`y|oQqR~=&3Y${>`;C<2aoq^{_H!Q_a2G3+hA%+8AuGZ z^toZ(#Gz4RH#KIo7#2Uutlk+QBP&?Ac9jf{G!TO-NNAf_CUf5DpBwP?%i~B1*v4zW z>0)Nc99R zY&Fyyn`?tYq&)8TIFMIT|>yxE)nJ91?oa?;>B_C!D#)rH+DS-|M4Yt@twkD8LuiGSw}pM5a4}9 z^*3`{xPfoeq$*NU4&n8_X6Onpv=JZ$Sh5AvXvhxZ$VbR$jyIAi^jnu$|4v!B#L?D_ zBvB^H6!wFY4)@3Wv_K%7q$5eHYbW$M%_+-gesSB|v`Q^%#oF*_AIiBN9>VLMtE#5K zhb4++D_1=x*nN)4nJk5-vb}ZTKYXlcds`MWUwKjMv{|O30r5MHNhMYInA#hMFG$}tcFY@yeO2z~=^mM{v1}mQ< zzEEvjHEp5!uu~I5p&v$XaP(Uf)<%l=Ku&L>FD4^DystFS^}Y}&EBMDzhSz|#;Ck6+ zj@?#uKQ7FfZiovIeyg8U3x~(HlJ=^7FvlAgg%|eM#jab+p7LMN72Vu7PS6TeH19UhfmSxCFm8<$8>*DR=z?Y0 z!3DJ*=yU18U;0xR`w}Y+@!RltrE+c+H~TO8ku$r>x@TR*%Hic>qb{pIs>EeeD30s& zEOT^~a9H*aYu%j_#`@Eedk13?dNpP(jl@IgJn-#=X+~$q`A`fMdlmlv1hq5Y=6ts2 z`wrQ1yyThiq@@7ngI=#ii&@*7hlO_f{$M^`0#0cJeWxe%2{psW9})!!!N}MxQ~aN~ zEX}4XZdja*pZVLjba6m|Q`6t))g)+{q&XVQXL;_wlL#&@NYj}sKv$eazp`nKaNWOz z*>T}gNq6xLAoAK%pg3r#Wc8=4HzP9+7fHE0ZcAhc_dVoKA+8eWfB>(EokB|);yc_h z>?kuGPdLnbgr+jb;@$enA(ff$VL#@_lj#R&9-sq15xKgA zC*%6e>q#KfSyq3FfGeBsmc=!^0m=-{!1Xk?XaH-%M%9?qfITg$!gql@JA>yNV@}^U z^sXcHIs234FUrfxlT0V=Z+DDMptq8>EGl zd~2f^NO;m*pjBR^Re7jY)t#rIRm$6+1e${L46|_!*cvmuWP~*nk$SAfIdu`m9+rAy z1i_%_01h}s{Tft$$`LfcbVV8tYnAl)UZ0lBW6W%#JpYr#@-Y|qcI0>T@#QUq=k9|O zG5BFo+6K;(DCbauJxSFAh9ALJz~` z-_Ihpjx?t>VC15q>M||v?bYMH$=OfpmT_m=bd_P|*Y3Q(ibJB9E$!u6@}3m7;G(#H z`TPXQ-;30@=cz!Ri?FZnXDq!>CGbPX1Lws>6WG&_v52Mo`r`>RH->wwf*vxmRB{o~ z2&{dn7^6#2HgyUlkm$5+BsSeU_NEa46j%8cJ5dWv0Hz&M&!p=|+mMjp`^;+LXH++g z@mp@{BM=Hmy}=C1?Lm(@k^OhIMWaW1^J`;abHw=<6#-wz?|j}+kYT`gCyw#2TCCQ% zhqh;f8m}GhJ&#jd-eoP+6|gifu8Sm}R8RIqgg?rl;+T0@iD?!xa1f=RPYE93}I+w;~pWMobtEV}>Q3aYE zki?x7inQUwt~Gub-JKFtwo}~GzrJPMYc+vhuW)OE-@0#XX%O)NONRQt)dWsAGBaII znwukPH3WIdp4^UcR0EMT#UwaXxI7+LUQUJPSPydD8#grMtj2o1Ax<<0yM>Dmu9ma< z!eI``I+Gr?BJ$4zHdq!4FjQxsVMCKE$d*jE5dS{1ZvxwfyNnill+5W@(N1{bETI6p#1idr9cvr$TS5SDJxd2xR+h~I{s!M zxfp&@vk<*gBwD-y2P6N0U7gq{J?+P7GfZTjZ)@(3VU&$T36ub->qup0R7M9MZ?x0$ zXIhcV+&xG^UmA`FwsmEKc+xiB=z7qJ$1ws=GHjRBPaSDDDZvbr30~`4<9LmQ#nGly zr{U4-MgI4uc-5OEaUsCu>&~0A7}BwAo895}EE~r-16%Ls2La!N%e;Vp+nbEKuokDWQRx zlS3}LemDs>%s(pS-2tqGpe!^GTfY-JWX|%6-%-mol<{)MyhOpbTvV8!+YP{VkPw|N z!{*_hVt#fZH;Cfz@cl(M5vae)b`nf&7!zQsX>vuEN{rkJsjb6i!o-ouU5y?ErKgl_ z8s!lPLy@&2bHYE(mcPOT?*sgw)qnphPHt4JY^P|+Kg?@!P)eREzTYAIA`f{M@wonu zm&C*BEoI-x^x}5xpgzT zH@%5{PUdo%eD}CivtX!1vdBKZU#W<@(t_9vtJKxUefL03Ucn{;l-hWW!<}$u^Dxx- zi~E$>ie$V+l~{m}B>Bs_cg*7!4G#ly{*&XR1hGuVud|UfeTSvsMsQ9%-s zs}!#kg9g6|Z)c!;6X;n7fMR9-aZw7UT|O` z+kBBu#+xb8v8PmU04U>X4TH_ zz>-6N<9MPci`_Vx_uvTnJmv%t?Hyi%@Jf@3dR>Z{!`okQExlyY$U&<9A@+lnhiX9Yno!Df@Kv`|J9hU&(MKG98$pM>kCm_6sF?vcbn}X*InUJhr%N=)A z`dG|ITmEO}wR3I_Mm7cL{oyA}1E$m2T#s{EykQR^)xe7*v#W>CfvZwo>KHM9a2GjY zz{W%GHdb(`z9rVwXzlvw(Afzeqp8trruWncVfa@QKeeMxxH|uTOGMI>+G`gR_~(Kx ze0hlv7+XRMGs~d!l^x;PS3VOxrGBrX_;3p$Y#36(;R z7vUwkQ)sTQUF8(@kKqhwW~>C@Wef=Bm~ibPaQVkBgVZ-9&_U*Bd%u=BCcQnNoM;Yg z(Po7Pq12OEaD)5Qhgfl39`5BRFM8KK8LS<-gMxkWE+X&-b=)Mr3flXd19au*-@fM= z2MXCl_FL-`rs&5i1(2)sR;iQlNG~Q=ncS}t$}R`s9*|xO!)hMpjN|juoN>Qf0mh+9 z$zO-+DIJbGT zwE}mZwvEu~rE7`Q*W58@a1nNHNyhngD_d3?nm-`7LPYSnlT>$D+t0er@zZkQpj&}` z_dd07^j!A*IH!dgbXXA*fFd&QtBt0-j_rhLCv<$Fq3}1oBWPYYE%7xKVO!2+mBLa1 zc||-vd!sO{SCpbqjkoFOTxvjGbFg}~z`p~0nj}6-cK2 z@A@~QVBZ%sDk6?#Ym>{&ZuO(Zy+z2t25k?& zS|PXSF=X+tAEP{ZdH!im2^@jZNPJWi%mF=sc}KL(nTYA}?=JPoH?w;mO0E*7gxR;S z?&@a+V4K15>E1&=lA%PGZC?T)=b5iOx%t-s+Nshee5Y&h_kB|dbSr}|LWs3KiG_G8 z2IBd!1XnO@Ejj^&?*7^QfaS%bzE43|SRy2_39BqDC%^MY@rZ5wfLTH@0@tJ(ZX}OS_7V&%bTrYQUn+QE zK14mIQ}@V|)g$o&VEjJg*h_8P=i3#2mq!da;Gln6qxq-7Re6SRX}&G@*rBonrT ze11j`Na*(GYFzOx>5v5ZmYRINT_0M{@@wqh(qM#3>Ed{=t?DZZKkF+(!BD;#gXHw& z4D))K8cbBO)bRSR6E3oi5etA6x~^C&h;t8B&({sq7CjZI2$H60KidQ2_xoZkR>W6uJ;N}Exm;8fHu(AAG?xK z)+$=KXh+_&mubg98NJ!CxZJHJGaiH;z167iJ@eo&N)oz67&vq-uvbu!ISYQT@$fL zOk+#(Csbp`(EIrtQ;O5r`5WZSTQ+Ab6?k$iCr@9Zs5C(oJA&1FHZ%$S{q$ zGCGqLc394K&^JVHzs;s&t8ZAXN?x3FztRD-NO>SSC*j4Xm1?6GFq@+CSJREUAVblg ze`#sXEyLS*njc}t&3#`^RTGc+i;5^(+q!RQGY0Y0!OtHM)1I>0(? zMKTh{C$|fs`TZcdXW-jIoI6pleV20R8BB#AOl!UerfGwWA0XrDWzGJo=XgwcTT$^u ztJLlHb!M3sZ1AaV@ks+fR!(%9BITPTim<}2cg__o!p{y|FbC>WANI3&SLp$ zKScr%G_ufW$6f_BbDEw%zgaNis<3>GD=g%|HUX1~93%K>^DSIYUWeaa-XTrFC+9dr zLPB~-8{6T$u;(jR+U94;FgM|K+EdtjCDd#6QyIEo+YwJ<3Mpv+h@@`f-?ly*dtca8 zO30I>(j$`h+?==X0X3O&>s*YHMIKT6fp6J@zahmqykHW|UjdZpbMKa=f)O!Ji{2 z8S1SH3puy{~)X6}$@EZKjowls;GKmT{{CB$Cz zzn;6dSQ7{K0KAn*$9cBI*%i;SVKb*0Wjg&Muw3ZlSDhsCW|6P@a35REf)qCt44m1O zE2vJ~B^t}R$PM>T)zq%q95#ITd2vT{tWH$R`qZ14OTH6kxK5#EICN^2U6tFYg$&jk(i>8KtIL!m1bCg3z@*B_At$rP0 zhN~m)cK>^G5<|_H&4Y{bU?_#;1J?wnw8HAcc@3@&?YwO#UPjT-v09(XEZ2CD#&KpV z?#WAByOn7j@Y3e2v)lyPHj+K+_gieDvoVuzC5esiPSD~-Wvdc?Kw;yCF3|C`IN@__ z5~@iY=mm81vp1fJBJxpqxz*kzm2N(~Tr;DlQty|;>Gr=Ip(ViJWxj|7>u92{qYA?! ze(pysQ@63R|LjMOSDgA zd;pY8J{`b_a^jB+Y(@1=+CVT!FmOtpIj#@j-x>Z+tYaCKt# zJF4J=WzHXFi>(rJa8DMvlxv`RrIq(Vr+>pt__Fhd+zf;bb9Deh4^A6XSutlT86zUp z3Zzq$cFVE0$7V=6Wd@RH%yn3?j*k4S{fT9HhbxmFP~9)z2!e;_D}F4SBFnDy86*O8 zl6TuL7!(y^Yy15J%9>gsr4$%PO>{;Dhfr01IROKjj3u&Jhu_U8)*~Hd>)@EYGqydm zeub@En%M&_jmOAlN3@&voH9646%Zf8Z_*){3NcJN01)sPK7%$FoayTe+38f;mm7AV z9R#y@E;`7V?mO0j_~f4+45?+NT^=} zQwcG23oNs&p`G9Y#Ub)dbzK@)_*5veTCt(iD-%n{jdEjXeFXB~9^ziOg4-QG7g)F2 zDP9mgfY$hQYO85#MEQx{ask|PaWWfqP~oO|dat*FveptJRFL>12Hk-7* z8e&_Ge9}=E9g{bB`}ORD zS#@N}h=WJ>6!b>qad;YDDfwy<#moi{)9A&f)DaftV&&s_mqnRYD+!13q!DurRS-V! z2~%1*7qRJN{45LKvs9YgXi)&)c1Q2~KuhVxhnLFIUOQt6P4lvDX1Zlo&(9c)%XpYA zS4_2zB<#Y*7IdGy8O&2CPXuA3-AemKbl8N9k1r!XIaq&BnL$5fO57}WBO;7>6#6(u0C=w#Q)U7nM&USr4?dd2_MsHAGUqe_f2%=n z)XoOwg6`^iill;sjFI~`*KEW%+|V5bqJ$nSltHcb7xVPsb0E8&U0()nk`9?uoU7+a zT4vGRAQkkNX=$7}wt<>kBw^j3W7a0AdwAQY^rL*VQe3*2F)TwzofD*gv1B?_nU!Vj|V%*Vje@gYLJ? zmZ|ue^NATADN%u^&deq?cOSBhXB%(rhzJ6R(Ek)q*}`K5SfcEL6FI9DIwjxe&QfZ% zX7~8%h|vID@6_g+Tc#wNcf5F=<^>up@HcKjKE0e27B^qsbQXFepueE5yPt$jUdRk< zYl6Nh;LNV5zmo2GBKQ=ykmk&W@D|(ZrY2AZpQ{tU zFe$fkrG=pk>j+)?Ul_g-UK?$oOGRp!y4D6_Y;O82pqxVccWpgJUz&;=c^~ln;gO?_ z;zYmH!Cn=F$by1txze;8YK@j-1jy003Yo@1%%tEvn5zG%UXYzw&?&?>Fp;tpYBso3 zR;6`w-u6LkPv*%zJ~k{@&RS*>)n_&?-R&gzr=X5nD@yQ|57RV&LK1)s8)q6FO-P|n z5U?-~sKhK`UGKDZnVJHF{RXqp|70$Qc4l~r`weA-*FE`>a_mQGA`Q)Rgw%+=7S=BL zmy+}PtGZR{y`4^Sj`7b=lOb;Rb)y7pJ7+7Gt>BoLgsm_MEvh8YQ*oY(ueja~j2Hl6 zBMI?@7`nv*#oXSKol4gt*v`f2G!im(^Y0qwY!3FT>yQ{7V%9vdFxxh(MAYY67I_J4 z;({ZzC!8bi{QQ*M#(B87BVJ}J2*}~X3YbWlducJr0lFpi4=WNc-aQ6s%k z0hm4Evu4InR{N5plX;$eiyAg6@hJM1J*o>^IKhoGq@AJ0CGSJ2C*O}o5ajINMRH_~ z2aHWD=3FNz=BxFqt9<-7R{XeOkM*;K))Qj{=TKD~G8EYqJdW3vo`Q~a95ZJBSkO<$ zCos{VB%|k*G}5()wt7$o5xBERT4^$Td~N>2LoUmWc-OD0sQdadQfTrXA|FiTP-zYlLWPbDk*8+qiXFO7qU3r4`g57wFfS1D4?Ig%eo>7 zvdX%!Zck}>WjB9lPf_A^YVq!`l^$pFv*e257xLm$VP@2Z=)lF|ASIzdVjL_G4xCEJrI7uRL zc`mnFPDVFHJ&j45b~AL_buq(0hTg7J&YZp|YyHg_czLuUykEW%BE$k_ADDY>U@H;$ zLnwPpDS2h^hvXS2q-am5r4?z!3t|u~X4Tg2IlD9`h|CZ`ejXBv2Q<^oASI+!OUm>f z-_-u9xlP@TzH3*tR`N4YT8Q2A@y`51b9U@epFNs8(GOhCW_2V|j5bToZyN~PeO@b4 zE}t4y=nzO$7gK_V8ob!kbFZG~UTFZd4{l7U6L`v)oGPJ3;nwlGIv=X}*&TmmV|^Yd zI~AIq{uuQKb2Mcu6Rf}G?>~^Pb zKiifkf;d}MfIJ=hk7B>yGlOAh*OfSZ8AfTl?)GP4l%3nK^VO~?Y1~CsZUpN~G#8XQ zWssB~FXH9x*UI-*@`K?~N~mBjazw8~e!aR8vV$!ygx0F0{jw|6pNiR(cQSm6?ps@G z=SH2U_Vk39*1hr!>(pFg8z!4L1qWU*HaI-&{)+GUCbLP*BH`;g7y}L=}kO~M;z@N z_G1jXLw?o0Mag!IE7w$c_I+q>JQ4E4WgujYtBzN7AuOSO7IUa-6zMo4aU&|ix z0pLVuh*bbTbCy*Xf{@Rl6`t*peg6O@DSR%r^FWdY18zhFuTGdgdCn$C^Ry=wr&lTD z|IR4yp8kJD2ep#=q8AME8>mQK&ta7Zks-}{W{i%zB80E@(a4cim-@9bWsE{Pn%TF| zNr`JwTCFzg`y3$ps?QG;3OOzaewbOukCO319e!rRf`t0dM<5Lxl<#`K#^otj+~@(V z8sC`ruv0c}&3X&-Bu&{mxZ|zRg@=T>r{80+d43!Mgv49k2tQUUt*1(mBpbe>K(xtt zASjWM44LOnAbqUd*LbA4(%ej}2uZ$)@g_0Jl>~0gdsO5+goxPa!%bB$!EAT&PC zDqxE!B?ObGRx2Y}xqGRa;ZCwY$7+$J{#!}igkp)ZByGc%WM4XmKx!RjG&n-mSuVFS zY+40<6`K5;k7l!ZPZ^Fi^w6!mZLazIoW(oBs7Z$vW|MVPJC}kXPzkie+2=0Y#$2XkCkg~%#UMcw29hSXWTA ztKP3hvZCU&RB&cj?T`*Olv2tMIkY?9J8MnB5XvNgUG5=|rA_@p)vt2)UMptm~BZ$28@{V(OZ*7efHgsqt^Ib^97H4*NKGb*F zB7HLerd^G$g;G=GxE+1(Z>->(>r7=rX15~v`Ip(EQwS|nmvWL>G2*h;?Vg~^_wS4| zvk;xj9p&VK7F4l2w6}77D#(FzXbzUDV5HyGZLjpU5KuQ5P9Sz0@oW(F=3vGnd~AxK zN{yd3UUsEuIHIW^r@)4H%rc{&E3K$^WYWKeEo=2?Pth<2D?s5QK@Mf@q~!+26v$=$ zA>M-v311kCBPPcZdb6yOJi5>kB=$IS1BC=v^!`=D!p5~Tx2w< zJ92jW@=ndib<*6qeZlMY^keNT>P+n;2lCjdCof1G19v}3epqYhrl~fXoRR$9`5w!VvsAqBTAarrzow!6}edIVF z!Ncuayi*JSY+mTi7ig3EblD!5k12S=Dd{>Adx>Ke<63F#!=bs$6aYn~c_@1~U_r5! zX(G>UceE#fo{cy-lm6XUL9R1?>bvAwiSE;70U*t#olC zpP5zuChl`?NE|Dk>^HoDb|S3LhBdw-6N|JNlL4?z9^62^_c?NBc8fg@l*Qy>`hu zL5s$|29(co8()CSP%-y3fhWdfy$WXNf&>dSI zC+jxz=OsMc9tqJOW}hg*@7ahWA;{u9gq1z1cU#Zv&+&}_nvRXNW(3fmV9v|$r+O48 zWn=svYe|SdMEt(RQi*4_x?pIJLoMi9kwyF_SbjlZWf;50eXUM{!6PZcO1~PMcWVopr!*&iMf(GSPd8TAVs%PaK981X!*Ejk~ z|Dj1>M*ThN*793HBw0@EW~MB6mHeCWc0ON~=S!d?g9}o9W9cC-&li{xD)2xa8F*oF zF}O=r<|P_-o^tutiUl>}PSUZK!6e0u_9xiPe}$h|0a41fN(GAcA!#Y4#xm-J+HI2; zY5*5WpI;&;{}v|hD}`Kl<-6K(Q?u%K6|p&S=;8zZ)A)6XitB^Fyr@( zJA$}q$yuZs@;7Y`^XT;x)-8)H#OoU-&3V(Mv9$6jXZt7cL&IbwXbGsdsv%q;K0LSmW!oZ8V3UE*pB+7SMstIM**LT^9LI zz>|CO{ywB<**l}pM+0O~KAP}=kL(>uI5INXC7GxRmuYX1 zMkMHUv_m3fyD-FskK99Zwa~D5Rb;QzjlSkA*Z>dRS9PER zzQ1NIU{hNfHJ{GTaG6;O0lnDDv=u;Awjt5dU}&2waF(rQS1+0T`K-nxx+@d`WaL7R zEbl5z`&K7T{;IMA2<9-5(!?{gP_z8}bfB^YA1dL=f&}C~<(XxDl zDzXIDWjCgQirmAG%KcJ53Pnv6|6X+Z=DC{z0NFJDJ`PRWa3t0o9_OYs?KX&|fHN<5 zWMU_p#^{#KKa=^8ZN$AlIPR+20=Xeb+WpZsNmf7Rm6F>o4%l5GEke@J@H0U9HZnQb z4iK+%ftypAWyms&0M*i9E@U=^ZZ0R*|NbO{g)*Rl%ry2ImS+b$nR=P#m&lS6I7;yHoP#ci3)#*_;}syI(pES5bXJ{vd_MTeBSy|~zzUDEArMfL?p_@XqFcKE z&qnkp$|r(^On8u;33(=L5pie#gw=5YfkO+sk@=De8sNjU8nyzJ^ z3uPr!*Id1uSu>Atfyd2MebKIqn@em28CEMr6j1A+25{0|r zPaQO<~K7vy;I<{V4F$+M40+&J~~{ zxJcIrrwo77V6+T6bbS3QOO1natUFiVlEJK$Oj=MM8K6!c%A#1mC`sv>0{wn}6Y?8= zZCbTb0lVIWb~k9SDJU#XinkC89%Z-fFft(i5tf|PuGu^KPCDkjeLepw@P9T`%ntq? zwtOZ9U2{w&7)(U5E>4Px1Tbn%b9pW8O12S_8T@=rP>&{D_&3;le*-N;y-KUielX~;KpF-Wbwug`m1 zv3E;LwkxzUDV7+;{Rx!V?&qHl8Qhpxad7n8v29O;FY>mrK_ymYjD8ug+(Q{LP*f_3 z{4`Opj?ev|9pO+mH}o_=Wj0n_lEEUYcqEAyq2WQjvdSg1zOe=c8HoSNfq%zc*2%5W zTKMwmn^GNW`t8UjGz4!s%G_1Ba6d&Wy&3(6?(GMYic^ zDq8afuK{vX2LRsRP6`UaVkAydZ^~^ndj_d*ztAl8L}Yo453B0VGR1En*d~pKPMDPZ z%0Q1kO!(vng3z#yuBv}QAniO4z@psXPex|331x10blQZo{n4P^ zZ2%tbw=s>Z0Q`&xxp)pH!bYOQa9s%J5pes-$Xp^fr?Bxmcb5VAKDmoLR1L@|`v%-A z1p!~r68lIb`J6u=atXqA6MVjleuMvxK_fg~FlPXAK2-k=@xlCQ_gk5~MVXSRgj6Z( z7qKfW++3hOz~&8;cE(C%a`_N^lr$)V{{6+5kbyMvw9FohIE3WF6XES>>O-&C^=B!$ ztX=QnT6o{isy06%HWa#1$QipilvTUC5Q4TXY+=v%q%v;%&?N|j z>m5C?lw~aq$J0_A;XM<7j%X+;|6A0cs9$)bR(>7vkcUsS86>?)(P}DDw2Cq;wHyp0 ze2AyVI|mW4;JKJgI1dZ^*h6=51vA^sZB6ZY{|?jzZ;N7b@KBg{~dU5W0G#q zA!WqK>9;w5JImg=-H^?^diRIMOdhLkF3fmR^xYahQc6E(acu*hUWu4Ww4ws_SS(fe zTXNE#b*n()RNg)8jfAb@punSBkw<;L=s~C%_Yg=(^zmq$s$~QRWAfgZjUO{noi)gE z1hTY+LbHvt(q`g!&Df&7QskXh)0vuq(eZ#V)X#R~gk2|r{34*d8PVssB!=R!`*Nv+IE%a3qKtwJ6g zF9PNfn}&aGy_Pn9qZo0%;deqVE|P(mkn!mI@^x5wYW@)J%Fe+ep6Qn<`$9{v#(^b`iP8X-QDh^wzUFU0plYCWZF*MHPYDGqy%e zk;N6J=AO1F%#NDgnF5tRE`jO8Xq+EMa}U6I9}1{k+I+^M%MKZcDJr)H)MlxU2v< zLsA0>l^5V=2mniSVsroNrZ0JMUTh<>#n8d2YknWaywk!+QXUyj1P}iCxtK=)01vBGTM6ANOKpTPm*hD z)*Q%crBC05$%aNBRry>#C5(99LD;}^$xCELgEm~1dU-ZR2ahez{}KVA9oQ6GKfvhl zn(H6s3qb7&zT`Dz=5-Gp)vT+$Zq2-2wU9~IDDJ}3yMtN`7JHu^8Ny=UxB_hoyGpl7 zn1ia+i$jV4Vu6ba2^U1JIx&!f_1g#~dC!F1VDsseVT8J~Ima&D>vf3aTSs@ywFL{`B}gL{DXf zR)A8RnK?0HplPraJ3aqg(8>&z=y<_ByTHJz zP2pahiBjpy0|6H$JLwL%S!D!)+C@RN{;$o6M>J>2_n=VXW6$7EdNgo2{Bx~<8WwIf zxA8oV(%=i$#E}S>l?>v;Nc|Rz3D9nxHGuwvQ!UEdv>}L@A5XL}S7&4=H=-jGICNFq zyfHedlU5rcr7;C;V~+Pc-Oib5kxvRw%e$SoEi@2mOi^rARn_sMxzS5g(72x8ViViO zJu8SN&jRq;=Pr{3XL3A@z(1TJH5cnRZB@EXVj@AW_>kX{ib^+S@ewS8KkF>sPp@gro!1;&R)q@U6ZIbt1| zM&ksDWHc)1!nkuRToiinX&2`ui%EADljrJhpXiJ4Q^Dk1+_kNiP?Plp+a$ZSJz;tn zH-aQmjL*PJ4>Sp@l^nVGIiyay@Cvbup1k|ODnwN5xdGq* ziEa2=q*e9f9wEKaqR{==upzi;eKFR0=Mv^apLB^q3oR1yi3jWfy(3Wp^lx(3Amcca zIflDc4OwVLnESkr)|q13qi-H;l=0RpimA)RWd9Ue*ryqKBS%a>gV+kFQ(Yw^QqSo{ z1AGFyzcI;%ug$3PPL#EgZmFNNPA& z!%TdyCA7{`WPd%uq4m1Jar0mpMs{QX>0Znp_AYPdWIDb<(MkEyg;hA+$GxOya2;^! zN6g|Jl7I5mk}fV)g#Fd=@h2A6KN4cI5+!vw!^Ej=IqnB%R;4d?U;lGzldSE}u^}zl1X1K@xfa4L&N8VUu`_6SjglW@>@-oB#`6>yd z4x+|XOb5qlV-g_04dV9`2Soq-ai!~mI8BBvB!B@##uvk>eV2VF){sX*c`g;;oHaSEVpW9}S=<5OtaeYN|4qp+d zyxDNFOnUVDk=G)$W6(YqIP>#u21(W&vjU1B1Q9elO(AN$RQjFE1~E3KiQ!(~pL5#L zkvxro40Y4;KDpYC=G(RUk@}<>t*n@9RY+B@AV^6>?#%*xV`aNrad(sL;~o$*!!Je7 zUVJ%OE=g747LKeO6Q3T$3?u{2LVDM4SsjmK5c9ui)z9ExTWZk*$_`PA5%Lm~k8;zUqT9bW75EGrdL znyG7T?`TF#%B(GjQiBZS&5FqP13(faM&e~2B!lG)?$`hzZEinc%K-oX#lR-xLi=FD|0+sXwe)bq?r%H(z2&^JYu?}R z5xvN|j64hVgVLk-+LjtVngwg}_~GtM4(tcdtchKe$yB&KdHfjcJ9^&nlCecXL{wM! zLHFRlXb343jJlcz*q4?uN+2D_nMT(unN z2(Ab!n^rO+WKxwr;qxWOp1TsU9M;|Pq@)zE#GDQu@wUdsk|_VHx3ZonjIrHQ%q8tj zHHOf){)Gqb8v#n8^%AIMmA3PLG4=Fv(LQzxXCGv zIN6$XKg9#*znh4onQbYz?e{#&rXmPav72I-2ibMpbDg0X-;SX%66=c|Igd-JH8=r7 zFmHN3zo;2OC??)I*8K4@&T&@eYF~Rnz-6iy-)CTs27>5&W*hnJSuaw>iaDI^{7DLM zHT*eFD?y0SWW`W`YaLpi2VB6DUxv{x1H05V9Yqd_i9HK{c;wp+_pJkOZhGIq{hh(U zS74sLvLwM?9&AEU*a8+Kq{q$T0d`#E#w^5HnOOBmnI?={5{*MxXs?UtBUXOO9^sGi zN}YGWpV8Bd3hYgm@}v}&K{f|L%!Aa!YGVZk0T!Hob1GmAG;pjaoCmLRUa``kiGB)> zoV1(oYT|Kd?dwz~bvcFXJ0&^DrsiBjQ&k9CBIZLgrPtyqag7)kP@hYr?_t9O@@+s7 zcn@}bH>1_AVoN?$<4Kw0{Od6E{#U4+ zxmGbgS*`o-)6=lclwQy3$k;AeRuv${c^yOaf@wq-nTk3kQYn{cyzO%{I8p#^;W!$A z6zIn^;134XoMjiB;!uh!1!w#Hj^rIh4_B%Q!)H*d2QkMo-}<{Qro zT$EG8vRE&&Gos0P^Dc(dM9W9W@>0-UaaE7y(vV&bRFGa%JPf6t85jK~`CdzzZDYr3E*E8pnxg5itii%sL~d=AxuU>2YiXoTMR+(IIGj73Ta)2o2={TkYvFp4MqGhIzpTsF=6MUQVu{2j+XZLY zGG(2w?ji-h4F=IvK2OJace2?K{<%|^L4})bD}}r-rX~?10ZgFFbvRhNI0_6{QV#97 z2|brO6m_y09N=$;7_OD3YaZ^o3jp%O2K(h$CZZCR>*}Enr#<=;qt?PE_}?-32Mq1P6pKAUOhi;5!QD562(cQQ!?#ni6G?)ju3 z2_h4E&Sj#dFL}=pKDCYuOw0tWyK4-L=f851R&Tewo6P>K`~VM1By5VYWI-MQ>^>DJ zkWMS2ejN-h0K%9(9*Oj4ZQ=b}Ht#zaI2dd~L$kQ|?oPTNMh{REmfjR@F7O=#??~Z2 z>T=}!1-}Vrjt!0m;lc~?aw$46>tsN-lMlu65+i~;b5tAj3l_0guMBH;Si;(aLdRof zEIgSewMwY9kZh30Br3h6FQ|=tBAW=MD?Uj7SY-bC=m*k6&5XHoLB}hbeM9*G*+iE2 zz8?P$MZJWA2a>;CK?xg>8XVF2wyi&wc}Hy-cNoqU29tFG_enQTQO&IFTbQp#ctwhn zItIvfV6r(Frl|#Atg?Cy(S25#B?#X-K6#CxNIJ~r1fBkYN=k}`&f_`aLz+SP#m!_bD_V>{r5V!S|x+QJQGiXC)QY`ZMRc@q9g}`seyeB6O*b zCK;L-E1Th>xn4>Z`l_`3SE^${~DM`;*K!a2aqKJx2^-> zzO;Yw`<(v7t?65==MbhXdW8(S}WLcirc4s^`rQ z`gJh#2YFL3`~X@r&;NJM9I>L)w0Ic{g5K@Yi!!tT4U$Ql;iCLqXl%o$G%LK~`9B3h z^WC4gN~3h6ou>u4p0{tu#29Uex+qB@xC+o)|0iH_49Iq-O5r__ z%y;&ijT67)a9byxP}3n|aZ*1B;ZSMn*d#whM@s))#B+<2q2{1V54 zJh*p+501N-j45$GiOILq({6`cn!g~1dS)x`N+Y{)k?0FR-wuUBAuNOkd58}t>6yg^ zK5ardutl%dMB@^O_i!k@o?qgZltR6x*Pd~ZMQLm?NLLh1z9@SNwlSpS+Lb^>m&%(;Azs9B+1=Y{c5!T zV9GIFlJmW}q{w^n+Mi2|j|~S0lX0k&A*}xAqebgJ#YyFz!4A@@yvvO~Ysowk9T(%`qP6Uf;VWpwQ+`!-eeZ9ftrEZ-#;PFHZja>nR+N!^%uGD28@&zU=%|6~Oh715iAjrWTM0@d6?}#Wi zJtcu&e2t@(e6ax*ATpOIzWn@8z%l@2=ranQ(vg=*I`-(a*r?Fg^6ZWF_|jRc4k#aa z&5OR|yoc$$>>(hHaUgob=*l5K$v@T)?@vLoSo=us)#UNuZX*`T4Q-T`Izre8t}()A zqk|}P#d+bj;y3v@YG5Go(>wfkkpdq7R5-x~yqn!bnBN~E`YKrH*JYh%s6SaZ8bC+J z>~H-Q%L{raaKu)46)F@l%{|^SsWU_y_?tRr=C;S72W^#!QR(4S$0PV=AD`$@Lok>L z_A=uey7=~`+oURkVIOz^hOOL71;zqb8bHh>*>>@EHKGl9|0FwLN2tq&l?Uc>U&u#4 zd~)(iR-ORhD+Xoe#*EY50xptUf-1}2wW$9*XsPY#x9X>s^RSd=Y9B#UN*Zo>s>xX} zGi#QTK7^RSk7(z8P7Weof$hUfE0(0&F2X;+tn|xW4)-AX^zP_bxJGoyeML7=#8*s7 zYlnD!%_E>yzQZ+*+F?zJ$}8o(ZN`u;UDqcorUSW{wvX=)`=Jm}ZApY1haN74V|ZB? zbmKBKo$YdyFL^81)q9oHJ5NFhGWMLL%%imEs1X=o@M6KS+9t?`B=;OEO4YWmXZH+; zOikzYMsmEVSnJZSX(;?jz8z_LU>s_UVlL~nK|mU3L4*q!OHjnO^Wk-z&DO9hEp`*$ z_4iD`b9ULAYC3&r&3GGY8xz=PB7rpH|G^B9a8ur8&I%*ZdjKJUvoOZzH+XB_R<1{* z_^lM`?WhR6;6o|#azo3RR(T=gTeS$~*5evnu^0s!U({9W3JWzz5cQ)CzKPtge?EAZPkkPu8~vL=k9ITX zz=aSXQ%##ZL?u1-dC&MR`y$f70UGdC2b$5*sOutiOAVAzBi0QdaW*Rr{RCh!I#eUh zcNKE7e&id|fBs5ADVOm}2$N80c*3?u8W?l5!1Qy9DjgVJq)g(MkNb>lceuVrS(!if zTtyQ|hEDjSNTy6ini^+gQQFU$QyZ4qL;1p1vc)Y(sW4rqTrm?4305ktH)pfWW1tPN2wT;@V_ z7h!0VtNysqO!r?nmh+wP@=I?~jF&k+`j%vy?O}t0t$G5veIs9bxBMh)w?~;OcF|Me0 z^82uyQE;zOgr zS>b5M$%Si8gWrFjAV}}e&pvXb2nBf2cd)9jyklQ@q?e`2l0T=AOxm0S7w-F1Cu}%( zRzfeQbml38iU!Q46~53>4@0S^aazT27yTI%7EIiTyvf_H`c`_WaoG}ZH~mG^qatuT z>Z1`P&pw+Yjme|I)qX&2ES%YRPR>1h&>Zs>$TCa*_#zL9S(OF9hsfs0`O2FbWzOqc zwfrgpoq1hV{^ZWF(JJ5-+0R}h&jQ{|0BJ@UjVJ0Y<0kY`Sw(hQ*`cum-UOaXit?7? zGGN!A(jd2$o9u7R42vZmYgU)R@l$I*af|viQirtq(i$L|#SNVr1!!@ErLvz=S`HG5 z*xjOw_rqKd1pF*jI3M;FpJ*Sx2?wOtPJ8x^AIM?_#2X}5>2kYJ{Pc-=bm=C-xYF)^ z<~YyPn=xVJAaO-5-^{Moqkj?f5t~ivoZIX9%v6|mY9N|7LS`LLAv;F0!5_hyAnAL- zA(a@&CyW|?sa`-AGv{EsWo#R!XOKb)5aP|sbU~nR_aNt%Wb_0uxc|3$IJtqQiU+Du z^5k9Tr@H?G$xh+2cQ8wRIzQ49)(|SN92zP2PkE}l;G&f8ja}+pgjbV}ntZF)_t^h# zKK?Oq`r=P&e$z))1$(hA{l$+-rdFSS%yW=QEUYj;Yp%S|eH}{w!qc>dgVs zS(PNm9CiQz5Xr8fdE4mTs6Lijpv*=kqLLYn0e`booX}#ckBs4UHj7-)irGozn)rG0 zt7^+%H13nHQc)p4n5dkVNjx3!*jD1iWGs4h<`zWt8rZEt|Iy~<9qP`>v)&N~`GzSF zcXCF0(MUsFX>xGf5Xa0@n@*5u9+(t)`iv{Pmd_bH>cfMLL3mFFI7>aw;Vgx z8@MWoz{7ozw=*C`fa=qHZxZeA13&E||Ep!&FaBhn?()Uq0!cdhDx$o(_-uqTn*?MH@%H?49PF;U{z9-X5BdE)D&T<&6*pWF>sR5x6I+BO zehtZ9`(W5SlSE)~R)hnUib4aymUM{d7ZuBV78ji1CWz>6F3eRtTI6WV-&niU+|JN` z$dR^un?L75DsxGdHm?1gH|PsM&l=0f`blukqKAOcrsD=?#AF;tPX?Ttbrd{;yHd^p zmaOe>aB7p}5a8+zq@dXjt$U)~xd9K_HM^|CMhr3pHS^mhFJc8X3sic{PL+d@7xmO| zw)n|P8SG6;+>@#EAss7ImdY@_&qPngkhiqkq3X8CTm&nip^!5~j%{q}>!w5Y&6y~_ zBZFNj@=Zc1D=~(8WfURS5X%KvKC4Z#Me;q)sBYPG{82zCI+k1r*ijobK0hrAxs~6y zu_AdcX8|EIb+)g3Ua@!A0GSPd?y*l$n&$;X0s= zvL6IPt%8h4YAa!A6l>HH^-;!c%G99aBviws*M*|8s8w{=T^Hz=JM?_oMxtg$JyR+zc`1>bftL%Ew!179Pth@IXvoW z;3$|3cW)TmDL_a~f5NL|xf?xUM~j(AyF(IO^kIoM^_ixBnz^m7HH@pft%pkJ76B#- z&L&jVApm;O3fsvw{XghT~V{6M8)6&Cz&@%KS?8Vmmw) zD-#wb98SNsTkmFmPt^fw|Ma}AkVsB7l-hk$ASqjZj)S?c_e5OXLJnCQ0eLQzDupqa z0%Ys?0(_Y8XFqTUeSWeE;GZ_xn>lFqP@;A!tMB?jjv{&t+e!PBOE*OY8sxA^mC961 zPIhXpf~kFlv<(q&=T+VywHL(5y!EhU|B0z2o4|RW4ogaZYBAKmsEBF&bU?!ozAAF7 zrPm|+Fb2A=g`W^iS;X7bOf8lQ{qjofv|X z*VJ~4M;1ow&bicX=s#o4o0EJr?Bp|tjLcB#*?sG_aNmP)sAf}BxrE>!U`#l= zf$<=w+NC9vhK=k&u+A!RY7!7sfKfItDEkjHS;4BU)@ixv?DtSk#%gVmsL*sykw_lh z4_JUsTwAT(Rybe2;a1t>*y`PsDAG1tLARAdb*-C7aBZ2^`r5}PQh;aWBjsE)PN6_W z75bhjgMx}tlj{W-)A!j&iPFX(yK(;adx_Ttuuz~fv>|}-iTKfXG=xzV3T(fOrV!R* z$tA!f#rC(h&To*Ji5vuV+%k3$`@OLC{6eAmP*YF5$|SEsj_I}tl{A9oZZOHQU-&~f zAY*W}teL>^yC zQPG=gq#Co&I5&%By-LE){}i`3*`h@T4|DNF;+ZDAzg%FFn=qp@d?NAEO8xDdQp3z1Hf4)j?I z7q(SO;kOYH1BRZv815~n!UMP|Glgtr2U`yj%yP{+28Zd^>X+W5S8_E7@WVF(Zv;ry z6k@9a+g7bk+O~Z(0ps<}zB?PvKiaNKeNqL`<<=FfNZkWlMw3v}HFor5a5ZWddbY+& zW$?FZ>P)KBmZzM7C!_;s18VVWL_ohL>jGYraK@3C?4Klo!5v9P440OL4X(|?^*W?l18X6dlkH(b|FQZ3AVPzg!htSLnwC&@*m zCRr^$Hjpnteuo4!2S~NjC?wL{nVlY1h_VCg&!FSwb-FkExrs0}Lt>x+HT>oqU+ zH-GpeWB&{eM4=8675GR#+%%E%lFQtI`YH0H1QA=%C^m((x_K)m0L5f}H2G{vC5$u~ z363*?XLRo@2f1Q#I5W|+HFnVJ@UOroX~>QALOJ(oZddAemW=))sCUWStNeNmxi%k? z6GU=|@s2fGsZOQ2rD?yzO_c07<3>_6w_VLv=YstE4}#|^kFJofyX}x?X`iQN(u%LW zK>kw&;hy^;XAJfg841d4z7=>OYo7#G1hnT6BS|<7ehi(Me(J<>2GH>63iwnnZ#X_2 zbgNLPQ`RHHkfQ^(0>j_~Dv!fj%fcWmXim)q6ZT65Ivt+vZ$hOP_51LMGDcC}vc^J0 z(TA4w*XyA%TTqJJA{@*z!9efK_b5>rgvRcSV5g zx6TNg{dK>F20vOw__6JOTrL^|!xBFj7=!f+APSjb=-D690e8z*C@_qyrt?EK{rpl= zNf$r&#|eqk+&`aFf_T^`e!J80OHtbtnyo**K*nBLmu*yQ4?<;*lH_h7+5;QSlY*W{g?`i|Jd2F&EJ`9R89SfE>uJABQXKiIEx8W?&K z2d^ZkuC5N@rZsY^6|qyIBQtDDtAILP@ZYiVo`LaP5}2sWIoh|CYBZpk*+ivLZsW6J z>2dw&R<>MAK-8!`SEhj4ykR&fUPEU_6{@&akSU$Q;!&qin+64!OM)hUwQZ%yV1eiM ztY3j+Hy0pa^p!vVYn}9+)!9pZl@_|IBAa9?tT;U+Yu2|Qs9`Y(E_FBtJKE~z1ThSg zu3VJJHc~24Jtqwz4p0D&XBI`His>9TaC_*II&fV**}Zl<1BCkz>u)R|EH=o7hy&tlz;AP zO}gWr{rL5HI%U&|CA5DZnC9=0+BtFH*o~xQ(cf-$3U8ElMhrFXq}E2zT@Fjx0L9C&ZD95p;k;1J%H~}64VTAoFTjfvv7P{Czl(!`a@@@qQUJ=HD zCfb}C)^2 zR(#I1aqFKf&75hhm+r&khpU(JYiYJXVxZ4(9v3BZRk|MkQbX*|x>G>ZM^B0!_O2vx@k8@uX}5oI$G+f&MuB=?7*5R z!vr0yuyx`NPJX;2W?n<9Gs|nPs;ZR61mK%Av9g42^L_kt;O?Ow9p3L045 zmF{PqELPn7=Z(L%IVsQb;l75zt-Ow`(G?5HJkkM*_MSY*-do*i!u6 z7%w7)CBcFU{=JW1miuqmu%ubasO4*bG zq2zAjU{uFOAgGAq8ILTKDdWy)~NsWOAQG3^RY}c@=+MYX+|zbvXyAEnt~sOetj$&F?z`} zv~TZL%wbIXBOVlrK91ZPmm7vYGI>@_(x6*N_0FfT;YWp*#<#^;8ae9=;A}9j0nVl_(;w zHY0Kli+EDtT21llQq5cse!3u-5HU#N8O2));)2P;}%?0}Nfb z3BeojBJlv3G*;SW5^p_4L{PkiDwm!j8}y*_rrLwW~k&phiL!awbrOmY-6#y$eCq ze(NmzavjHu=Pa))bWk2K#_#B|P@eP+RF)IVp3I2qwg> zjx8S7TskZZf`$}kpMom=FylXWxu8N(&27ZKU$!~N$WzD{FtQ#@wPne*v!wGP=9xFdNM;Vdt!%>V_;?m{J^bnFzd8fNid2q_tF zu&Jgmn-fr`WzhV|miObc~NtsSgeji1H%)3sOY z6w|ZbCkv96H7)iNlHbrm!aka%KK<81nNc5lysu1vydVs?!cx~4lIyj*%0ufj97z>-8 zaG_5`7BLm;Z=73GTv z{ISfL>zB-xn$!C90#h)nrcwJ|SHx1IH3?wHRDz{*3Ku8gI>;LSN$o(QE7x7Ot-Xe~(ern#>P#p+%>Fx1Kr=wOhoXU>$tRB>5Ji1f%s@dTHt|G?woq3Gg5rjNYjR zmez7v>M1?|$80U?zE`hwoJ=wA1thAWHEB(;Ljvnq5GYyIbdVl>rN|i zFV-H*n&RNgbuNwB@sfr2^lMT%+hWanOx*IYXEg>vCWHflnA+F7o;_a3iQlNps`cK{ z-PcLnnoEIn$YUk2#q$m9r9I8930 z@X+{+0sDosOEb}a+Hg;RKZC&!PiYw%FQF|5GHzbzPpTomq{sasT`4sX%2d18QE>_9D)ibqT#{hB)S24JJ-$z46*?K zO(j(jcE=`2cV_?F^Z?{|%}QtM!UHVu))ipABntGnhf!q42BLmBa3J7pvPz`+AycLF zqm3qXwrY!Y>k-(6fetG3X${4t-S75p@jdxYy0b$3{FbTAyy!<<)O33oH+O4r(E4o} zAh6n>9AX-R(*(sXLwZ>9fmB^_ z{Re-Bm+(fQGxWB;R7D@!SpVGZ49o|N72Op# zr|-}N>^7!NRPv-|yqXoO{OHu3X9wB^mY`1r?2Aq+B~1P!@Q4>t4yABxL?fPuK_(PIiP?_fH{peI#f>s15ZfT9DO?uNmST%Ehk${91-pLdjhA+umV#gt{a9E<~ci zKbIOe)ng({&cj7ejF6yZg%?44=vaT_R@DA(LsnEs4dD^$i4j8`ubpI2MvSOukVpbY zAgKg6tQlH!1)oX$WPfuuJFRLy*&V>lf-TK`wLW?{P#^Ykn*y|`gNAPQt?N9Fb5;g9 zt$WN;8XxXPHlVQ@+nbNku8nzz7}JpDr#wm^CCyV9BK5+J>@1T0Rx1Iq28a^3?XbGP zJ>Tr#BnwV6uJkC~bE5eBT(R|sgcDeW8;c@7n`vC0=2zEjB>ElYnhxq*sSjMrt=^1F zG#&caqS^t%oFR_s0BMTXUu)KKNY3sp&EALZvG41cz8F!Ge(5wAMKP(Rh&V;)dP`}p zV_1Qv_M0p&AeDU{CWJ<3KeT;WW?@IoO?*XSjtMyq1ezZeV^4zKimOeEZW325ZT)Ss zNcaoontr#CO9aCG1e(QS7aPllHuR;L$T1XqxQ`?2DEPqP6vTXcv#T8S=)!fp^WGRE1u`V~5BZ+8oS?7g>-EKtA#)BWYv=DkE>| zcx#M>9;8yExLG=tuA9^`@$9YgQ3^n(U`*eaVYq1hq>Lq+_!F>XA*LBjrH1+ftjw#% ztVmi%M-7r8&2l9QEG)>wksyw7j&(9p_lFe$#C?sc4D<$g-?D68kqf?YBufrf5Ckz=&83Dtfp7Ssur0uBO2C{ zw>NG(vil7?dYB5sMVV)?UxUmB@qTu5-uHPFjty=vWPlv;9}RR)-A~m0T-3UuBjAVm9fy zi!@-qp89K}gq-_$4D33~22vO_SIdkjaCk=pA8BQt&`x7E$1Dyo=$8YVJK!-u1uKA>bvsW_lp7$Yj{j?OKkhpg?#sthXlr(0kuurrw`I3S~Pkmd|Nv>p3P)8bI&3< zunTPrp{TALiC&r}rOJ9B^ha_Ji_>`If>l5B!|e1 zbGvj7>CSft1jRKYq}=Q4_ZmJw%pj&>EXpf-HT?F=!P}|7oY8%jR1;Y`IAumHV2g*= zeE+yO)wP-^X()XH9zpezS4ohWm|eW=hsMDmLYF!}mzgymVeO8 zbg?)ezo$DGP4O*G#F{1FfIARx{iapK@r<`iM#~hl3KL+6h-xUtux5QY3S39YJxO7#YPy{l zSS%@Wtk|mjM${S8+tt;uiFk@*H;#SR+3?TOJS#-Lc(f`OatD!vq<7engQlhOAX(8? zNfua;YVRHnnczE<O-W@ps~@jj z*MLL8JHiZ`KGyGRwL2+ikv6ys-{4s1Z%rb>AM0hx4e;T&H@l7$kcYE;4N=cU5gwl6 zupU&KlAs0zX1^i7-a?`5PA~Cqj1o-mfZ17$Kr#>kERFO(RrcH(bFTwcdbwhx zZ`yCp0%ln!ouvQ=F5B+ujxU!)Yj0XLq35N%b5@3{gQine&MiQ2eh~2&?lk8-O%Nwk;^a>d(ry-*~6I2Q3QV5l!(I!8WnO z?SqNc@CUZ3LZa2!aH@<|Qz_89vJZMV?9TMsIilkBGbT^xg=ge$DmO`eJ7DmNv@;1i zYD%QmuJkITCB014uws1An1i=*T^YHQNF>gpXY=8*KOHycJ6j~OTq4dmJ)!K+$MqgS7qYa#19{O~7_xfp zMYmZzjMRYKrmhTAt)aKBOS1$=ZJYDve9M9&Uf-Lae0X zdX`wUf(m*VCEUsBAm>vxU)0YMr@SGnat}ZMw08|yPKgrU0)-k#L@w>2HggLUd8c7Q zu!vcp?fa`%?O;u-ms8wP0D9TySzRVg7=f4 zVVeoRsju{@V<+|n#ln(p$n50VnUIlc=f%@wD;{awd`Uz)B`yvffXU9$Mvoyp|M|}5 zwATbeF{#CX_P;;V*&h`Dr?gqN*3WXXhLcH0A zCWwjCv2}mJii9ay1?&zwt762d9|+kj|6ibW-5=N~;d-H0;hOf(VM6)8q-XSp>4~Pg z1I6fk5h`G5-Et7T#TZK(q3#ewgB_V!{*a2v%u&pt(cc?H)UZ%Z_=$HZOgcAn&Jks4 zLnKOxhl^3;`k(j%4(Wd+?CU_mCfjAb($e?6=x3?6 zE#VCLr7VVIFa`d7p08Se82&bpFSm`m6*09+l|p%pqy%*pw=_9vg3xs`xa^`_pwNiT z>sqE8?MT4GtLMI(3Hh<|g>hv{k-0Rrh@;svm3~^fV>sQzFayRw;g*?k5&b1*RCiC6 ztb;yg{duXRXoRV-avoIQW%99=0l^N9r#*sWj1|qn@_0CyiIRzt?E-#XGPF*Z;@X8E z4s==#IwXLz&N1Qk*U7I^Nk-f@rNp&5OgWDL&<6b}w%J|QFqVv=kSkVN4~n+zel_;E zC@l4Nl*|SZl;Rz|bdak4Q~N0o=RjtI8fKJRVU1J%tGxW$kfVDbeZ^r>Cm4i_H0rep zoZH>xRk1UfhJvaVO)@YJ1Ztknt1{c>o^+}hl-dSbw9?WoEX%~2WIv~u`(86|tRLmA z{!BPb1_Q5Fc?bB-&#_Dn7506{c$#op0x^wQkLwUXI@n{3-Vo;!C4+{=^Vd_J(1<~6 zN%7E7{eGtS!BAt}b%ovG7L^aT8XgNOz<*gKkCU7CVF zSTu~i$scbDxoBU>%ju;fm1`;0nj<-_yzVVRPx}a>Peg#>wMlSE_q;G*H{7VaA@ylm zvd`=pIpC(W_&hJ05Rb?qxr{{F&45SuS294Zq`1s4FMh=kgplFl6lzP8L|O-B%qI8o zu+s59j-wE3{=z$Z*bBM-x8V2Iz%u216sYex$Y~GTc%Iu#zO`^F@kjs2yQP0dI@s|nb_ zy@``ITosBfE6V}MU#ca1m(EtsV8oU@w^=X%1NPRRn)U2)%X#SRv&tCpjL^lEj+ z`r$}havQ6dQ?^h@a%4PYw-?%spcbc*yTa!8w@(fnAnzZ_ivT_06YEb0u-+Y-3=L2uu=_pZ9|IF8$)C|8)d5L-DXjx=UEuJ_I+O<_!>v`wyK}&3 zZTlLG#@<&V{?qb?v$^Icf|nmxc49;y>F3!D5Gr4?*JTQHT)b9%{&yT=bFV^`wJ=D2 z|C`1cI0q2bHEIN)5skK%KfnB}IJVxubNYz9rC!Wlh*gPkJ(zkL%+Iv){ElZ+DiP+a z9bph+;$eq17iZbn>cEN2d~MrZfarq|odxDJXQR$X4<5dgyV*NsZQR(Y#QmpH3LLRu z^Es${-jea?>4c4B*M^sSRQSg+S@B=l;j*9M$_qeVSaJKH5*!Ayr4TH+K@x})fwWeh za`t3zks@Y4Lyw!~SWd^5F>6Y#2crXH8Rdn~7b2v-`gwCE=^LZE@OPT zGhK2Es@+IcPz|<((WtwzHkD3-m=3ie;^0HpNuepgT>r5DB7OW%-9K%FZGz)ft=<=E ze23%z3H3<$iho+ZZ8NmnyK`u{Mpe@b?*tZ%F+DYZMyXjYQgn#lY~90xgjC6gIm*`H zT0+t{OHqvNZoU@FUGh&Dfb?W{_OG^qNr#H^-dD_uQ?04@mVsstEGe9@V7XWP*OB)h zRteE#UzXswr?&i=7?6a1tnuIoZP{=t`*som_~-w%$`ur(V5v1N30}q>S48RAv=BpUREpeev zgh|>mranrE;1>)D7A%A)GT~Uu*IC!6ofE#4x#lpHxBQCOo@HKX?5|Wylp8(tNLlCB zVwgSp{92GIEr$xnA{K0R`UY%Qv3!vZ=Ui{vX|+fCHB3NjYIDR*?II3If8u=?d-RyV z;wXpp;o&b^)u~YYE`floA6!MI)WXhP+aa!Sr)>b$qy;Vsois7wn_7tfC*yj3zSY6~ z)O;kCu|1*1sDxi>!^AE&A@7KZS@E<2w3F#k;=ZK^i1m{CV78js|2sEeZS5&?;*VDX zwjz0Eu^c%QMBBQ~7=(``R&;3UMX-UW76pV`b#T<9mBKe#x)3;c`%SQr0KNU8^!h=f1K(jksB_ZriUseO7R@3l9oyFERc5-eajR+rPn z6d6EF7u^pmE=q;=yYSH(f3p*r4e}7}XN4embF7Wi)U3 z_;@m7b-Dt44b%bAp{kvvhU?cjEBuC*3R{GC#$vHHoW9FIwu8+?0B!&4YzXu60bH`( zV|3uC02aFI0hPr^n5U|@5S+2q>=}Fm3YV^A6Dfz|Tpy&Fj72BB0ZLba6~jWzXNXFz z3=`4M+0p1Ofz4lz3q)Q`^k|dxJsTj4d$H(&kBrnW$R3K%Dvl_m)VI{o30(PRqAPp* z6z?D96*&MWrqcE)u%|Pk;};RIY@k@iliJ2vAV}S(bJ|osQ!r|Y^*)L1!;87e{#hB} zL{=_{enC(2Jm`I^Ia~@S8&GI7UsSmKygvk3-_V+_Ik=>NjJphp-K4ZmpFM2382qTB zilMjX`VX=f2egsJNE#KC+JW?;J`M}#IB#u#mFJY(Zg9iV$Qn5Zgoua5b=UpL&M^t} zN+PVn8BaiwrMF;S!x5w}Zj2K$!1Grd#Dfz6wjJPmD(hZo@_%i<6{PDyNA%ZHYaNeY zCmL0-hr)Z1y@-$f2q|fgIT$ye^>sdwwwY|8Oa8oJh>YooPkBg#Qx%sGqj==G^A=2x zzA`0Ohny&+aI)}y)gThW8y=FEN>KvBd}Jo;wqDnTbb+{%wi``yAsPFO|FJmmB>a9t+m{On8Vq{*f~@c%O11AqiK7#d3Hw41Is{O7j|U zf~+Pmlp6*YG7lh8YGe^eMuBAwvuGd}5O~4$B(Bs99tr3VlMHE7TRutUL)yl1k3s|= z`l1$d8kLC6w0u}EHHN^5%U?V%vLuldkq?FK8UCtZ~(@&Zol4DF~z+nna@z@*5NxQudU%T-Mo03O_wY zpt3ZO?`_buQZx6Td--PjLXn6R-@MhRJ%-6$}hAF9j4Z!_=9(om! zK6VA4Ko>IbCfpky5A#tfB*%&=z#yuOAp3SqQE(_BN-vrimvP`NEYCR~f20Hnmr6r? z*~TI}woMyD#}zTJjv_Wh?tvjwl$G;Pl&85zo$Ygf6|8aSF>c~Bv}7h6s8vIFhc1oz z!j(_0xmCnUh(}cnyV02hApUE<4j&f~-(WFs5CNC|*2dwN42-mBhWf}O5KCs3OfNUy zrfg3Mmkau&mGD}_dEdo@ECp@*u3uxoqYJVHd!$Ar3m}!iqLuo7a!tps^~PYtqfqx?_7#q!H#}p+Owrr9m_1kGt)-K!Oyy@ z+P*~{%(-4hYuZOr_utXWO)n`k;-Xlo8M0|2US37mb=$Og*Z}@kkT%fPLb=QK4;OXZ zUpt2UW1htsO}LcmnV+74U+%0W1pUq1BTy5o9)C}g#4pARWRmYim&s^cza5**{Wsdv z5xtMF&-g1Xf#WOw%}R3@|2!V>@_M4WJsfP<2Hk~R7tMo4oi&eN#}MD^`P4AY;Q-P$ zF_*od9eT_#SYOZ8Y(lJ#ycCN9eMJ1y+Hx^#v@Bkl9#}a&#eil-VJr}2i3hJ{E?u*k z$5*mm;}FjN2-U_})D#`@v{mJjv>W#6!de2Gzzz%BOGkPH?dEh{OnHIN3O{D;!=A;u zxr-B1^K?=ku4A?g&c>T5mr4!ShW|A@)v&}xk6})7ireg)Q8Q|;k&`ZCpuLjRdX-

ZNT9+PIITS-1^OSoj~WR)&aN_e}mI&H>6P5}GE_T5+X zhrE*PCeGhLKjyTx>d3P?6k8i(iCz@Ar!7v3cW6;j(^yR2TZgJK&n$}~*LDoJcGg@u zd8aw+%HnO!0EEgT2O+u=s&ee%H}Z(@d|ZckZ%M^D?u?PE1LD1Wm38$Kaum);40wHo zQt|&J6}+or0RygBM!49TP57{1zses%Ym$a=V50N^>D&b66j{G7IL|OT6CG0Os30y% ze?!B=@znbf`FiAOl}yQIqw(Ga*>=0b9Rvt+#lO;8t!wIAEo=Hs!SG}fw3qNx8>zuu zbrHIFU*@EcZtpSUh|!z*qA>odhdMYedFl5Sz&E6>N~@K*bluvLHTWY(=)HuB8`<)| z(-50A*Y+bW`t zr8$i6rirp9m&I{iS9w+EgQWFMN9u4n)D?_h!Lq!DW{78l`Xx(1v3#l*@J@Qf549*b zlijI2^s*xXh$)D^YfBNcy;bsSSJ*`YywPN;$QIc+n`}P$LM4pPoljNenZC%G!M{VT zpbgi4O%6mjQ8g-m!WK!Qrc z{z_l7#p#1U?~>>s(<}AT8^Sq<@194DuAj%}%MVDsFA<01^S}4qK{6!zFMa;IRb95V zyMGj*#sy?7VhAPp9Q-r%&Jd6&#(@tx%5S*drhFog%>@VTE9oRh8-)wc>~oZ+bxDkM zLC!Ea*ty!8cL0s@xvs}eT8bP173ri^CxW5h*}4I$7gLliS;DHc&fdl!{e!40(1|R%G`}`xH$rS&Swj0ICT?i1W{{xR z2s;Jj0>ZeqZ>`DBT=h^ocv!#=$p_Rhtnw1ttNUh=eB7^c^>YnxMstSB6}{$WqY&>( zW(OG+W&x+S%O;x1V*tuwq@Iw{7NT*D5(JrQHJx;^vV^lsYwEz{O+h95hoUGGGOpc~ z@XRzT`liAdl5FPzyDv!AGuEhKdxgcFBehY*83(I3(>bC+&&|!mOLNS`BUiwW$nh{P z5?Su_lnK>|B2=KT@^A-RS&w=hs&LLh)v*4(>in&R=|+MT#^cBW(7Oy=AtFm`J#|`d z-m${*s>HPPdRoT2u*<(4dcoPj$;x4H0ZwSbmgs-LMz_K7#hIp-BPagm5hP(EToqi2 zKjCzLxCmhjbW`@QI{oQLUgI8J?A#%EG(G7T4c_HsNQ1oi>h}+&AQXpm6bBq7)yW{B zUUKU*QI49S3iE03Nhd^rC;>#i-rX;J+ZDQBe8vS4&aaIBNt`agvMZ->6qQ&{SVIOS zPHP{$1mS14Iie|Hz~;Zgr>YYyKfy0;t*Aa*3gVF@>|>}W`B6jhSk6Bx0-EV9P_IU5D+VW3J18n{LiKucYcw#A=n@|T;sFMthDK* zUUsQGf1OCHfYul*u)j!jHi644O;YyniYSDY1-`OFOM>?s?1UeAs>ZUb!<( z?U!VsIRaE8J6@Ebq}m?EcdkXPK(CY*&f9>T^UVqn|M%R8*+`iN_Qs(6rbm}+0A!(X z@vxvhfrDK~*I*hmISCjiVKo}sq=TQ;E;8AQ8(EBB8v>)42(aC9%Ta{8qoESnEBxu?w3c5!D5tM?8d=@fnPdFA11EY) z{@}zwD#REmgc8?W_AS%GaXN`wKT1}v-|EFaZx86zA`H!w@MB$aMRI0S$PV-jl*KvW z>>HENEP?Oe@HW&0egnY6(MYLMVC@x&=Qzac;sN~ET`JVn!XgT7I0@+6Kd*bM2gJ&) zI!+1&r64?)ldHQrV79ky_jItt3KL&ym<|Y@Qq>t<7h|nK3nh<9mP?ow^@)MNAZXBIYSWrRa9+62qn zj+)=w?~B~!U8dTA;P8l1cPhE0M-u$oBphiAULXLD9Sql_0?o@v;GR!~f1*qCwXJ_} zVkj9WttJTIu7xPd7W1cH)J<}&iUCL!_}kYql_N!L2lpzF5zvJqL;FaSN7WrSVJnU; zkXO)|sswQE-C=cFWgX{U5?Z*j*5~TuPDD+z{t%`9xqNpplJuuDfMV>?7%qV}W z%{fo*CMlpJ;IRGn=*_L~;Wp1mV9L%ugLNVq03nyxQ72^`kx>M)`!x}_dFbN>i#N)V z78P_aKbn8klevl@Zqj?SfD)0+U>mD-6WXxRCpwIU-8fNOGhR(x-|NRyA(@yCv6ei_ z(`iD(6fQ6sj0Sf9I2q#HGHB@Asf=`(elCKE;UM)XgKf`yc0H(}N; zRaWplw4;!lrH@&Uz;Y3jm^hTKo_I2t=TMGE!QtMMPDElbPVs;Wk ztL(G`TPDd-_Q+)U;+e5al$znOKVW~ti)5d}tsE}+CKz1VA)MPLe9=KSd&p7Dn8ljT zCmczH@?1Km*ilp|y2dVwJK0wHxGGc{9B|T%P?^}GBdynTLRxDG9l|51DqPUQk_KH) zipBO9z~QiU5uFrKkBh5cQ?Oh(kH7nDWdh3Ty$Kb!GXRajEbjX$7_u1?)P|D3d30nA zuu@b>9YA7=tWGFVbos&*X4z1oqIuqn0p?(%FuhqAN_Sa6N|3r2S=Pl=#)vXLf2i9u zLLg9bPL_COE-@$Sre__YSjx1IUGP7ss;gbDmkja4C!4M3A&1k>6t$A+pvY!Ras;}C zKalfylLx0ws|Xh^IA?Z=6Z0>1_l2Xx=E4jzCKf9?i!BzDM+j?nqa!m+ae2&v0=c_y zjtXt4r?{*IY5%X{JvVLEQY0Oz2|z&OLDq|uFsLY_f0r^FC5{9;$}>;!Y3roH)Qc^P zaiqZ4{BVaQNowl@{z=X~)G3torBLz63xCA+GcE`nM>P>ZJvCw!AapncUI)JPe11!c zCtBMCJHR1h@ddDWVt!>>@$0J2#xlXU?9KLEfn68a49^Q(pCT=|#`z~x!TSF409 zFDEfzPshL*xu775V!G&1&rYSC(h0`BGw=7s4-;B^_N+(v*|18|IVFZwB2Q{ujmY}7 zke**`JQEOof3qo@$j}bTPRm`tb`IRE$S~O0ORQzAYd7)e4ST1RrRaOeM?KBUUf$A^ zk0ZS(BW=?h;kNQrD3TPpwPpP%`iK#}3dK@C-R_Nmr({4TBcfxj^~S2_j&;^8G>a7G z;%<~^->!bCoWY^##kn(%c;zlGEU;EeHZO^QQISVqHd%!gA|B&Rc^)K@-FnP4QY8v= z0+$D2x`1ypHI7mNHffQG*-v+@LPASa0*x4DvY0e)4pyn3U9~fBw4-ppJTWc%{nYV- z7n8o8*csP;0VTzErNnm8MTkIM{H3IlYQD@^<@;xEM+p!x{R>?LTx+lr%Y%dXh2>-~qT>@559ES~QHGm&C<(4J3DJUs%S414U2c4w$%@CGWu;Xy7c=M zbDXvlm}KRMZAy164s1X0CIaWA5ez|4M01(>=^dP!%YoEs;BU(1U{tIvhVhSH*qgq+ zSHox55s@bMdJ$yXfCmI@OC2VhId;Vqh;<6Ow`|rgX_SFd4^mH7d_xV!VM>wwKKZ-+ zx)>J<0E4+;tIrjVq@V#|EpR;VYy`RTBr~3+t0HiarI@7~YtZ6yPRqtR8NN&BB>mP7 zvKNlgA6Cvu^)aevw=1p~C-#2;4YBJkXK2U;?UtjPqZD7NQ@qKR3BiH1nZLXO(YFNxS3J(BM$ErDg2VLNCC1_O|fDWoJ5|2nd? zEiUqkjHi~c(wYm)cY6vKT|~DjlWGy8mMQPmCmghG8(Hm;8F>A_XN2y8{&+w0HfsW5 zi5^MHiUt9mA~Cxdqba2JQ2K2KuiY>FY%F})k_R4TzS7FG%){6a88dDHNlrE$t$0ML zF2yHWT&W24^_%58y`P-U|Km*rEG#NgAU5$V0B`Ej*`A1JHUy#%n))h*kvp8+mwzh{ zKH`5q%9edQ!l`^{Ke9Ovx?D`W$p3jN{$(yL@<}kIcRWC`Ef$# zC^AdAfj`w0H)V59f}vC$sI*2EgFZ)x6`bVae4em;HxnR(i}PWFu`U7-RAl+aw!x_M zn*oaZGJ{Q_h&f$(o2zmRRNRf{w)f~wKi?>(Q6GoY4l0qJ9@-5c;12iW6*8czd>XA( zv=_Rib7szl2!Dq3c%7$H7h-tpyc{H=tyt<5%r~J9zDy$Ot}JDV7I~!~i)QYOnUgYu z+w@}Ln0ze7W3aC~fmKOs)Wtj}{}Q`zuc(joH@V0A4=0i2Id!${jH7m-@9{r%#ojlO zC?y&&eV5I~SI_pi#u!vir?*DUM=FVG3JhGUQUp+^U!$N-HED4cQO;x_2O>Tw93Tkfq;#< zS^O|yFj-p8D7se%4yys?%An2#Mlml=Hq=Yl@sL;RIbTKlE?)d0TIy43fti&bVk_^w zekkGR8aIstBpBmvn}-PJvOx(_8OQcmn6IR8%#xgIy1sk6$E%wH_!LBJ`ZJyDjZfj4 zFC1755d#V{rUl?O8#gtFZhwy_b7xIxKXYMsWw%3)JH6jJM?`Twgm-L*8mkKvMStBh zj8|%Afl>-_5K{3uz)eALM3cYLaC?O^J_oSDhW1!l?fw;dZfzRfq#Nih&-ZOQava6? z=*x*AkfDhp(E3r@GYk+SQ=Ji6tf+NL&cS(u_LcxamjqUZ8jYUDwmB01`ewpb(vT5K zJ&JaRk1tIT9p{SN6JydWjv~+=xWyNblZ%~NiRWkVZzF7j|8oCHFc`^Ayvs9$@q|M_ z)FJ!aA+wT7R^Nc_ZJ$~1@0Nuni=CW^c!7!V1<%y+=Dd8V-gCye>@~BpQ4aZ%eLOh!i0h|TxB^LValQ^?%=>p@r4!Ha4#^PkF27}L<*S-qWBQ5tl4K8 z!Avx{d%X(JpWztU+J=XcZJql;u6;aTS*r9J$s6=t5X4^j&j}!ecix8bUW)jo)?%=U!5CoFYBK{m{1oAFHnesvbQDXE9QGZck!70AZTE z>u<`nFP&hKBto4=A&3YUvJR`Xe>1`B)IHUm*O3xnF?FykA{0*FZ~%#$yJ)lzeu*c> z7phO*5eh}OkLl8;aG4kTgt%)$_|5(JyPFqm!7boqWZf&kT(9rCVAV^LI)v?g9xKsT zyM)Ok2W5ijoclD-(oonamf44W`J$l)#l02D#z#1VeaY&7=b=-m!{B1ZLj^#J5Cg{b z3PBHZ*6+G$H?rdKz>r;X_*^B!peac*h$T>E)h((1@wD;+K-85&O{dBnl}vL@p-v0) zmMT;FlZPO2+8mti3=S|+cD%ZkqBFpVlu4f7T>TXb6fc`m*&3%7$R9JF5-yF%WGec5 z#o)$CZAJ006NEbWGyUox^IUzCqn7J;eQ^!z+t8ep_biBoxkh%$67^e#bB=ViElD$~ zq1#3sNr`DuBo?y}f7`sKu4{PjFBIR1$v{4b7U2l5jEj~!^@W`AlbRd2W70B*t_C0k z8yMS+|0@Mx5hl!vsqxOtYb3n|9Xt)XRs6U!ezZqbBX`;BtnXx&-XXHw4;+0y(sgdE zBPpxotcfqWU~|xR4sKF%sD|1sPfty(HxVm0JF|#pQHe~y9B}!Vt;Xi&Hg(`tkiEOE zM^2YGPiS-*Q<5s%*RsN*Y1*v<-rcuM<$}XD^GuDtyu{Q2$4VgF30jVu>ZOw|z~zrP zr0OE~+6dBr*h9%r4OmSTQKS?|?m!^GvX!X6CxphIAD{Me8Ol4M$CaEi)x{fz znY`F9o$q=)rjmDcv{qxF1gWZ6haIW(Xo3KEt>xk*6TY;v_-L1DuGtvcKaNg>PG$Az z4KuEzQ0qsxb@{MCvH0ID%rbHrI*A3$rY6^j5O&@R&4VNKLjvF=Q3zr~`t{B^BNL*`U=G z)i==wO+uONdY1P6s+h;q3n0^{Jnn|`31>Bvqsnmiq*a?0;s~2;q*&cK*UEAD;>%aF z6@Gn<-ix6(l!NVRv*9W+mO0T`8mB~aH5BVJ%@RjrLpoG3tJmOomIM3MI@N! z$*MgXtD2gvMR3*j+dDYmLtcq+VT7=_1SBc!-fCx@0fWT}bZ)3(eRtah^Rr-41>4=C z6qpdg;4G)VF-0XUPqw}SacIvFcn}feELjBZDoo&?+I0A6{r(4Pj;Dl%c+k`g(|V@J zo2m)uBrvfwo`0qu^M9q%Ld@Cq1OrwUSYhpo5u(qyH0xN;U0NwZHf(12CxAp5=Icsv zs*BEN(wrB0ThcOttW&Mn-KNSWeZD0gwFq10c}f3Ki;MdJ=>p85`PoW3eZ5z=`zCfT z^=Gj$a;_ZDI?dX7fks_$I@cWui0efc4~nWPB)^`unA4=TK`Cja`u~GKnpBs z_goY17aaUc!4E0WxBkZ-C2$y5-W$1mQ(#YLT&biCj zwLgx3=Qx}17XK(zP@QuV9egWp18|xVHZy%ujK!%^?PR;Gh2sx|7qg<%yTWT$Z4Rku z6;^i_3u>oOlbP)=SEgvO$15rk)OOy3yR;dy!MHQ_7a2r*gJQKveSbYGNG}{#-6nz` z^Ln^PTwCuFr!YOd(mkX4HSiw(K%)&mvitQ!Ap(hDm;<#*^`JRgpy|0QZob- zvC!9nis^4)e750(ysWKT87BK|H#Qo*s3mf4nxhX;&o+GY({z5(3+8h1qw+27#{Ah7 z_)3Q&Pwd`W{M`MzcNFs;rnQ=AFPMMFQ1seLR5cA69pKaToiplz-M=1RH9GTs^@XqS za6X5nBRtcLY%5y|dRF6E*dP$lu&h4DEk-B+IoB8!1Vgd}<{bDWqEURg+IJ#}n6r-R z&)^0(G3#rz5=uOGe~og15PmV%bQxXpM_t-&hObXl-sj~WFiogR^;e41f^?BzS%0UO z^<%x#t)k#lN08Y+S;0V!S`w|q<-b}n!U~~XKi4$Fdqjge&fE@rgX$v~dkLyzsdvMz zBAyU_3Z2ggX*mB}7YtV)+Li@{B$s#MJ(fE#t-F+87k|S9AU~JPG;`PI2s= zd8{MvK<}uRQY2X!$mz@Cm9TD*g*)VwE-p(g0?hw@Adw8vBK%86JYWTMt%Gj%DtwpJ zykkSj@fieq9tSo(AvRx?=>XM3d1v!|oDT}=A=qUz=3w=p`sOsV-{SN9Qo%>$SETXR zMPP2fvlb!QRGQXJSA8a_4av#YuboSaW6WKo|EHI>EQN_w!uLlXIzPG-u-V^>9a5tEs@dGfkoL8W_A=MSKtz=0<=o~sVw6Gcf5JaLYVejxly9Tl=9uloK`I$?l zOkqb-I>}tsa5{86W;OKH>cSuA4UOQ3{d%Yf8Pqq3Z@;^kINd_j5$6vwGZZ(gQw-Lyea8ESLV6ZWFy^X_v0^NODMX80k4Q-qwZCAK5LrA&J|oHDFa{R2aNR!XyVqSDm_}Jqh)k#Y49v zGcvCZv52CXW?hHs0PMhIltO%n%)yJ@lEaHg&t?Mb^D3x$eNl%b(WINz#$KC?6K6LK z9u5NYQR|}_T3wm&xWSZ6+QHaJma9pzoR6inTEBj+fo1KhOAyvdVB{P)ZG9~5ixfJ+N+I5TUB|j!n8eNl)d96{>!gDFI zB@zKOQhQZ4$?1Mc%azdUA1PPI;tP)LAq?^5Car%=i0zasaqs@TLqtdsO)MVk&dL6tiW#+iTlH zzDMfKl7^BBpZ<+offFsoSC73!YMG=h{sN&#vc2wxCUGmc15Q+xf)gU-jbzE29G~=Q z%&1@Q`@?dbUq@yn5GKX?P!g7~vTmC^(iR-lErikfdNOAm>+1FXk|!(LJEnG{g{Siz zBXeT`nYDP$xsC}T?-V>V{;k}fdJ^L_61EX1b^K1|LPzk21@?=6lAC?~ zX4b$MP}GxO0cezx0QZM3ob?AE7Cvshj$b$df!kwXJgbW}a{kb7ENH`eL z1bP@R57qhO=CmB9yo>R!eRn@yVOlj-(~sC+#r$h3#HohX!~_JaiWIJ##}+#G^T91x z%TN3Z_^25i%^d3qS*I`}`#eL~ecymR>)ij%Ni6IYyRl!&&m-No_o(7z-%4_AvfKEU zL=m2cfUgq+X6RAY8jhJkgF4Xnhz^JLzA2#R-`W)oBv3ehgkB79IsPs?kAk8Oi=yM~ zy(h3mCH^&LeujZ|RB(Cw%*e1Wf!S9WJMsDfy-vE4C;6zgn(7ksA1Fpi*F4Qz^P-M_ z#FpN=-KB%SIebC|-`9Bd9)5f!cR-HvbV-T`+I=6Xl9YqV`*}Qwiiau%^Sp4UW%6VLy z%I1oAG=8Uj1UnU!hp-Kg*4cbxIO;V}FuVw(K2)3J4A~=)Q#O1abG@lrhZoNN*=|4S z9$6L12#(R^s-w*!l_c>{D{GF-bo0#j6>@c!>&(~{)g1gbVq{`bQ>Xo+JxE+wO7L$A z`_lnac+2j`k!wMe|B&a5Yull9aX$%S-ms>QYW7ImI=`UK`ZFFW_cbk2k!;elRA34$ zM27Q-*aXS70Ydd%AT}sk=DA5H1R7HK%~u>i53${Cqp`lf@5xfD5XteXm~J8<4pT4W zJ^nmq$5vYR~hzp zl3dd@pExQBvdn2ZKghNZ-Te{7HMu}H7Or{ZB0?opRFA=#0orIZ$nIaj=JQ{o$n9OV zkDU+OEBU=m%g2H=-BzTNHIry=xR0_rhOnsZ!^x@TJ+dzs& zNuK4UJHK~q^=bFEeMn0%FDSc%M55@C^RafsZ`r?Htn>2IJlq4ccl~6@>eUuaz7Xdv zqLv5O`G0mGT`yW8shquyIX~qYF)7xrk##}u|1m-tv4R9yc3cBO_&H>c9eK{aDK?r7 zHQ|UEq-(m*lle9my1Dt_MK>lJ;F17+#9b77L$r`~8)4*d4RgF}5v(p#^l5jIThi0C z*Nd8VBZL!w$@BHuSjC#C{hwt581JQz9&>bFYE6GwG_lFkrjIX~lp$umk@~NWH8I~! zM+?+nMfsT=5LL$vSH3hSdHRh0`6#)mw*BqsO9Dc*vc(mi$h@Rb2g;t~%o@bM70Dcw9Rt zU}Q(ad>ofL$BqIoFNx^eyUFY6i+h%M?WXxV+bAwTaP?mNheQWfc$)gG?))b&vkCcd zU3{{fQLneDLNmlt%;V;`lf`3h)Q3%P2g^B;?S3B>#k8UUxJ%5C>c6vh7(V_^*L?bo zcUd6aEk_>pVYhI>%MLdCIk~uOn-gNfZ|E7_*Xy(CNv~R@VmIv46`*GCjlzZyU|@sh zw}`X^c=QrMbcC9+u8uBMInM&GplU?=J9?7oE`5+-!54nhhN4(YRd0yc`w6RbAm68ne1eagr_{rFoIZ7l83qI!Tp*`7w@1qKlO&2h_iqA2mAxr zHHoOk-1kxUol*d!X@c+s(;DSt)}yX1f=FX}@MXlg7=%(tG*DH*F!%+xby)LX(9)PC zz3*3{B0(m_i=^M<`4a^;fkUA|J;dt;pERu~rOzG1?0(trJK2G$!s!a^eNlWhF2T%E z)Oat)P7r*5w_4+gElbN^NOBb%`!HzTTJ(vDrVzDW6VuQL~RnpM$`8VPTJ*c_30 zzx(Oh?WMasYK|=1w{*0X87ESD5i`;e+|lO#J?pJjVcoYru;5RUCTX=hZwzQP1CYW4 z*>wK9^!I?@W0SEDPaq*26xj(f5o|G~)#~TKdZJZ z#L}K%u)MH=R-dAI@yzA{5m7@vgEue-(5sl z#MHB@emPr^mv@K$A7DIG9ajZY2Q-fiwQ&q7+SR&d zn0g4af#>`JFe zzanjoATEeZ(9KWfl6(Z2q1MJ>Z6}wxX;}!$EO}Gm-Yn|QUg)Nl04~v&bD~#B4Kzfe zgO!e?W3YN^k>-}^vZ9Z{&1@DQ-CFh6&LNlW8m1BfR;S%rg$D3PQzPS;d1&6tt%I(i zhn9$F^!6O1W+}Jqk+=7v3g&0s8%fRyN1{wdSa#_Mf1-y_yo4!ma7ZM6FI=&h3GJo7 zbfb7wO12Ay-te$BA79gv!nDuwzTYZH|y>rWxpP5|zU21`3TREzKU(v*EL@4Ai4zvUTv}z^&Y2M3OK2MtqBxTU~BG*Do6G8Nv2Iq*e%-3WPf z3ZeK}oaN(iRcN)s{VrB)4CQigx6%pSCFq!^rroRrQ^cKa$;uaPk|aC^+SI;47XiN? z04An@Xxb69EqMYC$Uam(2rW`)jasn~^SqLam8b0XJtm~caDUU{q zTtPGQN$wfv9mF%vp;xi?D}xU$S_WI{Co^9&g~nMf3CrE({B0Y?YJ7`Tb^7@3ahjgK z)-=OPfLU2}&xsmIMC_KrMw35ofAe|L3TZJUF ziCn=16l}i$3wt;w!du%pr6Y(^aDdFw?Jgo)>BC}E4%Bj{C^|~<{>nyEd8g!O<0Vo6>}2=?1$_5|1xClP7K6QE zGY1AYLdIB`4pKE1HFO^8{G%A+^HtYzsRt6@(8WT;Q<}A<>c4l^MAS40B)tDzMTZM$#+9 zW`_eimpu>BA15H;5mO9;k>Tg0eU#K8nYmeJTa$&C7ejVVr?!*oK~lPxS4#RLvF7Xj z@X3Oy;|6tLX<^9_g|9x~)4!%VC+<_;0v=h9_XtIj$y-O>I+dT7p%dSH$CJj4w{*Vh z>)5-AP5-2&az-;)XTh}8$T4Y9kZjQW*Odw8YQ$OLhWnwS=d+~#U>NFBwoni%CBSYh1xlw3RJGw|*73kStIk#r**yWN0i-4wr54pKhwU!S}7tOT+E zKBixaLRIoSv*MTNqW`WPl$z$y?gJX7|6a9CD~7wmY}47qdWO;b-{P`WHBu$Ug{&|t zoq8$yZA7PXLLkM7xhg-!bQhSlBnvva;?ac5CDyO~XjjIKF#G&oaLdQG!_`Ab86ChN z1pEees_8|yd64+WW0*HPx%)iMCxwxPJxtZZ{@r{qLSO1%A68O4l3F@e(z-}-C=9Ch z)xBW2E5duUY8x>HBEdfV=ui}z7SXR)DcNFtjDm+Rct0*Zd8jcCaQQq z#j=6!r6GfiQIkqUt~3q|LFSdpPP{{)F3W zkX(7vb&e)Hd!u+ld+I3ZQWSX=dykf0hEjYws-F1sNBi7xt6?9dm0^h}p~=YlCRLp2 z9*;`*K4$(cWoUV3ms)FUelUd|!Az{iR>rZ#Ov^e$!hRw<8stM^pCv{d=ckx&z#B}t zMN!F9gF);#V<$O#Z4UC$3XMstHxFMtY|0=@0*~!0sLV#+5=v6PE{|EYL4`!^#h6vd z-91eDs6gj7gXb7|$&P?O$9cteJj~BbFu+0a<+FF+&R^O`b|>}M8Tw26JAd^$n%Kcx z<|)yx+{Lp@C%^iRa*BSmP9x*$%00%FZ4S|J*I&Q=-L&hv|1_Yg=|#reE1m3=iHsUDo6;q#*WO%czfWIb`{1 z!%}`yv{nBwi<$;pJAoCC*X4@-^F4$Q$FnbPM^1tJVs|PvNq4}c8quV9Aw;NVy#^fC zOtdfyVl~B#aBCS1eokx-JEcA=&tgUOXaAwvi|1*rcD`MPa^AocN%ZDkmF`twyRuN- zfjM?vqTajykBPT-2@m4g!FU!>!P25`zomATK%A-Q#o zvcR=crgwFfk3}a$3-Je$<9`_b#XC(w);fZ|l5roMPzTtpQ070ayE@Aa_uc1eJiwj4ejf`O+N(E6P(K1Xs zorF+(!{}CGjep*%4!K1;gD~{N<95;7$>q4h!^Gv}iA_eBuMT?INh0vIj8U6+@V{C( zj`%2i*g&%)uyaIv71~rCRs+Iw1nvn)B$@Ag*u%%jVBa$DT)gx>-3Nb~0a(aZ$tZZ# z54v=49Q`dp4U)E(f+O}d&oel9QAu30T7Lj#0e`%5Z}?C6UPzXw#IA@*fF{TKo8FEC zCwJ5!JF`Xd(C8cfVS8oSFM-#a7cnv`yk!D1>vJPfoL&BzWBlFT!@B(NS%BUNKSRHo z^58VF$D=RK{3_5qf?Ny>jxstmy7+O#(91%6&}2NHN<9g*xscf%RS?cF&KAuJK)e}X zEhPRme$EDXxXU(96YvEA86s!G4tpd25fjo<>5$QMdmLk=DYs^9g_3F!9euqlP=S66GDd994dCYyaEyRA zQC_bqfV)Zu{U@r*M!n1$3k`}Q^dqgo0!Is$IE;m3U3UXNr&j@9!}h8fCgdNHpotn` zI!<7TU&7XRTQe=aNshM4KfHur&^8-lF4C7pgJrM~e&4k&Tl+XNmU7`BDKhhX)|&Yo z4=CEyu?=hWM0XAYEoV(1g{&1H2uyF4>@P17bihKfW!0=4$g;AJI$N{dav$RpNQYKO z&YcrDl$5%Uj1Qw#>0V6-SO-4}#FFBLBH0NHkK)_HvwysXGiiWGE=su3F-}BKWg0|D z_{P8=y~wFQxg<#zflIB?vxhD z{5mZZ)wYiCPBP zR7^7PS9P3g7{sol7tM1~@eR+09H(+4Ghr0uJn+_7g!UJjtIpzMId)KozvZ2PH|YXyA^P6%|Bo22v1iV5`aC0GXi&6Eo- zcGJ9=%7u>v-guCp8f}d@@fpR<&!!AcX+#bUXrY#(=}$^WhrdA1TJnpa4Q|Je9rE@e z2RyoL&7CuVDZ<4Ig6;zmuQ31qfGg6hhT0ZG-)h#|GeK;*=DFGXoWusZ@V&t#IJ1cJ z?|_-qv`+`0huxles*=DE89;Xr9>=k2h=~W=fcBQHtxo}shJog$KF}L8Lg{d|vxz3y zLZTE31=QVeeyQL0cL$)fwmc8afM9Kq4TS|4 zp^l>J89>7!tUSF&GYl>2&Q>Wlz=-yqyV;u@+4iBO{Rgxw2}p$9*okRRb^1NE=rZYo z9J;X6xg5wjpbu`k>mO}`leXOd={Ia1RaLb49m`GwvN%n)2kDHi_PlvkNC>gOooaSB3cloY8{(G{T-zFg z+=f&vn8PO1r)-&O&vPd)4dZBU$k!8B8@lPbSKYuX9J+P3zXK5UXmeXLg9!Ku*s3&$ zrC$jC=0Zr$TEPbl@3b_HQ^oAzifVjmvz-;%8XH0)oST5X4EmX!44QGvlW>Cs@?HYIhqbNd4piLk2~90|!kA51 z{h1WQ+(i2~it7OTy<>vEze%`tg0m3M0LihUOCsF6Mb%xop?J=5&E;-Kg z>nBby0%L5v6n-tM#(2m;#9Xsx6QvY`iF4 zuc+T~j#?7;jBCi_`OHeC+{wpeb0r4qTPSWG8o}dJTM@dp% zgC%*)F|OXb>n;Uiicx})_(LIeY~Yc-;s+Ka=&`iOI08S7G7t6sPV!2!%bM)-g+IC7 zaFV4N$1{wXp1Z)1)x|b_g62&lnOh~TFwI=mqDFO=tO!#(<;S&XC%bf-GaZ1~(p(;} zFpIj_CK9)?CAD&HoqJlr^}>$A3S|d%yP=zbEX#GSh3Y5h*t>EnhYE7urACRPjLZJ- zn9E2-oT0)6G!FRLwY2cjf?KoNWGZ4-*KCIR3O2J$uN!vMPsp=-jDqW&5yq^#FZ_!c z?er16@yU~A7*7V8UN5lQeW;H@^M)+ru}QnW%fXhNGgKmw7DoXG^70a3qh<(po}xW<0+=f4qys|mMJW636g%Byz8hdU7Q_PjyV`>^~o07!YIoSbt&jTVS$3DGI1}d;a z)csQz=72VyiZ!_@W-@Ikvel?%2GdO5AY~{g^`?T$r0U8oKWSNZ&5|tr7@-G!;8My3 zcg_UF8-Uo$o#yj$B4}Yl40awCa|Naqt_2sg>T-!InaI&%S}aEYBUD>V0iGjxke;zC zRCNbQHbgc(glkB>L}%7k=_Uz#kx<;VEGn%j=<#$7R@f$&rETgha&9yb^V#mo5!!-Z z`?ZefDM8{=d{iHK*tth*iY1tNbjV0omlT$G*u|lb9_L-G>){mTSJs)*yluw*hnsTXq~Vkyzxnk^jaQzg7)^))8fXF z(_0D4WtH!cOUas+PH!?ut)b?cKN9~y>@_8Q_*SIg#%}`D%>%psZ+*OVJ*l;IQB{Zm zo`sl@o^eJ+Q zpt{|+r1q>3YT75`{&sbRAK-Ipw3*QrC2o0H3xX!`j{{={m znBvw}$q5r&FJ6b^`<7|rmrjh_9;e@5>H;~6gDSxtoGFVv^X*vEbc)UI-McD@u=LCC z-gaCQ+}MXHe@|KRhd%R#3@}P!k$^|JgN2EU@~uanZFg0iO~9h%^Ah&xv6w1 z5@KHH0&VZC_Y|WKV*1puYkGivgqEdRey*_TxhQnZ3qKVis~n!cde6$DH>*pwQ%PGn z>vW|5gwPRvq+t+Q3z4NROMqfXa)@IdVqQ!KG3wcEWwHQwRBxi`&$HJPFg*u*=tPpw zN-bt~Wd2XfL;Mal`_|;=pTG6cQGIRhV-ywx_!yh3+q;>8 zkvfB-lb zjKi1Tyof(HB?T<7lfwxXbV39fs*gXzsNo`_iWJHlOUn6t;`V$6j+w9kDO_4+N@(Jx zuCb^Hd^~lNPC;CsE04@cMs0B(>_uB~mE zVHEG`c>lYF3bVFjr~Wz?nww?*Y}~0V7*)$+Qk(T!T$~=fsT?OAmlA@}Hea`c^2ClLcD#5b~xDjawTucKp%}4nlUP5(7Zy$)iz{5WYJ2 zsbZE{S$?r(czc&D{H#7U>lAQZkq#)JO%~+V$%nH-;*ht7N89^S8^nYWDxMX6tM7K$ zU#}`WhyCt*4WE>$5CwBkdDSek&RNu5FSy)bsn`yY9JBV$!^Nz>6yrp_V$p7)FP4GZomIQ-Pg?GO72aw zT6)AA&#mw{KiGb$Fl+^3^I&FN!mD+liV-BtoEfp(eqw2s%3Q5qvt#{X+(v;1Uus@c zn2-FbIe*N0(KIh-5Rh}_Dc;s2DN;#B>VKVGMYY7&*GYUY=C!qyX>@N@CX7&=KLFFk zb%)*oqD{1^CH*a&xL7uLdE9N$FqN+09H0;K)?0qHznt&>Sb%Yn>%agWR&-=yLWVJG z6n&UV#qD&MljOwbSIt$ikk7#T*u07$`iNHb6o;oflMcA;Av=`%SC%~}iX!migre>r zm*8QPw*w%3*G#9|@9o^)ioi7It#_VRc1tg8xt}rx**eA=$RMl5lG0sg52;hpB3L;u z24oty>=oN3Y43)v%erNra(08i^1ywr&<&xLHpursZvWskP@qq9KG6rFf+BKI*HsqQR&f?7s^Z$ zol_aEXFcemUkQ{Nxv^D8SScLz0Mt$X@l~74j7~JxoLCyM#CNS!;Npm(z=ZG3SCNHR z8U;n-3vlr}J9s7V5h*QCxzzQ!Zn=UXVRr%03UU}j`%&3!n`@S#qk%wp<9gKDp&}wJ z4;Lyiu<|a_(L2qCwi~KRtU061xZ$tSh2Ics5N;@SE!*{PpR}d=kN&EU!e!)60wa&f zRJcqt9U*nW^B|2O-f3w${++kvjpI27;C=a+sgqpJWhtB1&TyE5@ilu%XTRyR@+mf~ z8O!twk0Aiu4&4YR=kn)b#*pF?&ie29CaGo~P<+_m+nE(hl@SU+JIMkJ_0&1udnA0O zwhtDAvIZ@$?nr~DH36L}iQTkz+)bVtnn`!{$k|()zzMuaB+i^y`eJ-gOo+na4N1Qa z`#Vl!2-aQ({=;ZqK38e$Em<|y6hAFsU;f)tI?FQ!Attn04ZbJmd%(Rh2*Fr??E?Yl(kJk+SAMP7Ra-lNJCJfpbg-|Pvr=fR&tu&v=S z%ME^Tf7;4#dPi(3lA(!c+O`{#Zs8L8@-mbl?P2Tfs~<=Z>_+e4HGyXW60{ox!3sWp z#xn`Q`t@vohpgrJF~Ptaq!@rV_&*~*8QjR`=Gf*~>a-}Mn`^FE80auMA7dc|3v7}m zIp>o&Pd1i_e1$wdNB!sBl@q-xRtve0QYHmD==z6EWl?mG0ee-i2{6jBKPI{dLozXV z^&hC?A;L7ZQbw^f5trFaxn9nKMJmMZqexEwOlZ~1ETf><4v1Rw`b28x?dRbs$d1o2 zo?w>Qrp_7;;Hwi%gocRm!Dn>K@UW?!7CARHB%5pL_%N^{S0*vd&UoA!N|{5g>cF!E z>RQQjHcv#>r6DakDDYSh1`&OJPS95WtjtlIZp${cx;cVbPPrT3Y|BKl(pA0|MTZFd z^}LN_Lto_JeIDVhCfvB+#)nb+R)?wj6NB)@2p5UKTex%tt$>jhkC0i98SG4Z|VZIg{^MwoGb4SKp_)5Mv;W%&0ybxl^vgacpnNA ztvT!Dy#oQzf!PH`qxkN^Q2#4VU>k9*8GxjtTS=)@SH^n0$F@dh@Ga%@??4egtKJ=y z5J;n@KU->Iqot}IkqkOXOE0uat25hmL*hqF34t$s2B`ra8ea$knVdlqIs{;sI&B0g=|qS@?m3qEPi zgvE^pzYnp}Lnz(vL~+;RJLS^jG|3TamI z53zpW3F#bL-v0%&mv{;*-vx0OoTe4dpq^e_(+(cm!bI}Z-avw7vbUH1CgZGa=ukV< zn(;GAuxUfP9t_hJ7l+)g@_yghQ`D3V*oYLv+4?-ZY}87|^eCOFL~kv8-LEqebw;c=lGgm6q!yUEH^2U+v( zdV(-Me|u#osNSc1G)X+>E7w+8X3%NgiSh4~)XBuQ%(O)W`c^(>|8y;lGa2L+i3v|he?2YB|3j3{ zSog>dH_zs3^yj?Y{spYXyN^KNp=W|R&xY7hGTaSUH*qZG1Dpo~(8bw%c((kycFVwX&hy6GLu)?D1x!YEu9LK>feV8ej3j6NIDtF7k-7 z3>DWOn61}8p&6Gii@wh~?SlU5Hc?s_Vr6|;c~h;K1%-G_)@+tpLN&rkOlfc*CiP>+ z5IoO-CYW~Zgv0X*JRsZJ zaLKr-Mo<7%?fHZYp7X?g1Wp6Wf{x6CIbx_`!X^)Rhq)mb*`xtXu}SpV+&V}(J52hG z5ol4KnmKM{untfT%Bxt2`-R``wmn45ztG!L%vZQKk5$jKwxZc?MN0Yo2_>|I<*0Ex zo0SY23D32xhKHfm8*at^l-Gvv56^Ww05oF#Y_xwpmaauVD(}g(z>XA?9hkBQV#$uQ z6y=(SU82+5>teE2>bBbU<%ES8#t+PiVi-gyjbf9A3=6y`8a={p<5Yx;Fi$OI=d!D8 zs8GTW=ib4uK+q_h;&3SAoZ*Sw6Vy8o|51~Ch<+kKOShmb4LWom4bpU2ksYRl$9ES= zk?-868RtuUoJ*E|7%EFJ?XtU0K`PivzEWMwvzlwu^yX82@#n-jEo># z&@UqPh2~ql9hWOg(tKWvKFXk9_Hcp}u$=g{_0njSq3{4^PTxtUxsjOP?kL@zs;Ae# z5tqtvtHFUpK(h+Ouu3y{HruC-InV}zn8odVnw_Wq+&zf4&axrr$_q*$(s01Bc@CxE^bzj>T#-wgga!!-s&^SFE1!Kq#up^NbBq9{MR~oZe#LSnYJ_p zp05@hHxKT`s=181tOoTVETRYt8mj1b+@Bc#_r2WWAjj01265%(>!0Q;VD9)+ zQ;zd-#-I8`LtdpbxKKqH0DwDNiO#kepAjpn>RSk(sf_p?Hf`K<34< zx)_pAu`CTPxBQR0>K3wweW3t3pteUo_{n8lo&;wA;F!pHnqB^$>V75MIUD^SD#yK@ zQ6d!7_C|P8E!@|JqbPBbWEkFNR_>tj_ChFmhC4~8aP)VN%WS5ricmQD`s({O4bKWd zPZ*qt0QEZHny$oI%XhLHdrxEeb48T|hUw9b&R)^ldu$A+WGuc0;vU^K$B+^0+&t6 zQr&ksfa(#Kvf+L*8Mk858d{Qyy6o=@)s%4IQDie2RKV-SFtc;0lX9l<;Eb;|wfS6P zgH}RBq`X;lqFj-e30?BXddsYUtA>21LC{C3!&7VigNlrNxgDp3W!cPO?|%~FJ4 zNnV8?1b+@E`J-6+kX*17S4rX8D0VN16!44ldi`$!;vKI@RDOxwg+rTe?1B(_up5N; zrqF-lCZs!!2qbT>baR_=S@?u8Kfof_M&pO%1jN7N0yqJ$Qu-Vk{?~bDHh?YYS+_#F zAaOuQ@$UtK!FnUD>(+4Mv3m|!=$ne~E`{Aqmm{Xa7$bxcYU1-B25@(7RgB!cT&*EY zW>_#s_DXH|-x=56judi4b+^DotH%Nnw2QM;nbKw7o2K+lsdE?oYhTd?6ynWuUmB_@< z#vW+FyQe%@6@vlA%D#FD(U}ZcWN|_kNhOQI8N^N8ti~pamX3Xb2Hf@7fi=HlJ?Z0GeU{6+VXOZqw2xRTzlhIRl+^KCBPbPQ zhPMt8+nZY?>$?wZ7f|=$rUn3S%Al)!DX%+wN*Ouuo2#b)JeIxB3Kp7k$rK4b=8W0{ zs{}1*#v#iocqtith-Uo_f5`4Kn?auj>)$xO+}0ynQ;(NPBtc}Biep8sOn*5S7q!z^ zfC~6Krh&_mH?Di!p}`eCl{_6-nX7(hzh+Or{}c4BCDg;Tg@>u0y&7DBO&*RtQ}O48 zirtpqOG~*SDT`#alcpj*#I?l0Qi!8gb~%dMKvH?vO^Jc3qyTKEHM;2+<@I8CvqV8m z<0h>_^2xI-=s0Ru`C`%Tnow*D-c#h739W-kWCdEGeQSvI_?oCEwmeOUAib+M$X#+~ z8VSDznjDLd16_IB=eZIELWB^$#d*6Dv{*8_`_TGpt$n!8xFG%DZ(33g5eIW5YN6mV z`A%J=r%n1PYwbl*`2az5g}abhr1D+VVn@=T?~Ip^r>cCXISjf(AZDA9w*LV&qLdH3PEF$b=BVAWz|Dx%58K2qzli#{5aU_hxWNanF8cO%f;UvWbt^6;J3?fm6R+nV}_@-D%rkzu% zhZX|`s0yB5h6m`Z52KodB~{L|7qQg#`r>RqGxr4Og-qK}Fl z(x+?irhJd=d_@)OgQF(ywqxdXH(Jg}-aJfi9(zsxB0N=H*t56vc&Gq6b za3dP#vObuOVEcZ!+72#jDo}>UMdFrnnSfk~y4=iR_3(#*UJ z>%k_2fvSmo*1Ls$!^Mwe*2z_CAjhpYjv zsybfQVyXe|P;g0+XwcRr2ltltzi$XadD5xgKKLH)pYRyQItKf$( zBOCK1KZmLU)bx0AS^>v=W9`OltU~7LD8L*>g{L87Bxz>CWAWn@3sZBg+t3pWnNVxZ zC_ta+NHUBt9ErVOmtWiD<3R#Lt?&ges4@2_q|_xP8Nd4w7`nd8NDyfS4F}y#6V8QE6s||X7hEOoty}Jf@%wV(+uXG(s0-{pvrI7ur-JgG+k0KQ`My^x53Tt^ zR;(1ZQdUzs`9uAvx78F7x5d}yp=^uzG<)%t9V?LqHL0Zl=_kIqkz_*eO3IB(Veq8t zQ&IKMQe#_j+Ssh!%aD4xRC#YA^QuqBQ2`Rj(u?e^ayyQk;&)i+dDij0o(4DRkRi2i zE_drn%S)XKdlGD+NB_9u1eMdNkvWEm*~AJ{`#n)xYC)npT33^0? zWOqy|fewC@+!v+CgNlyWw#{sNE=IRG{zx$5tkRf-9Dgc!ZbsNmhj1RVrc(+BuXQ{k zQE2@hnR+)fU7Y0|M)8WDJ?zhD`XQt;$X>aYR5+!{?wZ-d*{| z14-n&c#?uT@CpCX!n7$PS<7nGFC=T?0C?{X<(NZ87$*<$Hj4!UV zB_?6X`6BxA41RTKbTLP1=Ac)*XcC{Cojjf6j6RYzoiPKHFEObk;rA^yRPcw4xNGUt z|3eq+VO`ElpYE`5wQrr1voW0mMuW#inj~t6IHa}1ktBaiCaEgd^%Ogp@`1Mj>iP~T z5CCBaJhCZs*@2P{q=HXN^|%KG4rfl63t%%c6xY&(qgB$G57Q5}p`dYzfHc=2E@HXj zw%5q*W=g2sPe$W<0DE=$Tc0|E+q~#d!qGluW4Cma&sy(Apq1ZWXGF%neXb)gYxH27 znCyiIDTs9*iwC<_DD;2jx_l?67P@S!+o3&UK-T5$OcwTbd3Q$9pugKPrzfaw(xzUQ zp}C2|s=<(+C%a8b*$DrhH;bUm-%7xa#Lm_7*Y10D#yl-B>h|Ht5bqp!M)GAUN`3=0 ze0>i>hJF&DeGHzF!K3TWx&IN4$FO}P;+Bv6Qb4i(Kp)HODVAN}-Z1N83ArC(z0)G=1^7-j65*|}sx5_3qSC=ti8GCSC=T3N->O+-313{hndJ=X- zL!pl?st^M1_m)^HggZ5qhdC8eINE_CelJ^bo_X=maQ+I7ds#%_bk7%R?oV@(8x3{zhwSO7F)kyD za9)P>{q;)sr^#ndHBnU=yHTOKRGZS`PLNX&Q_t`+#32$>3Zo&^h7v9*q42KS*f#n` z5^kF!d<|68@hZI?I`h-0kIRlHZWtOx^!I)6=;iO#xb2(PAz2P(PTjsrZl9h=*YjnH za-)IWt1D*#QI-$Ih@diCMCoV(jcv&BK&-R?=jMLJaQ`<3qd26;Uwx>9O0LPEwJQ&# zw&9<&Y2NgpW%R9W`k@2A$e9-&CR^Gz`p@pNwqnwq9PaM=Hau^<|G1H&P>Ef?Qj`$#&Xf2fzx%hAsN*8Td8#;b{etd#E0`I%&-F(zsAdUgLg_ z!7_j{Aup#i(WG0EiAhww8Dsx}K}L8;b4931N`oIhn$-!4nRuGmA&fwwigYdmy`EG8 zJJmT``@BC(*zB4q{KO_ieMGe1qRo&wys(+`-H(oQo zxu?BOoSZ+hU-{osx2QEvk~PsFbmOLwO3Kt=t>dBFfo1#e4&;*|q~T9Ub>j%ZH7Kro z4YC2|HHGBYU5WYG0(eJc+{U4MPo(wxZrE&Uc!ks~Gy3WXQ%&XpC=^6puD(vkC|;tP z!LtIU2oXG#mYuf;)Ga#aGJ0?6xbe{2H_-#*0s2&;|@5ngNvmAb`^(jr5z6&0&;FqQ3|PpKR+e z4OL=A@Nmg%7a{%l!*2$e;|=N~UyPc%>=z>$mG567$$z8`>)-klWE)QfP!{lzF|lO2 zBRveL7|vlnlGd!{b$+T*#q*tGyGzzq>7GllBoV?4kTT(UC#!#Gh*{;PgaQQsegr^LLlwcKKQ%bK1th5J;1Zct+}||B2uJ8FD?q zoB8!3pf0P3wL+C{-_AubIJdL)g1LE-j)4JWfoZB-NkdhJpJl*5SxvJ_4q=2ZAqOmX zA)PIj-x%J`a1gqgsoTnL%1HO^YpUm9R#TW&eUPntNKExoFkam0;B_n`j)qhYmVV(t zm*-qR-t2aGz8t4v)i#oZ>kX>0s$IQ%uX)2KWs4+BWtv12 zO_N_u*txW%uL;e}_+mYT^k3Pjk%##Wusx4y4eZ-psQ$1pH?B6{PV)ZPy0ImqgOS_F zcg)@@pnr=SDU4>ZVs9q-NCMb5UiW@sS@s3t#8@jzY+-=ro)AcscGrF5H|!G>1LOkV zb4!aqKKo6y7Qy9SbICk!AGL3 zH-hD6>6VTCF>q*Bm})rO4)`s?d{kuJnvw@sOKl2-E`uL&a|}}k-_7o~ z+{Lp@U;1BIC|M!tIn`4#Y&8>F_e4W0EHby#vU5%w>gHbu@C~_zAWp?}j@HLr>Y&)G zdc)jffDK}Rm-j<*Fd)`y=;NjHmg72|kZ{*f1JC-x@9Xv{Ao!A{2k>kf8l* zWpewd{JnR|UAWON-j|eZKsgqDDIObIESjk7{gb6P$9o4luA8qNPB}|cQeO;V!Kqa& zz|Q6+_D`}H`Gu@(INyLXlgY(t2gposYnjbE;zYQWTBynT>}5EIScgzK7Uy7<3{B_~ z*!$!7MYA7OrP00^Bw(~o)u{c%ZMQ6sUhMZfzsM+Y6KZcAUx9^D?dzCrH%C!{7l+AJ zn$dXTVOo|bfM!GbHHD9ot1xe~RM}T6g47O(=rXuXEo8m`i-biD!}SnZaj3Jy`AQ|z z?Tr-p=yX?>&y0;mvcg224PfWWZ%y&0o`cZb1b4I^zr+ZnOx1zuOqZfA8?mf}0X@M1H44&ojHhkrd)CF3myLZ)Ad8XbG-u;i zE8`Vy%(NA^D=o*Y<&@HZ9M1CDCx?dtvAd;aQw3>xt7S0OB*^OSvk}gQC$WG92n0j2 zLrc`xyTJ5xrq#y!IjiMwZUMhn*!_%PeWqcJ9%sFLXQwBFRR@WT6aac zNb230bJie5NFbUZH6C{L%|=I=BqKVAKI+W>){?I6HQPw7v0K1kd-1J|=wU6$DD1fu z++!VDWy(@8cM&6zD(a_lhr+M(2I*hB0 zz`Xh4Ab}zmH{Y?p;C=dEWL2s<#}lGA)j;k=4VoaJykECUr|zY6t(aRQ7!|zxSbJ@~ zxQ2p-bsFs43sM;8Aq@9Y{Y^!S&(fdR@y5R(JhAo3_}-xT3e zV9^Ve!O0iZ=0ckj#)jo=G)vx<=C(?wCCfqV{=3$FkQwcLJ3=fwgI5k9b+|>df1UIQ z-C&MLhG#-g4}jQ^OvOwY0*FmHG24dh)DS+uBY(ao3?rHgDkgNx_uj40cR%Kg9g4~^ zWzsQL5D*f^Vl${?RR?NU4R56B%krXJty-{C1XL~C4*qJ_Xkz9;JeM$x5GTO6o&1;s z)9#(~M4_RDg<-^pCiRIKTc$CQlY!QHY2O(7K?)s0o-_OGq%5PjS@z+EZ(WoKh-zNef9L)OhUKsypOL;=b~-jHToW-qozoMbhq)WATac zSh?wz_aYgfz32PAZy!3Ud7a{GhNDehbxmsebTv%AVT$7AB^EQf2!(PSNC+{iJ@zi># zyN?q++YF)|-l8a42G;t+ZVi!{VWQzwM$||t7(t%@kmv3$8=@L{Qwq|PV?4S*WNqgM zJU+?>L<^2MPj`4YJ=SHyJA(-am;&lUj(`ezzTP^|QZSk+PuSaX0F!ZLeY ziY?DDf8+vX`i#`rET?{0qW1;KtZ&P}5_~>imVdG(d{VW80zE+n#3+DWFRlx$;#rtx zddYqb@7SE-FGGyITCZxb7U_9cD# zXuksv>!4{MfAhfQdQK-?Bba8~FB^NT*HHkU7EMSno0hEfa`WG8q#QdICg5`}!RxKF zWdN{`@Z*lo6;bKUT468$h58_Nw2;fJedpw#@Lhw0WyTfJm07unP1BfkAiRll9>=Zx zm0U)&?Q8`1mF{HdX01cbWN6gC=0pAo`Q9TCRz6x>0VTXP0yUZ8;2_SIC%NeXaN3qv z7a*7>T)qfZyAi5(3| z(;6ATGIG~xd*UKR)3;1u6HzrVew5)u@B()yM5ke=yBXasuoo*8EL)U#N{Ps`^xYl<)WA}N%4{~!Zq#)(7 zL&nilQ%u|OdFYI&^;ySPgeaaS=@tbCPUo9-+;4e<#Lp|P4_pp(+2~rj3fZ{){XV;WL(RbsL9(*%t_A*;E6P2n=D#9mR$LKh9;>IO%wEu78^}U*zl_R>fCl zDeO-Lz&kIIoD9ej3~TVGMk__ZFZ)cY;-OWG5EM6K>pX#{@}vxBH|H?;dtyD*TR%67 zU{KAfK5|q`+YxN6#fvjHtsIExolg(EH7_20$%QW7D#w9xt>HVshQ?fyEh(!<3c|*X&Ds{4T-s0-s8Fet@_ZCpAjCApjB3O`b z81&QeLiPxwRzKlMcmCVx@g1}|0$>&6NR!sot2~6iKxfQ8)m)K7{I4=|su&rKi=?YO zF<}g!TCjQx2+YCor;uOYtW&|iq4+21LBB;NtVIxR-sy!3E(dtcG;l}GG!Vu z=|!$wJjfU`?4XXf3dLA2>ae5jJkQ?AJk)H*BOk?=7KJ2mlY^ypDidxk?M1TkvyD2q zY9u)*YD>)SNCAc6?Wq@>vL27XEvS$KrQ%LR>%j`pJzWClHM8gd{bLR?I@o#Juq8PT z7-=V_QD14n)zP-=1NlS~+5`>vM;p#He|t%Yy&V;Qk>KP0*cJ<)YcJp{M7G!}<4PxY zq|s;hf>ppwpq+1JXO1 z{qH=PskZDjm@cM6d~e&1F&7#&a_2;0$VmHZ999=F2KY-=L<_zH5Z2jQoq1VW_EK;LP{!lzo_qqDFR0qG}pO{xbA~{+ZT(SW4)v0RwGi`h}do zI#HA&+yhji&#K^NWfJ@C2KQSzFEydWy2*3#Wt&mj^DwXYfuDoViav6Uno>j>*(E2r zz&T6apnfr$l~Qj@AgjUr-k?b@M;KR~LKj}Rzf@ppT=)(EpF4iiYFYDPclK=C+1(AI zjX6jJ?&j0h&WZvXag5IC9=Pv3=B>O=7@xva%m3g;ZSiLSv-TJg*OZEQ9kQHAoG7dQ0f`%OW^eW@x>vB*fK$d$Z>NNJog>U}IeDBHN*hP^&t2C7emeDwSX^0-3AGK6GESPDjYs%0m> zwOJMsCO7{G*OU%AHnX|tC*?MMPTuQ*upCL34hJOF;78)7-Odqe^Ca~q_NQXBWz(o(I=cFh#v^v=Emja2kEd9UC51>TqfJt zt*ezEbRnBwb;pQG$XU&Fs5Xd-QlwnIma5iE)#nS>&F5m4ziyZ6zvy)yNkMso#+KxU zaAf2GE4^EIwUb_FE^p?x$Ts>KslpFnVqnp?y*-{xI~qIbsizfO5sY;esM7g_)ktM~ zgZ99WOJtNTP$F}OSgQRTy$3ieKFJg?`m(I4zeoRgXrhNPis84F|Hdr-`H=*l=)3Of z65?V+Z!y$Nd+I1Z@`nVkI6%Mw@mD*DCE&34(CqehWc8P&1`$WrHI84r@zJk!DE%q= z-tdWI-9Aq)`|YZ8Q-6(97diGG*_IeGNYL@Evt-K5g6X6H92^^XxuAD?RJPYc-KBvs zhXYBZdq7~grIw$fg}d+Vk}RFXJP}5UX@S-$n$Lco zC_s;eXksr$#pK8~gBF$vt_PXGfV(kqF%F-S7wu~$Fn_Wzni&h0&5DZa4JY*3R$yNe z|LPkA9?kLL!VjJfzNj|bcTPg6ljZQhPisc*itSKUP3rRsHTVPV@B6R5T*uWn6RfNB#;YYj z*k+`R1K-)gyx9Q0oryWM`bt**a>UX*Lo{G|`B(MT)KJOV!8%qPIU#1^1GcuIfw}&g zadY%D7T$|f+VP*6Uow9uem}}9K1nS>assRwG#Hlo)W1;(3x;&Sl5t5H=rh0s|E^9^ z#V*aauOH7m03yZ6jhw)%!PM3)Bc|Ksw$nF5Jn&UOS^!EynQW}L;dxm}bN%GB!;Y5> zoG$~Mr|T=I{{`R>6FXnVh#1@Goyq=a}m=61r9J32YwIHz2X=VcIyrBsWYtxLuCX}|y2 z8|r8gV7}*S3-y#B)z!7IGCvb`y5RDnKt1X@sg;+K(CKoDQmil|L$}Va|69y=*IvA+++5K|#oXAn2(L;G*SnDDNoD ztDRB$XS?GTLMwgD@bbMadj6qR8Dz*|=M=1t<@LW90oUw%bO`G6ef1(UpUT9z)mQ0| zEoiL~pkU>LbHS7Iz|#-=fBT|_bI=>5f;RU=Tpl{Q@{pI+?=QZ0s{Cg9aK@neU*j3S z&C2sa+~kl}=-Q)sEDr>H?RePh^m$GT8`EAPxy}Xf7mT>15g(W?1{eDdd>6ryfsrts zg-U%DG-Jd$sIzH&{jB?f7mNk2iOb^e%&7nc^M=qoU5d93FDj(TqNzo^I8Wl(T@#$R z$lr#UvtX=P){q|>Rj^VU zN8{OQ*l?XLm)UEff-wM1M<@zpM6hYfMk175$h_wvz#_ljG>s1 z<+x6Vx%s?x@`h)j?rSk|8bVHO?$gM$NF&b2o_6q(>nU}hh66+Vk|LD19?5Yni($dc zpf`QKhutGIrShHjQuRVx*vdHG+$d93SXNHuck#D27_k($ctWfVsk&+m&PT_^YbhK7 zfUR>wN11gv3o*rfcEIFe2MlB1ZG!QMWR!_L_RSpp>RpMfs#IHCac8#H*vJ4i9kg5B z(%qNdM2S-ijs!!4{DynldEanTU|3_6*UnXhz<^fVyFzggVq-mK0x~rl6z=Vo{n1!v z4sReKDY6Uw%Ii>Af;TTQ=k?;8b|%e#-WHnPSHQ0kS}AnVV`1Cei1Wm{Kdj8U(%A9z zNw7kkAy%fOVR1k8`~7Md>WuPLEJ8nBK^vHe{Oa?#BBxDt^(=StkQF+yGLuLhOMW=! zkCc9OFheaoCH+zB75|}tLb$%)0bY9#xVaLa`gcEkV~R092b3e5hRdyqRoX?Gj!A2mAx!To z*V(gX=#AKuclMFI#t2rTUDj>7^-hJVjN<)qMb{YzpwR)G3p1peSej!R-*yww>4X8JO9`3@OHK3^>hVT(|BK(%SX9}r z(`%TuE+4N+1$JOB-j{$oGVD7`(3aJVYL0`9Kr5+0e8foC%5GMBNkvX-Mv%S^Og{QV z7hBYLeHQOzUbzb-<2tVOYp2T^>;#@T0r|{H?Ij$N+dWzrK|$hp&RbWWpMPQ68uZJr zaa4Vqzbv9o1a=qX3kBZDc;+}Q*sl2#=-Z5>$M-vgf6bhbY6g1VQIFZ+*q;g{89|TF z8I$dhP5HcX(Esvq&N2^AV<8UlEMhpZ>CagTGSCA*M=8l@8yXH z_VQs*^=E%oxv4l*kkQBI;p3e3&pfTz_o_!d+okDK1+S6J6T}(9l#lO025Mpx%$OX2 z51>1&Uy%qGd@_z+N9Od1v%&)?k7;7g5S+9&-Z%&AriGuRI;Wg z%S}SwdX|hhTka_k`Osy)99xYI_43WbyT>LLHXMuDTu9(FTy3bcjCr&_5y!#}w{;+N zq=0akD(%$6l-a+Ith8zoo4wn35+zG4s8H{KNDiakJ+yYAi2lp}&6Ar2C*yNPSMKFl zjP1kN66Nb*y9xTpC34cRK%|m+8_jF_E{h?6befC4lbf%u?&!RTm=6<h0&-wW*auPPwS}DjXaOk?Kz81jHv{Lh@)GiH0O};>TrD`IwCx0-#YOAGC z!?D_G#ABFWkwSe>bY(6ScRR)>YpM^#Zw2h$Y<1dHTfo}n$n9p7jb@jk6jh6-Sj+>n zZt-+dFut8mqr|zG^z6?BY-HUarro<2{Rk?`HLDq);Tb!qzn%_#ax^L%Fmt+_rLc7G z7?Bn2^momP(Dp73wO>~zVZknO%4*!+@Buo@L6j51jl-oehiffc_Uu>?JxgZTMk6ZL zwq9|mAQxa}$-VlL%i(mCx3+^6Jb?k2>6U80n#qC?RT*V1^c?HONP=o#029_6Rnj`C zGq8TP!_OdYL5+TMV;}t;ue9Cn%gsGN6PM$W&`m9>q2e9F(f4ihCE63rINJUco)yF<7u$sXUx;ykbVf^S2*k0(~XB3$^b7E zND}~z^+;l@5oUBBsO%jWgAeXC9cn%GzU!Y{=MOy3GN33GcS(RU^){>Ggep}fc7lh? zD&Ku{MD90S@@y&V5np8%Zs z^)yi6Br0FQg<~D8`fg*253{5v$0wTB;L@B@J5}s4-Rbkzns47kL7WE+-hbyeew^r?AC6pzajRkjJt;qlfvwfskBH4ze8X_Z>@f7OQ zb4%P5RwSr*6+OTr`dr%qE5*}$c<~6}i3^=7T9c0^kszo9vWP)(BKz3{du*0@aFh^n zpLtQYP{wNY$fJ41&mBR&+T=qi$D|w3+i=;DtHW zVzj_IZvwSVu8xu~j6uCvXoVr)D0vVu%@FR-e>o)im8Q?JhzlH+=SPgt_^oWt$B8)& zVrw}u{9urDdjTEVn<&#%uF+VHf#lPcB{yDP>)HG{lbaV|#+lp+(4piY8k4}P&kfsim}AQk z*HSV1Ckc^GnNRGFEE`Jp$_9ojT+>R~3>O0REWBNOF0Nzeh}#WSN6L%m9s|9nk7~bR zwsDdVDi-D0+|H<+i^3>S8|@<-LebW#Ow#^tFF_-6a#<}a(@6V1iWkPvHVBZbs-~Sx z95H6;m2Nc|v)^(5a8NxflD%LeuYQD6Sh}H;-owjC6*aPxbB|Bden>o4u^+IRJe5l= zN?D@XdAMr!` z_B=12-ekIpPx&a>9==<3qp9>K?O?o@pY{8KJAMTo^V4HpI#=Q##Ie_-B|JQsw7p#~ zg=ofihTpn=KyWASX?tFoz)7KeocT>QL=y4lr8?U@I4_)D?u6I?1LQq?$UZ5XnXd`p z9itv8bt}bIDNW~D>Jv^+t!R5`rXp-!~uk#Baih3_8LqOGk*Oj!0$u1-YO^0w~`_8 zMc?|$eC0F)5t1!;F8P}nmkA7btlTdn8;=@fzzJ|((|hBFo3@3Yb*S?=^&f>Rz_OnE zUX7q_#om$-C0>3n=W$RVQu^joYu&q=LY@qH8NJ%L6>ntp#m zHX5q;*(qz{2pBnzop~YnBB&Xcvrv?&p5E2eF4MYwU*C7B4W}07< z!k*13#qVb+R&%*WGtXW7yF5T8)vpGs3JT`g&BM@Ky7{z`%M=_U8`JouCX20$$oh@m zY1Zo#T5uZ~SSKF6j_m{<5u%Cn$gIds-qP^`_Hm?P4fY9DK3Am1^ps{{5?YKe9Ls6_ zzBqcb>Pc21OM6It()ilF&|mN*PnxD%y!~qcUm>_`+&J6eO)%d91;DN3Wd#CKFlN~5I=QgQ*9+M%WZjqD`du(X zCE1OeE^*sVF&lDAU|f<+LvtsmC1Ps0xbf_CM6x*?S&mfCt zi$Fn0Cl@{K908S%0xGTAafTTJr9XxLDviKMxbr`VGdHer%`CWP88Exob$R&}+Al4( zwFHcp!qfTI$3IBVEt2Sek}y0@+yZf$wvXN(@e;Su>fJ6QHycST=nf~hbemSF2f8y2 zH?4H4Doq6%JRS{SNZ$oj@pS@!`$b^ms-$8iRJ{6ppKz}=ZvgHF5ja*zNYTw`u@!iH zXVS*Vs3(JcBl8?&&#Px=_ACB9+PwUvW+r%BW+fNwt$faUZ1P=n>#m%3Zloc@y(T@W zoa^alyYpdMM1uYIq!+wqp&JB@V-x$X?52Nd*utJ#V_!F$Ii_MTw}?KkWXyETzx^2n zvab!GC}%4{aqLv%Zl`Ha=Zoe3q5WB63*HrUN^8y6Njb)|lmeNmw>@m5i70)X(={vP zFjxgE*@DoZy8qy>+MoE#uenT|J}A|(yzED*9V1>*kyw1F#`Vhk@t!_=rZPb;T0KJ& zhV0AR6G2{a?%d+dJ zx$5n4wrqoPhS{D`J*i7LMe7~d2KXBAhI4?(f#6q8JG7vseWPnQ00M|VdXD(@lhXc* ze^pMYZ7O)8bx2zZUAoYBo7esoHLt$&ZSgGA=TU#BhTz&-`=z=MhF*LrJyq-tnb2O3 ztUGy95G9B&zi*d5tWI}Mf2>`Fw!k|K-h$7E!i=Ed5~f~4hG$Xy{AHmLUnQLB|P zK&4loI~cdojEj3z4Ny{x;Tun;t7(v)?sE4u#3~s_w0Y-18I(B=d)q6po22z;LwSd9 z*Z}c6VM39_>EN%nq==O)tyap)HKs2PPp7bxU=-&f()-ihF`B!Ve(^OnE>8vzWLF;M zsLRYzydrESR&GPxCettWO5AUY$;ZTz0WNn{m7IS^2^_(##ULw+4}^ES~hJQL0|23%mQ=5HJp?9{wH0soNE=GD=1 z8F$Cxc9R2g4!4tuoqn)CGo{+kRqpFIs z`3cf`aFqLa^nsvBWF|Gg79L<#PZ2>bk;$m1R^QFs-mM96tm5lAl@5~2eO&j4IcDD~ zHUEqfD|&p}-Lcnqj5z&qIHAouZX}c#e(JDWs;^km|Cbh%L`&6yA8D%N#Cmsm?@r9& zJv(n11B~qoW|nkiQtFK*FLYuU>8;oBPVRBXOk>oLy^9c7Jl{fErfl>i&QKq&V)t(X zV;)xm+(Fqlw?a)pBr*&W1)v?xT<4u^KHbba%Hw~4B+cvcw1s`_y-=JqkyZ=Ez|qiWlan)sJSB&kpT9j zycVLxfy_c3PyqUoM9b0?ZwR$bt%ja4CF401H^qOG%!f3&)XP2nj=86OPo1f5^sJ47 zta?r>7uAvHXW;evmCI3lK&kqf=u^7U&t?8x5eFA~Dd@#Kg%o74QnUzliEe;lUuYIb z@ua+7uB!+i|K<7#x(dz4NOG)P0tMhsQKm+Z`ctpqS4$&OxR-x!7t19dV8S){dbZbA zG@;A%eh$PPH4#tBJwV>{;{|OAD>2A8eo_zBULDDW^gu^>55%VyoGG?izfZ5Vej+ z3gnWSPCU1pkSz_8OTNB{CvOmIsfl>tFdTc}O8G_CZ>n;<)gtww2)s#SrR?pBI<4l~ z1v}FqQsH~akpNV6tUCAx2(-))Gh#r9igpR+vkDJr$hgw8NR?CJ#0{)E@&Nxo0Knaw zE3An98k=ZMy^?z%8gl+*RLp9vUbmn`So7EN|CRJ5DJXpzH(Bsel%Wp^+Zb)>^4{t9 zeg${L+e9BGOB$5&b0UZk0pWC$*8x|NQ5y^X>qu*kT@sEM?!x{Q1thX&u9l zBC*rFA@T7tqepP|xYz5BCb{wTt}MeizcvCY%ne&E6Qx!m69P3~Pd}sNu75zg$~vEq z7IIi>vsN7dKV4X6VG-*}pBWFv>4TBgIy&wtxHP%U4!zh+X8HT6woK~DY`90YQmRbX zj8@s<+)?Jnp1AfiV3e3ba{PP5BRmMyjj;1uS95r24?xuE|Gf~K zXv0WI>uTJ*+a2F2AB9E+uyEOOZM*0EQ8PW3XcseS0qQJYD3`5pT7(ylncq6V+QOVN zg)e_F*ffm_dA8D-TLS1lzA{nH!(R(qDEm$0)ygn&t7U<5mT)^E3j}ott8jvCw9AS}+>lEip z+F2Fwp9`C&L(0r7s!J}|7dxSk;ys3eP{AKWf`#;I-Cn#iQtz&wtIw~Ws&IBDR1nT! z@8lGZ2aD`+=XZtK6GQfsnWm5f`-u9nCTdr=gN)hzE8N3?!uAPLWF)ydUX}OY{^2B# zhn?>E)Q?Lilzy3|YfM-bxf4b3=ZD;yHSyJImN_fbC)f^eII`U;-Diq%kTC9x^sc7uV4BTqL1!Hi$+HfvZHuITPK-519IuUlB?OJ?@`9Bn&#nF#T!-sh zTT8z~b721ZM5jJ~IGH{c8v@O@+E`KdE%>5$=-e4bCc5k0M7jRI7&9_zpGy)>3M-q* zV#!DHHOsG9W5+r;Vc-gd@Bs6Btf(Zr?1%o-l(=dvCMg>7v1g=Q$i#5M#`v9C6`39S zB^Eg`TWnS2z#E-&CP`>`M@DViwFG1(hvI`GVj_c=U91S3Bjye_Xmz1v)pMmBM@?0I zNe_iir?aJ~%Hjr~L?paPCN=%4_~!MR=O~rRn;fpUMvvZ`UeZB~C%Cv|c{BdE|rRXBxJ=zdzf?sacs8y~7MQ!G@_qXMA z?3S1Bkv@-aFahczx&p|={?i=Z)}8aQPAEE?r!A)1YwhEeeZY5Z+3oJpue1CC_0LmM zi5s+P#>E^g0!m!pgeF-%e)Z2XwrmuggfP8&QiI7HUy~{XxI9Qv*df=vX zC14dgB=M76I=X{=uclX2)*)J7E$ z$W4sLp8=B6-90r-vgB|uIC}riB^!E<@H*N&5K(SYKgv-hTA3@mTQ4uNAdEOE&w8l& zcpVVPhxxIf&f1I2i}w|R>R5eEe39U1;*~~3Dev2AKVp1uo|gEHPGX@m48Hx2Aoeaa zDc85q^Z~1qVRG4%6@>eJL{-=G27Z5k2AljV)ENVHx^kmr8nx@rVp_s%>)1!Pm47ZJ zGuq}@w4FYnQc;`xyX%6*s*mA5@mV|Vu`c*E9gE$g?gQtwMWj3Zq|#t87i129U{LD$n&eY;f^O206x8i4*<6P8^a7hC8%%%5+qQ%-V8(FPeV|e zpgi(L;9fn7E?P|KK54rsuqZ%?6WvgS2M(Hb1qD1}5nby;qgQ6b6KZ>V^xkUQbmm1y zmKRQD5==E}OAs^DW;9H_&LCBEWTKZuPS-?zESc+k*4mOiubO{G6?gmb32&wYDdk3v zQ`=Au185#D8{xY_Y_Y9z0gTQTCbizaQYc`W2ud-@i4LZi@6$a+G{XGWu^u1ENWDQ| zD52qMuLI;+VEj*W!JXKy9>Y-GA2dF;@`Pz{lvY&C>U*Wq3OEPRSb?sdjozME?R6r zd&`CA6Lud6ycWqqIxCOFek$*!3N(0kBB zGdzo-htjeMF@wny%P0T}64;TKNKuY2;dhRICbPRIx0S|A|FBg2m`+@)p2}U4bIHg* zKZ8q-hfh0+vsUM=MFcC#nTpo%;1Jr}dnl6eB;v!qX*4Tkdn+Wc@v)OV4vDP0HeV3P z2GrR1v-o`RDzb<2J@>*?ap@uwTX94QePbM9V!NVT`zdbV4j45j8QREDStKL{m2D%Lcm%fnUU(?R#YV18alGNZigskGqMf3IbCdHe=qQf+%GeHr zgEJ%E*?_KiDe;)5Ak=*o`5i*#II490@I-!3m7S0~MXA4IsUXl*s?d^0w_serC<$u% z30`bxt=we)(WUCJ(t>QZo&)c%lsBlOCyew8{LDKWun*HXurkwHJ0xXFx@JQY#2gXa z@uOs8QTw4chQzPpDG2u4kjW!~37fFA2uj%vY#*{P6D6PPK3y&oo?8~@QUbY^o0uMl z$k2bckvePZ-59`vRbSJkR=!^4o#1ALJON5T%?^Y>4SUrERul@(q;UyJ;gc%?(}II~ zI31%L0UcpOeGuQOO_3FZykU}fpTrdimrK-g6b>-{T$gZA-Ey529-w_b;)uXL;|OO? z`UDT&$ zrYPVf_`htj?5akM{>jr}t>+9u93Bc39E{G@PF`6!H~E5I_0-03u^LiDF{!_<9}+2oF^jp~fWPpmVdznXnnBH^W|hQowgD9_S*xj|{kxq;=7d zJBIn}kzuF*oqFSj!g~d#9N=8=4odSoOl+cP6!!-kSV&FHZ1Hwtp36esZbv%es;iQ> z7iW(%Idf?K_FC80AE-YB=h{YBc){?<=c!^Y6laK0r|*pus5I9SORv&ODD>5mB736I z(K$PsPOsK0;r4!Q>L|(|)kHh1XLKK;!@90X+I=R$+`p12sR#wjL^ADU2Qokj(y_`GS&-LQ-atjdu^#d$Wo5t zFESJqMp2-o;b4$;r5vdBX%Qk(4ys--C$-m+bhneA(z*ovIOn7`rgRJiA{^}J%6bxJ znUPnfevQGQ0Lq!UGf@^%@uR0phjHSY7GEncP9Ip#;o$w_84f6k-t9C zSEnDLH4F4|5l32!>}66VSZ3%v#X?Sr{3$!E#r-0yTNEwFJTw?Q+m-Qa1}olrL%S4! zi!GLH{k4hVj){r(xHEG>6rokx zvbR=Sh@I{$5A_Y^+tlV_-PFM@!>44Ip41dHY%Ty>8&ZSk4Re4LxK8;Ll7h%P z&X<=6-TB+)8eAFf0}ROJ#q}Wieq_Ot%^x?2Dh>dr4fpEk(KCTj!fgxcvlHA&aBHiF zo-R;o5+vsS!`P^*pg65kil~t$VO*xSU8$D$;Q8`v#zVQ$AC&Mj>Jw00Y=Aa%#YzXi z!d@6;;f3-i6gX-lBLIT*p>E^9puO&N`NrrO{nR02xftr2N6#D+%P6qhV$asZ*k+uv zV&#$hNBzq>Ar@3?2%5m#_@#gwE`3SIdc~Ze;|K!=4)SZ>Mj&!EIe z5rC?U=&Z%`|yC~9EY0;ba{Kfr++y|ml2BEw>O6y{trxO<1+~if8P7esepauWcsi? zVPihNCzt7_ZuzC{Nn~p&80BmOB8-MVm{YL_U)L94`dUd6(OMyu_!#&<^1ZvT-%w)M zlb>eaOmwqFIQHoOShV|>q->UYDXT*HGVL+6E7p-QG{*333AvN3nQ?K$YjC=w?zX^p*%;pEQ~4~ ziG%rfgAb_^KP-nC>7Gg4PHLGf)H6`0$sn0WD;9GV6bd&J@Trr7&>UI|U2y0u(K3De zYFP4Co_#2T_{A_MT^<+Ja}{8^QY&L)WCLwpwa2p=31!dbklhCFRmA{)qRZ%u`x zhGi0GG&{m-Jj6vW>d9mOJDlOeDE&XyUNUoY?&aPv z4-RaXYj%pV=k&#SPPDL$aGrs-oK)`%cj2qrf61#E(iS=>kt_o!c=$xMXUXD6(f+gF*lQ0kZNgR^PTb(SnlAj#{dskyLa0D8+~kA{~LA4K%o> zQ7x~lK^JX)ZxJKUF*-Dl5l)4V2^Uy#8&!=I=CKvOrwgdqVRQ%!sx}U?5j%hlV1=nx}e)|87&|oXX z>TSS2r`sDm5C-{WE88FeRA`-PKTj?i=INVyVyEVWcbI1s!YkN)eFcV#GM9ZNH$xIx zewzI3x)_pbHEL$DhwRtpt>b`J+NMr;yTAKX1=pd+$*1~=cJ@Chay0;gY(~s+A6so^ z+4h9g&t)IT)O_QCXoqByTo>lFDW@F#TyWFprHtms)O5&aKM5A51!>p}!cKph7$)Us zF3k>;Dx#O6IDy#L31HFDkgOq(M`SIE1yl8ODFF(_r$@C~=#0Hlyq5y$QuA9roUN2- zR|0+*?#Vcx`t2US-r2ObF*|Z*st@pYOPceZxtGcunPgyBGo-Nz?%4d2{qR0@ z^USXcv1)HSU0v!)vn;;iJfS)RSd>s^f?y>68d#|`S83MmSQ=9GmNb$qLG%i3no*;K zXo&4u23L2Ir~`{jA8b3ypIYHoX6FfUO;lh?1Tjp-)#->Lsns~I;A79Fly5R*lICF_ zWTK1rU}K##I7O#M>(W>Xd2bDS0^30$v{leg1^hR6FBRf?`}mfhHmAZJY7zI|%5e>e zR*jHk)Kz^b6M)ed;@{RWZE~%OlUfR%$7N{MFhJH2+>29j#W)dV=1?14g2QIWn}*Zr z#ya+V=$;(lnWgXXO+P)J@-K3F>OSTx9CXg-b~56q6`reMbji0Ex7%>XR7Xf; zZk$=Z=EYV-3`{|Hs(lZx7!!h~2j%H#m4li^QCCz`sIO>+M?DJY^2TiVG3{!LK}>&P zu?WU{EeCYdZ}p8S0GP_-fTCM19C{!wG-~Xyk}_~&E{`QXDLn|h7F=u=;Zq45@33eS zoCtbrM7@WdZ`d7Gz@SLS0_-KCQuhPlR=+|qlH1hnslNC_>wOvZsocf3KYCFSNJKkq z5*uMDmGp2e0E*exkap>apmDWLx_2h4smHmZuohEWf z6`huTLT$f*qn9^@`*`7^a*4twH8sPiWP~S(8#tu?4do3_9;|w8brNq*p7k*0KQ34C zMv(lf=Y%@%2~H$tSUGz@q0(r#YV3){^>2EW{a-2zX*_mK`jbhpsebdv;10dng@m6} z9q!8^j=;T8r%4uMy{mvY{!~3Kzzc?N`d;?h=~oH4Nau|@lqEW4%^B^HJg2op+`Ls*`-dMGmfC6z%&?fc$0h`5zH<+E3d|(bz1GocGYA+unJ%4B)w1<9A!wV* zybNgjtSLM&`y{&YtydyraDCF5%c_UVu-?dGtbIj9GftBtXE!=)onhZdO`kI`lnGBR zj&ssDLh=MN3#S--aQV!|0;S>~Pj;bCWxQ0fUss&^$mLd(C!n$5q2J}W+pB1A3HRx4 zl1zI#cHd%fBSIbP>6Sk#FQa0eTl$xEfUa)LTs^{8J(_N{P}e=e7d&a?fPm=`3>Gkt zO^<{#fmGTmV%lQQ^1`QODzE7BJKXcsO_XMQU%MOR>g*=$HhJJ8EXFZ5^W*i3+<)Xx zXGOqVKS}QM>SM@1x^^ElE@Pis93&Br;?sOhO2fuyJ&G=vg>DP8YPU#&CEC=yw1n~w z5e&!JXSEr!BQM!*PmyR9u_NjW*fIMwu>xfQv@DsG^DdEo0@JrpW-eal#65SVU@sq$ z!cum?Ag)PCLw1Hi8{iNSre!Tq&v~PwZA5>&9YF@K7A-qoJTe@kVZfTOrCBKJ0r^7E z2vZpbKF@Rg$j5X|?7m)OV9t5`o2QicV~S+jy=Y?~_QQ?T1I^3CL$WrB`@l*GFF6s^ z;I2}*L>n|C&KYlAXW|qdBurLp3V?-I2EHQWF0s4>M7aM}9xfh~y5)OlVPM1W6dnSE zy#fPuw9Vt4>Bu1r({eS)jARM|>)NQBQV_;Yl*k1K=McRj3cu5#34+-z6jCE9)ih)Q zInnf%H~L!@zhE}MJk$`7z(J`JDO4p>Y0T6VpjmzrGQMH@(y1IUiXV02{h(NT^@InZ zS7VT0rmQ<<2#wm|4gK%`|1DTGuB500*2&~)(|X4(e<*csgcT;ka#kjRUbo$*iF^{e=A2Vhix=5}bkXw$>NOCU0IKYi!ea^kLo}_3q z|H-1l=ebUcjSI?{>>baBS4{i(nl+BMke(nmQ7n01%{UeiKanbt^-@U(nc7C_1B2b6 z8wYYL2XI>-qxsd*2qCXY5*4ee_LQX`LOG68oc!ZgU9xeS7C|PRR(DArqjJG5pDh#eZkevA zX~sHJjXUzz1@rC3KMvY|o``zG9bAkC|1g`p^$p0L!v%cFTOi`-7fZAp=B8xD=*QbQ z^1QiWJW1}g{GWJXAu^Z-&FkZfkSm2{sr%;B87&~sJb2^%9}`C|6(rpY4&v*CF%%}L z|4uG36eHUfT|8rbOv^xZ^39m@y-ZZDW`G7WV&O&W{vTeed&BjxH~c zJCC+1t4-7Jf`Ug__?1->{a6ooR0E%W$ccwoa@p1l>!0}OTsOM(!{m!X z&Fs-T1tD404rc6g($2Gx{hHI?D5^kvWW}xe&HIz*wPnpi>iv&36{ij`)zW{hA>Oo7 z9@z%2S{6@&RTS@pqVn4nuk&$yGpzKGzbQOGylS1Z!bA>}=fUN-sVR7D3C0dr-7ku@ z8{pJtmfWO@O?>6p__DN^4sVo`^A{Kv%o zcNbB5P3!2{<-Fxlb_V06YXNY!o$-_nU?dkiyMmyV+D>z-5aG?arRg6GbjkoP|70mS zsLacr%v)C-z~f~4NdT%3nosSfLPie-Kb*#{iVlyUWpULe6CW`UPhP;jJ5DcHH-s#< z&};NciA#2Xp!PYyF5Hb>f)TwNrsG#rP_uzvb%f=WugJH$xl8pWVWs*Y#vvN`DIRYh zS52q57pTsNAVrxrXo2IidyCkhjR?CkB9qy)BfXsjU;HM|LezW>zEGTMau~E%84GXX zbzVbk9x@(bvPxG@!1vp!zlLB*rO1SNGkEY7T7QI zvjD_x$u(upQ5!;p5`Q0pJ~o25PHZTUP9mA9B7(9$Z_aFi50c;_8ylsbM z9iq`lc7_;iPNzS~qhi)FRYPLwBS4lQbEQJq_ zvxg8Frs*_9H4Zr*)0@6%f_Em+7b_%vTQxqeQ{B8+=$&O`dKKKoRN7r#U?zU{^P?C( zX$y)#?yuM}LpaNI%$5}*rao+$4F2=ap=i)v=n$Yv2GzBXNkjQRl~Y z!Vif1k@+vQw<(BNq%eZ0{bn+bG9k4;T^QwAk>-Q%lEsQnZ0i{)gwV07TOs18MPmJ6 zIOTtZz{F>f^^qKh$U|~0yDxhuW0Aqn4s>DQ{1_^3z+MD;ceEbLd5j4xM<^(qVBV1y0 zXf1CWG`qNpk6s@So+|MrHrcs8sCcrM>uk6HKAtY?eljmDnx$|))3wbI9Nw%e1rg#nw!>uXW5P>y{Yx z9Dg6-V43V3c07m~Kb%JK%^Kxum`}N<#~1!m-W8N7x?RAN^UsNFu35kuk<{Kcho>QJ z{j|y*E9MPj7*KE|lzpxHir>KDN)FxVm%B4YG_JddQK78|Gj0wm@jc;?LzBf&AMaEW zs@nB=;-#it@Rxz0(5>i1JYdmPYc`fru@59n02ei}L^lRNyfN|aCJ+J--F`M+j6a1U zJYd}k2;e_(Ll_7+?b=a1S;-wxMmT;K?dG{}%6*9t*sAXfm(gu7PEX1i;8o0--g^%{ z%|=1ChMazngN*?0Bxu>(-#a=0r5&h+EtlI|EkboiXA%snEVl#PvE9dqP%k%(=vj|} zO0lV?$5sN+Z{jTs)iWNBvm6ymDG$B&cv>Ge1$&d7Um z4yc~(JdCY6j;$G~s$ik*Zu;E}w72|&TH zrF^YI{h9<2P@69LrU$bdbO<0n+ z_%LzTY8tdFzMp?VbkJGOh!yg}U}H1bA~V!`mP{~r@b#-FkCc($Fk+&UxqXsXDLkqu z!T}5j2mClv&0yxX+46xg$}SR8f#Aar5gK!eX);X3@`|}MEm#%K37(IV)s#4uzBn$X z>uhZGy9iwx1VM{>IC*S30f@O07iT$&lxaRtuw9T=v?NaU$?}^tI^C=`=4}G8Y7jM0UPHIka=tZoH51)Yvv&cO z+0$Mo36o!Z-+rg`3Xs4A6I0^1O+gzyx@rkTdh#XyxE3THCB7Qn!h1dJ7b-LHu#H2n z43Zqr%6>hX5o$@%PKCVVeS7lTckB@24d$|3w27k`4tFhD~@iibA_9{o?$qY$GcNJo@~p8{{xN?0{o5a5c!$D z7HFGhqV=pG$P6OksOh@>f5GJF#ZQGu;HuB5f5`BD8Xf7*Tp_@1!_|#Sx)D(ovHcg+ zv`5wOMi9$yfD8r%K?68mc;EhRI-!ZpjIG`9z&fJH8M|*+_gE_2oc?_uRgbi#tV=`{&cHGk<+3T>-;zofL-5(pt}9*4bQ!9`gE*AfU~A1cm}lXJbsP8guxm@XZK=734DTuBI!9+Htd zA+msWYeMywNuEH3n{`^KU?+j|siJ%J9PjjYQ@|>KvYLQa_eCMtVm*z!4qvE4R&!`N zc5UqZP}{!u$n#KylAR`{H_WsM&)&92@t9(P^oe2MIrKQj#H8tN zY%d>W52l#%NIu6O;K}XM6uw+HcVF}0@LnaxCh$R-Y;uzps_t&uXpy?i6IeB&_NT{Y zJ$R1LzcJ$^@33Jvnyg7#=c~zIjURGyg53ahobh_;K)O?#YSslDWUUAO{goYlRe){-cB!abVz1zwGS zP9V2IsiDVbpPO(SlMYPt=-syG970Y{f|l$61Y|NUY$UeU5R7%R`5F^%t)ZWWXcke8T*DZDbsqctKxp@RwD&lIR zzFls`>1uvlKl3!L8}UmTJ4ZbIb%$iV-kVGIQ}cTh<2i1dJ2*2IYCSIl7_|CX)&+bPWNEINcYkLyP_07e zMpN0J%XqiouH(OCdVJx)F#{9F)5czXhNQV~hSF&Uq?R+0(|4b+*Kjy|I(@BJJn47U z+Qj!CKn0t7=l0{`N3Epv7lL;ni~44HIyj%GrrJ4*CpgB%noO@1z2){9HwN>7M=?fA zNx^1`1OsCXtM;{m43W?h-2`0Y9?e6}|wg-OOi0TQIZ6_G08q*YChg%#<5jef(P7EAknrgFsmE3AStjs=9PK z?q$j%HEy5Q_|d@TB_VJ}C@q82*B`jT)CBfaLl>w8^MV88QlBx?cxKZ2#5TGbK1!gE zJh-IJwdg$}192DDYj$=#@ejJSTS_nM#RvovsT}uW!*$w+`N8|~VQ>k)=OpUkHU=;IFKKi*kZd7e0sWL)c%2n7f4Ep_??`qAc=(nmK%4|GgVG{SEgc|CJY z^&++fUsvsW)9RsGIy-)~n>A($Xo{!Qvtdxplvs#+!<@io7P?Oxc41@66{5~s_5pmw?FU*vtx>w@hx)Rf ztdtc;BAXfo@*$dX*9a!iykWo)!Wkz?i>fx`r5=Jm?u(U$h0P*CC;YyT^twTXVIW{q zWo0ECc@EOm8w;fZYm~e=l*8YgnC5&6+1OS;(?9T&iLKqhf^eAv@l4cYgUyANgSEG= zX4a8%_blNO_L}6!@prg1PHY5fWeZme`E-@SM6hJGeTdMWfg|N+cd;K97WdadJ!rxmb_NRQe5etbY{TV2iOiZwW?LU zcPJk!5G$;8PJ@*ds$_NR342UIDfjBjntgq7h{w5-WNbS>SMsJ8A{i4a%DCB@mQo2k z4ePEYF{I43ymiyx>4>S=JZ64kVy zsId>03!#r3yvhe@ptbthatWXR1@7-7>}@1 zmop3?&f=V(b$%SW$3&f8ZIm1r!>nw9^76q~5ZN73+(RS2EtQ2n0u(~KMQ<#EB~#~&B8&KtHNXij^L?NAfT!EgRl}z1$P2!D$&ez zNs$H>08<3OU$x1ZVfPYz+Gea^$}fA1b~29CRKz81U`nhQx?~kXM4jK$`dk+GA4zLs z2ygH>Ew(LGM(Wjf&PQ*rG&Qs0i_pf>uGL&TB#*3e@d8~ghcsI>LV(uC&Dje3|8;8V zzr1SXb6;iU=n6W4F6aeUetqyqYUQ#C=F>yAwrAcQ_NaG~qH+1r#b1$QY)Qv@kJH3%D>ghWE7 zB+N0TNdbMcO<3;<=w}2Ule&bxk%~mmSIej7e54S3c-+6UXC45g;xf3ds%KRfvZBF) zqzv+BlTBZ}$bZh>_uo1~pmx+>3V|uQ!~pYY7;V+_{Wv2N_S)cKubuAlsa&-qn|QQsqL=%5ioiK2c!m#I3TEGc9&{HLavC z(n?kt#k&BFinl&Cj55hb=d+PR_XwF6wo7ht%#Dt1J!|A1;!@##pf2n!pJzK**Y;!~ z!G8FrTZ}utDaTQPq%00V0gS$rX%C{ReiN)KKKdV1j(q4?yzMb;L&FXeE6EWJN53L7 zu~r?yzCLP$&hV@891Y%ybxA>?@j7YcnO^T{Q1!~A;l=oSZM!2oKLwTKqPcT^I$!1n zhx9TU-N9lMXoPQl!&1%qWO}!~%`&F#Ik3oM^uIu?x(XkW$K68r`4>=i0%gs_c1O$5A2wNl~Io^g{IoYVmRE$pl! z*q4){wPu%Z>W~^H0&dgH%>u89oC++UkLcP)@WHvt2EU%H=7(aOU=2!eryMjiz#kgU z{QcPAJUv^a`chKjO>4uE2d!Ia_j>8(tG?MS&3kC1p6rJQ-|I%|&k#U#YLd_NW z+_pXsR&xABB3^g__3s|+ivb_)Z=wRsOXxvWu-%@SN56yeD>i-4>BT@WeosHy;bJn5s~D&LH1`m`6?EuicBuQkSNa@Eo5-!wCGTj zX#_!eHGR%(+E1S}3OqL6L!H7p3aQ0hN^J2;ix~wf)7^`16r%9luoBmcr)iD}y_r={ zzgdTD=38=ShL#qwCuTu^$wYGdMZ$liy6rbM_wGVfD5{yo+1CQ5=T{PF3fDKoqe zX^|Z1sKtfzgRzC4%v)Vq5g|jEcaxz(Yf=5jcxim+pB}24m%i9dsk`yOm`>89mRsnD zGdCo4wmHFTZZ%ikJ$fn9h`WJpBNqfOmaP?zP03PJc~<50=|1o z@_1*#y4E!^Q&Bovw=k9@Q*{ylaP#X!U;PR-swYV1ut!3+o}eA4sj=?zywP(nyUpgk zUpYeM*;19eQH z8wBpU_KO?kI%h?HdRfC+Q&*;eK@d3pf2^sSh{-=So^k9RC%}|RU#1<4-9)_@=LC_@ zpM(HT9o?$@HQie*&kg0;;k7*Xvx<9055R`tVzWIgUv;~ssAkmidswryC-*ioRU(87Dj2Q|El{_@B1Mbr;qSoPLDUz)Qh5LrP5g>nqy%__YskR zq{1&;9db$E#Ko_)%H++{Z9;A=lmdXi4cC_4YdDIxVfu^#E&lK)o*3`R^7>ccQ#o zyU}5PZV{s(p8UyT(S-@K)FJl(RV_xT27^FN2B2>mP(lnW3aNu0*y*A$^Um7Lblh)? zJ6|W{M||!x`nd_|NjDjKEvkC~&PzH&@Pa{K@uFNlxj7xO3p5zfFk^7LpsV`$=a}pI z&wk zYQhJA^5a)IH{Id&u%?sx?|zp?a`93Cs}9)DIh^w@0A?ll>VSSYd1i9ueut(YM2*+8 zrkL`w+oN|U>;ayoZK$&A)>poW1KL8XrahY|2=a8(oG0K7wc#2}(iqdU}a9Fp? zlb&PFtVc3fZbr#TJ+z&sj`$tlvOd4Nzy?AihNu#COEjrljZb%?;+DwTN4+OGjhW@|8zcG|Fd%8^;Kb|T4d8tHBhN5v90buL(Zow2KgzUl}~S-cf` ztBFC#Q%yA}$J^JW`~F+XL)k3t&ei(t+d(t+(&6VDL|csH5WW~mYK*IuZlfJlT;&G? zrVT2kBOwyB_z{^Z$#~##^#-zL!NW}u!|w!JP%}1TI|t0nf*}#nCXoGrny`@L5zpV^ z_D$*)-C9Wx4r0Td+jF?=3B}WT03L%f+9zQv^i$d7o~H}jB;&NCZth&tE8qNENS*pJ zrv^e!DMGVs*yE#N&oi+aQ`~=3DeybLH!?DI>Gn0=%OCLoaF1sMqDrjvcUg+QKJ2!& zT9&8pJ{8lM$mumzKqf1xdRZ_cr^Z7m` z_h?Gny6I*h%@?d~Lq}~mY@dwf5A9YB$xED#%GN;%&xXcs0s*Hau&_BI*c~4V7m$o> zw&{;YlJp&b5f~K(t|Rb?^N}N6iX>$U&TXw_AZUG@+hxqA%hiB2cE?`{9y!oz?-k+)Y+O?T?xZD_2Vg1C2N;CT);*$%FxOIKdC7u-4hxFh63Ii5eru!{nYooHc7;f=d8l zV%_6}Y!(1|mQ05D5<{*9;@;!AIQ+e*o#=NjhgSZ@aE75WL;A+p?IL=q)6E+OC6wkW)P!4STKQYGVx!l1p|Co`-0rFFG91Rdk#7e4E9J&v6=udl&*ez+GD3e2N*YZN zQKI36)mrrT$AU;53w|3E{^)ygWR;U0pXZtISsWR;lDLddEA`1_74B99(aj+!$krVN z3L#&gN16p`y*7)oQ8B>J#J(qsmP>XaC%ajU9`m`rRhFH*EhT>Mu6`6^#CjV_cp6pK z=x?gL9$5rbjDBHWt`@={kup8@aYyrR2(^J5q6BRbh|%-ZKe|Dk2P=f6!T(goDlihA zj9SI0i%x<=#doFS1g-Z zhf|$>cA2CxgJ+cXrp0e(i{@W{h=9Nd+~yG{@gc9622j8-S=)J>hA@~i4_mdQc?dCq zJU@d(qtk`;cw)md9fo1lFx&%5z-bri5LX3k@21#^ftxsdR|-}40eJo^F+QJ=|yZ*N5xxpdE5%2oe1L&3+t)pBc=_K^IHtnBn<{6q&h zw8T$LVM3|pqd(2ZQeUnjFi9yTP1-bb%dK93QwOF_5uMHoO~3{5(?PrE?ZLx%Wgxas zuos=^5gVOzv9ka@j+@krk-{afVE)z66x9+Se>y~2LCMNcveSS!CJ37#V z7Xbf10Km~>&hU!p-4*JBW)A4J;o#+6(#rC0l`$9^abzkkz~}@^v??!kKJ~aec3(W8 znPK#;rODzrMTKbqgY7}<6-TNV^6 z%|*JsDR+g^KR$H+=}rh+_j)>EI#B_ zKL#dQ#LW2e59M2H&JiLeaAvi7b)Ihai`&Ff=ZdPN;3OnNJPKK4aXZGm?QV)zu6wl` za%kE^iztGVdAQ{sr8S$-5MMy#mO5or_txa@!8qgk&jQ~c!(Yh$|8G44pD%>r;X=?ojt9d7|SjsI6q{&bHMh|G{fmp#ARsGF`l!4n7Dcn=8-yBmGCK(0Hu zV}dRBV(T4V!qZ)zgjbnM72LH_46)m8A2b}D$C-3%Vl#}r#V1n{0+I~*`YUqJNA+wp z#Qgu;_}#PmBfB~#Mh7^!QnPEBp~{2Rk~HygQpZ*}r8epm_;67FF)>=PrYGG0wRfi; zJR_n7vp9Y{qml(sPX_M1uv}03X~Oo}_dn!(`?KBpTaa=HnQ76_q@ag$(+I1cA(u;e z&fe+N#Ef>S7AHQ9AXJX;BOrOeCs(jTaO!{K=aCG;PCiOuvM5uWDtG-?o%9si!#zofg6o~ACKzee zvn_9vo=l1p61BDWoFNHv>dNbVw3?oE+6Wo4;IphXG&K#@BtUS+Jp7(901Ow0j%_>z zAp1Q^j2-U?9;2ms7D4-hE`_>K%c^)MY3FrSPJ3)XD<_~1RA&52p2LPvKb%n;!62styp&0a?JXWkKMOv6M?1hN&(iIL>UWwV^ayu{KY#Ancgc=& zxiE`&}H{Q2qG^}*~8IG)RT3;T!UOY8VV5^_*pN-ygN=ir%helo&;f_KGA zG=RaGXJ`b5@V~@3Y+dThsn?614qVge2JFbIt((3?`T^x$&y8V+!{RYT99Xm1WeISl zlMBy5*h$buO=AvsO}hr7nR@>#_HmZ|OumHg3t=f!chgreB^A^esr4ns)Gx^8kWCMQ zqw-i4k7%wFA&drp<0XKl45&%85D31DSTqS6*TeW{HEstUW~doc1hvaljhe*9)xaPI z<#;`HK>BwUV$PMM5ofWe!hV1M0oEhF-^6q&6}vo7%~Q8yK)}%3AbZlLg;DUSgWANu z%MzewZup~aqmEvR)wS1mA(yVDC3s-}PFI~j&QaINXm&kCCXR+sL9zd%yj9@FF^ z50+Jh9)wr7HLZt>r({3rrKO0u-Y&l=DsDVFtI1~@0s(T==%4%r+qblD$!5?ER-Wk+ zW3!<#n?`aV$kn8ND6WzzICe9MXF&h(v6@>CAY5@fsJj5dT`=b^W`edj8L(jymV5!i zrbrpf3Vr$Zzw&$>-3h=4N%1Z6L5h&(oUx-4^0uE71e8xpeLyxfm4Ea&-u-YCEzm`9 zvR(U6AY*bO#>gVv%}zhTf>h`IwC{~CWZwtlJ|zuuRvd0l)G^0h?>9+a1J-KfigSNuSm z#l{1m7oX<@`zazJQb|^-{u=%yFsp?DAOI(=kRBuQ%JcDyUnP>qqO91>irf-we#*) z%IsO{KH%BZ=5M_3wm%00Oxf&+b-;s7p+A1-GG+k}o}K#FdcOugpUp)pDo}Ly;YYB_(g zAeckvbAO&lV};JM#l=ofG|iRNY$o`5kGGN8j|nWOFi6>QvUR3(0kxtFjPh1%g{)xN zZ|agtkbn6nzKdN3^r;-H2mC28a)t}S9W>n7pSRM>$erIJvM%x z$YmV}@KGZJ(4li??i>>Oc9yoFzSsiiaa4?58UUa-Z4^XDkqXS;o1ehUs@?hQ9uG7- z*G?TRV5yz1SwU!nXNx;q}|v5jdOs zUv$13u1qC|@T(h*Cu*z|4M=X2rh2U)?PQ;&qDYxzo~U4U`>3DMH!=fPRDLyCc2Rf!&Zue!27%Y&|1Qf_h&0<1Q;xFl5ok?0EtrZg4MvC5VohV19$mQ+ z(Ue}4UYL|g$J`gtgf;S72U7W;l(k1mIFen-p4aPSSWStn{ivPzsj?NAR~jh3(>!(q zF@0k;VNSp!a9*k8ylmH|urq^-0<>eH!p7EVHxsuDMhb}JTocUVuQm~~AhW9QW+lMJ zyEAh>uMMh%c|aKZkm0%&@P)9;W$FhV_Zp`}6ecEtcyv|)_!7R)qBn&~wX}?{C5l$AA*bS3Yth**whTNjTsq{{vq;=pd{>%rD1O4SAUOK)jEK!tii5^bV( zy0TIi{LNb-%UBnr+D-zFYad!F4bB$;ErX$`7R^Q_Kc=7`=Ur~kf%)s<1OFbCT`VUJ zcIM?W)VF%d)s@If4lL!suOjb6_5IQYvqZ$0@%r^xfk<}t;a^7_bUubZwpR%ev*o1t z(IY<$VZm&>+$BKWp5k|9-Q!jv{@=AIwpbCv79FOsfP#8)8KKoq@zB@WIk`d_`Uf7v zR2mRi0Z@clj{zHof05_DEvEbEAe40&pIQ!BgukPWR2rUIIk_#}w}ro_>4kyT9*)h~ z6EKCPD6Nnf^rpp8SRWJGfXfANla#ySxM*BV6I$L1PKvZ#BS6ZveYX9wAiH#%h`1t1 zKIbGyx#JS&bPcJKER40h{}$MWLL|V}%-MoAUo2CqY7i5R)2Q;MGSx7FxE|!~Mn~w` z$HL!qNP9PK-ME4l5^FiXz0nNUrkn= zX-OrtkkHhZO%M>;#-`R(7|!KeA7nQbQ}Nz~o6r|^%9Xd{6fFDo8COR+V>0Q4gOcQ0 zC+>Vdy+2iOHO1w`#_K+IS-NV>c{ruAGwCP17>rn%x3TNR<^LE7dEuY{IGZt#ZN)IV#LgU zz^Hl`-McKz#bfErv{9EmzD!u)0-l1Z` zNlIW0z|dn%{H66>n{@BlG`B+{)jsJCk$OcWOir3Y%G% zmmdEP3u(1T@xQ((-5OR>=ONM1i8f@a(_1S}ALKfI9?bc>?T^DG2WtJNE!_ZPTj0L1 zXg3YQ`%h@ zhy9@jX)un>dZPlTdS+tH6I<=()Cp?xj{d5=gv>1A3B!TQ9V9;U2v>Xoi#2U0P#`}h zuU7eD%2+Y^$Rz)~(u2>o6NuLKDm7Sg7K}^Xx(c}eIaf9nI{jz@RieL5w4Vtxsl=0J%Pn~578m5i)Hk+a5z{qy;vr$3CA0)ZQ{o3y@@4zYKRb3ZA6l#^Kzsc*Y z_M)HCuww{(+8?*)!*{OmLY>-4Pb-DW<)UD&JTElQj}&Nc@4|N~Q+<-U29-VUR$QQ~ z`csTFp7ke11<2exk!#06>hZ4xTVf)eWSPnLX9reZYPNE=RtK!vfROj(mL!r@ z28fBk5=NNaw${!~QFR}iv8|0L5-Qlh=`hE}_Uvvh6hrM_F(acy6i_IF9kd_`sHm*L zJ^Vfv0N~p1;?Xivn+&Sfb$i0|CWOeQTx8De_Kn2*H1h7E{=!RqK6-Sv)X)9-w1 z;!HF>O*p7=A*1#l5mLPnD!Fry+%6<8Z{UMGFDbSY<|?b4M>8M2EZ}UEMtU)KvY&o7U5 z>5dqiu?ZhM2I}bl8`7e_m)^nxfx&5jNEQP+?aJn8Zi@sRlb;S%Sjlx1Z$b7ACguyd z-A8Q}irb3u_JQFyDt!G7=)AZD-R~(p#&=lS7gkp>1_>~8)DXt)4Rpo32w?L?*&C9b zyy3Wl*NknRjk3g$mun()d5pe+ykvf!EOpSoaz1CPC;J>T0KGWLhb|QLV@v9o(knhM zeGWr2sRK(8AD^JAK#Y0ZRf;ZXY(iDy847f?E~RjV&M%-Gvrnx;m{z&E0|-n*58TRE zt9w2oNavq~dV#g9Y%P|%{qSa#*C6rrsk% zY$8X^;1C2fmKX$gGz~BUyx{m_()(%JEFJ9{F#6-l{dnyyy*EpN{f<}<#{kU#_{^sA zVBxQtIZNgOZ`VfDlfk+(0{$UPi+Z;=BxmgMJP>QQCa3I;SgwzJQsgDL%q+sk5^UoNlDJnw2S~gwVy&3gmUstGg#w_z0&s>-Q1S%$ zf(=qB#$~L1j;`h>SY&Y@g@y$e{gJqA)iCK^h%6{h30J4ra(GuFdK%Np`59>k`WZFg z!v0z9R;Z_N_~$57tw*%DZBEcPWVG>^YHoCv4OEL=JZfjqAR5cRgGt%H81;jf%AMQB zPF-pmtD4lBB)!Mfg(b~YYft4Fr^2+hd!YCbD3E|JBsKY?if zKvX`j8a?rltfFI+AaEEJ1+fr=L@zP8iq!iOr%=N13&N*OhtX+=bvu@EtzY;_F1egE zr_^X7Pavl58#sZPnA0d=YYei=`ky6k8ly8iNe-?!^3j(OO7E)!(%IjDF*=}3ZHA<= z&gHs_^wW9S%m?z3wIyrr#5g47;xTYeQD`<&7U0b2mP(o-ahlp%yh4q;h{ahD?mU1n z4Mk7q$S=V18`+OG98cb$A?FCa-#%5q(0GL8Rej_2jrjqGioIAe$+-_4Fiikru8@-> zM(;N&#WMuf46FTi9A4=~`ThXlR@8_HaC109SBK}Ld%eX@HsSoa2DM42H~C?0=H1{0;T8zlgBMim}e2^DAXALl6Ju1)gktER_+{6*!weL^ zBQG8r2n3tDY$~#_94`8nwtny@EjQd1%0VNvR#@ax5%}VAyrzhI0b|B}?KZ$jvNJIu z&>j9ti%p?RB}#A4&BC7H!Vg|}*g>9$kOI2ep8|weGzF8&YmD6?8DQzXHmVYfyow?o zBrw7R3VNim1pwPrquz@G-PD{a3a3RddswBwF%d z_p%x{>rU35k3+oHnzxN<3(o7EBDz%r9x;6x`U+W~w3CyMu+IdAKERugUp*{xxtxUV z2Z}IF3scpg7pD|%sYBsi9*NattS=f{9kCJ;<|Q4#P}eUW;WKl$saGWZw*VFT z8Eoo@!7ihHko4i8*0SQgaiROInFkD?Oz9Xkixxz{ta|!_qB>FaK;@UyxnAz!2lJwj`z*!)q?cO2GU!(= zo4ZvbFb6=;-cQ$Vj8;d_Fl{8=^ApW9GZ3X!IM|jlI?3CP;E)JcWNIS)z0#aYFDKJ@ zWK1EtT&~1XAgx+kGieOsn%vKHJe8ZISgNz2>8&gKaTu~htRyJ<^xfFk0u?ul&Oe=cJVZv{s+EX`lW;6d6BV2T;3-`SXb+BdsosI^oQ!38 z_Z(xM_5KcJwjBm4;C0OZR)suW+EH`Pw&E&rHU2iF&>T@Vu7)D5 zn8lg!`mft(qj^m4YUVuKOhCTO__we0%Npq9T}!`-rHqO;yBk;9>bj0%1@NHIr_IFK^Tg3tjK?yxc0FO#E?3!#vO5yhv^E6; z*%2%wedb<`#q9SY(hL>+|L#uzAbzy0;c0JK_3G;o{*&gD7fX&d6Y@Hx4P*Z4KQ3+? zK&=AB2#05z7%(ti1?O=_&MzvP0M6dG6)2C~FLL@!%RG}D?_Iq~fKX#`6;_jJ#Q%ls zeLeC=WKn*k-d)=aEkS1_cQ<^2SjQNbpPb#rJ5^MeL^WZwAt(<#_u=n+9dBFjGLXLn zgi#xpv`ZPx^%uP=lH$fCBYoeSir4Nf-5P?ScWh8G3QlxHHqIzx1RqDKQDJ23p&0wd z8zS)v4q{Pd8I29Rs41p!;7qmb`+NnRHY6*j*`{TJ6!hqS z=*^j+cw|`YLe!EK==_fbOWOUjke#WFGRa$iQ^S11K$rxu(Ks8&H2)2TcpXG3-!0sW z`@B__NG@OjRi(E*rJ9kX$}x*A*o&g)$#+iEpGHx|Pm&&-F5S}o2jVW~_i8l#`#~#Y zYq1*6>8~QEF+ljqWGT%1M!}QGnr-mrbXR5f`|G&8oR+g`7}M)~nIJ>p!yhq3$v97F zY~*NeT9}i!@Z8s!g8)OWM%4K)g)4x{6c$zlZ^8cR<0IL$8#A1k65^{sXL87KIJm5U zLPMwm`9;OJgIG0kM0;5^7ZDQ*%Uf5^^bqrCDn$OoU{AG+soWz`?CG{O+sJ`~xn#wN z6CT`(-gKRteEwm3ddeJ%w0i${3E@Th4}`99OH6z$Or>kDJ+^9(+tk$`(IF>^-n5R_ z%q+=g0DLxl9Ab3S@4d^1qU52|RzPGUV}#jA z<8f|U}bA}w+04qCV^?2rZx@`4z~4%%~dvy zg7Gf|3jRiq*s+Cj^!TXJ4p-^ZN{FF=zqpHMjpxNat#Qa#T&qln^BbDkwl6+yts*i|ptml`u1#WbAKY%7ogMn9hp)f=)0Z$KHyz!tiA%aRkn0)QjRk?Iy7DA(of1@E`vvG z>R=)g;%WuZre;TYavVc5wU6i|8jc+-^m%XOqjK6T4qT3~1urim~Svmv7ViyQOW9Lx(cJ@=PJUV_nQi!k@{*4nkd(H|CoQ$y^t3n9YGZskMq%*86Qm zMguG%B@DLTJmB5URCES7zhgNd_%ruQ{d~C1s?=ti-nNUf`n(V{h z)7&(AmAwhz6JzfZU90AZcHK;zE<$O8Xy@ z%`_RL5G~8+7zph?RycsCeRopJ@xzZb*|z3693r~OO8nqOl0FbWeGV~=2d{1;3H1-m zKB=1O`NG@*6C@z!yXLPME=l*qxFJKOKe-hQpIqlXMy2oB>V2nPfE6PLLk6+J6j^%* zxF3mt;uqVmYyZFKOlryt zJns&v8D_OR4yMOrBkgx!Hbql|?#`s$>%9~vipCr&5VIN*)-G#g^IDsxPqRl}wt&+n%=seL`qI zK}33os*R>LiI`sk#!Lr*PoM>NKQ0Qp9{5QB%3JsrA^5RS_RI5im*V*5A&9JpmzP}) z8uX4-d7IQO8YD1HOp+BeqQ(owp@(zibUtM}410Nquabiu%<#n)afeC?>*CJzz0IPp z4DeQXh=Ku1)v(o#1p|0owf1IgmfW%M=bbn*ZC>Zvl9PZrc3|hmM>n}Gj3aTYo?!t1 z|FQgK(rvog)x3*pxUw>x0@E_41r;)L@@n3W&0UWxAB&tcC5fp2-Qksm^@^cU z#B;ppdW<^IXO>zl7Z4EtB0#+{CZj_*M?}^IM(KIoJ{@?ku$zd2%1ycL-1i&I7ua~-6p;_F2F2Uh zKU)7KzQMx1)pYU1-cM-$p0S8oyl~&drN{ZHqb#H{FlVD-T#|>I>Y%!7UTHD*1y(W# zF)&R#vz^mHxBUozUgJ6^@fa|tOcMxOzjGNmXR_YSmcxg~d8<(ESWPdvSrIe~LL92p zpkgAIdR^*7%{y8l$Jn}B%)q6Nt!uC}ul0rIX<*Gn=P20%t@KJEpk*sIiiWOYwaec&!4GWK?y5<_W*l^<|Uv@qhlNuU;XcDWkr(uZ%{ETRtq}#uSoX z)GdX6>>%@#@M9}CpXRRjqi^Xno(`3XInmsbN`{z}>bvOo5VsM11ETR-hiY9<_n#7^ z!>K6n9pFH?T6Q`AvPglyv4W|EW+@)CIcp3;>91Kr(CyG-P{+-aSZlisHW$yb4geyJ z=+q_aS^qHZ4tmML*?xLRlJSo>?}V3c>9y|7|OrX^`>iLI~B&1 z)Ng&H1b#0)ak0?a6C^wnv}*z+VMawl#GC6qG6PRuR0>3S%6|?c#>h76%tXk@xg3if z^A3HI7}=sGgn!fL};X0$)0)Z~b?&SZijO#Cn@w@ze4pY=$|0chGTFpH9VcP>-tE_2gp z)5Jg4=P5bh(hPcVvh~^J?-?xj=CU*Rjj$+TZX1_%UCL@B3E4n|tv(79b>*(k=|S4P zCZQ@o@+>F?hjysuql91-T4{TNqb4P2nC7qNtDX0^PJV|yw)JN9fr6bav)S(ZN~pEJ z13fHP1~URkPI3otr_)cbA&7!CXd;WvkWsXry0M&VoxCPws7Vwh*68r@wl=_fMEhij{xiaxz4IuFaZO zR;=KbW&C8w!a2w{)n>ot>m)-*rYT|edxr{0n4aUv(;I8XO;%+m)QNB#k(k+MuMo00 zeJE|rvyrJfGX=z~IHlz?8^_G3wM!`eB_I`s3lJk+9ps@x*10cp%A8$%eF)I`Hf*o`8Lb%jysO89^BjcOJz)WS~UuWWjn>L z!yP8p3~yOJ7%YzIL|1Z;sRQ(!*w{TkLORG@IXNX8d`}G1o}-AtTb;r7@67mk!2pfz zye8i4pyO62n=$fuo~PVF9bp7R-}Z=4Y5XM`X7+2ei(1sq4-y-EJYz7U5DP=c#co12DImiZ%%!_Ip&GNymCOPdrJ3W6WqF3iA}g>3YIp1DROp7p{>n;!yGYuC9Gv$Pi*0!C?oq zcaB6S`lE&(?h^lOgs4Y_T%~Y(sgf@0eZsc29F1!$C-n&B%Ztww%;vZ7;ctg>jRzmf z4Wv)!KGLTUwiA#o?`?@2GdG6!s|2^QkVMKx^IZvNKlic~wr_Mi4v)?zWd=~w<8~-S z@Tla9cVZBRit@@ORsETi%Svb}cV(3`Db8y*rkE^+%9b-lsg*6a0&Io!+xw~WJPvKE z$(Q%t0%kRoxlJZ2Uznd1h2~P;NcXaaI4B_OIJwn~#Y87s9?wElp)h3S*Qxa9?r98d zhOfbrM`1!BJw(a+oSoUH(~GumSt9jY#>S?lw0E-!sk5Re&60{y;nUjM1+ibPuDe{b!@$v5zCyFb++|7mw*t5b!<^6P-)${n_zGk1(IoeDz7)?iy zGY`G-`AGkvEmGZr7!nz4oUCpN{5#8D3mYKonCqZp2p`vsBVG09Ek~=SGodXO53EG> zYiY!vB-ooqnkaBtA&+_a?mNktDl&#c<|6SUo)NQYXB46);mR0Jze=Y`vJf5VEwLRY#<0t)G;1kn@&E}D)<7HG zf7J?r+#2kh%f)Rl1S{`eDGoV?s*eHEt`mHGRH&~fi5(DFFV?hFo)#cG-=85UPhgqq zm-Z$TqmoF}hs{0of2@_3iJM}!U?dt$)p2sqSccjfG6))oFoqw%msZRFB+6Gu{Ewf? z$E34Uis>#}d3Iv}u~{#cR4`;7;*OzYy}SlqPt~hGxv)!LF378&ULg)x^`0Ltj=Inc zEJ7b;ucWxG=_GLr#x^mx+jlais@h8lxFDIy{N{w%1k(mh4zQ)z|0^L|LwS~1YEOC{ zp%C`tF!j(th2`aYo+Al(u6u|3E%?{qjRn`Cb-)NxKB;{}`(@a#YQ6JoIwQWNb#k+n z%q0p$G;Tg&4%V>qdx+059sZDc1}KyZYq2x^;RkULCy%u?pEbcU#xSHuK9lt-#TjEQ zMJ5AQqXm#Z=#!(X_N@|t38OeO^)z6wnoBtQ4YF%4_4?h_II=G0X@eAn_Mps$hGvH+ zix_TbWXW>nAO2x~I`m_=my;Ri2$B9f(&8UV~hFtEDqQcN4P+bJcW<_A+E#iD0;`l3#}gUD$)c zxc`-ZJv5#}Uaw-h+{k&VRG`24gF{1YAHewH@0BTDfmy~ySb!xOB`YHQW$k3J)1xz_ zi~Mp_+L|NqQM4)jqwSVK5JOzCxrR=Y@{x4)q-xtl<_O<&BT&RXbu|8+a&FFwxI9zi z;Ju9a6m$NRwEDSK1A+$O5;1{grhOG<@}e*LCf~xDNfss#28^!yeuU)%`98{m#wRIH z%Bh5mCn}fF1M;wk8o3pUAJVlNU&{MQ@rG?TPoeEY-EG2sgL9n({e3RPk&p?LZ?|WNpAh31DE4@s(Y@x}`Cwc8eJPWn zn_v6Cu$2jj>hpOs-m`0!0X2jdLP8wC|>pUEk6--jwue^+s{omoKv(&jg15Z?Q9X-Ir zv;C+kNrsFR;(-=D7SEy?0}f9~W1Kc`5t4V55}WweUZ5q?t*L|J zSGnVJXb+gFMIS(3R+_85x?h@n!oA!WnE!h~QN5QovCPW=k9SY_4 z+yHiWFWUzwW;66d_;+KRE;T3DOLJ{n&1Av>-LG5IJgS|GKj5vqlmWsjeg0*)!Ag#b z)9VXQcfI1y;q`Fdyp`b|RUW>y2!Z&R58%g+hEZGH#t!5HZ%+3Ca=)IQpxBZt^JVsK zsHsja-4y;IMq_Z&W1gCZ$T_2cq&iuMoy0jpPw|9+ox1`f<~$@vutSloU^^cZn2*o*u+nf|}t2&#rkgkR&=aA9#Yyb5qw$$bI~dy_@uBo8J?nWhs|= zd+>OgnaSC_45g8|Q!yFSgkX9237UewZW>{`Iow{)%tN%!kk)5iU{9H-tV){YPakj< zly1M_$ix@Y7f6{wW`E8EZ|gg=TvtK&^}%AM6z_R~iGOug2#QCJLWF!SUqh;ei)NDu zi8Z|`zq=+I+i$k5eMZ2ft&1(XNZllJVYTbZ08DM_RJFID{t`ESxtjeUf-fJ%W!f-{ zUqhjXBUaV961;V9cL-`S`o5Us0HVt5ascCuQ*VYe1snW$WSABFXoGX3KLI_y=SR>Z zGB8(E283%_M(cyqISX~x2^Q!uJYNJ{_uPP;G6#q3@dHY(y2CA35*~qAGDuv%tBF(#mf*E4HIr3fR@)Ys~3v;Em-BPW<<1?dix7Sxv%6e z2J;tQZUw*NM(jM$FcO-2znqzDJ7cTMj7Nu677J;r!RcHI3QQgdrw8c6>Vo~Z%hAy< z@{ZXvdI2fhc*MF4jpha9k`m^*?Geo_9C%mK?<0X& zQZ+VjrFT@UhxA#jrE7fsO;_C6fhVjTWT313=y5lepISF}l|!zd=p`rOAdgcxyTKsB zVLZn;TQmTLE2!**2(}T3=g0Uzp(YdmmW~X&TqTGkkw*Y*jyY;pe=>6oUyr{{OkA^@ zprlpZXaiB3EPA+&xMNM@y0!F;~U3OP6U|?Q5<_3?3ZT78~USE+#$m7P7xn6 z2_aT?x{;&RU$dO=Wu>qj3|#p}fwGHV-gI6swKFL;3fj6iI!5n^QC@#e zuW`X@`)#y=la;8+4w3xI^v8`cT5)=uD^@=D1k(#0a#0u|==a5gw5R{T2_^Z%RH?)J z9^EM~<5>oCDCL-%GI(fe>%o^ADstS|&omRHZY}n&vZacaFLv-yB*z@16@ZM5*)-S`a>AOeu|Xql zc^Qy-kgL6Z-QNY=YD5gLh<9OTi2Z;Uio)1U>$>KqKx(R;UGnmcK;ZPIPv~J(UY&Q< z!yM}$Mv-b}D)N>I;X-vk_$?KU?hcFI@)JF@KgH=S4vJyy!im22Ubmmz8R8k&#N&Kp zv*PY;plYZVa}uSk5o?UZb5wD9;sBokOjZ9RtnQ7xL3(WkxyxU>KZL^UwkEwA=GIRW zRGf889ho$`Yd5kR)4MQb+GQe zPL|$3=4HfE_NW8L*d$ar{4Tzaopoy#=}9@X0~8YJC-fRzv%^+99^TJSsx_|q=vP<2JXPzy zdVo3oQbpeM_@;TY(#I&ET81IH^3kWG6S#VT`~b$(eD%o|?1u%s_?vcp%R7Q2*Erl5 zaeS5i5Yw?no_fR2u3G<;G~s0Iwi^(FgSO?(rq8y zB%A~M0D(c83p|xlkx`ujivy&B zu2Q3nyBR~?sXdQs%2sHR1RwY;{*tCPbdZ@KCiQljDJ zqCxOkTIT=u^C^s|?5FZh9hG!f~%zINT3hr(=ci)itmn1kE|DzVkmZL zBL&^C-My8)0e^zAZxHLVtp#D&)Ogb!F5%Zaf;pSqo-GO2nKNNM;0w8W*Ny?WrV9^^3r$VR6UZ zoIN0@G^ohaIw(>(Y8^@nyX>Z$TDy|}+ zx5BEAwUS~l!k@prp%27JQPVuSS=@YK@QB8eUN3XmWe#1nF^IQr)4&$8+C0eW^HBr zC?$)br}!+X+9#K%Nz~w7>hqnrmK|X&2bsfOrcYj`W1tnU_+CA553_~SWX6B%jc?{i zS#!YI!Z!YfqFc1%<38hMcU}=Uhof_k1tZ`2MkKTauvbx}-ldOe7N%d|g`R(0DOJrxQm-jfuH+0w~HqJrsWz)n)A>)7eqJiQ>nts1`1osCZA8^=J#?LwH z{Q(PSpWxchY2-6=OA&%+|AP_^uso@IKCUQiF6@!ML@L~DCvA=d@Ud1=OIsihIErBZ z#D!o?2#GcWgk=dzUtOfbP9;V9t0@*P{EsRLT@%u1hL`L>TR>Yh^ zJ@V&{#R|8l>|`3RfXt-e_cH?py*+xVTYk$GbKH2h@pcxJa}UWnO0x)#4k-GY+rJVY1swhB~X<#Ddh!6tFQ3@Y_=^MTprQzhp;Ms<#a> zBnICJ7!(BD&WgFRT`Nu}%b4-}jYOpUQ`c}pt@Zae$=wM#@QM_BCnM;^SPSfz3JIsgZ-!J)%J(r zxOj^w-SI3{l@gRH%#xQbXu0JVvQAi)Dp=6{ULa+s_S7DaFy$nT0xW~a9mECe$Kt;X zlbY_HiaU#Nj{yHa0Kinl)idh3v}b^Ym+o;2I5ZL{*9vyAe0Cfz7V2RG>VqH;GIjPKiF*R@D?JLhjYk^~}|Wa!Cd5yiXr_F&2ft{a;kX84`B1;Tl56o+0D#Wc7d zD~0+*1=HBel}Dxk`yqt+mqF|<^ORTMot%k1HK@OIB#96+ru9+ix}=FW!9tAhbLZXG z`ES`gRxUpnHC5Efel;8i9gn2mTf{~LU7KHZqf-hs7;ORa2A+tUVvsYEy8{i#NSYo1 zP`j;7m&6^-8-GcT81SDzFcz#IZ#1d)i1LuQ7LRmug~>vJoF7u?Pzb^A?=5-A#$x9b zVHCR4b%MxMY1if^;*Owgr}vH9fE41$Qs_WN>ync+wjbv4Ftn5Fq|ZEQ2P;e4@+`kk zfUmBxnkZ%TVt}Amz4#xBU!WwMh!ULI$_?W1WF4CW?>}8%x6>Lw@WA?RwsqDQ8GLHKECetPPNrnuU zXZK!D!|ph&d8NhgwtFfwp4bT&eW0pO?M8Ky2LnQBu5%FtYrNLh+}$-dArlgyRb z-K@hR3V)Jt9ap?itH?4Zk~zdw+Vhz|pk1V&Z7vIaKKklkQ;5ER^2 zz$l(_eOGw#`vP-{N;k8*{2by5*wRI4t|z{;&n(t7Ci3ek5>GTQ9$oNq}2Nto#G^00v)sBXiWTiCa2j8yaRrmVL>AyY#tKN8M!3Zl4P2e zKH{NfYODp|a_0|kIXl9i(|xYs4azkai3z_3Nt6(2>~``;6Wy8fExPc8)9QDrszj!tYQ-_8S4es9>4spkEl7g2 zJomp?N)yL31Ed56M_3P^uIwY@Gs+^L?p+rk!OLiR)OdSw;^F=qCA&I-aogdr4LeTA#^uD7+Ey79(ZG9>U4e}=-1_Z zuKyv`y~4H2FU^QkH>zVGjDY(C>|yH&s7y@4WT2Q}}l0Bg>NY#>{6e zh%I7w;F|X&LZJYYE6{akgjshW*7~-?lBqyFGukHx8j$#+?@we}er10~^w`-CgMc<5d4>3R+8azxuOY>adB=x8dA) z(d~1{cTN4d0}U5AS*?+x4+pfMD;izER4BUvW#oBQj1eRF>Gonru1P-&@A1qLW!U!S zx&#@$4p)s#V`Cuuc^Lp4t?42Y*JHoAbk)(E&tqowa1t)kvOsG(e8_`Qw| zorxI}fFpEoLaDjtY+tnqlc!WiW$)$u%VU))H7#@g0~{k>wq&1)N~g0<*~S9m^qg?5 z5EqW?WRsMI!7y*^{B|--I&)iZw_W+u%tL`xG&V-KaQ(*ldiY7isB1W%m$IkMW$ei;&GUlqIpc#v;9x!WmY!&lEQloUq z_Iu21X6}7!X$ zRsf36&&RecWuw%h=+z!D1Ib&i65+8XEku-nR6aW3Tv9)-@URw({^KHY(M{($ZqOXj zGCvSe(;CDw9Uav-B42pLnHb(OJCHv6MM6J0pUgJ8bXsOMEi+V*!ZS87hC`CbF$ENq zWlonCix4y6OT=~O+GE~894S$a4d($$+Rd6MIV!oQ3j6g>-y^ZKLXkDO44g-$xnF#f zArcvu!;T=;%Q33(cZj$`!q?LgLC8uXVSsC9;sJMO(Q;0rSNO@Rod9ZOnb1s6 zT`|8@)?F*080Qlazq(8L1fDV|`RliC1sZ35XE|Df(f(9ATyc(!8Z1nD(rFT4$H$a} z3^t{jUChzWbEbjv6+NI)fP_XR@iba_>-0xT>)!B#mE->5IqT0kOY8XN`5(nxHV zEMU}uA>_?3+9+*)s3{4Xy5uLH-=Zyg;QiLc%M^J2K3aQ~gd5OqbVO>lTzHT_DnS_6 z3=>NpM~M&hm_ONqOa$QHINVlc(4IzLu@RILjb_FZ11(6#Fg!Yp zyt!r({#fb@UBCP;W_^YODP>;{puXvlrAEVSRzdMMRVY*zLE(#<>mKV6ni0~0wul>T z`+*b6V3NL24LR}`M^HFj6q9DDXu^?yNMgaelFLk(!o9v>V`M)zU`u{8yv;g$TTxJm<81_nVs&VM4 z*?&CUU49G!|miL%yrub@1&LOLF64aPE#K6_y4JWX)t2wqD4I@VZ3R+yiF{B^WRVt+}!KRt&G?MKZh`WopjBfS^9(dZ& zvg4N_B4~-eM13-YaM@Yl^F^G1XvY{taHHnt$SWJLeGbX)06T{9j}&@L&ksN;eJpGp z0|8gIps6DSveZ?tAKxb{T6~4#Nm*dWVh3B}XqrO8+-6Z_7gVL3%>Bf@w+&xbU}KGX zh4}Rmug3o9HZ(udue=_fd$Jk-xQyg)g6K7xPhZq?44nI%p~lJjNOQ1HG4^h%>_d?uEH6>P`uI+fkhDUJOUG?3r+964y}c8i%zyCvD2D?G|A z6K@8^a+2G&tG&rVA1;9Ot@hb-%-SKEhc{|I-D6O~dWvDG5o6Ra`~ze=DWrR$j@|Q- z#|Uw}wzqoN$Y^JeegJgRza)oHpD>F3O zNoCiUcBSl5C%o?PQWlTU88IHA`t%cMc|{LZBTI;fDG$yyr=*n^F)J=7@b;jQCr5QZ zfqs2R$OIG8l2vP;E(nM~n?1TXXSq|$tt@-(SXvTgsom%l?xbILq45Ql?On})n%xq< zmqx6hU&L?TUwH9dmJ_^*D2#c95^0lO0z~!*9xPvy-U{$W9Edpi1xt;cRqkNVO8rH( z)0%7Jxi$eug7h7Bw%jIB4Phx3Dj6$Kyv`8LpMQpEvW4@gTj=`u0CO0j*4rD$?<`7N}K{rfkMz^p-50!xtn%L?Ag5{#bxIDi@1 z($hhw==^NbQbQ86Pi(O9-JxxbrsjCnFoR5=+xY-lwqxl<_^|$$59cR}6-!1u;I69( zTOVWnVo4I^`0-j8!6?^By?xhl*ufFzmg6 zR;iJVhEXlKW9r}*w^JJ$YZ=8vJ!Fqt8>6S)s&2DZLHT^}kZuTY6W9(PX7~Uc4wH~O zNwxvWEYNP2zp$k>`QYXfy?#SQx4JhlqDjD_g65N`8-n8i_tAlv!^$zX>$^@T{7*d< z$8F)_0A4F5$SbTQ@1y%hLLmtxS>%(0ST}8Qh4j*jFqc-W<}fD1!@0*BW#x2+Qb?a= zrNMPFOk(W|$H(o(4WqvdNc`dD#UK+0%`$;*$*p{h!(m_aySO5LELVDZ`Z?sPbR$Wf z@c$`m1_Wj~RmVXcJc$3FLRk!I-GQG#B{tV`Aq^M1JPZF0J;zM&W~4(xNsbh@c4Qk? zdg?M=^U&*vC60YsBz@zHi4h>`aTxuj)@j$ynZ}01Qn`xO!%kUTq(;)8{>CUEoLV_D zUC^#>b0x5Qr!f8B*Z*=N8``0JJq?$P>!B5dRMrQAEn5hb=qA2*r?qzdO`Dg^K@~Cz zk#LQv+KaR!k$FeD_r7RB+w{dwB^w%MVC*;ks zpu*FNt63&age2Q3$w#9T^I{hPdFnmWGgagrU%y#JmmNLmnxP1g*7v?TYaQkY^hHqa z^~jextiJ-TfS`K#Bh9CeHgmDo|7oZyZ}8ktETVeo&m|BOdeSSRs7VdcCv1zlhmVHW zHJieIbL#)qYwxAx1WE+p#;58=YED;qv_c`BGK^P~TMK+dC%o{k$D>8`!_WH5pukE4 zJ_z8{W<|6VV%o28IrklUSt{Y@bz;meqTCjdvur_FHq8%t<~Wyq$UQ~s zUWittE!203`+vxP0z)rz!JTPDBACy;r3{u1?Y)@mwA`x%t2lO#<)RG@GVkM{wkUa8 zf;UWPouYk(-rmGFyeOL*6)%IoWitnt$5^xpSw+>A$1&G3I7iER;)(FfeLB0k8}BZ! zD4l(|G{tos7}^=Fs8Xw$1htwCsoijips+@&_bUCFY^%SR6xU2@3(w>IB#)bfNc1pv zT<20%XQ|==HBT5rGBMsEV@82?43O85Pn8?_ICy*sd=AWDVR%yas0q%lgTA{U;ZR%^ho#>&7^Cp8`l^>!5fQaS8Wa;rwuk&j9Ktn_P6P84A?Oo zN^(;KkM=pksNIJ(L#d$czXaG3Dpvh^&YwMuqze-n+8n7Y*uIw+!vc{=jutnKKhLQ+ zTk=)mCy!#Cj)KWi`5O~oyM8+Rq(k0|n+M(sL!V1b_RnL zitW&zSHwh?YOJSZd40i=4EhlWA#tW(1T;EU9sd-|v&z?*Rf>{}Z?}{ID4)JN?>U3*FJwLDq&;%T@Wq?zCEWggV%v8el*ZDz!es^WvAzAZ=4 zLoNAfy2|yrf5c@-2>K97j9tzFV)ZL4q_7~jR9F!Eoh4eK32g$%6NeGbPz%kB4>Tgf zw@UlZp&Fm2U);wMekGjs;`%c50!Y8zSQS(diaZ!+72T0YIBY6jOaC*JBs;7p-P|)>l>{9PyiJC)~C7t}%m5{#-&pf!l}GgdE)m!D0*4r5G>VsQLYB-{6Y9O5##}wjkd)t zLK$J)U!)1@mC6j$y@#i@)I10S?bTAJTA=lF8o9l^;6;NRtfwXT@1qo5z|B^H3ufjX z4n3@lFNg^cYE?c5Qh3e9Ms#8;{zMQcxD&+$iy zqwuu% zS2h@}09S<2Gko=m5OnHdZMs?+tRnHQ9@I$`t{b?S0u} zY=-t`0_Xq=&*RRwqgQVj(i{J-e`_|lkFxQ9Q}CLXk8QnYn`VzQMqvmg1rAFC+2P&q zD(55ttex303!sVh;kvUQ22af+d(dNz_3 z9$Tft%h%M9mN>jAmEQikpy%WCAC%UL=k*my0Viom(gEtroWzD3p4QK9c#(}6oCERk zE{a7NF1h-c?o$<-;#5YzEo!=<@a|KrB#u}_oriMT`H`@}+)F#k$LolW<)PHG@#+ki z@ZjcAT<`c5|(TPP??Sv!wpqc^fduO>!u0k`MYeNjD%)VO_#?QWB%{ zuYJV^1-7dRa!;SS$XBZCCDgT(O?VU`f#n3tjkSbh^9+IjdW-n06Ez%2@$*9Cx zIhbBd7Ovm=kD$n#tQ{a+tKC;M(UYf>K4 zEx5>!8J_{=${@BOQk#DVz9vuqesRJ-KG|M`)L zwP$S8NymuTL^C>wlfM)jbmt94LGdUTcb8V>HYs~DEJC0&0Jdxo&7RSxb)o6$xVk8| zDgFInkA7inKznc{0ytod5aaNp{csDK0gm2{_;Jpwm3hXGLe2!E_GfipcjKxA=OGhKuE`Tvxfmbu56EJv84?du}lRm042Eq-n(uSG$#0E=CVspI1h zPZM+PJXiW!`S1=KTp*6XtKZEMJTKRTKMarpOT%e+kncsUUQmo5S++y`Ry(S$iee!< zAd!CR+$5HixN1q?WM3li_9Izl1cZAUgU9^~g=f7tQk_gn`GD&m&ql!7teE(9^&j&& z^-}qTXH;)RK853LwfnMlgRX%V*$_Vlyf1jmiTVJGdRnY6MFDZ7Gj{(aWLy1O-wZJoU3B zZMl?)?7E4XVZQD+tc9>Lj28oH=P2&##e|SEe(wnDua+w#m1cnklFFoyie9c(42xaE zQ~l<`%)1-!;(4>vS;&Eo9=#ojT8jnCS{S?iI^KN&*cN+Z&$H;9g$L(w?hPVUgQM&@ z%_gLxC>MV6vYh-$YBkk8-X$=2XaDc$*XsQh!JpSuliTw1AXi1Ng{3as{h_BOxv; zxJOd~Ul&8a2Djs!k{WK~04eyf*H*U(s1_FK%P+yW;T0_x0I_Buy`mnErIa{`Y!_a^ zG7xiX{e`B1lZ|@?h0$IND^^gYE2!5a`%cJmv-^Lf7Ttk_wbq`eJ;C?M?P$CV zf5o6PD04w^)wK}FZnGDs@+Cls`Hnve*7wNW-*_YOy^!a6%R8~R?F&*m860k?WNOH4 z#iV!A%02ZXQ^8QgqxTe5rc~BQ$*YKF)qi(YBMhGV#f4z;rmby$c6t9=*%f)66$9m?eZ|c;dbKww3#66BxeciiiSK);>iH}*>S0Q zHGI(DwlnEc%9p&)3iV2rgq^DGC)+(g3u={ckGWb-ONe@}IpMc(m`0p)k6)2l{O?oO zlikpWtq3IXgNx5%F`Jr?YH{3CraV8-Iav*3v%uU&@_@mLNzGa$lHc*#teUKNyAAU0 z9pmB-xxP3zM2YTEAag!ruuAp62nyk7sYC}RKI)R;J5O>v~0s_Y&7WLs#b5>Nw zt=atr+kKAY3{XlcAhiqKg9!M>h=)QCdypx>$#Dj!#@|nC;SGfLt(PgTLD*ipm9nq-XVNbY=>?%TGc?EHkti z8Ka=bBjABY2g&CCV4o*)w(?_INzKVs5NGbnFY7B8=0YW73{wT>qo< zq`NN|Rusn#a>C5%!K-xx8siH_-LY*M?KLa7kQp2bn1j0WRIX z1)f?GW+v^5gu;FMAgJqdB`A|r?M{aqIE>lU&1NT{*tZc}@bpoy??FaJ7?K;*iBV+8 zg$0=V_SDv}<8(_tKhm6YTUwk)MT-tCTk9O1li&q;;fw<^$;&ir;UNcE8SfG)6oV2( zGKteGXET+*0^VCuUXo3Ail%STE213*l%h#?u{a6Ix381YEfr~J%}+~!y51Kp+ofht zSsuLE?7vJZzmB*RR(F<}H1Hu!aIja}01qrQr29jjDO4kP~LyS#LQ%Zrh6UWT3S8h3Dfhu7ic?cK2~ zk~>m(`#9&mEq7~N-G;pybe=mH$R(#NO(x8AHk7G4ZzCmHt5C4_2;Mvyr!|sv`L}gM zHI1z*= z3LGUd=U7_y@qc^bU%h&1pvQZ)USxpJ#9$lTi563P*6hpzuUI+f9YF%07ekNZoDMI+y8==AR*l??0~ zMTlu>xZB6m_JG=V#7fp3aK1;UJK4~38>v8zK_|ycfdC#j$L7vH*aHvcE;qEogFe`+4{vyDIsA$VwE~N*~utFn?D$8KzD4m$)70X z&2xzlH~qP(2vN7u7&%LcZtgYR=O=D40}g~RriPnx%FL& z1g_>PhSDbxq{Wh)N|+tW&VdZF=!17{Z^eD1<%{b_{n&2Sg3`7Mdj6Amz!v#h>t+;V zRE^=-oF(7e<5U}td0EyhbncQkqdpbl=k(6%5=N8hEUqH#^Xbbpz^}O)Uz5kFgYP;7 zLB*DlvwLrIM8@qo2?+JNGQp=JB2Q`JX0;X>34G)yOD*tRQ28Pd-|N&eqf;z(m~iJM zH-v7}$Ld9Y^Qs8_E6|5j%ySP5>|`dmN_bdZ#tPySR7GfzE7>hA+jBHatzy!S4wL_> zz33inb`{9WCAY~2k{{*yq*d+(&s@WiH?h!SW; zegK^+mIfSKHo4;v9Mn(bX&?}fKZi!%P2rP|Ez;!4G#1Sc?MHHqE3tSuorVd>UBua` zE9GU3gF41rY& z8;Rb&LqSIQ86EeSsIL{PV*W-M&XFT6s~y819~$++GX4O8qR|`HF~{{fiBqV>?jS1 zVOVj)IM!9 z8t^hyIr^EU7`0-7I5GMKqrvt>EW$!K(J~cdf9<~|AjsVNAJKtyKuj&!Cmxr#VNmcp z+%+`dq?67z0)Gymn%hR|x`bdg1jrYXu^%+A^;HT5RQj;txrHv`_%S_He~5=S-SA)K z763O~LCcsUn7?yy5}oWD*Z)n!>dvLKuR6u&WI8#Y!jt~&C^6N&h35yvgHmz_7g0OD$dntjn*e-Bz!0y-HbA_OJp0JH zpi$<`PTYoF?;H&g<7Z>FQx++Q9OaYB5C&^kZOUY1N}>3FIefKsriafskXmFEP?ovx z#PCAQBp_b|Fwf)TrULRs!THn&Z~w3VNF-vb`7eRvlQ@56?1gTH+W0$UE?^?z$UTSZZ8k0qJj}d(3vB8EaL1?ISDC zVI}1CSVnZKw>nw#srWkH-9HGGC)c<^9I;Hbo%!4nm!m>H6<6_`nlSfq?jRcr?&-g) zw3Q3@NUSeMipr#m^q{0@-ICg{}I?9x5rw_NJ!<+UCs1Bo`HlO8wg1Ugl}}J&H?6U>1(?f`vI1X z>(U*Xw-}xn$G9?jh*O(H^2oZdrXtx;=~ zyrTh0@0m>F&inF>O&y5b`b6lU&`+YlMd~>(No~$cW#)hL}mrLjxji_ zAC%TJH6DtFA8o-pz<4EW&5afTdbOpG&=9$>um^G`6*9|Y^x{aas13m+H-Vo(v6>a6!- zqtc3vZtQm4YKDT4#C}4Q?0tzJ96*Pg6qH|zL_P;I43m7?Am#EM@aE%Ob) zPd1j1<>X9`{KVK{3j3QK@QZnZUW|H}@^NTbZvl}fM0^gWk*>Kw3`(9F6p~Tg#I{GT z1gfRx?J0RuG|IfPO$<}*C8aN1UdpQjCaGK3H`@Apuel38Z~iAb(D&aaG$m}bth1(; z){OckX(wjoA%cAhWQtclTUNo1Itkf(@`b%GZI5ZZ15dxs<UTG_y*OCE;$c}QYE1=jYBu1zy5D3MY~14mf^u^ozua8KSFOirem1i-VU z9))0l5p?x7Y!Xj~AQoN=x5b^9*;eaiY=)5*Y58%>w=6`Flf`od+A~Z4=7=Z2-vdf6 z*Agbic~el$x&sRB*LmslB`&|f!%$!zYOe)0=nwzNxFN==x5J{^-U*nLWK6I7z;Rb+ z7%;*PVtWG_!8lpETeazLjUZA`%7|?t88}CI+FNARB>kMO%FEYfftJ zM2+V@2HTR=F|fwf9kvZIg_KKoE6vzhjC*r@10;0hqtmQ!=<>X1oC2Z#)zhMiG>waZ z=y9-h0qzc-n4nF!FU+;8I|%x&7NJ*FG7qQD4qQsvW;q5Hs>cENzVr#Cmm57;p>UlR zYXGMlN0;}EW!V9qI0xvS~mystPQ^d}1Ky@PghTqgJ>0fxU>wng^nAw6DF*AYW6E`1gIHQ? zy-+oJP3i4J@c~vZ?YCu%!{k!=8;CQ=_Aw`ViwqY9^3NBKNd_8VD^9m?ZndO1ePspp zkl)ZyV7V`RFzSe^_wIGRanB#rr{pOtFCNIfudj}$N|RlhD9TQ{GRddht!MG-?zNf4 zYwKiG?0@oV*#Ekv!G||$Ce_}^WaH3qS+ORXI+aJv7|nlswnNJ7Y1I9KrbTf z>yY7(@8p3tL{YcoMaR0J$1q;*INMrEosO#Sh(Frf#3BkGR|zwU-bU_(<$PD((z(lzfaq=hGj9W2HxZ=utm*kjDk{@Qk)GqGM|O zWzKcJ22LBqBTt1iOldh*q(oO*dV~yAHQ?5l{FTOw)TVb{lh))x!oeqE@+$Q0D|kTi zm=qj;kXhzEu?r1f5*i$Pdy(HGWnMHD#!sG%=p+N#UyIi$tIFkon3jA^E$~~B-K_oE zey8m|M!*GI?K?EG&7xjq58BYDzD@6FAg>1b{|B2!hxd?U@Lx9c^1k)BUza<;l08QT zkt*oVh=*_MTC(1|74)NR%ycwXmp`7K0%VJQr*yz^p=_gZ><;>AjV#q#lHYw2_wpSPp)7R%+f(WjpYRg;j4>+p>mf6G zJmjlEXCtYa@U+I_X3QFZc_wF5vbW2R!^z{J``e&BDmuEFoa+#13dS$L5uAav^oDK? z8Q{ayCZfX|UC_;o83IARDaA@r`ZfOZnU{phuLdtmB{9?%of)(3TFFBMdvK{QUjkxH zj@m5#;I2 zu#vcT5HyW-;0xahiHH25uD3XHQo?o|)&qAW{~Ll*m1aK7xn0uGzTZ1U$`XiPhBmpr z?(EHT?pf-(yaQa4M+Y*!moN)c*wpLRTuWGZj}B>0*59Aqv`kusRmo2(5h)#Qq-b=6 zT6|J%>2pd7*So$LoCe5hv}fdYjYCm= z>)%hfa8L3amKs!efTc(FUW41}G4)W_-jduqD0_hUZ%#N(gtde+d^k~G`EO=eG-GsU)8ist-PJl(?l~bSo zn1hwG4;xyFvj2bfFp_W_eAHmKO$^$b#LQw_>VIl^pr4Vg3xjVTeAw(+9BS3dXWun5 zq;?*zR=m50A_Y9A?Yq_8j}1(_D)bv9qd;nDb&C-jxEdX@Ph8~nNLDhLQP?)4N*#!hV3baTx104IEPq>6a+x2Fr-9K`y1w;^%NC@YJ`1Pf7s5$nP&rUuDwF(K;F?3Ad;s>kIlyf<9meE?wlc@ z3Xb4v;7paTA9biy>|2tGXi)hYL|)?3uo#Hh*{qYhP%j^{kCptQYN}Hfmh3*97%>RPA~uJ2V7cV(aRcGbgK z_SSW@Qta~_;7i{6Fs=C8r&!<+fV006PFhU=guoQ?a#5^|^525kb)yo1HF<$Y&1=kK z5+3;MsxS!4%LLwco2Z~BfixlH=<6Qj|9<)q_B?P6fNa6aVsvE?q5(PiFMqdW;gs5F z?o2dnjdA_-PnNiQfz`YK$tX!roqpdLiT-YtO<{1AZa8OWkWKhS!u&d9pE+v#Mofn< zPP$o>0*B$k{4;qj+_|UYZbE)8^t{m~pkW-GCc2fv3$R^UV?+4wJJAT3lP0(?_}q+4 z0e;|WNk5uhLH?3v5)=`6yGw=x-DgUmFRT^=uoT+-*J2OdN@Ny-I1xFgMoQ> zj9ErH5*6(xhfzM4P+2mdoHlHA9CzM^9R5t`yWwZ{o*110Y00|;4GkXAw#pOB4kIN) zzLOk`vIJ4F*K6o?1A8)dk7)&-&ojnj09{~+jQFFN*!@mfjFNmVg9ZO(AFll39gv`@(}orl-OX@kL*Z2Z$^kfSoYA#HSl)E-uvxh=Aj6ckW@S~-uwRI>3O6X=ijjq|LI1=)jN zLeu!;I^W>1Qrm&9Pq7*jLd#79{VCS_HFsO)^!NnYg9!1mbf&Wp?Xz4M8ecZ!W94o* zqDElRsX`9`#0)G(H%QQ44^DhPVs#1ofQ=|9emwBIZM>u{1Vqb{CtN#IT1I9j?H2pT zwaU+W+*sG*w6C4ZKvHG4BG1L3tn%MpVMzN0WmJ-$c^Q~ke01$!!D64N`CPr_zpt*5 zC6HXQM-z?XF4c@8o4<) zbk>@#eXsu7g32yYtGX~!%8QRuXGVn9VZ}h6LNTc}3bnb}T+3yWxtLDcP@l9)doZbN zQDt#z(`r5v_o<8TRZ<>FU+A1T$2^8a8EsYjfO#9E6OPFtR6_Ol$3Zzj{yZXcr<*sc z)tJ2S3Nak17-OoLN_~^^0F+>>WDzHL9UE8ofa4ojDWUexs%6Hm*Dytj{2)P(L*j&EaNV(WmTEOegln8pEL8xsoO2W!)~>z^~FulKc|#dka3KZCLEa;tP1M8wqMno{4`Drz)WoZje1nQ zgyDPO>2#$fTGQz{&-^`JvZ_9PF^X_%tFvaYhX*-D7*WG-r5A-8n#FG>{kl7mfPiAw zL>5w3_QU_Q=Z8%d(tmDPh!xRyWqmFa@9RH+K<-Kdmd;80Y;`;Gz4+8PAWdc;pJM~4 zlJ170AvJUs%%9AuUVS*3O`x#Ip->{=d9gG7nMusjlTetytw}*eq)CP{0Vv60K7Rug z_`1fJPO1@PaIX^eorW2Z68m!L{NTmV#zyPgIJi2+zFwDkUUS*Ql^!~wi_4c0;ep9O zonhZ`koM9mINri=B?H(mI_P(H^91dDRi}!7L?Ub(6|AZ=QKJcR?$q_uL^X9-V9_E} z!)?Mhc=o7N=T<^H?sy^VGIS%q8@G%!=w)Jkd?5y6gJvbO$=&!JWo8TS zB5hud3AftNTq<oCPAXb39k*xi0h4@(xRQQh}z>QM5RU2Si3OW>W z_oeNZ`)0Zt7`}L!Iy~i3W!AZEVa3_;Lu-bHS#V)}N%%8wW)j6#&~BJ^97&P;77O^R zG~4wR$h+7Ed}X6hy0lW} z%sJv5(~xVA;g$eD3CGIS0J#&Ge4O2%O?t#X?V?@%FwBu+o%Xu`@K!cXI30G(xq>z7 zOMOR?$YS#cxje%Ev|u<&k*h8F)z5Ut26yUNR zfHa=A%>$Y)P@lT$Tud1pKrSpTP5uO)o}WcdCR4-f^IzkySu(v>k`X)71mY0RvM~To z7SrncVXdv~zX86j4>H z&|z?k!*iVfYD1%fM69IXKTRr)ajR~SBGB(Kx0JMa?zL65e%?P{T%YKs>(%*&leLYi zNu0oDFK#kw^J2WPU=Oc%@d@7^sz83LdVFl!_ki?mwKFJ4gDS+3nS$8h!r`$(y#cwgiP7`je+qYeDymDi|pz zph+i~ ztLx=w2ZKSYvNqBqaluE{Q7j0mA%9DNFr#0uIX3zMQ893$k9~MJ-hV#h6jD#LLsW1_ zkmTT=VkVsH>J&Xy7*snOgm@1s&P29BIGAw@*fzj+?t9K+kDWu#5wq-7;jK|f0b;~F zq}mD})84}z03W%fdje9^3~UKlQ7~K4VI|*RqG;8m!xkD=y-iC`Z%tQwo~{H z7ts$K9d6umPTS>K--P{5;}X9foHwnQRExlTAf|d0`Xx29`VS6$5f9vKB=jI*erezV) zBImmd;SOS;mHx;T(#@ztw%#oCwl;;&vbOcFHD6n+(FP8F(BjnJ-26X>7G+RhCknal z8Xo0o6yCb;>gf@%KnE_l-=c*XqNsJd-p6b)eHk-_n4-xbpizb1YPrSfO^UoizYM z4@TXNi&$Dj?%(zp;j89w?jEU(-dGx|eT3KKgExKhE&{hm?(C;BWDV|T`$0+2Sx+3lzdd7m`d$i%1HCdU^|c7MVi>S7au|vL}1UXQi z!8X}g^XWS6{Mj>3m@E!yN^$_4#JbROFJQBu@yIky!__uW74_Y^cfzA8vJxfY3Of%I zzy1GAaw>^)W4m|tkQ7H@gr?h1ONAe}WAwvhf&1(&AM8)iVRf1={7tHAUY!%`Kt`Ii=HkpNW>x03R`#9tUv==@vMxPj9K3^3BIM%LKr+^ zz~6w#v}g9q93cj+`34(VLYyVJv{2`;kbRjy6-LinxMwWMJ3a*(l^Th{vC~U=7Vq}M zH%R*ZhGwZn0$1*`1&rQXXXcH+`Obw)85OspLt{xe2gnZhSesazM{E2sT_xKVWqU+L z&WLR28P*behZ&**V1jlMkqxIGlPKXiqvNj799PEhIs|iPvse6A!kl3pA{mZjdh#D%bKwf^1FN-LS%;#sS636@gaN==p;@9xO#1V)?_pT zl{{VWc?q-97x9Tn%_*-iY~<1dm%!=%9{CdY=Feh~oORezAS^@3h#|HKDa@YnZuFX8 zrLmo!#F_9$AeNrUdB={Whnk)rSPZoW^gO1IM314pYjZT|kX64I#?&2?-;SC^Ow-a` zbgm+ijt=68xcrz=bb0Qf=`qV7=iPenLca>zL)edVDG^=4EOki0@U39e? z)pVGUP63s(BQ(hlfA87LMKINR&2o?rcrPTX-9SN$w+MDLF7_KdB3ts)yx&&G`eusv zSB#)m^bCQlNzcML8xRAMdifpYUL#>I$4V9XIJJT&WPOvimlhZVizL^HZdt611LJ{I zXsVn{#Em-&lduDnjN1zNOmaL&jpVXOH(sT@S)in8uQT~Qkqrf1Pqi$i(Fac5`+z9w zw@Xw77T(S7u{G}!35BgQQ?PgE#V-`}oblJ26t1FUCKOUvd;AT{ z2;$_Rr}XTWE0fM`3M9La0FmGM9W0*;jNE_b)!Oua>*217)f0h+D?O0M2cQjTa3T*< zjaV37w5ijZv-5g@?8{9s{bQpr2gAO^C*m;I(EU52!+ahYs~yh)HXwDr*n}-%&d}sC zaQZ5tr$s#kXN47R=T}HNV-k9?d?r-7q_AS{UHk|9Yzi^ADal}1&#`^%8D|y|nRt#% zK}_!ynG;6Fx&-%GZ>*V6a*1DmBMk|)$K|2TuYBl2E9^lToh7SW1Q6oY+}=~j3ksGf z25@=QnDsbm!$yvw_FrN`)6%MLSGb-|*{0)44)d+kz^HC1Y2o~WvAC>I!MCS z6H6cf4oH;K)1dqH5iS>A`s=m>xp*@8y@6hIWTdsw$U6YNesG>R8;uFZZDxRLg^PkI zrzd8{-R1D<=YN)G1OPP&DkeV8?^hl&g|cIcw>meHcPr6!Ud0Ya>3P3KC3sZr%( z0-U<~*-+NdQKZfmP4+;MbQe826%fTA-p@}VAQ9L<6KAymw{IGQ``~Wh=3b1%2RA|^YQ_SR2+8cIgXk?EFuYvKW`#OBw67# z=z0jz_~jB*vQxJhbG+CWQ{oQRv63HE1{dSZJ@esB@L4WZ>~UY?o6q{?l|H6PD9r5*?MCSUSl}Yvq@u{#L(KYtGl(*gIrJ5Kfr3T+Myp?xdw*qDt7lg2 zq6W5jaNIC+L9%dk*WTAY&MA)vQSTAV4tK}1d~HEC=kZ;kkSkLK=uu7U4_X%EE>~Y^eDHk#rQ*% z0`DRqYlxJe<0H`ZA2nPmaAd6Wc}ya57R(JFpgOKL-ZE$POIoyq*3M4INSPwn$OXaoh}=7&bu;dY|$qld2B;06guP8}I{e zCvkYmQ7N=r_7XKH#<~2ws2408 zzv||eGY#RzuVpQ?uLarKm-hVami-wMZ zb6Pw6e*hMkt>JMJi`LIX!{3Y@d*=Eoxn<_Cw%NkmURm82BnhG1M{?7Ua^P6{M3E!- z!Ki(>Q{YaDaE<4((KT`96SWl(GF@i)qqU&n?JQF+ObyKebQNq5AiIbpAuB-)DRl^p zO+XK_GfdX}newR)W?Q`{l^4JX>tFc|1V~uU6RCc)-PTIT6gK(}`dG83NQ+!qkz*?E zL`x7lc}yad^*=dj{C}jnP7Jy@7C1utPMT#V$UYIbl6m{ke0=vk5N|@6be3_sW@E7a z&62*4349YeF8#JSpT0x}dJ4YEEB5rA0wah+@#(ZWR3p`8-uXw(R?!n}tW-=ae`FrNu``vmsM<+n-b>eEGY&I>i}~rUlro z@sIgKP+CQpivD>G8}W}F!2aJ7tOIJByqqXd`@O%!eHCLOs8Gx3DVv=fZQUPQ)3w)`}I9^Yv)`&WR*IHYM|k|j-p}P z86W4tzi~odMSew$vyTr`L@LdgCX7ca?a~nv{B-uFoaJW!S3z z0E=oE0dCxf__EHgZ;0ZhmO_&)R2`)~-dhuex8iW;ANB8m&KLIjCMh3z9^l_8RcPTM z+!M#Be@^i8+pK1x{1^D!E+GYsw4y_6009~&*|4#89*26UWrlmALVnlVoS}X)kG(I@ zj85IAv$o$&39QINNKcvk8(Ml0e2~5>C(Q0P2H@GC5Y68XCk$rw!xQ@AJ!)3G0*fJZ zf12j38N1g<5cDM_RbbrHA_dPyYzhdyS0jF=e^G-aJ3{#Z)dOUFEKJJ<53*@hH`jhi z+oTD&#gK&jdKVWqk?n<1Pur9YIzlJSK$qQXQDwN93E)4~aip|{9g;ofTUGKs=TR zT%_$^_Y&5I5=fYPd*ZwaV@u(d3+Ij^uG5rxcW9sV zgin1veowQ1y`r-j+Sdvnq`zYlgjjTA1s}+I?GTo9GB2QPd^FmQ_U?4Z34kG`V>&_E zr?a(euIVGzZgc5;UDVN`A62*1}q9VG~IGG7Ojc3RY%QsAQAs6xfCr$<8zK z<2VkXJ){X_dOr6&C8Fn&k({S=j)PsI|h%HOMi6Q^u!F7lWOfq z2iK)JN>O$TS6ve7mxw_Vh}6xkw){BvOZUWZ5+^WOf;!kbYC#C+^O8QlLKwW&M(phEe^6(G>tIGCh5CvKi^4ix(J5XZG zwhwK442G%FN-yFhIg7ngk2L;fxch0x-C`w=13|y%nh40p=quQAr~LUOWha&b3PgF` zt{3v!xchSPN$}`uNV7pc%SIm~4hTl&)c%)p_z(Y80JV}A~+O6iXwCq z8Is+ zRhC7b>fDCh%M0S)o=GjAc^>tpvC)isRcQUc)J1&x$Ouj5xfy zIpUOA50Xn@{&zH-M3%{1tHh47>X~>MfCHGB0STttWlOS5HOVx%S2xt^5u>)tApZ@g z^hhuB=jCz??N9`H!!I&o&oZ=( zD|_Ob+xN9!dYlAJ2FHiP7Oo&&vW42cYzSX?AK5iJNQA?KcHAq2&Ypp@!a}+ioBwH2 zrrDYTS`FKDWnfmKxQC3Mo}kMxHM}a!-<=VsvV2oow7bvW^ff)DJ@1+b<5|bLb7aX2 zimUG;eo@D4Y*1U!zc ziJL}QJ^GJaT|6xuoZby2o=!6Y8gL=Ge+?L-AG_|HS&~OZu`BZyGL*0ez>6X=WrYqU zIJBp10yyzc??7#t+_CZ!eD>gTVW}q7b0s}Ph z%FL3GM*g`qi>&ekpt$N^40wQNj#^2a_4YesqeqI!b#$%DG@d+y>oAz@#U#}(-J?|= z+Phl=5z%u?-hIBj?#m5Ua+M{A;V*<0+^0O_rgTWvs1HDiebZ}U`Db$mOlTIwAqSu zq$=pNH8ud)$a5WijHexANTIo8O#EvqzNywEmiNnfC1rgRt(en^Nd5*GVqf&1R0GT(ay?TEb51F&lH!rX^UuUmZplI_`jGKlx9Ua_ zM{V6TXHY{Mq`Fn=R!u(*Bkz5PaltUYITzZ!tpmjIlHv?BrMj-K%XgV3Hz;er##b#P z=Wl&z8#}pHhgCKqUeoK}ulKTRr{lh`u~W*?goV7BQUDetytcANb8A*Zr<0d2z^of4 z`&$-#woP}KV1}2yh%#p#0LUY7Os0*WPD)M5vi9~Yx3F_qhifN&vch*$1ggigxz4mw z35m;Z^Ds9j9H|(9_@|tE=0$G}8yGL}DFV#)Tbz2yUG92SZ%{=KyAT82R+4p`MQ0^) zD*9ueY#h~WPA@-4pp}c{dYN#El!~rY(v%k>wCe?ORdJfJ3tG;t2%)h=v9blv=5+|u zMz14A&Oh>mBq(d5o;qZYbhML<1Rq??psV74Sz(}W!V8tgsPI{Ay0_x1lSwo#hn4zS zLbhjt9voNktfrn^lRjelTGXA#ZOCMNdXL=~El0Y9M{#w*#Pj{GBBA(xH<^JRIT*2k zkQLNNsXFj*oef!~4aG&z;C@-Km}jex8b)u;?X!=J5}FDX@~K^lTI&-Q=uCE6)Hayk zYBx+NKSK(|@YJZt+$7hm@K8}*^pg$fyM0C+U6uFoi2aOZaRCfZ^!VZ}YV~Cex)dL~ zv^gg|6oCmxFF{##ye;QlNqlclIS2wO_$d_?EFmX~d7jWcc>ZgV*Al2gj^%>7*_rK+ z#vcShfMiX?F9mNfBu{C?S@fCj$k;$uj287TRhiMARLM^z6`A(w(37{GF$j2ngVSRF zA+BDhWEj02`u`{w*0>FQ4UN{R9F2*rK^0XlU`!)K#G4G&j&hIul&t(~WH`ju-69Cy z_VTQBmij?dV3p3+;ULTqny|Wc;|%*jn4DQXVQV;Zpo!G_qa?U2Ew>1G z<~D{_0}P_wVGd|NbnAyX1?8Nt&|JHPQcHU1-d5@&m;!<8<|bEH4Q*031jewl^@qLL zLZjS~w5dh11`1`p`Yl5F)4hL1@vk`v+sIC z()aY1{{6Tcgdk7AY$G0!S5$fl_@NR2`8Rv0}>(Xi=J<`lm+CGTC;e_-kK~r1e)rEwD1?)cL^@tIh zo>ePc%E~o-aQx2D!HQEC3QkOWxn>l|@mQOoc(Ipi%3%Zugj|C|^zvhES6cJAUbd=s zfIMJ_jPfWj2Z= zC6Xm{AUfI!B!0v?yoi{n8t!77jE5AA9+9F3X$t)2KLwA^%xETDFpT$0Ym_+!Ajx;@ z<@p-!4g3=ETSWRAqu=~qlZOF~WV3AHm_*%tr-5dYfde&XLPO?}xYpD|2V z_U+6kKqZhjeWYCshHz+^SrvXubWmWdz)f$Fqw;s%tb{f(GmU-)s1D!T1T4SZD3BGN z_1QQszOCdHhQNx#7xT?yfr*!r5#w6uQ!mJ@-jn6eQ&-(;s-wAie6?m~1Pb6Rvl{WD zWSRy|CS!Mn%trXM&o&mW@3L<0CC~6B?w}Gx2#PM`5+phk5KuCaqMRygJyTarlF0)l zJFB6;|6W&LOL1AUv+?rDmiHtRp$6wXG)F0&){+TW`g3&ccrK>+~(v27fT40 z@|?U&gLEhiBUD#5aBW(3ko3`0gH>Y~j{qNUJBr}8%Em5~Z`l2(SRVD3 z(GRn)sjPNSy)ui}>VV zZch;XTpQBV3U!B#qrCeV?50`}p$l{pP-v`zIDGl>@;^ZSc zMxWoG?NIKrL&>40=47QQx_{kZCL`g4_s=%0pNb_70!8Gc+?%QxPkv874_cpV%2Eft5FD6UpBown?_4B#bB zLg%GLy$^TfwDQLC%TSuE&JXGj#w{(r0fmMnq)2~|n28vPMdHvOJ=V30x+D@VkrTyF z=AANmzs6xQ8khHVaARg;5a<@L*mizzeqQdYx3OI#e_UTpN}z1=x%Enrd=Ry2tzJQklnnZKTq!T&vNZsb=>Jy zc;2`>&s`=RxMTdi0#7M=K_rc=e%2Vpw{|cW!brxFzCdYNoi--Ox!rd|A{=WCZ!&@z z1C|~T`h-*Z5a69!0dXm}D=M%BzY=VLm|@n^0-n_cOaSgMlzI-p@V0uOYH!lr?RIOd zQtfr93acH5+53m5H8xn>4j;@f=Wi}oiYCm8&_MS2%TeH~^j3Gwl$bG`Cqf8qN=Q)g z=%7sBTc2ezfOL1@uz}&~3Bf3RNI+TSIew*_wnGbBZXdww%C=5uXkEPs*9OnNGvd*9 z#iE4z#?9Y0NtHxbUQA}O9S0{I{^KIhFT4HHFg=$t_yV zhUiUzLiN+0G{|PQcc)$0Q=of{w<$(`FywRAC;5TY+j9bORa1{f-y8#m{e4)3BOXxE zd!dO@XNv%+1`6aIVTh5Dq**~V8L3$-XS}_;*1*oV*c<_Uz?RQ`B85Scg7PiGWvWKo z@4x<#gh!(zX4nnx1?F)dh%p*|5-R5IzAEP#Uh8&R*hRLY2b_5AYXvfx$>3W((A34` zf450&V{ru0L4M>8B8CAv=6GOAYtC6wm_b4R( zDbOQNSt66wx5}GjCk6gU%kItd17)BoD)V!GIC_HT zo}!b?(+uXaJ3z`gmKl;p)}dG`%({~VWmVj(LF9DtzU4fC*$H~oe%xe&RU~}nJBcoW=JG{*M|HF7s2dAxS2@_ zox9_wYu#=>=2+SjR}k$@UsQtdow6UW5S=QH=5kz9TpF5J0swu$(_m zsM~MUUg+a+#O~^#1Gb;|w-<*nm1j~J*X~BJB#3!ZpnG1RgV&qF7zj~zYq74aaL$h0 zJ0MtvWXsdBG0nDNuwh-@U|_l<^AD0sA%5pFc&~wuv5F4AVpFuD)37iMkaRqkA!KPb z;KyUYrN&3BKMP@0H7;kig)pL=02UyQ2C7}|_EPpKFnO*%?qrY!&Y-olJWv6J*g!K& z^fc$`fv@VCV0FV?Xzq(8+P}QV7a>ICv=<|$H>+W((ln5&{CA;5D+Qgvik&aYk!@fZ z=W8~_u-*1&hEx?;j(vCvHkpF>8)BvpjEV7bye%%a{699&8|rmSG4;vt%55HfgO79D z!r-IGySrin?p?_6Ac^A`1ykW&i#Rx+gFx-(KZlkShPmD;c*qcf*1>ni9dL+pD=-Wp z4>qg6u%93;Ce<9Fiw#Fq&T${aP@oLvSUsWLZ@j)G$d-V7ppj5p+Fv0vJU5WPEid%N zwRMAlp?5e@MfB0-0xQxu!^t?&loqc0jx77vZVJNZe9+*2wy?VXxGEn5P!h$74c*AAb9#&diJ4k|+{=QL_fZnWlIrb2w%#UAV#T$Gdnc5VW{2huBXZ}Yb z4Ox-B7ILMo)6c*wBGXkzkwJhHU40cJ9wc&VU*gc1f|0i#w+7TnwXp*uP(}mDy@~T- zb!aMpuH{cUrmFzZZ*5^~n%*17uhVgS5V(n~HAc?YW~Y%33{lccxo@nRyW+a(Ab{SX z9fkQEo3#n**DWnHYm>dvZ{S>$d(Q!l?7%TdFbGQEr;5q;B?(~FbSKa2uh$hk>{1hU zZxs;kDt`#5Gzcn%oomS?s22<#NGG~`ofJQXCcukqSr@H|?%=@0^6WlHxi4?lnxQ$Y zL%JJ(j@5;BsVk)8lQ>hwkoHHM;Bz@yfK#a_X2;T;)9kXXvnoJ6c1w>&cS#pQAMm}FEj-YV6W}Kw)WK&XF2`av;XHx>dYl<8Ir>p1Mi)i6 z`)RGbBv6FJT_W*fzj?q17;3aRX6!G$wh}7Nsw9iJ^M!pPoK9vg7~>h)KcQ$6zdEUU zjQ#8Wm3hBkPf?Uv=^0&`>w*{kL=b zZ#G~uw6j>%SnAkjZA%f?ietUkd z{9FGZhl7_j3rOAQgR+Gac;k$phi_-$AcUH?2?Ss`AI8TX&&1c>EoO1%E4=+x1O#bj zuNe-PtW_{%fY3Wa*aY{~5rNB5$jG#HDbPr7pU_h1FM4XOE`O*jN@ZW&BdEtrRg7)p zXksDZGYFXL_B@eUGGew`lHktLomXs!@U%=nc#3(AQ*Q++7fvC5{ouV-us5+U57crNpZy zv~;E{%bFeej9$qM=bq&f_&Jat%On#zyeHW;QLMn8hiAu;ir5$js{9^u2-LHaAi(!C zLa|x9;gug!k395Q(RsY8;9B|kG^d?Kyiziy)Yyat!!@=q8H->->X}^tlg3RZk6eg= z(hlYy$`a`~oB!^b7CwTkWC?52I>2-FI#E~fEW;~4=fgD_yAOM!k#(4GhZcjDGYC@+bdEBCWwWhD zOM#~~m=Gq|mXniVUC!UDCWuyfCQ|)yew=a6pM!HL#4z1qS62S4+xLq3 zC}AwJ3`~}7jnl;t4PD244{v9>(-Kl?rz&;LE1N~%-|xd&UfNryRy@sdSThM{Rv_MF zA2&9TQ`54}PO&H0#AicV4bE-4Y&bH(K$r_M%e~HfiDub7UKg;sQgl(3iI@1rn&qiv z_d7`{j`#Y&;bnoUQ|u&qJ_^H@LeM_1T?&I+6hWs()kO+zSYToUR9?Y)G>q7*Z;q>T zUf%fPOLa83Zi%vV$xph~vIBllzE?8`28PqGb*C1&t5<8rVYq5%8=2CGc)2qQ?|GwR z5M_IWPvn^*9Q`{`^ znwxUfQt zd}(j$G&CV1b4&Z|N8yXflO#DBo1pCoM-w!|ml&kih-=r7p?eeU6DWco7`1z$^hJ}} zgA>a@n-3u+eSIGW(c2kj&d+AeI+q}x1%>Hc3PGHUo#*PM8U|$m)*;ZQ&6R%HQ zZoK?cg5oike!Ai4vu|>sfNeB3@-B6C(YP%XK11WDs+E99k;e9g1dT}?_cH;sXOaEn zvzx|&{g{&60iwcL;PEcFt0f9C!Mn!5N1_atWHkapD3F*rde8!9Y0z!`QegG;vrj=B zd0M*wXT`NZky%Czv1_7d%i`5KeAglO)HFe3Ej97CE>GAyIq+jhV^(#+q!D4N6=cU= zLgkfT_zYAF71vXG??X3VmGslRVwWFLCOa;OV`}Ck99TutY0oI7)qjCdpsL|$_~5i% zkV8%IGRa{xki8kV*j6S31jcp9tgzI_>Z-aYv~<<`a(xbJhx4iC8xMfxX@9#VkcrZ~ zdeT`$=zwZ~T{g5sZ$X{%Ornv;H*QMgYkMn2!~sx`?%ec(F4r{`dL_9$QVQwc4Z;q z7!!R!=(n0K!Xik6Pl*XCkD&$5lMI{&r>-BY^$*{3jAvBoU>8NomHYd)<}uQqk0vXp zhs}CHx{3#B#)X?H*GYp27zy;84`9?gK~^AyXwxq9)OZ4pRB7@*C`S4a4KO zWV47v)jN3Jw)o;EWxpkx5E%!lw3p=)O+MFB+NU`Ay@g}%1RX}^60Vc_w+N$}haeal z&$}CX3#@xlzfrAExNM`g8-I>KZ+V>Uovyjdu4Wa$+BGGPeAyGUAFY zADOQ{gX6AIF%X5M-Hk{{Llb&A3i6uG@o%c!%W`+GG?2d_QqQ zP(YwRKWKl(W^6>BLrOs3P6h@XMFmfbXS^Z!V&qqSt$HrcAKO)>8m)M=jfsJ3Ln(-&f2 zK=G9><6dM*kwDknKNUxdZ}B?IR7rZSI*B};?9FusJ;X}**TH-KW3h$-#^{aOD>7?2 zJNQ6l3M==QAz}$%Qw{{K;%{+eJFaaMJ~AZ1>UFqGFN_dFhQ$pjH ze`H~OeaViX3Hj;R!Jy7tZF_uc6?8^y4T9s@ScF&A=(HNTwk%k7at=lfmE46dsm*4-3%Wlo(@dYIsK-|6B*< zQ4MPt6n1s<=gUL`kmFXZ(S+2WCei2ASvvM|Uv?Rl7KswDUapu{xxs2wnnjyI@yUDG z`*2g7e}?kFvzEBQW2_=`dwID-9~DLvm?E_{!@D?1`j|Goc!{LWt8IT5VdgQxq%&ZR zxqt1}(G=wjs(c~M02o!?F_ykmNMjldsG{b<|T5 zTgM~YgzHk(n;%l8GK!5BG(m`*b3JyYa&!dz0C(cOZZ+5KKgg*G41VrI&niEmxtW5Nia=^l4O6Q|b8DZ(;Vz-X=-QmJb7qXQVN zucpbdytsZBg2MQXc9KeB;-N-j6=vzlqZ?z&+2sdOcjLQeU$ZKc>>pznl#s&QzrRVF z{t|_N1^FC4F4i}~%K)KVd#i6+wPvNxoz`(YM>aW{GXx>d<@_*mZg{6Az3n1# z(A>|V?3TeEy%mNT#~bUEb-f=_7y;mdDU3wgGMMGJF{ao+0?0l<2RCWF%@R`~72l znT~$OLWE=D5#`10mt~TTm|pwMH;97Hkc@u@NgBWm4P^-!G|AQ@KWbl~mpg41RLwfm zK}~C}Qn|0JzaH2!u`U-T9ge|PQ2&1$K1t+*J&*9D3_T~^`C^^RbKlA$rxWkBtLNG3 zXs%2(d*6x>36*btf{q%S-(*#9!65hbaSUb!Ri;|z>7o%|ur0*eS>kU6U~Vg5{EvLS z;R6-VfHV3As(}F?RJemyTt-dq)Rt)eL3}IAbWv~*o_?t+If#*zyIssSx!>|}as{pG zP*X}NDP@NB)6+^4A^3H~0xE@AigAm956;IUYTt6(Ov?sY1T8-G_&KoT(evj#Ni%)R z%~0%4JCVXn`*pmWk6zQ(_61qe?se6Y@5Y=>QHZmqfD|%!vJg!=*j7-vE_5Huu57~>N(4xhdH*c8n z(GAG2k!ldD@7=!IsEQFb>P(H&?5&GF1_`(lL1MMHFf15D_S9n%FN`d=-l2snn zib_J*o|tOJr~?9(4P&3uc}IPQ$mi>|U^GgT;-TIT;>?0?|1zoW?`r7X38Rx~4-QU@ z>?87W;4F-B{8f|LPdO$h4hD~#L7INX()4Owkb!&fz4e;T*?f(NDhvVu8v>`~43|$& zn?;YmxwN9p$<;qwu2b)cXyS0BpN+C}3+*@$cYF_U$Dk@#k}<+x0dIV2(Id{R^1e@+ zt;Ww0d%Hhns?pTmHgI>2iO0B}7_^mbBl7wb#z)Ifu?s%Ye_KUw`8hU;1-}_qY%ElF zy&0xPvXZVslZK%2YH+y~N=@kUiv)Q!O_iw9cZqo;>eWxFk4^J4Xmj`X1tw(*xwDsf zcVW(?Wwl_fFYd5AWgZvU1y;718Foo{Z?-){0U zw-K^rPjQaS*ZP-f6+56yR&~1^_GLxkiZ>lWL{X31t#r}G%HL@w`8f|j?0p7{(X)5O z??b`;-YVbs<^^@M*RLEK=7&^B%mbA$5AK`xyozZ0ZX4tZ0~n?1nU$hY|K{+&``pxq z9qvf`r~`M?u<7 z|LqnsS}EvV9JA{XE10q4i1s;Urh*aq#5eHMO?^PK_c_vOCIfD{V*zS5IeM~Oj?TH? za!t;w2afZVm+!F!@xk*3yI)>{I0eM@)HS+gm@jq0vI~#*y>gM{fhJ`<#RnXbRpLmz zvNg7?)&VXbjS%EFL*ql^m9+SPOT6-;XQI>GOtWkI=sT=ZfncMbx>0{{Md>L33VM z_K6C7c4hoa@)d;BBRXIML~h{tRG+gG{g=eRtM#jLe?7?*rTCBzOg8`mI=b=$5>F5^ zaRRP*O**eK-424Gl;$rHFoVcEp#_y=Z~*^50Kj@FRn-VVUX7p0V6g()mXqo)y}U3P zHijqp{9d;nPsc@en=@W;zP^+afxTd^A5KSJ&LXylHKv=9{ECx*@0jX!wz&K*8^X9xBrA-ffc#lMNE6b0K zUXoH9=A__i5gT#d^!UW(ZSJoqI$~(O6tCR&*x9Ti2c{Y3foY73fRV)TY4OfqzE#dr z;h)K_xu5d~y8Ydr)nMaJKCyS;3f;o*^lPF(YL`fD1qxF0q_CVv0BEX&5fo8hnd{#A z`I9#~__+lpu=&2pS({jERJ{R?MIwL#cw>#zlbRfv6QEH!{H*MU`2qLDl;JPg{FW+A zxls^B$EC@;`Zy3rdYg{qHIa2q<8WHP)x4?gjP!G1rWglZ9aJo%&&Gt70#D;=qseEA z-7cD^+zCJ}`rjo^&TU&WCLJviBrMzdCHyd`4@JV-lvp7wk+6_g4Kbp;Hy{bWSa#9<5BcMG66s=bc4yjN9X)ndi zkU28?q1is!b4Gg~i?HPT>@jdk$CguVT}T{W#MQlg+q{rF{j^#tA>1jUd zBMfM?{>fkHCf^-6niqtPc+^){Z&-9cc2=4kieae2p~8zJV(C%gnH?u4#Z!o#obxQObcfN98QpW*0@9CmhM6tn_~Sy%n#vh%#^Z#&68U zjyX5OiX8@iVPEBSyW}`KGIMASO4#u&bu>q#36#42e`7z$#6$`ngDF+@aMXH86 z-kUHtKm3~m6!VV?q`gYoj~&a)Av?snLE=WP*R-RJc#zX`x7FhsL6b(zr}YEEFgd;z z#Ke|F*x9pS^L)&Md$f%|MQl;_2PhyMsl^Ii*V?=;& z51oR!=>S24Wc4pm4$(`R*(`=^{YYSi<+4m3K?y64F*g;Q%2gBNJT4)gceGiNCgC_r zI?q=H(%orxQtxx5#-pd?y<@fQgGhZvboMH}y{sGIBu;`W46?eH)`z{pEqy4Nm3a35 z(tFyrq2zz@RE|HMCv;3G-Lj$psS0)x1ZDyXOQ2e<77t>W9PbbDMl{4{@Z>Lhs{pqH zWwQ-Dg4}YzQw!laooos|°{yDn|y>~D=@Q1jy&KSY4U$3@$Pl#jjTy84*ArFwpH zxi^H_?pR;@>$n~uMd%SZw;rrOxkwt@p+!U&UC+oa8cs#U^BrxV(uodYX-|!&?025` z?_^KQCWTk2-A4IeYfJ#IhY@5p8$c@dAN=%zq+UQiC$@b*S2}0u?WLN$2q%Wu)g5Z- zkcWG{s56`!&8_Rw4a(vsWDghtWVc=5rUg(x&SdGTOX{?0hDPn`WC!0M(Jdemgt#3x zLSRTzRiybN2>WUWGu6SL2Y#y)JLUHa(`?`z!*($}LV_G?6|lf!?=KTlu;;wl2LhlM zT>2mF68d8^s8Fi?+T_3_HftG71idp7UB$8xo@SL!61q-fpv*mQca&cexECK%kCI@~*Q z$h;Nj(5HmK&cCY(#mStG9mwSJD%fjCOx8~sej5jRNJv$Tb`TE^Sr%ho$hDiQXQ1+M zl<#Iv$tmHg3qIPhwP^Qh5r#8xzFKyZ`&R`#t?5`(l}l*ZDVp)AX~7PBiWo;6WnDo* zxC5RcRiky9+&6&M{#ZGR=L-S(b%4cf`GO3>lS zpPkR>>Ds-+Ip#w_LQ)r2WZM_xR=r%l2?C0a;b43k!NZCEb!8|T4h1Xy4grB!gNw%B z4_W7UGsSvGn&Wo`otb+J8aMf+?+3oI9c?8zuOP`QG(AX7R7M)hiq;R;Sb_-jNER=X z8BiuCjyWtItn(G0RD4nrsQ}mdwpJ$jWHK=>DR~;mHs7>ta|^H>aIPf1qx*I+dX+n@tzV)PKcDv1m^LVIx{InoiO zFni{$S3leGqCVv$W!dA?0vTsiewENq*sHu^2+E)3)g!G4^w_0q{0I~=PYTkF+&G+w zpb%{_WqO@leXOwc5lZeCV<5&euiu=ZT2*uXuLt~P0{#G>WIoW}0w;Yh3wwz6yjOTZ zJO|E2hU;(yZyu=m?|Ui%mVH9$QpB$8yPc+LvK9{ONNhXuo=5!Q8YIxkh#DHVRoqt| z+fwp;(C;%R5a@Mpi8JJsOH(i2#B)%Z zL27lY$riiwbIhvz3C%SCGkaxRrL4_v1^f7$B?n|W(Qz>4tx<5^IbRRK!}p0(smqBa z;7l)$zvgyiH{4zcw4GgL<+UF-Tcy{R`dr7!)1+bF4Av0;IJ2(0C3oc4W>@C)G06~u zyQmCe1=<3{ZSwkf(kNn4q=tt_HRKPZD!IV^90k(P4Y`k7#c~7rSq{|K53$!v-vmw@j6VdxZ@*sx zB<mVHfg)=iR@MVnn(pS>;OTY@H_X@ejkJ|7@^7~%No*%EvM zPKjWidR-#hp8!0d1ngiEb4&NBh?s)|&iJz+Hq%SqkS9U5e;3{lyyl<)Y3ABKq`U~v zE0t>uV*90zozt;1dXog~sf#+l4J9GfPkjpbb_j@NV3E5h+5j6xy@sqh6-;eeiRwuBlW%}~vY`c`E`tTK5%{H(`yS!q-nZbB zWdxr!+;x(OnGSA+#EdZb`$GD%6VS<8X?4g?7Bsu^IiX{Sz1$F6Jn3Bgn*z6i2BM5h z?gYO1pIDVe7~7|rB5~hxc$I5%7tB#?bd zTB?8_%sL6JC6JSSEBQz(t^gUgf7gt3aE$-|QX8Y7R&*GWZlA&XwZOVR2fxrhq0Gf5 zde}gWA1nw2qAi0>7HIa0vaZlfwY&O+A;vy9Utm@KF!Z3Z%3Ub^zQZa9rvqN!_3V9U zwk5yrInN;J*e!_G%&;%y3@FFSsWvGw09sHT4e;Rs0@&AJEdr{g{J0(e9>OI1Te^x$ zzax1ulxInjMe@OnVi<$oj=Of1I1$8U_te1WsEbnn)LJTbQeB%tr^t9C?TD3>Su2r&1JrKUU7)m1 zhZ;n}rW;N@r=lMS>8?uMA#fNSq&7>A)>V&{)UU+9cbbW}=B^f4J5}%NRvs4!W!+G* zP2MNO5<8^cr=+Km*qnA7{lQfVLNvCC>Yvo-V&Dr?oo2w^n7aF4ta;7hOOabipzTStO_7=<|MK(RL*)95+c#ge25; zRyF#jxJ}(8Tqd)>m@h+7D(8aTq`Qf6XX+$9Ne)xK)qS`Uu=eQeivv;a!@;wK-1`$R`pZSq*!&p5%TmTB88_Im$j#n2y>p6`&D?eMEqA>s+&9BieZhF7>)!ysCa zPWDonKS?IU5eTEECw`!7Vpc}M@tFKqN80tb#~RY$k356#?lKl^n6O$!xP!lFnIliH=w-i>IP9R zGb=82m{BmawFNn}SfiOz(FuBBYLlnhk=RW;?bT;~l4*o{8by_egdHJkiphYYX|(4h z$`^&zS8X7EnPImA%nyS*Ic0_JB~?6&Mtry4olAgtGnuBPNSFw>f25%8>^`~*y3)bd zlkDCE3h{`NYSAIKOKs>r9!S`*l3M7^5-B)6+^5m|Zb{dE=a}RpQX6*gvkuG5+1 zBooWgP->n^U5>?{kP#B{?$CjODj@d~_FZWYMR_&MABeR|VAbK+tK*r}OK0pMG|BbC z@!&3WktK~er(Y}y2qL76L$XhPyic3GPB$J2DX0r>th=hH@`ERATw0MEGDhLQ#45Ol&o0o`(DO4J6tIBmhtF?~CZpzCao{;x` z_-|6pIck32#T{bsqFt3gLL&ga|=DBaQke31kDWRq!N0d4i)4 zjHa&ak(ku#+~l8s|C|Va(#hEHrNcB6Pj+Y!yc`nGUgwBq&CSTL??sXgFReJzH5tOg z*giek`KNn);9!+(vUnO5=8{NKo1|oX`C{lkqaT4LOQl;EhdiJ*ELilx3bdc zO&(BH(&o-FD{RK~2F7_1uHo0aS&%t+${{$5>lUk^xZ-ag*?>${l$jBrL9ML?=%f1( z;9925bWE%;byiFo;acwt*?%q8jd3&f;mQzg@=ACN(#0*q>Pz~*(G0!eL(6<9J!n(D z{x!4d&>5@NHR_xyyu$GGp$hV+gv&2Q){);-MpGON8Dw0&-75-9Wo}u2>vq^O7 zHMM7LD1gRdmtBobk>e2-T5ZEP;FR3U;3*+A$g~EsD`wHP2EtowcwR>W2G~51{__co z+Rqm2&=(F7OFk5Wv$NeHyfWo8PJd3~7(u2RT2;kHdoUp9#VgMC7lIbe0{(c%L2s%$ zh_XeMWyR)z;yG|uJGEcyD8RR=KBELQe8efDsTM1|WE$qwrT&DCRiLcdYLUvT4~Kjv zxp^KAx3cgRst+ZaE;zli&be(te01tG@>2F@jeWe|t0?K7#`5_HE9iKQEE^D3<{(Mh z^zhKsPd*@WCZ0s(OY8;M3}PiJ*u~3K*0g?sF>TV3o4lK8k)j93xl~n$Hq}Pp{-E#j zJ?m+Kr^RXDEeV?ZZep_x)3=toXET*JN2OkgYXEAb_Fvcw>;M1|J=_c~LE9}UJb zuOktPWQGPD8WX`#X!6%{?-uoxwqvF>;=VkKZ+Zwk1ou!n44mm z17My9jC`{6X}heK%~oV+%+U4O1)N5p#;vvZN)E3?Kaf?grJ}5Xaz+;}>QVs8lP-1? zzBuANccN9UfBKm(wTT zmjsEnhpqdNy`mbB!nnQbX&tW*B`T7~Cc+|KPg8t1MfhR!*?Ie2^X1qJ2>2Xu(UGg* z*uQt^vU^k{#9C42Ny$rrRGz&NQPo}haX!7h&j@xUP`=9 zd8U-KiDt3^je(qDQhwHtx|PPMq9*XUX$EQXby83kbiTQVi#@qX&%%+t>?Y@ zrHm~56XxTf#l4TSNoc&~JLNanD1ErPkS^>+*v{vz-$HoQgTGqmiyqq;{KQk1gBBA+ z{QUdh{>;rP)zp5Zeu65f*-bEpFzlVYTP&EdNHr~8QpaK*O5j8aNVOkI2cg-G|{k1?dX0sF!LSSDmI#sZd z*$_6XI}G&OX({MAFjURZ{%lHwo>Jnthb%{wC>^K8b2RN(XPhGoS3cCPeQ3Z>U$oYz zEG%A)(7vqDcL>qn@x#2@EserfWZrh>5Y-4Ek_#MQg5|U4^))@UiYn=vi$n%n0b$qbW^TCAh z-CDK{YH)(plSb?~=UgST?OzTxV-@5lHIQsA|F;a9ph#_#)YI;L*DvZulw~g7)ebWw z{Qvb+nI4x+J6m$IQu$1s`Wj&6(Jzf~>!@=XvT|eI>^(r?fj%gQ+CBrFO6f|+d^%V_ zdbv9ac>jy7DhpI9LYGKH1K;<`ut}XM6^C+$U}_YsiSV?^yqL%#qI!0C`D7ay4q@M3 z1@eD9%g^Tj?qK)@d*$U$hKeg&s0DUm3o0@S^NIz#ASp)lb#A{O9e@Q8J2N9RZhru) zhSQZG+<`f&&Lw&V&mRy5phbM}u`*vu&JRRcX~K(=s3F3y_V^5g5uiuT@Wi@9&?Ppc zKxKt4%|@eoNBXj*D5hQUVX?R#HQO5qWTK#^;?(yq{F0H#COp*cVYkB_EQS|gxtG#& zR_ISnWeC%)wFpOeyV=%^n%0-f#5fW(;j8G1XYyoYg%);)*_q2P;e#XDy=Ke42!bu) z|8eDMuY4eYv3M2 z96=Uz(!RQx-&okhuuo0ITiqCS%}Na3sgJIr(o(Uii07^Noc!lIHw+D57H%HKZk~=} z`fPFb)cM>z?l;b0N%jVQL!R_(K;pCPa$*7BDPy!JdE~S?PQ8pcwxii4F&kzF$s&65 zNWw{6uxt#%ds?U2n@`{)4lpuhwM&e$h{5#*mM z`pqF&y>RSmcuAvW;R7vS9SPc{No_0Hx-i~aW7AtbcEbO(jzunyp3R+$!AF83RJ53I z>-WFfTS>WTUz4(&?(GH=?b@Uz->{O+l495=^226w^xe(65j#TdrID)ECNcenl0$!K zU(r|N{P0gvKK+%#2m7iS6-C=*VLR5&jo(HtqVLF<5k$H)Oh%G0`TBvMVmF`OBgW|f zx!JTlFL=s2&k}v1O>8#iqgd42__G)CULh{)wD(|Ga@VXhna{Z9;XoV>SxKB_g=(Aou1geJy5a_5ItB2vY`T-(G=~N5|-)*B%T(P#q9Ng`1X8APM0No zt71Pht2z-DGr2?;edGI4j;p39gLMqO7ndN>rT119d?0x; zan=N{^8Hl0Wb)9)lTX6#?V|kYPx6pQ0or^o*RXj$D=HO zBPWh2$&poWC-z+q#u1QCfdRzgbZC%;cHLt;w!$TX?n@1N5Dxu;7vmIY-=-L<9*-3U z)O%ie0jiI+JAMQSEFxh04DDb_-M~ODtSquG;65NJ;lxsLu77vLR*MO*(4hN5pdH+V ziPH@E>$Nutzh>0S6b#2Rro&DpjS^{iZiR*@^d<1cs9X<}^7EXW%W9obqe2y#EALRtG>Y9?P9(=z})jp88t@k(~<6Av{o+ zVLjwhUUcltH4vOjge{zkyKpnZSv2-|pGK@rmULo3Nj75AZb7JyApRIQCo?sjW>7;ujdaTh)ZUY`rgG@(fuL6Z- zl4rx~Y{~Z#2BoXiv^v6aDWSyqBYJ-8pDey~xLTkbS?6owwUggZPX-`rS@imzih0Sq zJT$K739ye}nec)ScVv=`s4<+Y=^@wPAR$=5d=_W&!0-?f+HP8jtI= zLj}+gjf+y0|JO7YIXvdI#{)C`<*};(FW1zp!diycu6D240PHMfTRrxHWGHxhM{BLA zDgJW8O46-^V!$juM1D*?NjD#0c*gDh5a=#WKhUlvl7Uv9x9lo)6M3tNQaT1yLX{^z zENfdTvae`%i+&1MCvjatQfDCAV4+0QS%fwjM948BJ)0;9oN z()f~3W>qN3Yy*3p!(s@^UDc;Wk3Qxe3hr3Alr`e}GO-ULGPgjHtu5`$Jv7lLoWxQ5ZD&uZ&*eO%I%yctPwo7%#uivaWCnt?>sw+E*Bz2t(8P zLUKDB@Qe*B%!_C~q*tjap>H(0}unb5)v1i3TeDX_G_T}Gs zQiJJ6+Kk$HKeooo0sS<6(;F~_L;TPSI2d9~xmw>?ejp8p^o<|gVTWt|&hNGy39=^G zl$ib7qXMxZCt}a4fl(eW8p0|KRxM4VyjogsCQ{7#3-=B6Eg>Lx*6KrtKTxBoD~j}* zWyTK2S%h7x)*Ncx5wF?(AwIGke3xKc=L5gq6)2AJYoD|?ZO*zoV6C3z#Nt02H44P2 zg^)94(wwDHP)pq&#d;V(%nO$hA2((RYl+uQJomFg3?45ZSLUW1Yn2-J=Tz zP?jjM(*WVU@)&Z%vH%NwOfS`nR_X|S|0Nnz$1FuR!rVZ3ggqp*V`jbCzUt2~VhgFL zQwcVPWGUgqqI!;xvt*=Y`{BwZ%VdIRqyizYrKX3Y&vmo9siuE5C|b&twTt>8QqrB? zbT0vFYTbVp#xg%5n_~@K=pCO<^|S}^!jdd2ST7s^ElY1h)rglmU~HeKHczZu%VUwG zGf(Xzp#w1a65T0=nK(hvFF@R@av|!xv_SRXE!j84CqC9KnkZU2K*Av|Y2 zZ~iO(J^v7AXt%5=ttn46^%*E_6c&dbLM|qrMP_kd{Je#WX5LnXOFsUi%U`7-jW&MB zx>Ka7CY5&l1>zwjPVyL)nYLLJ&O~HVW$FYf%2DPTbdN4NI_nyHHaGt6(-4}9A}3&G z|0-v9U2J=z#fy#T*6M2h&~%1B?>-(7p+W7B-jb_i{U+ko_yNVuGN&Yd71HT^vioM_ zNAv0OYtYAo523$G;zc);BxBN$um%!&;A=`>ikk_;Zy#}M-Kz=UMowP`WAU~!&_RjI znEH^v+DcFw#obXlzja~Q@LT1U5~}f_jvJmQg4Jnb0zjwmi399>GyQduBc(0#_MSsl z5Tv-Xo-x?#JT_iKbTP+Kvf&D)PxG9FDja|}@#k4vvLYA$z3B7j`I=T}WF5dTe9@y4 z93GmJocccqv2Er-%JNGT_jp$SHU;)YoEdO`NIxMCABlS{z$6GEJYQOifOez(7Xz;# ztYe3 zJOf3B3P}0~HhNkSn-*8@DxMP?Pa^!{8f?dfnP{^AHcVDP_GV~vx`x&kQNXBa0u+9j zwL!Ncouvk@ddE4b{%-fZzYIX04n#jOt8$W6l5j-rOW#hMSsL^bd0HG2?GeN9X>$@L{ zUYeeIcx=K#+u_j*xh&?VsIDkJun2+gMMK-x6D$VkbcUJQ`Vcs%#_hywm^=6Zd3)H< z|KW;6NP-=3FTYs(TvaQh5DNRw!`DM97CMJL#U3Cpic0cV>FLZq(y<);+ zy88yLeHmM)1_#d2Q_51x-#maS97aB#$8pZAm`v=<0Zh6%GAfj>!&_#Aa}TpD&C8C} z#(>~PjllKn=8=E@w67G$uNE#6tq>AU@adg%xizv`Up^ZKEH&2BHWmHYxPDp1viyUU zPl<|lLo>)wpvJj7FT^a6z}%F;8qM}76K0F3rTD^p>b*e*pQ`69am*UQAmFh)xY4p0 z;2Mik9Ck{9DBtu;aWody3Q~I|%3C+sDOP*%`59&P^Uriys#_{jPey3>8p5d$xY7>9 zA7e}hPT;4vL?_D1U6-5^!^TDU-GnnR@N@qQ0OvXoxp}7UsB5ehH9!>&5Tn#VNYeNl zNOhadA{z|BdmW$j__+G3$jhhrE>-lPjUC~|dsA_+#l{9t?GyTG3qv1X7Ka4M)Pv@T z;Sc=U;LP$4BlRErg%NAC?`Nx9=JtGj@ia?1v++@?mR%I?dUMCPiDm(2{TI0f8LoBia#x-> zEGZ;2RI=im4j3_5);q4Ptp=UrVsI^lpCF9%aTa%xPCP}j{I-AjIk(8yd+;wPnwIIW zJ9MUyT!FP9y5Db#m{sT^S0w>#0ugTsYGWd&?x~KLZx=aQMaI}^H<~E#w2CT)rFOMC zWrb7Nr)8vQT#Ss6Mvr(d(|GJdCbf(j399+)_QRxCqou1ukMZqktNs`wA z&wDSC(|<9L>Lobu1zke8kKP5r`s(1t^d^?vu>&Xa(yR6^O0lGiHfWTYDU^5y1pahP zBk)+yx~N&ojg z!RA1PuwPfWrPO*=htsa^qvwZA_TMJ|arRO-KO3d1VAv+Md(^9?!GI@NPPoER>i z)YE2AA!XLVf9YNL(2N{K;L8j_>Vfq5^RkuivgTQ6^jK$CWzA6VCo??j_8=T`WY4X{R>IIm9Ik8UnXII zLt4iBu~QV3--i@$RI(txphAeh?gnzNKujU-2tp=$6g7 zT!)cNGef@IF+|d^4B0FFN+07J2;+}7HC}t|H1Kv9f1LR-;28&S7+`LZZ2xkIUjd{% zVUUi0J&^Ag!h=d%%{9m>w^J#v;j{C;{@4;WECU^e%_#8PNCoiSxl~yy0eKPyoybwR zRVx>#RE~nE?AM7`mJfSb>b|Nx;9x#)18v1k4n~n6^S6^v2(n}oTBaS!2v@YtPRC|r zOkEZI1BjwPQD989TQQZzJ&1;jlC<5w^q%0;jE~+AT1wm%PEj%^WO1@fr|@bp;f$QP zc+$+IT6Vk5sdfeV_KlH_vDlcHb`C?6-J0YxhiV@cICJ2)t0|Kb2+CIICUdTaW~ z`SKg&{0&?z+3xk=#&8zFR+&LYeJqE&{YvT{;X{LOe~L z5c1cjwJQi18%w&>U;28xt&e&~C?=6sTz1Y?%Ze9IN5zIn+}t$Ft#9IO^)@UK0YNhu zig(6kF2;d&uFLexL~Z=wJs&Dpp@klGL67Ce^Tyz01As4tXi@w^azfZwwxEzR0g}rR zHMbRH#Au1-H4W0=S=?QlX1rGJZ&=lC!@T^>E|gu*{4q-&jT>-utUv={G$G>V*ylUK z6KT3sAvRX2P-UxJkiT=OK%B6UQ8qN|0dc9%b?`*;IZ<1l8Mk5jC^vulXqo8HJ^PQN$nOsGk^~ z`;4Sneh5uIF3;iA3XeGWIBbsUv;>)GfmSHSIc>0ik=%(t}Qp zVGHog1u}0JN#iPIbIbJ_y&vP zqcrSuE|?GKKZ(Kf#t&3YM>ACV5J4+akg zdO@%%kItT;5kNsViA;y)0Y3D-1hBE$_kmMm)$doDn{z#)XbkG=-d*D|hD>PwIPiwr zTgJ_R=}Cdy(1ZHEK;^tmZdE*OlVw~*Ny*2=?6dqt>~olrA)<$VW+*g=Q_(nLU~CUL z>erG>&$j*COG83;hl8{9(>BLu`2TZVViEN7RVJ$}ybF3IV>SqOy=!P8{#6O%tOP(I z1B&R+v)3x0!Y(q~Gk@WE1ZOou`4P8fkFDU3f0y)Gu1~*u#%Go2PFTB2T0iOl2m#V`!9Nql1(kWmg>$KKDA7E2 z8a<-+3Q$G_7rvjC(<&HRhBDCAgj;U>ncH`Y0;hV1ppb;OqaMUW^Nb_qDdmEnWbqnpBt3zKNCOUmFGi$O zZ!cC`>(JDk)@6vDC@fN$&K zLkCKTJC_Ra38Sh(@Q@85)2n}RuM+olc4C+A*$V|>*{ATuach+GOS92!F{)y%cM?TS zLsBMT@X;ls@(VKC(J3l6>cn&Lm1Rp)w8f3D{0~I;19?8OwZilFUXm?ieK1g?Ja!nEtCTb%maiT-ZpZDs~mC2wPldK@=`UXA4^eNH!AT3 zh2S609Q1deNy<2!al)qB6G)}!%RWxZ+WltK6_8Wx1+?Il7HO%&y(WA=mK;B^`Z#fe zv}6pyPJJnlv2ka3kunWlJY)YukG|@iE3Nrah9lX|^bXFKeR(J%ZEYb29ydSquXlf5 ze{p%7Vv8w?_X8ZxNHEAagh}S+K6pr(%)w@72wfFHZp>Nl z)kC8B)sLg{oX(Tr1_7D<>Hd`*fH-9UBa55`MW-~rNkAJ~R9 zckLSBD~!C}VQ=NQ7s*ARC5q;Eq!J2Pki9Prtk7|E28y8skYUW%pq2RutoLdPVG49C zy!Ey)mLX{dnNWO*)I@I?YubR`?LK!y4P?uJK qS5*05U8C>M6nbcu(t{9Wo=Qz}b>upK;kGW1G^19dv7--^z7}Ij! zbxA(LKZKU%LFHqT99U+%VF*E4}` zU}oFgL7(Qz!oK20Ch-RdgQTH1TSKfZT-iGB*?jN0dznM{K@p07H; zu><7P6?KD|CKdfm4hwe*>OnpiNb|yx0h7=ntM-UAb<1E0il|o1dxK{7$WH z=8AEv2r+!E{NEVd5g=R|6W|M?3Zy@lWObGq2^S7zd-e4h>RqG*Zf+UOQ-)BLrSP=J z+$`(HNd*;!`iJnq3t!S0Sm607J|GK-sts!6bD>iluO^7Otk5VOe+hvSv73LUkI|fH z%_$1eL?^B_r-s~l8`q?Y%P5$7kcu*;2Xn4ap$Cbq4Y!Mn+Rt4dip->(tgPS z3$&P$I~LWb(%GNh zBsF8o*g|aE2tax7-X#kH*^igdQ$}<=`72I(hP(Zhh^r@wLFdm6iTM;r4D(iRSuNeh zNB0F3Ss%AV=iq~#)i1-Z<4CFcu)Ic6{N9o1Vdh(1K0+*-Xqo*%SF*AToG?e+K{(%kKjJ2vtTfS(->;Zc97N5yZ4Ce- zcm=i(pSPyLDr5INnArcl#LTnI-k;g+d$cVxIMK4YaY>~aFBdikuEH%~Ad6CE$OeNZSq_5;wf6B?K<=$DRu_@+@LFDq1V) z533texI70*AkBCV7wDXrG9By3WTjifTd}W(G^-BMpv=>>GBBkH5R7>2y5@>`yesYR zY*^H0g{Kg}Yf8T<>3v}af@~2b7Jlg(AZrrE3$ukf&o*996NzPmHclURz)ANhREB;5 zIOg6;MG)?GS9c^I3keTHY?l^leB5{h)5)?~S1s1hrneeB7YSC(t7+w26fb<;=@rue zc9^P18*2P|RT6qo4M?+Ei?PiQ6?uh2T0I(cCO-_)R^envtsGkyMPN0BVG6DsEu|<9 z2j*{Qv$u=^CUq3OOphfwxLT;l?--3fto>c!6!n+5LL8iwE3-o=jR!dDUFkZE%uT!g z<>I){I0%^mVMmd_?udLZKmrL0j|CrEgs^+;p$2$f2B|C5OLKO(Rxel^zK0lqfFD7q zq<@QHO_qV&+oE%`iT^c0>0?*bnnMV@@9zY;Y~+EJikQdWr2j+eH{s{7z8Zeoj@9%9 z(N+{DqhIh4Pr}@KMlV8n5utKD96KsgB8`8!rTtO&K>z&%<+n#ux>jFMGv#PRF04*M z(E;VZd@~_94^GLpaG>Pc1FL%~Y1poE_4Ykp;fh2gk1zURm!>q`!t%|(xvcz6_@Kt( zj-sXTHE6dH*_J{18^~Nf`fA?AGGK)NA$INtfJ}c~mWX!2r$#6~Wn^ws z9>t1jC{)sA29Pm?yQdD*JUNlofFJNL`s}9EBnY^Z>FSe_v!wGk?EqJ-i}9e3z-oznolC5>Tb*!d>qx; zZ*%(0ZGV0^)`hgmNAYexV~(!ZMRbU@RfJl31#(L!IQQA41T89&uh5E~zIC`wrVGbQ zT86JQ!usWt#cFfIaq=rjbX!5q@D&yJUS+s@OMCYIfQ!%(L3S*-=JK96riGMw{PFtK)*HgA{ zVKIs}0hK|D_45EW2`yb?e9Fu#s$ZO6ZMe$Zw86Fyjd5P9Ro@8fp$HiUd7N#hl(Fuy z*DLm9;*7^rw_+OLAx9n9zF!JLBmbdWmO;N4`mQmN z@uh@=;>k4^rnSvwTD3XmpnuW`_I88k5?>Q~NWzJgP#3T-tOSCR2_d=5d5r!Uck(hL z*IZ@Dy?)IThe6HDAj+Zyv%h;8HbS`9z@#c$yxH8Gw#53aTJ`BAR|hn&+D5w{m)EcR zV2N4Jf1}0cpp7V|nG-Wy3N!?w1#Glt9R&+o1yXgNwb9xma*{{=?iq(8RN?TBZ9G9} z;9v5f>(zEqE4Ed^^o?(ZnlFOYpF))ad{23Fp^RSCJJEmj99LWi!yM%6#cn5_&#=Q; ziiQ*?i|t@9mz?J$qGS$Ea*Kul`I zV630D99D1vU0A#SZgH85x*>9mkyMDxT$&w3hAc#a9((&v<>=i4W@3KAJ?9^8!U!2- zb_vR{gag(uU!hVK)u}YHR+-nTzMMk2F=|Baju>@rPK=f}M^yJ>u0UtdH$iHlu)9dM z1PMo`&kz=uclb^SEi`RMpINPmlAejZ#Y#h;x0`z>+fpub$32|dDs-M269x91VRJeS zXcCqsbIF>=_ga=CyIAEADH@sRn_88lfiGNuZ+yhq$lYXant#zjc=Wg(EVdO}kKFR~ zPZT(bEY}G)d;q2hEXp+vUtDUqK9tX!j=8pyNl<`tQOqhMN_om7UMY}(r$Bzmicf?V z;$EIpkl(LBJF!Y+KkcFseW?4Af&(>H0{gi-L|i3Lw~F;va7fXytGN^h6sY%YuGi4J zn=4O}YvTTn#`lnK5Z^Au{5w?&EfT)mCL4TcoXTjq&aic|MeD(K+Do$6%#Uz?NT=rb zW*ouiX90=EJdKvqHCD6(5#^#gopB+eN-l?6p z%xc&*MI}Eh)eIlC>4B0P7kR8!7SUl(!x3s2`kN2{0?j)yEB_rk0iX+!?11cwsMWH> z>KRcAJQmr?SGv;C?nT}>qVg1#yyCahk#D&ER6Qh8qZ$baoZYsP?j>+0%v`8JN(GzoLMpqEU?Q zz+u7#$rfoX6Zm%F6Mokf*mcLM$2 z#Ym!^Vu}O$(4$Mi2qShhFGD)==}S|Hg@BFz^90MvjqdJ^?DjcIi*+6A#$jl zT6_tNikG_e#qpiC8zeULXV95xJ;W6Xghz_@`|%UjIuM{!BJ;@3phv+ta%*K)@B<=V zyUJhSk$Yg>e%7gHrr0_F(i}>O3iWB2ak<9)5DauaV)fU~Zq<_tsP%?x!MkcPcXI`4 zCG3hv#*Se?KlQtqYeJ^mw-#cJ>2Yv4jxw_nFtpi6!ee@q^Q;BfOk5TK literal 0 HcmV?d00001 diff --git a/MikroGig/20260519/20260519050055-Config.rsc b/MikroGig/20260519/20260519050055-Config.rsc new file mode 100644 index 0000000..a773c5e --- /dev/null +++ b/MikroGig/20260519/20260519050055-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-05-19 04:00:55 by RouterOS 7.21.4 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-LAN +/interface wireless +# managed by CAPsMAN +# channel: 2442/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados5g wps-mode=disabled +/interface list +add name=WAN +add name=LAN +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/certificate settings +set builtin-trust-store=fetch crl-store=system +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface list member +add interface=ether1 list=WAN +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +/ip dns +set servers=10.30.30.81 +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no dst-address=0.0.0.0/0 gateway=10.30.30.81 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Amsterdam +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system package update +set channel=long-term +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system script +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n\r\ + \n :local UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\r\ + \n };\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :local Script \"mod/AM-Certs-By-Ident\";\r\ + \n \r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetch \ + check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ + rsc\") output=user as-value ]->\"data\");\r\ + \n /system/script run \$Script;\r\ + \n :global tmpAddCerts;\r\ + \n :while ([ \$tmpAddCerts ] = true) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n :delay 1s;\r\ + \n :put \"Removing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/659/af48ca83\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 18.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="Download custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n#:local ScriptName [ :jobname ];\r\ + \n#\r\ + \n# CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n:global tmpAddCerts (a);\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n" +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260519/20260519050055-Diff-Config.rsc b/MikroGig/history/20260519/20260519050055-Diff-Config.rsc new file mode 100644 index 0000000..e80fd7d --- /dev/null +++ b/MikroGig/history/20260519/20260519050055-Diff-Config.rsc @@ -0,0 +1,8 @@ +579c579 +< \n:global CommitId \"main/659/af48ca83\";\r\ +--- +> \n:global CommitId \"main/657/b0bd77b1\";\r\ +582c582 +< r: root, in 13:30:03 18.05.2026.\";\r\ +--- +> r: root, in 14:15:02 15.05.2026.\";\r\ -- 2.52.0