From a9cf74353f076cc6c9809f73a34edef5ff275fc8 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 4 Jun 2026 19:40:31 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 04 19:40:31. --- .../20260604/20260604194028-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260604/20260604194028-Config.rsc | 2667 +++++++++++++++++ .../20260604/20260604194028-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260604/20260604194028-Binary.backup create mode 100644 MikroGig/20260604/20260604194028-Config.rsc create mode 100644 MikroGig/history/20260604/20260604194028-Diff-Config.rsc diff --git a/MikroGig/20260604/20260604194028-Binary.backup b/MikroGig/20260604/20260604194028-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..e7277074729ec728a1215aec5e2d079adba49eb6 GIT binary patch literal 164162 zcmV+aKLEh*sF8C*fdT;Rw{S(hmlit9gO3ITuK_y%0000K{QrJ1#{>Xa(&=^xE1$Di znml=wvv>lZUs~%l%bzj?ILNY)&Ai~#0g?sUi5ytkeGC7??7ep5gAe;>-Va`sx10im zIvoSMu(>t|-Ok67qd(M&>%?pT5{Bitn!)RKE$KUP^Qz$fg zdm=@;9&gg{yUQ2Tkm3E&cs>xA`MNgvZVqBv*J5TUUDU4EGUBCmF!VqjQYlVWrs(D0 z#FPX&!Ph8Z5>CE;9)y}6)<_BRogtw&6nctJ#sC1DNzxp@r6gb_>hTFECch|yAoej_8U87e;(%mUSZ*cS-ReK%_d`s z;qI0AQ<_1}76JgW&Q%GH)fftbQI>@!@^gw$?S=vW2vVMy{N+4XmKcrd1kWMH~U5+l-f}%x+ZDGpe!YCd`$@W#uv}E+tvk4hds= zJ8T5z0C|mX_T>O;`fhY{j_9cc89u$0?wy5L-~PCIz_rP*#&2Y|9rEDyy+%V^2=z%6J87M+~^2@%XW4pBDQ4 zg`F<+VVhU$RrZ(g<*COhbchaU4l%aU%wgHAy5;lcDKrS*_dh=+L`ecL8_ODcPefSt?+l7ivurpZl{2M%YK zty=F9@tEECnn#bUSz?BE=RMD!KtaQez++kVpEc2cY=GH%Z*S}&?%Me26eM;x`Sq-w zG!vThim+r70OJn&u5^>Lwvb>#j5BYdkRmEd-zxYv`NvPBrn6-L%od6bh}@E0PwunI9i!{3`+i}f(MMiT5F+v zwb+WVKsz9;a`iye8MftQ#oNkSA}fl&3W%Z0f*f$Fr} zE}OgJS+pH)6vNZ=OE(>5|Kb1`Q026Y>SXO;8Q5p-?p9Xle?!T(F?CIfjr!kLby$N# zir_#B(7LrDiENA6=eM8;pw{>DrD4zt-r8YOZtfqbW$;Y1tU0%~Eo~YlwED#|dd02V z;rQ>JD9aa8SAh!ZD?cgT3O~7wRnPE+>023RqpdU=60@rst+QV4qW;^Yh$LM=Vx6?m~4NRCx!D``r83-890WP=|DtyhavkvE$eF2w{dXTKZK`f7aKYxVCj=6z3>4`2TwH60bb$U z5U`lsKUwz5K^u83rE}qN4M6Ln8FUOveXf4F*GpG5DZ}xn^Sap01#uEZz zd5N6jqM{d}@tZUhAV$R==d#hmp?Y9os;~bZ?(UG8W{)@f`;$+A9ofo29i4UeU$;h~ zuN}!!PWM~9J6duT&C(IhwqvUn#J>lJ0q)C&MPP*v^slYkkNurtQi6R>RxtBzDm8;d7oBJ;*yzcCT}G}4`C%Ygm% z&PFx`+I-R%IWkez105cQ7pxo^7$>UZW^F-c6^`!(l-z@7)(lUab-MQzR(cgSjBEz_P3pZP?loEX$S{+bz&CjEH-o(=8 zAg5$tvu9O1at!NS$%CFH{auCix=}8l6sZNjpfu^WR#*|a<)hkmqKS5m{zKrTgq{Qt zJdM;n6%sG3g{chTK)2SIZpJ{WB)|k}cC)y%;dw*$Ph73b4nP>_jySM*$+~W1+2a7I zc*GT*_#ZL|m3}0qCA4600#hC%?LzOSh3{e4lyXtt`TVyx1ptUCHZAZlp0wJ}U_{J7 z4;ybWeMQvPm9_4+35xXnm2b*DgbdE6qL&y^J%r6<%4NU>0` zIBiPedz&;ukCpI?q8#A;0d5b^Cw*39)~(+5Fez*Yt;VCKp33dZi{m(z8KAN4(?=QM zmszHB5mea0r_!1Qgc(%v+#Qo^ z*fT}Nqycn*Sc_5*WBoSmMt%L^&#ge^9ZgnOVig?UK7u=~rBSPNm6<}-# z<1h@H=#}YsIaST&erKT|s~5!Y)7;l-8u4DHm~%Sl+*1THKgX#Vzc-PEn&TW7ju zZ(Rentt&iPd}(q}&SsCkn!dWMlo|$K2#E)ez?>})HfZ;^g#Ym1RJBjm-V3tT^m;b! zk#(XAzjKz+Mt@L|QXYzMCxQ_;fo=-9W4=B171s_xL6s)dhhapXFIdUt#}HtK&sg_8Kk*|Nw;4sU9W2zPLA#CmRZ&~Wy+Q&Sxg=X5l_% zEl_S5T@t)U^waY*QmoOAN)Xib4La(X z_P`H{v2p1UuOM4sGQ#~i<~~5Uf+Br($~K0WKfL{F3d1&6sB>lO^O;(yylptS32c6H zGV;AMSikf$Dzrp?Z9&SZl0#ol*EzJm%Fs&U7I`}hSR&!1xz_GI>TmKqw@O!3nYo-x zCq$X}Ixd%kqpzX)wC0WkHsqQ*@sq%XflrhvrVqxZ-7$-z~$Sj{Ks0`M;?8p$) zZZKq6B>29*AiJ}lxTn(+PWITjUN=k`A;a2v_vYZV9^ZNY+&v|{u%@VF;O@7x$0m}0 zm^Pv{p_BF%OS!a|B?EohSvIU{Gw1GA*&!1W&D(?+^pWie>^=TqkAiswW95-u^<>q9 ze+hs4TYFK;T}egmR`&fvRSY9={Mun&pt@@^O$IhGW;6*#qdI;zQ!B4S@oouNkiruo zYpc6A?0iFY!ZE!%b(4??Gtj`2F0mT!8aWW{PQeOMXy}2lY9R)%RE`Rd6)~s03T52G zxN$3VLrqtl-0@{0OTCGej))K{MOy4dubM@3pHNwof`Uj5SE4P$L^mI3_nX4>9ho?_ zE9P~NHZb%?66Zuw3qm6<;;&tLAsOqy5a(k+`5BdyPH?Q-8ZU7~-5q)GkH!JETqSVT zF%&liSo=88E+_8P`|ol)07g)Sq_&@;O3qb2+2%Rw>7{x*W=UN8s4_zC2hFuRyT9#& z2fN_|y;;bb-kbAR`An0X^t^%PLUZ%@r8ljhTMJ;C`s;9R&NG^Q$S==svSRv8uh3)H zvi{cxySFxumdY7H+xGs5i{51o{XkoY`U}KaQ5TYGU2?`oIcD{sn0dp@$Z5q_Yv`mt zZlFlPvVpn{x!tBQKxUn1QXvai7DADGX^F50ooUa>)1s5DjYB|`6H3R2ZZQEDs7(n) zgK)$#%KNs(B!X`Y`)VNETL7ebq1E9*HdR(*i;t~ zy!>{*mt>e_i0HUs0mv<-IRoOq=1^lPmO^YOF!eWvI+@vOG2jr5$KQbGcv9Zt#L|_M zgZaWl*Uu>{I%Oao*t#1w<_TE3xB*A&DaGK@+%JkRjTWF7VSeZZSjlFkPn6)iCbWME zO!p4?c`*-VkC*v?Mn~ZYCp4HP-8>aXQu`j8lP`TtFWD{1#4#|~ov&Oq=$9;ug7b#v zgK;M|96D!w87|~K!I>(#&ilLM!PO9+<9m47*Msn^NXCieNJPIp9lzrFNpQV+-)ZWZ zQhWxT(-!_&LIW$I<sK?@^a5W^geD74OetzJss7W3R26!MXNU?B=9P0Om&!9(>_atTMJtQ^r zkKm}CdECKM(6to`M~Or0B+bM8wL>Xd^A`ON$tcB~m^XSHCZLcP(gLPKuuyV&P}_+N z9kOqFX_oUX*Hie>Wo_w#buV^Di1P0!9#7}ewMy-%lyX1ulT+x6smWX#@!r>Y*|E9U z4pfuhi3-hQSLunHU7-ZH5Tba-J0Mj~w+HC{Xwcz3Fx+5@p zFHTkzBD2x{PZmRB%^5S`s0=mtSJEI4if36k)mP|s>;`#PkHMB-=!X)PfKHfKGB_}L zBLp|x;X;mnogw1!D&O}@$EZJ^%1g)F0q<5l8|SE@kEkS$ zvd*U{J!&P*Rna90e94d=gsqhTpGf_c{in2nZn{w1LRA4xKV->UxewHVo{-|0G)GJA zMTkpQ5z(Nq*ACK0?PpBbF=9fAG3AhB&SD)CjL?}+R6h7Yt>N*3cFIJV!u(+VfpLrA zY^zSC$D8y2YvRd+dbxBmJQ*c4-|R+wGOGmf3dJ z1Sp6@@U)0vBNZTmEX#$Q7*Ck0f`ahs+p=(V|!MmZWMiwn+m1xWg19NbbT zEl~m?+8MP`5FSIRv6Xe8x2_SrgXJZVz1oceMOHamMpDqYnsyhSgnapwI>NT$m+DWG zVYV8NZiBS~iW`XZABa(Xusvl7_}yD}x9u41BWCS@an74g`Idwv@~E>SnCS~tiekgX z&!a?+ur7q+nH|5%)Fmy$@sjIh2KyFG&w&XPEt9n+QPA7HCW>V8^O?b_r8x_4u=(YF z@#_zsR$4HZe@El}5EDM?Um<=@gKvP&Q)4cR5(T!V0XX*1`_e!Be9C~fkXULuqK3_5 z(4p|_|6>u^;!9fj(f{t+4?8MDnb`Ep4f~T7K{a`_`=spK%sP6^`=vh6ze7&;iURsZxuL(N4q*SfxhVj2g)0`gHB8BK!MBUPYKVXFGUi+ zw(vb^&{|Wp=a86+82y+T79dQip(_f&#thWr#zx$frE_*SQsbEye(YZ05^uyjH z2cIqPjMRl?8$*aq$S@`lb>!T`mp|LNp5{xvm#GwLL_#m+!Ka@Z4fXEMl;R(^-ybsW zQ;F@r8*?0VtlI--!yn%1VaJcwVux+=#cKy1`ow%^?%pw#B2l(!9zjq1;h4O$s%g_> ztB#$>;TcN4;ya<(=k-AOA8$jkpSwN`*~twYHgVo^kptg1k4xu-NXlrb;^&WCNNg1} z`gDDSRYU|@Zp!n+xU3$n!g{0BzM?Aj8pW_#hGCE;SF_wmN2sW(dQwbhJ_U{L+eUg* zDk%tYwJYA&-O9cmgCQ|ZZYCytKwel^I(mnf>R()&Ix;rJ--orvnqF!R()Ow^#oK(k zI69{bL<96EmfKEVt=#3J`4fKqr5t_DqSo@Bu{i@s7zIctNN)>+4N^|vx2Ymd6oEA= zz{u8wK*St~;AN_wg8t`j-K7@(T}~NSONDoN)xhcS z=Sxdf<>ihWh^2Lpsu6`M9CrF~$^GKxhI*q@7Nnw_+Rm^;Sw9n{2${a4}KfX$CE|2N8VuLG8(vBc@NuUsmd zj90_)(Ns$T+s58H1W0Ep?SVT%J8phmYK&=*YLK64dY5Sa%ps+1&2oqev?;WPI@2V< zaWQM>-8Ydog#)5sZ^0n1Z-OUF*LoMv$yF-CArWaQYFJs6b&9?$?DoMu7P*I#?8AeH zeC?V0d}u!%R+hhnLu9A`f6aesMd^kHR)X6M_r`TtZOhP2-pBScHq zCu(5(MvT6t(&e-f_7n3;B6y{ZOWlhKA)+LI<8%&X_eDu|J|KIW@b;-NL?Vp=VM#_oJ&93q)cDzk0epbboyH z3Gr$j#m4<>e;9FAnc1tdX$f!{IzZRB=x*IfkqxGm{fw)mfe5`~V|d-!=J^*J4>sop zw3@GYm5{fh1818X?1W|2qW72-n-xtMQ4d|jf^Thj`01+|C22!*r9Z2|G6XQ{*iX&) zcMwp|&GaE*l;RiTNcDPBkb}!t7#vTz%UUt59@OIE&Uj9%GXIlkj`r^x6{V>Z1|3-m zF-1;Ws|U#rf9!T`K7yB*4m8F3MS!Hj&%N0$t7fZgOks^2+G*Y+NKdXkGs^n6R>m9@ zb{kP~=ZE)L8Wc@yfY@{X|12(!x*Lz?N%JlWr#n(A;eWpY@(7B zL;gjK7e!}Y)>!KRU5}YuNi&lnT+n~gj)+JCKott?kTYM9HaM0+#@4$Y6fp@Q#wo?5 z!-&grC}|hI8LPm~`Q*pz4W4!60@AGXkVQQ=;`f@_fCjg{E0BLMZ`wa|+SVHFS`v?X zMl*v0tr}aa9Mb0ULBjD^((Xw|!7bpt*Ei`&3!&(JdVetAIcDp?25`)6J~ACIOf0es z)u(mOvs^}-rBsi2h!&5Q4w+hIyjJ#s9{AEclxi&(%{CMm@;DNOJOfiIdxywBcs}SP zu~7-t`&zy}<)v&59rs zR_lVW(YuBnW(O@Fmo0p0d#!p{w>em^I^^HB$i0bpJ4hpZ05n#J@z_Tn#gkEkYcQEv zFOLkiVlb_Fkype^R3lGly_?#6gA3F~2e_FJ{jrcZmqGd>6vxFx$0#Az1YNvl9eb83 zrx#!hs5*a?vD%mV(DY!zG+4aC7uVs4OO8qR0!Hs|3bn^E>3ohr$X}pR1|Yj2?u0L~ z%cP!yRva#e-z5vQe;>=Vq!J}n**!>1v)?uZ>MXGVUdsbDi8HW$z@~Gl|0d^s65f0@ zUShdeKzpj}a~Z)zREB7WtJVvohMTZ{e_B^*o_+{u{s+IC4D}4m`XGKI@?AQg(F>*o z%Qr&(7uh_<^!^_H7*Nq#)tD25eE1;Rnq@FyDQ+$!v#EjTS=u%l&UGu8wd?CjsH_~V z!Wk&nQwfiR71`kAROGj_D59WfvnhT{sO3@IIb5uiO%1(~(&o)KXs{>OeIos;NJyWi z-pd|6Fk`#oSI*v+MPEKex$hEk4nJo-0b}eiUngD-GhEB%)y&>yC%qCxg66bCaliOj z<~b)r_Pm0Vg}*FWdtK3Y_tOvjHt4AE1FtXT5z?bckE7%uP%2bZJP#_aRpYX;3@N{* z@qG^qD;3kxFG-M=I9%1it^`pjIW6{mjq+8O=m40yyk84?F~3rc=G-itLZ%MiE8TT7 zu?}9&Br^iJSGP{-_49ypA@$(1cp42&aK`CzqA$vQQqrE8N@hT`!>!8)L=N3NfNH(2 zv;dyt?S|D-9kH5_I&7c4w#{30vm=$A6emnQZxxItny2?ifFS$+4c78eDNB2hJ4c3N`h-+I)8cfG0d-u9U zpg1+_9e5Bd``ATpnn4ewp5kpY-=@6g``n-vn0CkhD!lrHL6pPWl)6GQWks%?4xK9P z(SV4c%B*Wil8lR9JKt@aw-MC7iEhTp%#|t+n#34F)#FF$5sV9G;HV^BhwjvgrCafv zb95D!anfym!#-q)(seY#iNpEq!CLhIWR$sGFN=bLgbhZ?bzKwPcW$)6I@~!lVI_*1 zh5D5(j3#IVdk&@}*kURk0-(6nQ^} zuQ=`C=?CpKI42QuI^MiRK|hvLIFodGSgATU5DwkPqSm4Z@Hv?)H*=}qba}N<2oRay zaE@S>L(YRKfL?yOK{#t~7e(mr4TugO0qQj0fsjVPq3p1`=Ypt3wBOaFx`qlTX}FU; zgUwQ!`+RGZ7gbnd8ZzS~tl(9T$y(wNcN82lfe))P0coN+;B<_^A`m_B$^JHFae|me z5ZlDTg)FybZZU}tB0Q86VKV+Z<^xh3R`<94oj!yZ&TlXzkRgUywnNY~>B_p-^h-?x z^{jPM-W4jklX!H2*>oBk>~8@46w1_NPi6LZG7?UN{*G!?bc_Zf`5puwa{ zPmNVZE44uq-g!`E$&NXqH!v>jW4Ah}^BbKvQ<5!FO5U)Sp^xAD^AlN&8ja@_&{J^Z zh==OhiGY$^2wPg|h{%qN%6qEW4n(7{h)%|fo80O9J=|f~ zgMIYoq|B)9MKVi7`f|C0#}ys_vWRmCB9NaFR531%D!~@?{gl@zPYR2h0WApUE&EAC zh~CE2UM(euNn^_WXgTxL{W8|LPvmhEMw-Y+=W{e5R+tR5oeni{@c`3`i0KLQ4f{IM zA)A`dx_K&0Q+?=)rvQHr68m5Z*=V9QgzB?_2DtAeff$4?7pL@nzsLtSAiR9kN87ju zSueJO&jT#0YKhKUt{Z9L@GYI8Ld+0VU#h;NVp#gx1#oenEbUoI^D&2ooqF3YYqVwvs2 zB^6MjZ8oTHll#0y&^|dj1K+q{TFAVK`B>a~5t3U9#Z!MMFIOti7zGsIblGb&g8!Wd z@IUl6worWbRKCSntnk^b%T!IOb5y3Kp?i@aJfI)Ub1ZVHHm!z_baSDmGg3?gN_f2+ zmC9FPM$?$G18p@!L4mlKuicoBqrfIX4@UHX&;qJ&=R}*^ATT#L3OOHSd{!Q@I^ClA-6pGhFSuQY2?{@$Ypm~d!wqYyWQn~?IQ{IW-*e^%R24<^R8bpW}40amzV6; zpGPvHn%Xw`HKsu!u6mff+$gD_rX4HzpnX9vzpTeFSBc~^VOuz1w9v0d19H*hVc>Fg z{i@Whgx-?*9dG-QdsT2?Z2kOy8`k6eL<2e4O5PSWnoH%1Y>~sGIqX)F$=yZHv|sxf z9BZfJyW$7)IaVXBG|?~Q)8Gyfh@7FM8ZW;>l(!=FEQ|AsY1+-N!EbTrbXK_*5q`0{Cl;4~1 z;-Lt^fgUqHJstX(#L=zK#+tf=2`TIX+sxq-3-n414Udad6eo>&b4-%y4x~Cz>$Fao z-aE9>&z73({4Z5^x^&xK=_+KsDoQ?SYriw{tF8{Rsq zWbY|I6Vh00ipn(3LYv4^fKJVFZB=G!7rw(S#G)A7n8BB2 zb1a7e=zem-ltLzr5@>f_{_c-x4RB72(0zc?9!-7@mc?>F?bGp*~bdDI_VfI8j zix0z$UO`-WGmtIBkrge<;7Ftcc_wUz*#57zs zoa*_|I}6+*5W{@22=IDx7-Edkk1ARXAq*Ow&P+M1j~k`3H7#jYAA4CV0fm^NCyHc^ zAg7dL^As=c^FJoeIIlX06?1)SoI$$}_f^{64Yy-~5fi}RRXd|7ReGBvV9v?}W|B{A z`$*tTs~ck*$ygA?M(J?G;6ar08k2kB>xlzXK!YCzaVxJ=6T9%8be}=f&`+M-CLAvh zW;3~+jJrRar8!^D`6>An?cJzh|GVy#@qyEfe&Ofgh?lI*E_djl3|KcffntmXZ^`~1 z!ca=H{Cw_pM^9l#s1N`(ggxlDBtbaCK!09qFEZ?mg0Lx2kMRgQS|IwxEF$)x)y$k4 zpA3MEy|0SwQN8F%AG`CXmNu3h0*uGi-td{h#kV=%bEB>wQ4^s#W+wl0`c`BJ-*tUW z9Vw5NRD^~^HN2RwtL5j={@&OHVKM-SjR;drZMrTyUeWnpN%+JVQ}+Afb4(T<(ee2z>Iy4(`K3-HdlC_eCNrDn#RRW@An|Dh{H-QQ#3Mm>B&LdLS5xVCZ zV_n4#A-?x;G9m3F?C5hhDGiB{upPGq0u&0UEN-Mr!jg!Q8Kp8I*D5v&2Eat~1XK*o5?pSR`F(~wE)hO(b-qdB;BPh+bQ4nL?jN6j8l^h zy~~HHBFjB}oBmoiFcmrr^5#DqoRSRoKFV)FRB6%Q7uc%}11I4ADc2#!*k!*=`` znV{aTUTy#oThL+J6Szx6qeZHs`$TUjM33W^2XW3hlXxKvz7yGvJ3-Jus4taV)=B>2 z%ZFoqST3niq}_eZ6*~50qD_xox*mA%qzEpCN%E2UU{+B<>N8;g29z>UAixugX+ z_rV^!&O-#x#HE`BQfuoh~xHbg73z-tE?KO#}54+3pk)&8B= z+86kFXq|tOlmJrtvvhzOQt7r#-llKIml@Egdy7a3^V0zOCG-+ZpO=-YDbRvN?{FEi zN6GU+{Rl^CRqWXPD><1z;wGqko2?o8pTQRhyIqls3B_q*G84>pl=v}Zxc&Z1J)`4yM%hIId2)GG;UOT2mDFadOBKE!r z8tYapSTVDkG?z65(fuDKD|aK$>MA-qRai>}D9rI@%zhfk6Ip(cO0YI#4*bn*(uy!s z8N1o}C!m4UC>fogyZWeDaN=0$1*JNbYN}3o=`_lkemd>|8@YQwjruJrCUAbSO*<7VG8no z9+hHbR)tR-dyFJNA$5V<8MREQFW3uFc8t$hxr^|R@Frx#-guypNzJUx1x`%AI4HV<@ z&n*UJi`{(6co%bYwAa-NS82zf#7p_wDgavmh`N9@y)9K_KNwZ0D2NIBaGSO1=;o%& z3K#-g=QB5NpxZrNhl(ttvlSEOQwb9dZf_!<9UOoRUW^*2!F+_8;txd1sYduFZEb6W zX=CH^8sYB!xIa!13BI+kye#4AEm4=a`+4!Tp8QB^Fe$+`AjOFk`9-3?CDXkQy17mSHnlxX?5v*SDp{KL7YtKX_+qK<;SH{~`;?jeG(F^J zpk=@}w<+vW9R%`Lbi)iyAcWK3Py{K?aiOeAa}z0`hOP%PxVQ2}xirQP0;XNV{5<3q zTM|-H{yYi1Vkywib+Yxr%y{^cDB+v6SxR_EVRg$_hNYYfXVd}E^y+o_gh8|jCHDx= zs;OLischYgz%Ha@tUz4nf2n)seCzO5Rh~Q> z46Vm{Prh%X*=R_(BNHWlV(%eyWCUe~U~&uPjg{T@nW z%;NiS|kD*33M6h?B zAKAy;6&Qy^2v+#j_Gi}te3)N(;O8vCYtq&+KfT+_E=dF>>7%w4I zNVs9)SL*x#Ap(l`pVbdO5edPk5Lo`*q^da~G3R|;P*`F;T+(Gc26jt2h|ec(o3=`)NfXu>8EtAs-du#Nm){R0JL&g4EyI zMqhQktmxt6Sv6h#XQTjx@Xav8z}P6FiZI9t45D__Bg;1GcP0^Cxw0AvEBE6X<|S%( zW^Z|%-?S<+kCps1??A4uw+hJ2xRKmi=+^(X*&Hgg3YPI=Eq01QAC*Bx<4ncf=;&aS zAAp*-cW|-^RdzREr-`PS`9r{K9ErWnw3b63+YlhDB_JdpT$ztHoj5m#=YS;I|+*e#r&55<_Y{#-m)wB}bV+lq&dtXnd zq-hztdF-7;LPC+b*O2o@tX@06o0tH(Owoj#qmlu2o4A%63Wpg$XzDES3?$F8|>zK^*g@rIQsrR(7;~aCo@Wm8q zQ7zM88{7;F)sujvcjLIU=NtpE;xe?RVH`lo`iG)d#sj-mz5Bs_q7fgfiA`Jw*jUz) zVrb+&!;e-@R>Df#mjh?i46Xs`rocYe=}j5(TJ-KpfX#W~*rVCJ!7J~BHUs>S3(}mB z&QSY(tDw{%-zj9A)VUI%d&$T^A~dj+4d+Zxl$jW}MO*)Tm7`EGl45EsYz2wn<`tHW z0f%xWJORM*)+MBA^V7$5u`^;EY#GeqK{oHBYRGxbfL90*N+?yNW7T`~EkJCT*0t9_ z^dejGG-orViR`&NFo=$x8I@g@J#2@YA)zg8)(ZjXXTg9^lBHajMwj>mbAOsCuczIa zU|WU^Z_CqlvR{=8Lg$wwo!6G;Jvt$7$hCtz=xKB&QSUOqN!UmWemge4Xh3 z_mwgDVz#9J$SbqVudKVm*eH(3i=lM=kG|MM%4jWKXB#aUU}g4wNO6N_U>A|8BNP6c3r^ zcQfLoVPYJiz+)ingqdFbY)&;X)fOJWmB{ib-3$ej2h9pU*Ge>d0HO64;lkAs_mOE- zGMU^IIjX>v74KR)W(VIm-@F1si#pDqIymcI3PbktI45x`3rcQ0k?Pk@5 z{K$jwBu|+jv_LCBp@SE)Y5Sdr&QWbqiE?Kx{&;N${*rNm8iLQ?GEEozI;=J|gJ!UW z+o=rRlPo_PW$_~f;-}Zqz^x1p0lM@}&uw1ASYcQYYk5r|-H!!e7U){h!{09=I#>rA zn_cOa4nGrQqUj2^lt=$xINN|37cWk4Y`5T=0A0T~#{oM105fAF+dySkA?DJ4(n&t% zz_C8JFcFNSQKuosY0Zs44fC+9&R0SbPmZ@JF;^nJ?O)1n$TL>jQ}!M(B8%%GGPojF z2dD^5NN_0LKTa%t(e z`u)2d&04MdsBT!ivW_R-G(TQeEf8lF(UWJI+7edaQLD&BTG$q+ac&LcYWChI#u&cY@-#hahK(ndT9}1fk># z9<)=6ZAwr10__E?yLRt&aik&Zm}_Lec3;DR5+!TY`>ai6RtkVO*v$~Te(5I)yJnCg zLFH?93WuDNNl(5-B|syPFDNY=+EnvkRU6@#iCr#CrLUW~sI;0vgn7vO+(GI!Ow^-&2YoRqUb?7NoRq_lo(+Lx&shTDFgsf31vDo(&$P) zlCD{y{=mA^nCywsVfdc8`M{osvlp?FwMub-KN{1qEPWx5+Mdxu=Y7hN!QG@)Aun=2 zh5Od)N;i)DdlZ<;1ZD?45Ojg*OB57fw=7H~9%cjsFEj|^$;*@~0TGLX)Rb)Os@~ST zkx%!@YkGX}I~~vmlGu?dY;gq|B1esyI4X_2$sqL+v&6|%P6?+0>7c~P??RZAT%2Be z_EDmY&%~pD0%aFk$tm^j^m{wiK9@609FpJdSNnUe8D5{~;*b?hz8gcT)@R4UdHcA! z_siyz>o<-rN;4Emcj7Ih<%|joACWuSzY<5c@&_Gf;~3}V`xatYs{q3ECCNT&QgWV? z#~_D$n%a(_D(#G*tUduoGBqfEKqx#Pj;Cy#ou&>`0;X;3PxO!|j2HN5+FRX*x_;B5 z_2qC+{osEy(GEuUZ^cjv?@PK&e~eqhel}M*QtOAI%#OwF2DVoxmUNp+AROhSB7^9h zoxS&SvUZgu-6t;R1|1&cYsCChiq%Uk8<^Y#F3=#ZqdSgxw?Tts$K7D&f%h8VpUV;5 z<#GAU7uXoixdPDt*J&z$ad5F;tlPj^kUYU-Ry|id<9ig+yn0d;fV(nypA*4vEmJSB zxCy33gc*2vY+__(i|DDApb^7s01@2I*-YWe9B=Ci9mW_T0yRQUj-<1R9G$B0(XV1I zUrytiN^$szT>dJ^S=FlcPh*fCra(Xk_i3!HSL`8r`v>i^Qh8G|?xp60saQQe@f1$r z;xpZaPvbA3-TRUo4ho4#(aojIV4eZ*R?jE8T^{tj1f%TNMVZznN6#1; zaXay5hks0K@7FBgc1>61ECS6c1)qsg+?Wf(`V_(lWBD9#sRKEZtn9Vm>|%Gh?Fp+|NFJg2jCTRd2{&9v!uh ztxXV!^Xu(fq;q5CWZNY`HZh|6cAJ(2tM8y?gq9$0}X8uqk~*{CDl^hP8WeSbCUBgSXn#Pc7=U@mEddU-fl}vmWA~r zVT?FNtl>bOF2dBCmB#;fcg3(=e1Lj{a!Q8$a~3NU$YtM>An=JGhDeOwfB{N4clRiO zBkJhF<^arK=&)@mK!9syWb+Dd8JZdLwLaC?rS7;b3k7amv z>v*%1VhWKktAqwBSa_1(4$N#C=vY8y91c>b5FU6Z6>-}<#A5om=4&;f?Mq2{jv6`~+}Z!;<_>o5ves*pgNO447L-*Nzq4ra0gPMI++5(kpR#^1KU)ZV4S9** ztali3P^DCPk_Eq*J3}lHZcGqXyWBW58>eb~9a{|cmej4h8)9n2t}mCo-30=niNOw_ z!u_&=FF0O$o<(d+=9_fNY%W^Y$#(HL%JN#Kcw=3MCIFp&pfM{A$kQ>)6}8wtMw95{ zmZfagnK&%P%ON}_qo}jQ$JXQ{BI1MK&FC73iY0?V~7@sS_4j@

62fJsCY||7Iq1f94{K-Ah0f&hLPK+O%CAs#EJ~4>65Ry9 z?$eBY9#&~isP*|<*mT9{K@8oEBpL*L;Jh=v``Qr-6X~q-0B^h< zF2HmMoaq6*m2LK<%VNS;0OiK*jXh#$CC}i$wz4l$_#HsmA-d9cpVAk`MarX7KLWV^ zd%&MS_al30eOT&jyD6B^$QWfpMHE~!9a9tm5f77Ci3|9>db}na3gw&GP0*Jt*Rk4* zLo75*Rb%WIg)1A-cnNC!^Pm@gs~#d~&2DZ&LslEdhM=gc`pHml9x%HWJv3S;?*Apt zRo7hn8)(%a&hE+7_wdmF1U2{{0kZL`r%rm~y~l9uOMH>wBJu4i3vz7i5Oe4RD#P3U zJNV$UFm$*G>&%hBF+CjazWFSnGJQotyvS4$YAaOGrCn_(?iNfCc0bPepeHCRXmt;M z^GND%bv^aW_b7wmH}TsMoZFr5^oy1X=Jec>a`34;eAk8_+Pd}gME=E$;J8$&MAxHC zogJHj?M?g-^oPkqsL-$`7OL5A$Axm-D zOUa~nR#5@7gXfll(SxJJQ&(8p69zngm=NzncYf(k-+$IvdQy1kx!j2>tT>GT+~~#6 zha+bjx&!%W!O+y3`hdFB^z1-aSvFIfIr;@`d2QfA#EKEAkR77TT9Js+h$pEyZ@djV^v(4#n~L_Q@f z*d=_$zWP#xI@-7Wp53>7`ema%i~W}R5IS5?s#w%CLYgeT|g#B8PA9%AFZ}UmxnU((q}%T z&{x4Kd_89b031V7$uGm?%ldfb85<>*jE3dTIslO~JtY!d@rH=PLswrB?${Yrm(S_^ z-og%|v@iBKIy|j#ZJh8!t-liOf*gjiJ_V?kPL`rsO3(FR=p?Ymb{_!KUXpu2OIyM`EarWoS6Fc&ZAAL-`(f?{$vA z#UctelAz8H)hPsWJwX9|cm-#+HJkGLspm8O%f_OXJ}Ebgt1+Z#A{}u}1oHl-oK4PV z;}$~XGE$M-VfeqF&_sEkzZj1Jg9VrKU0V0J8omfJgozC5x?jf|3UF^|caArK2sNtG zo=9_gZuqVP7H2`N?B#-!U#b0 z-Nx^QkX6$a8QjtBxO>_mQ!c`la1nwn31JbU$qz}WUc|UGe z!MB0c*cC#3eeqXsxG7R!t22bf?sq5mn2#Vx+MSG8B044-iqpQFdr1;liW5u86unKu z?7JaMlPj_hi2$Y*{$2RK(nsW!`k7@ukJRo@Kt)+|`Dc1cHz*y{pheghLhDUIUhNCI zJK8vD$%5^NhtSGbDQSTRkSjlKpv?KC$gO#Hs3W@mlF^0Tsrn{K@Lu;AtyQ3!r9JSi ze!|{%*D1tJO!Kz%&)bhr!@kaKwIb&mO&eS=axya%H+elxoc9kQ77qz{6&T{9Gi4&I zMdVzw3^03dK!arw*M582)tZMo(zXB)Wv8ph?z%3yI+#_z7E6-B8W=w%S{`?2LM40n z$s{_#ehcha56z?qo#kQG?QRH-D?=uiY%~mP1S>`r`1pKmfwC^EV=*mNPNZlxE8pdb z2_%_TV_#v20ob$9_1@A9`93DDtnCtH_`%u9gzyXlVxAvGrngt22g(|jhWIFVBE@5H z`KXBOgy77trT`|}Sk=^(=}J$0KA%M=-Bma-WqFekmsIs3kr|}!*X7(M z1Bvc9T>SOm+C<77lsWJ}0LQ`_rA07D2HU?nkTz$Xv}Ck7-nTs-eZ>DpIu{V_{Kut546w4twZiR|D(_h+~}rDme8*eppCTvIM54uw$%t z)?>H5=FP5c44%b`13fE1(X2FJCi%wSBzSMuXccO;Z55(L&i!aCcBR^#6Yd%rcIBDy z*w!ZxF>Rc?nZq+UdjrTbEhT%IZLJTx1j0<9OP$koq3tMntGnB$DfnoF#kqa$%UFl( zxRsGcv!M~e(kgX+GLnK0|i;00=ILPv+2+%EZ<#o&O2#;$W6v$Kc zttNRTv(vKfVhAt<>L5~M9ZVtC&Yci@<#7)oOkr;Koog(E_u+PfSjRqHlq7CS^Vdg# zEcORwN~V@I%J2NATN67&AB7TMZ(&~U+A|-pgihw2Ig6~$Z;}s6Qug_!6Y_%?3Tx%o z!xyFlBA`ZiWM6~9L=b$Riz(pS6U6okD?r$Yo_G(#n2kwcWRiB(XK~XUZ(dQeH-SrMSmDTrxetd<2O@bCnAJH1^ zv6u6fyT)_LzN_9ijWM6^<4Ay7jFlFTG~nS@&>&aQ=2mrM-i|4}q_-XP$^1m#j7Zm3 zzs+0-GQ_{_(KExp(JDWoceHu(s+=2z#^KcuncW8Bj+lO^1#5T-c@_jet^4qwz=5lf z22%rQT(Iu;-fPO&J9+q0N>F*vsO2+ea^R44DRZ_*#eBW(+z#`%D5UKR8X6*;2eQlQ zKyE4o!4-EBf*gHtWdsVY%7m>>Fer_fqg1kuRVk_5)=!CwYmw zGgYV!Lw5EtoDk=AF{8dF*d2I%$BsfZ(mskR8_H3}KftK-8+5p+laX3pG9_9$8y-(` z0dY#<_GttHW}mPW7rrTdxsCQx6oDNA@uf)ARk|^`-cH{E~0R~*jek@kkp66m_LqIBnHybX#xR|ZG@ z2rf@g1?l*tg~~sqoP=S5128eO?-61tyK$^rJ$KT)PX~T!1}TrqA*bf)-sQ8AA0G1n2>+ ztbJgc78n4y(qJm&80_E2dx=%vh2T^4!O>_2h#ptv&0D#G!Q~)*i|H}}f$Ve>mIQYR z@dniO5qW5vo!GmK@}k6BNPgP8CCD0Wp+%hE*f5O9&}o#J?jBxK2&l$z0kC8VE(XDk zBFq~_*~#H?&2clPxSqdX*ER-8ldLBjQXE_ceS&F$l(+`SujfMaJg4RL#SivY_t?#$0!S2g-+o@b)Jz{1>0eD4H}A|7;c`~! z_ShMX_4Ik+u=Okol)Hhek>A)LKs}yvz?3~ZmK2SD?$BDy76ti{bR3s?sD)^)=eMAn z_tgfg>|@Xy9Fjr`xEFNrkUy*^sG{OJah1lz?`qA$#pXPcP&0u)VF=Kp+6R0q9u4T7 zzeociRaj%-7D0B;Tbz!Rr(1N!1?X&N^-N_^aY!2m?|jc>K}=x%pUn3FesQ%oK@mY2 z@^;}Yc})HpIFHAn!3a^39Ph1is0pvIsmH&DSc_Pz+9S)QuRX1UgN9CL7SO;s{ARdP zTs_>xl(AjEih5)3$vgOMG#NMMlrp8>Kwm1C$Ek!*F$YodhTe8FT|)W%V*3K`VPVI- zmC~JMdB^9_uI#^hI^gQ4KXj7E0YO8NK}8<@OW)syydo#!VP+f8_-i(;EzD~@m%_3G zQ`FjH&NP6JuNO=RthKH>kS-agA@D;WM|kw?bA^E%VjGj12G2$8CAZy$KN@?OfkAZ} z3>6jKb^z~b+Q@rNy`6ck{eX7J95uu6mfdx7+r>DMIeM04d78F!3y6Fo?8nP9c@;s| z`0r2ZXyN{ix^`X-^ux`G`_c_^ntQqhnd~yksQ`MhrQI^5Oit%uLW$d^1+<3H^XILE z*eKlv9Gdf?b`l&P4hhp^vKI>`>64UA>i$ApmvrAH$H`pTY3!k3JDyZ;h}`is`tpl^ zid^PbZxL;~;G~8JW?XtZ*yo0mFT*`0@w>svp)B%veXxk8H6>oD{E)CL?A6w3UTOr1 zfEdLwGsORiWw-ezFBjpsHkVRIT;*XLKaK^@ge2El$1e!52?=O@uK_h+IhHmW5E&wZ zP2>O+5lL;xOFnv{Xh)L@&mx5yM$7qg3!J6$$YLlIPYS)Q{2M5BDI5_r<^&P>AfExp zrTMdNl8jlCcjcHjZ_08p#?Kb=oL_w$MT+I`x7i`TX_DwFzUk=XY0dNw5hx!Ub!y$))q4a(u>)(7&0dnEYOMUm5AKu?e{Z0wf=M` zwLr9MdXSj@OYG9yX6#G|AXP%1hxy6H1$K|ktSjF*yI)}Nq=DLLGe0xCx=x4xAzJyZ z8d-RQ#_b7|$X7UXPbZutwgVh31npKtH+?(($;1Q1d#H^Q zg(ITF-Q{z$YaUXPNS~c3fkE<+=5xob-fPOk=B1#<4B_(%Vr|jMym;Kc0^=i&Sm}A1 z`#l8LRQt&v%25ba{EY5tP)NIiro4^hVe!(V%y9vMCS0lwNTpuw;*mCNC%ddOd(U$KpcqKx??BU+of^f%8 z>rY4*j`cnTj6&1fd)n(a9OFrEZ_{g=P(L9G=wQ#4Z-!$D2?{t5;H2WrIxKPDX7|p?AbMV~{ zcEU7-J3mcf`Yo3*z1SUQ4)!mr9M;!zvw{|=>+QuQJ@BHQ`fVR!>kdOfu7_VZ`(hXD z-MqVwrMUWvK_AJ+XQ9?k|!oxXdH0+wbJTE$r}ETj%+0qc=-_m=TC6|GbW2icBr z2v8voj%gS9>U0X6>_6W|y>I`WJvlE93G*;U1fSjW#xS{+9eP2dqO=7Cw z&_OJ=YMies@mjG@E0(F}-P_NL3w|dDm{UkwUjbyQyE4e$0UVuma!p$YNE|QGNZ13t zE$nS|FZ{~&t;Bi?;Y&J2F*lu$S0ejQiRfJY6L_G*-GU5Xi6>DD=}7U9`{Lo^IhoFv z;4or{!pEO`2FOJKKF}J9nkfp+nmGvlFEA2_7_7w!1_+y|(Y*}A9#_-(dN=EsTx}Ih z<5TGt9Ps!OYe-4f#PG+BQvUf)Tw+esqd9r_$~L!BB;)1@Zk^fTXK0KPaTSpINeL3o zp*mD{-P;zD5fBw&Nu)5?n4U@cH+fIM@eZ7HGkZ{pm48E)$o>bB5H)c?_a$uJ!{A{3 zF3JPU=u^p%B$)#OeP9_KGF(nZu8` zeJ)+p=v4P~iPMd5gOyQFPYiu!NI@q#M{y+(LIwYvg_uGh;Ns1r+I=n_bq~VAx^$|* z-!Jn0BV?YBVP2-+N^O>W|9AZ|M{%q5cf0J_TF+!|B5iyhE+xfJ_ zmw!z(Z~66(=yF(v%AFTP7y4)f1jR)@35le3#85PWmL%7rNF+ejJ@j8}2y@n$Y$$gR zCZZrt>NEhTs&@F=UJUNW{Ae8wea>ENIFm)KLi2nULjLc2uC|J$e*>Ly)eGd9sWx0< zdHqlmT}kW(^y=mzV7I%5>J$d=^A%e%uRr`4jJ3nc2)I)@T7dolmm}ULk-tv+LqI@{ zVw&ocEWz5LTIWZk-`*QO9^O6$1PB-j4hwIRFgCSKoFnLo6Sdg65r%}ESQKKjMvIxv zLxXzxae^#|)<3AkrVLR9b>`RrQ;K|`_G9R^h;#Sr(yQ~*Qq#z4TET?|GZ3j&uOV#y z+BDsT@aY;VW)$ubCUe3bp!5vqPmQR1vm2Ki^kv0dZ3Ry_{#Zo%_y{4fU_z{^&T;JG znE+J<JaRh-(-pRIqBd)WnBhSDXDH&;fIoDTuuObC)8e%Oi^R*w=s&14DKM% z=pN?dfXvt!u@OXScgln+BWv}ny-e?P6lc3cpUW)dE7W+&%zox0QkKG09ABkfXnAfs zG7ezStp+>nvr1W~;Av%YW$Ymh)hJAfWbR}oRDZaIl#Ld{AG?$1fe~2^^nj^o@9f8b zRGq@E-9%slX7#w~MtMh8E&@!g2F{&m7A1i~}7{9TOKu<7bd9M#H*^je%vfTWpyxG3_eF8&RM~;0wsl z$9P2XvBjzGxl5T7Wc*<5N=RzLca}xQo7;y2$m`qzxSmJtuUcJUJs@UT4Hkh~_~G`; z;-Eldf8Bwn(n?D%PFq>=;Z^h5)}ox$Xl|b;e{Na*e;KNg2XRX`mHJ4S9fLHzZw? zg57I@I3>M;qet^_?mVcimlgD-=64?W_hlU^UN z>uWRoMLwLS97!Up<{7Hj1Mu+ZVC|k-qBC8CtO5K z79L}4-#;nfM>~+Qv;aKhq%V>sq8(~DPk-om7sjEYjKwPCWX&vm47u%sRL=K!2WnLn zklMTr8sqeTkW6 z+`e;~^4q77dTu>Z;fT&JwCvGn~F04X#m`4w~N~V1vqR7{e<`e5zdx;PNKk zX-Bcg1Ha{SJ#ei|P67#^onGfagu*Xc>I4Mx>xv75jX-@)6g6692FB28>L)2$o4>rLaq<)a0Fd0@N>){ZjZNMmb8 zr3L6Ch$waZRpcP*zW7hHSVy# zL)KD*ytz+x<$jC^%X4(i0&ibV0TVpQV4HZjz{I>-+PA1J8C%Pn#Jy9dOg%lA8L_W6 zf_Y&Y%WhG9)V&L$+d96danHQZV0)Yq<%g?f=aG{P=!a_T_lp430QI*OB;C1v3;ZZb zzEx`tCb$tI4z3J2cY@6tch5#>gQO}Pi8wa<4d9!)yK&b<{7S{RF0m~AS=-9w5Ld+? zet|#XbB_lr6{$CC*QbM2CFF-utZKXiyL1!zXp}zLv7G~gH+^QV{23819;00cfPK?7 zfy67=(<9!WXRjsM@DvK1_n3#)mem1plVnbd+z8$L%1cx-RLP+YwW{O(0d)VI?lD)} z3;o1D&|u$4q?bhi?|;HqyN`*T85|mSSQRCoSIjlz#Zp*#IZBcig00cEa8UGlMnVKX zK@Gj?TM!UZ=Bev#Sma$~Pk^nksc{6}EN!$oK+H_6CgdYkb{={)(r|Tpx_i+tvlDtj z+xWpoV?7z~{Tyk{jJ~Bn6u<%(M{x-DW$3 zB#J7B>L%@I_XOJC7G2m)k{j_~H^+z_CF>Rz(SPo|hrOB3(v>OpP0?P)!;*5wd6;&k zbDmQCM^w73!WF%>c}m91!LL0+SnF~6l^WM&bYj`m4KV|`vO9@fMW-?e)vPW%$|lLe zyv!?ozjH?{JBg%|sl^b@QYVc*`!H)4eoD;km1N$oD~Sb+lkfAY{>cSs{vo zQU)3uSE5e{bG_I`_ufy<2nw5?{eJFd1Sy^aSP9Y&7ZoznVY*=kXvC1R6WdDFK%(Cq zbv1V(@)NdU5aOP-t*L3@wa;e1Me!@fA+FAM6{g?)%Va# zJshvkT8Rsu6CeSoEG=vr<0UnlAU<95tm0p>sF|PvNZF%5=tXB=AS^8Kx@K4wVu^ zy%BT#myDGg0`xAa@RkWCF3@vCf{TG0G4VY8b1AJZd6X249E8afC9Nvu1;VmDfUfi> z9+`6na0sYk$5uh~XmH=&vVn8|K>du= z-~Dv$*k-3G4ebLFPK_%Zzlvqg#P$gimDp$dcbQZzcw{?putQI|6k@M0ChvL;k~!Q=8#= zD&h6p?ye5pFhlf&hijn2!dq%nG3oU;s;08)N81;-X**Kf_+Wunq#LqU#NFI`k{NEMct zCsjCQ6jstbKC7vk6+4)BR5XK({vs!;(2EIIm3L5_k4TCAlb4viA-m4vG+`AyL>7Nk zQ$NLNdIC31jot8xgD-B`+h6i|2aH+K{1KIo7BnA6uVTg(;z@6Z!zvf+3?n<(GjmD{ z($NRE`^ZC>>c2L_m8ErZ@w=4`k~no|K3GOquJHDO8MboFNw&r`i4YNa09d};sCSG7 z1XQawb`%o`c!`SI5mtjPuTaty*&@@_E5pNsm!Nev8b(nvYDTJAA^WW%A?i(&f_{YLe#i{|JWY6OG z0lf8yMUWx$bjKOz@>8B68-x*OS_V7H7F?{rtD9B$o_x%2I%LD?i@R+`hNk%`*dFae z1sK7N6O1EEVA`Hvl|RcssW^b|ObsTMBv-M>n|fsIT}n?m56cn;};l zRpcY&O6H%b9`dfd!A;IXf+{6nl^|ajhs+LYJTxaxoHscj6M|50K=G+~Glgj)X? zFpNlL_^+EJMwHao(J)D%j<^BVa%TDH_BSIzeoa{oIrTt|y{e|j|I^3A$(UPNFMb#w z)h5P1%m(TYjzUEZbl*r3q+smoqI!l6P8ewIu$oKOVtJBQ=1)lQaYX8QQr<=4KU-Sh^DJq@N z#-a5t9kn9zfu~K#ZMjlTv#u96qJZqct&fck)L9gsZ?_uO){at@*S|e{5-=Oj`8ZV4 zT?E-PuC;;>5=CPX3^&hk*+=|x7S|outEtkv!5m?(j$N!Bi=+I9NrN5CE{z}UImTwBK5_vHC|7ktDOd)q@-+rDjOjb#{+Px((4?+ z^chHU)6P83J;|^9Ip>87Vh?*J4@xeq)`0th)7mpR>e2o$iVhs4ZU?I*wk$fD`k=ewo~h-1-OD-4wJuq%0j$nkKm+EgQJl&PnOi58~QIDGCN>kbPgu z343~LrA?Bs3Gq?YIeGdy2pDf7cTHCX6CS>@Ao{7NM!S!??z>L3C1jkhtNm~xF5u@v zT_@}1cIt*@BNq)omi_G0Uw{Tpp>IM$D3kI3K_D<8HrwZ}$Z9uV7U{02&rivKqbq!hlvVgLX zC<}%ptQ%sr7K^wf(^qrOHc@gfsRwAfOgytC4Aa#4ZBhW;_Voq@8Hu8AA~{1zNLL;4 zr>VaEE|Dqq4if+a*QGRzz7H!klu6nST3ksu@R9bDEa|d_?tAj{ zO{0)7Az7b=GNz%DkqQs59ye+T&uqnYlWo(a40DEsF0i_6fpRNDe?N!9;4DuoWFQ9F zy;QQca}^FxZ}W#wHh`)k_1fl5=gG=aJ9sVoEN^)^_&n-bQjvWw?DNQ{f;hFfbR@q4 zcmt&cmfg~*xp&TKlhB!8KZyh`R3}npx%~4=gwz@ZwUtJKu(o9v;_DQyqHtCJ{LfMw zRq=$ZcsSV0sk<>Q;*|ej2sFR(xvq1og7dUgdz&L;xk7K(!n|Qq6ZZG)0N;YnlC2F& z0>!zV@MSmixxlh$08#7qS^!`DF6n;Jkz z^5>c85t9EOnE=F68Qa{kOVLT>Sl6U-_YSc4rp11Q1BNB419`MogD@3j5)us2@NeM1 zM_4F2Nj+*rWr{pWuk9GWX^+~-(-DHRe` z2ee|qBU+4Q?}0S)N~BybET^N-`48dv710vxS%UM=mZxh;tHr#{41~sOg`)ch_;QAA zPpCWI9fF(`J4jz?iq=oyRz@iK9XLY{vP7KA*I&EU`5zTj)EdRrXiv0WioO%&^bIq8 zWC`qVM3K@8>1d|Q{d39Q5pYQPzIPI!#->Vk?395GeOvcM3%5gNA=_GTCLIypB zZT?hD6npu_pzk(y>1rkEJ-f64B>F_=asSh>Mq8ydiB!|)`l->@6Ah|c;MUCQ6X^75 z!o?_0z;?@YQ%HL@&SS>?Uz=Ybsx=2gK7CVV4F2w8GuA68%jOq{v_4(re1G~2_epOf z(s*=wTaM;M3j{9e6>g>NbsaH;G)iw|0s-fu z3EV0!`e4t`Z~sO14=qkTI+e$;ltN1sc;^=Q_YmT;O398S9E8M(!TD*(M$3(_;VERD zie!4uem1ZM0R+264sF@Z6OFk+&bWh=G`pP-kcR$z}vlH3sY zfdq_a^_k9Fcamb1{<(j#=<+yNqkFITmgM*GAU92GomLE6M&;8;zs3*GO%l+Uncxff z*}p9mAQDh}tSIAt98P3a#I^6!0l%6U{-r1PBO@ZN>}P%=qvSMdHHlPfi?YMEv^ zscO)_6tlPiOA3m-cOd`5&ju8E8LN@D-AX4_K0yQDiP|`%XJ;QaoqV4Ugp=o%B zt|4hANf;oA$hS-Pnl3Qkm=?ezyq;zM0^^A=?r9OqIHunb;~rL40k-8s-5|27 z4`*t=2vt797-8_XauE2l6T3zG|;b`vZ#0(&HT1bax=+D&0quw6!9~HI=Q-YGZ8{B+&@LTt9@Sk%B9cZ#_fX=L2%&$ zLwMcjCc$spA;#U25EJ6ZWUFLuiXuhdlEU*s87lhIRlUk|Dyo2);qa4r-(nQb!;F<% z1eG~(?vG>bMMG-4_Ym6=G`(MKT+sJ$FtVgmuZ;6#2-mvm+tJL=4=g(7C9Gmu#^x(5 z+|stiq@)5Di#2O(ng(q5@0xK|cuxz(Cpfx-ieF_I=3yDct;7=WP;pR^u`aSRmIoXP zrg#Fe{|3c5Hn8C9?1 zA=bC$R?LQa>$zQ2!-YcYpHG4C=~++9zTr>04mQWVq#sC^FF2D+QOpqWdSp#faxit= zZ#Afrx=e$1FsgU}S4FwyIrR-f1AlaG-hH?Sa_AjAQ@&;-IGozGKkh1-V*kRWW5|jO zEko=$WE#--J|98d7V&A%T{w6JgRtgJP{f91kUZ_wH^rm#$Zw6~ULi>y<4cmZ6Z|?b zx<8lY$(ajtP_ zdI@FO+*6n@Md16i;p^)J))Nze_zFH=t9r3t5lEaW2oD}~R-D<&9_mbc`;*v@aErMa zXAi@;T)+vyyR{_M)2u5!NY%^nE^zJ{(-yyVD|0 zA?7-$&Tdbfj6(TZP@q7VZiKZK53;X`juk9A%w0EJ>NwW9kNxurk*tiQa4Fi(w)e2Y zJEh!Cs%tkYZLqB=xabf*kV;w&UepV&zuh z32g?uZyg2GMAdAR46TiR@&aMHQQTnvM91#Ev#|W;Agj7%|EcO9#NiP72dC69>{AV7 zd=B93BK8g8_+B3;dE@Vj+Hmc-9|Iu`=)PQ!@N91_-5~-eYa(POfgY9C^-`bG&mR}H zdDJ;g>TpRCJ^(@vWFHCtN%lmU}Q?bz7-fZ`F&qnHoqc&ksBG%^M}X{E0o8_Q-}@6q*8?)O1jurf{9YVu~S- zl2qz7XZ(SQUxn?^ez3&0l5^Ijy{Ys%!cwK%C0T+ACedg-f;3Jz)w2ZeXt{EsFt>6g zA7e|wEtJH*twGOjutIn(ms2EyYdKeb%;k4EaDNmWug5xc$;#~q7-*;Y%6Bn&fwVQUeq#8y zMcyY#>FG$Mdt84eYg4jo94Vd5Ko49NAqXlhNq!1dgCW=aaIPb#hjC&G{mC*PhkGwU zco*%%y6JC+`(%(F2IEapj?tA~LTVY#{(gU3YgUsXqJgXL#AS=w2&GuiRKjFB{~{i~ zENjV?l{4f^S#wCjTcn)HQ!W3I;5w^7QP_IYBlB4`DetevuS(vNxmm3e|Lv-qpER8| zY0cp|^x45qoD%4~=ZkD{N#NV@VcHN$k)$= zFq<1>g3}F~b~&RMOUI+N9F;}74gleCh(sO%d0jKVc}??2H7`!jl&3RG^{{ZwL{d8V z>%|}c@Z&`rm$h@g)uV`iA;57%-E|)h!H*SyH(O{ohl*#zq!Flhx{Khaal~bN)5ZSXkcY^WOJD0_c&x zCsnptwqVLaa*t7h?fayHie0knJ-aV8{bXT=IHzOXn5{x^Q>>U^7JvPff9mt=z%hK* zfZY_Av&+xS*+R+->b5y-teZ|b+eC=ZaMzqdxeygN_QCZP0w zOR2MhlI&@p)4o)V6)iPrCvU>D+$z4k{a^wDx#PmSSnu>mlfO^L)*0pwHYq}{y=rY^ zG_N;WU_Ff`r$E7ht3Z}6spDb4@fYScv^Tv15w%H;8odq)@S4CbL7XZp?1`*wui~BK zwf^_9BY_N5e5V)P{`))0iQ1Y5J|wKoHu?tP?VlOBTBLP8#9xT5un&KoTvYu30Z8*0 zhUet>ncF0Y4))f3;KQ-|{2t{2LqPt)(|rG1(#mTg-Cob>Y^*UWsan!k0aFuA#=Z#T zrbTsP198xky*CwlWr{BN*bH=tc{H+0Wc<$e(iJ5T^;Z3NAcKA95JTe&e%4#H=qZy| zsq<;DD+KDQx^Vr)eZ4k=NgI+V+JKb$?(9pIl#^?uQh+Ok4c}!53rv8L+UP=_^|*(- zB|e@jr9R)BbVrOlP)X_&!St5NJ-V`PgLcUO3w+G`>8L|ZU;!=?x z{86X;DNkWNNp`7Ide83wA}fCr&vl8B%xkl>&NERa(^z81P3o@16VJ%lWk#mZ00(Q; zgbuvk3FJ^d*OD3O?pkl>c@LQ3j{xLqsQo;X%@pZb5NhEHIX^|FYrs18en7H)4v3du_syc zoS)@Qn&%Nbt*oH2Xb*KQM>K9#W8*s8vD@I|@$&T-3+`AVi?CoUAzyhMT)r;dN*~t0 zSaoE(3a^hA3{MUa{xaNmb@bSThvIr)SBoa>;4j4{gVrrwnH(sPGnKuHV7N-^NHzX=Hcd(K(@h-Gw7bu+W@$ley! z$(J9!NWHEpOlwZnXt{y3B3+bK7J&x%p>-mO=^*zQqH?HJ3}wNzw_QHj;bc2XCPIOo zN?2hWe6Ui?H!ESvHh%qjklQ9zttL)A-a&uh8jk+5fG@?l8x(ww5zSn>;S0GR4pOvN zLD#@Dm0G6F!aMkxA4{%Uw zUH5|PS)Qjt#;m)rSI;@j+-pCkHir^PZ?H;`RtXNoKJX}zpPVdS?jh~XKyo41>cFg- zP{L7EOzMr#1+hfqinnZTpc}Ju;9zdxc`}ncIN}LgmF^!}|8LoIPS4o#L4=)O)yg@~ zsUfl0ME8PGw1Zv~U2q+QP;Yv1@us)bjseLg@`_ZpqxL&9S815MY3^EUSoP}{l4^WH zxo~i!Jf-wADRoWlC1zpL(UW2qXUG`a<&^dkfB?{{RXPoX>n|Ox5_cwpJ^l@Kn3e3SDF4Fs zhBiLCe~6Q;jqolyeUPz!cykErP^<*tJ!<{Pq zINo<&f9ERs1U~FgA>z^|Cq8IU_7p|bI~A zUeOto|%VHNLR{G;aX^KLEhxGoeY3>$E$yrkhups=%$b4O0zphNG1osX<&S z0r%d{K99(mk=1^1>os*k3+!h8%to5-KA_e=wDUzxgp7-hzi!h}yHjo-E$qx>HWUkf z7m`2x_CN-!$I(VSnlHZ`vq&luSOl86UW#DglPbB>Pc2NK?hi9^pOG8#aDD3 zuodAkN4LK&ULH$@Hyf<`8%$woF4)5KRv|t^qz5;4h;lST7c1@w(v#+0<#@Vy+brA7 zzBMsBhDx%Z@#C8thoGh7qdN)09h_tZLov~hQg zrxm$bY^%6hl6-BDP3m{{ljj3%=-0Pc@69-#h&+$dDp&v;xG4 zw^cG9cYko?|6DT+K9@4}x1XSb7Ny`m&>Q9=Q^L9=Ft}*H&$PIj5aYVBCqV zaIG90&s`@UT*8Pn1Ju`k%f(_`{gGkjh5^|xM)diw#g)b-DMl$QSAQkpi-MHxxx2@0 zi`-@ZA??dH#`e+W=Oc<4thXlQMOs54^`(G>*}lJpFacz&s~W%ew9Ln{NSMT4CsbAC zr$@|95F2NApF=44?7lJo*tc+Na(OSGa}){)c?Q({^kTAwXzZTgfkCzJ{hL3P2y%ZN z3%6;|0hm^=^NE^zWqw3R@r7%nsSHimAA7cIi8}*_$(2?j->8t9KiEW!lR8hq47pmj zXeV|Ad4?lAz~U`8RkttJTAWMgCS%Be{ex^> zJ+)g6;sg}jhT6O97mZ>7gew)#b?W62R+TO#n2^-J9(P^;Hv< zlUnz+R^TUdJzQG!x2G1=NDMg&cc}Hr0rR`z9p&a_0?uf`wE4T9tz%H#8rSdJOR18>C+OpyQw0 z>MC4sd#ewq+@)=WDt!)%n1xV5JsGWh^xZda#JIz7O&Iy+pHm!acT~cCMCkRF8I*qd z&#TaD0p)3i>%Ar5QbPXD+KxC~v3wqTq%J~CEfff(yHP1w!j*T_CN29(14_u!&EdRS zzK3GTXY=jG@+Y19?tt`f98#Vh_%{zXdt2}WXjKn;0I;je1Ui^g8zqRZS8G;34IvA- zy|h(;lf)csczlF(!y!r@4h$P`z8N;s-bv9iU<-=6N_BQC;`j85$bGNLYic!JzpNR% zi4K1RA|y)Md6IgIo`6D*dF=k9f1H`{o_5IfY_yzU98w~b4B}Lh4Kz7+usgLDqsr9B zD5`sXJ@-;`&iv^g;%>|&I&ZCL)|({FF0PG|(=W$K3lJq0cg!2<$c!k9()^9L(O4RV(yZnjUrOSv}@w&>&f^_zOiPP(j$J?6a%PN zB0V;&;lrK;>jQ3DMhWG+1vIKE9h`e=&fsv^A?G4)b+Zowj{MPuOKDt$`{oB#+PyGm zmve;0m#%MOowC~F=cI)hg;AFN5ANbGJV$t6GIEgr&=KJv+DA})+ta+xS)a!FID9#p z4yo}o#$p|bo!#qiE|6q=5|pQTO&t!7g7UtV#A^n%pu|o+4z(93w))0a@Z&OnEhWKL z{he{!f7W`rNa*Kfc;B~Ly8y~H>%!WZA|f68b|lAequ8YH->wU;HR@G@@Xtlq;fTnO zowW9F+LUV|WseAhhY|`vE%+&Mh_eq)FWqw__|>ILCBdM%JtQfmm4~EBs|L!HZB@?< z$f>CJ`rfLQ9U!K3Z>O911)0OpZQ~iBFQ>q_lD#SVX&>iIiO5TVj*uk&!V&ViV8H&4 z$=o1*vYJ}mM{F2uKp;qPDS*CwB5k%Q&K`skr;c5=FLJuV1E^A~La5ufV&{u*M_p`Z zt_vXt!#thmVsFcp)`w=-N%^7SU{>Mp#iR4;f%#7YwQFTF@J`>^ueE_pcgO*d@m~4O z#u`%-c9igA^OqE=3GVYK;(8Qcz&3vt@CwcCk+t}Xj_>an)oWEoFpMHFFIrO>#)dv9 z>!DrbYdLX?AGi;g&(P2W$h`4SlmeVSaN2f+3gOVqC>Og}L2J}nn07nziBr3|4D$qO zRDmmZw2LAia+P7w&qNM}B8cax+r;RA0PCHeD!t2(tq7D3@5z3%$xZ7eiXm6pl{X|E zEc`)5mN3tM3)j3tC)FA7Jwl$*`MKtwO=%jJMJ-m%^o}={@&yZUIK~c-Le<1pv-ptj zlbqftc`U^(@A=g^NyG423(bv1JkUDX%x1vybp?P@dyQyP0pSUh{-F?1-mnifQ<(+x zp=^tshwG6n3!jDt@31ty;ugz!HR@I^cK{SLx#~|s*8%gJTd#&Q;0gdBGooqLSM`DQ zF|dxg_uJuf`u^!pOoR4Tfq1(l-?A4@nain$2urMhYQ=lNA67lIOJgF*r8Y)&RkY!H zZ0UjXp}>#Mj#gm?v)=cxf9mB|l>e)EAccSM1LEWjl^3*edPw4{x*(gN%D}6(q7DzIwfH4*6ml#a3_v;! zLbZ-hkdE;?3SXL3Ma3?>$oaicw!BT(T^Rxx+7US8hYM770zaE3f0C?b2rW20+Ntft zPUU-pwNEK*RZ3Cy)TpK%N|I3Fg`g^pl#YL6v|Ipk#eiRZD)pd!y)G3Tai}NdFk$oF&R=YZl%E#6pWM$#Ly$J?>Q}{mFQOleNmzgf^{&te@*Avfj#5%3!r1qP zG=aVf@4WKf^5_Xa4m=st$3=+6NSNGzd#Iy8!@LR!Ox;-XSrbIU& zxWFqyGF#CCX_{~e?BD8LB7V0h;1My!xNWxbWD4bwNkgWU48W9D#qhRx!cMEyfCWau zXK)aymD1Z4)SfC+nw=1`0M1cMDhw)`lbu-PlC8~1&fC7PBOp6NZoQY!+v)J9e5bLF zt*s#7Ah0KSH6P>Y+C0@yOlVmDr35-FIFKJt+SAd>6loJv4$0J5 zgoFcSRI3BF6TC<>_VHD?2POlc`C}az)Gy+0E0rM}++>p2LJQg`MieR{9!woSlN1)= zqNPhiG)B!-yrcwh0NZGdWL3Jlt|KvhGR-{%;vXf<5-sqKSb;tp)F3Q=cPwFe3Q-%$ z^e!SF5YH!RgH6Y{Mwtg4F=5&(~Q%_==1DtJdici*(Je zmS`uMpl{9Kx+^~cr^#2U*`B!dL%Vu0jhEDfvvsZ!>~c}%Uc%QAf674Ii2bUg0&imP zkPira3Gp>Wg~#@A2M;2-TpA#P_-h=21*&|^#M5CoG9`rPPeug<-NSNi3WDHgaeq57 z)&)xGf%;&j#|>sfvzimGpjTh4YTC{Zp5j1&MR|Q14ktt$TAbkLtm}y z2cwMB)s|j4R1wRgOx%1`podriI=fwcBp+lDIZwsDUni~y?WY%e>x7TOF`nO4zz z-fY1m6R|5dEwsGE6NHpc`C@ZEEDM?~5D<@h9gFm~ef3`SfFYX#-}lC21#8H1JC61A z_}iTFPh-kbL(^tFs%rYQST~ioE>?jv3%*?35|+PaL@s9oQ)T_+@!PEX5d{rkV3?Ql9`$W_R&yKoN7MvxYo zoo22^%&TZ{U*&Q#d#?Ehzh3TKpYZ{frpXicrS--g_D~MqGE_T zEBuAXi%WErdT?0on-nk2&g!W>63W&4gw`pxNEBrMRIz=BN;ZEamc*Srh>~1 zQw9TZQ{s<5tI%e$i<{LA7Pd`{UXV6sVOke)<6;;tD<^2+tSj;7O#_T+dYx-RR5wlO z@k<-%p1p%^ipax452r_pZ6tzD(ArZtVB>Lk10oi9GdC==Rd(Y#0yT`xSZFLo`Vk+- z7cWePbq8DD(pD_)mCQ}Hl+Pza_8doYFt^#3ZO7!Up`pFybjMDN!>~0mkH}BIz98s$ z%l`uu9Fv=izD)}ugQH{wQmltpzI=-QM9d*;AzyO`Fa0FViVr;X(4t({A;h3j5b z<@*i}a9K$Y!BNF)yZ{JFq2SwYu#x7`8sEATMz(v=@kkCscz$L-t&T}x*U*Wg(W6>| zTIytt2>EmVErI%+2)CHUI>$642leee?R;MMEwInLJ2M<_(KH=h#ngQJ_PH(d#tWa!Gdt*|Fx1xU(SrYVWijf74;7bsOPn)419K>X; zIgHKOA~(ZRSZg8FAQK!dUiBZ8dDN#*#HN(L`ju2slBXdOD)o{tI`8bO#u5!+H5auK zOO2u%i-`{<$T>9yX=~xyLfMvvkZCb3G&H;&zBfXJ$|5Uj2B_DpL8IX*D z{?4Kn)p4^vfGjz|DGks-aT=4P$GPVYcIhU{-6R;m)Iop?H?qAA<|LL;gi^-{bPg_< z?hYOBT6?9|9owlFKpMHhr*cojD_}yhiiYf`SdykZjK; z2-&Q?e(I!?POVJ}SLUJ&~8m1uYXoZ$ps?|LpL92Uod_01Sv89W^8RRQDLd@0CvWm*vOKrNrT?tFukqZnvgg*lNqqg<@SfFEr%SBZ_et z$dm@vjafzQXkdJBjkrO2&07eb%adl%q;L^lP)bDFxS(KvlHzi*LF&lIhDDmhEz-G? zM}1ZUFm6FZwO!d@sv?EYdHueiBYH&p0=8kZ^!-!gj=i|Es;24^y#sL?Y{oLk zkw_S|Cl=b*>Hypl9z*mxQc8;SQ}wY%Vx_D0wjc``H(-k*qWscBnL>R2)}4$0MJINR z|D#fke%>NGNz>~u=-Z*TKjFx3WSLqF9u&E++&EjlN<+?zUIDN*VWLL_2Hzj@?t~#c z{rigcmsP1oppHrve^!%95NQc;u)V{%)|i%V+n@ZS(t_@UJ&@!P{hpb3&pv~9i@klz zIQU(UkuE<}?9_Pu7@P^Qp5J>R{GhEu7?<^W&#vcLLAZW<%n0OXIW?0fDy-Wj^tJ87lK$D}zgh%Zd zw$G*J5ypzK!8syLvS*@!PH6ZqeTQ{P%`CgU`b^q8im{WrS;uJuA9~iRi5>AK(Cg!4 z=bFf;LGY4yu#n2$xp>F)0JwdHYMeyUYQ>QGs-9ryMK=im(Ru;ZK%X}2XVds!MhP7| zw@(u^Z0n=?TlXi_Z_sI*@s&2AJ}n_R@$&Huz)|`m#a@sZOO6>k>>K#ucfotmXucWz zB#pNbNgfGiEp}W8Z=oeJWjYdU3<)~JNZYQ1@J+{YM$Clo@10=|`o#j5mfd^CKR_PW zJ+2?c;|lBivcUaUp2Q#cNu6(!$YH9uU;}yxapCval=FqOpG^Vr>2RLl9hMHhtDnq* zwz^)^y1|lV?EFE%#COF;4D599Yzo7eSr_GKx6>R0`Y=*vAF>+W?y?>IAo46tOdZKn za2xK!Q#2RW$Pa22(VpGBi6+u=_AKe419HRNx+r=GWC_nCU05VZ?GvhDndGCFy-k_J zWhkQ4Crn9Dsu`30b_QAXNFTo!RNxAGN#R)f8MER= zAR%*BAWK^ufwb4v*ePA%x|(&P;!oBv*T6mB3=X6bGfu4vwTk2|#(KmUyxdNGfS?}V z_zZm}pwogqo!e#x)@oOAB15H<#7oX^k zCgDS+$M6sL;O7sp4qw2S-h$f%Yi8o_DKv2vdmqOK%y>$-FUyojmpJ`LC}a`irw{g$ zfRFiLC{TLpWw)03*gZofI9O*hCfkku&)ClLlCR4)M-_4zpgy~mtpJO!={K6w_IW{)7L)x{rB zM!D2=IE$w0;BlgWL%l9%8dx2}>YhpeSP|Fc^Fi;|qV00Y)+~BHo!M8W(fjrhRUu-v z&Ohlv_-CsW5G#X_vBD`3J0ed*=G*xjHA;7lzYi%KY7P~o*{)RF!v>L8?YYY#+Cl9T)uWjykJDa^HKJ}9$UrRbpZjbahC*d0R%#Xe zF6z4U^+|o>sN7ab`>gncSelDKD%)IUOzN5vLD^YzjS%RX)%TD+$u^D!@6chFn7<)3 z_#KB@=qxbQ`F%{zuu?}KAxzRjYu@;Uk{CF__Xsg5SM1Mp1v**v;WgU;MWMT%+B6X- zL3bvr+6FaSd*#*AvJXN|pt)&fV{+(kluZ+VRZUCp>(066O1wU@^{o1?a5M3gS-`6DV)sEU^jxb1&eeb})nE8IpmlKi z3gJDy#~{lGDrZ}NM0e{DEVptMHhHbjsdHNg;mhq82G8tKjo@}{F;ui-x}!Id?hO?2zn zti3W$+cNnKD38FkG0043PUXK8jIMGz*1wx3M2{X2*BP_TX%4BT1u&3+LXztYrGGRD zr}+2ykQso+I$Mr@mCsoCmUQaMpFN(}%6_lfhj7D?sM_xQEJ%xxhoqg*|1=_uuNN?e zzV^`(tg{+3*JYE(30fiBHFBPNba9!?ZlM4ADusDi{9MJ@(jq@n?l`y^`#^8?JcT4? zizKV~lu_;!H+rtcykaz!yVk^synIrDtN&fc6F=pNmKvoc7YJe;)J12}(bm$itLk6O zVRAol5KG7TC}d;oA$3y!N<>JT3!3FP*6AM=2GJLt1cXe=2xu5d-}7jdIp^tvcET^2 z#-L}U*=F0qnt}j%MqniNl3mi12=Xv=An=%o2UPYkeIz@-Z^CbySKGpk6DTHOCcTZy ziSMz^+e^*b;F&#WtB%9|vnPZ6#jHQl!(KwF__!6BH(#`GlxEJu;JwTN7FtfOmQ%>^ z^Vty_-*a5H<`u~ArK)4Re)WC>gMiZv47ku&T97|Lyy}(Wy;WVO)8i@%(h3 zv71?;qSHtK`st%%7ig8s0A!_kBK^%#s+Bo$k69b=0J#NxYYxLeHCtCS5IqlQjkx?D zWSbfNk5;7@f!^!wdwAb~_vKiqHbiGI(D_eic6rlYD8exDxK(EfA6iVpcw-n7T(FfY zQNj)oJAH6xGJT4G!iAB$MD^|)T7Vx;##4#cpY!)dNh4Hhle*oNKG8YF$1B$_fC(?A zxx}Dn)5avSZl8hFS%^OEiWpEZ8SO0I>i2n#2uMxdv(a8(fvDyB7@Z+s^0d6W_t9_7 zIE635g+mT|sSfKl;KtnhY+g5aJf?sQY{v`=qHjY>c)y_WRA}}ZRcH;E(|Mj4l*sSw7f@VwxY?9MtFzQw~ zKab5&oTE9sYReFv@r%GWtb;M`wAZSNWpG&_x2V_H7i>2<&mI!2d1fgmGPp(z)|h&|1P|my~`rzg4SJ)Zw;RL0}@G>RdJFke?NEOy1e?$ zW#IK;{ULs6m2gk4vS7Ihg$h+j4^A56S@m3$bk`{Ki|3xQy@5q@Ksi@XrM?GdXSbrO zIyAQ51LKu<>t|DMtXv@ar>5UI+e9jn=T zLmO0DJB|QvG);DN;OJnKxqF0+M)>Fi=$oZSMx=tz@Cvv-OhgQ;L@7|B9+_5TAvKfe zq>m76P;uV4%+<{=D8Y^pVYC9A& z*Lfx~+(&Q(IOce4Q%_)q((#g0XdMRK&E;!8uAXCq`2oN+70t|$2kWI*+luyk;luF- z%k!l*-B(u19S!6E%D(ksWp3=CS8x@R4+`Pa>PCS&<_`TteQbi+xhW@Jo+|lg7sTEU6jnTIU+s|5rs?OSr=lz;*`%4wEWq zby;mP)?d^E#d3LLK9}&RXWo99t(`O#V`A6MXGClDl6n!xx>bMX-I>{*yy_hl^U;j>gi;X7vGkQE=CVPmkeZ(p|V6*p*tVBsFt zOZ;H)zacP`H0(T$q6kYmmL?@St;8^+$;9TI&vqPAJnK>c_d#Bnq8IyD1I9OWmJa~z zz{~!|aXx9erEn0WD=v>icmWOdJE(nC&edwhHZwQA>t&BipUTpnF}S)oc3z$aC_k z70!$wfioxRM0O$=4C5Nq8=np+1VhD#20L%QSOU1h(e{M=5&{Z&9|u7C73pzr9>J*% zuNruO{=eyTSf-IKuOy zLQ%Dd)^zDaH24$L_=z!ry3*&Bvv$gKS~%tLpu;hL;$bp@hw&b6nB462rlIrUdoNYVfxUVsbhbfR#+T z1^s5QCr-QIqh+kc;ut8byj=t`w9F|_K+MJYHlTKm221EwHdB*=&2!TZqbBwsJCLxV zv6hHoKcYQ1(bps?0n)tIl(YiL#x7Jvud&}@mIhQTxkGccx+CgLtQxqLd zisK>7G|vA@V#u|>lWb^PI6$#mR35;A6Lyp2^Zu#+wKS&1hF=c|gV-fmX0Q1?Up$sH zOBc&N-~_A4v4NBg>k>bgaclxK9j)CTCJ#GW`w0E1MX(Z zk;PGSxs=cFzgAOjN49|x1gc?vPq=!7#`G|!b&K! zyWw_j(8f;hwEm9A|Ln1NWV>*gQFQpi+9$S19K!XmE*z5ZOr(m68Ng&F5o5t z(kfndJjgO9@oz` zQpa}*3Loj#$8d;^vA(jUrpuOaN^S?g(EKvi9JMf?dp~hE$Zk>qYdII)cSV}8n4;Q@ zpd!1WOjdI$j-sy9r2o|?X0*^Bs4D9*PaJfThej6my}u3n?^WzL7mzK(4dW9s(3X!MQY$OoW)!V5)Y_xZniC2{*uO2$g*LFw^hHrDRL{v!$EX zwhiZ~UCZ5$yrP(q$yVkLaX4%o`n$uU0lZ{#JRf}bb_x%!L1)ES1ArV<6ejeIrvfC# zMTnKm$4^{YlhR7! zfN%X%;M{=p(;AFr_>VdRac^5OFLOp2mq$#YW(iTBrJbm8TB-7=O9ZItD!#H(ZbT(q zo_S?J_(fTon5IoqifAU?$eFQZ_3z|-`CT(jYZ4tXn*?<`_-d>iMRFPy-M2GnyWkaT zLpAt>Z+t;-YH^=WPwhBHLU0ZnzYkb8k0x(Vw&(aYF7$SLhdk8%AH^)J8iF47q4L<( zgq)_+dIZqNq6K%v?X)MOpgef_zPd|*)%$^C=8(5}EjTPS@QhTT3c+>NMLW5AFR2 z`R$X^;;LvE8fh=0(rE~f3MM!Mv;Y0@;52t|D3-|gQ1ZJFHgDX(E%B25=mY9hv-{Yj zw#y}({aTPDud=^}X+%j!?2i%FG*J{9hCu8vNhc!tfijX%L695nt+7&`>&DN&1ODAR z+Lm}u57xMsO?!G~EF|W9*`q2X{rK1yuG_@WMg>qaOez)GR|@_eax0?3IHK1-3S={X zsHutr^?6;}cIy-?%e(g_kD8qNuMSrl;PIS=H&!~Up^YC-iCU9yV{7y7-84NPn%ek2cu!<_XF?xWm`vgjQaJd;$Csx0f!h!gM6R`*d zwG-d-TZu2aV09(_7$2UBSbLbyyyrgkn3GzYJ-g*F!j$L9@MTZREl1Na8nz+9+@v|ZY{e7lj5q>GtkaJ{3KhJ zuL0eO-f}c_Z#ElAsPUj0weCU3p;8x^0Q`mkT<5ax`$ehS0XFd9EQ86xlCVGbjXb&_ z(`+hBd7K051Ok7qi@Xe1&9B$-R z#$nN(=&6n=RTVpW{E!e#Fsdy6JrrGiR7t=1{kd{k*RyF~gMK;<@C563Q9bHEqo^HF z<<9BfIhJk$RjFvh!q)V0$-N5qnPqmsulkVhQc9^r-ng-Lj>Q3%ij)%68`W3C%wa$n z%a)E2V$Xqw#0O0tkHa^~By>~ICNj*lZLyCGbjQOEsr=YRh;uCQIk{Z?Fs$`%bmkFo zt9(zNnrzQ#ZXu{H^JYU$(fr404cJlWjl(lM{?)lqR3ic@#V>{PY8$2EWA-EktQ3pi zc}&PRlL*)0PC3v0$v~@$oJP$j=WJszoJxh@NmKwp0$QJ;1INy3-0XiFCL820l)&Yj zgBf7{y1B58xInZ|U_1{D!SdWUj&h=>h@6U^UMnmqM_IkFfE z9b_qR?z9uwuUd)g-l9M|P3@k*#;Z9->%gh`vn3^`Oie#u)~r0+h@i%esMDC zS7qx+Q0?&qm`*$7e8K2qw;<3Qq>f&bV8w0`FEYGYXq3xi@xgv4|SL)aZzh`5IV#BCJhqXEDuz*|u5YHOvq`gI+@F_a{zm+E6TqU!)0r zw~;qJhF|7&y!0t?B80T8lOUUv5R6$D+l}1;wc2!9uFWZewpQ8}dq{F_?yxT!t7G~> zS|~R@*0EF5^qB!lu`0fXk=t!M1UbFX8iuQXj(;dH$5PK_3Edy z>uRIgEPZ~dv+&?YP&9Q@))Ow1+y)VBG&)I;U)c{vvr|-=e=bb(%NW6&eAom7ua-f& z8AZ}d?|b6-a0)Y(8^%MQ8xS6;F5=EhJe}!;|%W1*Nnv&$q?S?BO#?9g; z)Bp-ohSFa}m)Z(7BgOv=`WiS0j0s_T^)!^{w|`?-OZ@dL*c^0DKAc2bdNIlc$%3cJ z>HlWa7-E;~VFs+42hb>ba#yOod9_=K>YA8JikM6k;F2L)-scNGmeOm*E@k73T5-y0BOQ|oeKhIzQv`Gn5TpzEJS#( z5GjK9a+0|mLXu;@G{=Vol$~E99J%HO+%6LBP?m(2k<7y`%5m=|&`}@38CXLp&;4b& zJhQD|>2X`JkL-qZRG);Yz+M_$`;{hS67lopQebYo<~Kv?;OQR>FwRRk1|`v)ws7*e zGH43to>^Lm5f5#i;)dmK_aJyKc>Uv)PM$BHSXEC?H6H#c+&g=fhtqel#?r9dB%ux6 zoxlSaP}|-_{6huGLb=Nsv_}jr+j3)7%0>r*HqFsCFE^ zBN4e3U?CV$YtcdCUd~cR%g$&iP78Rp6)>GKjXu=?fX6uP++Wb^(+zhnLWplLhkkrp zGW2gsr$0<14+@B}j!jqhI8jVR@W-dSq=z_jR|!J2*?e>HZW>YR}LTSQ$_L5_C7+5 z$z)&`o*pY&7*^I%0fo&ZCb52*g~Im8LW*RQFvs2=^<0mK!qZx##`ha|ABA`SbtH$T zEOl23+xfISHNwHSgg|DkAemE^NtUx6NC<#+@xEj)C3)aO1po{}ZpdA#*x*ekuDn0H zfKS+n7>i@r`Jg47;R_oNM7?;JzQQw|?A02qOk|i;(~TaXdo=Byceecs@G<$Va*nE2vjeF*HbmjXv^K}v$01VP+(;m^qxx94cErW1&HoGh?g zp=Mwi3WbKKYKX34v<-U*hs%sPkUL!KPsJ(UYrp6RQy0A&(wP^bJxQ&A+4Uwu{?h4o zCbIkBw&ueiTt@fzS;cXr0$@j=DQ2+V`Q(koX$T%_J!r|x_dacr{XaV@kU#Bslyz}g z`03fo$Yb~_VqYHTrE7r)!t|>%w>?BmJngf# z?L*pdIQqW%hn&mj%t{`|DzG+KwKt?K<7GmS^FC63OjH-m?`T;YMunDDB7<|LPakaa zKuT-H`hKcEh{r=Z>ndLHz#^nOrVoVXZ;c1Cww15?=rc)kOraSEP9=?|r6QYvTGO0X zt~s<9AZ+;?(j;W>Lh9ilY!=Bt#;619V(d=TjeTZ?QMIY&Pg24RR*nQ=>?pJvu-5k} zfR@5>Ur-ei-HqthJ@67_HK$tMkdeK?Tpdi1olF?1+s(EM@&6fU$GBBux_pz4eY+O^ ziYZ*Zw+E-45w>wx(nR{BNBnrf%sNM)P+&)-@Lw(6v!y$+1UHyVaCC@y&{EAeSK-dn z`t}|)qhb{8&!|7P;i6AW=W=Hr6Su#$#02$gvovJS>(Cvjkfi)?kSLV zX(%EU6 z9{JhCQg1ayRvYk>s)rsdCo!vL5(at`@XiMY>SajRo1n3Yzq&vU;IXVTrfb*==)qej z^!cN6Jv>33nO>(-n68tj=z7gCUci)dEF&; zpF&Mr4w8zd9?S(DsSY704yA^-xml*%{GT;-kPlH-%nmlPs49t?B3W>;C7tF?R1UKq z=TP3-1K_roPz*U4akZArV1C}+2pguGrkJ`<+<8(r0Q$2ZBVe`x?01Enp z0Ih3=)=9z95lb#|@M6y2v-e?UBXK<&{nTiG*SkljEb0{Twf!3U6O_(xUZ=6J68JLN z;6G~*>dSa%(sXAI;w7R<;WT{9PKlQ|K#rpF29zK5&P~OOCDJ!Zhws&I?9_8#W}YW0 zTrhE^k6n?DR#bmbhP49=K!^_6ODgifJ%eLu%ZRHIfbdNN2*0$#IcSh(It3%dx4qykJHIBD|~gjgZu=MBF2CJ3mWrYb6sW(D(0W&7@j zh|C%HmUB@rI#D02x-!$CxRPy%MSzA|sC@OSDvv&PQo`;U5Bj|uuo6jO0+>3a!8kuV z5b3mbi3Q8vnu;TIocnU|<{y_gp%}qBgg^w<_F|d-%aqm&sbMk&6MVuGVxl=XEDJVf!fu9o7xl6}%gIf0)_KS#x_+WxNriZohTs z)BrMsBE+WsyF{)|516@}D#t_2y2$6=*5b>IL2nNFH z5*U%{Zd}jE7bjS`F|}F?l3jeUps%T&_XkY={-AlEkEr&W)EfmDhv*djYVI@*Xb*S0 z$Ev8ATX#+_wrB4i2JIubZhS6I4!;a$z$*>{r@MhMq~IJAIN_g-enusmc&nDWOjtmN z-6uV|_%eo5*|Q(rUB1Ae>%(VY)oXe0oi9%`UHP0bXpn)*0rSi`W7kiyEO}wz`D#pX z6eb+r=Q&SvdZ(X}zqoIOMlM+Z?Vz%I_Kb`Oho``YM?SKw>4f6zSK9mi+)-Emgd!O` zuT!;fOj_H!;oRRL|6dR*LOZQh`rCN13s}d18u|kQ`f%CvO9he7r}-b1$ONwENqUTS z_sh`eSk>mRg~}{(?yMz3=)`2o1UV3(GW?c#w_`uAaxW%4<-#qk9F#SuKZRPXkYKET z6qbt&bI5Ut{N_1lGYE;*=xY2SYEWS}+x__Gb?_gGNokVQIz&u-TW2bIAj3TXBCj%V6% z9)~BDI@9pJs8CyTUI>&kS9YhxQxg13LsVo_)tAtJN=%giJwo)Gb5)}Is zcK@JpN^dDSHLDmV)Xvqi%a?e^VJp4Vu;@k3FOd zRNBH=YFCK-tXYCBZlTo>dkQ0N)MkD;0*~s_W`~^o!*n504G$%&h6K8>R1v3rJTd7# z(L}I$BxRY?7}BzltCAq~Jo$$V_tH5hUM4@h`r6g|x6BI06WuI+;Y9-rkYy6g%qWCT zqSYm-;RUli@*#T6pZqp+y`=j>hRigohOzNp@2eHKmt^*jK_uSUvly_}r)Rq4gtO$0 zGlDC53PmiH2%I+X1cq1!<~(IxFXkyFPpbg`KLEg4jLO0%sg`eXTS~Y4k4B~tS$PSZ ztHm~H9O1Pkmm|@NE`d&tyr8or+0d$`$@huFxo#u5C_nAaQ(|EzjG2WUAAQ9LlpcOU z8vggI)l-9);#1LZF*C60_#hNZb0VU2@ykgz+4T68hMKB+DQ(0bpMs^dSfN_ATUEZt zO}(Y&d!gB_8(V>xG1OiF;z^;zi0D3^bROjQWVeo;h+s@x#q%5RaZ_mCW zNGF8)=)E|ih}-0^w|ERkArtlo&8%!=0A|bjQEp!hXo=0lKS3CZXb*ZX$h`wby+}g9 zz#D;KcK2c|{k{WhUEf_uS*O^HE?zMe{N7v0qt+98Vq6EB*HLSl;kX1i+XHYP_ zh*}Ov7Bjart^OZXhLpdl{%R_!#*zrXwz>(=1}>&2Jv#t^#1XURN=cbx7Vw`w?i9V z@=RA#i&(a{6+E8g?IU~R5+4Rt{$jc0MI)jp+;|vl1?U8E6?{>8QaTBq#?WfNf9T}5 z%2Pz@y49*TCWe(+9=o^k(X)WSC*N5@2j8+%XXc1)R?Fo8v#mhdpi$~ZutZCcwr0yp zMr^2g@!+l!+d`%5@iBqL$H8lMY5kDLY!mKZ{)Y^d+`1|bJ6!-y-+c@qIAMibZRn~v zgb8SHum8ooN)`8Qz%c0P+FNW?Y>0m5bkg73g)oqQZt6PH!Jiz!9WlW1?%&+@r!4!- zq=)Qyy^vv+ai9}LC9TOOg{p+?q!VsG>{0^wc=(?AKsc_m_uPUE!Q=Hty`)0>jzQ1m z&R1LhM^C_<;#wr9)h~?@#Nd0@W*Cv${XcT{AxT(-L*Tjx)s@$ z^Hw5M#6_MFvKkNny>F5vpgr&)=aL~2esUOte+?FttU_^#6`sRE)S>^F?trM_{N-^F zkjG9GN&{^)v^(?;=laj?xm~G*dzrz4Fr(X0w9+XhPWzO&ly+${OUFs>FIAgt1Fq)Y z#YBGX%h$J-=<8zoWeIXM<%53|WueADng|nk`q?meJOK~S#Hg9 zeme`YL;=<$T>~OY*pM2Cj_a52=TA~JN-wZSi#^lGv8kV-?;*4cy5B}WR zt$WZb1=Vh3Ra8&}9h)!-rxB;+Cq+`zLjORI#&O;8+v{-B8CbPdZAFN=Wdu}?c^g(K zYeUsLvHA#C73CKq*AN{KRc9yej8^hED%{IuFD?j=@ma08n-S8s8-@>agG@{{y*o6o zp8vPkIffG4!{E4RtjKiu|1D5@L(6SmJ`H)-F4$x9X~~-GVV|C^kBpLJMP2#C$PGk@ z0t9@N1&Q7l?5Q0&Tn9wd0tml;7?z})S8dyVpsp(%od-t;LfH=ZAObhZ_?4g4@RYFS z5OS2Lz}wKS?EPFJ=KRJt*F_?H`8Zq#%Ryg0H4b30L&(Sqj0n^)swEg>;T7sDI|4A^ zKQ$LlSEDuuHnd!=;XdehkNEn|ya1{%9V{X+m4VPZH4cR_y0{D>6m( zP{TG?P!cJ}ghvVFMBpwBF-@ROFixFmHF0|aGDVx+o`E5XN2uNb!83^2cM!>h7HMZc zc>UBKI7~DtTM;Va<#qiNbwcFT!@uZ3yAvE-mOp4Q)O$Vy5kp)vOA$5OClHc>NmTZH zB4JE{xup(At3QsrBha?nt`UwnQDXT?Zw2UIaoCY{Bb^PoICka?dlyz3Y~R{U{12OY z!ZRtKuS_+;b8SaqSaSrZ3*P%Me2T%!!ic zwL3)9I1!Hl5^!ymFOx2W-V{+cmj*uP=UD6b5RQ@qkk;|ijl{!j_2B@riKikau#Ham zczfeV^GJ3P>2$W+ni0dold@up48Vg@7v*$F6of39z5KM`MggBrl|>=^d4&$6+{a^- zU*&r*uC2H!nYooxPe13$3;-$1EApgXuuJNXwRT4J8+zDu9Cc)R59q8`<-()H13;+d zC~7%`@4b|XImkzUf*A?*p%K_Tu~DKIf&6!vR3s>kS!_Cj=0jnUfDiR>r}D2Gki$NJe@NqrOvl<)Vfue z3|jJb)tk(bK3v=uTZ5Bt;>>?u^%*I{$y`54b5l6`bK zVRz>0zdVg%oZ+k_7VHYTiADe>tmOOf_F5H}*vZmq31pluZc;OuCJ9ySd ztvjz_ywvugZ_x~%RAP7>p$@D$zu*yZvk6Fa$rDY9tW!f}(sQ9^`Qb*y$Qb;aCPG{> zweR>c*ndTqk)-jv97h#RJluBu9uHGs1nKl@Y+tgKtc_A#J1)Ijzmz#bsnRMu%#0wW z3`C}1osKiZbhl2svJk)!aMLIam?7+ULO~-T{Y2`!`ftuu;TXdI1c|UVa5L*Kluy7s zN|E4}5cf}gZrkxZvMV=iiivt5FJRE`uUwr=S?6T1uZ4el_5eqaT0SDW^)Wp9nA|}r z%AYuBGMHRDNwc5;WhB%)rjSv@*Mae#N$`&7)219q&asJ2*Kw44Gc$RVy6jZ-*GXKz zwaVwxw=^z~&+bu&)HD6OA1&5buCOs?)G&5B?pLoukvi{jT+|T+xLvEwinE_2j|TUB z&@2;8fqAD`cinH-dbB6$8|`oZEfIPy%T}}C zMDxE6?m&h`cf#C&+|0Jp8zn1{j>|~U0p-EA%4l82$8|(M^Z%qAfv*NB?h=ol-YHV7 z!T6F@mAIY+J>S8ozLAdrL^Q_Dw1PS7lGJyHGzF6o2Sk~QlS*R;qs3$A^ZtoxY>yb& zZaguRF=R`&!*_VUA|KhZvfDC7Cy9XeLe22+O@3Mi{`gUylg}@?QB!S=u(U=GJVqFy-5R4I2LXXyVL?_pb z?AB+}dliy=MKQFf{>`Go_)sM=A=lmDtkr>rIBQ2;;W()*?k9G#y7~AltNz;gb%dqZ zY{*#CvcLA5``^c&W4jvSb_>qxEzMmN9jY*)SVcg_RnxFO$)|4OgCqnFOim;aM-o~T zfJB^T<9whWvT=fEGQ|G4j$p-O!2ei^5}f#tVwkN61$irrlt~b(Q7J#Kp;i;*FUgZp z+UdiWFb!L#4JNGy52bsN(&pi_Zy{K0(@nTGV4^CXkw1Z%)L$0lyG?uSyST5y>g!&fX{MKJZV0BY|63o)G2y9gyS=E&+ z7D1?AHoBm?@wHFA0ne*WH6Gs!!@&^M#L<vDy6T& zO*dDXEM{2evLae8Hm=e}7~LrPnOW|6ueO`Y6S-RQD+4|kUOVC=)dInXjAozz z+6Adq^P?)DSe6&G9(5=6b$wp}MRPI+nK9XFxfE7bk=F+0jV#Jv+on`)7?QX^yu&K2 zhB(UE`_!Dht@+pd1MoY^0y`FXl`Ar;Iq>DMT1kB(UVO+=q)q6Y?t$m_V1s(*`bJ`9 z{&3#^Jl$mEVJdU{lLXX@KvxmAsh6t({?me_Ij(Vt9XVp5VVb_Jcu3bm-A?FREr>Dv zEL5I)Xsri9$F!9Vbx$*~Ig0LSr28^x%XsGcoz+Xn<36{h+ok^}(4my1g(*-H*ot2) zAxF<|*}t9{tu0{W1V%}iw05`80M(d;e93*Pyp<7Zd&E^e2K%sTd>41uBe1h%%Y~`F zm_&iDM6Hs}!tM0bbTc(1bWR{RrLw(u?S{l07_yqL0ZIQhSc^xM^ z!g5?kej41p=czQtSA0Cjf0TqHx5xWL&%emTql)un&8musKF>#R1Et&{Dk~1f4IJZK zGFMfNQzJpuG5$$0R&u1Q5G8FvoC({eMTRWywN6I{Ium$66M%_u|AgPOIuZ_?hM+aV z{*5L>Q;_^Zh#aUfPD;X-)qgnK{_5_E+Bi(xAggSIRjjM z2R@a(KD=aapSCF_E^OSywRDxgtaM`NqX9>xLf2uB_EpIQ&(*L*aVw$>99s$sP@_aX zU<_fLvhsaAMhFD5t<(jlXN<2F;+r)Ry(RUVot>pTDpG^W;7uB)2(c@uv%g~ngE`yb z(?XVHAVRv)T;dB3J3sYy^f0X+JO_;IXRVqM91>eF;h74sysSBe6>^dskQF-U_jfSa z&IheXYR;Uo*~n)Z39;Vd*gCy4CLVY@n(6N&iuqN|^`~_rL?2IRb&O}go)vRrSrcj5 zmZ0}$i-gu`gqxgTH&udf#C3nDy&fuUcx37{rY9RLbc0w?b#&;KN@cSoYj!CgL0=kR zt;CRlhUOmqBF*_o8~Xj3<<%ljQJ#WrW0>1WirTNcNdYCtmAiJZciiJ(?p33H3&r%+d zwrSUE7;m^D?mt&;glx*Ra#i&;e9%(QDC?(BFV~sFt=>cz-}dUZ}-= z=J^TI{)+|)tOJ3y7y*0z7{iD~xJ^@1QTjv=2PTGFiB4zF975b zElL?jVzZ^GMKNBH3h9GvikQ2*7s>AJzm=c|o1n94$3r6-_Udhk0I2{i>_;q(Q~Rk1 zAP*Jkob?jki6H#`22p+?>U_QS4pr`nlnFw*3m+faOJ(41P`B=siPyQ8n~DrnbuiE& z=8fz z0l`|@2DCqC!zqBkppmoQv!Uk{IrXaHP+|=V1d1ck>KaGs5i$Wq5khI4q)_txe+?1s zrOHp34M0!JmM!}egmT>Q^!{{p-}rm1p+6-<*32F{Dm&9YW*LzFhqi73b^%qwl(5n9 z(uQY|JgyQ!O|KjTmp3AGFL&>^!LjSZxv?<^sO#3aOVz!6^wXZ{x}4_k*F652wCN7@ z&?!9tThmnl#K9tWTOTN<%|JMQRZnLK(|(Tx|It;~sIL`U*re{-($u1H+^L z!nCD_bdFW#ndK@x)itKk!eahHi6ufm+kX-T{NH7SRV(o~>Xi94p{u6P1*{I_%ObCI z!tm#uD7y{tUN@J!>@4%eEnaXXcd<*gLUhUla*6||m)H$p06aw0S{zF$6wIKA09Hi(C7J%nS)0-un zHHOx%1A3jaJd{$`D@0P&;o>RQ+-NQYfYJrL2W?-fz_x<`As4!%iG@{Z&_DPG7?lb=J?kMW z3tttLjQpw13MNZU#iUpeZMWw=v&Z{cwpV2%*qi|a4sr3G%K{f|jnpFMaQghfKm#(f z&kRR88FM+avc{dmkU`-hGnB0Np#{vs0UD{0_qdRiE5VU2@`?X$2`N0_UJnG;M4?Lb zx}TSfPMORK?sfm#?l}Ppd2KwY(2|Sj3_aqHlj=n(5qX&o%Xe%>4~Y@*hS#g#onZac zi^l>)_pm$%@^aaHz7%!>6=R=Q@cF{cXboI+N9%U2)&a;c?_UPX_)1nRc#4*kU0~aD zq)evAko0ZoaX$Ucc?{`}QZVB8=DqVB=9kN)*u ztuAdS@<)zEmB3)6rP{v-Lf4{RT43Kl1$H8F?9b}USK1f=1TI7rO#(0gW>(q}?I2X| z>8sx{$-IWn?vnH=?v&*2<(Sv#awBGb8kJO17-ft3`)mqJr4WF6d|2TfL-CR&ji>kfmMmg}41eG_pC5TwQ*Z0>5^1>)KBt&?O%L5aQ!ty1_)htSD7x|de>%xl8sS2rSkO2;5$XKDNN&9<$0!AJI=roJ8MI)4dwJDQQkQT zpJ?yIDJTARw7e@hQQ$T(dgu$x;T*y3i2ChNZAY0;9p2|K9j^5f&R=Y#d?I>aC75D5--0!JW$_ zY=wHReX_dXhqv`HoX!_o?%QTxAuY_EdhAwQQs%vgJEWS8-L9s;+-A+G7|;9}&e#e@ z&R`rq&ap1u*-KJ9S9o6P!z9$xF@Zc${0Sc+K81c0ng+kNAEU{R)ls({S`&2!++RR_ z9<0=O(vBre=q7=N*qdGA4I~P-0O5q2Wof5E!hDHndEGhkOKocwq9M;SKs4g)78~RyvdO<2&HQzZz81*EqDXy zR#ju8V228cii_f1*it|=ie3eD1iKt4kX7!vlSmNRI8g; ze6tobC8X@jR%xk-q)a_Hb`w$)fRK-*W;_r2tl|IR;O zo-*EEGHLczWj&47IUng$H^e1r&PJ8qY22hmPoZaI>)%xW3TNAd6`=V*olLIUD~pmv zR=5pq6$W_vb(iZV*`#G)qmPzMmwDNiZBADp3^(o6vduCne+!!zzZ2YggA1ad6oBtN zJv3$Er0QN_(UwgQJRB2Wv}AFJiljBdrgq&-6wzSp2x2MkHM4x?i)YyNdZQGOG!D#S zEQ{_Aw0{%ptA(omM%+)Vj`bj*@su1G{tnI0|0Mh>(ql1^+ zjq!Th7|HyW4mkuw`|pFJBfxyIugb>9&t~>Nz@U(;G9*hhnxTBbRz)<;*r#pLBQOb1 zjZ@4w+Cgyfp`|z3p5G`kz>!l*X#0$MxU6OOH`H-B*Cri|%b)~u>HGOr8$3W*qYQSN zl|Qrnvux$z#>9V?{*$$LU006Y~Y(lByG$jNI%Q>@fbG<4kxACxejFggm%~^XMZtBJMkd-{j3HZunT^$6S z_sO(@DlTs#UV~a;cFJS~{4pc+PI-ERl(57>06D8IKI=aWfNF^9OkT8*M=<$JIGgr%yk<932I<&&%wg)F z`CCiTnoSvW`by?92&AtVqq2Qpm2JbP%d!C(L!{@Ft-yT?G_2mKMuY!RdNK+x=S6mEow4`XP8I-=vFnJ z`ICT#!zf-0?8f&wtAY(4atP)`s@@++5G4@l2ld@h^oJ9lN|z+3I%+(IVsN6JL^#}# z7PSL#)gB7#R~zD|sNzbA@QVxW(bnox(1}LT{&ndR_ELqi+AX3?hT!1Hs*4rAP|5mK zrhxK{P~b*VtTq!ReNlIlH5R&cOG5x+R4crz2A@~&N0|Lw5#hMpOeP!5JOKsSo%5=Z zVw@UW8wvv>+(*&gWY_8mtT0Oby=1Na$n3|=Jl2WO8nXdX0Zp4mGL0!Yk0#6z3RBE> z5<&y{#yG^8-zQOKGef_%Ei0Srg3^%&zM{}Zo_5#_Nd?&XV7j} zqc5c?AkV0?vDFc?1aP2>#V@s~Lz#aHKan~%Y1IQ}82n^bQ1Eb~#9{tk(4LBH-S`26 zfQqDIw7A9}zwU=-3PeoJLF#;(z8hLygpv5@SmJ3XCmF#HZW>jG{T~;05bo`3E#b>q zaJ6hc8~`ghd&w^cia5F8);fIND;%lw?fk$6EbYvwS9QJ#C;p`;oB^7o_TbakntS&F ziSFY=s)*0U-&Jeq8f6eMGcoZ4sXv>Cnax+;_xz6|myIV?Outl~+Q9GMgFP+O5xIL2 z)|75ylhU;Nd+Dsgt=u-ss1ud6%!=d{7dTc%pqH#_9Gia`uf7l&r%njH}4~ zaf~t*ml-B!G8xBbE;*_e8Ei+{fMV`s$KUD{EOR-7zs9?#NZwSVgh{F)Levp@+C&sh zVl*QTm>wh5%K`$EbSilPv||hUIvd;Y8>;yJWLd1@a|I&6sw1C)-UJksldSyJxOwAD zthV5G4z!=0R{rCr9Q-{9Jo0|{a}mGgN3(C!;&wPWrckuWc41?*B(?xlO-hTDh}!oE zS;Gluhp}vF?ofObndM=oZgah7j$H?4L^l`zeT4|nxg=97Fs@q!Z?X_Jaj%J2e!7Rd zfxKO(E_J2aYX`ETU{}7RnFcfmJeD;INWCi<>dO4Of*geH%Y@Ra{Fp3Nu4#a_1~>-F zF5U7AKXz*i$>#ID74nC48aXG2Z>Frqva=bx52B8>U?5|y0_?G1+@!_}ofR3p%)FI! z=)W+T=9?j`yjPFUJ7W0{&%Z7X2|^5sM&jGmYtrI9Ti~!~%I`@h(DD&>Qu~o*uwaa6 z_X(r-@0DgW$Z#cX9BpUUndFBxy#2JYwk`NpQI%KuslsEurYOkBJORu@P1x*DiC; z%>6sQ1Mo|Sor^B(-PMJGXxi@rJZbpXo}QXs;J7G%*>ZsT8#JY86)LSIPy0H0_B^52GWH0*Jv2R}|8P3>Hr z>S~V2AD4~&*Zx8mu!ai-wYwLu5oYLd*$XCEaXlOw^oj|^-4Taj(M4#hH_LmU=q zyHz;Ei=NM$?aJG#6cnksaEhr40_m)I@| zUeC-U*!Vf&q2%aOKUk;8v|)<*;m1S(c4mnnY0qH|SoRyBPep?ctX7(}Fd@g0-I}te9dX`+TI< zLJ(k3T;_J?=QiUCi8|WrnlsNe-j5JbRZ~8VJZHs7HS_I4Wq`+mdfxE#xCQ*pnpgQ7 zgk*y~>a*W2kKpbY#{KJ-MHJwLe@<$rlfp^h6Nlz}Ek{cvBN$8w-LH*2l9y%Ie!81K zf9@asPI?f4z+~b!KSC78vXp3_IKMV-ePj4t3VV!B)?c_rM;hb>Lr}vE79{h?TU} z+_pREKq_go^>tWDo1_Bn7}0x7KrcYlq+CX`w=^tPmn5_)oe1*6yf<$GGrc(B5Smv+ z&!*yG=Y!FasH?w;H1`#o7R?807H)Ihw&LDO@Z`SS85HaIOvqkC#44+8-DYR%FAWr( z5+g$EgP#iVIB1_cfW^eq7#y+?p)V@UF>9*$))*x+_pKl89ihHFSsa}Uw%>k703b3* zW_6t~s)aEnUal!&k5n76@9@^6jDQP4e>gtug_l>l7k&u3nB^~gImV)4MhLL>%>-4= zxL0eJptjBM{2$zSkZ|mQ`4A~vBVdN0Zf0|3>Zzjl=#fq-6t8jM_Z*rrLYSrxUtuMr z;T9P!ppZhJC#bX8snBeqQeU4j-Ml1NV6v993Ye(gE42RnIpVFV#~X056gD3z4DXH2 zN8Nu@H>egX!4{hYKX$|7whj9xn)6&PG42xWXZV5 z&BB#(`p(*34%C&THR?;HzmWfXJ>usUoVW5-KAT3rWy+q`VGcpW<_gQpo$I`d>0}@4 zx!3n)@Y!Ldh&KYZ7p1w+GEpMVldsvF*(iluRN}i{La_&8Y+Olp;C_h?O7<;G&}5~S zN3!`VptT+fyw&#EYXkmhE_QT;s9w(O<&4Kl5@uKA@ID4@Br(3K*MKQJH-2hSY%pay zg5c9i{!(NJiQZR)(`Le?>9*M5vKogaWJFF1VD45dMq=Fd@9*;MIUUt}owMqzA0G;t zP}Rnq*u=54N!eIUlohg5@@dJmY4f_QtR1if0YJ>SU*@k0NnNbRq^1YEkPb_S-(|?mYbA2haEK8S%pN}R&zSHf_vhyYe zGB=~pqx|2ofKt*XkAQUWx-%XdQ)m7X!;hW^UJK90qC&hUU)__9Vvko9 zS@L`hH#6expJZ}{XLfNr0EZ-EY~U*IyJf6PCYLw$P%WI<%?uHNhqRv3Cb`~UD%I5o z^6PpZQaoNumkFv**a{}pKs219?r=SyKI60S@^h7=J zn`%<69XO`-@hJ3~V4+V(v+BmVwCiNzq;6L1jLYkg~b^?I1{$i)$`uCmW zSUg2ZWHKZ5n#*m-n!5ZWQ!O8AY&i9 z*t6DlT0#+X=xq?+x12+veCue_$z4O5khTA5SlV)kbcq5CX||PRM>9fF_J?l@A561B z(L3x88p{bdNr0Lewx`ko#kd^1avZ&C{t;@}Asj=6z5+au5UOE_Z1(F?R$Rx{;#l7E zSmpHLsgIi|zvSY~(Ts)Fax8WfJ&m=!&X?Yn-GK51k@=$5K2HL75qzeUq6GWr*g^tW zJFoP%Ud!IM+1O-Yu#+qP(bck_83C1p%22eujxuzbsZch~6rHbYGG$k96M=heWvmNL zHLjC!BYeiQ(InLmXU84+6*XcbEX^%6xy_CGNZ}_kX7`XRZiia6j1*TD$w)bFVTQXl z<9?Kr^~!ks(VsBY_e>XKXBUW6&TwiXb$_q~G-{geLGkzn0cq2Pt*DmQ!Vm>VbMog>4qFf&u+dX zCS((wli$i zfkZs-2%DeQzt>iarq}%=w$HL{7Yh}k@<{vZQxk6KT_dY$(=<0wMYwn!zqD)cdST&G?o=Pk(Q-Nn|9<1P}UeK&)qdgLJuiT{rFFFq+5@< zJ@5d%io}rqUF*5|rU34P-J*>ylT}pgtg&U~ciQh;HTR1BkFw?R=W*}0AF+UK`^ZsnA(^HFe~dp$C=xjd6O|1zN(jG;T72hq>xk|PUnBj~d<>(4@?rNrk4ALDN zaN=A|$T;nS*Uw}7&lsdg_JF~!+CZA6;AZY^*9;>8_l(QwzCylK4(3A(0-}ggkDrtp zRiUILcz2PCRbXy3e2Z8!pe;l52&aPr&9vpaJk2A+gRdMUhsN$FDg{A`%8P~leM5F# zijupa0E%;Er3Dn(S{%}kQdsD;SSps-HR zW9H&NNaehAq_&I6*MC3;BhdhyiXRteKim=RP#XE?Uc;q6+JL7GK$mWb&zUs$% zKCvnzfCkDGFE~i31F;N!0ws-4v|w~Ap6)QN>Q)Dv0fm>MX~>^Y-M(Fhf~O-m7N$wN zwTGPCci*y2sVd0V6b{V>nm>idQ|;v}*ttKrAgo&eZ$ubDC%5bAMwb~Tub8ke)Obr- zqp|rTGuVPdO)>I|Z)(R>*Xkkj2`#msK?@)$LGl$iV1n7K0pWmu#<`?BG#fX8&%$gm zP_DffvQw$&(n`SfGBU1|vC9^Vq85wwe{y zys>?2!fCl|9RZzzdRQSPVBV&reQ~-&$}#EkFU*yoYGUJf7JM~3cp1KIBmsU?{ip7% zw9CX(;OgnhkV*hY&!Xh?;Q)Cg4j;pi+{iK=5cdYeSdBcHhV){;9{j(-yi9$Z+~^u< zD7^BrwHq^=b#~DvTNIZmSkk0IA)YEo2`hYx19RIAI6JigwTojjGWY|#L ztRLETna``wV3RYyb^uT8z8lT=B$XE59i>L z65>kAUv$qT`U1yha5tH+UAHkVk8w4X?9nT%gL`&+|g3maG_ZDV+_O8e{AWfqF zs}oC&R{;glVJ4U_1jIlv)j-37z;pt<*i@I{nb;D->#A;59X@v%-sV^GF_?ZlC_uh&PtS!c#-~6~rpu3kY;odrJ-P+iJ>sNzGNKOCO;6raD zkW=PNS*u|K=)>zqGK`eV;IJZ}WX&&cqOJR`fq~B`gGC9w;pfu%r8ief6~PahYIeoH zYf9@#fdALjZO))e-bo0hs=QcSaTN@2RQtY*Gn}pFEDXJ@zI-Za_ss1OsCNmpmm5(@ zknQCR+czEG+P_vFSdVLa{|MCDK7N=_esLbvU*DgC2XIyHbWZ~HkL=Ul)vWHfFSXm0 zEoaV#FpKXBidM%gv?1$HpLcmnnpX@pWPFhV!M7H`F85d~KN0CRG+`If1UPDEv!viG3^$-3X^awDe;xvYPB{d4aJ_?NSO!Rr7i4wI;hsbIAz= zxbqQk)5tAP_MqG-3T9lof>$Vi%y_i`p6uGXOL%8qgsH1!-$7vD8TON9{vLhM;ok|C zjVW3J9}UlQ@y#zY8ODJr;mit0qFWC z%5UtGB~9K5my8nmOZQA9Faxh0Oq#*cP5b?G7DOkrNOebh-dl4;JvAksP3FO<7(D%rf>$KYtR3X0*Q0oi) z^z$mN)jlA(rAk`go8Vzea;7D4oxTp;H7rHB1k)h?gE2X&%Iy9GM1!( zmcG{gpx*HwMY`WA4z2oLFJ2{;JavB&4m7rQMpy#MKwUKu1lmK?gAD_n#Gk}iw4t;5 zvnYX>j6V+{dQRc6Zft9Bq_Jd}Iine2U7V|g3%@dOsC)(Ioi4lypKu>So^~HIx^FEsd*amXrm&)QruI0G`eA3HCnF^uanE85U9%0jbZZ zXelR_1fy5qz~JG|#9iTfEfrq)%|ibpY-Rv$y+q7^L97ALDoucpy~wgVazPvzwG2(`c?j-7 zKn9x>D=>_n6_eHj^kI#w5$3rXHWB$F7fm_!k)q4|g_PZ44Q3_^ZwW?-OBtS#!L_9w zJU&6wINE17)xNv~Vy|_^CYq2=o;biTUZQYHH9Sy=v^pImP=R*o#inmf#bs`ji96c< za>In!Z61rD@nXLfE#LamKRk1UWTa-bc)Q#K#;wnU)A9i(x)lFnh}w&Vprd&})r;n{ zAj)vHNwo4W{II#&j>2Fb>wOQvfl$pJ#I6nqYS#M5@<*6C&PVLjy*Z?i$Ckv0l708F zCnu$(x=k4Fv)!fhgpVh0{d= z?!smsg>2Z&(MVJm+=!`lSGC-#>gqtzwc(m}B@8%E>Be$xAFGCIC(=s1s7k8&CHWyJ zTEs?@=nlqd*G7c-wEq3X7a`|+4l~gIrM|hT8sgygg5km;$(~CbX3Fxr*J(cwNmlJ0 zy%EQWDeYcAs(cy}LU&%{W)-4Ug@X{qsoj)W#oqCd!Fci1QfCQfwBPHrncg!jzhJ^U z5dk!j6GU#+3&bNHH8+U@bQe~64)=s6R)=92zrI>Z&nB6kP3A$ocHR|bY5?bYgQTz6L^ zaa}r(ASCdzG)s#!uKH~@3$ioU3~ubq_IGZjROIeYXu$yI?FyOILROCjhFSj-$U$EE z_>}z!SD=?PsLDBhHjj`XfW7Lw>qoGD|Jl$gTELf=LzJLjqlpLf{H>!qAp0D^5~RtV z9XGIY&}A)T&f3hqN_%5-bA1jASlm#Ql(_;<&dSq(@GVZ`#Q0Lq^5%$)z{8H@nyP+= ze)QL~BR_Zc2BB4b9Qx>P`DZ+EVlIpd+G^t*>^h{|M?UeFGy0LiO5V*z2|qH)9TYuv z-5Y}N$k&z@5=R6k*(LW&jc*X5c@YyoZAzKd^?~Cmc=6C4oGs%InmCx9=3F3_l4t@X z{_Mq(D9&0qrT9X2&q7ah>@L+75?c1oi&^?;0 z#Q**}Ao+Pz0U53qPaX7`cshE@DhR2JLKg zekHk_sNnG?V)zU`X}BW83hd;L`RvmUkxwa*yAH~d+?{DEOFWyA^CIiA5jGCNx; zgT0L18CFbb_T?^AVI7#yro*Uz&!bS~u@Eh5JYu#Ej+`kCh-csm)^^hWh-kDiNW+^z>#Z=3Oi|S9){|p0wPP-a=cY zxLt)=0KFH?N+my8u^Q0RKoMfx*tF4>NgMI5k^(Ok?Y+1NOS5d+m>P)-2Q z!q~+x41N?QtA0Plwb-YO?}?zYJ){ZNe<`L=@vwsB#4J-6v@C|XVpw6C?!z>~dRMGD zKMaUYlcfJB)rUui?UPH$0jyDxojN4KBN-7u~-mXYwv?Ir3)$n#dJVT2L$ZsUA05`in3#b=E~=_k_l?OW0h5skYDlO=0c1YGpQUIxO4?cLSs>^gqoZ zz1UKJ++~D3hRd04CZl#i?a3HC+S;obbz~Ry3A^*DesobqmSHqv;PMnrd3j#`xJHBD zMA@EUn&Ae?!6>2Y`vnC+ZdVmsnxrHDyA7=Q+t~ff2t4R)jvZ|+$!E^eoa)Ipmxnj$ z07>)9>9S6a=7!*gTR=*k=LS2KU+OIJ=#%_}rfKZ>A&ppCAGePhtDED~Hpn5xQ~}F; zl>nMDP+n}{5HK2G9Z){8KrV!Ag)<4@kEyW+9qFEJaq$8r4B82%uD%`zSK~rejyV^j z#YhM!_7c6_8@)~BpQ5*I1hr|aaIZdc^@vjjCGz=K9aF;Zm>AJBD;cK|GQJA$srFzlW)!|J&~hf|XSW zMw)V^3VyaayYwe2AIRe;DV9e!zo`DEW^vl@yHxQ^*Eo`MFW8PB0D73A58z+O19QVtSD7~*^9NZ|kiK>fc)TSf?2Ls87_SiSty z1DAjS>w1Ud2Evg{Hhe560Wt5h*!7XL?}#M(d>Tz!ijN(ZfqH7E0%_C}M< z;ueugUsiS+PpasAdaAjJ+pwXw9q}Rg zOB!1}Z8&d7MRO`F)cG!NXydyjiYQkV9N_@@(BU6nHIljD@dY}x%R~8J(!g=(#?dp{ z)pU;v-5xxp$*zgeppn1Zd`enUU`G0h#Hc|s7=y=LDqwy>&IN?Wd&;VTP;H06=`3gc zYFgDx!^5CKbK>4YuV?FgK9+dj^rIYel8WD}<;Gm{Iu5?%%ljgP=`SB_B)xDm0jW1AhlU+0S~ogP6e}t30(yzKt#UVD` z3eFfxKXVfHg()}u2&t}1F1FQ~ghX{6OCwbJ3coUM5rZhZw+NYfcvO4k zhJp}c;PMwsvpf0;e3ZKH;9w04!jkhk!ERp;EjPRMp4hvO7CqlIAuoGWn6M&ZW*(Pu zOGk~HezqvMZ;PT3Og&In_7?wIR)eCJHrB;=Ewgtr)(Ik|-%H*aqJ%f|qn>0TQ)1aj zCML2YnReWzisFV#!aR@_DkKshEXd&a=t_U|T}@L$Z?Cc*o8cF(xkM-F1?7M4*1qpJ zgp6&fc+DI8nVhz=izyEmK*K)TI%3l+yn4MU+nkY#u@x!cU3;(Ztp6&n={L~LmWilg z$>a4QrbNRwB_G9dUwCkUWDK4vX>5qU9|-a8CyiE^Z~`ZMvd53(?CvLDa*fv8Nm~5| zW7YJXT+~V<^Gc?|U~xpw$&XKh$8y7_N%?ab>dr1W|1)&XE2!DZp;Mrrt+*K99d16GT?|F{7(pr77h&8qkZ@x9 zMTp&lEd;7N;zXc-S~jnF?qLT|!@7^Swv;6X|OP=#(b_DKbKsVY&b#@o?U- z7J_RKQ~MiQl;pe{#I?Aul_f^tYJrloD|z}M2(Sq;kn$|PZRC7-56tRZVvj-N5dA@h z+ndqZb2zAxT?5r@WN!f<%%EsX)Qix}8xMr`2c;FSH?qOjR^*AN^~t3l%rW#t(#&?y z+T-%WjG&C-a4zDeNm3NVY>GSa@uDM1tFLjTWIa5;1^Hbk1WtJ>G7Pu4!Tbu8&)79e zqq@cqSkx$TRiF_B3f29HITxo2WOY+;A`ZFEiL8yq&!W5Kz=wrTv*L zV=sP<+USs@3@`ws{A0vZIr5=HPB_S4!$4?yF8HhE1Q|DQ7SqDu626WEwHc#Fkl%sm zYMGT!8|`wxpg8LyW>!kmuP$3q;RTbo;;M1L#D*tP*>HFFo8*}!iaWwE6!(C(=z$kq* zVO9dhnyX|;sr_ICh^GU~78+ZV4$0$TBdn#C5N@|Gc~0tjEt4U{G)J^OS>C5Jyb82{ zEF_LGXQ#PudM}Lsi}$GLCy|`u!H{Ju@Mz~0Jv&o#^R5e7$8FmXbgcR{wg9iv2#qP% z*!Cy{5h+soBnj!K=v#5o;1jSs?BjAWB{H}cLdaW6Dm{7YiB+0nDrLJt@|Te}W$TNL z(5k5e=<%4U`dptUZJ7MG=T#Z@iydDsTe}F)BUjzY!|xZ~r%PM(7rfzi0gIYg17ng< zo7RVwb)&9G8))u_jfVOG5$ijySz(_`(son^N2MM#FVp*N!CLMRLR_TMFtzsM{>H~M)M__dTLE633;T$J$jaiQfB zI09K3tw24|%<$w_so8GB?AfO0R!MC-E5cMCAJD(+yRlUCFbV`Zg+$QEW4rc}m#%3m z>|6%Tx3NM1M+C)d19nfZ9J>T+%16&*iH^r{wi{o7etW0g4~=Jt4WEG&_wY^iOF zA!(5{*2;IR7U0!f5dO&O@K4v%g`KE{q}^2>_$P7Abd(5TQcH!NG!2BC<%QE09y)=@ z#MaI0Ik$DgVkdLWK@OvcmV7{9*wLVH_;r(JrJ8kL?!!xQUrS{q-h?jRo@$#o2`6zm z9%adNa?TkQ2t5$$;NS}zLuG^ei~W@+m(yAjq7c{ z%UFemne)Cj=KqT)jEs0E2%8pu!*K-9)_vbN%{!#D1wOKLT8WPraw!XGYWE039Ja2D>QQzIRK2_h_xf=h>7pRwsVDJNv$_N$(TJ`EP1e z_oqVBGhFK7dP|~DN!4U|3=~@vs=SmyR=pxjyY_{MLt=1Q$O{cl`KXm|RLsoY5%v#n z40>80Axr}ITjPnXoug@s!;wr{@ue+tpXX-v`+?%mKvpKxWX1K1-qL_Hx)QmCiBpMd zJ6Kgx8Gn^;yW(W)EA8|Y6P^Yx)}>gX8{V`pVHK)?HtHXBX2%(_n-3)slsGP$@JWY) za11WR4-|x&*{cYK!~|QFviu_%ezIis5MouV%G8#~W4s^&sN*!Hw z*p)EM*7bR=P{*h!IM~>e+{@ja_i=MzbM*T-eS-NTH7c;9&r#YJ?1827rXD!Jr`%gJ ztAe)}JyGg%g1SRb69$eG2^%UUcAK?iSKxs0KS!Ak)gSrww_0@=LC{350#f`{v@|U= z;>NjXDB|wA-?RDzRNU}4RSm6=!6PqODomB`@+@CZUn4RJP;mPi&ke>PV7P&kGPDyP z#-0bW?QsYSMiGI!ta`B#Fc+AbS<-nfam7ihw?|UF!Ox)N^cQD9vzEfu71$Pwc#Ptq z!Kk9A%a5q%Nb!(4Z>*$yIaaxRl;?0LbT{vF4g%|mBhPM17C zWcvaLk+GYjA{&VC*D^WcN-qjx}cyp)u1%jfq0`jsJpi|-k!$|*S* zrc4LX1Brd=LtOOXiq-poF@0{p=+*A=lje(?w0$=NR`Lz`+wh=)m~`?I&6RRZnYI9x zY>I6#vJgiUzFbna{l9Z}*;W!mo#Gbrj+Y+gmRR*R z*TF(TimAnG$uJ zB&H9Qym4-(iaccpg|Eq#=RNb~k?CDvh4?5#S7a5^sfPv9jgp0PZDQEESbnW(obI1J z*Ax0PP=jBInM`hGAjWxMKFtor=O`2h0!&4Nv%}qt`tSJr?B4l@l}W>=qpt3WnE+bh z*Z?qO83L`0ATE4|A@f~P7IPx)X%OYQ_8rn65$+u-z`WNfzpE2kgd4N31vNWismr52 zvi74hK{M#y(NZ%7C$&s9EUSL=f;Fez-l^Ex)NMztLM+Se@8DO>Huc>?nR|x^$Bmg^aF@-Z5jrG-Z?TY{iB z#yjT|Qv*R)WAT%1)DVd)aT9d7w(0F&PD(YZN6)k=&{(&?EHTAW9xk3*i1Y3mmFQ~d zc6R=jmLE58qK%5^`LkOdUgIVAM0)``z#Vh5_RKO@j+Lg__Iv#B#LhgbzaNDRPOpv# znnO}lefuNk?;xztP&$yZRT04)GYoC*gF5tvcL%O(Dh2vPUsRpmNdg9S`p-&^Gia=*dq!8>;KZT*aBuh(JJ|A)Tl@rv-8oTfKVSqet7y#CPWrqR@D7_B8p17 zs;%#+VLY!sbJbF%zcUQAzc&;Oo;)JwgQ=yhHp^y30kWn<^IJKY;j(GPyNRb;8hqW< zJM?mEYG&TKycF?8SnUtsyKZ5_#8{wh$v9b4DP(OB!My;GUj3hRc&-CSAGw6X9ag}qx4Df=)YVp1q zRxxW^W@G~G7%fwNl_AHMtBL{CM%Jx#XfMo0SQdHA9hZm}a)1cvJ6M#2-c2$sb?~i^ zpMIyqpLJ(et&<${m-gRAqY`V%v^?{;Y@g+4oQy4svqoqR;=!6_y!qEwa10+ zIk#-Sc_&vmMVIB3W~*j#@*0KdQL~lyik>2Lxp`P)wjuG*9qrRO%tPE~pb%fCaiYbZ z=x$nMRf%>jF(9I$s{Pk*A_K3V=Bmc5MUzyD7X6z64?fZ_?T&o@ncJk>RQ+q=Bzv)H z)rjW2=rmHrrN>_nY=$-r1pt5ROQv;+EKUI$zDJ{416lWIj4O?yiwKni`z1Qw_`M`J zNsdsxzVPke!@yJ7IBX=6-F6G+Bp?|vC70YZyBGO z&f=}uuw>H~#+pozM6DT8g1Q-oQu6hU*6J*@T}6ZBZpP%sc4gF%^ZL0l2720($vG{) z0QoejW3zlPxtrFkIJl@YyRh+DsxYN{U#tGe)(@w>q`h+1)S!d{)^Z`B zx7VNyD5w9%W%`KrJ{BcEw_^}>TX7}rwzm#(m4y^FhBAEoO-cfNb&{2gj0R#keRDGF zJ1ak!?crsEncFW##$8dK5|~I1@~nfd7}A!76u8W@8h;f&xRJlvy+>w5z!Yj$X~f)| zY>q6bKy`#;A8g!%l_hn8_!-^QIs~^lcQv~}?w&+#z`JUpgD`6C5>TlTg6cK!pkNz> zcPbR8Xtvol{j98dkGMFjsWY@#(I6@ZXaAFzGskH*&mBG^5)L!S#&2;}o5fE=y>7>s zGjdazFUvTbhsBfPcZmRp9I|FjdaLL{GFfcNQ!Kq3|CL_*2^EUKJm|_Ovy)`jq+2{M z8o5*|R+#OXA{1a#g2d6nKxS&S>yvbdG)gx5cSC|(6Y3CFYLg!EKE0YjQHAh-DAc@T zmNsu-9}#WoMg=C^9RK#A_6MvJEFgYs@*&;Q(H;?Tw~rJ07FMsx!>Eg7K6r#vc2yr| z?ydq?d2Z`DHU(c6N;ZGZBMfvNU@MjIenY+n_+$k8lG=js8eO5qj+)#{-PCEh;JdLd zHy4|>9pXR6cnCxBKN$BzPr?7SNj-$TQ#I(?@;RKblM#%X(*XR{!qD3jYo2>j+1>k@ z8}EH|L}8T&^;K1o74YG^QqF{uy*65^f}dUjR)>$gCZ8b?wD22d5qn{LKcfWZ8rvw5 z8UIWvC-Iy9n>sY(Kq97go-dopOzYQC>AES_OYQC$cKV4`UfsOFSL0?V-2lUch3sT5 z_ybJP&3`7Wf|lzUbCw~+h4=ppO=b$EHg6IUVjHayyOzB=R%GjMgv9m+r;i00Gca*W zZ)xm`WM!nx5G+_JI^bO7aO1eCZG|r+r!LB1tkO%lW)l1!hL+96K_wjOKR?0Z`CGQ{G!=Wj7ywD!z5t)e1yY_i!%lPuy zubNVXYSM9QXGb}v$d9*OtXSlL2;6l`qG=d4wueKct=}H!a-lmAVWxL7UZU#k9^cV` zdVT$bbo=et;tvSbV6m&=ll!}%Cz(k4F}Y&)LByx zPoTD`^3ls27|61`03y_aJROjcWE#Vb& zb%WaOIHmfM#egdL>zS>zRr{c+xyDNIR~rRVuYgvfMsq3JP;gk$V;n3Z0#-Juk9j${ z7g}%C46yy|< zV3s9V0q#2^SuD1jUB3R3scXmvR}&#HDn6!CiVXxl=J$$##3W%80q4ObMj5BOrl*|v zGj@$qyswTg*WNlQMz~9^t`$9u$$=A|2|zhLl$-aQy47kNT)7ZtX~5a9+rr(RooMno z0bHPU&)e|c@(1Uz+t(})WM$GQ!XvkQn4#}7+rn;~s&&U;henKHm5v?ZWwtn*06SSF zKQNX4(z4U8(w3CAnd7mSQ&@p-S7F`OuT24{Wseh}3)u!Gck}#ha0KAqnp8%y;xF{g z>CLHy_63ig2J~}-hXG;Y3hk($0Fg7^B4MBdSj)_Ng8C80EwJjfbI$i-i?2RJZy}ZS z8!J}7G1*I+yI1aD9XtVj0|2sQLh=QmA@vc`_(L7ad<3tn{KatD{JA-c$^e$?bYkfF zCP#v-Q7~oT-!pcAC0|Xz25kRW^1%;#r9h%ZOB+VZ*aYv&h3knM#=9;}1%N8;SOww( z6lhVvAAQj*aGt7H5O=8tPw+gs-G@OZQHjL#3C59^%Xh`^*3JO-zcuOxGng!~ie<5H zsO8F7qc!VM0}Zb%!k@NpeWpzu&ijt?`de3S6V2=OI6y=7!%NqG3aUn|2rE{Dyl;MM zfkfz8*8F%qJj)BEH~32y^I#ROX6E-l87<0PK~hlrqC=5#<#;NHAn(I9zgg)`qMG7S z!RulDrW%1RNZ6h0^;O-!d9VFIybgq<`er&vdkgN_KNCal>o>1x{Oas?wkzmg@}TRo z#|v_CF+=KD6|0@isDK-S3~YTb`purfS>OZdRoZa5zgmwsf{7URc(xB6*$C z{7$8LD%iPHp9?eb!)M3O*_kglT}J?C9*S{*&@K0ka>&b?HpyXoH(whG-P>4dR}J1` zJSYS3=wT8(hmu+=1Xcw3`y~M;>WkX+=Vlu650`D z5h7&GU?@sURSt6#Mwf&^+$pAF4WY$H4u5r_MG~Hxm`A^}6v!o1v#l8c zQ`$4TPYGn6##9VjNL9&!u8(|d>SIBBJw@F@52+APAtK{2({}Z1>O;R9-*(efWOt?Y zR0O);u=1z&ILeFFGpOcB-K`e(bh2vNe)s`X_cFg#TGD4#BaPGNbtqdh9(L}XrYfvk zHY)WRBt*qdR?iNKu(w?>4A=D ziP6cWTNf`EzyrX-)pC8Qf?P)`SP2WwcC`1;C_+iG!eybKf%Z_F`ovSsGaY#K%L@+T z(aVWNTy?X56JVBv1-lwpu5eL}snv#X-uf0!^Wa-7PYhE91<@wo?-tEQV|YlY$pqiG zd>{tn%id5+y}b0hvaKt-D^`88 zCKe|PNR~ELq#HqWjYK2$3mYnb(gc%*c^cnSC&XpVk#;BI#BF53w{rj12r^o30o%c2 z!M^BY;Yv2D`K+HsfRg!i5OSSU?IJ?}yGJ}v(cZQscM?>sEE=>DG-u$3`Ffd2>H+Jg zxNrECDRrUWrVNUX)_i*ENggCwO*DFLMZ@@Tf6>6DiDwGBOx;5U$X=ljD31}}Y+y@eD1 zerMuWT`Rp>+Umk1%rPMoORKY{KQRP$##TDlUz3gQap-T{V+8a6!s|~TfHM5Q17=#* z+r(CxO4_ivn_+HS`B3I7lo4$SdS1wG%vDq2^4kt?4WvY@&JV-#Yn4%7>Io{fe4ZiE zNi*k|XT%r7WT^Q@+JYL>$^qAyYDh(Oy z=qLiM!3Q~8c0O9Yb%+t$FpxWKWOH_InmT6ZL&1GOS;J3nT7L7ATe7&YJ5g@5(; zwZ>p6$y&)6!~gPT19s-;+tYu>UgvVT;uiiB!Fe?~LB@?^aG+JUt(SWHFVVav>;uv4^w@g5hWHS$KyzT;=>s^0HQ$u6ooiNk-tXoY}gc_qb?{4>xROit*vrGYP<0zdgmUluKb%(o1ts+3+F!d z7n;+WTd3!UuH02AApMQ@>A5n>J~GU0*5%~D#eVcDNd|mA*d;#BnvnEW3wMg$#(q*3 z)ri(Id$9?jYy-z%{M{wFTD+`Q+6-^rG*D&m1f%qxk7=tibA^)~fAGW2xVm|5};d$=3lD zoaCG@EfZ<_+935+%83gC)t*PekYuHrQo={Zn~xs#49EXnC6r~j?AEd7m5LkacOxmx zAU)zW*{{XGJXLGqQBORAXVlVC{OzT~CqXAoDFLw6Tsb-iwTGsDt1Ew$dG)0f12|oH}n{rTu|nP z8`^_q6GhO=3+K_In_KeUobPLs3Fw_WC~`C*cc?hrho|&^2TK z2)yCS%#IQ+?`o{1rKowU^~85h^?uZ_>tjPt{%+}5(t?7UfLPybhb=Q-a)O!n@t3Gfz1muu)x@W(Fa*n1nL3&ddjRNq^ zVe5sstaEG)=vh-M^6f`TmbNDQ%O;=)SJ0_La;g6leB3^$GN`~Cuku1|(B^YhxQnci z;tGpVyiBlMi2=$FUImnO#(5jdEVRn=+~BvbFI%OdB5IA81v}_UclWgf^9f$Ktg9(h zPNTr$5g1s;h1#cI$k?d;U=an=Z7C=Gx^L>owCS!bO(}cTz`ywt2feul>e^D(xYz6S z*N?kip>tRzz#{MhhY(#UvvEC+2PeZm!2Z!`X~8wZ{N^@qjgl$5I3M=_Rgi1jM8bnZ zPA$a1rVI2RPAy#32nIcz1~&1gvpn~WjN91kSzMIz`x!+mW>kvUNAv9AEMT3Z7XLx( zx!X07vpHm4VmihUt*oOmt7BzRZ|FK;xTKXWa)8$aCV-6l!7IIB*uQ{muay>)fF=-% z=_SUDD^YD7aPF$6Hd~TlR+`po3&yln&!Tz!J7g;#JL0kI5|$vIRQGJ^g*Biqw$e?j z6|e;=R$qQ<-OMGrhZfhhC0@^xZey99zEe&?NN%cXbq6E^i}qaCopq^tbi`nulO8uP zw9#oyV%CsU6kpGOmsbVSH?UgZqwTZ66eiQ1!w-YNJ`=ru5T4fFU)PfWoMQ2OsN|p= z{Hw4>kFcPv;Tm2;QMD-l*V$srr3kQ6FHCrvUgl3jRt7`j`w)9NdllW6%AR@jW-$Ky zAZvxkPhz^k-4Ncy=)B9{-za=ZEyRUN_;WEej-s4ct%^vN5lf()x)@tAV!{t6PdN#x zqxWPx$g?D+%hfLQwD$N9r-E6rRswosZR~q1p(sh58@`aiTLQ8!WW<|-7^*u=)AeJT z!db)BX+RpC{=m))+x$BiAlHE;g6b-RfJ~mSy9VDHmlV-ZwFNkxKcx(1%Ii>^6FRp9 z3SS6fX7j_4oQ*z7MRcYwD{Wp&4nJbTABo1D;kHLhGcvQ?9IRK8S!$JS?A6k%F^os6C65kC zuRN;a5(cxb14{-FP zyohdEGTjv8yhHvMDxB-ZUCr-SfZ54Nnst?NP1x?j56uWa9V~5~<(eJkmv84xS;5rAhEOv&j^}Elu~=;)L2v zHZ5)6D9AXM2y03OAUERH+xq1J+th$!tpwIS%h3T4=uen{;_yB{I&qpl^_kK8$X)Xn z$zF`#KLnmU({7k0;W)8O0bHOse9AStGPCElQ^N0MBxO2pXV`)kY2e{fT#S?1z)?Wc zfxW4S@8Ba2n&-GuC>@J2KFp2+{7xJYM-NJqWY@xKRRBknBbqNz$jQC3p$V)a_h9VNt#K0IpARVm2%pi36c z{t<`#jxT9U_yz)?L}h3%Stnaw}vh-5N2rpvGhxw*{g zVkL=I9dBf>e8FQn6G-3}J{_z^(!RZJ&Fo2LsoA6fS59arWuo|>B+fkSIoLtR=MS&3 zi>qUb$r}&4cCzYaK3TCQcic9YglA8++8p~&noliZMX8=!?h|DWCEB~L1vD7I!Z#O) z(y++*&`d{;R53?oA}j|Qz|9mLL}hymwOR_Q<=J$bpp)oO21>9HFq$;AgiER#RRXk5Y(0b_xRWR7W2jRJU zs2*skfrycijPh$BqM}0Q{aB02KeX%HHM$trw`HGS6yOU^x=z=o<P2 z5a26PFjIJMHxZG)ruW}G=c@OmcZ>@RLz4MasX`1k*2i`faBh!4k20~^s9?U)%>c5U zR`29f6X);;(PT=A3il~$DG@5hpbX)B?GEcgpO*y(smdBjqrTuO$ z^Ia)BMaWx7V~)LXXv*C^*p3tpN&@MC`w9QNI%VlW=p12j$nzNx-w86GYVx(g{w>Cm zQ@G&n8VXh_#+x~B;8R)pvP0fZAKj;hz^XC?og+I0z1jH&MAXd66?c62}6!1>+WsWF&FLNuY$@JbPHAFZbk_vVpQ`|j|WLbWCXb)3L z^;46(6jf-SuDB^!)G??Jy6*WX6CA?1up-~&zPq`isF7?3?C;{uYnjf?U|5_9AAN6Y;?9QDe&KEuhLRR8Aka zR851{&U9pufystuHXL>?3IQ^sqrtX-xxv?iCor*TB7@#HqYyH)#{ z3XgY4$Q?4Z)dibJBMDl?7jn4h!1`r}WJ1@wbhuxgMp+WUIvovcfoz`+58g300}g(0 z6FEw&3no3Bxob^mXTQfkXLIo6L>I@zx0>A6dv*pzSfbmZP+imFKUO~d+oC~}959Ta zSYT86aG_vA{I%xAebq)OfP7@^+|Cwrw_&IsPiDwf)C!WG3d-x7!_!7CnW_%-RJ}s2 zZ6!V8{StUn4fYAcJ9lqxrJ&s8en@*wT-;JD#u8`JeY@^;Xra$okEg)?bSTl{8waZ3 zA_1*ik3-73;%bNkPA@^DdJ_CjTo9kYt_d%JIU@)+MAE<|ysZXIlz`G|nW{9gQ@Lw| zL_ogr)b0G_E4tx!6p<%(iN8uvJE<_1Jf@&OwumDtYF^?gVAfV#TqsuBDpdj!+372H_W1%jg5!sZVswrlU{xP0fOu^FBdXQc# z=E0xG+OV8&4eV8q&?2S-ukjs~i}5yD=g`BiDVvX+<4}YF#In>0 zkGJmY6wQqx&@ynw4;Eb>PI{ty z{AVngd0$raB{0gB;y&OOpibs$UNU7Mb#~*~%#N2k6k#K`F>@q%;jm5rxDUEwNND7; zH-i#cRL%dwF)vGf+L;GD8-C6}OkK!1S(Xg+vmY6LoNg@V)da=eC~*A`Wa4PF7OPSQZJf@AC1s`={L+09a!7Vr*ms9Qi)5q%a@=84f(F~k-VOBeSryd( zpdWx#)x^!bk?VoO`^wM#UTz}DbaoKzF;1y-&I`{_H79s?kI#!J(1_*k?(tZZ?lg98 zBThNC0^%cK28F@6lp@sIF{g4Et|G=%QJL?Co#}9UdPRT2TsU2M30(kjRyI`Vd2FdO zl?~FEIAs86A3yO_BNAZ>>>lDb$<{+6H3}#f+>ZRp9ne!9=sg(UjCi>fTp7zg=Jj ztxtQJfLmak)$1%FVw`Y}m_rqkF^H|S3D9ER&E7B;wFvBMXKJh{1Ut8gm4vxQp&)Y? z+cwp0WaS7jBHT(ecsZ6qbo!X=XpNOA!k6jW-@!;8d`f_~UAg^sA2e-oO|#UzAn9pi zzV~V}!e!}|Z9htHN5n)0XNgKSGSfe<)x!PG$rM4oX}sXq9#~GoiU^-I9!~e)s$s?DQ z1&V+jGGR9Kv}lBQMl?O)=)epnGx;t89f_nS^_M(-Wn$SSk~M%x(_^)bD;N*{#vvN7 zE$Da2APF}+nxddvo%>CVqhZ`}H^n}muj35|`Pledij;BzZv-u_E^QUYX4~dW7FHl1 zend0Ew-1}Zsye2ixtWb*Me(o)8gwl5#sukJe_8H((JI$QWI5(@c4qh9m4 zN1W$%zPcb-q5~bvW0G*~bu$&Tr4WlF6vGwNU{`JhNOi5Iv|d#=2KXs*uB4dO{iC!G z!B?pA?S2;dyg{Qmoeudp4J2oJP2&~YRqJr zq5`0S{|^M>&UVduF3}M6Hxit1YQPe1P9n@vi0C=qX5Q^AL>6G5YJ@GKK|#i}fSxhocz8 zJE2~iNd!pP4t$>5VkkHntjR1Cw1^fTnx`Gy$-c@8oC{tsoNW1?JZ;$hZB;H;5K(F* z!jENPGxR)KwZH@NsK30QM0C1dy1*Cz{ zLQ&%X6nPo=7cAN0 zFtl{dZoqMnyJb!v4x>U2cQf@i34V^^StrClc4`1&GMN7wSV|oBKH0=mO~60Xlid&q z(@C7vKd^cT$Xoo_V@=ncVfrfT573ZdW1z^R#h|z+VDgrx60_t?c%lO>;<9V12@KWA zMrgk!jM&mhLgfmwQKrumJ{i_S-BNf(5iplk|8mAvz$2jVHR%VI>}QQW6)ui{fQL9K z%F;#M$Oa9mXJaW9tG+$1Is2y0V4_RYFZe5iKYmZo-cH%0-QV+pUrHo+-n9%v`uu?x zD-u(*9HW{Aal9{QO;4(3RqlQdiHES8?P6Qlb5Y3J+S?=Nsl6!Czi$FKSI~;Oi2F~& z6&#|jj!uF{q@2#P!7SO=ld2*t2N}s{+b(Q;(Fv?5WR0rdK?e^kt?C}sSN-d74L+Q- z%Tmp0=CfF;zM^E@zKu;L#3#~G(78rGyFdqg(`i_u?Lzv!+{a5L_&Fi{)`F1{5CCkk zz%uGws(vV3hjKzJtj2$z;xv!|M->vFnTkS8@#Dtb!p5juJ2ED_wER#V+I-HFp46a_ z$wXYNH+f21=D-8E!Yq6*P3q`yCWcU{pTH#n6uM?<*E@cbC3#@h?zcEOnjZDzKR+GG zy-#^(u7O!U&E+u)Huza1xG ze$!u{PdYP^IiOXl66R+_f82-cdXssiX3iA;fWtpId1n6HruCwyk2lh`I?Mb%8H!B# z;fV!ewn~Z(3hT7q_!WjQ{&qr2!v;NCO$TUC)3HY3DhFpt^WL-)^V->IX?SKp1@tOO zG`5x0(7qux;PJYZ@qu7Ajl(`O`>f2^#3zlo#`P=$F_?ovCe%Ah$xPQQNSZVfCzuQv z+%KyWNt^97p27rIvnjg4|KLBc_G9B+D_9GWJhL)&MqgEf9TL9ua_vv^J6}tjzvOxb{Wd^$;>I0=y;v>dO8DkHJ)Q&pXwJ?^zstR>L=whYSJB`Q zG@0R72VIkVhos8u0{31`eqt`KQK+ToR8l!OR^KlN^6rT&o&^`Lr@n2d*DKuUyL9dcL#jc*m5;~^=88TDPlu=@~>SD_zBW)S3Tjx8t~>6qZ+VS{;WRyiFOaarhTGdjswy z^R$u2nE!EVRtFFkB2Rj#tmlb%Vtp^8sQ3X0OIxp_++M+Xhafby$49{b5KGnE4a8H< zEbcixl9?;LbE9mrkxC1wqzG(j5AD?y1FrH_Rh&t9m4ZSKLr+=Qs>Oc{>Aj%$u?xsg z(?#fXD&f9(rw~&#vEVs#Q6r_H|jLTnax|#BRl7-7sMC&%&WNO0bb$ z2c*-_IRuWH#*ZVN6B=y6>?T(e4p<5`(dnx3emy(%BFW zMO-57iB*!TrO8w%xBdLb)avsPfi97v);3R$)-Qt0?@ruMvo_r#&RkGf1?XAh!jTI7 zp600u1J5sjK&E4@wlQpUkt%$rZVGMWozujmkJIwfdlh)Rfzr>qG#+mB+(=g^sVG26 zGo$M&a?Y1d5;mipr~Mxji5l!iFyIwwSUxoARNWRG1d_lIhvT~E)m`=d+s!L@pXsz2 zT3VkPI#Z&<92Y~zmbXgLM<%oU5BFPSgiYRAS_>HkfiifA%FDz!($1aJ+fFh+T+=#b z#MDoUJ7+-Q1|eP0TS-S9aAy+U(>nBj6?Oh33d7`d-Wnm5R2ba9WjjCce6E4qfD}JL z;O<%MfMCj_s5;$@XxMT2isTIdD#)~y;CGzD4d~`^Go-@j`fg-X}w>`U$ z6yy@O4}qWwwnnTJI=!ij{u?nxK^10lfd`&dJ1d00;%8;$B>yMCAq1?8;WgQNZ9##<6#1vKx>*oMwqK7YuC!yS7)WPTnUw7-jxpSkckT~LxjyP zpE!2(TEA|-`sjY*xSxxTDP)Wu7IyAN9xrM_BSJ^H8%_cPne>-6^XpXSAOk zFK69AP_i-CeH#i?uR4Z=kWTdV{Ha(-)UCGJ>Q^`cgH4foSnHo z^49-|bDJji)nHpYa&!BEYDQTkR}Frih_G7~`N8Qrh<@;OE`W_o;l8=n%Km)}DGG2; zA>UY8f5&J36`i#sUZX{SNkajAR_CG>9g-$>e=W2*Zm`e{!VzFzP}&L4`DX_dT6gMd zu_%sbgS4wSNra&5$7x%^&mpiqPRC7rKD4Gy&MG4PB4X|!fABBS(PSo2s3~i~io}i5 zznicILPXLfU62+E!UQmk`JI_CPX1Ds#C9Tu?hfcvmy_+dX7(6urQx)@*rxyEiZF<7m(Eaw>T0HAE7houAfaD2S*LEQ5+MQTi z?Tn%X1&7y*`zo_77daBxJfQ5K+wT(}8Jh|SsUs?k4ZzRjHaTHDBm$cYcy`neP8uQR~A@5Qk1#*#&drgq!S+A3OY%1z2jV%ff zwyY+O>Z;xOHF!nCOk;T_I@$F)oo1Dc@`+o#1asDXz^QYwc~;?!_y%KvM>pg#Wlxt- z)kP)CrL_d`7mV}i9M%V?)7gFzn`WrAcLbmnScWCDJpj&m&fuk26YV#XP?W&NLH#_)K!=h{W&Bc61@kj;fa~V;juJQP|(o4QTVlHQ&sL`Dxug0>H{$o zgC!n)fre7mH1&M*(~dekhI0KgUA zpln<{=0XE`$hj zP4uo6Z{Vo(K|FTl5Np-oQl{r0+QW>g>Pxp_zJ=a4+HC(}&^=Pv#TnkByg+*T8;tDG zp?-M=(6Wc}GbNVX`C|y~9yXu0yv$rO_70bIDPiJXkSg7%LtwJ1)92=Z2S)?+8!ICB z>UdOzI;6*K9}TaM8!h757{r0Cuw}g{SCd!OE4d{whyyKBACw!R3d(8#yOdj-JpA9! zKuKt%96pr^%G1P?VU%FKD(b}GpbdShSF~Wi9t2A8eXdQcSQ!bKfiP4Z(;I$)$^kkA z(Z4wg|D(_&Krn)tJ9R!d_cT5lr`Fj?Kdto&+#NuCQ28bzi&=QoU}!u({KdK_?_-1F zfaUg-owxE4%giTM*O>mXe+e)|#PnUhz5jvH@h`GugQ|yv=&D6$3N?4qB#%1&P*&)A zWj?tD_mP6o zVi9l$I;|Gt#~zbUd~I-bHXn>ZI6fi@HyIFHwn^va9AThi#k3|V?0z@<;!SR67onjf z<_>j#tf0%CGrD!v^J}}{-KQ8$#qMRqL!deXM5ZdO$P*YaSX#+*T6iKbeeRw!rTj+c z9UgP~?s7#w`HGyF)`y}~(7&zCDS+2*jx^{1i+J)h!EL|X)|4NPuff>^m%X81)Wu=^ zyXdEJ(7jD0MRO_{kUfDWz+YFo^y}Po(8*Rg{OMQG)3o;Te8+fvXAEa+zKp&>fisV` zjqS7v8>i4M0Z*gxvrF%!CF(lhIaHaLB~aapK}Mt7!k?C|!b;yr0CRuc_)qmWGD%u5 zk^Qj|g)7IEW?cw>JmxJ~vUjO$!Dpo{D+BD6(2s8S&)#>(^`%Y?lsx7#C+~DAb$K>K zf&-Rq|>60C6bh+Io#opOXwaR7u zuawyI>4pG=8>vMb!W}JIXx0DN_u7I$%{DC1VY>u^sQ1V@8kiscVpA-ly@5PuQ*^km?`01V}>Dnksi9p^G^L5P6A@zt;3#J*rz7#Q)jG}+RRNjAW zZjTxRL5wns%JLX~uS|+ME(k>SJ@)p?Dmo~|Id}UP$AeRJ@`S>rf_J?!MF6iX;O{#==MQ+SQlm;YWULnvGU z=*Ch2TD54^jn&Rk2SN!SMmKimGtl@_HVuQMz{qP;rU(g=NNv@bCCt9hqMK&&4v7&N24Ccd@>+ip)wy%$2g!Iy&`t zbU*8VF5vu~9xyku@=XhCX^}|eliLalZkpV>;oNS~&aF*bZZvEv3?5CU)kuLPczpBi zDum*9lY43s^+?cH*~q;uAAgEUIBnIk(rYlQ^C(YlTyaYDz}I*TIrxQX0s#Lo<_K>d zJ1*Jc>aPn$Tzq^UFo+N%70Qo6ucB}eR%swvndN4rd0)2E-xtt#FgA)HBaju{bTvlZ zp`ZXV;czflGFVt9wRWM->S;#eyK}iKtjje&O<9}s56Zna3KxklZLZu*q$EdwDFTo4 z!?a#Zf4k4K)uFtCz_OImg0cSaeFlCZqCW;)pZ*#?=cx`{SzBJ?_19y(=BqpN5I~rl zSNE5&yC+4cX_m6ewj|4QFGAfQN~l&x!}8L&C*$Y6(<8SrTi`~l*|z8qVc$~J-rl1- zt|8a06&oC|Kf_fg6a8*70j|~%-quUSSh)E991hc}goW(>WkR%e7QU9jqh!#r>dy?=me?5RQ)NB=R8QE6}OwUC#4X=q@}i&Gp`F(mAheFbq{;h9+4UV~A_>7Cd;cPaa?_ei zNL7`+3(LIkivg0tuiiWTcXxMY9PuL;t{&mWqc=sADB!JHa@ETxygW61ZCEr20((sH z2Ucewjp=3s;O-cB8gdQ-X>LWkd?3nRfWhayGi} z{9j@uCTKhU8(?r}`kiw*rTt%3Fb|%5HCX*WtfM16Bh3i+IQ|yBw+A|)S6p$$L9DeN zm#U15SA9~ud)GgH9HD94hGB&oTlj#RlKMsw;JzH(Xa(hEKA8kauPAnnsMN?(otq8z zvK}RPl?T^tr3(o-=pPIJa1E;`>`LYW4vZt;GJaLo%{}I^pA`iZ$Bg%S%q^dAmDn$haI` zdEc)>|9$zyp&pq#W|R9;?6v2Oy~)@eO0?I-a&}P}^GTLUC@9A`{~_jK$G@w04U#mk zRoW!?P@G2Q2a4baS%P&q4>mt1G6h6qK@O=oT?KG+s0EhcqggZ2b0ZGHs2n@eNmNA! zf>8Xe|6#>iR+$Lm8M(iMab4ZYqpXjhy4Yk-mqHjTF(}K4S$htkb z!F4hP)bw+O5cO+p(kZ^g)e12SH(5NG7fqd5J?1BZYfA_EyPycjE5rbhLn_uY?;t)Y zsn7Wr=#(LqQ_vt=cbaR#23P;^5d`8-o7)-9(cufRCk59zwb9^+>~##KDo`07A&)L8 z4Yo6Uq_?v={HXfQB|EXV4f}xIPYj&t>^87LC%@B?XQ0XEl^`bYdrZ=k(|A^Q2vtFV zfMcA2U}j{OJrt{g?LNDY29yN9;F_o+o&pNS0aP{*+>xu~ma<%dXh8UYkR;IMg?qYYzm2y*Tr6&fhkD@Be@;XjyFw+>6j& zOQ$}ke@WU6fF}q}%2zqzt-Or8>TqzSUSba><8`#cj8YEr2Y#bAi!ro}4ZY$$0?CtR zUj|2z+a@7OsUFf)4fh7V&`*OtFhjA%vW4}%=;K&f9CPJM0EKn7L)s;x3J+RL<4Pz0 zz#pDy?tLz4TDV(+3M?bJ#|uB*odteX;*T_IqJ&eRY3K&RU}+TE@Q~HY?qEn8Y#r#; zB2yht1_8v!O&gZ(w*`=@l&YAj>KaRykBr#KllznqMQoPTZ;~_68BdUJu*KZVzCBaW ze7|o6bHgbWA>mMUvRnaC#34LX{QIz(1-kdc^1_Tv?V%7Ys+)1Zs$^sCWc|OpT@pLn8Hu^ zjnb(S2fisARIxWYgse1A2&&RZ6kA0E(JY(i@c6-AW^Drp;vVmlGU(Y(rrr$|67F?6 z9Di@`k8o{W9m0o|a3?ed3i!nxv97OXoeWTiLY*^98Jw4jn}M)5JiA=R7-eBZhBgpE z&ma51Q3>T>$PsiQ0ARJ{xbu&M%C68A`M%cG3qd#o&^1Rv@+=Oc>Qs*h$*MW$9_hn6 z|97)!5e~pu(ijx_^2rwf|D3BKc|T7`uuCG~2#cU_pb-6ls7YBjoi+63(hDq;k;jm< z4R9Zec;Fpy&qSytl_WIzQu$-^Q0-lP45`#sBcnJaG{`JNNGc%ss3crq_c0CrcLbZT z4I<)>e3fe{*Z!u4HD*-Z>hBARu^2)39rv8i>bgMaF>MQ0y|hs)y#iRMXgC@22ea%T zO^r;sz27|pMNrw(lS2_bwSf92!&pc|Su!u>y1RgnFK+Inc8ge)usKPFL(vLT=J0iB zO(`y$iA!C{I`w7Cr?7#D0fS{u;p~U)M9qQ)2*xNftmEM%euQ_9B}|k(QGUJVyC&@1I)7 zv4$F!fF~(7r$yGJJCl$*sdYJfFM<%zfTQ$8C_;H%kr7!LLf6@Cc7te2GUek+4*~+$ zbX&(f=9vEjeF5vF2pt6=d3`S6ICg-fudjVUJdkl;tuS0I5fj20pL)&mrB)tA?0Tj5 zq6ZY&9YK$eI?Ou=7bSBF>tI9*>!u+XD3^wvuNkP5pu9u?vuYM4c)OvFcf%%~X?IYM zr8;ulyNXzR`d(JcTN^?C;?P`4u{oe;0eEeV51uIAsQ;9rR<7jvcmO)ueCX3_fAdvK z4yf8HFqA!7UWOCl&vTe*|MAc!j9tVO5IUrUNFq^JhEHEeUCFpK7UPM~P7^$g0nA?j>RRbpN!{z3;#_7MG@Dx>Gyzzcas3Q z&qLXI*^<=qlCbanhvexnXF#q6oZ&8DvsqAF!firkvi9oxyZa%s;iy$%RvXiE0H)ZM zp~Il}fknQD{siNV867uigqo9BH9ZZ`HIN-!*yg12bDX@8d zG+^mk2siuT^25%Dp>D|pX2i8A_U2xX>ED;vFhrLuU(ct&V4ZZVB~FcJhuWc;*>RZ) z{?#cQE^G~N++=*!W<$>#N?e7Bq>)O^EhLA5af}=g#qFE#+GjuJ&NX~yE;Nbso9e~$ zju>KVGuoly$PKi_Af=2-(!a^K2TeUoKM_v_0{L_A?h8_(bd_ddkLqS0awndZl)i~b zMv9#AM~3&HN?oNAg8b#O08bQHw8;P{q*ec{ffeuFxPGD}K>xr46{%mC=UA;|p&8-g>cSa1@eP;^|}xj-WnG(an70m5e>D5j_0Y`c$wgpQ!| ziovFiQV0Fg3gIp+Ai5xt@&w!xQs=2msGxQ96Es4S<;GAd{T<2_=Rtr-%Q>2}J=1lD zLThpONP`U)mxS?~<6Z8U{qn(w z-sp&nnOpQhvO9#*`XJcsMkg@%l>o(=zDqKV=ZO>zQ2Rq&WnMNH0s6}A=*YK#1tPtv z@M7t#VW}~^Ws{H8i?6h5GUD)P!}>5E@cP2i@#t8RoEoAzhv7y{(ZGG(+HsYrLYzx5xvI2*ej8AZ$3)F(n~6!{}{AobPqxA@vFN!2N()cEw4; zUEMv`8n7W35q=DSGZVA10&dv?kcN5&Z`M|O9Wq()X}(#Fe1sPF_Yg&SDsz{kS_rW-Q?~Y$ zKMAs5zDp~>$7kim88eI;(iAT(i6@1VkZc zY`OrL{sZP~jpK)5l+H~j@g;IpxpD8=l66y8lNDnBj8>27(II-F(ctC^$k}tA#dc?Q zd@ngoDn4pigeLnv*%Y*j_D$3cE;t#-@liiNmmO(k|CN+52hvPG+kmZK)UBaPe-r}h zmgKQWZRpmuEJnigG|Jld$2v_KkUse9Oa3ut`?sNXBz1d71*+Orm;fT9h>E3gjp@8Rw#qTmgA|D#YvH8t#0GO@(&Gl5=Kv{>jWuZiQAz;x?B(e}Zc+}{QdgW8lM=w4qeT07V(uSHAE++TD9~!8g=F^ z#pO5aVqWF8t-^(-uvT&B1DNsJ;8?A8kEug7xRgrP zf!iH6HL1kXeNUnRN(SsIx{Ub@;_r_{7f6C1fzZ7(lbA)7vt<-nkr?1UD4 zcM2lGEvl)9X$o0*{R;!KSfUsuH{eQQKwkvWw5=XhBPRd8x%HoY1&t?+)oRul&pj;y zVQQ-Li1mAf*>b5Q^cJ0?uG=h(w3x+<%I+$!$BLFL3mj>;l5eguG3!(1BoA9Lki}+f zqz%wc5p7etO%BGstWx2k>m>A@cXyn|iM@K0S-Hx~mgfg>{(CbyC-VBsa@Vak1v6ar zV2#wm9A!!as0{42R}Nv`B^VcClF=W`2elDs{6ZhZ}Y^>)*#(y&fp#)VMx~ZAMb!+mxforGCkoqlpSCM!e2&|6-qk72B zU93ZwtR0m(oW;QJ(Wi+`1`gOsxO?&E)U_@nTsP8D`yL{-!p5MKoZnq}T9^>fvNs@Oh>}TBctbHF0d&MQGp=Z9Pfi4w zB9f&i9*)gjgDrlR{$(P!B#(}Hf*5HC>t3;gS_w>C_RM$OozVeo_ z{^mU4ng1bpx=TM^)N?S~X8Y$enX!>nqzhsRSI5gb*eP|WT_&do(>YN*B>JCSl z0@nC(Ui?E(R~_UpsDQsj`PeM9U{r1_3#)Ia>(P|6#@nLVKlnwMO07hlZrg3uP> zXFM!iX4l0;o#2H0T{fwIKnHga1*VIFX?vuvGMK#G_8FZB#DyCu+mGJpt@pT58vfng zf}8ld@=*4g#4%Pq&KsK8^%-$||7ghWq%LFLQ9!pjr5!9$TK4UlkK>FaBTVanM@~WIylIiT!$M=D z2^E;CiuZCnyBkW!>}*kb3CX>i(d!@H7czj%uvMS7!O-Aw6UBe(-kJE@7Aepv?Kv zj-WmB7`^|h$N8HaeN{Oi#d7@vQNk;W zjfoL*iKSujaIpsDO}DNd!GICk{|{lml!5x^*XruGjtm?N%lDP2i8d&0%r3V=FO{!|h1{Z?FD%47 z0gWR+r7)EQ_HlqnfXf~EUBrwBHBDH(5jn5DX(KR7gSK_ig7!;bhs>`kpZQ0 zsO}H#6YPW<|9jbxs5Gu`{w?b!J^zRO(z$EDH`L@kOZ^G& zdQ~n$px1MkOmp(T52gB-t->f05=pr*s5a)yH!fUs*MX8F8&xD&WzX>qm=k<%_-^RQ z^$ro>Hdq>qGmY$ep8fCk399&3f{A)NR$rrA6~b_aA6%RVK}_GdL?<6fhYd?R599zd zXo@Eed@DyG8Mn*5BB?6*)zP)HpwVm?{GPJ!oZavU)g99YM3#0&WN@9Qw@_CG)W5d7 z_CY~dQ$>7~462J()hx6)Dnj)G%5=C=dl z|3y`YQo%xr<#5Y$75R7?Nl)-GmyqMl`nh&XdChc%^45Y6SxV*{D+?lFU1DaKMns23 z5-xn#-+kLo4!&)8XzOcP=&>Knm&E6|8nBWD@kPH5M4bi7$jtl*6*gYa!M&w8S%i0M zE$tcqiwX6Pb!y?s{&OFo1MWKj(Et{m^A!a)kZ^ED8ipWBBmWhAVU5W(4 zl~3wwYz`igVt+99dCHWZ<0QdB_Hsa3px7Uy@>sbC7{t`4q2a}-3@=JU6iewBE-1jTa%%{ z^?HyzIP}AfBn&NkM7RcsH#P?=bk#x8E|tFwAK@GvHmUL&>MMcY&xyB-@pOX!>$!E% zngqVmrAoE^A<0dgjB)_%|1lFipwFV;!N~NW{^WK=K=vDrZU0$JH^~HjY zx#@Wh*H-h0+{bvc9o>WaVc`JcgP=i&<)N{RE$6jRtgG=b@nA3tyQZnF#u)-?DSaK1 zfbNb1^9H77xg5cFFxTzV(mp>dHE^KP3%m z`SaH$R|e$qJemD^8I%@?eSf2EAO2!+&JObJ-HaO+(<5$~8RZLN41;&;J$2%H{QHZx z4+<_vgN=%hQ%zA(PVf;+q24q|xEn#+Z8KNa&OcJDisfR7rOrZ(IP}9Q9NgN<;wP?k zo7t3IMW?dC{>gk2|wxdtEQ3+Nm)$W~d0wX{A$-cTH+y z@NDhm^sw%N-5a=kAUeLz6ca&4kzS8d%Rw$nIj`6&4M4Lk&;stmJRNIP> z{r&WfRTx7xay{a_0Jn#yDc4!;*sXJ}edV#s1ISR%T`dKOom1QM=Ww9T0l#9o@}0lI z4F;gfUhU5kKRSU^PviyYemI~@k7sC@c#lpbD_PnM-_YnDb?&<8+kh#q)~gZWT25L{ zz@nJy1pp_;(uQAWFy-v}26x9}YHQ3pS5r*rQC4-JFai@8;WO;iJcT>Y-S>FJoH8S% z)Nlw2X>8mz`9WNT#VJv5l)H;h4e z$v$M++Wu;0_@UzfjSoyoN}K0RWw}53v|hKlJ>v5ehJ!wz6>FA?&>W%R)`PAnBPezB zV`+aNgfU)Vc^%y;Dit+?=kt*B3FC(%hs>>o9Uo?1BH~3LwOn5H{S&*2Bn-8+Q4I#F z-FFiGto`V2sX4hjT#ewCKAKO{Mi%K;;4!2w!p!iT=+V=Vs}Z~d;-o{)i_opLRX}u) zHL6o~(mOD#0NgKE!abU}aZY;2>8>M)O7S8@(!UVwvI8|4?t&+8y2R0-7W%t8i5<5rT|bQZVGX8=3Oa z$5`Z=d-vi~S0ooqAefci-%-LAoFL{+ET{AV912=doXG>ft6E%H1QIFKL!7IY)BE2r za(|GGtL90K2!V05hZv3m(1>JwpJz79g}PFKd{*NNeHtaN3zpEMrbuth+@?arfc%t= z_a}EqsD{dSYNhX z&bVOdW+liW+o;owsp>%fikG}ol*5ou1Knte-x@`FCJL0kU|?<$vMgfHebnQAFK|qF z9D5Dj7)dvLQJL0T@;pN=h3IO0ZB4 z2@=QD%QslJn?&O4^YfC_k1LeA-OSR^qRYDMKTYEOtIP)QR5LEBy{;15yXA1z3cZkP zHLgPQUYl&pB86IO>xmcRcQon<8aVk3EQ`t$3|wmX(h39+!wWT_G>m&WcD^7%8oZZm zpB(|;VddY<`v9hNAtN7I(A4llPfiN1nFZ147^Q$k>)Je;@ zi+YXl;lRq_O9VA`U-EOZ^5R*4;8yJQ&g`e88m zaOnoO2g32zOy%fQ<|_oG+5d8M_Dm}JV2>-yP=%05;_<270Ti?wy%eFy0;HyH=AJi3 zQVYJsnjpy<@xfIYysuD!VApYCu3n}`u}NI4A$t@uD&j+=wW8azqkVa=R2r}nkPwNb zjs?yPiTnq@4C0S4hYH!AWGN%}`L!|BTTi*<^otcXhhVxky0ZW1xl6j46J!WujT1}g z4mLkq)(c#G)lo5L~b9NAzC#J~gqND}*mA(iBX!=9#743*5s+JfeSJaP?txb=;@(`7{S z)YJm?n72E2!V10 zi{|nh7Tg~%cr51G%SL3>pxP=aK7&FJ?lWSR)Ks-hG&()ZzYE|FI&D5#3Yx&0%Qm-$UL&X^SgC@^8(|cc-F9 zk`JYnD>-+T7gWk3Ec2JZ^6{YOyTF&>7U(;2)T%-&An1KX1;5>O@Rhs<`ihb5_Sbg# zWk8#u3C|0amz!U9$*;u_1tYh>XRx2r!c`}+_uxwdi>;QDL#&+nf`Ls>)#Ao3NJeu`GlhhLNdJ#Q z>q;1q8^;N?7e&mND2W_xHyd^xt7;KUQe#ag6btw@M0Ndpjt^pCos$@^LzTM z9&EwEv*>2crcq5iWUB8R)><3*@iMkM%J2y1$~tx}&qphw714e;as|$?n%+s==*?KSF@c6SAK2oe5GDF|s6s zaz<5ZB5TUZFfZ9b3Qy-?JA3q(+JySv(2 zxe@It=`-}4jrbf5Zmo4x{P@|&ZbIwem{%07ch=wl>nH&|{#y^l3lB(SeOSJ|(%NX41ms^C8H3`!0?V;xJG(RU9L4S-d;dE5&tk zT*~S#SB363rm*TAZFko+q{7i$kJrhFUqtvb}!Us!G&7FP5CnzJjcoT$xixf z25{2asOM)Jtxp;8c!ed#|AJc@uPSvCSKfP)6lZ9PEe_k|XuX%fr<)p)z3KeJ$HC-c zFeMkT%R7TzxX^IH#7q?xNgWlt`n*cl_5p>2r%x~H-a@*MK(jTSQZD+rOF`}t zHfAn^q6g}n_PQl?ca3zCT068}3IangOCIK8Ju&ij#_3y1IX+yBSL{{sG7SFz3R&J2 zy&#f`MHzrp2BqM_8ff%};T|u~it)bDd9hfNez|zgX<*xSJXwb%!~k{Lplu88t;#jN z=@2{QtxrUqRRt`G#haOuKb9c$dnSHJC|P;q9>P88Wt{J>Lb+%c^n{6IiD|vF6b}K) z?{P|aJOM=crMRI!psou|$36eoQudPunGCa5X@yB(eA}y8dxIk_HT09H%&{91YANAc zk~fYoLDGwR0G5*Wo6myN=Yy}>#4WHx>`8Sf&DgAC z1!DKBYe|toE2k@uNvF+l=!I+SQ`eHO{kN$**K!giB||Q1ZfMnH(J0f}SO>Bmp=(CkV4nQw{?40*YWGHliz2b*VqjYSvDM&~NrP;K&=?tp*A;mWHqvfOO` zHpAM|5Up3CFEi~k*M?Un5kh7Wv@m0~eWres38URDPo~AbNcYcXVLf2cWTl)%YT0#9 zau7bhedt&tr$r9n%=4!_>*eD19;wTd{uS%-Y_Qzaq7d}3$O)7Keui;89z0J^)k3|c zhD*c3=9;exy|2@)>*p;1Ykg26**8vOp6VOjc2=Nw>)`^(?eeES3Hrxj->4irJ7r#> zKKC2BDGRZkkO2g+Wf{2@EiT?@CI?4f{d^a*IiShVlnRGUN)pvvF%Zan6?Q{9`f2QMN7 zTn+1@@>xp@e2D#%V4cs+q*pUrkQnQY>=IMOY+ zK*#S8nDHzq=eO@^-mpjP_~Hz41;#iPoL*E=E?P9wEMCgh_ki6b?6y3XpCjwJf#Rgl zk|Yk;IFqpE^=0fiSeCC6<6s#2krU*ks}OtJLoNh(jY^J=hMa zh?I**0JNDkpdP*Fs1p_%>xs-CmQ`r!D0P`QrTS_L>8jbS|x zRK(s8EDwP5Et}Hv0(ZG@7&t28fe5+^@T(>QPaIa9N%j){P)-WWi*16J5Zn!m?2f!Rts9F2e?waO?jf{j2tVLK-?%3AmRq*0Z}(fAi_OgR z&?v@xy@IuUv3TQ}U6`Aykd15`m)ajT=JuuO?d8>6{*Meul^F^}9MuiT>poHEG9A9? zl&&afUs;2&d~j_8+93u8x&1>nw=U(MAX=G;@=RjkM5s8)Oj6XChgo~X@Hn^;X$~P? z7AcK|ML?Q&wO4)Y)kbbJd$#Z3mJfkBGsCO^&4BX7;iRM7Pr9e?6VLC|4D`}`tbv&; zEcfJl)NybayF=K9iU9*KH?|_6%sK=Iq&sQ=bxDJWxk4o{zF*PE%CAy$nt()40$I^u z8GwSjnJ&`kuM=d#Urc&eaSgTZS_?A60yf`X^9X=|@RZ{dK@I=084%)@jKoEZo`bZu zcW*k^S6MK?T$ixs;xV{j=NR{Ee%v(Nu*6kA{{;4hw?^la)&80MTIG zRIU+0WX8T%J!N%7_X7uI*h{O8 zXv#;Am)F=|G9}6(!m+WZ0cVLB26<2Ki@jetit#=c=!fA(?|5kKZ8&N#_I~xNKJRk9 zR+$A`aX{|I(r?SwWi#E%#F`~Vw2h}9;3vP1Sc;QZ*=@1JlZ4JIR5GSoz5A0 z{i!SDbo8ohdZd<}3Wj`SSG|>hdF^0NLvmhECaN$PNCxAX@H_T-2$30Jio!l)Jdv1^ zx5j|fElpk7-Sro|6wwHiKk6RLbr?$>Mlzi+03TOwCmpH;9|tX(gkDXKNd)w&DJ@ zQY*KDnq9b8zXC^UAm|z2sx$}Bn})#v%K!S>L4w9SCf_0_?Ol3Yf6r7fP}g56O5{l3 z!LSn8Ke&{gNn<|6w9ENAxE=##?!7-hLx?u$9{FPj$ehDjI|ojaT~lAgdy_t}wb)1o zlk{2>GItgV`P6z@jjl7dE&lcFn3f6#F-Cl*N8fyFJMhhda7>@hT-d9wLV9Q-F;X~a zTcnY+!UqhXf4rTbN@RNOK;7JlVlFJPqN$1l-x8n6ZZ>W_x7X`B`96ia`9s8K- z#t{J98QpA@75YNGF|cPF<2*F+Iz(HCg1w{`m${L{^3@!riXyX&AD@EPUR?@E6H|$> z3FCU%pK?K3&BBT_q%a?>n|ZaNJd&E{9%RVqq`fu#F?V>OIa|DOMm`XySEbVYEktL_ zflXmQJ!LeVcKUJIkOu%?KbNE@+hQC+O4r(>Ph?V|BMqE=cx1>k2nmQXa% zcD{(y^_Oj@9XXWi39YWZ=lI|?yO_Z6WEu}ZK)=&Zt`9%*q;pS-A6vAJSR{>gW3Ug} zc=v%(&}axzbUm~{Bz>CH2~$8A^4`!vKp1nA9v)+?)i@;Q_Oby@1`mtWnkZg|PJGt- z9@JEfO|3{&JWwVRB-7M6kBskGb#yVPA$@fS4EW7ez28buB>6D+L=_wow9@?-L-qh;JvY+6G_Bz|cm_SbY z0l}nobz_Sqs`3F=ow=jLkDIMoS8au0Z*ohcSzJL^WS4CUG5W`zDQlE2Yt^+_gkBA= zY~U6zrP#S7*xIZ&_yV+UHroE1rp!EAY&E^>v*&&Tr5Woqo^1D3CT${hAu&5kAG|f> z2IemCrirV;xtA}>F2WBDl?17p=5I5V2Jr6gO@QzJgb#x-+y5$o#Tup|ChWa-r%<27dSLL~I zLDIwA@?zRAt0Ad|Z_+Pf{@h2Hh;#C&cXT23LArsjxL?~;(Ay9~t5CGwq6lfhk5yRg z1btgGZ3eXGYxE=?cm%~Jg{wwynp8GhRXo`n3dPC}`nHiX8pzsCde85(AxTnBktxyt zn3*E+N$+`UAihlw4Rd}i>`zjI$nP6$pOzby$>H@?peRSH6-f<^NRnprDEvkwN5DT# zr_eWe+7$Q}ZhXp9-y#!)YtR8G(T%+fOyEH%2X4{x>eL2khw8)i$Wg}ub%Av|4Uh;9 z$Rp3g-8CP~zfD#m;=!at7nAx+LbWD>;I@4>-~95t-}CX7kNqT{Imu>zyvM7#grp14 z=Lz0kgL*ZJAfU3f0kUE<3|HIflJkso96+hxdn=&v(PR-)HO5Fje*|mR*L4Lt)hefk z{ohX5uLij3oTuPahe`iBEA@-yExuHwcVkEijV*62pd$LeF5R#E%Z-8Y<)4{0M zr9dS{V9q(14PIQ3vL>}LqihJX%D)1~4Gkr(MZ|%@=#o3#%mn<*{I?7s8O*F5iX`5t zYllkQ0s92gSCeMn24uShciQd<@Zk#}A)-+$%@U-@b_=x^x)(jxl}6sw!A^1gi&F^U zlQM>hm8gTbT^RI*Rw+^<2ZoW9*eYaO zm_KgnJ8t`IsgNQzh(a2y{#59OX7?!|ncKEuH*(S)2ox8pRo_eiNcNPqj$7h8kTNju zW=P9tmsy2WCKGgmVg-w;CBaHwk2(u4$g^>Z75N*7(Uz2-LVdU}ATFS!SnnpvNL5g- zCf){T_r`5lo8B>JLA(C)z+&0x@MMbXZe=a^y&GJ_-aVOjmXCMn@fbV`^)7M048%-;Kf;MnVx4Fu0uBEmLnBu7>cXY*$$BkI)$bv1ek zvBS><;VMTgO1`<1(6veWZZWm|aW`HWV-R;#ue%R5jKhgkDx~}vY%`%h0T@DH0WrC6 z7})C7H=@-M_g=XNIfTVXNExF+cL2kn$GL8`-I<;{(gwD8`F@}wZnJ5xC@rI1Os`}5 z*Enm?T-nu_8{bTykd1rS%KgMobP;4ilFpTW5&UFO#9xPbSjn_mP@Xj*QVjU~D>7hM z>cig^QdmU|E%Np5A3|sygr`l455744fPzLE|2$D6jQSnv$id7NM=c^-I4D7QJ2TY7 zlZ6s+N8Tm?w8jI)k2XQ*l)hV!d%OPKk0%lHbn?y{RG`q-TSjj2a-~4HCv^ocoID!hU#bb#2JGxhoff3#H~8(%4ndG<6HKbY+9wE2RFBR_l2v}h+H(^?OC> ze|a9j1>`nF^SOGj9X&AO2E#l4+UQtV14P0=`c07!D=tat3NaWvCZY9(jroxk;@qhG zoWJHS13@N81b|9cbA2@eJbXsoY6f7J6}|Csh6u$}CTmL8SrhWkZx#h)0ZHWRwXFP6 z4n&}|Pf7SFj$lC0r|JRQ*s{h;Gd!R3?c@OIQS1p$Cu_2|O@H`M&9NxuBy^6afFUMZvWJ}E z*%3wFputN$>gveF81*H9{EHx74)aZyt{nBu$RH--Y2E~MoX~BuMJUFK*qNiCJ_3Q! zu(jR!Jz^AcLVA}u;r8Q3OB0E=)FG=D?lv2vfLUJ+u{JxnuviMAuK-8KQx4znTJqfw zRnsJyHHy6X*a^vO&X^hBtF^>P?uIG&nNvmWqFWg9vtzY%nZb)DGZ?qf3uA!}5vO`m ze~zuadRzwq%~)=W!sG!E2?ILtvuML{jPbhp#Gb=&Qv#K3vtE7AvYLZ_!wMOoP5l@^ zrc`2iHpo2>6h~IV&>V(t%<-f+FunGKA8cx!UwUC}NMW9(F$T%G!AEWaI7lF)#2i^o zr2H)e8%=G_?)*frziUb%ed4gY`1E}nzje90Pd!N4mrC5j0d^4>U>hyKjVYr6A!nGE*Yuz{v_FV@?+4LW2vw!RdCKJwc%2kAoJJADBr zx*KZCXXxn=xdEeOoCI-mFyAH>>AUW?&i}j&4MNgf!_%{M zW_C7FM^dHX2dp+lHH_Fje+TB_MVm;@qZ$NM`}7YV$L{>Fz=tgkU-qOxhD&`+qGA4C<@h+=EOi^9Gp3gL zV?{}nPip2JK4}lv+XPa+MP{zgU zM|RQZBubfY0cnA&upOS41xjypeO?_Tl-`6ft1dvv3HmHt{Wb=;>h7svzsz6S#wqbu zfs}ec%6^xo?x`8Zjy}g7lXPcGmD)1y!zJ} z`xFFqoO}=Qn!7Eoo>(&l&qd9F04os?@-AImY8Vfd5l-cns?J3QgF$@&0dvJl;@VqN!iXzZvW9M(X376bDZ@`yW| z*az)1dba*80l7|VNAB9Ul|%I?CPfPsWb5tAyIYr^)c0&c7DTxD74Zh6~TC#9e^DqOJ=Gn>{gKi zGRyb5WmDW2=G1oruUdVv(+d^A$Kf3hOOKc#FB+~u^{YYwQ)1}1P>aZ1FSpbE1A+#K zw|pJrivm!ubr`2vWGj`9cUOCsqQ}@Ih8ToROS+ZdTOe#L=h9deH z*Xpz?c9~q~;Sa9QF_nNycQ0Q~@;rj3P1vV^1I=dZ#XdxwBu@Cv0e}$(2JZa4EW7gn zXRpy&O{<+&iDljNb@GC>w-I*ceS@F_=3#Hi0o*7EaT1$c78Z|BIyE_SVZ|Hhp{zB0b)giZ z`Lp0S;#zS;$R9I7_pA8%0U8R5UGK)B(Z?~JIqwK@B=?iEC86R#7`>$j^U_FT!xWO$ z48b&(&FiWZ(w%!uZb?k)`o9RKT#mwq=KBt)W9uWJ#WG1;hO#b{t}jgw6PUPVwE41*Y&lUNs3tiZ5WAdH9LZNR*C3! zgZ01(FZnm2O>XNRCo{hxEoI^~#yd4uPrUxMs9TqX$mcj{})D^^v@oRKDE4 zyP3ucsPL0#-i=+5p;PLJ?p%RDFTfvaeNv2hr?}V|1Q)44yC?KcSXz<)&1DAFCJiq@ z$L$VSg`Wl}qgxn#ICk~byqOM}+Mx$GXrO@PnFYKd!V?0Pi3enar7#DfqHp4Zf4QYv z>nUk2NsJ)>8PW|tVU{Y<%vZn1`~%?kePw#h>`W+f{p5IgeZk-zjkSQTOGBj&65z82 z+6<^EN}`I^?r|zT{&gmA07;3g^Vu|)nevDAFsfIdJe-Lp!$EH3?nWL!8Q7Cz0J{~( zA1M{>X6i$ZSs`xm*0y9lo0nJh`EbHt^}+!@p?q2JfM4WNL~SiqteowK?R+gR?Vd@R z%XfXAGBt$IMYmn#7s^ja$q!fsHUYFDl{tiYDDGlje!TsOP`!*4Lvp)&gO!t4LQ<{( zWxV=`)xR5!2$nz8ROsfEB{k2C6f<(9b)965frc4 z_bpNV4=WSu2~vScH&~Ok>j;glEzd1412YCJ0NpSe3^DK`L1@PqVbb%~obxWSzNf4~ zc(ngPO%T5niMax&wkZD=aUinx>hcfur-Hfp9)+ka%0?BTjZF0s#KosFepd+#Or8U9y9=vv2PjHO&j!ld6PVAqMe{+<>v$%vIe}g9+U#@zU?m2#&Jj!27 zl{-jw7JI$>fX)>1wbeB1_77NRET)u{l|b=ZZoa_;SnhNb3o%*j(j%EAYNK?gc>={% zJQO#HM#O}zoEnT3e+YwIH9!B>xupCItj7HJf!OD%Q2`}mRZ<3joj(*eUj2u#*9c)Y zj{P)?;_3CxZmkzgSP>OjT0N2FBcV29Gp2yZ+64svmPfIzA4q#g9o7t++{OM>F6gYZ zVnkoD==BH}Wh6>ImB5XWGZJ-GOwiGGe+?(=!lDN9B0*PW@2{6OK~9)=7)efIZv6~k zyPHu-o9*4VE~N3T74WsaBmS0w_3v3J4yS*N#VTD=eY<3%HXGSkM1Kq;ma1dgq$fCU zt0A?dE{ z>0KK?S1ScT^YdnRO+Y_V72w8kf1+X*1}Wg`nDAtd_a3kA$n7=pI_?;~Y4ctGL38Xo zlO!=6hWxJ}jD5vMoeLRd#(QMK2yC-ImRHA--d^>g-_n(?#h$WDws^vka2H&M918TY zS@Y09)xN6sp_hYPU{3)=i64rYhqu-0D%ZX6>-iM2J8^<0@93-yP!oEDKlDR{L2K*8 zT}yk0n964YyqhR5rNd@+&Psk9qxi{2J&c8G-s8f^l~Ua&2=yNMsAM@IrM|~zL4+`? z80?RBScRp8vceSEZkdfPnWI995yoK~w&GalX`py+hLYgs^fn)B2-uQsCAs|180At@ zWmQe6TG~$75-E+pYu+?3Le*HI+M3I+r(CQ}j#3R1QOAYoK{F74E>8s2B{|YPuWJbm|61g*x;%X4;)7zV158Wk|8Z zj<&PQL|L`KUt#33hz>wUB-V!(;RY~a-m^uO2?~UxnKj`vLH$n!`hDl3RIL`(BY2Vs z6+K>cw&?3VoVL?U;i*@C)n7ryuOp@RVcEoB$Sp{?TeA{UIsSoP9EXT8HJVU&ItlNE zfLTSIHdC<)xr% z!ys>*W!v5cNwxRhJp31WK2$GL%6rOl=fmkk9{znF__jcj802;<^&oXR;j7EnONLX- zW9Qt{mcB3@-wQn`wb+hy*_}Sk4jAVFqzq(qw+#B1-NL~pdsq;;*H0it5BS&=L&J3= z*bMz8rIVul5`}uw>GoWteS>X!X9c}#W7P4OGWldY|8(1EANMy9tq3Fiz@?|#_yLdU zmRa?nZ`7`E{8UVSkkGDjeaFnw%$CpLD&DBx^PeP@->0JN2(EWS>WK!MpmT+lW{x7l z5I$8hjZNgC)FVhr*`KE?oBk|gE|RYIS?fNz324KmM;XDYDd2m=^jH+KpwXN$3IF}V z$_9TP^$*gc3b!h?K5=7UR>vZMoIC{))oCZiU`&2`jE(UXqZd^t?I^2)9*U83KB0b% zcjJ_3Sk!B!$PV`o!MHN{2Q|=Ri)wmpi>v>Jw(m(Hjx4R4;`u<2nf|oNEV%iikExIr zb^!CD7sYm7!g$(HdjEzlfZzvsoS=e0?pYT%c{B0L|CiA`nIiT+YHAOblpa=3_)d3jfOc?GSy z*|Xh?%ju$qd*~Y;Fe*#F?+27oWW$d;-YFv-_viy|n`^@GKpmm;{Yv)*#hE0wS@qM% zP#wxF;A`y0|4SHHYvU-MQ7mi_QJM6;dE}7`0zidTaRhCzmYQciGCQGxTRFsXW^=!S)b}KpJ)?s&eYm|m3 ztE#^Y3jRbc(c4T)t0`RTq}uUP`K~~CSPg0$y=&sU+P)}Bh*@j>Ue=we$o=q7;~vav zBlX>~(Ry1Fo-7p>Y9#WFyc?w)5^7N~re6b402x;9m(@(%%fBd`ihX_Xk%sViFMBT8 zHa@}QzExe$0DS0)GwkX4v8NR8jlzh7RxrTNt3pjAzp={B*cCbr;vu2x9-O+R!_#-i z5O*smOlnvc&^aAWSyqD)0?=(JC((~PODwBr8znh2H3h&#TFo@GJZ$C$xS&w3Ef8gm zbrriJ`ft&0{FelmCXy(w_+#blY;`jIa^*B==N{v?N=~f_bA8HHL#@*r+;3wDXC^>E zDFv8nP?{~^o^UhdU5!1_^Rn)*Ozvcls^GkioPozK?6DzNLsi*em>duf{He_{ToUyU z`Sn#*wv{;fw74FKwxrf6QYr|rM^S^u4*t#xf%Qk(%+k`x5So=#8!&qxJuD-y6kb8h zeYzX8dFzFPqCSz4wO4VKUO~KAtDiaeF-AAm5zHBoYE6nu`1Lslx)q&7uS>Rbtuy0? zx~_Lr4H(XL%2p>PzF7a+oBwLo4y+_)OOO`bzEe+DMIDP6&YK#7GOfi%``zK;B!$23;y zN5A^%8Nf9?9RqM*ZSfXFU&4Eq68N+*V_)d*3^ABD5IKh6x5{}+X`yTTn&y#ng}tCD zy2k~e{&qQwvEJ{MI;~X>n;-uL9AMtR=jC1dk^8`Nr-K9 z-O9uD>R9#O{c^avnuGiPp3&8F)g{zDv7=yr-ISgxP!<=rx0JzOrGhV-GJ+G%ojNFE zY|LU0>t>A66N&-M>%2(KX1&Dm_r^s(9eLY{fbR$ddS3l#fasBuIQS~)JC2(4g+z0e zF`nZ(K7&m0u;jNxMaVi(c$b-Jp*Xe;LP>PFhF4_05a} zBc&-6x^4ngT_CDhsou$8xaCz_l43{3g@8Zc5%zm32wvw;pkvY8J_TMLDH8fNkYlMH zG8(H_MhP<{r06aSfLSzhA8yIaPkxQLn_eB<6( zi#_Wo*)y}OV^F1EkgbqpBMNLL5d34H<`=8af7$h-74wwH5UHrYbqJK8)uB|5DWD4n zl1N!+GEL?9a}np?8L5LRP z$tdnk9XOp6Gcv!Qw|yD*`aCU_TI6dgPZK9SC`KaDje7&WaOD) zKP&rBrhc(e^YsAq?ZMBkmO3_m0B}$h-a`o%mf=EFeXqox#KH{shB3jFLDfERyds(u zl{v7Ed=E^Zjnh;Blu}-RO70~Ncc;)izKnaefaq%PcZd|2Sy3`n!uD!h-^uxf954q3 zhxIUbbxyQ(VEhnDp)6EXpJ!dPe%x}0HOYKWnb1L_KIWN^OCM(k5{8<60t5$ZDJRYg z2Hpn$gF~3yk&3sdHdYXeS_2|_aFVGFEEzmN$9U=JDmM<9Nb?o^ke|6G;5yQU=r0$)MSM{jCBY5s*Q|KQ)`L z%8JY3$L5}kz?EuJX*vXATksq>QArAGB`1eivMDL1mlcNo(7Z*)M>R zEVAy|ppDfueYqD&^t*RR;J=mlkiRcvwQ^Vcs_P@ zH6ku3-iAWd`j3a$;8=iQ&hPb8bl3ng>~{D+`>i5@gr9Ci!VAS97NsvocWovY$c=iQ z9R^XGd(eNZy1V+H(&AJc%j6a*j~hv7(!NwEIZx4ygWon-KH1VTd0vlI{&?-9ApLv2 z=5yvMTfX_dcI*C;9t>ex32T{r4hx$ruW)&W|J%`SGa-=TJp)&Mo!wR zJ!|mbT|Hoa{0SyFfhhg3w%W;|GJBT%-Q7r;#F%>Zt)Uw()tssdYX8x39f@4HP1T>`j^B(jOqHG&V_!6(r~08rAwjawB2SVsKAn=@HABJs4PJt_9d@X zHDJo8T_!sWW9<2H*efi8uvlL&);2;JKI%mYCQ4~!>c{Wgs}dHIy0tfc<83DyV)o$8Wdf5kGaE;{E&qiI3YIycPa86>`>pdH219yluwagJ9 zkTU5(t09nbK?B`SC#+8ifu! zWX(G;!g}U;x5bV7oxb%ug$Y1ct3Wol|6Ts^%0q?N#7-MPU3Z@}fm_6IEoth>&9!D7 z`6=JSXO4*2e`K={ly>bfD$NVu=5jU4&HfbrVKzQ!AltP)Ji_p3G;789`xO%7Ym`iI zbVANw!9@5UO*1u7y})#B0FD#3!YSl*1X!Y~vchuCBh(%7NKE48tIJVNChv7Us=e#Vj@YZ~=}FfJ~@ z=p=KI2v8{55+f~!Y+#7GTM}NPqSPRTSkHqs*R=?q1hugp{bs=Ei=LgopX~Q!K$wi* zNONpQq%lHMWYdHICL)*m^VC!%Nw1AmbMIn^G>xfETMJ|zdjDmddxMja7({P|R zQKI@UiU6bp7;f>)R)X2l>NCvweX>>(N!D zn@%`ZGr^6&0w`cmH%1Zp?JPlWidw1j>zs)l4(o-*f=x7XK$`>_r6_z=aI%}e=_;qb z9SEw2VZip9dV?>L86+se(IQ7lbBIz6`{49XV?@o*CuDXDcoT6gh3qN-H+xe5G%a3&6;!QkD$m#squ{a*#h zz~7GEC8Bf*@s7Y!1Qej!^sx1T`OB374EW2kbgTJB;4SmQuuEE(*r(Xy{)$-0=2mN+t_`1& zlfCn*Z_`*P9p713g13HxuOnqgt;25-aCsOF+Yw8A7i$}v))JyVb2S920$+BBN^daWqd}ZK2zD>I(O8W)eo&u7TXy1$7@T|nN8NcY=`>U=!n$xWV;yt4Qe+55%M;>lTAqPxLM@Gd#Hoc8I5Z~@z zB;!J$=S&4#0?e_5g{srA@5eqKjWy#5V2feUQTl2r=*OPP?N)>GJqlf(N)=qc%ZGkgA&i9tqVh1bp3T%Kzuv7%HvCA{u1wd^4IH(Q z#%-(p@s0PXtRJHa?bvA+_pPv`x+q$SX%o=E1Sn=PXPJate*Mj+YCp&sEjQ%=#syk`>XyD`9 z4$N457Q~mg3{xHm$RJ<4T!QHEBI|YTAneVm1z}v+c96y_u~zX?4Fe|7HE~w` zcVEzUiL_1}q3c-ET0}4m$^X&D8h#wT4uZ^oR7T}80(U+20w=!FOc(1W3VMF2J(?mbnR#t}+Py1pmp4(iXQp64-lO^r8HB@oN`!(d_$?vhlSg@o zY;&}wbNj*T3xI8rG!KVLKK~;kSL%wTeiUl_uCl%0LgND-M**$n!KG8Hm$`gjn<5hmSPV*8VHYc~ zBqR~221~ZP@%hC-&CN2Gmzk2*-C6w?a5;AUxb~qXSGsu)B1Y0z<+#KyjnqUK%%;<- zlKOA;x4GXb=g_LU*NG48DDO+ZFM7ifoAXeblMm$C+hMUZ(N#36V}hX1DQ6b#`1^sW zTOVD@-lS?-4=vgx&AE+O`rNC050?|7)lH)(O9TzoRX z%zJwofK(pfg)Mkkjn>LQi4oGuUJeLv*sH?dHd1OzdV+O^ejt`S6W7%}EAW(@-i>`r=oEh%~0P%0+=0GU`;@5L|qrpJ+&e9_+DiBl8L_8{y&7l@7 zeojJ~FNL=!d?O~AN)N<#MaCS|Uq~{}qrPYvAh^IgxV~rVA03#N7`ce`l-M~iM$^S5 zG|}u;|1YUs=Qcyo=c=XG$mOn!MjFHe%a)~8gnVwvm#Y)$SQukZ${zKw>qAgw-wUjn zhTOagCiNm(p+tl@SJ^pxtwZ;&_U04p0h);*O&3dWGl?$p7F*x3qJrL++8C?ek|Rl} z`<3|)FVPBWA39uO{_j`wNCqJOhW{yJ9wA235iivPUJtSJH1D%QXbwb;KQq zu5zb%@`jMBM6A5lD8nxr9ExZM0PdM+9g&`zC54nxFOdK}BJs39Sz3m^qPCwXX{}=L z7Qx4_8WKqljJU~|i6{fdK3jQ&u9OsV7tEs}A}U+*%ZeYoS)HA(ZL*CzADpCxxq0lg?M>J2Y0^Zi}9} zXf6s=%*z>8&sr@pjUYOFO3WxC4q`)X;Z>`_c?%-8$E4=-XlFq&;?^qA6-< zlI{4KCETY5SL8Ntm?i@})?(}4gVI%Y!yyUPn36 zq?4HwWMKGnig!YzKP3{4f3AzZymQV7>zv-DVFBe)1yLH}g{RX3~7k zTMXhLP`oB|T@QIp9UJTQiQC`0S=0K?obXkOo?Z_%5gS*NzH^Uv#Lhs{BYQ5tFBoMG zqE7?Sb>?%e12vVCF^eo{T-3#!jJHf?xvm5e|j7Q+yBL@6NURWSP~VVYwxae4&H;?fg1zJfYJ- zpCWn}lTf|E8%!qic5g;~|GDFE#6UgFRdFTuymRbVNU5=L+xUuink+XuL7BuV2Lqrq z%+a*k1ajaw;F3HMc%l~#-$X#k_n;HN>-B83u|KVMCM_$YxRA9H5If$( zo?21Z+T+}jiC@O2NsQYDdVBFnhM zn+3@Yh=m6GQ;~plnn6@5;ekW~w*@&ia1RJ=YK`EuMJ2c(VZy>*FfyNH7k1a8+Yikn zE993`LcSz!4D08>psT{ZQbr@qTdtsUfo7C0(bAhJ31T!-!64^f%-X-3K5y2-Y!$^B zeJAOvg`u@kaimfJ&pHjI5(BQ+g=TyV^fTcX?#C-SdP+D(#OMwzCxCmCsR8(d`;n>) zbjIMK(Mnx$pz6{1ic7SyaajboRa4xsL?|c1*snWE4YQWQ|9=_I{SZ<6RsV8z64h(t z&O6NR5fJ)LG~0VGu*z0Hu5fu1R)wVpzDDyz_?-{>JlW-9X?LO%7e${leP`l8V0o#6 z(!<{B2CQRJ;s6p{E`>^-#|%@GDw1el%xXh<7}agMK;fQ=BajP`*wfsq__xkXOp+qV z8btG{|M}#w%Nuwd5V)0FOO3^IT&eP&0P~MG$H#_KRdD7vcWLf0m$cWdps?Kn}Z_5v!uNO8G`?1|3h=#6eB=7ArE7)gnZqMunYSw%lNUO zmPxxmh2CLdId3L5n2~%XLYz=z+*#MT4gVXFUst&`{VyW_rswHE*ySBy*!iV&+nYkk z)hVuP_PTK&nH9+Jk9sEvzG?DMv-zp)rJct`X~t#mdyUx;RbL2ePUeP&&SIhghSh_; z$s5T7`8Y?qFy(E)2xeApJ1^)1EiXmhTPdZdf;Jjm5_#Yc?D&Uh()9&B&Bw7^6TzO< zO1Aui^PgrH^tQ)m|7z`7var7EXtQPV!lrs@3th_F-vr2QFv^}#(Dlps_R2un_$v4A z^ODVMGU#2FYpJs4WM$9A<{k>f0Sg}I0zBLtDwn)2n1Fvbj(S(o-y>&5L-FIpkAGEM z$wg%0C(k$6dtnMA&{!>`uo(^$d>X3*`kqu&Vwmf~bXq!aJDK$EL6RooCo?|9tKv(wg`c zMVZWG6$ z%O?=YZAcj3L`FSlJuMV_=47e{_E^kLM94^J*-xWSx)n8=8{>f_TS8!{lELW7u)G4= zwUH2tb;e0uoSwQ2fA-D_R_Gvil1!`|A3~NoPi%>6wiEH6k&UuLMxncAVJ93!$YXH( zlhzO+acuSflnC;w3feGB4>#<8U(#5b3vRJe-t=g373v94{81yi5z_cFFf2x3^tP;L zq);_HA%aA=_+sYI@n4}XR?Ba}wBkSvS*Zf_RXX1~VsO6E=dJ+?t(RTr+bw*KjmLd* zmT?<#9|26=b3ixyGEel_st@Ymbt&`~hoMhRLeT?4GP7;vn@TX#KDJW%WMeZwuB|)r zCowti%406ck@j>T9J?cUiFEdU0c$g{WvPBw7XoGvUw3T0I8C$KDr(tP2$S|VJTsKo zbLJxbrk>ybfb8HhdUjjlG3?$vgB>g%{=;8GtB~(0tI0!F+M7rAVmLTt6QBcBwtL{PUyQctXrwFd-YL3_*mwlo$0%;G{W6vAO6JWd)9rhBm| zHEyMgGAUJf`+=qPFPer;km*zN3-X%cZ@G-PPX-zp zF$K8Mk1kZVQjmg8xb8vcf!a_+i_7(LcQqp|gn)n1?pN z9jVsLFBBZy(3lId1snmi#0-NHI4z}9ON<|5CU3{P#`(F707KI&lwG_A5NC|Sn(sor z-(P`!>-E*A`vkuBJ|46Xo(}EVXk#^q2XmwxF(?#@QM{Oe{_k=2KjL4PvFvKR3cq0l zIx_pdvOEP-<#vyCrXuqGj!?s%y)1-;9l;8iWlWR-A;#fd9L0`zCpyvTk90A_swz87?sU0>Xgc%Xr7lWm@|EVKN0) zQBfqrc$pR2l|!K~g2MyS;5{%m9ro;~`M266ytsDJ;g zPd;W~0J&s<2EeJ5$Y1&1L^fAH_Q?ZhuD`sCopM@bTL_5WJ5{N@ncV7Uczi`qJM%PO|p7UNYe?Sx?aO z8HyT{reB<6jy*I06NRCbAsofeXnFT98CzPEE@xwqE6;~lX~efeK`~s~6@*?AYOB*J z414aj`0*9iAtpaeE?d=~0Je+Sh$>h!HO}s9cZ9@KJPbZgc2VYBvFP?7p39o{CR#6x zER^1aTI$eUDeE*R-yS=id1=c2603bv{N)tLSP?g0hJO(&rN>0apS*SYhB}p6O&CS1 zyo7|c7GGX8tN>Vi<~J;Tpwc;;sGcmF3%CxRc1qxhU4|oPR7b|x(IPSa)6SW9xO+A%E zl34=CWfkW+Xu%}&7z}J)#8LU6bnS=BrLQv^*GcFr-5;Oe<4n zV)?nF=)n8$rPcv*gWwxq$1d~Dnsp7=>Gw8h>IrSz+p;bW_5WHPbB&qEiZI3_!1p3t35Mym>$ZQxcZMCQ; z3U}DJ$)VBiJp#-KtnK^90EQu0+XgkvmWKt0{I{^Z5XoM715$K2 z7-uk2=P(9W$M`KINJ_HhyM6dj6Xs!%|B)$Gvq z0WInquO+$&mn&1X{kg!VVP@tI{fm}<1w#W_o}Cs1ZgL<)wifqpj`yK>i=*m1dv=0$ z+Z7BkFNP*O7{J(Swciu;9(3#8)O)x z4lKLh!hXJy7fk{dD;akHBTFk&Vwdwssr5;dCiEh zwUjz*4BMWnp=&!utvje5cyFlxCY)8F;wD7=2Iv+HQZ=D|78*UG(T}m^qeK=k!J2)E z=qbjT5V>-Nj!naBEh)K{$ezlGY9=FjVGF>al_Uvj3>vkjFJnkFPseUx& z4oKNi9iO~aQ&4adA`j{akP!@!A+@XMB}#7@PBJdq@NK@x^Vb!G#IoOTJIzxi(0;EM z1+fvOnzsH3EHYsaj6K|jc*k6xsScuyy8h*0+Dh%(+FJCw_pByIJsnkjG|6wMJ+KWK z0szz&6*Vzb2wX39mOuEwPMO~ajY!C?z*;v$XYrxC7m+mM)pR+OA(wZbWN=^NIM7+9wwi8F&ECiRTLhz&m`8(!% z4hLk(yxL=0(1_ggvV6o!#;w&739?-%{np&spH)=hv_cbCB2 zcR-dmD?<4c;IQ>7B{P|Xd#4C5+Gf@rde01JiTZ5cBVszBvZ*X21cjt`7?bQaYy_NX zDdYS_TOSbQY=~Wc`5YQgQBWU+Xq?@lhNiI=P)X3_>eskBn9dVb*^U`ogxgli(h3P%~|y<1M!cEsSr}`K%P@9M@=1Ldyou zF|qcwQsB*`Y6FJs7icBne^ra+U>|yNI_NDI4J()*9 zBjEdN%AZ$6gy=}_wCFA+@5i$Fcd08XQi82>#p4?p%KipLND@Z7hvt7 zWAOo&b>Jas^(qc9I@KPlL?Zb~DI4CDlzi#FV}j`A@v7!?)Y-!B=T5to5oPMCm#e5{Sd?cl0-Z-VGMT;SEYpPgM*vjWF`Zoo_=`Z@(Zl z{+OQrM&ZU&+smIO?07i7NbmP`M*O3>%pZ}+62gn`Wj zAH^z}FFGYP^hbfS{^3m~tM>E$^MztW_Ypc3%HJiUdNCfub`KbDAYBna!}_%fQOXDT zr9qs$gPNQE%ENHFC8w6aAZ|+%A7Nchts+49=SD8r7zwT2!K~dHTb~N~A~aY- z1oK&YOp28{Rih({5&ezpZit?nJaxnT_kK$f-*fUJ`G|J~nW;r4M=BgIA#%O{8gaT# zL0%`S?Y6YdU8HFik>CUV&GDtVc~XkBb8Iqt_2#$q==*1hCbXHmUc5z={~+*yaHC;0 z1~0g5J?h1JNsO6YbU#8s?7J^($>~ZC{6ZPveAr{ClSX&aoK8OB{|t;zvO?Mw=?p1F zzP<{1sba!`m;gTC07ZwpTo7WalAdcjN(1B+j$6&Zs)KrI#{#GC?5{^EqP z5}5`Q-PJ4M+Z+;b<_0DxLjZ#olVfOIBaOFQirZLVm;A`NE8yA#L|@PxoNB$WIywx? z?wnH>61o?Qkb4~t#8Yf{)6W00)tDl_iwa}ZyneRHg)CbH{btx|cmV@}Xi%O?pZG7-gC@=%m-fH_ygIErlH0 z?>hd@{b(g0%QO?S{H2gUQ0grX_pVXzkASdr0M?lv43p>yWrA}LJi7cU0?vu7p25?_ zZ=KY$E+=+pJ$lZ3VH>50nU^`?RIa6i+*W3c9?qf0Sjic1{Q@po}lhZ@W_4DmAYX-ia$ucA|w zJ$LY?cX8k98;xXOz)2^;XTJNB93-xzk%no9uDrev>Czz=X?Gp2)5^$)F6j)X!*1Or$$DAK(hyh)k)24STkF;I^|*nY_x2nt4Q9jOtjSqJ3_c$+4`u_{Qh z1YgEB1SD`4=^c9gIt+2A_fi!0R5*K#lwr@-&oB_10FZ-aQA(J|XOTjmCtJ9-Z?6GE zXAq0ZmAOrjh3UrFL7fq}4dhm9L!}!Lr>sZj9=dq7^MQ-a&%e6=E|mpvmh2C<*;cWR z#^rts)XC1NwY{vU6rkh0nd;AhCDNXE$oOxHQ7!4!Gk_HgnbE9K)qd0d9hLwV)Yef| z8dZ9Yn&`sN(k}STEIzOkTPn9)@>F-M?a=5W5&!NT%3-di-FB$7!L1=iDG^&yYW3N7 znk0`>#Q<^cOLs3S|BLb9A1qzoQ7ORqTQ?rSq^3ziM|E}fp|!6zZWhplk>yw5rrnX@ z-FqY54me%-qT;c?=d2A))fLQP=0Q*YR?AgrpgIH$dUkcyFD&$?7hbeI(BU&q;}x+^ zVgMx&wA$|0O}R{$G3oaP6~A9!^RdBz>DO-Ufl2jQ)OoW>+7AEC4J$R>QZJ(EV@;%H z5A0%I2gDxB6my*d(A!nO=e+oofUzXvN2jl8bfReM+6Wszc#TU-V#6%`a`AQdVGR^y zng#}L(2$(Z5CH!_0Kh&Oao%dAR<}!g?A< z0C1ctLND#ySNOlxJr@iVu+%qrM`Lc817)VQfhVIG0HO&Nau6#>d|AvrqX^)Q&EZHC z_pr)qFX|jgMd!(Fruba_MoODp_R8x;)zxW}62AZe@iMMUBwtHLx+LK@7VWS+u?cB+ zdQj%fowMfL0cxZi=3 z?CQ*%SbFqS(6Q>|S+zSLn^i9ChhS8@V0lmbivhQ(vA={`rGc&vz0WW*z=MX%WwT-< zS+e-I0ZfUV?W}@W3g*7;;AXPkZ!T&8Izz#MK?O*<0;XFElkTf_sg01_W>TW8m`sRb zd4TG-!V>8d*k~@ZAj628I=iq4vM^B>9R)%q!{b3oS_M$IX1^a zQ4J9&C+bMY>Q=lp6)f0?pf{qY>IHSK@GuVEl3ebkjPqpZR1hnV_{+*+M_6mEy$8jU zACYoKY`T2dt_5yhFyP_FP0`r2 z(N*eg4zWzk_rOC-_&>a};!V$!bSevB>48F&M0;qQgBux7H%QVek3z2VjMGx7bj-Fz z08mZR7sGp%`1xJ@yCJ`;42X8tx?3l9#uBd2Add`Hmb>IaU2_Fm+I$-ZVSPjZ?Ge=h zrv0WQK2^UTR+iG*A6;RirsjJ;gHDz>$<-=F~r+IKu@e+fsOtYeCGxhj?+xCkG2K2zC8%xB`^bf9-x&)@ej!$Nbd6 zSrDCzvJEgm(8&SiSTHvCU+tqhLa6KEjR%jSHhn+{Oa?;A^nxZI3Zv=68A*t>1sA&& zF}7F%%SslBaX^oNcRGskYnaQ*e5_J!{C&P1^2a9DW?qdT6|1P}Lu7JF54)z2RUwu! zgee^ez?mYD9*OBv4$wMlgkyvnR)_K;>wouI6cCcHtxrUnb!0W;05!Ev4fyEKl9*sl zKV=q|Ydu$*BV~6^TP!CLf&n?oHMfw8L&#R52iOF$2K-j@upoO@4=52t50b%#{Cytl zXWd}SvaF+J%MG$R=B$T>dWdQ+-HX$Gg}2&+&R%oHI7g+p}kb5W1pP$ z(~T6N8ao&oas}AT=$GprK;UPp`>FGuCwR z1}oXec^pF#oo3?;8VFP(U3o+4kZ?Xwq`tKgj->$V3L~L&&QRYms9_J{8;Xl3x3%6B z2wa!?w)8{!3F{Q&_Pa&*Z5R=(#B(LkGK4nR&cb!wxdSG#fu6WrkqhCVh$R%D)#ZIk^VHMQzEK7dnaHn-S zFXKv+K?;+^Z>L-z%N|%wvuFI`IUbC_!;d7VUnOp6mi;A*j9Y zc*Gr6xqqCWzo{TuCdhuC8e5Z;uLBwj{p}(QpNHKyoorZz*!99eVw-K{1*=wte>}TvoCI7zW`fZ?q=-QBlLqCoIiq8JgyaF=_?E--kwQ-~lZ75_BW+@`==XHHlDSmgECA+XF1A~K+sGi77}~n z`1bo63>P#!6x1CUAIc~jnO*Q~0~x6Oh1Az-E4{8hT4QoobCOwIN@ccJFP_jLpsY}C zvk#7G4XO1E)Z$)_gIw-ZSz_(DwL)$*z9QxGpEJTMpmYXXkyX5wIN)lunE`P!6iDD$ zo)=)}5P9Y=yeKJzXd#2&Cq1*FUe?9JL?zGpo+$wB`rQup!LpiGpX}DlB3puU-HN&ItBY zw|lLfdYSEH%_3tHUl>|#e!(1OpDN=4rcl?G8z-6i-v}twrt8`kg~R{UyL9gmQEQE0 zl@=9lNWPX7F|mBA5)Ut9EKo1Z1X-&5Gjz?oGGY7-2*`b*G-^Up0VS30+Y59G90k@% zKM_*LCC9X^>}6GeWhJqsLeJuxCna{mSV+gbZi`149G80 zh+tHUUKN^#OGMX3->~W(CEj({%zkraGsy;_gy-R5gXt+>OLF>%@Cbg*Ev%QjvF(YuTnvURa3;JhzEM|b&#`m$!erfaCQd#o4rj!;A9 zV~UezURn6i?}_r5Ei^@dizW49u!^7)8@_#2#h}oMIQYV$xoK?94ZomOQCvSjpYW)k zbxXPTpI0fiupnfh;H8H8vl*{OUFPk-5p-5&e8*XW2um4fJCBNllL<-Gv!7g*bJjx% zB70LZ!E~UUmO6&>kCVvkB<+4P9I)LpMcE-0p1Fn69t-te1Za1|+rSDp5#^N~XnD*& z3lQC|V6nEZIjw)=w5v*3dQ+EnqUMJnEyS0Bducod!?KZ}ZlCo+;93-B!nC?56PVI#}<&~7*y6WnLixvzhJ@`F0N-sIC7sP`K4p%L~J`EEw zx!5{oq|nhM6$rE&PPKNq*i8Fc*5|36(aUi`IPHZJ62@1Mf4C_g%g)0Q;TZMqm`sSa z!bJw|2)BTbIx7SQvs4xyr3T4e7JWses(+OH!N&**ky31V(N^T4nZx~)gsOjh zEM}(qwhz^}*ECBP_*CszQpJjrKjk}=H-N5_oWqnf>XZ2Ag251s%Ki@@MDXyi+V`NV z*#O?s(ILSym`j?3Ai{1_n;&-Me(O{dlEhGP$fsSN2+60TDY|i$90DGhysFO}I~h{D zf>E>g%-NqdY1a&QSM$QsP83SlGU$)Mf$Ry4P|H0Bcow)2O{qHUIiutjk*i@vGX+@N zVXY7Hy6V`Y3ekc(srW3`ywJ)XreL~ucrp}`a~hA*@a~nNYi>ljMwy~1GgyMqE*M1_ z%utbfEcJegg+2P5K_o}x#!t7Y+~4-^FN{$6)$=c|Ha%b4dSMLiQNkVo*O8t1M^0N9 zkw;>}sQhI*hlM_dDj#Ii zLP4roE$1yb7@0W}$PS#3uUFeI)Q6CC*682ZhF$`GZd4%fd=8@`{)i*bEBIOIF=wV2 zjKOiC(x)6wU~;v_xaTDf7#4_g1UaxpJWuM1#sZARP%>RK%vA_s#pWB69iscCeQZKd zjcXwg1@HXip?C30N*Pn)W#g3B0DX`}C64^?7GGNh^2frAT$H~_@j545?6_Tu6d-{q zna-9^cq^A)%N;%5^tg#FE!j&8*W8*v2jU~$49^3QMj9JyP6-4<<#zdoDO0*pr@_H+X|ClOAbM@5Sy6B0umPGI-!MnK0E=sB=>c}B&P{7z5h(}U7_W7y^5b7SYr33 z1#(r8EJ&M9Un%QZ_KOu)TT})aQnqaR;s1(To6(5JOfoOg*+8pv9&=Q^aYNWl1#fB- zTwz-JSBn=<`MO|8fp^>Anw*phDHGn62{&$_9BBzW>|>DQln?b=I+f6L1Z zHHUovEIhk;LQm@7hY(Dw+MH-yR$U!T$ix(#g>$SV%f>K=Gk>6Or;YGlZr{u0j7#M# zfG?@j$=-xMsSAiwcid@CnfF31Sw$j#27lI%q|eMM%(Qhw)I+h0P&)w2X9!4-+@h~1 z$ME5H`QY*hQ@_X^<6v;ZX+Qhh(p}Q_w>tW*q1aW$TxunC%elGxNv6VUDm$w7ZMZa1L2;1(TWwT$_;&Tm> z;G+MvWs)9w6x-Z&@_knj8!hY*n(lp7{1T^wm0xPY#HgMu7xPrW=_{$Jo$|;4AzS9d z1zNR>e36T^k$VeC{hb&*dOQC2Q!P;;L4+elMk_b;Pi(I^DVQm4e$Z58x2JL~(&5I8 z6W=fxlpgXwld6ow_a$pJ8~fyWXj4Q@FVwsuFoezwxnxcSaFfs>Op_8%xCybslRfdg1+2 zPnsd?L~+wxz)h(^HDxt`OsHbT<9ZK!ph~_fMoIqwD(BiM#i`FCK1Od34gX4KEM}AB zV#Z}8jlPYLgVuxkE)2&8Nk0eY=YImyv#m-0ZSg_h3;b*_IZh0KvlSA= zYomui1L=y@h}AVO!~*%Ir~Gf<`Bw=Y1Y3De7e(a&?6ju9D_W=8D|#>(5HUD-npeGh+2lmMq3q znd?oyl89YQQ(|$Vt7~oFddXweT8NF%{X*4ta0BXpSi=*_jSZ@cHkHTX=_Ea(Gtw{focxWf{o(E0{ z<6Kfv6ahYc`m4=xmGV7}Y;1(J5xLe&5E;}4q0;>EJ$IQwjQc8v?$8^%N%1o`7}1{) z-eb0ynIMS3c=6V@keJwSnEnkJKe`A}D9=rf3J}}b zOs5(OYxMo5z*jyv*{_yhJEUtge1+oP&vc=i*bJskZuJ&%_`U}!miV1R?^-?R zQKPm^>3R;%Z3j8{lp&S%$eF{Ab`S^bC8EcP&7A;5B9n)@VM6-Su6E1P!?(Z8`+Hw< z$rSJ#Qy89@SfeZyy6ht^S*1i!9-~E?M})CdN@Ah3MU{TnG~E1L|G=3&iO;e-aFgg& zexigNgK-w8h%HR@xiK-l~Kgkk5=fQCKsJ!a~YJ0ap)KUKs9XH(FA4Mdj|Szz zui#2Z4u8DGkc^z?pqA42>yi{oy4Xnq3&xn&#ZU_jWXhbY`>1&$QeNCK5D9p`jvt== zK_%pbp@{YFOIxnm!|Lmhky+8VXR~B98{T+b^+>|d#nB4e4b8wbli`tUD4*#PS)TC$ zAPYput#skMnP+eq<87@w3pH<0&Thez)DMuLd0pL)_8+Nje;?fMAF9nR#TNPA=S5$7 zF{65XwEZs9YxMfJe^Q>V!U^e&cd}6fNkO$Vf$j*L#=>j?amRCOKHpoI-M&Z2{()q5 zy;P@`l$HLBfoBcH%iQ;?pH6Bci@4$~-Y$?*o$EVrf{si_$gFC^chvwN1PVBiPYn~- zvw7^~tOJLLN<}YGz^NYpqM5vh4hp^Lc3d4MB7EA#B6;6U%DDeqPR{lrlRNx`{KIV! zahcjrz?-~uunxCye%EwE28kPZk)hfr-&zI%N{Oea=lVG(V{b!=+n);)!_%IgT-P8= zrWF`Ts~4(JS8J@f1yoRYP-5$=2~eNfbT|9BG0;m9AceAZ*;Cadp0F#;10zOumWn`F zG*Uz!3JYFf`UVB8VLiSfh=rUWKal!a`4yApaOE;(LeABLmIwRx%eKLXE@%u`+AM22 zK~D4!xL0$1&K+ggk%)?QeubGH{_*n)Af53#a_ctda0Aq>Lxy6Bsw%#B_c?npCF!pd zQcO>C4*RFN+&7|XHoJFFTbu9X9(z*njmO04IsTVHvIy!IWe9#k(kvyVaN#%E3#r(b z7>m4fUDu>fn*w6cYz_cNBxzdf!lwR;UGAU?p=w0erxXCWC@0a;IXn7pM?Xo~GCJ6? zY(Xf91EvYeu(#cr{i#e5wZ80$z#CSc@C^Jv;Bt@CWX!YtS8K*ZXZ^&)-4_@h10UwG zlT0EN9Zq5eFqKCOX7Dh4u^WCev#eb#q@_`UdaEio+F_@Q$1!g_l2a!NH|0;D1x6ED zLz_5Fa6e*<<`frbEJ(h#KH{e^B)Ki;QBh)w=n+MtUo}S{6M|(^VF{!Wa06NW$wF1W zFO#jyq?5GpzdLd3pzG=V;5IKOcz6_vJFCF)x^tM9X2e=+Dk8uF{0iJtVaU93ka19G z(9~}%Fv*=xd;^Hy7h)K}cP8EdMiniHye?<;@rH~U65aC96gCiH8sst{DabI~fu5?_ zG5kb|2$~1ME+4@vO<7ofq7MS{bBVm?|I9&wN_071=B`vj{hGcRJ;>b(|4HKI1=H}3 zcrGb!0BsQ7S2FbtpJ1Dd6EIOkP`aw9Q zHTb}*gpa0IRm5-r0gDAsTBn;2J4QLCRZE`ZvqQjx*|)nA5pFzBfAvNCNnuGOu_5Ym z$l{lEX0EsdSoay!O?8jVVG=u~L>;Oy9Bo2QQTB^W65f-cD0r7m=cc6wS7?Z|(j)y% zJ;3^rgTNZxfRSDsh`qlx@SL3Q5dLjf@wb(Iippat{)^_Jm> zGM%i9A(8;OAnKltgR0ODem;(~zswR+4@FNlGfk;zZjqioL~W z^E?k5Q$?RHQ)fXhy6Jr10gIn`UKS3?zox!w)U4ScTfb<#Udovd^p(Py0sKI8;hsFa znc)w&GK;1fu3@iSAlXh_Dhp*eSTq}s>Sq4uRO)*OE@4eINCO!gv7#?SZ9 zIG%f;HnJ&|4Nu*jc=wOq#;pW8G~UH37_VkZH6CLf=Q9urA2p_~etUhj3f5u_`HqAb z8=pijBwJ{=D&Lh;${nP3mY}W)SU-qs0KAl*a^-A56Hi^bu1oKT*0^VwZwrUZ>Z;i6 z#nKq4%k8$U#L)50_P61RjQjFc=xdh-u&w|ujhFroFiz=*u4|oBe^v40|AVUR;+$!O za=qlhz%vqi9^tXFD4n!77*nM48>mE#;Vk?o@__AU&1nf#$ayh3Zk-kvy(2zr4xUW& z(7G7{3@y&xo}^K9M!_&MmhP<`vG zm3FL^Lx-$us*2xcbt3Q9opDt(qwwq?fM)nxx80EjP1ig8s}TMMo2cqvRAtNDaTWw& zc-bhy#5qB&h}ZKiH6V8=rj<&1?U_W-*;CM>$RdN~$V*`WNiOBn=NsVk9}8h=cVIuB zIhcIQlWbq4bMPp28)vZdeI(${P^JoWz%VE(P;P;SCS<0yso;-HPpFksm)wG{Qs#Li15i|C&72@519UjYRy%KwS2G<3;A~5HxSpMs# zLu%|cHMk=CE9d194X?le?fxE%s{*rc#iev7ShpXN{Z^2RZoxW9#FR$^5>V|AoZyW- zjx3|dGhMUT>j`DRIm~=0;fFjq{AMK*vB)Q#iWMxH zcEfokFp74S3?V1Oe3W@8Vi`TB@S^O<6vgCxM)xcq7-n1&&>A0_KSa{hw>{MZ25D!C zo3S-QQPjAr9z5zdN^Jow&ucRXRc47#ZH1@3m|vvDrWLgir1fwbNC`pIGi2NmahW;M zP6!q}*gt{sKz}YD~}QdDKbARSi8?`f|;2=SC+*qr4R!^%6IV1%KEx88^b^9??tW zFNSegP6bo{A`z}>j5SviQT11)($NP#k$%G-oVxOCL{8m|iAK`Q_D>KJ65{mw@M2Jb zhJQD1503kQ0{uU3uxY^jv#STHIkPDa39A+mqS{se@eQx~2Ms<4hGX_#lZ3TIfMryd z452xXhSq?wTfiw}jZfUx!WOL`XFmxii|j_qhrLpGgJnBDjIjUZxTVAAq;CpF)Xue3 z%STDwss(ZUDvya+8U+=NXaX0uZoU8sh2O&7J^BTj!O$%P2xOw3OM&Fm8>OJ%1Ww>P zQ+WQQt*=Ekz-kv#!tsCr4Co@xqO(JQ{>^ggq2}uw-U%~yO<^9teEzv89px+@(J)_B zrysdd(bZo+5Jtig^q95ym=lFmq9iiFX-=8O)YD|9$ii+3c=;%wFq{5K3Ew?d3ULOQ zXQ=yEX0j5t@ynMycQ+v-LjV{V#t-xD$8(PWzZ1FnFWU}j0GYiaYTMSmzR_;C%ayI0AIM`fA z9`CU-vRLsNtwzA^x)@vM4Hsjr1N(b;-7xFn$?;J@c{&=-{yY+WJS}5!mfz3H<~wwG z!e6(*Ptc^KeY-##a?nnhD7pykQk<}Z2>Q@V!%%x7qtRupbSP3!K`!@Y8LuwFWpkYV zuj(8gKRaH{oDw)95pyuIk}SRv#3qS#h$`&reG=u{y-KGnOiaj9Vu*x-jR~h_!H8Eq z#ob7kM_*Hmrp!mP&b)Qg;Y4*l)TYE!iGPnkndDoMG2|syK-J-?zFj@-zz}&T$TnpMyxs7gu+$y)#3i zenRtgVnyy85WyU#uVZG0^lR&0JQDDo@+ z+Nd{KDs`^vfGpqkpnC^ZIq5rnZ}o*h1HSWR4%2jA7km8}$&X=C9%WjA;#DnBu+`iv zEo}kOWE|f|`O;*PZvx?=NSPXc&P}pWG0BLJ`Bk6SHN*C|V(Ga;Up4#NEXoAI3^($& z?w)r(FmHVK+}3^*Rx=w6ckEsP00unEVhxYIP+V;A${5)z011Z4)c$@KDjVlJZBq@CSdJT@(rwFXHF znMyT6%;Q6k91I5@fb!6QpQx>BB%ZBVi870P4#7Vsas6ya08~mlp}t>hH|H3J%@N+e zmkZz+ppF1_;}?6yB=*T|`XI&XrkT_Ly{dwtC?(S`@!~N09GW!WqD+6{!D~&UgD@}E zQK0kcNNK9Q8~!^WP=y}5Kv@}3IG+RL<;!{F8A26ShlkEshglNgh= zp7n^D9My%|`e6KHlRb8DrELi}cB@|!z?YL($o<$kn=chfuqYheQc~Oe3(qP_1OJM9 zRbTQPAPFPjvYyr-2_GIFeeSAcu`=_amW;$SKXUNu0&#lAn52xSz~x=i1)fOK$_frX z+MR~|Jg;@^TxBJ0cimdHSj5t^V-=uk2Qlyjv}td^D~PmKLst4y_fh!&tes#-IFR}4 zKzGum@gX8D0mpL7`XMvj2DwAqvhy7+{i#iXiD%Qq&WPj_dJ{g* zmOCIU3%m#kYi-Wu#I&OsGe5PKnOtA#9vEmW-U$QjV^G;}Lzi>eYZi2ZVSRQK`Oz9t zD-*OVxKNruq}zn{v*$j>KcUi-0+rsG-*6eG2Z~l0k#?TdC9|5Xfoy8``@Uko%0;mVJ1W=t z2fZbE3?>&2;&4)AiJ$lH%d*o`zKBXE*%gC)y_+FCWo#0E+@#-ygej(dx?yXQ$NU%- zH6?u#lEXb9JXx1=G9Wl1j6ls1PxXG_s1TM1koL&qnM=AvfZ@CCyAsEPp5A-Ctk*fY zMmUNuaqMVzD^&l;Wcwr3SuPTC1!_gjOhQs)n+uza8T?cPgPM6XY9M6bwBoG<00 z6qA6ur7((!54+ouy`+n`R$aoKjl0~OWQVI-m7^K)hENPF3lwVWF)rVPFxrqOYW#pr z3x@w0b^zCz&=01{vP|LgXs~K18F#p7l90ugXfW%L!(=PR78K&tqMR$4YB=Khh}Ha4|Hr&3%V?PLz}>8`(-EP{S* zQI}MU$@LBkz7OgTdDuS|AOpL(Xz#^q`Yf?b-SW#LC%Yk7_p@cv2E}nC^IA_Zw-`U{ z+9kQD=f5h)X*U7-SKiZfX!+h#Qrhd_$kcaS%|im}#Ahns)Dg*hZ)4}X%nAhAg|D7N zxUaNEHPU}8d#|FCjA6m1e%()3QF7MKUf~A z7Y;N>*KkJYz{1~Jo6tgHgN6(ag<|TX-s%%6Hy(s(CO1LmsaS0G_6!r;qai8_3_1uQ z>fVUJgtBTUBjZys&wt&1FZ-o{>8+X}=owETLzP#g>^iH=(MPj-*02VRz?a@rD5_To z6QEW{e7mkmS{2&&y+xzB01U)Nq6x!CZ$~h07LF=d3?ncFD}0D^SB;SSC)eIoxt9`m zji8F}b~&j$&kH2aPbC1RZ>|@M<1`u%zTa&k$p-a)cLtHe1;`;wfSaJ&1lF|@WEL9x5JL2t`r2oKTqM{ZRXWs|q=EJ6TxHtO0A#`t67Q z;kiH0o9A=aWUqZv6z6s=_79Le;{_a{a_N^bvJe{Z$~Y|KX1aKLlO9TR9&yve_*}jv z-?|tlJ(y%K$+HC?y{^b)<~?#yM{V}|CGZV4Rm&WQeggA1YKP3rdahdi4(eT1Yr7#d zVim+@Ds~=bHxmsbLCNgycPB(j>JSrTO0F~-%IvhZc?l@(Xg?8E;V_PR^59C=YT?6gJf7e$Es7U|zvW3YIRyg(1FEc2dhDl_ENfQH}SO__MKL{q;XZRu>uvJA{^qC*?hA(%iW%G!i zc$o-}#l>YuQyo7V#C5~t$zM;)x`Ui{{IQFqJiAPEe8)mefJ!NVbuMku(#V%n1hzFB z5V|&!z#Y>|7`OKL?mvswn8NNKla_F!?vDmC>R6umBul>$qyPbbq7e~iFPj&{;0r7bnjzn4fwy@e4(6sIkKkvoTY}-oEV^cDn z<7-zfemK!;lT)N%gLuP7M_$9v%wU5mmAN1h$5&^xdT6M3 zUZ8#JP(SV}WQ(el@-!5DJ+YuoVX<$E=5QZSi+&+7+%hZqVBwlxT0C=NU#FlXPnjgx zLk^#%4jgWKiD@|j8_+A_JKso@rl5KesOMoklgs6-m^(gu((deGx?eAI5iHvCT zvc*CA$bcN^&(Sxl-E_D1+I!Ll{3DIHxwcT6(NXpdu+4-Nt9h6l)}8oRHXvlRKc@P1 zef5Eyh#~wf!+lssW~W7#AVo(YLaZoCXYo+HRBNIBpq6n?jO7eNZaMZ9|_I$Rw-*p#w~A3Kb0r2?~IOs7^$g>tD~zv~SEdKT{U zhX2`agm|xwczcUv9$RWJ@!m)9C-|A=!fqIO_HmTL#~G6stRaat6Z=o8FvkQhZGvHUd}O|Sr_=G}37!wu(zZg5#3Q?2+FhvqOirA@`Gv2uB< z1RyJ#+~gWny(NE2{_$Xz06&f(N)Qug7du-FAXSPuAw5MEcHmHP;RiFQX0{0VS}vRk@0BFI8C_ig0Q^6XtLz=N2W z9;q+@`p8dMaTRNSJ)DFnI6c?+NSXFOI`-kqcueW5)M;w5?gVst-T`O{D#82N0iRSp zfC;No&p%adJ+_u5yehsgK5M;N6`q`;8rOTU`bD z_7@pgFBT__xbLVtS?}4q#5?Bh#b8B9cbioJrKJG+?y-g+z@msAnE_<3y6oU&L{eb9 z_HQ|!FV+oQOSbj|lXHK2E~`nFvc|jsrx4=J4@m!{$s9kMz8mmnGW!nX+|8RIX~-`1 zehd>yznpX8%n2M17H*OX-od`D@s>QaHepDG%Eozw;NKoMKVUCdy>Hi3zX z8ma5(Xf$u$==0aC@eBB>Zmjaqp)0giZ}G_}D^!(bxo{wppJ5Z9ROGou{X{PjbMw_= zVLw|UU(NCza0!K@{cWa~%6x}WC9uF33GZLweD zpR7=OCDW&U_$q4CV3a}sFM}vnVb(sldb8_B%QkB%7uD+&K}n`sV%%egkDds*wS!oy z77OKwJK1vwS!@uolJB&lQ?oZ!GI!@2FGNn^&~@4%2JZ&RPN+GV;>y4oyee*l3k%mP z-e}`RS=Og>rJf;*C`t?F^<&O@cHt{pzn2Th&-4uB9}6DL z)x8pLJbtp+w6W32nh|lK#jkf`QmNzvZBh);yt=v_6<{RCB@{gj2Q7>;%qU$EOSya! zXe1PjX))nqYzShB@_NgJ_P|*&@=<>66;4ZitLD;N{>%^u2z;KYWmZGAuSV^=hlO*; z!g~HH-LGssLd1G485=hgTfnQBFlu09ewhVhhLu$9Hm~(q@O)W}+>ntLP#p`N;@+C! ztMc+i1~m;fOQ%X*eGLt>peda^pg`x-IvoHWd$vsNB$+e{3l36+yrFr*BjYP&A{;EA zOIY40MSU{I@rOL;U<6K07kS>?-l6*S1D~uI7qo6a2wmNtAyPxw|p5sM8{%|bm7i&kC zI+`#Np`&X34-NWGI+Eic==KQeRj4~!M2WKF`oRl=R~{o{TSV`|@}r;5V|n8ebuI}; z#h|nbvOW?`zM&3|uFYj;i4Ch@<8)?WYL@)B%NF zt}mv(R{&qck@R6j%A+H=AdE*F?1y}^4I3sQ`+nb83&*G-_8)N(+gf<5&CWhTwW5SM zYrr(;99q6|GgPnjHYQEXx|?*7_V1a6=pao@2c}!;HB3x?){vn2(dzVIs?!d6xQ);i(R|dvy;jSZFsJa+I(tKd*YQVC+1zBLyifl%$Zv+(0<{+g(UM#EjQ>1g z|HFn?2-lBT%!i`a)Jcoh@Sus}{@9Z5LnV5^F$JAxcjD zixmWglj|_eEPn~Lb5Z;l(3NuE<2l}w$W<^YetIvCJH@7o5YwKgPrQNeiK_jsP2hT% z9wigjp3pG_?TA8zt$^biBZKbUi5ZQxo+eH%8Rqh|h%^{hkH+w(x*!`g8fUl4{cjKN z-UMBDF~yad$n6MZaYdP(ky%wnA&gVIf-#%mJD~jaAHF`1_9t&$#c9MP-c z36=(VVkLsQtE#peYY%WBCWUomYqalAS#nd$$8^jaaJsQ|cqqBN+#3AuzuvJ=)4Ndg zbh3`jLuiMZY#KZl44MmCvCbiFc};@z>l<7F9W|CsmDCdyuqexlhWczM3uGcJILY~F zCUU83d*j1U=D^9E4QXYYBmXhlzL?Pa=x;f%u#LQtefGo%d4OvpJODV!A8vRVc5Rn) zDZ27Kmex9h?oY9XilW&{yYH-Vy||;?Y3q>c@u=pJ2`~B zqP5m!=!o1V@RC-!gXHKj(C>x5Uh9mXYO{~N+7ChU4_JT`+hBzoEgk<^BaZnOurX=O z&j*GZBM}||`6E&QVw#ysLGFyNROv;)BBwSD?|@~w*91vCjau=|p~wVXg0QK<{LV|8 zh|8zcDnWfC_uEQQkv*=3tt?z%m^kpJ@z`xHn8B3(`pu8nY>QRc$xH=Dl{Vd)f z$Wk8XbNiNzs*%g!CLOpBtN?eO3wPAe+&?@A{!(y*r(Xv@_p&rqjBD6NF74S>f1p~X zwn+x|I$e>Bc=|5@Nxz>B%t`2!z+fDVxZl=SCiRA<;wOhVSv3kdDqD(?xY$w!!eZf9 z$6(^|R3h(lfr+b|hz(qq=su0-cVzff$4<@4;ILsDcL@-MIC|QVVyx?Z9@St7^!3}R zZ`!4f-x3u-X!i09nk2ZhP}(44xO#w5@Q@k*8C_CBpi$sCGf9;l$Ui#Wr8bm@=xa4l zxPvO5B1r#9Z%n|cg?m6@dcOO&Pt*dGp3}FG zs^hYy*a+;PaKGA{a;E$W(J7^e2UmEm&%@YPg|bczLL*0b6yY|!Dr~0P1F|yMza*jO z*3jHT8A;(1HtVYmvmBp43TXDV#^Vpqe=VAyu;w2L?kqIsBDEUDYwMIOe3@cjBlLGg zVN>XTK#RzlHbL*S2&d;rHD4|WY)VBApwAdpeJH_+AHO_Nn;brlDZJ`cRCDOcoDsWkk z-?`4CQ+~bHYQqPf8udw=gV_y#>z~j23+oY{FsSL>gG0x#z2x=@KmB&=)wblKXC4Dz zN>GgCd{LJut)!05H`Z-0MDFCq0#A+$6wET=?)K}`-~k+QU=#7GVa%sT>3XY!t*Vn6 zyj9@|6Oy07=|`0SLP%P*n6&2pk5w3W zxs;>y_L1&t??AhO;Nu%uPNpLKUci_krZ0uHOikRH*-n6Oc@{jMel)Zx01U<%5#PughDxq6Hf_a>`;*)2ttn&fWbE zJ;z*D^PJVHW7s=kES7xi==PuXt{Xg%t3c3gs#?HmhsZK}YJF&}+(?NBK4O}La>q;C z4og^bdT;>+f8C|tVfVnw(x|-y*b5e0s6K_hb`^(nE|b5VYp1|Wey8>gPImjp7qC-2 zWKKf;Ig${k_B%s2No-a0OoG7m`=%ryFExJJT+9QFX^Xaz` zw^7L#QK;n9+I=UCil0eFiX#1KxB1T3xSodHW!q>Ab@$-UKm~SQei=RlUFvgiMe=9< zomGJ_A}L=0mPNE$q<`93j7|8sJR*`rN7{T~=2QB-yDIt_5gPWs_8cY05=OK-v+m!w z+&rO#7zAD&s1`lEWp64WbCi1LMG?m1h^PwinOH@fFA41*5scm}$#d`rRJ6hisFDt$ z-gw;$j+C+Itx@HM9SxmbE(ABXBuRi;xV|(l6k6XuX~;5FL{F-U7H+0CgwplFNl7p1 z!H~)NvnVQXngTH=nilAm6AW{p)XFsMF7;4SVHo_k4~}>2uYqm%pNcUzof4lTO1(<0 zw3^^o8nr64?OmTGj+Uqe|Jsi>vu|%p&YmaQ3}N$gW66u_|5(1F$dyUDUlP?$zyjr! zy6Aa>e5X}*WxWIid-Mlc?^Lof;ZGZRL|xpyuER?Uv1R=Ef=`wME%bzhr(Wh%&BJXl zw)(ayxt<_cK~T$%khl>%)ByiK0Kf(!!;>N=!yNqw`91GTgDQJO!g8h`rAkkE%sOG= z*_m}Kf3_xc$jCsE;Lsjjh#8Dq(T0RU&tw>j!R|bQ^dz2hUfOhIn;`4&8o9OQ6PxbA z$w{+@CZ+%DeP0UvFos=rQY-gv*c)}cv-Y9>7P-BDn7a%3SO88n^_hegG;fQbEP0 zZMrGowZq05u1-Z*BU#|256p0D<4ydT%jYV&bNp5p!N@_A=5Q-I!(G)BmT#OdYdt70 z(tQO7inO^?l9T~;ew}N?@8yh{2g=q)ge~FjjLD}r7c4;y@Xb&tXal)_3m&~3`Uaxu!Q_!)e$6U&~mq<%Xy+m9vr1RsNj3-WQLfOOBwUQ2KU#3 zeYGK2SDp23^E$}(7#+qJHz8I3Y5n#wW)2 zUuiBrDbtBMwcR@dAFen&F`0AnFfssJk#;D4s8lxZA42G>Hzzohh~Lugw({5IR#HB4 zhCZ1s5Qfiwl7?!ZeNwBWFxO&~bHNPUqX&jM!T8Es*gGB7+;$ku_P0lY{K(c{NRaf2 z#$`eQzI=|MHKpMHqam9w4S+^X58Kdn*#_vm_}S#bCV%t9o%oqy(yjQqq!5l))CFx) zsDEL5A%$+T`=yire(T!upnVnqnFMMI3yD?C-iLj{NHZd=^6ziEuml^Jg7W1OR{kWZ zC!apg!rxgWIOCXgV)xvBC}%JzZwQ>4-~7I^w#im&mMdj7H7BmVp1}?PrUV{4g$i@2 zQRHf&SC#5fCaedI{NOi?;M`L9GXi1{EU0d24aHSWi0jndYjLV#=-NtHCy>GVALR?q ziw(t*j5Rzg{8RHMB|q!&;jesgVWV<9Qat)xD8ynaG?p|B#9VJ6o?y(yyVcZDkrfxU z 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

    _ZTth@yb;bVERZPnT!Ig3nfjNKOh$y&2!hX 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\"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/670/7de640a1\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 01.06.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/20260604/20260604194028-Diff-Config.rsc b/MikroGig/history/20260604/20260604194028-Diff-Config.rsc new file mode 100644 index 0000000..4546c55 --- /dev/null +++ b/MikroGig/history/20260604/20260604194028-Diff-Config.rsc @@ -0,0 +1,4 @@ +10c10 +< # channel: 2442/20-Ce/gn(17dBm), SSID: vados, local forwarding +--- +> # channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding -- 2.52.0