From 392870c7311c506e2d9103c79eeb7cc8c3e3cd02 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 01:01:24 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 01:01:24. --- .../20260505/20260505010003-Binary.backup | Bin 0 -> 269575 bytes .../20260505/20260505010003-Config.rsc | 4501 +++++++++++++++++ .../20260505/20260505010003-Diff-Config.rsc | 38 + 3 files changed, 4539 insertions(+) create mode 100644 MikroMaster/20260505/20260505010003-Binary.backup create mode 100644 MikroMaster/20260505/20260505010003-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505010003-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505010003-Binary.backup b/MikroMaster/20260505/20260505010003-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..b67ef28c0d175e698c362071d41916e6de729a80 GIT binary patch literal 269575 zcmV+aKLEh*sF8CA9RvV7nVVk%?~mOEkZZ4Rvr19`000O80004Z`T(2&Lm%i=$S*=# zv6Td{A~=OO@eybN+z7|y&(-2mR6(4yd>i7{F2%J}YN1JdQ3hG&f{%t1CS<)zzZX*X z?ucbwnk#(V+H!$>VCHJ@C%Wv@VGq)*iYXcxKLwh67`m^h@PGNE{4kQ#<0Q>XkF`mZF+|`&Qks99_@&oEjvtt7dM77@t zF62UvIZ0hh+uY{opCaDo_R!YZp9H73P|WbiSA$NMRcCZ_X-gd|`pxpXW^~tctaP{G zQe6h_aatT#q{Oxxi>=FHyvYa`Blw~lT-s768Jq&swgED1H33)}Wb1$u0}Td|ru*4$ zujRt6)Mdg1KR%bCTmcuXgfR#5{;LLl_9&kL8C-2JM8n+Wwi~F)n1s2y-_<`gmQxah z=vIS@o;^JaB^5?L!N@2KGaQj;Fw4r*55==;WIXB20zXRE4b&EXJ;C~5$O{pa!-5go zvA=1PlQ(<#xkD;MBa*5UBrH3#nKN1Q28@cs4x-8-^nr;g8cb;F8Xa*7$QBsjLB2uCytNc9SM$AXmgq zvAn!KuL0RUv0*&&+uXZF&1?yQnlrKJ`=VUcg+SkxCMR{VSS)$~W`M#*_>Q#jQvFH> z?@{vXS^mB>h#{(Xy-#~O1HZPiw(PndKeJdSkl$cOaEQ2{@OPYE(cW_MkkUD5DP?4O zGP!n>Je>4409Y#R?{;kzx$jvhz4TA%%6N9lLg>GD8ffic9p!Fid=2X7D_Oa)f040t zB2N|DfIdOMuvVl^-Bd{6>8O%x218psSK>Bsnhi!&p|m<8QY0$BDL{@|-8I37&MzhZ1B=hZ;$ zrIh3K-Q|kuEu$b`_B5e>glfbKr@PXKa0j*S z?k=c^ul3=dYu!}4gTb~+IMn>WoKr1I-QKggz-Frvv;dKZXZ`Y~vONJyX8?{ryE8n( zB@&v0YTdqu0yGvxux88x6Y4oM&mGC?@oo04ZB%D^ot}1(s4D}ui@(A?H$LI}R{eU3 zJ(pc71mJu;0v$!BT#t{+>BtORb2Y^qw6)T;&YTQsy~ZI$N|&9rZyoX{?kG5hEjcR} zPIg1WGXRHi0fVA_2H$cY4gVh}%ifJX8rVH5sQ@weUu%tY1f??Behz*|edP%V z2%TH6S=W#mk;G|y1QsZ=Pj{C!cEq=+gmKlckHow_8<^vbZnyc6`fk@L7pt(14A?Rwo}gtbO&2Z zE)VT|^ls#eb$d?n#@G#8%`PM9ltGij&h6urS-W*gvqU*N7^W`}iwGe)wV3;Pd7m&Q zC`&=UXxUxl7{LHgfJiM$=m!2 z>A~v=J>0}>3v@mh9=3*Om-!vI4q;Th%Uo1XM=`O3qJha5VvRVx&6aUH)MB{Z)QuTN z1-)?!5D50%mKRucC$SC1+2ClB4V+Q^aRh#vHhTzst3o8Nb&A5f^#KTrzi0mw3&WmhmoPB4nv+1?axKtjw&8V3p@jP-JK%8K$|_RCP;Zarp~KA0R5PmCwb6t*Ub!5| z&CqZ)zfj|7a1nrp-Q}UNdqd0baOlbYbauAepD}y|3=FzAxOv0$D?!PVFzStmwie+k_`Z7IPkx<+(?g7a54ydksM!{6iI2XNg;_ReZofDil zF4=vNw?Q!Lb7wf$e?4NL%(_ryPNeY_8R?#77d&~h%B80d4zdn(_Bs^B(6Q6}<6E~& zsOE-=9Al0sZTj3?qgkm-zFG6l^zH-aJn~#!4vHuQuq_CQ&1W*t5-^}?T7W)<3S9|0 zseuJ;*B$H>f68-&fZZ&OKM4|XJV}9BmBzSyT4grec53FnZgymwR)+ncqep_a%i03rr6ySxJ0Xd>r%+5UM^F~*iaN=3Kr4^wR0TBJGc>a2JE zSlAh0RZLJ`+Q|Jjgvf;uFzymQqnkKt$mtiWd zZL30oi4Tb*VQv7Gs#xg~N2qsV>ogIb183J8VYEvikiJYsYe&BL%x?2SCqJ@}fr#)b zIS#2*)PcoMR2lP{?mbl*C_Lb2X&qv_l=ymEPzNQcQXMkHE8`x@4XQbU@pcjy#8lPy zIAU?23@SjbTvfm59es42eAl#J1{Yd_1N#+?kO%i15@PT`??fL(%knpKMJ>305Y-}5 z4F*p8Jr8@k+Y2bvAuHp8ESC|_p$`V<6fsjI?nf?WZnEXoxKi4}Y-Cw#37HcUrdG@k zJDWe|18LgDOtNmQC=RCux3^~6Oaw;{_L(A`Zk_9li8=Vfk4-?PgQWg@Ub?lg$&e`i z!g2=?{ETXH3S8cTcpWr?!}>Jc*!hqA>=X2Iw~SwtP&A86`O$Z3xfP zgL2P+*iwKA_9vHZA3og^cw@A}d76n#>{m<7&>P3$(-_a0x+d(1eCMWz8$o{ri|E#= ztspEc$`A6eJXN8G)K+3EeL_01r7^T5lJfwCqDMqh&)TZ=3PGu7jG>bVp zq9JlANZSm0AIrk_NuwZ3mnq=!+||z7mWOHf-^bc1aglH2n#(b-gtj&QRDnAC5i%q> z-;K>oW@!HVa8twtfdzqldlGQU7HbFh8=AhK0-${js?`NVf2@Ba^51bM+jtU;2p%KM z#g}O`N6^y&hrnPLb#Iu)_bKQ|V<6v-tAV@yP<4~u|If2F?zbse9G?ty;VT;-z;H8|46rtv(426YETRaIELVv)oHHelt zOg+cVN`J7km$30jay-P&-L&&~{x=wUp4fRgvR5e@>q^f0Ax=5V&aSX;x4@M~lx_~A zVOTgz7q^@cIWxsk|`MbJZF1QS&%8ERbm^ zW$RQ;fnDn|A%+RqyY;X4mCwWW!8)%JeK`&j8I}nP@)@*U@B9y|c_6 zHby{2oekLC5T;5e&7p~4%pzfmpq`|4PR&$IWq%zBNs+JLuM2a-Tmpe=Il@KzmYHT3 zkcziqvBm-AAE?WwcClQ&|3F>WRfzQx{Q-3}aFqGV2{KFf!+|%0sUsjtvW-llpt1+7 z5(;T9H+(Dt0jDUnny%HZS{PF1*Vu+9XRviP`xwvcffhBcXY`7}w)72$*CH>fu4;tBBPpUK+L-G}m)=Rr0=5(~D=*skP8Q4{yXZ!xjxy0{s64$@R&PqAs9jyTG~j`w zQ4(Kl1Na?$9$1bWW7_(F^lZkkeI#ZmL0aSFWq!Mw!*8XVj6FqyXili(A2e)PKB>~3 z`P}((e{1#GS_e@wPiBolmQ}i5Z&a#44K%0hTI7qx5*VWwAak^ysF7nLQWXZ+VJqK_ z?a~s#!6O^o(-s}zg7JeKwPMX$i7?sHGRKk@eI2+sXmZR0}IS}GJ! zc!)(rlxZ^jF1rO9u)s1^Oil_Ty7vj~p?A!*_~DAX114dVEh|j<#dN0&)*2@e_NPnr zmpDyF3eGXJCctVjgb_0N@jTw{5@Wcs;V>$~qtRvP!VJx%u$-CH-{mr^vwH-ABkzlD zWpKeDHwTKV^HxT=C077iU!c$V9B9{kmqF+CV$GoAyeW@x9vG3%V|sp=06SnFGYd9} zI4WaPn5dfw^m(bJ4k)z|EC;#;MoPa*_kL|3fj(H{(#O%C$-@A+B`zdnD=B= zP@YB0N_16Fg{1Tt*omUK!~V}>C+(l-ZO1!Wg%;q;J{=`-rq&u<{?A%ulF9PVc~4$J z4rfiBC-;n0*pXBFBVAtFWXof&H%!BfiLIq4T0R$Cajzf|2UQ z)#I5#FPl%4#gBa2IQGr?$F*$@Blpltq$B2-B%sASrYYZpQdT`6*<|gB1?cO`c-DN1 zP*#T%CyGp3e~jQ&Z!q;{QoQA2Ysi1v@yNdH__BI5Uf;WWa-XP$|H9wXL`OmRDp$+W z;77A>qNUKAUf&(Ri$iSDZY&=MC7ee_Ml-K+zAjJ7{ern`&*dTSF4~t0gJ%Qmc7dg@ zqtG{S*LSEQBr0|jLZ!*hX-%ZVgM3?jG3uuOYB|Oc)J$e6A>P+CmcrLQ8{Ej$cs=gV zn*DbM0G&qJq*ouo&kxc(ZG8?+M16Q^Wz^!}`bEXTAu-9D4QG7w>fHJ0M==c{4sit<0_Ck6Q&nhD^2jjLg=@*s?pxKlIf~>wd@`^W9TTMjWJ& zQM4nhG~cFm_Z7fv+i$D2q3=xas~m@NREXzs_N=LXxdJaLH||*Rso!KegX7oSKrb8! zy{uvauaUwI)ijzhMn>-JI@mkin^d^ZG6535@1JgvS_64G$y_X8GMb1hOLq2n^)$0% z=>MySvhH&egEbc%a#6Tg$a6ujnuBxxXztzbtfmo? zSwc}bL2Phaw8UATDH1S>j4qaE+ejIomc<%s@{FBij9*3os1RDeK`64zb*2DdRKk9) z8B^{F{Sv6=%$U2|DMPkdbuX%PjhJUAF?eCPE;#&kf#&(>O!DV#dbGd9t)W`uq_pvF zb7?dX{SUDw))Rh~5@rSn)H8=+Wt0%h++ufWT3(6p&P@0fTjw!FP*sU>TuYP5!A$s+ z%-9i)_Dps-K$#xGx$K>MM36a5o%)`s=bEgJ@o@9N)(9YG=@3Z1$jO5OC#`keM*QM zr>tPCYm3jzlWL1<6NW)zMV|yUe;FL8QeyP#SjE!yIviF;D4b{fas=|b?8)p#AcA}a z;j-BQzQ^RThFt6{%kk#mPHM3Q7i}=xRN@0$vnhj!wiLnp2vKS-gCI=c{ zte`sra(%6gmbN*+Iw zuJ5(*&w}#h*)YlC-`k?1C!$z;&cuk+DY`L%$NVi^EIFah<~)pHb1=D%jTv4s!n?4< zhL0d`8WOR@m0b$H0j}MD;k_XNUrfSfW`L`4 zjJ!!R6h%4V5KxP7V%Wr>JZ)vbl`#dCrB#Nfa>ktk*CuM4hAwhFSl;L}bjQ}Yn4}3M zw`OyUgPmZYGV|Hp7#$}k!d-xhas;w~*qzFA1!MR0;pH*r89>_1S*J=IAQErNX@JflxG}EK ztCM#GUx{A%1zDzp%37OC#_+o^e~q)#+UDKw}*SGQ?24` zIH~%uUOC~{7Ht4ktt&D)b2n?fOenr+q4Z1>hL>qtlnJxsAXfFXehEuiz-|9FEBPeO za%Vq3o98d~M~Jy9R}5TEz&pOrOaC-8i;ABKsG}XF(asKgr>W?^&A3`#Mlh~EZTMe3 zoI@?0Lm66HmJz+jLdrBRoTJr%tFkI8Cs?%B~45HIs>Y;lVa2Qa(I2+$hrtT=%#hu2< z(ttIwLq?0~ICOj&y}c=G2%D-Mp|lw-)rt#1`KSs5Mdy!Qd9$DT=8AQP3il@iPEcO{ zR!Enb>GcR*b^oYoZbN3Bdm5<2td`I@e*qcakF`2tFw=ny8M8Il(8qH@P|mW@lh;eR z+Rkhp_+qW9DKesJ3Fo_&M`+JuLc-~cBbS!zspb+AfH7R}GEfm#)N_agBG=3x{SR;0 z1g(Inv4T@;Dq1)a7~GU)R{kAz42`3wALkchuG2q9jmDao047$M|1p<-FiW}_q>Z+X z_3X`A+E-(rLu-@9cR?ex#~#_fjh~bN97dO}py$6hEfM*w08k9P%3VIV8_veXA zf2=11DZMmlZK26r#P}p!8P0mJ%u!f(1i`3U`M9O)Lk{5Wh)KT&mu>rXr z7rrJCfC_;{yEUWNERpMSiw_uO4A++Rw=&-$jD;>fRHURKssM{d>YKS;cr5f9NlwFW z5}aXZlIUB^SUU1ASjF^X3@xkQe9fFCT6AVI^Ev&wzRx%{gv&rX&F1%Run6nLWv3;d z&|7Tz;b^vc0@031vQW3<5poPZr2+clhXHv6g96gOCD`%sfZOB-kShL#%5mszl2B%N_UOiiD> z8N^edoscvT(ZHkZz&Eg8Bg6{{H#)f)S)RT9S`4qyc=E&-AUMMIBJ_)0l{TS$$Oxaw z<#SGL1fcUF9>R3|Qe8kSG!&=6PB*PBU;&l6Or_Tr_W4$lyTx#=*5D5f{lqJRwlb zDm>S1&^`oz1gTFxNViiNrZ%g+`2mE2pU1W;`nWd}lMo=6LC1dqJJ6&suY`{%S5+rn z$^0J?(sBe+L5%#o%NWzw#ps%-YA#ZVhHD%K`z=SAS|t8 zz8ho;tIq;wM9r>XO>xqSc%~kLCE_z$)bo-ke+?A1)WaB0_(5>~E@A&Qm zbvUxw3{Cah!{(vjI?>)$YUw*{>$)*5+sd$_42&MfywyH*&`nljf(UVv# zNvwA*I%CD-pY8CV%uH=V^%d7VXsO+kIp{D5LrV@KoLB3f^`Z!k>x?@Ik*&Z`zM3~& z`4{WXD-bP=NYv0f((Ri6&>mjRiXbZc^a>T7cDm`ktZ3$}8e92Y&{>($Yf}BFxyZpi zJMDZ89=ff{{}^KZRw(ho2QvOOEnE6|2HJ)TZVDVtoHJaKOAqy^_RZ$mk8U{S>q8}Z zDz&+ZQ5>?x?mQPM{O(kv6*!-{8j0Q>qHHLhDum6FjevbyeP>s|z6Qd{up~Sk3(~=A|t#lf}VgH zLO#NNW0YmqdApR8!uQksADKqD*;O+-`CG`v*eneUrZQA3;Tk8p$NgdCAavtfQYU%5 z+xcla+-SF~IZJzvx;<3L>p}qQZllnh4xi6gtM=s0rmT#2V<_(JJZzAT|KXx8!k^sN{)NawnF zR&+7pU38hWG`^2xqLzg@gG(9&u$92vBeikAs?K)x+OGIW*QzxdzM&`6Qf&tJ&1C$# z9z(DymXelAM@=L<4u+7OII^Njjne;(s@Uu!Vl}v$#y3X$DP(l$U-y^4R{e+^Pxvr3 z+@P;a#p8B)b3X|R{1raX1RK}1DlJ`&)Jht^<)dA|re-yb3vg#-J1g)3oj5)QQL$^(Ajvn)fq~ER1q+Pz z4nT7(jxH(@;&;dyVRkdV3|bLuG$n&$+9R68%jV;au8Cm|%`nLRzGHcelnBlc;#l@_ zI3?=lS>Fuy%B#4AO7Fn;zqRAj44Zp)R9{y=2)(h@UCt)I%p<9&zZi*$_EXUNuWXV{ zaZIJLQI%b6>55phUfv43?>wp#ah6z2f)ApF4U$y zw|C0toPt!U4d?60ChpT#aQV_Q(`ulaoA)##?sndkYx&pOLI ztK#Mo;eDVOunX})BF|s`YVg=WIwZc-p;s*9MHdubZt=%71r3SbkW{Y(L*zE3&vkEL zQ+JFVuc+I(gcXZvXEX@ANFJrBWqu@2kVi=Fk*t^%5CMwY;|E_CI(ZYoZK~+~IT7xX z#01c5)t;jMhkSs>b`fp<&F18%(ugjGJ!wOz?0G|%F2-X=)8oUwd>;hE?d8I(jcQ6YA z=2kgRUXY;jkzHIo>ETnUkWGN+tB3*S2Sh^de6GcAI2R>Ua;d1Y3Zpcy-8WXB^Dkef zh9Jo*?C03!J7U9N_siA-*;}4qWvPq|+R;@17#s0B#V_S`Q8>}&gI(mc0nbMDL^E>5 zOsVKjJ;tfS{8@gjc+z6Vxwpn34E2PP^ zSt~$&&t^{2(%G6Y=@sg!%I>uj5=X7dLtlr!#70l0s&ya9LRk)%Wws6_D z2om;rLW!jLrRsuZYX^G%73!IBY7?Yh*$xyJ;zVfuMXd`NA@@8EgjqXuDNO|-d8<;N z>aCJZa09n&N7hFEwa$<3f*re9o$ku_#HcU^X;QityH$=Q20~2@r_>R2N?0@xm*Lif z;#{nl@%=Dy0s*5Q2Q~gLDkKt}szylniy9a!$Ur{}$lEt~`I|l%eCC@@&r%eI_r`B~ z)P;k$VuF=F#8smimkMdSzogJ;opiyz72L&>WL3)@=YuImD2)5HcX5EzwxY+9!gJk< zO=`X>>}q1#l!P1!aMqjFY(tFdmE1P^d{r|0`)Th{TZR(C9NO|Vw-XU5@H#*<2Jzzj zEHTm?GUH{Z7Wa#9v0Jpdf=jjQL^~#sr{s$n?M6@)_(>CU0di=#@N@LB=300RUWVEEhQ z9f#>O(+zqJ79Zd&CK2w`a4WsIqt3DkeZ7OR_$E-0O4%S)Fxj&14Hh4h!5V}t4h%N( ze(m}^bl1PNn;gQ1Mb#%yQh{_#EngQcLYU`ebbckN8HQT^WKBk^Owqn`u*8XsjSvG{ z)a#PTKGY_#MM?AB-a`8NjFNJ6TNe!h4rGqFLiDg+1`+nO<=2-g*edYqcuZ2-=Vyz+c<@gB7(P3~sKqqvQD- zpWn6NsMI*<`rJqc!#W~!4Ns-MY>VDyBylT3u5RXzO!E^+Ux7bl2d}_%N#rkl>V066%g>DM~}Fw9VM_CLq@^Ij=N}BH2~OVG!e0W z_CV7zGZ;r2hT!U0Bl4|IJ0`X_zMbaJO&bq>I4E^IYAe315eJr?Kysnu75q8P-X*c| zV4}VjqLc1;*Hbh>ACNq?lk;Cha1+RbtSO$9q{TSBTYf-@SRm=45KK9KIm=h|pV@HB zD%kb`pgXH(_M^5S>~Bg^tbsfTf3}H!B7`a~?(Ejlyi?zEC~$03KkS|*F9Eyg>yHg$ zMfB!z3&osyAG_PI9i`-AA99E1PJ)j-R*&46k?pKp@zB@6ugQEPr-$}Q{mDK^dmIZ2I!S1mDoy#Oz-F_5W;`cmvEC-AxOttWNP=ZPpHOYf(f<3H%kYjkUn$7@INZ^n9h@ zD@F9v^%tNV2_%Txvs!T43;q{^_D|v!Zh%-u4#nQQXDqsVy5nz{k3w3M2@39FeNepl za>4?(Ni}=4_@DO52??W!2_6ga_xSXo07o~IiO?d=G#zjy`=*XF^m-tHt46Rn!>A=W z$qmm6{`7YqLbVkTlkGk%v^E%X=8Dm9l<(VVy^WuK-KZAlhd`^}b17?&8w|3QeVoCM zDHt~!Q&v|IE`1*cjw8@oY&xjVmP!5LW-&nmO!3IL#?mqL7&=ZuL2@Kv1e@eI_C8$* z+pFnOT-wnW&cN!ev1pIvdM@&Jo1A@4P5Jm4oTo|R4yhyCGK&aUVGyFZ)xG5*Y4`g@ zbTsmo!Tc*vOWKuup=Y}olHSKllqe27QG6mh*+10|rL!*Vy@<^s-m4QY=hbF-E0eh7 zwK0IpROs728EzK19?t8Dvln6nWKO3HSN{iFNAcnX`bEGh*A}#2#ipDvY|@pdB1n2` z5@Q}n<`(BLuF`wY+7jL1mzk#yf}Fb%FT5eUcEBEVjNM{~dfzqV^+W|Z4wK%H7olFt zh>{fNQBb+zIsW3?862IzwDjiI$l)P!if4-%>FF--FoL(WRv^`)UvI9OoZi!f^6oPwv)M@xZ@@8KQX?mV}=Ewwv(z4{JuGnwv zXnLGikiapKtMe}6yo$CskYmA__}Sy>6oq`OTE@cd!7GH!3OU?+~z{7#k< zkT8}QP+(7_0!OwmnUEWkV?1#DJr4;NE8{*2s35d1`t4p2$`?|^WJ)K~T*+z-bx|A1jH%eSkh(4gRciNG0L4t}ddEE5&m?xT%@gElt-XVDB1OX)XD=;Vs)9 zj{{<_!cCGt8}vE{GJ;XX${UM%dH(zwuBdF!Fg#?O->7K}a;NG4NQ)VKyYVQLZm-Z# z<qsdON< zp4y|o*f>EOYBk4fba6jC+$2?)C_L|BAm`HgCxq~is~z;1+@DuGp@~kuf-;lbN+GtT(XrM z8v8$Q>hmY5acKBsevRkNbfKJh6(8e9JJtx00=fej0`C+=q1HwyzQG4%$;2kOMI)+4 zY)Ax+LFsjD`hfyVfR9DJGU=v$JQH?JwrEyEydtDe^Jwy{bz3gBt0(|Q@-U>JNV0o% zB;D`(j}#9bacN z&z~D`l7>_!i~96DI4I#iIV5Y7EOs6mCs84&Sp16v&IykOe%C-9*<3m}iYHcY0bUoV zfimfv?Aa9IH9J(55>5SjveCgoca+@WH>B`fGfT zQ`l+I(7yy!j&uZuSi%L*ImC1Acj!`3<({8&B&=x2SikNzLCo-!o^Q{F#0V}a-+=-D zQ`@=95`1jgP2TUnVp6LamQ_t6YvsRweL_Ek-1oM}cOOx>WLCmjbHnnpTY&akuPD9# zv1LI|B6>(^{c13=sJt}|VmH?LVv>ppqCq9S(SbBLMD{L3tO)@4j_y#{I}SBSDa>i{ zAMQJVX;?VXttq1=Vu{N76{=UwBL?_+C7Pm!NK2v1LvH;eZ-Y|2b;4p_Y;@DEH3@3t zCA_u>nXx%!$6I0Noo@b37ot|1hm3A`le1O7)ALzg zeXSN0?ae`$Q3L z1`%m*2Tx1bDN=;q`T79I^m}^FOS)-5%03XsuxMXlBDh&Db&!2gzP)7^M4bWrP2cco zih?5Gg;znh$=_W^*Am1i$XcAhADLXR>Q1$r7h<@wG!E;(N&!{5^(Xp@zbFZ?^@WVY zO3|NWdAb#|@9jtat!+c;Vp1JyC8A(_0ug~OEhA}T#}6SO+lwSsw9&l;Wl`L%8DMaT z7)0|5p9)DWD4YDWiZ57v!cChwYpJCKzydC2x#7M~z-4)TZUu!#U7l4vCw6pj1{53O zphdvwV)!<2+ldY#&aRLhxYWOKux`2xKN*Xg?kw(tL2L}qDIN@^-LIp@1sYQon=_8u zyI4kmJ%9((aHdLakF!(*+ct4w)yWhD89+bEc$veF*pO{9 zlX11kI~ZuNUC{)5v&Mhxmo+PMpV=~?QT_$p3?i@8`}ofTPIg1Sb~#5&sITW^5lbRF zAZ<+_N6X3~YJgWpkPc&8KVO%S)gsZdT8KlvOiior2k>xK(6=2c=<4T)h>)0N zi2?@sW?QZALPSsD(UBKWvhbsghdg$)jTQf~+GtJwwrHyO@baaEEibz40+K-aA%)CL zr0!MmUBW7Gd}04s87K#C>MV;@`a-c3Em+#FE;295J%l@+P71rU!o9EU@F8Ih7y1H( z9GiQihFl30-V$lxreaV*kg4%_?^7XNTM%|rI%PeYfq){^>#oi=1K_Cb0E?XYo+jS! z_N*;0u%qSkTHq_I%51JsmVmYTMt*6Aly6NkQ}tPVTv31F0>jI#`|!wwarS7U+tr9Y ziCm(bOo1vall_;fRg4`cCLZoMCWfyZanWmqAxWI=HaUlqPm(fy^Y{Q28p(l2xs19K%0Z$o8pJo1Psn>LQtRw_sYUQ;w8B}B<)?x7ZzJt-mA(m%F^ZcePt>xV@Rgg8PS4R;Nb#2VVl)xNsw zx-I!Ypd;Z(Y`dbuoc(nm3V{+&auIVdV6++Z^wn(d_RjSq!VkmCNjkjQO4qP&sx zm?5))j_xx0BY$f}h;uc_lqQLj$^R2%ltxamDq5yP@99pO7zu}C8JBtiq2KJHeq!XV z+{anVRLt@%_A>Za(uhYtsBO;gEE>h99%(N4ATu$u4&`bKXpj61och;_1DkSB@;pjb zim5lK$Z5kvRB}Sd(i)X$Lr)BLeSg3KHVIWxyp9YH#L#;JT8l$SDQ1g$^HA)cg-INP zqdg{CB`)Othvj^~S_lv6Wzkws271XX(csCbAw zKYrMN8uWNws?aov8IqA|dd8!qe2z`W^jCSk;nM7~79i+}pYrOoRRWgP+I3DFKEL(C zSRj2~CX5?#82tHdMY(Zw?qc-JkzDD1m1!Rt#R^GCc1@HQ;ylo{RKtK3{rQcekZ65O zUD3+V9CaHG$KM*cvDc@+jorVl*|JfIgup&6AX*2@B{!o^$yT|L+071>CUQ_4yQz33 z=iqVChD3jeRdvS$0B82D<}>ziS6xth$p^k>)LG$iXB)@L5DI$|XnT4rNTyL8Vv=MA z-}d@f{Ic4-J*43DdWp~7y4V+|!uwznU3|UHUb&^yP6j%LL%9A{&dbf=XZc^)>k`N& z5n7#I%lM?_tlA)qJ{h*`G~?K%=bUm^IU=5GxGtHX>(B!1`#k{q6PklRqTp@V2lxj3 zi}<=Sl+FUQKCQk^C02@(ltB7(tE4U=X5xFDqV;Q_=-Pt0brq3rE~AwB1kga<1Rpz6 znbSqSE^E;Ne%aG0OW!HL>aOJoU(CU%;(GCYseAODF%(@iz*Rl~n^e8HKk3(vrNG%< z@?kD{Qpln((W&}GCY%;GAleOX^$2s}ack8zHN5Ny!a<8JK|h8{AjMY>zn=O{um1He zdG-bprXOA2;MMMBSC@!WveZ>Ol@a;we{l>*9mOJX*(kK0(iPq1-^&X0nHQp|*OLPp zRn3)MmyBj@LV7F_TZW;;D8*}ZKsYa~k}wA+>fz~ln}GXh-3id$6@ZwZvW(`9vW*}! zzdH268yk}@FS#%HGA8eCj502nt)aNPDm=%>q7@aA*L0S3ZNg|u9a9zkc``7j(tU_Y zxHOSA`c#)7RGJ8>EM;TdHux8tf|yn;l}tu#=N$kl((LY@XT@v5LujuSkmlLDH{xKr z+vETw(rFIjLDEF}F)bY^)h~VQ6P^6(6;8vaHLT4FJMn_kfj9UDK9cN4_n&=U+iA{e zmrU1+y>m^yf?>cTwFh;32x5J`LXb&ZMSj@G2O9fk6MH?z=3ZU)2^2*Ok=`Wuc+@;9 z>EH)1k&`-oBU&RefI6jaPFxhuE*Lfbal{SgtQdiauwhdmW(f_u{kS(V>6l}nIV(*5 zJ1@?p!6t)H0c=^`L=43OvEc-$q=r;L%KZ7Kf>CQm1uWx-o3;ib8f%%#3T^IvUZd>B zIU+dZ((kC_tGv&ge5iTEBmgMEdTE#*S=+ZoMEqhU#UwI-Q?#T#Ek_~7cJ>^ef{V|! zh+tYuB<;R;Y272FTJA3A>G-!|QU)Vu*q&)OoE&py;vLExZt$1Np&w_nN#lltTif7S z>uEOWT=1eyIuZd1+S5VK5L>$#e=6lZ|RR8zsbg z7^I5)v4iex!`Qj9=uHSDFokgl)`qIj?-QtNez75p%{MiXgps^Zr+KZrf%hl0()efK zJC#eUR<+lr{*Ld|D%<@5N$vqmz1sYHV5?THPwA>(c0+|HEUJA%{lAwF6JgXxy8Ky$ z$ByldE3X4gtkG17H_qj0E$AI#;+M@t&PRu}uoU zvZ~I&$=B!erf0(@6DjjCabC8vGoW6^K>Z!Z0VI27;0jR^Dbx_rQ2z_?+cB#t`WeQlbH4J&incUT(o#ZLZyA=PUP9pNk}HemQ*KnBR5u7?714zl-x9p$(|1 z9k}i1pIa&Mm97clwMq{mM zWDjxs>jj-ja@!@_&M;By4if=^g?d53582^q{ViclA)@7_@9bRkaXTmvustd7FQl7} z$i*JZ#?KdEPL$;1tnghmuFeT;fxl|&hl$}i-!oqYHlZTc5=P3ha!Eob(^pxt&~J*U zn0gnXIhguck{JW+Fh|PqPZ|qZIT85rc9%tJx6}}8eYgT~w20W#&{(w9J6C73aSI@?5!}cy zxE%c}@l+Dj{tql`wb-Lx=D#+MriI379~Rb@rv8Z@Qn$aBs({B7>o|xob;PGR)Mog4 zSNQt!>W4<+R8x(%6cxmiIPtii20#}so}|&M*mqg;(eSYcXp8)C=&|mZ8tD3CX$#O!adCJSrS7*y4_zUeNUb3hBj&bzzhh>2&jP zjkf_-c%i8|4LS6FeX2T@VeqkRa*lr>z^6bm@drl5*wheo_yBMI0{2X^C-Eu!pk%!ya5Q}4$lqrNrwuDb?r z+3Q2~1@o(Z=auCsrW71BJfE`63vbPyG?^BTm>kP*(hQhizC zSbl|t4hBj}bNlkcq8a3BGdXWgYRjdD7|+ixXbZFzN$8t>pFHU}KLRps%;Yt9=>ICB zLIY7$N6SFL^rw1cC^-DaK=F{>(p)_4;NM&FA}xSc#Oian@B*T^dVw;JhK0drFOCsM z&IEKuZsZng9_Tm<(2b#qEa&uNum4dlKN>2LZ9<-JGuuQo>=7cuFYM>sl&0|l9~Nz1 z%}f$Y{~Ax1FpwT1-!cyqQbQYZKB}&zWby8FGH`bwf*vL|)L&>8JfhI}Z$540VamuW z$PE0dXtC_XLqmbh?nlQ_$ieuo2e5FrY`rJ#xE>wCa1p5j<%?SK8BcAyg#wQGv zzRN_lL=yPCKC2}F(`$Yd;V?isZo{q(p`?;J_p><;DA#r4uR8=Q9jn^adOf8lYU|^M z?z*|vwWGyN0LqF%6>pL+b_;@hxsmFW)`*siaOkxz{PKi`i-j0tEbLg~Xq5jCtcHF7 z$#_3oTr1c#nkqTs54ONX%afnY+M@yeA=)TJ+KYMYFd9^-nlWkc!71KB3xP1a^e|F4 z+B^!a(|JsfpuWj8_Wj8tVIU}p4|{~Fs9<$P%k5Pa>vLae)1%l1T()M)^rJj8*hw%* zss~goIcxYv)Gpk={LhN&(8D7BY7zJMWDZT?Y;2xPiX&ueuT(K`mV#7a15{>G8!h=w z9Yd(UVVvx@7o>{4!W;u}^TO>b)yEdJsA2C&woM*J!ol`oh47Yqc}V7*>EQ|$#ROq1 zJ9Z{Oe+y)c3>NZ~O=C0Ymr=5Ly{HWIk(;O!tAyT8X##wR?kWP5(j@s&TJ~FobadPG z^A7KHV2x8iMYnkf4i%ZrQha}Ch zmf0VsMXC!+&lEU)DgEWZ(?dG_=uYR-?#X8OUZ}x(-xk!}Cvguwtg3g$Vqgc0LeZ0V zds2f-;Gj^keRU=19*HySgnX>&p1%26V$Ed4Hoa2>MFKQT;KwL&AAnKfYZx`U0F(D> zD3^mkT%nCV^I9qBhSxs`b@$|-DH+%SEB^#BRhdj%jv>S48||8brf>iHf15xqx?W#b z=7lm=_&&o0)}sLbKLEh@GQe4O@>OV^P`9eh7S71nB&pE>MnUT~r0_ItOmU#LCn|R| z;|MCl1rE8sKYhSFensi}u}1l4Rrb(Mzu~lkW%tyCQ?nG8_^A9YYKHo0>(8>IV6W(^ zyj}zm_!L?XT=;WeH|!{A)oGW3^>&Vf304A?m~93cJ?HFPw{tD2g~QRpj=$i2Vwdz@ z7Nj+DbiNOby7%PU1J!m<5|j>`S~JIhr|C`uPS8Wd3Flz3J{NRIadVLGiaM>dnio;M zp&sNaE1`%b8_fCFKz^55YF#eXklYchCkninV+}dSMc@&uU%3qb$a~h_>@#MCX7?lF z5i4OA>c}6alu5m%_OYY46YSEaedO)@_Fjc$I5eJxMCFWB@iGH{kFQfXlS^bmygTqg z+-0G%{8)dncL(K&>m|R#%;_qksF7r=^jdm27an_AaS@tG2JI}M7KczIjq0A5$N(DC zE1+)l$59*yWMI?OW+}GUQ6DM{BL`5F^i_4lFlAO`3z$i`grQw1nXwOf`EMrBP|o=) zet;1O-)@m{w~K`tD{jyjQ#i^fa*eF)D;)IOSO74;wS~JK0tbBf&LnD!{(B%W2a-he z?23{Mf~78nj-Fl_eiB}5{V)dv!~?0EKn~#AjrnF?4vyw6%hNvhU?|@k+M`TE#M3A@ z6YAPW03bMp0f1Xkw?L$l)DsD(MO$9yHaaek`!dp`3GuZ{36crL#ulP;aftJO}NskMPL^>8v zIWECjq0&G%jF&QiqpjUt^}SI)f6|=9L3-gVt3kJboNB$a5n|4^G#*vE?g0X6QUX_!c25*itZBLn*3vlzRfXUx>7O7 z17@-$Zq?_;FZ@2QD~bu6hZDY~BnY%#9|ED2A)Gg$ZIB8y6s&I5&U*X4pX_7bSnS8o z^qh&pmZvD_!}=|-`J!HG8cYDRlZ@_m3 zrU(!WO!G(Xgx9Pkzs!1RIybFqO>bRLXtq1Y@hT5($hRug!7JV}%wT+5l%b#4wtL1G zmU8)2=JHTV-hnH-z9^Mx8^L}{!HZmgGCB5U9t{ju{7U!{V8B{K5q} z@~47R>ut7M2YQL-OEDe$FE}|TwhgtqI?h>umomg$?`$tO10*G+KnTI%3ZS{Lg~F>$ zEH<+t{KJEtQ~6neH@$T6a({CCxAzjRy43?0qVt?`l`oVxmbqw<1xzvR(N^(2WDS2(3IRtQWR~s%2!472QxUQU z5LpbEK0 z?$!rHr2oPK8<8AzdBC%eH(LoQd@z#UIjF9@=((S-e|A1p5k8*Ucx<+hJ(fv@!trl*eNqW)T&_9ro%_@3=+vg#gmJnb3Kot?WbopxZcyF zd+dgU=UwfeO+h&mYIIr*R{En>@ImQmD5>^;xFZGE#46HUlJug|i?H&(O5B|j6O=aG zMomr(P@xtiVHiA4O5)pd{w7B)Paoo*cw|si*8rCztpKQP)=WiqTO58wP~+m)zz6V{ z^0NO_d&^BXHQphC(?ha^3AL5TDSr~n3nyv2)#^vJ3uu6{%7|+<^=`LVA_`K{@xzp4 zimh9##C8a^^jkuzieGs~5!meN@hLJ}f0*CoEi+1vz?e57;GJpRyAQnI8uAPEWX9~f z3CYlz`=MyInpE0siP2-;(#S)m_)NjOf?*WZz6bv+1efPEZDjZC=5QKT1Sf_dMD66O z1~UD?H-Ed5%8@+wW zKlSU@)Zi=X7_-c8Thk62XFcJ5xnc}#RB<=gyFo3fORYXuU7Kp@GkMt^Db5X-VZDXU zrr1QA|991JO}@EgU*X+K;=K^ZiXi;l)6Z@b%W?|z_(<4c_znmP3Dkx=+ zO?z6*Et}lIM;hTn4kjJ3i!AZ;b+{a^uf<#$oOD(5bGJ6LA-YfPLBp8@8nEhp3q$m>{TOtNB1#b0uw#Jwr3L^1)pqYOox1qDji`$J)Jo9 z!d(*EMVz=<@Yrb3)eH4jP;g_fZMMLv=_3rjxj7890zdFCl|jRJ7ox-?zo{p24cNTB ze*&l!_@z3I?%;e7Hmpm)#CQeIP06W?n{$Y-S{|W`bDt&9-C?$7AOhBm`M!`_JDIAm z9s52yMK>f2Km+~)t}m-0EVVLnuqJxg&%z>Vd9E+fw|@c>`bPIJ?{-|lu==FUVTu9q zrjlO!*tiC7F;dBZRxk)ewjV;xu(olbKiZ41Bc-Q-F@V8*mAUOyiQ;smJ6;o%sK|ib zp^^z1tC(DcT9%04!g2REtcKN}z#;k{^}AtT9w9N&M=Z947_j-usnZ6*iv!zGT)1zW zNvW6b2IFNEoCAgpC!QwHdkpA_lqeV~x4oNi=WX`E<_m^rAi#7lS()vL=L}gzE5S*Z za#u4**$jS`ry~o92Jb{?IWEL7o8^ff`dqB(NZZS>X89KL1G!M9RMm{mL}+t+GG>Mv z1o?)>qqor)O2&cU$8b85mnsA_B;#;L0}LqLfU|84_G-^vr*mGJ$K7RR{TiqrU`}lt zm}joq3!UC)en9V23Jjum%?`ceBI*R=iAxhPlO#)fsBwLi2zM%~a5>eO_AN6^zsqm- zeU?D3#6qXMB@Uo1hIQ{i@bx$B^EW?*`OZX^X>wf_4kX75uq%bH7)98lX5^!ThzqsR zw|jMlw8H3gJ>yr(ky!?sIEJ5Qv=r|q%Bi~IhN`|JfwCWRUsz4$iHSti9G;Ax{Hp=IJe;#3z$QK%PFb>X@Q`G8R}n>cCxRjpNetB< z+OmplDCe}w@vzRp=T)6+qqUIw@HO|ZAzDn?5ux|wwQni>3j(p}u#+K@XAADUf=PD%y{=XF+5-S*>uYwN-k;k1adQD`oRr3SxHbi)*}a`mTHbBCOW#COgS9|Bc&? zSJDT5jYlK&Nx_U3n3J|$PnT@}FKFm}7;p41Apa(8S3-Rcr&0tFL0j z;s^+KzKJkPI+pJ%sjan;bQfq_)$C51T7{GR1GFgGXGe9#bZR@Iy&fR+LoZ-o?4$x9 zMP(OPrRli=4eghMEvO}_F*KYupIF@)gDt z$8tCU3!_P-s|Blm6*2NJ#z_b`=k}Ag-$ZiCF^Auu!izc;hKv(R>z5`pYow<{gi-$x z=)!^Qc&ojn!^dpVswDf$N|fHd&KUV)r;^RB`M8$N7Ah=pGM9y{Ct|OkkD{YO_V`%% z3m|iO!kyeccBD+pa>pGFtn=6vwYvTgZO3eJL0WE&07f)sAH>TZHmA`jscIa%$&_Gm z3(f?|B(hZAn*jhPI#m?S)2qctLCpG>mYtC!K)*Qm#+pV`>JWq#gc;jI?23Cw3H0i= z%DS62f3|hJC7xgu{F)P%9l%cTJgQdJ(I6H$an6q^EKcp_>q)d6-G-~H#4+st)g4Ug z$H1cFkkc~!C!JZgH;YOz>QF{^UiEFO-CQuTSWSVnR8P6j2pP1&;#wb+W(BZ8G=xvi zHDeH;JDf$ARng?SA<-X0Y@B0?Tp(YgVNG6gODl4dMie&CY@qw8MCE{k=LQBfjW+sG zkWF(4=*MkrhXr2%*VygZNH7!Iv0@$5WNmly;>qgvz@9NjVSwUvdequUyJD5hjZ2fS zSSlOvNRKZ#f2AB!=`WJ(%gt(^Mf0$!$a6TiU~%T=O67s*@|Ug1rvg~c|J_rg6+DGH z&6!-r5&-@(r~V!SN}p)rtc6)P2$OoeF)hz+NzVOn_fw5FA%ux>1M{p0uy}37BbOy@ zAZoV{5?)xLwuFF}FrA5bl zctDpU^xyORXWr&48W=8jsbMrc$L!tCTzL*(O;YYK|7-F^Ve{_nl{yc* zGor1Tmq-29kLgsMh4Q^eZRo61z`=E4GfqT6!?an{U!!5t3JqDX4a&Mo5>V1+#tlGn z=)U;s&@uotbeR%D_|-TwhHt{3Ln==a+pex3xeBWi+hidbfFoyfsEws!V@n)b&WdZs zH%4oXY6C>ap8eGT{s1$hw60g&ppapwR&HS6N|9^HZe^21{^=>ed&bgpdw1=n zm9XTca5{2QO|Yo+i;5=H^0a}?a{cyy@vVAe{TQ;}8kI@BW;w!d>N(NHfs?wB+1t_x zzAYG2fzj&2lu?#zShKrfMfI3V<+9oYid3^$8p9fyD5{t;5gFS>Tz^0nWg@ zlf&!o5uo}FVUe7|>reTp_q5VdTBQ)6A+@^pN7ZyTVi%{hMY!3_D%x8{RfZ)Rmw??v z-zh?I3&z1MlU}Z7MX+2M32LQU;#$SCzmIxzn;H11kQcxc?gbY>94(&n5dc0uGrW><@Dev<*XV)- z%cIU=Z4aoRCB$ul53$~}m(KHpu?f3<$lh9!mAt6zCEJr5N$3U`$ zHG$D9S2@M?q5#ozL_V@Y)sVW|#Ks24NDQHbACd_N!pJmtZu69(*s32f%O64#a)MQc zJqYe0^>C3MkM|=12U2`sDHUh*LSX{gzGjF2lyv6k6Kikhpsvx$W@)$ zR;H(`E(3IfWy&8yZeKV7&323^4MB=ML-Y8xE5oXDlsKC*k>iZW0v_;jp?+ua*Bhzl zb^#$P3o zZuSsA-;8Vj~N^7&Lv_H&8c z(B%a5>Gi6UQvL*6l}4N}xPv{7f)lF|lf0L#kbYG&EI`x(mnr-?rUPsJBP!&lRk`y1 z3<+V^Fd!vhVXSKe)Ij_F7DS)&if)*{$Jk3}AvHAD3iSC9#ejyg!M&nOb9s1)XH(~jDe$r5cI%SX__*S?q( zI4^%A67;3q^U5_*|6d*Rh;4Ex+$~k|Xr(6|iCVS7GN;RTqSrd$9lwJV(K-{t@aS3W zlxVSFlNb3>B4&%!-InRF^US@{IO~?NK&l*5?0wj5WmTM-z?!i$W$`{aw3cyd5YM&z zlXw5ctxX4)=avU7j5h-bKqt=48WZ5J0RYc+RqF+?+IxC;9+&*rnP((I^C#f7E#(z! z=T%_STd-fdA~~g7#rU%4)ek_A^e6%|UMPAReI^E)qPSN)W8M#~bU%?2ZLP)kGFQ(N zB3&P%bAfgplWrxjz=g_`pY`*}Q%7ANw=3-A{k}hCNAjoHWVnM8=fAAxG}~OzlIrBH zuo2hG@_B5m>aTZy!Z{f0rYig3>|t_)fKmCIvY0^6-Mr=n|KadQs57WnEo7Q?dxMLQ zQHpvPaAm+oAr*KD-dwwr+L;%$cL9>P*&TEU#mnLQ7z_5)aIimU3n936VgPt!m{&3b zmT#VY?0Gy0`nX_HIBW~{2*=FzNwp`&V#asF$NmpNsU~^W5o@n)vh6cS1!lBR2_$;;=%E9s;v^2BIFp!YyAvEua_iy0^5Ag;EU`K+-a`9PktB2@kxO z3#J;bTt@_2GzWpw8^1{yc&J3}D3iT+k>ChfrWA5`Y^%~{&%x0_9_L&qF&qG?MjEl0 zpvOpWYzVQvup(o+K&Wz*AMQH$1NQ&-zP~1GCml6Jt1lRv6CYJ=24D22CErRGrenoj zfcCmA=5mp{!q;h(EB~`1R!s?KiCX3|b+>MDE}xu7C#tGk-b-`hZZ#@t@)h}4nF{2n zkwhij!&;%({L?|cM16T2ilw=XmvXZoZ-)@-_Kf3Rc!_eFI}-S*)2i2rC2}U}DMT=H z*GQ(PD-|x&WT-P$y>q)tl&bL;hH^l_JvU84t6`*e5E%za4<=~xm_7R-FTm)VFAFns z3w`ObotK551T^*NEbAHxrCAC+eS%#Dr{jH#^)t_C4SrS;H3Ft~{$aioI4?h-~~MBvhwt;c7AzUbBIJ54U4GFeq?n>Sg4 zo>imi^pfNN3DmANg#kG}|1Vd0Ma>( zC`mUM^jW}DEqxJ;^*2J>0_*K$g_+-_nW&sMsS}!_8~|VsJ|OCXYV5PGThPQBIb5N z@qk}`@ws|WWa+Sd9miU|$#LM(>qouEp1$M<+%1eY)r0`Z_jkpdxyFIAgQ-HiIbr2J z{IBCeM?=HB>zYEROgdIri1I?GyJmH!F6`P{1s66+IooM;)JsXyF2JP%OPzc>w?>E{ zwU)yP7*fxIqLEqpp(TWgW&Mo(0%KH|ZvE(K-Y86EqqY#vVX9R}B*g%VJZ;Qg2p=bJy73l}S;CgtUt^2$hkC*AW75nyNa62=OXeyafro|pavf|uUaeKHQ63NxbEI-!!X13+yJ z6sc2pyIBlD32^$?V&sNJ%UzAN&9`A&44=}8Y3&E~Sqx6(g^_TWdvo;lRy}6?^)dWW zz~dQnK1X~gV2af^9)jS#nzI;aE$g?ryYns!1L-$hShOp*zKqh>+N^Eq#4ZmIG}dUs zK%gxQH^2WNC`^c&yBhvOC57!NR#zwG_t~hwB46`LM&jJVQ4@rbyI;k1-+9`Kq=Oi& z+>C?cS_UW|04f&I)n(Jy_iz#|5^n6_t~IqqwOc`1~JC&%MJ$^5a0AA%Z0CN%yvQ~8G% zGzl+r9S!-ithX`KDqVNiRfs>)h?aJ8wIs!s@M2e>`$f&4CyWgnX)7tZ$_pergnDta z+;N>3Gf>MeJwkXy-Xr&wVbb*F@PmPRO~$!Z=UpCnuDfK(=q}W>e8{*Ya{f}CH5G9u z6K|6c=E3NEUU74E$d{b0Ct9ol1v#U9W>+A+4p5fB2^0V&Ruj{_5V%lgZMfUTJOz6t z)yC3gJ3QAdG1SyFj45H=Usr2TdJstnVCKKY>ZM!uL5y<0d9IP_(=&Z8d(crZsK~|L zoK;ZQsePHQL$%wP>QQ);VlhyRQVpEwl+$vosb+_$CS0{5G}nH0AB_Tv5H27RFnbbk zPG~?Y?1{22a88X3AD^r~IPxt)7_jR5fx1*utc6gSr<17V^jwW?bBcI0$oZ~je<8&X zIXz{R@v#G-fk88F-Xz=j30fTh0umz@b?`<~i0M#}6`+ufVN<$KMJ8n2O3r@kD1{WS zmE&5KisWmmqLdQNI(Fwggj$Ocdo0rjleWM_As;M(OY?DfLi8zn`Fs?ir`J=di)U?I zn`ZN-(dS;Np1`|)8X7qNly|^pLP;7xDC{Umj%CG<~w>eRp&8^0JG&O^)7dq>gz`TKa_f9TF?P zeEpaWWeqpK?-7Vi8OMtj+7=>_N8*mzA(dSc4rXiwHKGV^E7RzAnxaiZ-}f5Yji_*q zx%WQnUw|~Oo3dNYf8KHmK+OS;LNV^sJGp62wWlIg{w9Hq!Il#yTX-6cZm=x^}8b~xAA(y zeAt}YFPOeXC7eHDm8!!6Z#!gjvVylP;+guxB#*=5;s{tmN5%`;BaARl?&d_d%xx^J zln&hnH%r-7 zw4aQBiNK?mC`X16iSES(7Df=r>%1tKufUiZ(KyL314M56m0Ux@LBSbVq}IYt8KpF9FjV|2#O24c|fGZj~d08rzAX;^7#Rh zOAvuo@+-0KV7EU~jnMzt0>HLZ)m?{(AHW_%`I7M65~(XZ*Aup98e`93NzK?#fnFt7 zx}G^@Ba(!NShF~rq%NNi5>??`3=t#StjXdvx|k=53QlzSuN}TbvqH&pJi}m{3@UNiO`E3jGH=HywQt~K7g!fjE z$RtCHFPTvRwyE9`WM&O0AfjvOyBxF%x~a!#(^rTCWZwl^Du@klJ4k$9rVw0SCYd^ zgog4qEtJb^3k0WP$>>Zn;g@wkSE`SmY9Xi3yUL+fn2=}#85C{Utkh$Ien5JX$eM6S zYzusM4B=4lX#{W>SS;9<`Bq|}Vh%hPuUb(|Ul_{asTpBR#A>$X{-*W=Yzg4~``McI zY>K-IeG&9oOY<>WF*O;O6js3CNi{mS;^&1;r;!n#+=KWZgF2^Mt-lBm47syYlS}3P zWnRvvYobzUKS&o+yp=RRZ?WU{?unXfFS;N`#D>+`3#Z0>6h8;(4$=zv%PSe(;@@_^ z%h8o{!wPV|sa3`mrY(t|wS}Yljw%%Zn>tr=roF&ZW*q@p8euJidqBc%0 z&;dOSy2EiEpd+4UVE|JbC3KQ`3wGbyM=tG!QeHS zW9bGpn(R2=@7Hwi)Cnr(e(*3a-zjQq0}7apR#d*1Rfm?5u}?@a(VjjWsgRdVWxf>; zwgTCBW`$VV@RWMu9<|j54@0`}HuDt`rZ>K+IV~x??qB0Hdu1Qng}`{-VRrZgSqU#t z=K&W>?qzzPdMaT?sS6xaQ<~nNUYxR`Nm0(ggX*gnXy@a{Z{;a%OxM2-bgB9@{TWO~ zfb;j1nVA~I)xX_DfX6DRX@HYx)PxICRgKdwJxP(QHV3Cfy)V>PdV}Ud0&j0$yP=a< zuWM42A_NzdjhEEq=fWPcfHDdUEG_73^03=|n(ObPK%B>^SUnT)e@OkFKwTH3;KWq< z5<*qryZ}xWQQ81Ky;mHYq|x)r&9R{c?S&a#6KN%;HFnmT|t@|Jcw5If@6B3aw+_(}2 zvixoD%5cD`Fi}hDBa@iwQozJCKt6X`bzK*uGZHtUfenE~7Wo6orq&NDiLBt+t1X!`FdbSkM&z z4mPIQ(Z{_|-2Sn72lPO&tbE13uaN({BshNF@Z0ry8@ZauNxmpwC_9$(@q?pIeFD$W zIZl13rFo$W+Y|cJbGmIc@i_f$I7nuli6tynhVAuWplx=&HR+fyrq_aKmZ^vfOr|V+ zIy1$dZA|i2k^<53O|V)AQE8c1io;}Z^R6=>eYdfu2)JhuH-$n2r#Pyna?kiy$LuE}7Cm;Se&!y+8qrq#Xig>OA%9x&^u&S9d z{;!$}OHt{5(qks%HBCJfQ4}$#k-Su`HSw|2^iO{GhpW4_Lnsu+G*f2F=IUU-7&M}57URFzi3&!|krv8aL~;O!UOzg_lnKI*$$bn){UsGEIl=s(p%V{uC?y_Y zgh#9}gxT(7qUDWGlSg*y*8j{D8pLdAjcZC=mKL~o9A~$R<^OCwPxeS6q9!mPiO3r@ zm0K-Qssgd&KYJan-SeCR$x)}|j zld!!dVy)bTzSTuWV1M0F~f z8R+#UrQKrxsb31+3JadHlZbTxOfzbmfBh`ty0WF&&g8z@R&2L?(xq`FmV{<%9!b&T>kTC{3)&&fkYQK_<)hq2c{NSLgv%O6IE=BtLJ~Fk%&`WzQGH9c3(}&U)Je^YTUkXZ9J6bre;RPTmCjo(UgX zxFEX%sUQUWPDs*6DQY!c@{vF;tiVlW@>ir2@*I}hwLDmMYG+zzi1Z~3;Jiowk#w~H za?FqHz$fdi(4E5MoIeTQ=xeUJZfJcfo&>GM#m_rW3y8AD&K~k1GIWVI3)3>;WwB_|^Ze`+N$IXS_-PX+@VFSjryV&1VMop7 zdJQgdbfczr8I=|wrPx&=4#rujwrg9u7bzI~OMhs_4zhqjK(W$wvb>46sj`JN%-ift z@}ZWWa4j?Ff|X?t5f|dMwaO@l@5YOG=0J{XxApHHs$+0z$_h@#HDaoPFm7DOo>u|? z*<0~$@!}|I{@I`Zo-5Iv4R8!Uq)*h3tHQRY8EqCF&S0}n!O^W2Wdm2~%Q3Gkf>WlU zscnjG=>fO3;;(zUma4slF|?@82Tj>K)Sg9MC}mL$8eVGL6Yuk6lpz$b+~$kQNHZjSR!j7<#x;seGcrS-+$C27FC$Mo#i$0Nny4!YI~;(7>YFxr{#QRQdi!M z3(eCzqH31{OQ@_3x_u^e!@wxZcu!j0vdlCZuD|&!5E_Mkm*QiLq6bNsgG`NcqhNL% zl)TzkBvTB{cin(54oxIzYw(@I8$djczca=8(Uw0!-@+&h4o9u5#pXx}-=u$YS-oeknOjj6aoAkOr+b;-nUCk z_nNC2i7p1n`EXw6jX_)~2J1qAEOz>Z<{cSPp(*IjNProW_ct3wdn8C|ne0w9f)1nx z$NKjxRuEuuri?5c;do0Lh*MvZ9JTFCg0kslRGM-7#lt8vA6ImwQ{sn++lN92Ww7Ig zCq}$i2rn1ewcU2a*?FJjKxA*b@?`^|cv4niNZjR9e)iM+EA$$r$zYELU=Zh=DfN}^ zwTy|{%OsvQpSqE(bnRmksC_hQ|Fcm17d33OZ}Pa439E8sNv`q&5Rhia9mNEpec2?v zM&_l=atJ9hE;U3RGEBkqChdYUGWd9(wKb|dfz>3LF}5rCkkTg6_5j!5Y8u6o9dpbC zswMtCDNE9AhO|4m%6n`e=o0%hrEIY*LgryS>pO$rltdmpG);i~^w#NK=~zBTy`1|!V3+AZWFf$r1iiCEHxBY zj3Y!h(;#-%@HWf-$%PqjdJ~l$=nKi}3luRG*~)TQI`Db_iPydm7&U5^>)4fg7kI1_ z(^pq61~w+Zaz1MLx2Lsb^Wz(Rm&$gQq^5RTySzjLZgSj?NA63a(fF+qQE``)$)9yY zLx+N(S#}o(50EznkKQ;&J%wm9=Yl)yPPte#IYvzMRSli&l2zLQIb}b()FzF|4A@_+ zox1rXRxyqq&H2qzC@iM1D!Ve&#QxC8J<6}=OYLG_wC=WoEq)yd5%H$Zv` zkmrE*uxKLLL(@;@HWBO26J#j10HCRiBfBd(znT&6(gnFWxsVan2n6&^Mp1NZN!TPr zI6cXi+_X;aP36LYc{my@821sG*nfG8*m0_ht2$)odq&M-!y1Qo5r>LpwVKGOWsrbg z!$0V`s?K~gY%5l(x_wG89yzykxpFFoHadyKL3W=^V}tQ0eHf@^TyVVu zJ#L3%ie0l8KEq;CYYg4`;@a}YaasFDxiX>aiR>CI?x~p1-i@P<0X9-fT4mNf9%qWA z{xX7}n!II%;-v{9kXgV>v&OCpV~ipM6qthCx}9kL(_)8^7hLs!8|#IoTJ?*^6b$pK zfee7lglP?F&~X$Gptt1tke+U@qpd6N?KLfpIj0*_O$yUR0VQZe89{Re$mCllYEkAer9=~ArL(T#;4{~z?KcMP=Zf!wN)=xySDdi^GM z@w_1*$|OQ1v|Z`E2fZ4X;#1u<){uw%VvsO(h<5^}mD6$w6yUeQSv{LPD$@dQxx2EE z{Sf!*J7xoGtbH5G32<%!FrPV7bCKbQ{mHO-ooqYH!T{8J_@6aJ_2AfqwbBl3=ki3Q zh1(!Hl?k-*M&zT7Fm5J24Q#H#GElLv8fH6J;J|tj#+|4AWia`PA~^E;u!=bZ72&(} zo$@D1Ne+=fgctHY$@J$V(yHIEyD{hMk}IOkp1`vsoOrsjDo5Ex&9=I9+qVAPosO)b z87XX(XH_0%daX8eM4?;DXt(pz4l|gU_NvhBTf%!h4mW?@na@e&@?Vm-=~D&eh$~nM zu(8V_8XDurlf--BXt1wtg}snX?IchCT{)L5xbxBm&(3b71eQ zuu6@8ZsYG{OP=OI{&MvGwIgS+jSfvp#fD}F0U_DgIy|Pz4~MMNU7zpj(VkxdaF5ln zaMvUEyd3I|p-Smv;AmLx_4L^uAXPHX0)UZQqU%e$vdK+G7X1`ScS${H2xf8a=fMM? za6=#kVITj-wLrKke~)RyG#WKs8SP5;!Q(S;)We(A@B??X&t>oQ@{^p(OE2fR%!L>O zkUd&oH)jv^EVOFF1xXH2V3F&br3PzhyA_+4E^q_Ilt!%iyS~8T)ozL^_EAcT`|7QT zkQ~6lBwvFR^|zHfM|+bRj71D@Ps{SDf zb;>~fmTu+aUPCjL!x$>se&P@7L29bRO`f|0LOCvduY!2|sxSL*kL?yz0=;g6mK9o! z0cp3t6{3X*d{@=kzQlkafi;W}Y5z5c+w>7t&k6FP0-^>Js-c!@kA+NI35@f$|7~ji z^D69``%8#4EnF+holeREjWVQDQneBqnDll-%ekAsY=l8$pdK=B!X*(wetRSMr3zXE z0}xa9M+O7$L2(g*qm7^Z%~j6lM_4I>28PSC6Em%y!*xA@dWxJ9nwR-!_Hf19#hR8r zCc@+s*B5sSPgqjC7@ytQw(*&Dwed#`E!De zs`5uYi6|P9XaV({>%UP`@BK+bz`RbUMpmXB-Jc84*4Qs6l6c!cg1(Jtr?`&82U`mf zK1!eM=&#p)hMsqS#b4C9g)C!BP!3EP4jBlwON@vk*0qml346AX><{(}Uu z#EOJl+mvHy$7+EVJ}09JoUC_)mIg8_a`ss~Hlxv6slNgfv)OuasnT&1Q9kYt=8x8^ zf#*@iCQEb?o%@uMWyiWS+RR%sME=Db&i10Kd^2uG@QLwu<(=CGT(madLXEQ&DK;)-T!_t`^YHnCFGVyjmH@gd*3Y9*EMQ z$I*VLzKQ?N&%mmanz#7uT)E|O7jwACguzS=n^tss1DvHjjGzY+h5qxacHXsE@) z9M|jQO&mC>%)A`6DIglLZjw`l1A`eP*`(LP_AuXpKLn65{C7N0Zfx#6UoJD@>%ilE zVRh(1%!Xh-?xqmw;m|A?8@FXNmdV#6H8+mO%$@5s&S1mQd5sK2v8q=jA&+-GToMnH z-0mynSC^_Z1bG=1@VFo%(Bs!aB#_lVP~0``3{anW%2hS^uN1Rnf9yrmz))jeSB-A= zF5zu>%+7s)--V)VKGp=NAqai@|AJ~sSs?x6;M;?1C;}jH24%5|RX4giLi?66 zV^xeOv>=r=RfGHHerbxGOkOW`SauFm9zyQ76WmMD*BgjcV3j0j)MP6cX{@KFIveX? zTAAJ`y~UbST2AAJ)L)R)gjrlemsDt-$Ge`({~Y}vueHPyoJp!s6yFx8OzoLlK zLNvpdl*0JMWgN(Us&g=)%WiGpQCvu&B1;08R-RTV_iMu%d*7aR82Lcxt>9Mft@{ z-=Kltza`hu`&q%eD*Gnw%^ax#4Q#H|t$fqdLr!lr9$-=49}bn%nnc7=pPu3m5zpoA z(bM*41dy+>oL|+B-ntR+MX&(0Y@~WD)aEqhE-U?g{3Xad1mO*o&|ScP4IO@^h1v`x z^7XRm{BfGiA^Xh?UB<*>7P=ZXK9Qo$c-J< zuqzifFrDE6p9DytvxWyU4fA<_i%e~wd$$|XCp&$E-Gi3W<^+TJq`#Wv!Yh zWbe_A<`n(n($S2iIY_2kKZcsxMfP37za)8Y1dfk$kz%gba(2iAH075<2O#@(Z)}*+ z^soGl_2XgaO0#t+y}k|eR-H@2R@2WRXC{=>=E~Qrwf@*E~|s?aUrC_$Pkv> z)ZTvyW)5K!y1^AK^8Mq!Fh}ctY&Y9@{;^s!gdMskYtEOmg4)Jr%dywb(~=H^#f5=y#wf zSBqV8Mr|oL_#qpL;;98VHV~pg!FkCt)d$>*HbV>4($`SnQ7*1xXJXyyP8Lk$qiXu!Ud9ghC-3~JZ#bX1FpJ#GURzs zXU7uv+yLO7jb%;by>KsTB|Rqf-L(p3Xk^f-N+IQU@APFJJuy`Ntjnmmad!=56eM8Q(g3&qHsHe!F0S=-vqhikmM3R} zTiPR?W_9`(KwWWS{x@@-g`2vKgRydx-732V??yxzxKAhe*u*jW!#|X5|K<8&ZUlA(_2ZbKOE=TyM!u-53fKQ z4ps`r&b%PmN8DoqL2wnJz@)6Y(iqGOI|MtQAh?Gu3?KD-bvc9|RrEksUGAc@Jzc+( zvw@w3K=hO5+ShXnWmf<%LPT=(_2RBzd|?ga>ukrrQ*}w`%&l5wWg`p@hD_Ei4X&bF zJZV?*43z?BP|_1S=fGBwU!e7Q$F95z0hFy>hanSci-stK z=qu#8phClB@SEEC$Ug4$j!v|}U& zxMa5n42-}fwn5hj6vE%`AXPEQSU{p^-BW5(;6O&JDwTE63xUAt#v&KEF87{D>~y@w zQ@69kp}PRXKs$9Rjfoi!Ee)?d?~JLj4_fS{{rs*GC@njZ(gU*phFHk&=k!N^;4VtMPndZ+IVuaQ!-%1-&Ig zgU2SrVU+`aq1p5}A!zPWH6=AFRthLzi+jtN5nS+kAd3R`@l0F-`Y);1GG~H6h$leY zRwKpLA!L0?#Ua^@NHq&vMUgJot-@75Vv(_#|ybTpZ2B|*HY}D_(3-&C^NN$zXYgEC`(;wDiPJXy93_&G*1dd@Rx~Wg;WhT>ev{iQ+9VDFV^DKXVhI@mWpQ9-F z0LWWea*BuM(PrVSTV|ub)q!zWo|ZYaKSK9b5ztz7@AtLbSm^KipGPpUY#3K${>+ey zV~$8NdbCC%>H@ANW#ZP2YGM0RE`jFk;eW+tIS}-rrY|k%$39N+veD=)o*!$o{fw)< zcKcLkYkh)>F6xxR9-`m*}~OcqEA^PZj1 z|E?r6k)&Ky+N4m4c=p8BM9Rze=*$jl#b&ZjWL=t3>Tm7I8g&1(A{zlW|#w zN}9HFgTQebHuZ^}7cL`1C0@&O);4*}`1asmtP30_f8~`O)8`m8Nkd^wWS(y(N6NQb7 zFPOWF?m=L*+XQf}qt*40PfrodCsAiAVHqAam|jE*F+7w?q%we4Z#T!D#mk;?GMdGY zG1#{xPJIJ2{%@ohy>Y&L*tr1zKLEhh=W>3x7g#H&D&D*@7Zg3FsGhNXnZmZETQ_Uj z&4SL`YFh?Zv;n~ZyhL+M@K%kOkVNBukE`sLUa(=kX)wc= z%WMzY0E17Ymi`Cao#wO8Om%Dz3L|CfP2d+$&u3CTXnTaCzz-7|K1# zn22V@8VDs!6pGYSiboaaz=crtX89U5KU^r!eY)K!H4Hzfx`GC_WF3#ux!HcK#{s% zZG$-;PQJ?ppXr1WqXt|nCb|H-P&rT0So9Zfp`%+fyefT_TKwVnzO+tunwDWxMwsuO zk+%03z*8*h{YzP&)Eigb_g=T@4gheKs5|#OrTE#JJmf*pUX%+Z*={XZ8q%xEgHUx9 z>R^o}=QDmJIN_e8)(@C7y^tmraQ8cy#c})hXHIaKK0zO4(L^pjXQ3w2oB*75=WVJQ zz%pWH0fwgeJ-#l(CL(`y z{b&g{56a4NjD#E~_W8MY=+rHkA;{HbbVM4ZPCwWG)OWuUY)(Q>Iz5UkEiR2U-n8qD zHRun3)U+s=u9*?F104v=^5VIZW!k+^Tr^e=mq#tH5l(wZs0>z#oEls@yg#39ukpB| zN(J1a1Syw^%{+k)?G!Sh3z4c2)we8EKVDtx;ti7#dmE7mh|CSWyYI+Q-Xnl(?R8W> zcZ|j`Z<&u?3uw$-iL`bnh12E**Tt^^I1a|F?GTzGSRYntmY=PeFgK$8n%ajG6c{|H zsR2F2J6OPQv<@_L*9|;$E+b+7_nMdVj@6I?k*IyZJFb`@+ns3^u`HgO0*grXxU<)C zIa@fzuPWWmAnV&X**rys+#U;Teb^%9NncYN#l*Il+1(yg!;;zLKnyt^80F{}0lvpe z&@5c8!=7A0eM{(>_hnB^N&u>7!(2P(d~2rYk|g`Ea4!Ewpe$&3lN!({gHp@)$Yh{MFhOp?ZjOrRA@s+_2$; zfuFi$@0r06N}c8uJ3i7u;<6K(`NHpW7*9`B@Z(D3%R&SYfh3{Un*26YpeJ)~4W1q> zjdDl;gk?J-9c2nZE$p=HjAH#q3Aha&^$E3qr%*7`dfkg-h77YH9)mr`&t^lgHcO)J zKoX6HdP@fsU;r26iLpzo>bNeh2jhw@{7}~FX)5BCudOQNW}Ls2ThWsjD=({gk5=bM zBvC{{&}O^5=@%Ceo2WB)VB%tdhf?4$6@CW2eMO04UAgP=r7uSh;>~u%#?|KxLngO3 z{`I?OmvxPuuZZdQmAo=|J_JAzZgH1?N$p@s;x*VFy!HukJtFgbvEFli3)ymZOj8>g zF@ZZy;~I|n$*|K2glu|b!H2s#MRc!_1Ig@j&{|dt(6+Bcp|qN`Ml)Z1K23hoQ8dD< zK*<9vCa-}Wi9UsCA;y?6O8{fy(+^Qt$P1di##%Eli7P0v;55C;?;*hQIvE;qbH|#h z&SW+&cVJhn!2y1E_`RP@iVDY-U*OyFJ%Y}B@ogGB?M1>5CN8f{C8r1NnA9%cEII z+p|*66VERHmPF(7`@Kvq$b32C^i-wOBUcCM>bDY7?<*xU5bYIeFJkpKlU)1wwr~85 z{&m+Q5dZ`BNVEZe^kwZKCX;3s;>L7q<%JYJ!AzbDhx>A|@3RviR}9*%iXZ098#Xre zjb06BwM+K&`J-dvDc(5zD3=1*yC5#DQiS1pKHqh$s+uKAWe8k5K+h0ZiEg3ql6zz> z&e9;E%tX}VOhI5-3cC2NN)5nq*gKs2WfrF@Y&|*j2_NGvcN|MWP zY3dL=byk(6KuB57Dp~1;aeq2^kK|gRqmDj(Y^9^x@U1^ktJ?V{^gXD_{N->4c(NX$G6thC9ZuHqVL&^7aFonut+x!{6n^9-NkHbo?2s zM*&Kr8s>Q(+^cM9+rbIzdJ`TF%{y6C2}eRZx^rVIRGy&xHeQxG@@rgEZ1*@1jlC`A z%ZuR*nHEdNH8;Q{IH}guUv~w?EaQDSvx$cp#xiyA4XTowN*p^~HDNYem4I!@%m7dQ zHC*@!yJIg4e2Niwt+{tBT1rDq7`~fl7;QbGox?fn0Cd-FZrvS82xA3Ph899n7{>~ zlGVoeJ4nBY@xJDh+nZdTX+|8%1a5fX`enoxFX|dA$~QWL=|5dinBwxQ z%{IC-FEX~zW|#YnJZ$CKs6y>4dV;dbHnWg#0|IdvN5;mRWjsfF`f|@Y9QO(33yakS zXTNS!VF?8Y*{}Ivur09G;t7_ltP|`#fCGwGZ9 zhUZI(#;b$GEzV$GZ?0g~-_my5n@Or((97~gp}R&MhO33`gO<|oKBp~lHsAv@UOZ^c ztWg#WRDunB+b6{n?h*1bO)CIG$0cj2Ds+LrRC&|E7|00e`40l4$m*ov!yzm&TbYzV zxBPb^-mX_wcpAxu8Bg1&G6?#47|U&0m=6+}jeP2Mnc5X&BYy^EGKEWv^7*7xN|$cj zwQTKpgSsgPEfk|LWXq4+7m0Bi^yw2zhysZ4cMfXuhhwQmR9zg%TT6b!##dT)@hQl% z6SH*NR=ILu^83DJ=jqc#=Q$j=fK1*x5%MD_>swD)h-|j?C?-+`C`niFsntl>-9DCW zbez$mR*V~`1-i&U2j=#9gVZ%5!r><^=eRw3!bR129tq7SEa&&VszETIn1D+qy{O9* zo5KxW%PNjvnwfIEBjyEcwRs$5M>T(e$b3j@@hSK#!#7V<&92nhhKc#wr8;N8IHh^k zEc0p`4f4eLXR$yGWL!_(kh?IuDt=T1(t%}~5R#3is1&uRic7SxlBk+5%mx4vLAnhr z7&WmpJIR$dBU^99zEDbn?mm4@83nP_DA{dWvKRuAkfcf7h;Dd#>!J8MH|-geV!_dO z6$v6wHA{qT_WEIwLM-neA-Z}w@d8g-h6UuN*o=|HY4+0@J&(AY=_>r1tCi9O@^0hV4&|v6=c%zaKZkgcZTEyYd}FQWm-udJpt;~R_&X}RuvD2ehHN&wF@Qy{(@w1qGl&)|YDK8U(R(jVzs-cyfSQ2RT9 z7Yqixrp`g|vBOh_z}J8vzOzL=JtkRqp8V$zvw2fhBlD<52ZBCxVHc$f&&(usQEW#J z3Bx&Tn`W%tfqC;htNB9UZ6BWKwG0| zw0zG0|1)j_cp+4l?J7&ib1x_W3GbhB7?5~q9)%y%m0tix3?XF>&L4GlM=v*aU+hAI zsvh+8f|Ul*sGF4g=<9(}z9SG7Tx?^vP$yUU#48YXSMN^%pSs-`h6mwPq z#XZC{ZX~!|13Ekx>gZ(d$S?4+g&Y6Y<~C4Y91{At7E(IrON zJsmh@N3cwbDlfZnN{pg83v&g>Hx=^L`FC|%Nb7x!3jwH0_fKp<b-X?^;%=LsYQDSMHH{b7&7i_XgYgZtxd3ZilVlwB@)0+4 zvb}yb3;r>LtYtCdI9MtU$@*=jt*sA!r(!mXn%JETtP>qrf8WfcFeWoggFW0Nq}w)r zRfaG~$TuiwWUsH+l8PE!WKdzncHY)2z*fr+hzCZ@#9BVva@qV#aFGxh_(`m3e<{B3j&UMw@Km` z5tP&9MNKoC1IjPXMDv5j`^s9eetzL(US)Q3^+iwtrE9LgiAgjHz-LsBf%+@WwQEFB;9-&RYdah%$IZard&{o;tZz!&+4!;dSNb2_ z@AmA@{S!7B5UEr>%CDPV+4*B3AhO>MGC2#}!zPLr@>@ zU^Y@96>DFN)SQ_&hG(bHIV!>zV6zW?%_^Pfs~FmvkQE}uf+`LQ6yjB%W_^(TJ^5t( zNK6Mx@go7vMqD4Y7UHfyb3X3&%8t5DrPpperXmU)lUw_wiC+WXGdiHq19}Lvvsy1- zZ=o+F(wR4z%ZCbcjFjVbI7$45$q;K#gMTJNX$XxQiUebXxp&nq76Gnau^kQ5dn)-4 z!C`b7AU#FdIIW{SYCZ$sS>$*0`vPXXiLKOi`y3$aFGX&zfk8)6d8Nm?++7f+#d`iI zRs_A6meg#K(>4=Pk;6#;Dmvx+Cw2RZ_nKyj0I9}5KO@RS~6Lq*G zj{tQy5;gb>DnSksFsO^b$VkU6LriMSAX;ecECvhZ@cuvs)r!v%ww$Mnr*gTwViPOU zTs`pBpIVbtv=!*IuW{FzZmYlFXXX4lvi1QExOe7%(1#X{rPVIXP&q|wcz_m|@DsfS z7bYdN0q{Td_o<(%GvAW^_OtAXiy^5!J-q@WbaisD=a+oWnRs1=p)))s!AKv#%bf&Ot?tl^j z44g5?NE4tAwKvo|+{N#3Kyw;;3az;*C{`%pFvS#jng!dNzYIXaFQ4l+<#g_`wB7_? zkq8LlobcGTnq_|2Di$3>>uYAH%x=y34*G6Fd+R> zmG!)g4CYMG;lD9E;$UIrVKb}8blBgdO@?{67mMk#6uN3)WCMWBbEy|oCK;kIpj{GW zRhx^}oFdbzddE4ZDcEdBRVf+JVCT&y!h1tt=_vN4EEGP1A=vN&8M4eg821Sz*K& zGi#NrCr2`*gT`Arx`h^gnY^R#L`cfgguRXE_`fO-5Z*Dpz}&UzLemhDJRNFYeb#eZ z-CEpNyL^L?=ih?b(Qz941{k#(86^}B{CsXM0wPP;mT*Z6Z^g~Kg+CMR*sRho_cO5{ z27_t@vttp;-&0YKHpin?`{Lj>WS4G9Mx zXshL{{du@BU8V6)?3~>1qdqBCI5b&s1l0VlmphIio?D-t4yf7yajm1BKl)A;pcYx> zKK@>y4G0gVF&6G!#`pzgjvEBf08~3GH`H%3`4Bh|!_v0Hr28se4Bc{@nbl%UT)oOg zuz2Hk$AY?IG{(vJa1T1dTsvNUGUua|48fjNd*aN&kTXb&%bwKir2^kL6?8DY_0E!P zrscAx7%UOV!>44Gqe6fTqkb(DUk>!PdHn`GAWmMGe9LPDvRc6yUVI%VT+=|l5Cd1~ zNN^AtI^SxfrcCn#a~XX)?^Bf|=0eaa7Z5}ajXm@a8pRzEN+)K`wV9pzmG|NBQPOL= zw}A^7!FiC$+&@CheG5wfP?16_^I%2_ zqS^TEI`{G*W7P8#Ndtjb@Z!?T;{-r3kSt9W?ibeA8F9^-rD ztU$ByxX1A^UlIW8Uq%X!r;J5*dU4(Ro4Hb zc|o5OAA+<*U#Whfl?F88{$l+owouGix8dZ*)1nxdI|Aoq+RAuECVcR z7Zx`i0WIRuBH7O$+jakZSN!0@fcFu{;+X_r5do5-2OCpl+OCT%xP}UQ3n5HfjS!-n zPu8_Tg(vBU`mgx|(zCJ?_P@Z_Fn!Jzf;Vit1fp07Wz{9Zw_B#XU-+MUwaZN|<+Zh9 zTz~^wxAH5^MsGdh%Nf|SP1U^r6?-gHmjIoy3z2njTz87x3*nRtLWyYl5AUoYc$J8G z0izQwtCW!?Lt+Ol!@a?sV{}d9n3Nw2`d07e0t{<^X8a;4E|3qK5bQVnu^Jj(@D?Qp zw9sv;+q~ax-*Fbs?K>~xZ=oHz&P+_QkH6(W8s4-4YQ4O5&l;%LIp~bEDv_nYSKel$ z!xMNhKYAw7w7SonXMkbeV9r*VI67Ul&b9?Mti4(66wC<#$l=0&`mhN*&9Xj|eZ6K1}p zBZn1zNve%ahR}Z5Zn?b(c8#=Dnq#Gy%V*2P^%`OyPAUO;b53*%dV?@B3=9Z>V#>rG zJW)5s{v_OXgQvvOZ^Eu3&8|cg{e{qPNuuk`C6uebVZ<4xM8GS=3b_GDLY<=g|7f%a z@G-*_dNYg)%Fh@+n@GcCtAf;ntuCs_7h{b|l)QlF_o!s78 z>;ud2yJ?zk1O|!Q8vf!^>4%9)pz+46cRKD8U;bzd`9cX4HdfL#F`X@eK5SGV&=KP! zs1YeYt7FRpJ&;`EI&USx$PpKMKr{1CPY)bL-CFAby^?9~t4+RCJrM6{(AOBN8U4&9 zHtG+U4m&pW7+`E7n&KQ_qo&bHwwF5z61l)bGl=w_xy0IJX0Toywp=78Q*Js z#Uw}K7Q}bdjc~gl+#LaR3K8k8is1-nvN1v};mv)4Q@ZiO^^sSCK+NVrKgv?@0WYGd zVIUlvjdYfUYcx5L`H=w@XE$+j|RR#hlYBJj&UXJ%mt@R(N(D zMwG=vC(wV8on3DjvN{8dhPn1XRnEe zE+BUfmojwU0)QaR49P(=kpc0hQ}>gv6wn*yW#*^jMS4fN`tN-rPgL%5#Ebi<8-ag*V&Sd z1Cke;({h*K1ZG%`JbOq$V{FBTgPBO2n49VSOnsYzX?D~*WH!}BbA&9FxT(81nf@K) z2mAC*R2q~ngPS#-m!;dV{wJAi3f513e2l#RC#hmc3D?)JraM0~?g3KZEEFpN+SZhQ zbieH^Cp>r}`XBi=xK)6wf1c^_#-((pQzQ1p?`91#5$E5#|816;LMhfw=?*VonS50p zy;lXUKT|!W4Gnssjf~t#`=PME{-mPGxBZ^4t-9(D>BJGn(bl}z->e7PQ!Hl zI!acq5+4F$mcyGlsPOaOM!DI=-KNAvbJyvhD> zUCcMr8vthOq%fRg+7Rpw)`%5Ad9a0KfbTZEVta&A_Y&|dT$MB^`D3{P3vkrsyBCp(t7}8yR)k>4VVij) zSaLVVJmM06!&b?h|oL8m% zPgx>FJVM%s^-NVHCs~X_5ia%A4=$eTczZ)=>|jT~Aw*F=G?H$bmQe%CP0MCl60wMG z96|}e;EdbWLSue%P>0183R{TwBGul2T_G7VhXD2`!$cbc;}?fS1}G+vv}^;Tv0SZxw}M<0VS7Fool zQD0+@Ng1Ar_VZlqCx(qS@9`p{XIuIK0-3oyPp;glndhDuNwor#Ejw+cGZns70UcY3 zno=sYeV`}C9q~~J=wXAUEHB8gC=C|-x4Qu7_m}z4Lxu8SV{z7r0b$`su8uwlqNkcu z`;?i}k*%t9R{CR^D?4{DdY|*Mkq5S!^<6o{n}7pQNHQ&=u|P8mMD=_>yDktyf7Fvt zOz#l-mrLkOaX#>arDW&4dxwfqwjOhf62d#cfl2wN+Wwl+CJbO0$$7tT9dfggMSAX9 z`SX33DFYKV3HXEGHDFG zkXSe1MUjj>(kzL_S6_xE>%z;s80_(cYj!Xl5y9{q-m?$%LEg3 zQO$L>W|Fzyq=Gg(mUYDN2)bMb+$WZ>mZG*hK+Rqe$txquF9~eU=cGXGna1-vkMLS< zT41%tzn#4SlrvFr+RVx$+N<~WKxNk?HNiV}YUPUw6ANy=$5=z`jLsuzGTaV(JLmYt zLh76ZMBOOwO`S-ZJWr?%4B^`xIUQlnl6Kw#G`?15%(Q0>tv8WQeokE?xwJ{a2bKs1 zVr3x2k4J$?iY3>*@VOv#o<9zz&}A|`5O@oPb&m@ACLI&A4)^H+6z45X^J$AC#IoX= zd+J6VtL%%{7gi$ulsQPZquim(@pGP`y%=wSudHn6&BE3T_tI9jKESgRp}^DJ5uj8k zvveS2?Uw=qvDqnvL`0>S-Tt$(iD+jznIZxs2DJH9%~>$(phg1mL#jPvC5mh4dFmLH zmJgRxT*Ix%?g0H)-y?E)gK*iDX{NOx)UILSV+2_zsiS85tke}2$E)~H#$h5=PH4`e zwY>L)wg;6z8JUUcOxGr46!xttp6Q67{I2b}OVI)^P=nmZPc@2)HZ-{Km@XM<*;pBz66 z^BsgNWNT)VgiFYn;?E!&X@e#-)t^HA?;e4u20%kAD{ab~rkX?cng;G~MEoE#$is*>)n$Fo9H#cz2bOR~^> zsG`%DWhE}^cJb4(TrQ|g3IB7C?y9dYKmtgBw#w6zF@W$WhIpP{IG7B^b%GeX`U=mS zL^4Vf$o3K7)%y~bJ|Es+n-I!fn}&%e?7OzlD8HFdaa z9`Uy8KxRj9z;jznnvXy6TXp(OmX{D2Os0hpk#$TBGSxY}N8e<`6Ov=>s8-KbnOiV} z{FIryLc<{7OZ?W|(qg8aJ`R@)hV>L9-F z(!^;ZO!ocVW_S_8(>SAW4K496Q0!xxH@bpcpRVjsLc8eH=mdv?GjAA6$`tk;PZ*$$ zw`aINk6oz#%Y?or~+G>3mZOMU4sr` zxM=v{1-Xa&Erz^_?$LXL;?E2-=))w=XAA{cddf5XSA1PFUnKAnJ)xZ*N-@>d%{7zM zM3`DoJKJ9+H2}eqt1g{Q2z5FNp)fu)x?&BE^h9^2&?Sf+K670rZHgQ^N3Rrf@PH8M zl@k=F1Lkas4+yjT|9KCC47}Z(hOxSkXji?xPV`@CH@Alk8ArMG#|6W*>Ll2VODDE4 zvIvdtfqWncHU3~e)F9rbD9oEf*wZpZjzs#o>l(tldGp2_Q&j=h7l9LQ-Ezz&+yr;e z7N-<|mbj#=!Odx%Je#IJaCcB%$GIm^;OESaZYs9556g|9C}t-}yDN!}W2Gy@{#O%> ztujyoxqLsoe-01EU%?6-JA%p3qy|@tbY1ac`IX3n=`SFA!r3Q;}KT))y%|AF2q0 z-Gfry&g)Aq3iks#b-eRDErBxDYkO)tsLst!oKW}%^XipD%oAD1w_8SaBM1Q1s%9%r zKLq#Nen>Fp&$-C4)W@5qhh)Nd@?+*vQ1B3dg2NHEci0w4z*xm8hvh5jNN9w?&2cl; zg6?Ck2;*&f6DoWo%EhlQ8a;bs+*iT}i7qByo1ri{Y4%0vFBeNDaF@NQ7YbF0pwbsM zZ=^3ioJ&==cY1nM@Y(3tH~dA=SS92;q<4h@zq^PG_UJdkjU+|uQxu^|SF8UpK8_Pr zz9QM7a!6LBzPwX8##rpK9hEJQY8cEq5QE|ZkyXGH%+YptmKS$RHQQJ%?h)zwez?!< z%1%OQ8G&IOq=IAE^QKDDRkUlIfgWzD;b`Y;JNGWIo9e3M2cm@jE7Ev<YdgAG za;bTRo#T#2z=7u8t(o$=c6ZE;uxp+Ko?Yw)Ya3%uN1U|Breq+k9*irZVIq@&tN4h) zkb_x&7T~!-NM-7|AwnL>w_pX|0@|*7_#SY-qvkCQy=__55RO;fZG7IYoYSCH17eYu z@fMgt#^-6Bq3WLSZt3S7fhUJ!+a-@mMdE_uus@~}wyY=)bG28-Y?xU_c5 z9s54d@m!%K=!);N+ZGwJrQX%(B}@>M&~+oB7&z|3Xc-}0kbf)#;2A#7ipLoU6kNqK z<~-3G929nPOOF|<_0`s@V>ae=fQ<@{&@1VKkrdN|e4t~+-;E$rvQHmdA>!EXTc1>r>tMW|C zl&M^ZRn6qG5$^#l%w(-m>;*kmA2)1aimhzV7u$5&Vpseef`}FTaQ?Rrb$e_6t}5P= z;j{JJq$NDRxZHJg7gj+v9^=be^tgkGnZgi_3b#q9tAex&CKTjfW`OC-mwDid(fRzw zojziKZ^PkUFfD5)20s_4UE<&l38Wqg+Pah?4&bGw_jsB5)0%Id#M7cIGjOO8Wd$Q2 zXAz)8@u@sf16ksFE~jy2v>5M@N7kL9C4G! zBP^8qPJp-#%?4funeD90E{3CbIg{rTD8djMxW(_?wA0>E)inC$P-D^A^O@g2$MxR9 z0!j6w=9&UXZvJcX3-fVAyN9M`teT3HTe!*xpB$dMaF2tl)VO`TU6K zS3|@>r}$bY`I@#bB5j}Q`L9xf=AXoIi^6uwmBsVwg5~B`)g3OZ4;CJO;4;d%TsV+U z@7W=c`v$L)hv?3 z`^WW!1Jtnlt{ZoTQC6y$VS2})Mw9R3_N?nJ0RhB(hWGm%G$9u;%}&`eN5FF^p{eIH zw9`}c>>Fhkp;7#Jrv0fAA7UL0FXN{iv?mw0_=`u`0l_0-l{Wn{S{V!LL-}I~v>Eyy zm~$0eW`EaK z_|LZjbYd!*NJlht6$2emRs@u#_4>A9V~`Cy04v-BgM9V45;rCSR^Zw?t_$hVdFsdl zH567Pp(>6y)dFqk;BFt*YO6-Ii!ZL%hC*kT?riesnKVK;87rMqa@WG z=}IZ+ed4*fK~vb|6CWS={Il1~AIKbjc;xn<$BstsY;;$y8Y}T87rCM;s4~`vgSFhV zoBVMMu>h0QY=5aNSNuFPr8of8+j;pD?L(YARX{W1hN+$ucO$N@ zB{&XnjcO%Ji;xc?N(%s;NfFBN0xz6~Xq$Ozhjc|T-GmY8)5%(y)4F+1QRBlh5`KNz zV`66Aw9@#ya;N%eEE_iLOMMmKpndMC#LsrS+@kMUgIz^-PZyzUcjhR&V+Jz|4bR?* z2o-ClnT$5MR!AV)6slpA&h7^Qq5M9* zOG}#Rwdq6|XtJS-4p%YnKxOt!*OiJkhKD3E!jtcB^U&w7ae-wI5}a9)|EvHijZiv{ zD9sc18v++29af9$!xz(prr9qHtPcyT&+*nnaqlux64IL|#jyoyOz*wM9w)I)rMsoZ z7m-Lsu+Ml-Mx~e6L%tW(@Iv@2wlVNf>JtN29|g%Ylv=} z{&D_d%MSbi65yIB*m(aX)~o|6fy57ojE6oi1EF<3YtjoZ|8z}=9J17k#d4KpVXymj zqm9)g%bNk@UMN2i=vRr26ZaQ!N0VSt7V3;`QIRWEmrKK@$G$E9O>GZN%31J9Y|CNO z(v&^{(7Oa{Q|uoWQ4_(JIcWrD{Q(A~geGI`)CDjx4o_1|PfOl+Tq71zMHC%J1L#r?~y6 zs+K>9={9OiWnNIF74x9K)PTDT2#T=ajlIT3e(Xxm6 z)0or2Ekm@U1h{U@W|x?^mV9Ox{M-?*hy{f4((HqcMA7V@0!qlXKPx>`e z%=l_Xc_1zScZ;I(W2F^S-9M;n2ZPQ2z8?T=?OOsLA&gP|P*u!eZKHgOld~Xgz#u}y zhF8JGip6~jAdyziS7?&N9L&+nSui6CxA6rMZ03vge}&`B>#AT;7Ff*SeQ?jj=-}_- zm=Z6TKxE|@_y)D&c* z9oeKVJCk*o<1IY#5AU{hZAHNev(k6}*uJ|KR4HEIj7=1KBDGRy>BS+#|r4epp(l!WVbRjlb=ebn~Az zkw>}h5~oz35%_ESyt{puKPbV~Bv3$^O*{X4Ood?N((PEw_=f-6>v7hh+I~9+td~ai z(esz;l5$=rl>r~;?CSi@E0@gQ#gr`KzCY)wQc4Dhq_5>hzPWpRQTuoL5g@~<#*}?! z(5K2lg7Q6uVhNGzm`UgnV_v8dnp|5pKhomSixd9%Gp5!VsZpqTmBiyaH{dNyyVdi- zEmZ0-9=#jd@V}3mn;(*>^6OX{U=+wrn%LZ7abYPG#z+5mZQ~!5u8x^l0t@^;25wMe zFzEqDVm@pI8Q^7J2JA)P2e>nbbp1@Xxb!hO%RO4$GJ=wb z@6)||@PBBY1{w^Ooq4!lg-vxc7E4o6)Z!uS~ z>aztGCcj>d15hq_?$iU8otj5N={gB~fkN)iZdquW2oOC7K&B-a8DOUa^VuuEyI->7 z039sd`$R`3_dvw0qKF_IbVV05((mDi4@HXy66`CN$*IEx3(|YIJ{}67$a>u$KNVpB zdc1F1z#Cil-d?MC5Msw$O^}Kx$G;GW%9zd6@%5kQZZomTL(X|K zIya`jqTMHyvCsSJ4fB;-)7cv!lbO%}c~e{1r!c7svK7>BLKFB;p}C)jsfexcf9kvU zXleuJd^xo@b3$-iVvZ%mXAZm2d@(aa#scp7GLTX&z0xgaTG!Vwfgl8Wf||v~aY2ud zb%}I;2gEV3G%tLZF}ngEz>!I(k*Ep7^5QSecb=MW9FgAoOE7j1U1bM(I8sH|n^2a| z1PI}{Hy*P<1%#&%tNOB^VAzHUHBYjc{5yl6>NG#gMhCDYlxf%=XxGZ5XECO`>+Fgr)04oPND42M;hbf$awj+{7dG~fxE3Byx(s3;bGz-Se z=sZ$s-*BT;kS1ct(xDy8PCK2Z&VX2`cq($!WcNzua^#+O9}wS7t*010rqPD$j~SjT z#?Z(|y7UJY@OQHwiCeYGw)ew{10GHJ9Cim4kb>qBhn*EsMN;ux8y601SDIv<`a^b&YWuE4{0n1>(ZDvw5l&VzmZ-#O8|@raV=SM2=kV&31oKd=54Y?tDSXa zE(lkU3mfBAo01kVLirCiqO%JYlwCk2^xs>IP`TS0bJe0kax@tn~x106B z)^9l6;bP)y0=3Xv#Sw{AR`Lfo$LTK0H=>mZVwLd)!Oxy&9PtzcRQ@w6MU`!IK{qX7 z0Q%3StU9;H-kQ_Wk}FmsXM8g}gi61~m}}U`NW$OFQ#8CJZrA>t!$*wgvb}d?bU{AkXXLz5WedPV1WKmb zYQ)X-5?2jTjN;trJY6zfE=JyBd5v0i)ScbiIKUypJ2*Wpxq6W=^&;q=$aJiCpCg4f z&rJ;QkE|`(=^K12fRp^h6;TzeIx$=%;u^0h9rmcL4ixaWwBXy{yod8QQXl)|JPg&{7 zb6thgKE)ix+?ZV4cyF8y7Y00_ro(wOVzqI-iMyVgi!jHVASalC2LGL80vnhPo{Opz za_;J6)<>7UxH~>bIO=W%A zbL#orG}3Eg7_UGnzN9!xVm#>cvIOy<&Ae*<>uq8f?}(`6jv%5C=k-r|WhXJSO)nn& z&2UsxGS{HMU8isr4Jb^WRb78p`is{vr3jkz^ih5g~&Qq$a1FHxdJYD3Z;xpJ*8Da=FCMVuP z1)?^g7S-C&jiCxFy6-i@{!Wpf5aWa1SvLQ)W(~32xl`|DF`(|HH~Q$w1f2{`*E%$F zAnOggZw8?Qf@c5aoF$Hi^ifH!j7Yn|p=1c^WNdqPjDxgA&MN|rpB>dsFbn!4gJ9V! z^}u?Mmj#*vR{kbX2+c_FcClt0=M6a&UmpJMPI`xVNTTbiq2iy?s9Id@eW9(6AYKMg zF%4;r5vpYjA?&v3t;{h|p_V0(J(?cL8?sMS8c;(CfPcB?eyH)U3~k~AogK-gZugUG z(W>;36|R&`abXEcs^ni!(>!epwD<-%uvU%cgM;cc0II|m}xE+ z%!TI~7E?%h5D!yH!9iT-=b;m!@(#LipL#jm=VwLqs2U2)b&;Ymr@R%3TR;D!E?||pPvdNLl+e}BcOTj zoSsrOW#{FA$<(hJxrr%V?m@(yAs_e>3;#So!!<{tsvA%Aj)Hem#1g`=3N$K#2_pdU zh0colXr*dZ7L$7kKrflRtNVi{5yodGhnteOOLR$6ePClT+L-Z(08N%+4o{L`uEaQt z2EZ|E85lNa%oKSMYoln!;r~;O6#{Oddo5pRSi}yx1;*p63XgZ6lFkiqJ8JcFS4!&_ zEFH>fl-ob&c3C;T9A^%wk);7=Be$hcL8v?~ce`Y~TUcOiMgSUU&qUyQ8NYQ^W;ONa zr=C6dVqTGDo0PzvoP|YnLXvUXro>>Be7fdv;;Co|tC>FpZCqFw#b(Y}ROrv*i#sMO zpDAVQdyC4arvEPUsSPasDq>KIF5Xg17#xdLu7r3^HcHy{vB=vI$kkqDyLSGA){ZE` z+gS7P!Q)3pes|eob;2+LA|h43B^Q_tnXeaO1i@BB|9RTjn5EQCR@4v0^D7PoqbmxJ z7kywb>FHNJhF3Y+CLYkHO-C@z90xB7td6ecMvB^AQlN@yAe3&xD6u^6e;C9CKXqz0 zo~QJMBUBe zo)w{^|rVClCiQS@@b&jokF2J>4nE z{hMxIJ*CG%c0YmLO(@SxVh7iLQLXODG~V6Y*#cl+NYfsNnB?F`{Yag_7VKVm2e?q0 z4R~bFzDML<6-p1~`s>|P|A;019P~eXOH2U&KLEfPU^81uPEHaej&3T)F~GnDd5;G~ z$%iWOlb~?I*i%rSVld=8U)bS9`?McmfRxhTwr7~vTq;U`vw%Z6M7T*3#n6O?=B-eQ z9{$WXo4CH$TBRt2rFt4*G4F;!?pwCmnOx#TzU70j@ejALTP&n_Oon#ooLsh z+}%<{h>rJ>K?(MORL$dJI;wiqJ&rcU?2(91R+7F+DB|Zg2NgNVHxaVB{Osv{JPY^u zgb3Km9_FHH4AB73kPH!P9UV21>yB*h6~?5(@Plf8)E z_i)PRXt5=+1?mtpNpNhx`UMm(r?7>;!iBE`USP7pr%j4i?!4=)VSwvCv z-MjCPL<9re_UKnkb!Th&A+wABCh8VkvWuBX;nTlAze<1iyyR-g%v4ER3up+UEucqj z6Z5XcG4~_M5WWtTh!QBV{Zv{dKDzXa;H(sn* zHn8#&fsLIsN`d()`m z(snZiweegdeU~QqVgt+OJKzN5eV*xJmWkIE1&$qK8YlddX5A15Ik##X33=r!Tu_%76p@Qy-OanK&&8qYT%tQ1 z2XGET^eG$`-=YcYF0WnO$)@G4==V2^kpFv#;}7d3=E#jC5JqwL@cJ_DER9<3gt7P_ zFxR|Tgk#a4t7Ta^`OQGqLo&li?Ok5853vn3tUUA|k=AEG_DqcztPvn|AYac4UmiLP zF91K75C9VOrMOX$1G|IqgdgufCDZi-e4H11%lGD}V>1_~I4{0qi(xW-&gs7B@jnaB z)k?j~eRu_v-Kg2u3!~9=DwOS1%2JbSZz}*X@`dxcL0B1$sy(H4g-^@d#MzY=fhI9q zfF4lsTVS+?FL6shf-*a6SX8MQqumZ-a$-ad<{e^8FY;KF-bp>@d1+?k<*Zi9jXrzO z$pLGncb~a4M)v9Jue?jEBsk+Udx0O;E)TJ*T)xSXk^0%&_ir(aTe0yZ9?3t>*su(m zP0cseB$cGLo%0|N@P2q;?0xeTB}+{Hb9LS$Tt|7xdVs^ebKM(v*KWkv@*|zpi()P` zZz<@EY8f!bh!WtuM;k6tV*9Q1;0G~FP6@=u@KqEDXeC~`xwujTr&TbkJHUFl znn}s-C&_%R)^{BBs*x2rlDM#nQ9gS+5gR!EyBK8jYptZ@w>N%_sXTRF8>O!_MkRi(HJhd^z{fNX`m29a|nMOxyhRU9%W8MSlYJnx5y zr~G-!z!L^c^>Ndveto|5j=Q*a_f8<=mEKk!VBK+`X_Bbrb+)9rB~arJ;{SrMid9EK1d zaf9g{yKQC$u4MF~IMroB6_XLsgBIPUB5u}&0TDsN0FzHE`f_z zDN%%>J28=+&*O5ivB}^8a98)+OT>$Mg;96QJ8)a1@LC50pcJ{i~F(Khk>1M-OuYwNZMq$=(yzqWsx7 zh(xmqaNQH;HuHINzWYP@Y%t954dktMY-B1{qNscx{NsZ#d`Q*fP*b#VkE{|4{8&Qk zs~a%Z8XvFyEta}C{-I9|>A^_ls^#)>#UgvWd)qZaHn)xxwWV$q@HuT77YTtKgjlaG zHc=v3!R(85_)mDR{ho9aJ_tFJ^&}^?p|B3FIR)%b1G@}@H)SZ2DE;^d$|NewXr2#abMb8)maVk#$qK2FkZ1@^};N}Im?HvrD~fHc&p@8f_+ zudyD?1A6Udfz)P}58Bv8Z6AE{#f;7CyO+IcD*h7#d`aDD^%u&se>*e1rCR1!4oTL4 zwHwwySrDNUGqNl#GgNLNhr-pGM$l;tAl=aS&bhx&4!qQ$gs2}Bi@TQWgQ21`tv4Qf zaWHsoTap|54WQF=P&jPIQqa;da8ZLRrMsFn!oMrFF(edZ6Wl{NJjQ`w>a3=nLZ3nX z?x4xRLT8JICWO28=|4kz<}?f~D^Uv$r4%ohL&Bd1VoW&MX6WH!aB^%Dl~*qzUp6** zjn6y2WJHF}ijYDHU)t3_#e!7j8CX4>4{1kO2WrnlY~)z(+^pWN>w6)A!%}_Bq14$i zLmv6-udlmmDucH297ia&FG2-_xWhlSX}O$iDehc8P}X?1_opi{#v5k&63*tW7THd< zkA&(VXkfAmgnVEnLXZ;ZTk&|3YpE$F!*MpXYWIHYy1W9?x(tyjM$#$zVeDEGxO2Z* z_P{v7ZQ24vQoSm*TA_$35}Cl;(w8n4y#xQGF!e*5yrU(Ivm zvmxS0G;>(O`8i@^5`1$2+oEl{6Rs4_*)=0)H|lYrSFJ$~=bNi_SVmA92USum&~fI+ zWZDH=Fz`EPY#j~Vq^CPZ|EIQ+n}?i2C7c-$y;DN}V@-Ccw~v6BW3QWWdIe4+cFk!m z27i#NgsaxaS4$FM{2Y6~uQ}LjN$*!T#SoLJ#sTtII*L-F$ETwjyF2I49l?bqWN5uq zTfaUd0k#h&@l$GO_qR6(wyKotCB{~$jeyU5pULfQB8_~c`NnJ6Pl6*EmnSU7SMkvpR;)B!}a;Tx1+mt&0f}m%TO}tJmib0bvSQ2)WZ_HS(^85 zG?Z(gj}uR}qQEt8yV=}PHLuGxRuJlC3K^&i(X;|fKL^$NNu5iDG=flS|9>LCLpQT; zLn8YUd-+`>N9jqOKeV>QT)vhXBYaD&G6?B#A`=a8Dz- zt*}@q00V}MBD{?bKLTd6n5bMO%-o`R(FsRL?HB=WZjIo|s<#n(iS#Xc2XYM@A;|PP zwY#IY`>W4q7?jj@kA1XK_kA!6PO{ygEViNx)iSdV%3p=Ssjpi2>F71IUiGZ5=r7?6 zl{|MGKD=LhR7URpAI0ux)>!1tr;zQlTF+3|du7*e{x|HXjm0XwF`C)+Ciq2MSDP?E zq)yU&I^f_hW3^I@Ah6Fbk<-$W3DozM3`rO1y9%7$WEL)2_<2p2n}qQxi^spju#>% zTp2p=G|KBQzh#Ag|1D5&1{5J{6UU8LIR=x5j|qvhhgJx+%@)LaN*4DizmXyt6SkFD z)#SQ0S4fCme=K_vEKb;fvPEKf&xTw{H=q`ki(|Wj1-ZRVEUpq`WON_oPl_i`n(XhJ zmox>KuGp%tvWZ>uo>MbT`b^KZ!-fK=kR&wj_RCSG?EuCzJmTLD&1Biv#5Nso$7Jfu ztJ3OqJq%dxf}kf%lyjuY)}(rWG=^Y4=ioC#a86t?%Od@;X7cw}WR@qIrIZko#d3{P zEk70 zh}R8ot@l;;XWua^6diqlcV7aI1qGP=#{+vxe!=(HV~7xF@JNg$0<~}9i-aVxqKAx! zOa@z(Q3Q8s6dgoI-?m`Qlh~dHeqYOcFP2LA8;*4Cwhz-PK8Gw-2od|UxAxI@m^;i1 z<^OtrG)poPO0y$sn|0_#?#LOpdocG5>88)i~8NQPblmN`=sqv#@9!}0Sq;%_l? zKx#4a2s*+wSz$k;iT-26*>XuJV~n|_A=SD7HVy+HUJ4R{TdTdo$?Me`QQIuE=`;M9 zcWnHVPFdKbowNFx_MDOgQK`gSe?)YBum7Z=Jq^D^X8}^sP1^nyWA-Z526lZlTEHOC zpnC+3?z+`RNE@eXOriv>7D4cEGL|DYR`j;ERuVrQL#}fBaTc7HnhD*AeniZ4Z=&rD zulWQx$9)3dh66rFJfx!aq&l{cYUCe5*q$sJXlOpc;_F7vH(GO7guqOKVKozqZ(-C_ znttWMw+_DhCJcT-r0ei!CwBB|&A4X$of1cJQ~U#6lTNrIfyD!dJ_p&_k`=+Z7^6#~ zou;C|$_Ssi2<2`U5wwGwbEX}h4Y{P@x!G^?cl9CQOif8L`n@@h4PqnONlOR$OItKE znB-e&2Hv5mGLBPu#DDJdVJ2o?$Op4wgzydTu%jk2L=5IrM_xp$vnG25;U2T|Gs66VHcM9$JqKBVz z3i}RDa^=>%g(Q`3zD|LOOHH8_9CcyltzMiI?QC+P_P9Fo;Y(}Vg92-Ms!;4myPI(t zkr>ZtzuqJkeR76?hpFMQws2IP6==04x-m>XQrapm`(7zaNbn4QlVi1T<@{fu*kaJs z15l>P@!N!Kg(-}>U_u|=D43vPnO-k5-%h~7pVc=31o@hvwqDXwDAZ{PAfw9F&DR}v z)p%R($s9N}k4tu#vE`DGdWHO?9fiBB+=fzH57IyKS^FX47}OrniS~7s89bahzxIGK z!5MmA0yse+zScgKk`A-nJ9c+y+=tddM>hqSB#Py9gG$h$O8J7MqA5BP%^T8ygnL}sr_}q791~Y@275kxJ4bph2RX0Bl%kjLg8*&bYKUQetPsl1R zi*99;kUnz7*e-O$p!Db=;4t(lZ)%>d>lRbcc9b<|@a0NIsrHACE!GA(3bL;#N`8TW zq!o-40Aaw^z>cBi_fr##_}tWWDp()4Ih3n7XUi1o zS1tG^Qv0n1kVX%E<6q?YPk3gXbu;}$`-gQpvFHwwHr`7bzQVj~?dZBuk#?}tr$hU` zbF7ZF4stGpe-ra_7YKjkzA^$H6RwEOz6pVVY7pg0kJz#jv&9A(XinWeI*dZ#4?s(gS45_$yeof=r99#xu&Gx+v6Z-_j1E zJLzLfpMU)*LPJ@QU<5e5^k1M>bQfUH47Y4$FlMy8M~M$liSpqY4RfJOzuot~pr8cVsJpU+nwitVkhrkdpxF2vvKU32aO%ti@h!umZQV zu)Jk+ws)+s?Gy^R?Z15RoUwNVXJK555&%+91Mwru+KKmY4&KMZX-J@`#a|U@d!XPG zmj0eBt;#PbvqL;Hp!J{OtHR-ds8I;*Xq}jQq3?FPF*BO?-zoTfo5)n&qb%dkf$6*8OIJhO!`y=Pg z4urY*{K%!O%FT-3ees&ILWI&rbqmqq08)uiricS{6_mjB)VKz>T}(FAI&^N@<=a$p zS!zBXg+D8`zI(4x&rT(SKq5p9m7yQw@o!AGIQbRg1)I=4N>Dz6WdJ5GOjF4N6so>C zj~iMwyl~`!O5pI3_m4^4-#4g8qxwj@QvsbhW96^%g;G^~XCXkQ%yMlX1h))=~l-tMUYJpC`= zCH2he4UZH65|Ms$sb3b8E>fJ1pBo8O*xDA&`{pxEp;|0_2fP)iKo`jyvD(UPB>#g< zG|jS$&GZ81wcU2K@fVx^;J@xi0sRP~b?$u61U-^|yI+`Ij+q=ri~;m7!(t%(VsmT5 zupM<{<4dpJOHWx5K83)r6{e|j`LYKEq+5S&-RI!?5#w^kLey-ih=$FW?Eq_Xb@wC! zB)*d)-B)9%afW$C+W|FN`sI=UeXgV!rFeVpF-*LPxYW6HNWKC6bZ1qFEsUq|?@Wk%hjmea`G4I$7HS z4^7~?seSwke9)M@<6|=C>ZC%q#ZU-QOHryQLu>XiI|L6-<|fLK6h&n1D_ zITdOM(c3dbx0{*Zap|?qmgRz~NJF8iIrd+ZxpLC>GjKNE%>uz_NeE&Fj!v~r(K~?8 zq~`f3lpxm@Z_ckZqhdV4MV7_-^6@cTzyRewLhGiyu3svHofu3!!ZN3na6<$m7+O6j zG@iwRvLMS$EQN)fL|G02fwdFZE({z$Vj*?9jp-dI8^08tWA2Xs&TT$Cfm+vOkS~Ut zg*IsY*T1cgGd4wDE-YD9LDW!Re^iB+C1&W+vX#8y@ySFCWJm@dVYx;5nWIOd-KgjL zQ&qWb4=5{g7szhJ0h&1x7% zfWQ!A$P8t#B!VM;g#I54y=Enf<04UnQu8-*9qRb}Rzeb^>*@ahCb_U)Ka;9Mf6iQX zgN&^slL?Yx-6)&WaVX2#1=Yv!u`khoyIh?mHu$V=oB|2N75@*8{ml8#t4^@04FB>Z zkkIiaTm!*U{HL#39+*r#iJ3DtQsJB0_~(Mqf5{EkJP*MHmWRtyyLPbjOV|(~7Qz*f)e+k8hh;)ZUST|j_fmfjgN$Z} zijEfF4lx}q22(sENzJHdBBcV}F_{*M6i5r3>hKf7EieSJ@|vt5?@dd6@w{ z2F=(99Eb}{E2KkvoqT{c4PG<-9N5=O`68231S|Sfhv!WYD>q*@QlbfM#^-HAuyD5R zWsse2=ETS*9i?MTPA)nM zgXNN>Tb^Kpm0aRwwG{W|=t`ep$#9DjU8U@&u8?Mex4ES6`C;r5+eCJg(olu(Q7JPX zHIN7{M5z3>Oif=(oclv|YzppmO_Qs_cU&q>V?z4jIN0Xb)HfaLr34;{ zNHzRfvi@Rnd5KFr0S;-OxvJ^DMmDt4j#@djmBQ@YqjC=+Eeq2(Wn{L`qLCYE8V5=q z%Q#hwE|Kg$NM=x_h_oG5s-}KeWax8am;9*4S*-Ys@=2}SlPl^6A) zC|hX<#H?WlG=I9LC0Hof0ItqMhSxG%JjzXc_6z5?)L5{G8|f0+ z^2)we3eudk-)b$pyeOXu6gW@vKSGtnF;+Uq!K;At?TJ43+nt|IS9HJU(X+Y6wu6a9r(R{0dkR8};4NxAuC3M?&nyse+eb>j+7;e1QgYpq_(sy=J*vj;X-CKe0}w2^ zy0-_APgs~z`oz{pF6ek0)~~oP+E@d6`(jNj?N5Yxd>z@g#xv&8uFiRV_fl;80LP8w zYyl0`(T}S-?1mP;8aw#+PU-HZt!w*h)Jv;F9oa+M8l6N2&~ub3gnUYK13d~Rf5~Oy z9b>eK<~oUy0T~N62JeB5@wo8M>d|KzSId`E?r_L0Z9h9(lyMpg`#SnC=_A(O&zuE@ zK7TA4WSkVrl9Vvtw^UvREk(K)69FD(wn396f2_cwZZ_C7TzaPYfjS?PrDy+iwvgRvF2MA~Xdd*%ndpS@gdZcx*J?}Yv)@j&Bd zb<1vvA1z_P;jP6g_8`6XD8#qf3!{kiPFy6>RfJn`pdS<#FHC|@knYsy#>&45;en2S zt>5Ae2);;Qf9bQX<4)L-sY?UvkL`_W;o+Fe)%FH@z7yDkv#y19PfqAgi~ZU=hJoEh zAQeYuHM)$l*r!ew&ip^u>_69INbqtzr7q;LHHl}idi+k9y%t6*X4-Fd>^Gpf4TnvM zGXcdmkXpE zUQ^my14F-uixNSr6;$mth0no%Gx}0;hADZ@=n+5v(ik)r!ul2e5ptX^&V)C;jCilN z`{NTo+b(KqO4wMZ#Q|gsfy!0)kfiz_aQ2ZoH4Wu>q6<}TAmuu96)4xVkM0QPXPKRa zsN-O6JvE;W44PjlMK=1HvfqYLjl1C65hFJO{E9_Yak@*nm6r|c@Rm9^IMi=i>-JM80 zsV%~aO9v^!_-RT@jtx@eV}@3e%%nb*%-Ga4I09HR3($vZ(_B)LdLHNowrdneE>0oa zBDd>bu)GUXWTyC7H3-<|*8pQ8{gqUs75aEYjNOah8HTW!A4M7Z@9k_M+vA@hU<89f zJv$&{Eko(JU2YYdkB2~D25fbz>JYQj%K5|Q36EhQB0`YcFXVnitisCMux7@-c+u(& zu`93r?hlC?TuD8?;NYv3ae6cHI$a_~E8^#jtcJWUjs1)X44r(?K2ETy`QU4E< z+Wr8wfi*)+Jolw+Y}~ii?PAAKngvVKVF4LW@IQy?Hu_xW?2P-j)S+zNMOfsJS1b)O z1kE6zTn}bqufzF1?9%h>7ju^mBuXK%ue4n4>7#Z1x)#GWF2b~}TQqcrHp(#b zI%P8v&Z2O&&>5`xERO9%qw>L|h!u=wq#}S`P>a)c5Rj}9Lux^?ky)tT?VETaHzp8P z#8%+nJt?zTuUPGCn$;Ql@#MQ1?nDXzB(Sip9_6*M+nYH&<{qL=mPwW7WhUFLQX~MB z*JvC}y5-qj9SpYdc!pS=r;1O1mjUv3)IR}au~6AX5m}v~EQCp1xZkNues~YR<0Zzz znA&jLH+fMt~JE=qM^T zC7xV7Wf&SP|UPfMe!v8zrzqvZx>TdLVLtiWrEqlLqdg3XPIsFU5`M#QL zU=pEl@Eqxg`&a~{Sc(QBNGzqMZgU7b?ua?ui$S{+hiHpse+EF_A3j-OkbJ_I*FJ3K z6ipzptw@Ej^8UseyqBF_I#o-*qz;TVgZgH0e-l`8>aivFIooymuwoo3F+^)iqnM_( zqTpEL?~MwGvO>bTGtxuD4ys0V3*tCoFDzi&Z&uJsTpMY7kdkAx1~Ap?l=r<3@h~It zpQ=4XNx>d3)Nr^#{*^SCW#PFbnaxK&FDtDb`R5;bf39eLEmBktnd7Y1u7hyXn92OvTqvO*}&;1xtn_w|I;jb|vE=LQn(NFP=3s(^$_P0JpMFtZZAlvu|AOdUuXxzxibvDYToQD zmsnK0;`*NCty^ilA%i&A-2;Zo$OsKHsGj7CyV%v4rSwaBNcWUZfgczyfK1?7qGd5_ z9fAlfEap%59zO2`bK=D&WAMBp_SWcFUD`wDuw!LPcG{TYY)#gC(J0+f5FzlNS-TDF zX$O`)-FY%Y>Fh*5h78^%vsq=`p|ohWC>qsP_;q;qs3kXW0`~c_y%e&f?l##H!M=wj zh1*tmxDvcLTV$aapIU~rgJKMVxuov7V2G0ibK|74>$-3Y%)x^=6Y3S*K^u}eX^G0A zDbZ=?H>LaIk+4cI{Y&Vo(2t{4={42wz9n{=ZhP7V|0ujAl4eN7%b2~Se#_3NpSE?A zE-kB7lbL;UBKVZgIasz*en|Jb*jqZEvg!FcY$kBYe;<3jZ! zyzSFe0vd3HP${#OJaCB7287h%_yxa*Y*|{5tY+O z(sw<~PXp+?J2pA2~)jP-GL0LejC5yIdH2(0Kb>=sfVa9>*IiS&pt3=6n zXSjIOUruPxp(yxR|JNvNm#SGiO#Kf0y?=GY)=iVFe=%1|*eXO8EVt!r8>j=B?n4^V zq4+GrrcewJ{FX!cht~t!eki+GzB;MPZwOZ~;roHtW@yY*au*{Ay2#ma#7|^Y81eD<8nfUOb#XXhx3_gw6*(#_k&Gb?dmh5u};bk~PxX$1Bn2gS6zr zQi|G+Dvd;%_#xYw*qQ^b!W*b=7ZJ@o2$ z@u|x;cO`B}z6_v1;sU-@jsVvQy4mBof0{uwIX5|W#-IF z|LD*eniyg)*qgYD7_5Llg=lTVEA2wEyfRWeajEU3Q8?-X+kjvM1E`nwl_Ql)e9f%u zt#xMlF#m0?m}VJdG?cQ>fKAE^w=igSHa%|CTsXHDm^;voOg!Tb==Ian{KTo*Zwa{l zuf0MT%F8s{%3HMQAKmsuegz$qaTQ_0K9hcOgOSV-LvaCfBo20=ELC!ROty4@!t-?p z`VCf1(KtHtLnT@;vjXyMKjX!I)YX)T4TQx+0`o@^=^K{Y#@~F~eUaH&QU?;0yR7=p zir3>QR0Vk|?t2*X2Z4?dH1WSx6UTGd157eN$bw#sK90_+%`jtGUz-q#GYO z@m8(fzhg4N?EqoLNWS#0xiX>AKO)#9)zX;-y>^hY-F^oz0#BzE!ZE;;E%Vqs@$zLM zA=hB6hu*0BAy`hhJGWb0N7!~J@dL0W(+vsYpM|Q7k;l_O1j>ez`UJa`O z3DOCA_)zExvhx^j{_TeMz26YTQvfD0Pg^zddjWH3-z4zV;pD*2?Nb*yICc`N_4N|Z z4TWaV1VL>ozmm=j>qZY@)2LCIzvhn!Ph+r8s4vI(CKLO#-m7G{1m__?Pk|1`cWe(JO*0M!w5LZT}N0!%4Rh=2hb;7eV2 z5jE84ZXuiRsNd^3=yJR1a%#%F^j(Kom)h!OzlkQLa|a^7<))_ofm)!i?Y+w|K?xu< z`-WPoobDn{C83mwbm9qCiB^1y+JP!(g&4`NZ8E1fzOX$Sxyt|NUF4l8E0DoiujmKubPt?f7J@DbRtzJp!cc7tj~*6NTKx@QZBq;CwAVdzQsWA~DW0=anUOG<$kArRR6U^5()SN`%a4?jSr zXKMJ?iWutp=5~X9ggknY7e)4LUZr7H{Z_-QkpG0Y-%C+|<~U&$nnUCIAs+{9;b^`0 z??hDzyMpT&omS{IWyCH(AvIGpL63^0B;Nt8toG#5}??^^A>B$RHC-7 z&16PaL~Zq{3$UTBi;8Ir;~}Y+7~T10iN|7L8K3MVNF$9?te0BH<44)$5}?JNN^`fD zAgFN{s5+%+!Our{Y>JNFhR#Z#D`?<{BLd2R75y$|ySMRZMcvQ9(}(=ia`_w@eF5vQ zB|3RAv&dwflZE&UBf_+unWyD8)dII&Fx5%19boHRHYziCrg!o0?f@q$o8u{>7Fyb~5kGTiwbV>PxPozw@P>S&qR5+g zcqWE;1Kepg&2pQf`xXt^DKp6n@tJJSIO`GUZ(CH6AB89@3L%e@9@9U}!)sP!jS+Xl z&QhLHi3?On8CGHN+#d{Hjk;7(#=SAL5n_HP-c7>*oD84kw` zPFnJuR+PoPkfDTi*9%kNjxN`wurGyZQGnBb5i^#-4~w@3A6_?ANdpx8mis(~Z&tC+ z8+!bzj$s~PX-9o2U9x+uIGj5%yp&U>7ou_-W4+Q-6v7ZEqO+W1s4;s-N!YU#!Y?K8 z+O7$^=a^o%A|HrcT>tH$jvK0?pCQq3?X(z#VmFVezN|GXi&yIXIq&7P3oNCuy$|pd147n z|A+fV*SXP*hjJ`_yp&Ts@qxm`F(h7viFYmr%)@Q- z@T18^loctF+A9ACz@88xjX2rgJ4t~)g0F5Rq%NCp%iPNG*_&`XOL%CK71+CQ(i3w& zzX)n`1yYlqdnQNlCP#pjf#;XVaCU0;JrIFrb|aWl9G7)($Sf0+id3r1niRp>;Xx^f zP!l#FZOJw3fcjt2b#)xx#Zpq4&|Vn&sDI!*uESFWyo>?x32Qd-f;arg**9l- z-+bgqa(|G&^b;- z7@2uMwSRP?y=ZY=#Nt8eQJN!*v};l^F`5X8=+7$nS@O3pXttYf%d^68xch|g>CbnzrhX^@By!p z09LZp48$uAf41W4oH`8(I*hmQ`7?*V?QKZ=)st#BpEb75KK&jXvO6mT$%cA7t2z87PB{;C zqY58>;fd2)4)|8v!@v;DmXTLQvuRYNPxYtZ7gf}#_-LS?m~xMZWI*ew>%6N-{%%Bi z@^t)2?CuTnGD<#FSbiG^LJaXis7Fl`FIR9gh*Dz``3ScChy9`{BA;^#slVyAkU5mIqhWJH9HG#Z#nd!!C3l=vIXS zo;%yACyTJ)y4sRL|7#3Tw^S_6RblI$jB?qC0IqIm_Y9VxdD_?CVTXs8hp3HoQ#e7>fB+rZmqQK|E0P|Ee-v9>S#NEkr5_>^7Jm0FnoYOV^P*~~hYP@qCNAju;l;Ec=4J3>84I|c=zdqvdGFmenb z)0XRJu5Gg|zY?`IFglZib~L}L0XGB(EkC)bgP+JVL8ISS zu4$Qw2@J+=D+^(!L@K)cWCWMA(OI-y^;yHsx_$m>&>WF*4?|l|`|=O^6CcabPOd|Yv)r@=7jVaWV{a&;Kg>9!=BVLLbBZ5`O6G3J z*0Fm%T4$CNu8<5V_l2Es_<1Uxm)Qd@?@3-6fRnMZ_W_tGE-x=CPIrDKEd-93HW=Ui zF?v%tf>7r+0%{+=0FaQe7T$3@Ax^Np5fkKJhT4|Lk>W+q3k3RZ3vL12?4gQNMp$~z zroPqr8HDJg?u|R4?0o5!dVwcbiXYdGZRvdqv*-xz6e#517c^Arg&W$t60%LM)9@#i zh~oJpSYzG5MsIUj-?#b6rxkY&$EnLTV;H5bUiHJ-Lu1_7JV?@5)I%9NYA#f_9YBB~ z^adSSa)W4a`SYNF;HOyuQl|rRjcd7VEQutj1}8oiBUd%$b-F#_nwxifNl`wkAXR%z z2JeoNx`W?W;j)RHAR#JICCxe;kN$FL~A6rDb!;dJ=|3c%|~jb(r0(b1OQ>lK7s%Zmdlo z!LWb`?2Dx>XDa>~80vU6WBEFDz0lI@!*=U3#g~jagY-VE6dg${d@2eHR36(J4T>_? zV1+sUL7!9LWnFR6laP1rG-{rP|44|7!C3tx+6zVk3=nDeJ;^YoC(XZVvmu*2S$J|{ z8uWvE)8kkRCSYeDif8O584FH|v9F^l_qx6}gmuR`UCUL&CbsfQj_yx+$R zeJ6Kmmzy&SrF9>Qe2!g&);j1DW`V^{cDf62;vWKR3Y;cai+adWn>{udj-C09kIbyA z`JOD4m&y&~8k@`Hs|rY=1*TP|iaaXBYa{FQw(hkQJsjY)L|!r(Ta5TzXFyE{>Micy zafaXx!=4EaRc9*)7oIpK&pKYQ*Roch;~NjbHCRjYu{`IVbBw)hv`yI7PeMzk-_ZtNmw_Vs1bh_;0GMGblS z=zGTrcXWLZ6#eBW*f3(&L5>)9PZQ)nZ$vgNNB4jU0Vh5Gm8TaV-GzAGy_<9tLPT4| z;$!Ij#sYJxX`+ra$liJMZR<#mxyY*~mUgu8ViBRiKMk6elow!%B9yGzx-eV}CiviU zV;F>yylv<~T*dE=qV(_vP?F{^yJB8V13y) z_=8%e-M3GN4$)6-(ZE7H zy8chzcKMIhT9)wYh}m9qrqqvz085HcgL{{N)*L%yMd;N5ASFZl!qkqRvS8o(Ejg8O zzN8;iNNXqcBuH>Fn4Dw~m<5}J*iR}1j-z(i&?&Kg@;(|4F7hIY_EdlT_6?`|$v z4Ou1mI3$RvaNcF2{E55#d+Kj5hq?`LdSjcV0t%_07Vd@s)9jYw8VWAead04jULr-8 zmg`733w`Ke-Iq?yzoOF&VWLq1Dsp_EQ;HpDJW5sa+yB84WcmgiN}%#KQ)NdVW3JA{ zRJJV4-I~g3jbkt!ccoyaZ#S2CIxClaS<4R%#ibC17{WUcpsN7c^nF*oz5qxMI`6ch zD=)r0E{uv6%S8w@R_{EJDB^w4P(?f*X;EG;#sky=qXgPM2lTIWydTE)jY1uuzBBr$zjUPH-naC&=uM&bYQcEXrBtKhB^Su*% zU%1|5a~Tm0>X8`l_>ftuvsw=JT}_czO{(wdmv-1$jJDwL6sb?j z@Jc6XobPISQ`$_^T%K`ITZ9`w%)?_`(aGafH{#Gs1`853_K1oVzI4Rich-h~GwvYB z!8mMdhtNh_P0TgL(t{5V6|PU)9-HbHm9)ORUkUnqNsjhk->5_GaXg8jf>%BCRe2>% zc%8iuG24ri?$TdcfTAWrm!wI@Py_Y)H*>&y-B;Ep2BHA}KLEg&+O}%{x_MK^A;Iyw z?m$2Y`@&~kyPQJC#!4qMEpJ|dmO9loCdjHi&xWFSbArJfe21~PEzVNM#Pz)vC*AU> zHoIu@5{p=iP6v*MUT(IxrOAFh6IWodPSL2puAY|=g8u+G8Db{H%yOBP{>ECu-4Np& zk`*vmraEg74{Ow_jpNnqv18QVZ3^zVqFL&>3URzQuX%Oi*eY$zvbY$gm z!JBOZdyT?(tjGRk#u7{|B5ta>NU>1zT~s*-RkxBkZLW6yJ7D!8V%-zF)M3B3N>w2f1E! za3wh~$(s+PEzFdc?wW?UAcSPlX&E&Cb#P9&N*-gqQgy;zoxOV^7gKNuX`a`!r&u+p z*fp;JtPqd*z#`(*npQFY4WHWyvy1Pvu^+EGBPdb+(Vu+AATo)sKr(cOr6}Jr^!Qi# z_7E+2U@$;Y08qyfIh;j?Fy~3j14tD@R(7`bs}ttu=~`7v2FX<1ww{2hw~Ol**qYC* zq8{6iM`Izsr9)F6c2ftUOvz~-sMQuXLv&ogreF9BQcH(>!3*Y5{8N(a>#C6qPh>+) zLo6I+8`wjYJ=iHi_V_Ms7+heZoVw;PXf^;u(i(8H{EW-Ug=P5Y4LZca)b9J*zTNLI zg2%3ZURn>hO&a{;o};ojCtX`uR!n=ucG3aK;o#Keen~ObKyKPJ@e||DPh&k%LWVT# zT1I*|9V$~CXcEQi@_Pe=+tEn!numy|pOKMwyX~;u9nb+1J#4=n%7;*OqxtLC;srWF ze5SV{;k%c<3{|Zvq3PspE?;3gp`bf?gozX! z_fs0ioG$DJtcJeqWbJ=i>;hvOxiRRa#Z*D3D8Y2)`)@A2*m>TKR6N8zqo5 zx|T!hHeveucY}y{mNOP)b?Gq8iUB!b3-Ll1*u3AXSNzPH7c?stk{u;>%KD)0_bfWQ6CyI7gP01F)?nB#8rw4cU(l z9(B?3l9~mM|MCR}jwinZT1YN`Hf5pLR26G_93g2sac&UKI?!6mhynsnOv}4N<(_)P zQhzMTFy?L97lRNEN{$m?*i$jU=*E&@^Z6QvIRz;m!2bVEs%%KdLz&U@fTH%$wJyK~ zcV`QQNwF`iuk}53zvqD&R=L~2A!O%=0*r0kPlC&Rps0=YQcYS$w1w(Yptxp7M@HSR z(Mp8|B&6`uPdH)MP2J}4U20{eH=<2hbmbqU>=XI>eb@vCyviedF`#-mPioY?2vTff zUlXZS?G$Q3fEJVY83g@5(TEHsMb?K$0e3>t5sO>6Pa>%(4FL8LumYUSjBB2E`2zBS zuvEDOn(bQ;?+ntOnuMu^Fb0YVmG1q#(+kQ=JP1BtV)l$5TF=V*gYu!Goye0v@O+&>^!0!2h<5tHz~oxwffE zDjiSRT$!6%=*^B;YT|GbVv50H1YdF}XqJ(%@+K33Xgt73X&CO&V>!*|*N}i4vWVg!k!5nf<(cQQs|+egt@qqSOVg)E6x;lFI11)Ed-M!9f@|{r&=7uD_hA zy`xei>F4kkS>)y9M+7B+TVmlT7Wlb7fJNa;z=lXi9D5~=eR==gJ3rQRq4onX%u78` z3P6Cy+I+~^dkI790C#fDE>mxx^7mEsZ1Xn`r{_hrMoiqKV>!mQyxaXu#5ZaQxnc||>Re3S0GEgi`nR^k? zHrHaBn(UHYS`WhdB%OIvE8cSkQ(>$pC(5J@ZHrjayG7kR4eITA#{fq=rJ90E>SU9a zIlj8=iU*w_dZV&iaH&6bLRGeA39}I~s0H&bpa3?CdovH%{rTJEi~5F|Av!O+_gNmd z$$;rx=QZTh3WYgvRR)s>@5k7FWERUNv>{rKd$xYPGMC_2<48?to=((mVTHZL+|td{ z!`xz%7b%w?>*PPxbzwK|KnLxsN*5Ht z5Ww5VC{IX+MjmAxylX(o-MGYa?c->K-P^{% z0mo$M7H1R_HLEMSo6Sm$sb*v`R|8yY2m;pG_DUXZ9QDx9SbRTKILFEkJKz5#o|NCB z%`1XLg2-$j8CwgVow$r=@6rv8a13Y@azJeXbx{Px7rtGzrcA-dt_{&k57yI)=8t!qnM5RA_J>##* z#NbL?QVkiW^GgW&0#BGX<|P6v#0437APUb->|D}$xap6=26x-w-wTgk@$ajWFEXs6* zdq=Qjkjco$SN5=Zo^>TUb`X<_m8HuiOEQ=tFI~BSKB81)^9G#m3~-Y_Qs8|EV-w_p>ov6y&f8m|e|1E6fPf0l+T-tkAK2=&uvPkBkY~A1-J|_NvoTJ? z-XP!nFA2HwWeOV^?fU1xL>7n+!ay+Cifai;nSBi$uAl`i>EeM+J_+U&@4lp4A{Xb0z~<&$iv@~^$vA5JE$#1C2KjBuoQ{N^SgzFkm~y=WP3K-h z<0-j(lRy(%aYHYsc~xN9Vz-Hx)OQnQ!EyK~Y}P%|ZLNKvA+h5{IhzloZ$mG*kcaaR zMRwv3o{Bf1qu6q}BeQh%4~f_m1Q}M3ZKQkgyxmoDF9{^5ZMo3K_JFcxFJN%Y9 zEjv1_q@wtk!rrPS>@@gIKU5=)e-)Gfd63_5XFn6ZQN>rBN67L`zRU`@r2tk|A$1;J z$9v1P-8)Rv2rDu8@oNV4Yvs#ITCOE1R!D9*^7Jm4zFAEcaPxlpA%*w(s66!Itd1_ydA~8*vEaVwv6)ESwpW%aht@NJzxLn02 zw`9$-lYR9DMU(#UDbG=L4jb!p`y;hj~)71**n4seosfS#g6n~nrodJoFP zx=0yGhj%v{`TuWFsDk!gSbn4+;S*v@zt`?6dUUL)+v_Sne%z2Fty9f`a5Q0dNT2g#=0(5xDNO+OU>V$(b`sqw`KdwexmkWLgVu(Y09Kh6OK zU6###i2pt2q5HJKROVT3|$YCMTjFNG~0pQgE~R6C z1le~=)a4XkL7y^^{z72nB6_OHx-s@6zqU;isr;BK84@LX$?%%9 z%8^;Gs}V59390>B`4D4re-}D8QuHR`Gn(-^jUQIth7T=5rFw2XI>QCkYtc;P7ek>N z6yluccYfwk!1H(U?yH=jn`0h))YZm0&lvkqM2RxtA$SZ^ZH9WkaACt6C+~_en0j`yT zgf!J^^r3)dQ}7AZG;j2GNXX2(PqI-RztHwQ5QL8aX5myv&eMSQmg<7goHpGw%73&= za7=#YKgg%HTft{WRQiS~87P)x(O?wc_q_7m0m-khI-=D9u+!rVT z{Stn-V8q+y#V`zM0pcg zxzV5v!)P|7A_1KZ#pi$LcLkv0?)9da{ojSkpJvgOvUOh>d%V8xHHQkVqTHlpSqTa2 zW!@}gwMLQAJ$WOuQ&VD2+0jDCwdcu?JdY0EXb9y_xPllwRu>Gcn>4fX2ni?zmdK0w% z551^i7eM9MCZF{yGrO6)43e(W?@Ln_rpqU4PZTK`=IhNjC{KY5R4-`_MrS0pYSVna zrL`?(o7jVYTSMd@0iKxLGt=Kc)9nPS4BEy2%b43wL*QGM(#ckzIg*uy-}ag~%{vF9 z0R1ny>b5RVV#}W_o;mg*_KW^!qYDTI2-odYM?!%CgR)tKxaLsi(ZBPWaQbko%At`m zD*Cw|YFo5%M?Yuq*3cImM?mcm2jT6id%^qN9hPX@`0JXD-jR6;21F@YmZO0x0i zB&v`ri53UwFJ-kde9~Zv;U>V;98Cn)1D05zQ_2vck)r9RzKB;Y5;{ObRfGQb(||%q z@Q`}&pb^gON*Zq&g0WrBJ2xZ%?N$Mny%zlA*PX+Yr2@@he+f3)g36`y2L7zFoeN%~ zqHue!(kjDPr09oWPi|pBesvt_<9k?*i0Ko$Jp39flA_)NYZdVZEjJn2My}wnyI&Y9^ytJLBtJlD%t=*HDJ7<7mI>H)TmHq%G z>3$@$N(BPsUfH4sKRd5dN%kL$TMI2!x4mt$BXd}Kj#U5}QT>N5n0nuwOeDFtM)Y2H zquoU9a_oI##qYJw9a7uY17_9>P;no6=>Un9^0~G>TuAJH-x38X7#n~97i2iWxp9~>?Oh#dla9rb>Yh$Hf4kOTV498)ztzT~a!tEJRDVDj~% z=q^u($TyjRPGy3#EXFNWcYj(Tu)PU8@05XeZVdW8%IP_YeVC6qE|_#?s|^G@rUKD2 zTw4{kd}#uG;N$%3#)m{3usil%V$d1K-gI^{5xF6sU6r*IkU17d&8S3L;0%v7jjjU3 z%y|NPKHkBDSgB5^GaP1+8ZY_qp7z68+QHc_@m1)Dc`J=|qaBrl(l~IEbB6OKea%GA z)>RW6%5gVzP#LT{8)-Wi7ZlVna1ugFs+3_}&gZ#4P+i~xkzb3)KVS`2PAHRD$fC#~ zEEcnTXaZ9Y(#dO7d((oOCgeDMgYF8Ym({VFjz+(kl>;&jg~_qp1^hYjliMn|8xdqH zgpJ|fkncOlH*0NlS6(CYyZ2?=t&v#0vCW$4 z_I>!bhK2ZsuK)ssGWTp>8~Nf{JMCOay020SA}G=_B95dvwOEN_lrI><3zC{x2}l1t z0>Y_NY|iRQ6Hoc9Tb73w)O}RJ5*#<&FX=TK>7|VuhLd{jhEFCO5X0@7@F`%BT_lA;bL|!NJ!upETP%IVH{-)o~51BtlHxZ*7ZO1?G zvJG+EInGpO*iMa&T=&4p8_Z~jidh{vq3J>^lLwguzE|p1yiMg^+X7pRUF>s<+G;cw*YM*B)t+c*+!XIr?oTVUBk)p~S1} z8?ebXDTvZ@E_x6BP>q;*q!>st0a2NzzFLyr=~(@1-(7p_{B*BRr@)?ZDH=vCK;Lq0 z?9MmrxQ!Yg$M5_IO?AJ&?K`!#v4_dd#q`R+j~kOge`s_7*2W8i zO5q(Q(4HA3_;b@-H5H?BB7VBZRHVO3flH18@Wi;LTdlESI{=OCARCnat_QNJm>mIG zGz+cFR(3C22EY(ZI6TL&+ke(LPd`Q0y~gbKychy0FL>gO1c=^9LQG@a+6xUlkMOA# zD+UxYmf!Rx>`CV!y$NgeAgl%(bj|tE{~qn|zW6f}6(Ne9%v^61#C(jI9)U4uS;R86LK(Y-WjrUNi!QbnP_2d<-8rJ&u0ik~=6 zR=2wqVSleBW_H?q`-4C#hE8C1dwGvPeJ>L9Wuk25i0BVa4+ffjn(-L_s@r3qt4aS` zmUMdEMLhRx#I4v~j#NY7(TrQMs6s8C=Jc!^lozv`UF&91;_>ts#fzo^|V_`@2)9tMl9n&mn1^%~l4~Zi{q*{8l7gu~4g3H!OW^^Ltm~qlVCVxiK z^Qp;*))>|a*pCEiyA^CLFpF$Mrd@XWE5bPgTiF!NAWE{%Dqn8r5t7)Gx_@dc6A5D{ z-u~`$smTI(0~lS3dxX@)5o_W=Du$cKN!oWb4SmB{$?cw`|J*v}a{XSeK&+LOToEHu z+(|80g@fUj5F*KjdsMb+r~FYI5T!3)x1a)7P^)E1r%(ZrKD8wCS^lIpJcP0_rF|7} zX?qAiY`5WC@>2DK6vS~++;%}(YtaL|V7`q3ty{4Y-uK2?0&2(^S ziGkZecxwFQd24oSTHsRaG#}l$3XEYY#C)spgo?Gn3R zDZ`z)Ywq0~Qe-v$Lu2ukxW_0T9%eEFJ`9?5RNpn_sI(->$R(H|z}_J87p9^?R|C#g&>JT}W= zkHZgtCqCRfqpq-TYO1H1yN5w2@d3?k7HoY8+n;+I-QX9G3eOKJS@DdO$6*j(;Y_43 z2gSR>R;xa(ZbAeuhxBNN)z9kqc(=oU6sBe}YjiZpi${-UzM`i7!iu=fZ`3?4>K8*P zzvA>^aBa#;`*Xs!p&loz78Vs(NmPwxjQ-*KvI=ZM#oOKYzuN${7orsS zUC=n(GbLkoN>74NWRAVufOd3Y;Ng{@^I}OP{*i|)PT11xT9d}Ju`sPY8XthCJ3P6b zqEGqpAcO0aZ9A(uBS?PF|0##HboRrsFXb5AO>IH8p4gF7oTNy81+sGl4Ymq;%UG@F zF{7Bs`?FFXSS;FGHxSe1-#5p$Kdypn7?qk`M7#3=sHROU2>pOPty{Iwx)D0GwU74r zJ|Iaqh(y#&tj_87>*z!#k*QS$`DHij8w1x{&DH(hbt-ydMP`vY|55aNC>TjDhp=(= zYr6;l86*zM6UfrN<_$8W381T1h!U-Z2>V{#S9|QzC-9|V*R2v`b-n{nwRJ=k|L~3@ zcGEc;lpEiq4>A)S1hslavCL~;ky{;gJerua4W?@S^E zGxNv8-QwfMh{_2z>D-Rg`~U)1%=u7aBfUScSTKi=uJoN+;)q`t8#k>Qv^>?!std~< zB0P$C!1O#|qweEr1Z)w}$Jyjy|Dlx)kdku3;H8kG-f577ih6(et zY|!jc-`$u1n-rb*{4yEaPN zuUCdTLbn2l`q8YQR&~2~*v~SJ(|550nyq5=5ft$#<$#6f4)4rUCJuBnd;%=nsl)MS z@owu_01?C$G>=E_b=NVN1n=55Q=sg~ zv}(TWpjGp`K8E073sQ}`gs+f-1=q6J9R$1cq2>6+8`*Z+IB$@~P;PhlgQ=U}9!Flg zWwE`^`DN=kcHR=!yAz!wW(gv|WnPrzi11OYjC&^Y_&ZL*bS>hxl{Owh$xqf2FKT$oxewI$UHZw5~W+yWp&R*~v z!~V3m8tWx@TOQEGTlakhHLvLQo6-XEW`k%~xroDHKZ-1iHi0q0keB&YtTC!*;2w7Y zjv9|N=*ER;u%o!PUjf^N%d5=6$h#P~&fqjeruuR;VP@PzUd^QkhhmU&C7mTZ z(-fPx74NSg*Mmp^(pHc~Bx8A;RGnREoNEHMmmU3r4I~HRmF_lIKF%m4rd(crVPu;- zlwv;zPR43e&)ODjGIy(Um7v%nevni|G3J{a22!49ly{Xl?$=a|ZJZ*CYMNPc0(*KP zXly*jO-#~o^H=bGzYK6VkN$g#>rDKpm5pv3XpTdHUo1l;Uv7STyJz2o_TC^z$my@?%+MHPq0RW1P6?d!6j+djwU)Q5c9=;7L;K(YtwMw#Rc5&E!t zL3kRBb)1jdEfR$l#egu*@+4ZAghly^{o;{V^&=d2jdRFjL9kKUY}9`T5Sw!~JCEG* zJPrX15*pgzCjp!f(K17EPu_CXw%ptseuoBhMkhH;T=IxuX?c@j0}pl2=K^J4kO+yy zn!)LD2ti9Vke)&*)J~q>;g_G_IZ!+lSE+H)=VP)(wYwTT*QtHNTT1F%{HU{A&)&5R z_wLGl$2TszMoIw=;=OD4JVUfzLrn37-$Jm~-0WWtzQ0K_`+~@q;vukA?D{9tP?V^#?DvCY_d7>ff8n z3Y`(l2A9;|w$io-W|RQ5ZOMf5VCSLrZe|AG2A<50J5YO{2I8YVuIQJ^PGw5o*o?ww zyc>$hkaRbh8lAr40$4Ao1wf2@IuH*P0%P5Lq9s2HXf3=W0)X-BCKrtztT`<^=KoueDWfS^ zh(ruoA0apdFJ?icmSW|na~LHXF5eBk%|h&%?E-Y`5|k*0CJ>F>l=!OvTgdod zGE!%TA>8an!i3`*WXuV2wluH;@x!Bi2oMUYKmL0_e5byejz74fZ>I$%A;QYpnOYkH z*?}96t?T)BiLA204Amh+B)#k9b!$?jdFAkwvQ@Ta1`^^nyNOc{eK55 z`wL(rt{x8WBPBwxmf>D<-&PggBm=<2CcFoPG_;H`=6jgb8ZS|}1Z1rDk)kcm5jFdh zUoeQyCIWSYM7>3{Q&!U_D#0a#TLY~7W2k`CYfNvR;~z^m{YxgEW!kU&3jJmurPZ=U zE>4acfVi@RLCOSw{+S)H$MFBm=C{6I^}!3z56b+sg|;CfJ`JBn61A}d=P?U%A^!1J zglRDYDDBhH#hr?W&c}@TF~ZiV-*okS~81QJ#slL*m%&AKmMR6=m20+s!Blw zpM$;?1Y#;^rXyMk6qamS$RCl+5+izLyo}9%*^iLlohUm3qu<6Z@6fDQ-uhb*V*f3J z4u=Mnfz>K|jtivIzFJeaQSR(F70-`ly=owDU=!!V>J%0lkGml;!9UW@B>-XQe)GaD zEh6Ke=(%H-H0)hNPO;&trc)4YE&>^v+vEyasFzBAP;T2}_dMO}fbHR?twY=9ewXUa zpRaJa!w}*3;D83lom#g-sxfWV$a8i6{DtVR#_q!klZ9i~?PsSmfojp~4J`YzfZ|R4Z%-K~wVSi;1U$ zw`}@1!R<93z&Fm4U0M(b$I6(nUKYR*v<#p(cCv$4OHcQXI-T2&+AeBe+5^mnn1jxxE|vQ^B<{zF~somjKeY1WgKWk zOTs44vmttDT)nsubrE%l7Lhn;9Oj!cZ~DMA3Shy{&MRW7!L?zT#5m5!O4*x(+z&R# z?`!_&R(xz)3@u7m2J&wX%VLMTzPDxeVw+6f7S@BdXsz3s41y)%C%>JWSHxx^f)-fa zN;soV=zU0~XFd_5f6?E(6(f; zdPB2Ib#N zE|Hh|NG%*#6|>rZPKm(FpegSwbR56GRv|H_{_>Uq0Yg0B{(dRWT*=h-kMk`<9U-%- z^MzpUI7!>9O%hQ3GxIhAI<_?NqWV^D|K$MB06kj$0j48=`thY1{mb`G1`ces#feS_ z{QeN3;Wf(H4H$ehUfL7;IrM*QbeWn>)oIQk! zW=gBnxlMOc_x6M$5+(+$YhfycBIyb`l~L8R5FM-y?^*^k$^x5^E&p0evpdmv@XQ%l zK)hBub7Dq}ORMJ%;;wB0<;jVR$qA%Cwd_aA%1$bhz5isTAX|y@o;?T;T_?{Yq&(pRT39D!>?DL2MSz8j=_s+b>oq8T3&)oXCPkywWvB z;U(M&)}R2w7Dv;13!@itANQ&UoICTKL$5IafP-4%o<~!0qh@w(TZK{qJxto)8!gW{ zRctIU*n~6#7*Ejis`g4v4wkOtR-;6W;vQNHx7_oqUo_{<7mEg2xDvnepExQ`PJNG5 z`rb0V;hPl~+ug97=_aXE$rR(Cq|5y%)GOWk)B4TJ*^NLRPDdK?@Abe7Gq9~UL$?C* z$;#gUW$oOR2bnh?L3Wd5PTl|IzR)>1s<_h$CBI^qGn>RET>!m9vrndC5-$FQz*GGc zU5%ORuDb!Y4UD6H&L+gWvE>4S&WVN=V3C}9th-oZ6++d#zDyviOVn@Y(3LIa{?w5x-vMCC0@F{qZj#eWT zSqAqL3_JK;|1cv>_E7%(t$q6){RQxG+Bp;94C4<{vbYQCwN60)4?*k2fjTGLZN#+V z-6+*AqBYf>xC-Wqr$XO=`dl}aG3~uei|EYk&mJ}z3l=~o%NvYbWErsfnt$NxFd%@) zFZHjG`6W`c@Z8)n;gT!)sVuAq<#3#_Uqlv@e2tPB>o5)>8)1PUri)|PA8n^f!q2;)# zGP4Pe7nUcG4otpGR!VKh&9YJguB6b#59Fbr_)pW?G^NAiqc*2{2y7oW;E-g|mcWUN z9wn(<0WqCn-=-(~d}i1&cw=B}2b)@Wtl!i)Nh!ym?jz9I0WX%WtN6FH-~q&D1~?h- z3T^;GV~ch`)+w0dO(eOm0VdjYUJRU2i=$5D4%;63+Q3;$X15K!J5#LT!R zGRTTwk?8faedzauTOG*2N4Q+vwC&yLuLKssge-%ctuIkF{yKx|Vp7!or-)Hj{GI7v zU`wFpJ$hHGR(<9BHp5%@i`+5#8@k0_D8ZDe5uTFxaJeh-EeVW80-iID(xyZ9>dPKQWB}^#Z;i0Gs}g4 zG!`_)Nm>(nFRYXj*%)5MpdMm|V8$6tProz#9mkrhK^>|^=s_x+TVn#Sekn-?bGh}O zL&8R7*?_KX^Spe?r)691m<#XkroQ){ROk?hrSC-Oxm*TSCTzf-(tN`X9BDj$95ZtEq z^A8~$PG?-9rs(n9rn53Z+s9st8XTsN_dM>>L_4g5&0lQiq?5jT4*AIACKN#Yt7O4vHV|t2Oozoy*Z%=mGjH|ETTYF=}eNqwawfRIKIQz5Ar50R_Iq z;$20Z-Szo6W>DuVBz2?_qIqj6l&j@r<><>xQ>CjTg`rv%)XMgysveTN^BJ)*dWc_b z$}s~_41mKL2dN9@uE_1EvIQug_98UejYORvvqeU&$cjV7uGsM;)3v|j65t;Irrjiu z=M0j27cUlbW>)Sb(9BxDujufL0Dag4we0i%`Zb!FSyw91E0+r4sTRO#=k#~6WL|!b zCt<)*{C{&*txDJwg^>Ut%-(eAXWmC>b0LdCmNoom|E46gxnyIAAmixW20yHG*y)^t z+fQ$A>e%o6-R4QPR(dq)=F=A}?c@`f8<=e3@ZjefA7!;Wk_>tC^%9wiWTskA1m%o` zHNXqsj@)3teQQo+q+VDvhsW6Ejz5HLB6^}F`RkeLf7|@sPDn$Ya3gj`JgdsE6!eJx z@2_4YVn4{iJyw#s18{Hb!9R!)9M#)7ABG9EMh;i}7c65Y*F8YBYA-XR!ui*-H< z93y&Oxo%LGNIj*z>N4Xf3${A$YA!#Shdj0IQ%F&4ZTB=Vp|~BxC6Wf|@&5ZFDUwKR0K5>}l7fH%v41IbPON#qj*B8Ih*SD${g>28cn zs^@5jdoNn?0cns(B6m6Xk@oZ_=e& z>dG0cgLJ&my5y&rxLser9=Ceo1d%$1+d~PTRuXQ(81MQ&0=?3^1}KVHuvGap^f~A4 z6SJr7LD8&uND5oE+322kuvM_oe4VqTIBQWh9+O@ABGshUqh2H3D6yvFa$Xy***vxv z_{oK?p(_dkI`u7N zf$fFtpbHYyfQ{K-D`!W1l+=Keb7~KFf)ah@kJ}m6Z|4Xr%zJIBr>^unKp?msQffB? z8@wYN^Oi>9^j;}ncortXiM)hBH|f|Wye+WcIaA6tGeD-$)e(fJ!?qmuMG9|6D3VDoJ#)LEsO_10ZHW{?(u<_JP?;g(Td_g8&Wa7tiu zBw5BmY}}o>qnN~NPyeF$H|T5AjdD7@>VjEb8#v5MshY!;0Li3=x45Kx z5lpR4xuIVb4-H>L>d%8KzDdY6(#d#Srb9*@m)Fp(4w=*EDU0m1+a2BlX{ynecN}om zwe*VZdD682xk!-O`^5ZHv2&@NyZFPgj3?|6DSCH_Gs>68Run$o_20VK4ciI$`lr!m zua%9ghzR>Mu1iTbLK|!1OKt zmOk`e~lR}{3v?ws^{Ug5^@yy>!)0Vs>>gZW`|lcva>T3H?PkO ztc`Tk$v)JIaFb@M5nwSrc6{5TCvV2h*t~rxKA9pt9**@4eoshTKSqQ}_HEDs%{;fV z%d=spmz9D?)6QPgae=7$1t!#X0VbUW7f3>7SLr2DdWT*mOv0%yg@9Q-NEhCMxEfBq z^$iBRW}4oOm^X?cT>%OAAoXbrfx-3#mc&m4kd!YYCQz?L7!V78G&;Xgf_CYMANF}- zz!@V;TU)fgit(r{y#_jFkTFy1sG5WMZO1qjeR?WrWjw89_Io6R=1M=$JwJQuu<-(Q z`j+F9g;Q@Ix?Q}bwWWAJ6_KNpSCF<7YOhzx!bMoj&E9_?hx21%|AEoYp;QUQ+hEW- zu1GFkiR*tX9KUm$x()Igy{tkp0riRzvrY75`Xz&ged5bhqsupl!Yt0rDZUwtLf6*B zQg=1Cdi{L;@Qhs(A&BRh($mMW=YVU9fq;#;79Kzhzcz8VSs~WQ17EArP zJx{DU0>T0)u;G5x6~)9ya`bQ9a|$82c0#NK402`m616BvUyLBOjIgS zwPLyJ$^gEtsXP^N9JMHcnRPyjdPpuUJLjvY+98oW zN0PhXYFVdh1Ih?T*YQW(y}^XrTja08E_JIRuE9)7?hrKM`>Hj0K4$JWMztI$csm`2 zJVD8d4wcjA&^7TxI*Mu6Z;6b2?Z+c}$*eQBoo@26HAK`#JgWWv#)SJZu?CtCekvr(aMNZ2QM^VB=~p<;vEszZ>lw)+(LkouqH@}?uoH!rE?bnO*Y z0_WQgxzFINA}jEz*Hd7(Rjpy$p)LzxRMEbcmm0aT5}ycJN7gN9UFIikS#p4jI9RiJ z)6ez9|If!tLcE%>ReaapN$oH@o-tGYAsIXgWLPE;WlqO_E`ts8NSgdx0A(9}+;;e1 zz<}Kr94Y+P$N`&8OUv+Pb_1-vtLv*?aeZ}aJ>tOGH^ph}X%CHtdc{fiTE3?xFR?L% zOqJTOW3gKXDUY63w6_l=-!bv04e^ZwC;|^9zJ*~Gqvf$5D?Ks!sNlLObDb$7B~bTV z9lO+Ja)+eLJWdr2Rifo))fZIzey|0GZ64N`#)ER<<|u zaE}wiM~Fjr+b2D?8l=a#nYYWjl{=1F7p8G^0Knt^0s?I>7!}nB5$9;Wa6d>i1y;sq zd7zT9q7*B7Q*xXCe??A|ryS`}$Hl84ZM_QEX2=n%#<7V-fb^baVv=J-%Kk!S5!tI5 zoT7}0;;zD|N{zDdJ8)0B~B)&}REKpXZX&1ChS4ONvaU@9Y<;^(dg6p;8!A z31sY>kngI64J0bVC`IiZO6SdM9%hI_3LR!xnreX%#GQej=*fgNuUy|;d z2_>8dk*8!GOH`U=giplv?stC$QQ`~%K=VTd$A4FxAJJ~-8GFX@!~8s|HT4{{h=3p@W_jY1K^iELW>*&H-cfR7j}z@R7`a~n$5wKfp-cBbiyDCWrm ze&lmam}>ijiabY9>pNULb}Ys#W4zEi^StKw48FW8uOyXyoxM*;tmbKk`tB<~3st*Wfb!X#Pr;8-5K|S55B3VArERjRtpa`R zWdgCZZ{V9+?QV|5Lwr+FW^#aO45(BNt^s{AEWs&U?u2uic?`ON*kt=_b-6iC;Jj!K zN-qs8A`B&~PrFU`4TUr?{@cG(%S#}%rg_XeMWE06lgJ9>NhZs8)A10?6bd$1SIx&FYGDmXp8;F(-T=G;*{hX@%D&ll@rlh0{ zMXC{PwiHc7tJ~QO8UP~ zY#6>&a{qkoQ)h7Hk@(6?yz=2QNL7B^LyAcNz(+Sq`HUZn@=Z?b6-@yDKLEf4lk+YI z+?H(tO*_ypv9n>*;gZmm{7lt%PM&BE`pr17O|i;3YlGejoJnR88g54py;#P}d%i_s z`Q=tk2;oi}p|_0d@lOMZhKIVPAeONG$zc^*NtEiF4vC50tv7Zh*EIjGH=_cdxTLoK zdF*2Qt7j41*RVUgTB^R{Q zQNZ2ZnTHh?1((H}_1#OqD-J$+vPA25QEo2&16^>UZnR11wx^)EVGHsaT#UDytN*#z*J%>q9j$f27 zw-Uz$A8gHrGYz#q`W9IRxHTq~3f*b0cK#$s^WACp!_`h+qn(*|1DEBtrG+7Wx zr)#@z9Wl9=CIr+ZjssPnYhjTC7C1hMteh-VA5|G<1 zi3ol9uS-L8F=d@hek`|Bc^^f>$csPaPt2VS#b|?;7fP-1%3Pe!a3?=X zKBMCSLWm39Byb6 z(L=D}hK4K^vlk^G_ad~*TVPWwC$l9>jD)bax@$1c(9e`TH&iC4(g^aKf zp=zR8f>JkE$zz6kRwsM&vcfTP>~RY6#vh$5{7Vx6z2o5Y!Tc38l)067vK&O92E5FC z4#8id5P$4G&jtj4GcxQ8;n6g@Reg2F;Aznm;W@5Ad26FPn;#@p2o}dqex9xC@1K&! z{wEdj+p-U11;UI{T#?iu@@qdI33f{9OX^Y%9v`iz80yqfwIh>$FM%>NM(J}hGU!=C zu5yT5s$untRDrlkgV-TDb&Hx{*j-T6e4+uRf?qrXAu`M}ZZg}#sU?eX+wIeUD^6V$>@Fvd?8dyHMJ+6Uyx{ArOyx0Bfiu4{Vu8z zmRjSyp8L`jIpl^^isr>f>*Xg-OVLKiv8B*hpNFxmfC#Juv%jxR3kJ6h0pGX9c`Aqk zHNR+@a%G3e^=h-|MW{#er5cK6-BOicUG#X>?f!lQSE`&_U>T z$r8&mwW0P2-ji|(5UC=gF_-)Km{((r6ERSmbL4?!^O(IRo1U=Xl=)yTEvF)3eBTb3 zvE`9v#%8j^Qem`0Y15}x06y2A&L>u?b=`8nq}IOWsefA@6iKTYhJ(KAc6KNzV`|GI zIl9I+17?NOxSJMqr;>+6w0hT`jtwI8wpNEzs^eFGkF~+|;3%ohsb4C+-RmJtX(E_o zqd)wZg(w7EiH!O39yz~qX_uiNDL;-{Q5d))#uh%rysxCTl^JqF`l)bQy4i8uIm~D6 zcha8s-sf|BE}<$Vbe5%96j`joAXHCwviQwcT}PF+pk0=*yX$m47j>!C#5 zQGQOY4;jm?9}ay!Ou;B3fItJBkHM*8_j{I-=-L;o^QVuE!2b_@GZ-1wM$hO*<&Nvs zH-LU^k=|^G5HS3kc_ebtR&&D(iRKGp))kwPbJ9oqQETV99s#=~Tj|?w zi@=rRC&2;pR-`u~R)cxt0j9n%Tn*j{eOxgsZv^Il>}|OS{$Cde`0tZpRhA|4%e7%^=TjF_w+_h4xzHu*jF)0EWOWLt$J|3GwFRGYp}G%o%#ty-_0u` zl2i^t7Fr|Ci5|@X)ywoHo0RnGl|>_i{p;cr0VCrT4$B5OyUbqkH|JaqYY%?>IVY%f89tq?E3NYObyn{7aft4qQ19Fq#MNW- zKCqwvmd-|*I5kK=H~ZxLbEXX}qKu1@FZ!Z`PbySo&31WAvwLn|8E16^u0XNP{7Kxa zzABFHQ1NKcd7EOeyot8zLlr6L!~N&f#!Xq)KN2i7rmZF>l4)=k_x{7cM{ge=>l$uM z4zLVIhEFtkatqyzYjJ1D7zK{c>wou3=Z+`B#hDL2^S zTP=BS(9(FcFqOsXvNJT-wO>P$0G&~)74gSr{^ z>z$kJVye*o{TWtF;V!Wsj(>r9IEe`F`3W0#eUnu|QgoQVJ2EGAG*9>3I2tMz!Vs1K z#eNFenZu9^ho$eOCtqfi6;)~u8V=%#CM$Vu=+R3>EFVIs+aV!Z6SE+>U80FdN9O16 zH6hE%VObXX;~HSDluWRmFpS@d-u2Usj4zh`bwVCk*_4jcBqXo_w zVUfl@Dz|5pk96`^hub1K{OpWRxWVquD+XQp%s;A=-JJ#YYBE)tvh@_|d&p0z1+&B$cd03q#i)|E<8 za`JVbGNHI$pxR2Rp{Hw*^{Pjqv>}HCsUW%hGq4)RB;|e3GK|Y4sq|gNqMrj! z=AU-L3FoGV4tO~jE3Nhi#`v0n{17&1&YJ*ep`)+~2Y1j`urN1?xWmoE&5BfAZF`6! zF-<5*tBqwH!tAZV=!iCFA^E=$)Lf5~NhE`HjzL>rm%@Q3EW{Z+76Wz3tux?d!qAte)s@2GD+Iu##}wxdZ?9L7PU}d+#DN_l)JDAcK?$jQYhfs_9+y<_717@hsF}69 zJX;)1%h($yCdW>ND+~7^S)8PD8)yTFB!7qGv`Mi*&NQUo{K(ZY4NR`rvcmPS&BFR# zJH7~nWi8Px1BemM#HnqZ$xXjS8tTWWSU#dji)5tqb0F^rfi|2S3h`qc+;&ey@Wq#3 zwc)3AXG8`~saZynburEKo%(}n`5SrS+gB__sGF}?6a>wI8vO2)5IND`+2sNwmTbiQ zV3Y~jp{~Z@yw?%8_qgpWlu2$ls$g`|?4i?e;l4*?Ge!A@RLai4IGvPgQp8EDQWgDO zy8Qx=ZPw23T&BVCf`_uH1k$;6Z)p{1Nhmjb2FG}s4Dg;JocEe0b^Mi20-$P-@_ zZdMf8vwF%(FCEJXI}N*2f(*m(l0w<`TA&5GE>ztw}s$rH<&)Op9B77v0e7ZGW;ob z00S`_{Y7!tO5uX>3C|5J`+HScqRFqUF(~MD0J1bgrTV$ckitPqE5>=v&3wPiP#E3R zzR>RJNllf;iICbEOsON~1AHJ9Uu}UK7U<1L3%qFe2uC?ws~lbs(5DSAn(;Rq;X>iW zZKyQPz*2aaL6nZw-)O!;TK3*=LmP_9_1%p+gHe4f7YkOFUt>RW97_LBz5`SG8%&g7 z=4@CWnW)3l%IQgc{%DA2?sOBrtS<7yWOhS7`GG0CS+%}3$hAi{f{#``0$mpABCXl zYLc;Xo-K37VgT6a_~@YKPj^PbtWep*|W?Q{uIBOTB<58$>~wmIObFfQziG2gmn`)`4Lfe304 z4QStOJM)2dfE&zn9idnytfnoURw1{Xz0&3hyTx|py!!dLPG>V0(0XdF}88rlm^8@DUj!9PhjhdDC4(Z;dj%9uLN zLyqSQ!*uzBbL)|hd?szl&@a=(LnBL8p8iM|SlfA)X(G~JJaCdiJNK08)D?Zf?jOb4 zdqrL9lf)CXrn)o{VYUOSR*Qs7bWxyC^g&DYz^p7FxG$hSW*q(kt}PuQqKvc9k< zl!atMb(1LbRJPErJg7G$0Z@g@7eMZS*~u}|B(}Zio$TjB1`k=qba&5P1#mr?4CXJ16kVk1$U_^1gH#b{P@uvV+(1W@_~@s~LI z`WxI4J&=vV{Rmu-=V%;qpmwn4sBCO z_+u5QaTjjr#pdbeUNY%1H{D1RMxR#815dbMET0-x7{$J=hL@=Y1VZ%ph+t&5QCL~9(5Bdrke-;#-WUvJNd_|_KT4`*K4i00G>@c z($aX9y@Zcy>)Ks|EBP>tGzGORpCI)-TZjHzs)K*Dcp!=&4I zVW=S27oZPkdcy$AGx?=bgsC-|f5`s9x zF6fXv)X|8r!s8FyqM-6*G5-S^bU5|(jFDML()w$Ik@;Mol-X0B0;59wpjC3sY6Ip~ z(^7iQJ*?R&APi0gh<);OXn2NwgF-ay&mH9#X*ctj(E#gSmI2Z>tKPsd5ue;kh-)U# z4&z!14>L0y4PCc%cv`1&4OCJ(R1GsE7-oDAQZ9Ym@y$xgUO%w=;ECLiyB%Ky#V|VN z!3^xf*n>EK7x4~h@}|940Ty401{Yl)E&>Xo3Ghv*LlMauu{lnFO_BsBJ=sW{9+>1`rV8$t{JH*KzJyTyc=Rz>GfBzL7 z$-fN0npJ2T5nr(i9?Es@4DEiN0!?FRD8x&aLj+hOQKTJixw=~Yf$)YJI7|dL4Koo_zN=i;lhOZfMtEfXxtRs z*5xmZF(6?UVV-!7^;2JoM4)w-Qt5kG3Hk})TlHs2TnbC5-$^ z3)Ajn)}Gz}Bfx=_Fk-0%x+}Vnm%B&1P53F7H8%QXVGXU_~B>?HMc0KqI*F*}S1{B6(#AuH$Yqk967RE=`OCLXGZ^;7;xFK`qpbNV!h znoG4WvG@|#tEARox!oV+EP5X9=F}r7m{}dENgB#R%q^@5kTEzLm*+=|1Y=BDy{rLo60IEWp)e#?p8>ngC(OW%ax3%Ag7We zHSRwE#B!wDA%$I|gEE~Pd6BIsKeyB4APo*@sf}hvlGg@+Kh6`17sFmgD%L9~^b3Kg zzO~LD>M9ejP=47an5y)JJ(o?cm%^-mHS|D=zTqo#$cx5gr}Vq4YwEa+ZBOk?5WD5? zRby~$LI?dxwrAgEs$I@~kBA{xlTY>S7dqUApwk%d?}@IxS$3PoaUREV56W5OV0zIw zTKXBEr1FSK3~@Nf4#L6pG6}SmDB%$Kps4i={2*mkO#2Qa+ZBAn1b7rl04y3$4+cf?ZpEI7bXeEE@q0&%X7;*=FWZZyoe#tUL| zcbJd9i3?8;4|GLrQeO{75{d#h2PAdr`kx+(&c8f-t=xqjve&IXW~?{+xFitaEfkq-cYE@yMmEpLd5LujjOI=tHL0$aI-k?6#@E zXd`5s#E^I}OY|y<_c*%iXs!R7*!b(LiHRU^|I8fUStQOsvfe~IGHF^=lLi(|?@Iw2 zOg7?TZSAwD{R}XpnXi-TFb=_WfeiZm@31;R`DiB(y~{9;VdGKm?}MkgTn``wDGbP+ zdVLaUz}OEe)3*G_K5rxCpTkk5bHrqh@9oAdt>U3tj-7UKtD z*u}@0FtW*F3eZHZ1ayu3lLw?>QB{5ZrF-du#4P@8QAf|4HU#jQLjK2FHW9Ac;4l(u znv~cE+;YUou84lkx9W2Q3Svou9{2x{b}bXT0~}pEbffg}v=hV_C4e7TYNA%f7^bAe zvh*_)0cB8Xy_lg36Ki9!zw_DEaUxf$X8DI}&(FQ(7kTrZlG?T>OG!-Y|0aN=)ko`) z!O_FW4pxN4W0uPS_{y*m>3U7aBF0BU^UaBv;qVdtT*taurC^j-@;@GM4Rf`Y5B5rJ zT~_!iafJH`OKP7zx?Uz z3%eJWMN}SA9^tixpj}CaRP!7GefvNa*&hH&$>pBo<@d587>9|m-n*0U2E(Y{4@@2& zmo?WP4St52D@v$%eXod>xu5`RMOP!m-n87T2YC2XWg@o|wmE?DWUO5+0-@0=W1H!% zl(-GgS5Dm*HQIpTEi5q|iDJiHdHiUP(?0q~oByTpQ%W}6#yzR32ZiKg8?}>hdOjD*Eb zCVe6O?^aF19pS)kNslI{uUqxa7$KY2!8Vj%rFO-M#_l!Ns6f`xFQ43cMbrfW zF3V>PBMqrDH92NI)B?T@Eomd5%FIn)Vd)vk3vlwpqDpGh_QPNH%;aYw7hG34DUic& zv{wftVKe8#T4nf@@I*F;)?&FhGile;`xGvF#3+AR1m*Gkk}5L2!e#4a^xT~Y;ZmeE zka+<}-DG{6*nAUh${XXKBvu8rimA;C^#BTJR1I9J%V1B`Og?didJm89H5CVgn_s}S z$(#Aejva1c#W+-4G5kVxzpC^xN8M3m^?_piA_aFd+H=v&cmwu$M6Iz5Ot5fxI&VMF z25DcsJQ1Q{)*VIV+{C&xhb}uzZn^q6^%aWSw*Lq7>+ToPZF2A}^QX2Ym?oKCw!mf4 z2_7bM3J0Fd71xdx4MgqfAV65(t|2Wdb{mh}a3%7_A(hqt)e!mz<3m+hJ_Og>{lp$o zS^K~78&o;$s0u;Iy4f0%rRd9MT#aq=unxQ-px$>(XMI)&{N~+i>fv0UKwPCxlbqC| z%5o@gLh@u8Oph^UX1D5`F5X#QhEw0bVqr!pcmS%WRM!;JzjbP!{+b=my3{RQF?V#v zPEkJ%#_FC|W^txpKC$m%ydK;FBZ|>U2RMhX(rIZt>PI9{J~%Z&o@{xii1oeK%)_nE zq672DDkbS*+8(GZ%DTIy!vTyi@**utfETp3RaCmLH++h%`>md8GPAI|N#oohhKVq) z_;;6o3x((g`ceV&DyV^85(ejR3SP(LfE+X@K$NEyxSPpmd{G&3hY04gZ`j+~u+z=o zAt5|Dkodl204;w+8IVb+?41Y-NQvO_`8gnEJ?88tKE=NyHGpp~!~3hcHPZ}kTv0M7 zgmHZ923!NuIcVAFq~~g@c;05b*lXIYCXDwV7;`@&GXOI>BaPbcJSYN3tCUE8Fc&S? zvm-8|k|M6xgfVmf=)xBklw`Xe(GAT9D#|}E)xGXg;~fOeTqNb=fPH@&k1N1a*qUBe zV|9nY8dsnj4X#5p>#kf&e>XKWriL2479Ht&hO)h!i8-A&N7q+u2ZWvQ)te0+rF9dE zX<`hQhpntkJaI@@%?9bLWMgnb#%7O5B0aWxVw}!(@;|3au9OO|krrka#kwroi^N-y zXXVf%eKy|+S%waAOH0H$X-IWMH|&MA3Hn{(WI5hkZ1aG_X**zqT(aXaYUrlzDb{FodR z#XGP;1Qx0&N!ktzeM?w4cvvV9f?;WFduVm>M5dNlkvHVViJT{M4L;+oT=2JzNG*;8 z?DPIrT#-+LhhSuLx->7Cgeo#`qgK0@Jz!^IGb9wn{Cozp}PnUfnQ zg{;i}Cz1=M_$6D7${JB1JXm}IeW*pWEF%!8lH5sKE$uShqop&>aYIKPl^X`>eN_x5 z>&ecShUfLP*nP_?x7029S67sPLbt7ta|J;N1uE->9&dsM@y5$qi#wvr0A(7u;UjmM zoZud7Jbhr@SGLGdLS~BB`~8X(TyIX9z7gh^*YaxLj;1*Ci{~==0L#eWKSMkejSIVO z1YbCUXsS`6heNr*PfvPG0F&rGmr96~`(qj3lDq9?yd84SKP4>D_7iddr<*DQ{3i9O zRsOV4Vx~3e>4Mec_kwA}CgbZ%chwJ8Qg$dbznH#8%i^!`6k!BJFDfNll#r3p_0@p4 z_kW4~jD9o_THdvr?pKsqJ9xkSs*F`}K#PUV+n^3FkEnbx5OyY4nv+a#5o#yZ>MC=!c;onAUx)no=Nf(@}_wqa{xnjQ>1}5E-;>li!j$PX?A`;ZE&oi?51h&`5gms zY(>&=RXf(?Q%_mbZ~}|IxD{J1efxvKL^P3cv1~O0pLpvvDcCR?^}{(emcZFD?2=3S zM*C42sXgJyO`KmW1ZRa!ox3B}l{9q5>!GDQg^`^{*sSKn(qO?xA`1&HF2a3Bv<<)-=gb|mQ?WWp&bR(8XL3i50@t~laF92S6hJ7t3HyKxOs z5?=cF>l~Zft<;yvtpn`g!?u)o@gBELrNizw!Uuyv5T#Bf6YCYx@^)nIJ!ZEw%FL8q zL62>pP3+f|LqJR&et?z`%yx!EUH#@{MzHD_P(=z=kY&4nHiXYXn+^>n9&4m2vvAKC zN4?>?xPOeyH8Q7yYeX9Wv=~Zcn%VtXPPjLdxFykRp3NMFnNEg+D`ZuWYxr+*8#+t4 z4M~i+KauL}<5iFmM#X>EE+4D1qzA4NXFb=vvHI$`mF9kCh3zUnn#29!)Hc`GaK|N> zYOoS}1XqU4Lg#@&ZQo@?RA%u3ESTk3$4%{g&BY6TrrWm}-N96sIrF6hW1tDmf2Zqv zhR)F>LREGeP#2-Lglb(778$^G>?m5^kSs6J_eroceNC{y^yF#Cx z3hC<+(aS_M9-BiO$e2LCMB*GEHpgf_>qJ3U!=t^AeGWHtHi!-2+3BO1OIsE+G43v| z%HiZ948eVI;U)(Tl*BmwGr7;R*s%FZ5A~D-Gs(AJa$H)@c>J3b+XARPNnx18&teI- z?EONoOb#m2#=<(tY#j2_1A$iNL`Up!;Z&l1rXhmYXp$Zuk%@Ura-?Vi7SWKMd>Ta9 zJ+xE%-Z>A^@*h_`1A++Z=@xZM_eMY0xJ|cv0GVu!5M|ev!jO$SZpL zs0S8gG3DqP06^YLAnLgG_PwIQ3mq8qTQh?2Vjz=yrLU?*hGtDG>gRxR(`yGLwY^rY>n}3c%B#cXh@`3Y>3U7c(^?&~jFB$SauZ90fW0OMGMaHvx{ z1VKG3uw@&V9@nLey-4sp3_J-;vBNSXPYy-cM>wI|+qo*6W9+N$(x*g?1pYd&!8}Y~ zsmFzSeW4Ec+dJ!DeEvF-0Jz2;yj1?c&Hr|RKj+_nLKf^1kB3@M5{|C)6uGs! zW$Uq9Z}#k3&8N?TKO^5@*gz3w%E;X!ynrZei$$VHo*Z%*@6V73biJ7KgB>} z+x<DH%E#+Be|`2GHob1-FM@1s(r(q*m^-`kD%L6zU&nR{9r_gR}k^bB1N|KC(i zoT$rw?6!tIsy;#7e|P(uZo4pJJ40h(YaRUDCbzBp=S1!ClWHw&NRxCUy)&GxNtWxS z6I2x^+uos06`Uw&n$0#PZ|I|I`s(TCNUnTiW&6d?Cfa1n2L97k$`WDvNTKSupJycd z2c4*$4`j_1DbH>hhx#qw8xN8{?3b^H17f7ASSjX8&QMiNZ|Kpy5$7{J?K*YLD7UOD z9BH>1tR6j9)!~agv$ulmN)LERCM2D19%VwJZ)RT4dKk#wWmYPiyA+F{TzF+WsN4yJ zy)|v_+uwGa!mv}iXdD#ujv5Y!+3n(l;4>mCYQ*i|LmIJRO~WozLH<}Wx6 zZu!B`FWh(a%|@oY6v}fa`rt!^hIjJo_Ri`^L#z}(nH0Lk(TtKSRRzOG;1BvVkKsh#DV|AeU7q#GU8aE!{xO4#FG5s?EOGPksDl$l$|TFCzyIPxVXz zu_Ao4Um?NJdrVxU4tV97yt1N=%7cV@a?7lWAy^9TqwKWRrj8dHE;}`ZGnJ-9$Q3L@ z=44Q6^y&Jc?xXh8M=J&7!7t0c7hW#Q44U5guB+4a>o8|wvdhTn+8gtM)1gE%q1?&r zEY)kxG?I5I`{$4qw4dED4gC;Q0A4T0m$_DS5~ z8e_4wNeEvK9r>I-nlBWx^t`8`cp`<;XOsk$yQO&N4I*>W?l3qR@BLt#h7=F}MB$HD z5Q@`B_1t}Cs$Im@VDKhdb<#6#RB zr>-r~CuExJt3&}3HYT3Tu?x7*lo0Ga!a=WHi~UIg%X^W?t#4S$^7b=PKD@m1eBMlqy;9Mx-%Nt-(qdGNv}_MqHj=P2b*YQWCdm` zuD~1R%4R}XbCwea?G~IiL0V&Uwg*nmHa)B27M0?%R%mJllfP@&?Kv4c-)kOcb^s_JTTb7 zGTv}Wg;HcMU|Glyk?G>O%VZhCOI93Gc3%G!P{xZ(yp+Mp7yiH%;>)@_J5l2WXdk85 zZ1t=5q!@vOVS3!%0YIohq0f1QkB%x9w}c)v-&6X1RkqmJFH}v0p_Em5+&FV`dlY8i z#qST^3Ld;=GGXd2vkRTOJL+bm6d^~H?e!WCYZL?INyOdGKtZPI(fm7w-}sa_tk7d^ z9ZCrz%Kn6sI7x?0$0Dis)p=?^4r>(mk~vD5zOvAo(R$&UapJgOSXx-jOjF?1rX=~Q zH~|5m_Gye#dI$uM^RL;MghKu#`a;U4T!@nk01cHv_G0y5uBpw}RF|u;10UX<%zQL} zKmN)tVs*b#8PiOU1>JctqY9gi%{GrQ#tH0 zNoqa*w|#Kw{8u@uI>{wu(K*ftbZbr7(oI2lCG*Qty-0BdQOCuOG7NK%q@6&xSZD*p ze0Qrvm(5e^jjudXl{v;A6_EHx_mg-|hsX7QGIF)>lgbCPw|%vT!$Ny&TqR<=h+i&} z!v|$v9H-u){f+B+Y!K&-xxVfy4|z@Gt7r=zuSJ>(eif4eJoV6tiONsW0M3sM%h4w& zlz|GFWT%qu-8iGY{qLK=jI+so%4PyakZ96c$b1f9=i3R$v?XPXc?60aWXD1gY2X=u z(HrP;fBI_yY6jOvme1))3fknQ6-V$WW4DbsI|a#`6F^g{jHw7%0zhrFq|vX@8X&h> zDqnWg>r7uOcw@L4!+p?x%%_@w{*zE34IXGff=S^+LB>DZl|}o_P#eYM;fI=scw(cS z_+!a;Y`7~^ADVC#P9uMA^!NIJ*4Lx(gixh<+uxTLhuXKeSW#llZhTt){5cSg(Ef5& zm#7>J(4+zdJDX*pEG#%>=G}RSz9haa0w|PPxWYE}>v%xOPcR-B2A%zJm)h_;iPl0G z<#QGYb!{HdyG9dzGd6FcL%o>nn;Yf~i@I5v;POBN|F-FqOoI(&UoD@zy_o0RQ8GXUu{?r+iMKXPPTQj@d(#f7Y#AL&7xGM<*4w zEyxgevxSj{_Iex(C3ia2KZrO!W-2 zvBB<~j)cdl{*wz!t{Fp5BaPtn(Cb{Q6%nxKLtYkL8{A(7gqP)@l9~RTk6MpoW>+GX zW=pe5lSP@xX795CrJy3Ry<)2$X5BN+Bw!&H7BV02R%@TU+y_Pl?&~YT4|E{L+;&;2 zziiZ|$YqND$GVR)_t_gWOjW9o5n*Q6_xye1mSsmElLPPXrtF~G&v|ccoe_2%#`pP)BjL7CUf)w0umny zdc7f-c-4v!0Xl~kYV_?#phseQ%$SjmZ1gedwyK4KAB62VRj2QYs_TYI>Lwd zn(t8YRQilE_Cbni+tU{!Pj;_F$HaOtCAQpjEE^vJ_Fryf<@&?-hxx7^X}dPYI6y3@ zV4&%|w6tFi0sC0~2G1k2ajtj544n|efq!wsQrxU53h_O>$y94q7Jtm%c# zB7kde8~$6tk{Gf+oV#9k%L+9N*2rDg%gqCTLqLLyEVsq#n6OvT73On+<9KzJ&xw(x zkdk_ir60wQno6V;aVuBh5&6SgU9eh=V4Ji&XukCvf2pDvquob(TPWu+x@TA0c*W{9*yI&-pRHcV%hC!VVwG)xdzr(>75#b>+S;xh0 zSHz0#X|t-J0mU2OCG)N=c{D@75lI-gtfg}mtA~%y(dFotjtwPo@B97S#6(Hh2=}1x zx#Xzp2mutq^!m!(S-8$f&HsJ?WQ`?^pLUA^8h@G{0qVH}&guX2b$js3=fd z)eMKVeb&{sHp#EO(}-~}6eHS88A}qFd$v%&vH{wk3F04GfYY?XDZBkp@2!S5Z2VO& z!xq=K)BNsI%%lo^LMG4?hH;J@bqj*g@Y$A_De?WvtUy#5Dsh^MOV^Q+4 z#K;f)h+>1>nHo1^lIN0mB-%dU>nHJYN!&>NZGFtTRh^^c_NRnY2FGXXmye}2g5 zXqXc4$Rx3g%D6TShL0EuPPI1w2N$?5R0u*6-@kvkBxw33u(|q3;ZL0FAl)E%$6wQgyJ@#jiry8PQC_ zsxQ(xV_Pj@I5y+t-JS+N&=THRZ>lh#%)Ef79N;T2yR^Pa4|2!}X(?tm(RvBFdQhew=Wu)?uSEi?GCLJ+F%VkZ>2pSg&Y+6Zm{zn^W)^Y3^+<~r^PhT2{ z%WvkCpjvNE@b;{J;RbTUd#FaA|*g)ERHNq2yONda*3W5&R1d zPJfWz>n=Ii@_xZEbzw&N0OW!du7^-)5S*b@OK4!h_+eP5(g}CK%ZK|N%06D|f5KL| zKUd`~pPW*b)hV?PXFGuDjM=g4?rQS#|KHMcwOEgfP-J3SHx{kP*w>AIiWiDJ#$khy zSb=B@>(9B2gcKvIcMnU#0cwE#c7DCwlg|P~T#8S!ofW-E{(+7|5ToAfPZ=x~fr-G< z+@qwBUA`pkFT5zfqyXurcU23urAvR+1cd#h+x(qizOS<9oyTF3KZ~uv$ZTt;TV;7; z&gVfLmURK+wx(qy^oeu7>&#}#g~S|;uL60hv$y-lCqSD|qCG-YFYydOf5g&$tpI<1 zyO(*mp~;aE*ZY&Tn^W8!UaD#@Ogpfm7`~<=T-MsS{-Xs8HP8Vg@lmmLJS~g2q3*jW($wsmI3+e)b-f6#1oiv z6FnKy0sJ*o?b5v0HGs~3X9zG1`7m*F%WPWI3{gAG345r1Wsen8KWyEGos53zY#f&p z0zdi;jeUm1hRbykv>L}OI=7lF(QWUEgkPX?fN4~u?!Q+?Wqa^V#H+d_-svjMyo(Fo zdv{+j`g~PTEjL&!tkAuSPcrpsC9ppj?LFzZB=i49QZZKJ_~NwTeQgj%|5=RVK{W41 z1;x2kuG%{x+o1rN&S>oPPrc|77Pz5U$_JRiBjp3OuV;=AylXA+hL)|SYJa%sQ7{fll*6{077o(Mn@=916(dhz?hYs$|7mgLeZPDvOr?T^hh>P zhA$IU20r1eTx+U}lzwVj)|nB;09xBGX|cj_$Qy53WE@=GP>mY_p7&fBu#I$4qMwZADTG8eDqR8Gt{724 zKqDrk=<14-lZ5w_5bC0G<_#6qls$>)5x`SG-ynGZIt!y*!)d$i>C%8{6-8k3yvtEj zcgtpmBgQwA4^c`b$5_De5%zY1RxCKX7r>epEv-nfIxS3@$i|;ia2a_|fP2ks89kY{ z+G$qdLIfK866EOXqI9XRknvp!sou`dHo^+sTsW4)3Ocj!VX|BJd+4V8+9ck?2xIx> z>j5)Nv1;_jJj5qeoy9&E9%oc0B0qODkJ&hDB5W}FUV@bxI;)b52bv}frZW{90P~Oh z_skOaSciNtZ+apS$J>Fw?^~|d>bAABvn)t8ev{y}P=fuBwQ$AbL5el2H}FGr=Gg%M zKLEh+{|UO_xbEY*e4x6efNMdP_sCpftvKYQejk=V7?wFNT#}W$-icPc)Q49SCXI2! z7ucPctA5OqFZj;`)!WA;GS|J*aTj!Lo>`|LQ#@1XEug8BHWU5IaSr7b!%(nrKt^IG z&lkQfyXXrI7Z!eHkSES1`jT8;g!#}6meSyDe@rat#kOM}2fEB`l_6 zAmPYRswc(z=&s0JuCxe>bJgH_o-<6`^_L2!zz4S6%Bllc+Cv3lAP1%6+w_`kpv6ja zp0f^0j`qjR9F_gQ`K}@t8m*r|?8ZbXT4YA#Av+~Yyx0zM z2ff6h;;$yNy|~$b3_NY~czd~_*_^jN)gRx1en!Lbe%Sy8+_yc}1fCb0R48yGx?Wg{ zxjrfD^+4;&-~tJds_I5-O5EO{8) zBTbxWntBau_F+Sy22xd*i|t$YShCN$YAzvB*XHcf|2ZxwYm|-BvL7+`S!N~YaU&t$ zowOA?AR;ZO?M&Q!`}u-?n->9zxluM@S>PuIrVeYAqj2HOCFy-9BcbvZ}+v{V!-hZBN_(U8<#JJbKPq^bsb z1WcgVtCnh^;a9@zD=8h5DCr@*ymX;)D@NcnO-H_1NaVHF{;PSQfI^5-8_4)9gtcj(&_f)&9)86U?^@HAtA(3pVJEm|a5nhMw3R2>fd5COCo|3KD zoF7>KOFI4cy-N3E9U>c9+)gs7bgl$$5tbRbbVK)241;P3C*QH)HD!#*1EtX7k_e&J zeK0MAat4;qh|O@EQwh<@+Ay8Tn9(1jZEG=LI3brN>NRjA=Px8IDh(iTeBSJ%;LEwU zIA6giU6lfUixOTX*x7RGTKI`_a(n-r?k6ouj%yKzxh=k;LQE57PFN{p`qU=ZGT!~^ z{fa#2_R;5=3LF?Kn2#xp*JE<=XSqZ5F$o?ZZaUk3fd3MArHK!3ib1R{Q%Gn6bmAnz zYQMHu*D`k6fVeGOk3B@K=P_5=^=uRuzY0Pu0KdPdf=NA--z%Dk)xzI(4byE*{XGU& z(F12pS|aA>jufznv*8Ohc1I(t&z^>RJ(fyhrwa5ME_$1n7GUDGu7Xj?#69EwX981i zDZ4$9rw|}24ChXxLhf3jh5X>{bE?A;q`FFG>e9fgs5{3>y!xgYU7?U-jmBkzuA_|a zWdV+c7&_mw_E^-aFXiD`BaHb|!zbhpq*>`uT^~0pFHw%?RbACSDFrfz)YzbovZ^Qp z0a@_oOwAk`RQjpiL6dM+Ka|hwy_LdfbaaP$K)R14^@*5$So)~oCH;C*uGs-W$$Zim zU-_PlUYjTcOGYcGr-z~}-+dk$|3=2!0`wUNP#y>b>2&Q3}pWJ2+yIn%{X2UZ5D*0~rRtKsw82{k4IBr+oV{8c*ya2-4w9MCrC)noz@;yuq64<@Y zTi-$8LcBPVoEy>?51V`(XhKlSmEcSdkEYp42fslWSEIoaSu_>tHPv@He4NlsN zl%|SmY=&BU2i#al2!wO#0pubk(Vn>-9H*dezPKQ4I;N6trun2d zv)Gh1fNz-dqW@tNiaC>(-?y(3frm>+F;M@Ue?@_sEcnb<`?Aj2O``?PgLY5(_{9M; zHB_jG9&t?)m(dlG#|R#bjj*MiPa(~pT5d#p$vOj!I2@Ks5Th0NS}_{LBuwsEmF2f+ zC7(#i7|hN|fS@;#`-ZvGBFsJ1NIRxX-^2LydU9*I<<-V9mPRWtNoAp+SAa8cA>kIf2y}kbc zInPI*&@B0umfHbHA)()uQY7%+^`0Lwf1BYJZY9@760DH!zS7# zgIZvz*wj+W#zg}!N8T}9eX2Ow(st;Jt64Y`ekSbQ`j!#DQ_Bnr5V8{Z=}+}$NFuJC#BlCvUD7Lvv`@oRfts?5~B&M zF(GG@iyvQ8h}Y|&O)l!_qx3e7uUw%{K_fo|OxWyb#DPJpLqt!pYL_SFL-$Ml76Qs} z*PNLXMK8{JBxnwPZOh2Hb(2xB*84`#8hgvqo1Rx$&owV5Ml;80xiCxoScc{8Oo+qN z85B2~lxZR(s_|f*mZ!L*+2!_l1r>aAlrXH2x`23KZ;}6-_*|K!UiE#!jQuQ@g`q58~1^7u&qH@C~ydsYBy7urXGqE;4A zHHoQTk=rjeZBK1w>&UH1$pT(1@?ti9iihTLDy{9z1H`(zNv{nnLtYgN`}aXcF*f6C z5Q?#{v5t8U?ZRCXO+fH=HFRAE<~9!>nh^Wvjli_>A*)&hq4x&R88DjiNUda<+eUzUsuwwbh7*T>Q=R2-ZzHY)#UD8 z)w@!PM9y-*rtud z{20?Dzs8brva*oWG4OB}o3V<}EoO=(l9K3^Z}KAcsuI4nk-<|c?Q81F0jM*_1Y-r% zI2A17sNE63&ej?K?cpgTU5X};?pj?0kX8_YU9@yAXcHm}?U>H{&Q}-@enoRJ z?`5X;yw_rA1?CA{Q_gJ5=^dfrGpT~?LUtyT%P(#tkjKVuM3^|49XvunvKWMuAlrz9 zgqGtL^}WWM)+U4Nt9c->yKIjWoc5$UI-o&LfR%Cv&TNaoZJ=ni-YK z(DW)A>lD-&1sQlWlpUU2-)TRwUaqZ%t81-iU(%XSu}+gWTho+?sd~nbaw4`bTWjd_ zePtENf@+nrAj}Pnt*InpDy{%^j6~&qh)Ngo1Fon=p5eX_eC@1TQQR5efY(}s(9x}I zxPq=a*IGayX1K~9Kaq_RM~^d*i>Jw47)(W7*3i^--1_fyywDl)$k(A`+WK6rE@i-* z#o`6aB1=3f;1qh+q0;fpQ_vUp^Z!l=vWb2Dc!2WvD< zjnkAgc<>nC&Lc}np?GoqctlPK_=O061N|7rPHe&inRu7jo=&c}Z^w7e9ZTB2bkT3A zwD;LPKcDmh+u1ny^7X$vA^e7r{M&LumW{;>nV5#0|FssJO zZYtJ<{zOZc(#l)pAj}al z3Et(zk^=Zj$KE|vs5%ZpfA)x2EKQgB~WhhgFr z_`YzR3@UkH?g41gVGd*?mH}_c&xlLXf|KhQzx;^(zppZBAwaZ&P%p6C6#3dyCx;(r z&x*H1(F7n_GH0g=k()d<+_z7u3Z-P7U$s*I6JXO|56kHJ)2$PgOO(PLerw*kXQ~_u z<61c|0n@phX~Tiyi`{yi)TSuw0S>@3)1aILu}A*QhjrJzwQnww_)HD+yG=XG>+2$5h<>45jUeM_7QGjV#BZ!*Lx~iq7<4M9xeyAM~0yBR1!xV)rl61Q=Ij4RMUN?yE7Uv{6w(~G&%&q;#!v*8Io-JRj zw14`?bta}gyGL#Zt4!doK=H~QvAGlvY(Ou6*#LrSo1*jLzGK^ZLQqP;yIlo9&X^RQ z_aeMJcKRlmUjh9ol;7^Qdi zY<^$7*1PeP&^TT<=wp#hO0+3^c@423Z>!iU3+K`s_+K<28Z zvjrt?rD)}_9Q3h`d&6x7IItzYD&}N~474 zx?oj=qPe-+vKd!Il}DIEp3pS~WATC~Tw8Y=&@ADj`4%hNujo+yBfBNAPy1~E$z*4Q zf}ny}^?|!p26nsR5OmOqe)ywsC1ND3(ZBuReSpvB$`9muiN^9N8BB7Cir0c2*z1^8 zQ|KULiv~ox>1iGQZhyg-?L&@mORrG^&6|_(8fKk;9UscL90ledCYyCB#b7$=^gM<8 zbwMXx-WG-PDRW}RG^fk7;884p%4eYcgJBd^1{+o23J51h8suqRE_dzcVQR*WqV}tw zct_IMd#(s;B-$V3IFp})z=ZH@4!PS$t$^c8WFmL7bWW2!Jq6i3pxl}3Oe+(Yk^S{J zrBI7k8Jv4$pS-r#iy;~y5i)J>>5Wa%WgM-luYmxlX}O{fUk?5bXAmwiPlW+4Nz*T1ElJZziUj3?oTUXs7 zP1r$G1A(MsIhAxo^Dpy4mO+XFC6Pk{5gkV%zd>LOFB2s3(p(s~P0I8XGJc6Fo_JVOk5od(ccUo)&<$zL250<+{Ux=hUY!)5 zhf4u_`7Psnf=8kYz$q)xgaRn&azkk`koybIXmb|iN(~G{IkO%wjo);tn}IQjykxw5 z<;K&0uTtz1=@}5X`nHv_6NSM==WuL7QP zPv9QVd-z%klQj)rVn^d|#CsPai(J@I4aBvnEJP6@Vre>%ytBLhMLQYLDHH5yd=F~U zTvAI6R2M&@_NWo!OxilY3C}iIWfZ7V8i<7cr^g?|+?mdVzZfb3A!2Om3BJMaSwqmx zOE1wx-Z}uY*2{+IXBx`h^LM4oHy)xk#QDiHcAK(<3VWu%ZZ<&bl#~0{USo z#>fc{QECAm#rFoE<#^g7gyU))5u|L#vEH7<9aBRa!0el3X!6C+BA7N~B}6^DQwMut zDf>0#efXAX_ZA{~PJk0&RYt$#?`a+GQF^j9YBsVzW!a2?^Jb4O+cWWq<9KQ&>G71% z6}Rl)rb(FdL3mT>BI@CPT>Lfcveo!0D*^ZkI3Aa06R`6$+}%HMjgLx9Sh|J4_K-Z@ zh8`_hL-chSbU(!o|B7dG@rm=krB|(B0MCHiDre%jcgNKr05~VTHbSgY^;;ru4o{Hv5C8iT%ela*i?^RI5yM|&Cjg7SJ zy~!o?bI$AfHZnrxaL0oy9We`|;Hh}ciFls?6sZq}KdHg_@K3Aq6D-!$Gl9Ydc7JZix$`Uu18M-rk^?GC z&m4MiDw%3Dw8eJ2Xdsw9xmHu*QU|i8d(j16y{m| zhXwr0s~`6qIUXVRd!j-Psrnf5Q5_aodo@a&UtPlU_2q>-A*{ zNh$2aVk1fHET$Lz$RF()sf-(uqY$F>1a)KJ+d;rtVF9fN^TAA`n}TaA$~;7dwscIz z?(7%}o@xaSUx$k;VYR~ocjQ{2YTYi8V+YLtICyD(IGEk$W={JU0!k&#NS0=CeP#)2&!ri{GG-=K!Fs(}UX{~Wt8S#Ge)~S!vc%2a_+xdz*+2_j# zH!2KX zzzj-cH3hqhbSshPzI*&9#X4*u!R>L^P-~}4v55+q1o}YMQeBN*W6l1Se5W{T@&K)w zt4@gfI}p!Q9TI$Msz&2r(Upc$hCcw$1U+^VMYtpO40>J{qEm;+wP znG`c*wR<1gXa~plgi%^vZs;w9h{i-fv_ztA2+^8_euWzp*IM& zLT_fNmZoHi{R6qU?p5Vq+YhxbdYDdL8B!~vm6S0(>KWWOD~JOAJHq7u>n&%X@xt%K zf@sXJT`KA1fv*6?x1kC=3+|fM+ckt8vGCf7Jqs#u$Yl>2`9xH zt#4!JL)*NdN9=mrrpR0NZ z*u_Wx)l8SBNX;f9VmY^5J>D;%%pzT;Vv_)ZH&RM<(|v84pUTQOWqx zRM0xyeIFdc)L83rFDq-<_*E#PYzZ;7&Yy4sB}0g@R@E5jYd>j)vwy(BJ@~EBP$FDjr#s$dCQJvvM3W( z#DVSVh>5N!$k6D8k6oCdr;2S|PQC}xbtf0~AV`nW?DqTV;jof)e&Di&aT$>2H>U3P zqI<@eRXXSdKXTUwn@zuN?$Rqh*Rq?1(`NAak*!_vP^DUzGfb_0rUr_ZRef$rgv9V(6q(5O-m8HxHq$D9Qq}tq#gIfIYRex0Yiru}3Mi zjWk>N@lk(HkWZV+@U>S4qAtH#A@jfj6!T6KnQ>JisG5>Otbvs0^}OZcI$w{x}z0v|3=M5SpB4x=e-$^(68P<6bE5rj#5EmWNbYf4)@?G)94<@1>Sz;>Z$@ zTe|)CkO1sJ4a^YwR;O|Dyz0a039+<4BVkYwH>NEKS3Uh)$&l*qXA3In=oh&GL>0M zBfAK$Zv2y@0n&a4b(>`*fsKyF5AGxrr5_YzV|1u~r66Myl|yEro<~EZR#y{&I#Cm- zK+)s}+K@@Wc?}{Co`4O|8r$(VtJ+$(1 z7i~|0mglH>dp68;TG$uvuKgmwwV&oyLB{!8QAxP=AV)2bc^!?~PTMLsmA+L~69H)ajVO>Ve5{}dqKUKx=`eio2-xKS!Br1u%_XA{phDn4im9kP+SoQ2?jPL$FeXAOjP+Z zvFnKQR_RwGhAqR62QJjdV{vg*S$2mxemd{%JG+F>pe(({p+=qD7DRT#ztyZYQXH+m z<`*UX5f851b(OH3)>=}7l^c?m^uB0GK2lVXD z3x2jt2Glf*Lf*b44gSpQZbcx}*o=e~>es+K7x1Uc=n`%KCM4-bGEU0}p`tDZJcgJ` z$&y+(DoUcY?KuvX{eefp%s2U82W%u%Yp%NllXxdrU1D~`-+ReWaP1b*eDeXN-3J1` zN%@wjy&*?ING8Hizx61H4cVDih^z_=uTrt+sHPN2sg%X^08#(1(0)hhNt($OCk8J! z8lMvvAZa5>NtuA}N$Qab)eed<)I@h+Ua=}!w^urq)|GC!2Ve;cmg*4j7mxrWodMgtgSeuUd>{njiFJub z1;Q2s)Wc3_koKM}xR`)MLzJU+`voBzL*$|MEWDm0>;lNKH6#j|%buLbu_5sdh%3mN zs$;owvlSsuqaA=*AaQ9GC^^T_K_Qx>b87!MxfS_d@q=-nlKAb5c%1D`mFiyEB%*|8 zI8Sns8dw@ayl_4yFew_d?m&N$joGr@=kgXsgIfXrZ_kcI(M`lv0~+{mV|VAZA>v1+ zXL!NEGwpT~r*u%v`%3Lu+U2uw8R9kx##k-*e*MbL#|BLuczk}s4BI(_cWhLT9HKNB zEdMR7ZAc^1wYG+z-@a$5k?$TKc;FFI%BJ>N3sK4FE%cusWO zic60#_a%v1f#aXyMwOsyw-Xwo_}#TNAs?Ltv(<|Jp_#P7pB3IVsXDiq^F?zka5L z8scF$zi=_4vux)h;37S*b?g~VeR1UM1L=rFao(}IV88dXRF(JwR$?lPMNn-wHkdAB z9I>92MF{=B6+1TY^+btW?RdQ^5x2v;?_UaR;gOFQi1lYXVfnYi16n>a*;dN&hQaMS z10KGrQg@~(@f(spGX~5kgk3&*e0i|>hrC^M>ip|*TfFrC3gPk*3>v_-x}HY$OwJ+i zJ|QSnwX=}OHHY%YOFPJ!)0yW-8AZv`C&g)0Bq~-hqS9xtEyAd0K{>6<)0+x3V~L~L zCVA1#8pND5o1TDMnH#PT*YoBm#EzreNd$*1Y!*34%EZKv2zg42bzlAxrXM9O(d4?U zX@#I#7gO@Ra2Bw#jZ)6cU60!gXMWluJX9Q(LafHX9#a`jtcZN@ktO7TAJeXX^aaL1 zP^DO^Oq>rK-+d1&0LHp{Ri#R4${qV)r%LH36;`b3+Z)E~_l)kal^WNh1)Vk`z*I1M zhn2VSjr=2z{?NQhy;m2jUy6NNnvBC_p)wB%P1~P4wfyEVuTG3u$%_oRzo8DLwoqrY_gph#s%+>b9%zQ`jy5H)m0{bMN~sF4CT7v&iIIir zh$guZ?S32{bj2OvuobsHd2GiTtPn+xJ!^3g!jS4li$4NQT2!wwaImY3=SJ0$wD~jO zG3hOdYrEDd>Mm)$=7I)Fvn`r@%3S`l3X8ptJ1k@=5SQr}w9O}qsCSI26}3)Z_z)qa zoJ7bZ;cWW9;IHyeawpbV8cKEx=k}2{=!l{K8_*x^qkfAZq8Q=RhNj8Pcd)b)kFGOI z0<~c@6{ zMOS}~qWA)A5pc;>vA@K>N$d(90SL){S@Ye_`65qLW;JC&aHnS4>8!1pElZ5VPn^v* z5NMDWA1Oz*7|=sOGGbyQ!-Kv5xG^R9d_dqaG*O*j!h52cyK!MGvbp${c*mz%UNo5t zsQKVn9DQc4sNJBJ+fZ%i-LBiZ^d%Ym^1N4Kc8s|P{!So9JK}{0o8=G6hpn;w_;)_?<2^`{lC5OxA2q<>*+hyl@EuV zKD1yJ>D#pD`~>qmY!QnkFJr6jz~wm7Ba%jimMj+|>w7UPknPhFh}aacI^Y8%bQOgD zdXwdjpfuQg3gE3=)P`;5-y$`CaJ|@u&D_(2ZEw3O9>j(FhC#0!WR!P@uOhtk$Xjbh zD6ceJ_lS=tC1eb^3JX!Mub)qb=PF+{+=hq!Z83dnnA_;AFtRRgY1p(KCz>hN>gB^r zFFdztLfcVudCr@nDb)OG5YloJZKKLJ?~<7@LB1C6`jt`Qw%ipFOZZ+WGoUJ6+co*2 zhshQ3@_~kY)H-=htLf$fb9`lR)renQ?CW@&!pM8~uD3^-lxQm-XBcNXbBL(=TC?ug zbS*snJpOAhh>syhgd=Hi1STDG))kKHG6)bFQHL?QVPxL|71u~9`WPVK1x zv02?rW4m&LmWVm*sO{iEG@e}q>Q0}T$%jtSrMS}#7zN050cIP-4O zq|vRgP%2GguDZZ5CSu zP>b&RlQBc-CpBg({_%CGM32CH;0brN#{Lza83-)$vp5~FoOa`!Gr=a4vJPTa6;b*V%8AMIb*z?61LU^PLfD-aQI?A>0Vyq(?>=Kt4>{{iF2E zM)$D;!))NzzSpnvw~077W#O1$t)e-gAE}-+!i3w;-}tZ1SnG5iQ@cyT3}ofIt&>!h z$~*`WI!&yYf+u^r1+f%l)uHeOQr6iS3_^z-DI7=h86?wl3oH>=C9zN>!ihk8C{vx> zCztdjzv;4P+l>fY`It3)FVcm$YzX$A-$jF{?ojgQ=*h+hnFhTz*u(g@*Hn7r;@dcB zJe2-$B&aRI1PCjOOVG9hDo4b!U|7n`1e#Yq?gz=_)==soNl~o({H`*4b>bDxVkt8W z30B2Ohss?>J{a)>d!}S=A&1)OCRWpdqVa0CWHjgG7{W}=fbBIK)Z4#p+ticTQ8y|H zP2$MVBBiuoZpKw^%{x;tU5I3w#!LHJh`#OkPP;mjrJ!p^Dju~8rj|(c`z3Xc|7IuR z-V48H?(2CN$_8V0B#Y9Pn_Yuh-YV~R2j}+x#xCf;A`Mj}-5gbScp2@2cLrUkTujPY z{~&Z>U|R#x;lRR!3E#f_Z@vaWsF`hExafPfizqbV- z4&j6e@?18La<6PPq@X4x&reTl1dFs8Y-a!_&SQa^DE_2vmvwU2@$@g=<7GH4Hh42f zBPQTe(jeK@sS!G{GLx7jrod+J4{LCJuNazDx$z34o#A~}K0N4<(#lqMpXcl?gg#SS zK^Y;H4$1d%<*oK!vm4(2Dr(fQ#-jbfvqNFH)A$kPjDXlI9%w7fJfKj;=1Qg$c6sbM zUqGco_Cf|jrfDv|+k>C7D#^MGbecTZlb~C9ZCn=fWxYHo*nSK(cs8k`9x3ZDcaPCe z`8*MxPSM0-U!`8?pHF-PmK0A*WfNv7NfWu1Mr6J{vWDW0GGw zRc)^L94YMcRD7Vh+ZDYSxolTC3gx@nIpp=Z_B*$}JQf%kKmALCadn?g=x z?Ixwyzy(ZTwPXhGlKUpV$08hv!TjEbh?GC@7$!Z%m#bO9rcios#Q?z;#+7l}Z|66&M$>ew(C4Z3cQR*9Ual+`2 zba+@J8IO8$6G+D@ulyimvo|4+@sChe=QoQ_ywLHKV`6vkqc4MbE4`Y^A2`!G=UPj| zG!^!n3gE5R%!c%4ZPh_t$r+_rS#h#b0W6 zXcJZgBtzQ*mt^E1r^Ek0&B3KV#cRANq?#VEnl4}xoN?Q-ED|6a#z%REH`Tk4n8?Mo zzg%T{+}u%S0gUp;#0arQJ&C=TF0G4Xn#s4$pb#3v?V#u{HEGB2H5-5G28)RImSm`9 zf`m`N-infsu>W1om6>D$9tFQf_g~U#FSUYLUQ1ykrc6QVgMbjnGEi(|q@AzQIEkiw zSL?uD5lPFZqCJwVp&2>?UE8&feOv#hfs4N zDzM)NoT)tldtrnrS0zyau*T~)+AJwgI1ty}2ggwKbNWF9o<$-IvF+74#NkcW?ZKAz zN@)|UBiWY}k4>OsO}7G)L`I*xO$5CfgmLE@$N?&Qlc;MN+1&@PJV7(BWU!vpBxFg4 zJWlynXSBo%5t$v=7ZiTcX2~^1E_sBWEs<%c@f7F#)j)!;%jfxLEY|loyX2esw!+$e z7ilXJC-b4AWI3f1s%LDX8+nT=@^(Sj^)A^KV>#Bu+&Q&V1gjH5mn3kM6HhB82MyPZ zV=QAK+f5{~l4mD!B?;)pc9#r_MYFEd6w&Yzy3p!Z7JW)fIyV>8jtp+7=i(XgdRUo6 zF7QAmV9-{{Phyc~%Sg=1^5kv54LC0g+R4ZF*@<8sn+L_@#7r50A#YVnWw&;az+3T% zReoSNc1(Lrj%y;YjD>41*an!RCmlR3l=rT!jn;Q}bfq8UOR5egZIJ&u?u#bcA z_QUe-Hn^MSL31hJA!Fv%QDy0M?g`xvLR0dhS)r@M;x<2U_)kK#kDdCl2la@ci-pds zvB)GbzzC!7)$>B_PL;J!MH~Hg&=Sj@(*Y8#qP=oCc6JWe+%--oWhjm1x}`WadxY2K z^(9mZY)o9ef!TkKn*)Lv*w=%m5`xJxU(W|PDaXx56`vcQZ}%}SsS|Y`n1^TMoa*(mRYz*XaK~tlEl_jL_MbAF0o>`fycL*5-{C+IbG) z^K?A9uTi5X@%hj;qJD7=uI#`=&@sNxH=WE#AdgkTHjTB$<(5w`o;>2BV4@$zDg2dVeO6%`!073qU|^$QUG>@?u3}FUzl1 z|Ea)@MMfA|J>@Y%p+Dlg4m#?jj&|xX1>|h_HHF@Uc8g}#E$~(JiBg%S82_ujU_zEn z>UPKRNqw)1QzV!!0wV;-jr+zukGy>8{4uv894P|d&gV3zukp!7bWHs-sd2~Yv;&~m zA>^C|(^$_P^51U~j<=sywS?WqMU5Qu*xH*n<%b>C&Nrc4*@nH?03Wbto^OnxU?KAZ zoep+!?5r?LV_S1wGN=BiP~y$Zz@p$YQm!P+r)+E=2SCdMa)p>{(sR86{OdHql^qWT zP0teLPGZ9wd6rJjVg*S)n39x`v}mf>;y882=tTu$ga3#z2NPazdm-WEVVhd(UJytP z{Ik&esZZ8{hqQCQY-6>7`Zj#osvTL!+H>PPw-UobU=P4GfH;YhqJeu|Os#k( zqrNPhArhD);`6EK=CJ12GN&53{w0*=SzV;i#~k!LsN zknCL69M>=`j*x$mJ$@zkrDF9L5())5P{a22zO}W-Eh!A`aDj~eq*evUXN5D=cq5BL z-!2q*wGD3b5y6<<8T>I%m`s~5J6(NUni!q0KQ(d4Njt|UQw9E*`c*${5r2E$gX=|- zYgv~)>Z$zxMje_wn(v$U>c6?u8WksL>#7YHmP#L=KRki86uiEla^xQPCX(As-lYbF z?6FNEY7*memu!s)-8Q@U5PSJ6Ao%_vV}EhXwxRhY`Y>{7s^5D@Vz$_4IFfQ(M48Gr)C@mOxR3Is2S zV?yD+U6;J9gqm|cmN15R1K^i9Bl{%;vNz8Fzch{C?0@n;FZo_%Div*796)s^5<^v&D!gq(;peDOmTf34^3?^}q^ zal|(^9=%|kFAVPgJ2riT#GFN=eCSwcuTKHW+3~e=DG+)wtB;(CNh7DHAbEDCS@~Fh zrO$Mva5W;DpSxWMbHQ@0%uA1>`v?&iUbNbBmreOp9GZmd#N5Dc_uRlOgav^R(T@!p zrm)kw18iXYCGT_h5g-Yhtc({>E#&Y87Vs-!K^rd24NwM^CL7k>&2~?bu8|L#!FPVy zvDJ5REO&-c5)dn3RTjrQ4c#L8PwQZ@l>nSZtgX3*jz`2TL97(RgBztpsx^K)CU|p* z=aO?~RY&+qea$FKMor-jeV_g0*g=Es6*hR`0Lkkp(k9om+qNbcTTDEmuQthm5$P+c z2UH)|r54fHFI^9Mq^4R@Q5w5O5)pj6$sDejy^qW8NGQ#%T6SK_&z0r66MJbCyo8<~ zfop8GV{#h*thCqJ^8ULz?M~G?zr;#pX?DA)2C_5LD($`?^IEc`F5H7JH-gGU+t)Wf zGbyw1Rc~hO#S|ENDXspFKPxrro&uGBOiNeCW-LXr0N+!Mp0z1wSS!rD13RH{Gp`D! zYLAPzp+7G!GP2~}qwPlNRIEvTqSSpuVOC%6KQ>+QY$Yj(8v9r589?9d){9_8U~30n zS>CjLxGRp$rma_zScGA-dL&Leh4#$PM__gk@Cu!lAqoBm5xSm(fW6#7U8*6tP$(UO ziIE!kUd+!T%nB0-qx*7VFF3&$50DS&jQDrQ)STqJ`PZZnz^kK_{+O!Jg_uUrTw_d> z#Aj(9Wj-`yO=z-pZkc>2aobK5S{|(rKCG%q^hL+0t8UZwn<>(O^(g3K%6iH<);#ex zTdvl4)?00NPf21a$|*pA(|!Kc`)0w^c4Z-cj#}_+wJXCwa<1m)F}B+!9#SeYTsNH)hj$dUodt*$glr`&GQ zP=xxs^2GD_2hk0rYOmQ`!V@Cgn$-cj6bboYH#Cby;qefLDOJSO0j=ms4 z-AQ({zcz9BKQk*W$Xx@dg+&r@_OSnA>iFMWF1}6KzKM{AR+gR}3 z&g*LJS_u)@dYdNU1DQS~(De0ns8r(%wl!kFeJ6CGcKb6TItQXl{mZPljTt>7SRo0H z0%K%5XW!gkhdMBA;*EGkPGb_B!v*;_+Yzx@9+LTNHTm0yTsB|S@fTuJ2ofMvW7IH> zGNRy9MAKQopJi|K-cz|mMvE;GQW-&lx6@0reHv4%5|d6YMWUDkYk^Tz$Fv}vB&_Wb zj&hFEdVmwQH|glpZT>l0PxB2(G->A9VP^`vWVUUYV0{OI9v-wg8eq49H37K*nBvxl zeWhtQz&wlE|0q#Vr>A)An0UbB$M~$bE>E>*Qfe-OKQPaZEd`w1lAxD;`oKqelQ%GN z@%@-h8&`?NL`=J^1$J6oQT)<$HOb_OWOuwom$}RG7_x%&DN{aV${I(fB|zR6#AsKY zs{QSqY-^!?S{7z3a$P&Jl4V$-7bIhEPW;s_H*#OmI#ZSS?c>g-#Z|*ZOu*0^tUoZO zskSls7i@}KvyGV-GWEhkD;GdEP*YpQ2fo(SX-;^-|OtmG4i??M2@XxXxD z{}0iEpEPRsiGfA>?SrsH_!i)()%VSmDJHMZKl%7SbZ8t)`dEx{e>?!P&;=Sy%aX0v z0_B0$48+sCbsw~g9ivp>PLVv{Am4gHBamA3{T+izr&((;U#V~}?JvfF1Ab1X*csTp ztr~HY*#~)49c`B>^Ol&Il~<+Z)yPsu`DY?%(NI~ippL{>>$X-`om6yEX|lRJg@rgq z&t5OG{wwtCT@FCEv;c^Ekq!B*<38Q<%E#@RfP#eq9GD6&>h(H=AwnDHz&Jts7opsF6xQA3Xhj$f-96!Ae8EaU}mSuqXOcU`yL zhtTLjjV$^F9&v<@csZ;WC!UM1uM5P<`vjx}Xum`EpHVBS9!{{-glvgd)<*rctAPbk z-NhKufH-@iY=0x;=kc}VYg-l>7<=mt(?=~mz`5?bitM?N%vCV?kjCED+oRNCe3!Ry zybkDJj+t1-eTO3NU@APH6w8NW;+Q)BcmdF7CAx@{sa9bv*KHy+C6Zd!D-l`RV>PbP zZij288V{VZpG%XV2`G;TN~yh20tygO*%nw+7v4f?W&NY0W0?tZ9mU4}OX8AN4;Iy^ zQt9QQY1c0n+HdN#lRk>COBSb^6%B#(fe%o<)wm~vC^Bd}p+S1~ z5w*c_Bcet8JlLv=L%9EB|E!ZPHtte;V41BV#Wu}6@~83GYmP!%(EdmtV*hsFE zr=7#CLB6bbmKg8*<`!<2+AL7^+mP&ThO~Rtfw$p;dq7@N@g_JpT+yPuyUG!g3C>3dTfrkIjy)hn zrL3t?GmrrPKLEg(x%nck+BGBHTT(*$lEOQet}^rdq@{e@L+Jt<6d&D0dFQ7+Z`7G> zk&Yg+97Y*MQGN#yIDjvW!mLS!RoSq9E~eha6i^Sfs<#+X@3o!cf0*43e3iJbt`Vga zae9p`^q)pKwbdj#h9jC!E<+$3Q1WfB={8b>lKR3xq-#@vYiaPt>J;U^sIsPb4KV5v zGh1$asbT!oaXm*~fo{>#y@%*Sa$6b?yo)zgY*-lzrkcP4;agxQ;UZ=JUaT+R|2t0w zAvP)4ZUV_u_)yrum1^lCx?Rc&dNYrthrShF8pa%0gZRnsjbC`5eT2PC$!$QDDStMU zM3y>Lx#vmQ7~~);kgzAmsZdJ(!Dt|eK7lz^HZ;9D01=uC#=>areF~K8uC+t`+*`WY z^CZjICiGhkQm@Y`557ID1lN9&L2N@GLdQUG1ugG#>}~}du6Kl+cWS)rYKW>H-jmv2 zh;l_xNt54~cG>YRPkeqNRwaf@?})}ooLX4L93zGl0Feizek;v$wE~|Ko8Dg{Qi@BR z!%dsErNXicjS+NDL-T zcsFLI!*V@=)HauoCD0_ocK_XPB|sNA zJ~`f|1*H9zK~Bh`qLZFnlu%$r&W&1a7>h-oir+BDYZ`4iO01%GS@Zx~(12;Sj)gnK zErEMdH!S7wKKL_9&5V%f;S#@Elo7ws;@C)eVy6eCl+;Cd1xw=sHk@H>$>L@4`>bN$ z!rO8mq;JC%FYzsyX2*psypkRLTI$9vAn@Xn{pt`HdBtwO4%ZkuNn8cL0K$_oAR?Fh zcTl&}j&Y!V#O2ZlOg`L~N1UA(o_L4Zq5O(JKnSEp9zHi>_VPXbUQ2tc)|WEcGHqx7 zZ%A%vDi%UTiY=n9h@uwDEkQ^t+B;%)Ya_V6ZQyo**7v9Nh_O=kM(-B=pWI&=zo1=OL&)1?1gjL(S{^#5my!a{CNDG^6tnKJ!u9_gDyl+JXv#`)=i*6aTtIsN z!sHoc18PRpwc)TnpmJB1g(mn}ujZOMjpu+UIQpKM927K7c+t?&JvoEsTrKmML^a5Gbyh^eg(^b>Fuj8`jAFoPT_dJ@g<*m`!3uxE*^QvG;N`1Sv1!P<2ua& zNHwjQDIwnCDz4c`TpRrFSK-HticFqe0u&hzO-hTJAAI*@=C8E**(QrPIpDngJz-Fh>BgcoV#0&4$xQE z6)=mPokfqzH1VGp7i-zz`8ahp!0B90TVTsr{SF3#b% zaIHU$Nk$5sy*YPLF@29(E!T&%=FK-SftLhQa~vJ_^jWel4Bz zx5wf9ZL$~-U3AHI=P1_a0gt|QsQx+cRv`x%XugNhK0>OFwzKK^hjd9@g@8*5IxXgpacY8~VX zNv`)xm?vmSW zvc&`1S$?BEU6xf#^KO8W)+xajzZ)t{iIktiI@%c7QbErl6YX#VYR*D?Z}l)647pWQ>P z4ku-m&=7?zqrNp;_9HaVXJ+!_shY|=+^ll`(J)>go()nFemtsW#dx;&T_JFOYu*RXHdL?#t6}m``%?v zV<8Jyxu*fK_mGdQsp!RpP;CXm6~`G9acqvy+n^7f7mWojo|S^8j3tc?HvidS?Mh1- z>^$4&Z(B67Yo6$)ut3*cAnxk0FKp4txC8y|7(&2(w^qlWwFH>;ffP&**{J_xMHy=z zSV!M|V3=?lVhi681{JB`R-kd}ibQIU^3qOefqS`^7T7o0w z>NWtQ*tO~=P^bciRs6o%NH8@q(WT5s(;uH0$2<8HB+;lDY4Xhev!UMg(>H>ok!eD@ zSSJX0G6iuXUGpuj!>JA^GNT9q8?a?URP&7+b&PpvY^HyBiAwpuxcU3G3#0$CYbV2Q zRN$o>5OuL)iidW91UdWVnW~15OOY$0-}#W8E1I6-Ff&h3v4=I>pQpG6Z?Q{>cPIf6 zr~bHg>d=nlX)|8W!eb$X}h+3M`Ws1aX)#vXReY3f;5an65K3Cr~B;p2pV*S`p z@3Laob-aNU%fz7(X2pTlqVCx`SNkE<_Xq>Hm`}&ZjbP%xK|OLUi!GM-^UFZqldtT- zJqABH>LVMAa?fD%R1hg^+Qh+~tXki=R=snRJK1WB=yycKzj1E7i=G#x7|iT1tZ!4O zp$*5>GqAt>{bOd;UT9(1;wPArt-!xC7o@4oR{!7v0ryP2)cu&O2y9Q?EuyjboGpdP zyxfd}DXt-yLWX4n+cjWyEGH%hxA%XZQc%^!tMb{%;*pI7?77GCTh)lqC3I z-zc?uuo~N(q$YXb5o6R zbUB}GQVL`^{~ocpPxCd>^90DYkBuAma#&eSzGg0 z4y61EbnkEHtytqVW2fAt^OD&Qu`i4bp!3VxhNvbg+he{Qn|HrhI`hmF5Em_wT;Yv0 zv58@DDI>S@*ywIa(5VZ)#-Fu+sv^AKZHc0$|3|eTwr$BQYliB(!ESK|KMo1l;o!N3 z=E+1TVp|aKB&)+Y=oUP7k-nGnC3_mxMDDSJqp6eaEk9|i;)X%k_}!DMRE1lL8VI(B z8L|5-3tsp2qM0_l#s)v@S=eG~%`R>y?4X9Orn3U8Y^!93iPu)2y= zBM8m4^~2&1h_CUigoW})j8h-&Ojl?UtPv0t7{!%_XLffA@t_N@{#tj8&ESTTc|fX5-D&N_?}uTb09a3gIlG zVuj~yFx!S~ePq~knIXitLzOimH|Zt$lR?)VWO&?Tvz>+ug|IHe0q{Yko~{dXh&aSn zL(1`K4Fja|@u`ETYipy3^0kOf1+@~B?m}ub*8YT839vmc*7n!wa7^5QpbbphAU{CT z=7js?icGuU7dVsFfqz!oeFH|nq2X zghQBM27*s)P+{+f%SYn$EM|(Na5H}5_gLs{jXywj^%W0Sz!Ww-`Z+6lQT+(hoqrfE zF(q#YK;>bpVc<~ku|FRRL$^)C{SNAZQQm#(%nz5ZJWJBPhFN|aWL4#*dPwBZvQ`S_ zJyaK@ocP>D{6O6`9BmF`P->UZLFt-=fbH>(NJ(^x-E6~h?iv>tj|5P6hCx} zrOdDKF7En}!$TD)9t<^NiIZ>Xy_$k3#+$euOl*|h`v6Hr5>FO&2ObKhIE6#E32kZ) z*gy%Fw8q}}5#K{2)a5N;($-@aJkFtd;a+4HAFRA{Dme7l{z;=w10129R$w@qMraf< z;U69hKGVb$xpfu&L0KqtuV^m@h2HUsm_MggLMC`=1~_}#0l1PV4%%(y)aa`CG=2M^7(J}RhdBBM3^h&8|A=AwP=}^r1|{^Lvygty@C<8 zuv^qW-K98IrnKAAoS`I4zt@7bm|^VEl6FRI!l7?(X;^@#!RMkf;qHmsmDKliUBiQ{ zlQSN#d8JL9h;=Gak99q~!-4JxsImH?4I?md%s1@&CB88~$QQeNo)noyh%^-ZB7KG`EZ#Mw+#t+n36chnW}4H=t!8@~QlPD-=4 zWj{YAGi^NFbdSC023?a{4_qiqR|c+rtxD1a01;gHU=_Hf^?E<%{qM{JNHJt=T6Q#u zy?0meP%wDnw=u`;0Dn@Iy9C(kx${zO|8*fO`weN4K2xw)WTtNpK0yIH;-3|uO`M9h zDC+IA>dLxvooH2`2BecdJ7t?u6SgDvFI9c~Qeq%7NUVBBZfN@s*It|y$?_zF4XwaJ zBNKn_bWcvFvbXKbuam!CKLY&>E(VnywmMH+pz9s9aU7z!j*h5n&n`~cI)!8~B_5Mw zqh$(%*yGX-QBuQ`FPenY+M~G5} zxV+}A!&ki%*%;I?)0H>H`44^Nq6uRGQYVWNKtyw&iBjj;80P+^tH48Y@sWWJHkK_A zH8GT*?@K)fy59b`Pm8otap9kr5%;V7w0XKERxouPT45~A{~@1A&}Ly7yOvk-)K2ymvao}Wn)ej~MFl7hb_ z&2n`+l}w7uHmoBXi*5rqK4TQJT~SY`a_z>rN%j(OHt6j*n;%lkZ(SKqpgyw2{%sS* z71jBVLD;zAgV6hXraD}GEAH~+^#USkzN8V5^jdjBc$d)p2p<7LPMB!5^g1_=G$o4@ zcA}qyy{FOnln<cSKa~OW`3komR7bCUE-yc8M;Fj;&Jk&fYo!X9auIs=}Xm-#bdQ5KS|0PJAIwP{J18 z2-Und9QzBHKck@Wz_hEw|G?h4P#En6U0x)~+lWR&blXD0?Dm!{OVO+U&COQ0?y+h1 zz{Bl7nt!`y6WV!_n*gbm09_xT*K?iu{0GrO3bXG`PPzcugslOrnn##vZnlrQ#T~d~ z9ntHqo})~!f=Xs}K*?`~R8Hge4GOICn~OL#OB(NgQWL0zLS0e2NxG~Pn`@*Ib8KjH z`q0qOQaj$?F{8Gv`kA@l;@Xu9iCjk&3=O@G)~~*8rQrR!qU2SyhIh(`!UllAT zLF4FRs0PllU$oGg8z13Jff=mWBv#ySL`4a3lMFefJNRiIr~}=-CurM~e*8D%DouxU z;*pqK2a1K_j!s*z07`4&JhMiHu6l*m)rFn(ynsR5=yUDNO9qysVq2f(5bEZ4rte&C z65h*Re#+sZDK(Z>_O6FyP>dK16X#y&NW^!llz^Je0O9?%51g2#gcU}xd=qCsliJFJ_7{A29 z(j(hA(@>r3bhuMc4y9aXX~Wa@rvL-Hh6J>zdcqPJP;OkslDLiZD{@t^y@8U=Er*hT zF#(^lOXJE)x5>QA+Gso)32uy%)>t1iW1ekZ{r<>P1gHV01B{um1gZZgezO?xJhUvb z+Q+kp-V52n%b=WKlbb%LiSaF-4vnoXMTX@WrBJyFXFc5M+Pud@CqJB`7ocn!M-pJl z)Ww}0oJg2!!`a`vsN4?65Px7W(tR=uCtE8Ej2Ntv@}Uw=2VP&c3F zDM$AX87m0iAlePM|%*2$Xn(YqWBdb12gCLHhqkv-FilEI>_AY6}`T;k|I&e4mbfU@Qk?sd7Fv<-xn(K-0!N_||r*3#s?Tgs~d z093^zjw{-Glb?~Fs$RI6^$GIGy7;{j9!$Y-UX;{}q^!kK? zbry|+i-OATd*QqBq~rsk*<>|{x+rHQE^}M7Aj@vHkq$T|FMq?v`EE{VOyj zl048_ihF*Cn*jdZw1!#DK zL3NdT1*`H7p>4Z0d-5lYGYKE48i@39dgpS`Ni+LnZ#p`vaN*l7&7jO`f-7I;w&7cV z?_F8Nu~ZG#pW}dEi?EK(qZ17~G_yrO0+|Jdl06Q#+(T99_fy4sb+uTs5a*=qfp_|m zw(uv?(Hxq``B`sFq}16GrFt`;aJ(E};zfh=7CWW4Mdb#-8CP#1R2(ym#ALklC)#h# z*ku9)$LRX4$oR?JDqd3)Y z7fKO9Y+EodSi2T)yMHf@Zb~n@D*e7TKo5QI1z*RYr#WLxwH7?ynK0Hx%`IM|#Kr=o z2D+fJ(jviJ*XERvf$Yppm@Mv+Hl=Q9Y}O(apCugqI9W7^eVpazzkgq**!fuFA7c{4 zMsf-h;ita5lMpSt1Bf_gPt^^dvdWk9s@-oZ9D0Qb%j;Hw0m|N zNp|js%-=Lk23h>EZ|1NNweKsog{)8>`K2)cnX;}LxD^r_kEl5lAfsV5{5B6W=2+u3yyrR1S+^gX}bIS-J{G7EY z|HjYinn^ovFxK-y_u!zkmAnRsRa$BbkHCYRC=|fr?m0?Yj((C=D}(QMFl`rerLdUq zz&w;Vg%-OtSE=esF&}dm_I<2~fQl4O5*jzvd;ey_1Lv+#(g8w@A~-PUf}LLt3^P*o z21kFV+vC}y`ih%)7}>k`kNn?bPUNp^*sV~JTT-gs(aL9Ppw*hT#g~#|oCsT!Z1^Ok zuS}%-I>_`;&DJQPy_28vpZ~ikGQCPEv5+ZIJf;_jc9n>;m7_#ku=8}@h5fxtr8k>W z9;AwxdW@PstSfPEyuyN$c__NNX>0Us5$RBiBgRJ4B4WRjj_R%kVES8S;`~(*gohN# zf_Mrjtx6~EMjubo&p2@2iiI2u58#c6YCOeo*)KBk`?>SK@d5(r|&3C8U`R#a1u-7kU6(oW*y(+f%yIAuf3^pQH2h?SVPpN6Qco;O?>Ad1?~ zwbHp=^Gbbt#z@&_Y%P2=es%ADWxS{I_npNFa}tUE)(z@z%6T+-Y9=u{Iop0h)m!w=vivL1m_3=^#kh_Arn@FaEy81zXp5X z!Z(9RlGApvGBxkKrvk;to8KjNAIvTD`ioE>Z(g?%X(GUoi45$C10(Fle`^g?S@Eb+WNQK~F5^l1iJR7tAX z1a5xjAAl3fBhF^_eFW`+K$gb)8FE1y@cBdOWbO&C@w#OQC6dw;67t&Iz#Zct)w%fKvJZU$+Oj;{ zbdzKyhDU%yb(o?*iH#AK-+yOfJXUn5fc~Nh4gTWeUTn}Err33Z zPD_IZG_8}QO(JPFpk1u%yO*jxZh{2$aox?R z_rUOg4$D~kpd}l97v}Z~$e6ZM=NE@JHxhONW#`{%X<+Kz;N5H-^Y{Gl2W_Q5a{g2Q z>##E?t*Q2Z#lxB1#0Uu|?i>mc?T|^o$mCcqL{24vo(2}iHjrflGizq5)~P%ZYx~zP zyY9IRz=`uf>)de+W&%7xvBq)gMGif=$kHtwCMhsAn*yrnw{_%MPosyd7LN@^4!=ssMr|Vh_H2}S@{Q%D@ z>M~=M@ZX&*Un70=nn8Dxqi^-hntG_E3mkd6-YJN9?Qb9!vBGF*b=DL!@89In|A^5F z`?I8>aUhV`W*OJYWZj}xO{tJ5)M)0XyE)tAxFT_2J-j~B>t*4D6oAR*%>6fXp)5haeVrUSNN6TpL`$y*<-6e!wJvsns)7B?EO zG0x4r%&d=ztc%9yc2+C~C0440yjL&1$jSrMGeGHa8KhyAqoj+AcIp6+mf?nUE^O@l z(VXEeGkvML8LNO6kcRw@hNcV1i(~La!YMgicB5KSwW>)pQCZI5aBo2Ju-@9q22Xm; zMwFj@2SzXl+3COy!2@K*F6N_L_@Kjp29$GS>5D53!s`Lb@d=%=A zp8o33045ZOM#(&DN;l<+9*&}d>{ zLcaX02%N;rPtL`4CYcm`FvpZrELLD}@*jnvKo)z3Q#fDvt#3^KS-%tmtb)%LihA}j zUZH*7R5dq)qh;jH;Hmoa$&s$DYY|%(qM2TOHFEb#A2ToCbDat>7IBTC*V{6!K^=~SeqC}CgT6Ze6ZH>@Pn zLDtCj-^!FqoKy7cfg19%$7ki1ONy6QO%7rhoVjmmNA30lf()@+jyxoi1MtQz(2=B5 z57(_)%C6KB7l9gEN@09_H?ZqzWq~oXf75+a3|VUBxPEB|q2waLtDeG>SL*oojTR$w z-T(Z{8U!Q1S^VocmiUgn#xsahuA zPGEc?ew^@N&Y>_1klUR>mm1gxlfjvyjQdI8Ib)chvhX>y@aHAGyPh^5=C07d{R7Qw zGFQeSw0zbiMs{t@sne0|UuPJH9DB}nTw}O4Ujov{uJ4GlXV<|>mu&5EGrp(cQK8rC zACmRgxN=hBQk*Zjd!b4DN1IFm z5)DUF*zlfM%k57^!ux`xxq`1e05m%rF$?Ny*1u}ZRU0Jz3J!f7I_;uXhrtw$D6l z;G?VL@IfZLZ=&=6tO2~&1MhiiJzb00huo(Se}$2W$J+GuW(o~y^@X*ubpY~ z!CL{b0zgb5wj=9cHxVB47I=fv$7}9r5+d46MU?64`wG76e2X)LLTWgX_4@p(o_cq4 zJ$G7pG0cIcgz<7`&wfsvSmUT-50(rQ;Zl0wFVE^`Q&@j9iurAI*C9lzEz+}76n>!Y zutlzqdry_LRjOZh)AiYz;+t+^O|hP@W!=|MIhk}Db{fAtxi5m$8xMC6zVxS4S6l1} zKnN7If;&5T63pUf>Msh9DD;p(RGwj6l^rxgs$q<^+g6~@!$)IGM$Tl;YditY}s$2X@-LhiYH!XFfbd;Q3 zCXm1&UI{D)U~;>0m@CMKt{1xv2Md{hMo44jy3lYVyzNEOm4mWCoEidZ7lwlb)($1i zd|N8Y1H`Jrie~2hQkITQ+NtCzCF#KmA4Wh=m5}VW$r4YQYRsdzd2fv7qA*0+T$~6m z2`b-fiu_!3Ri_T3?H3So&HWF_LWs{y{m zPrzmt32YA&)vH-~u|TESLPPG)%Lw#K8}MF@m~l8zijc&1)?J_AXIT!dkFJ2BL{H(z zR=DFlQECy}B=Xqj4xIa_mAn&LmM>j~H@9?CHO^580>UL}IK=}Y>$jwb=$r-{>rby9 z*_|De2t2|o7e6E>jmH1Mia~(jR=i zkz^;xd3~u_sV5JJ9-g>HA^=rtxEK7t?Q<*8t&6+DS&4wPP^c|L?a$YC$sbZoE)hb+ z>$rr(h=#&Hvv@h_4#+ZVQD9N&Z?n${7&?tqaBSf6Nzbl**TFsnc_`1w+wVb0*i8n> zd&M5BZxm%iCG?CCau(nyN|c6kB6pu5mR&ZFq23e@G_2;q0TbM}NOcssdbu3e7vakkL~B z9rgolHm3$tI9WS%l#Y1At7kseYt1I~GjzvZ;bGJ&AE(bI+cYt^>CBB)+z@%7UFR^t zgEP$tRm(<@_!xd@(&qIkVv11xPajNb-0op!kT#6(t7C~3xEnOXt5Im`m^~#&^k=!v z!&Rt%r{vj;E)e~3Yv95;q7^kzdv-{>wd07#jO@rZXy_|iu^roL^Y_2b9dDdBb4@8; zMa`@Pa1;bwdTP#El4cq5L--xzF3Qe}>9iU`sxV?HWPKR*xa-Z(!|SWGGB4;+-T%5y z`Kvcs-TyFb9nqTYejab~FbL^LO$%zPLfB|jdLe%0GjTM#;)7a@c|#(R`M&KD(ccn^ z-Fnx%YgE!+E?~%LffF7Ng0`Ex6%QqkEMG2hkRd4+v zrg0!4r>yV|voPP<<3?sQ+2v*qTT+`0UAW>QjYI=d z<TZ{K_jGpXCSn(N@dD_9kn34cGNs~kBviDolW>NmHT0n5~#zj=?9f0Ob0=^#`dX1 zpkiSEqF-Cv)2=;%M;6a2>k0WE(Oo>BMDLce6&YvJ+SLo?q$L}00mc6SSZG92b&ufG zYMsdtV-4d<$DmFGDKG`zmSWv^|EQxX>HN(Ps?2b4T>6wC$ya%AnWRkAVc9sTKsH@v zp}~Z9+XF(TM0yY+;y8=AzUgL&+E4?Mdj-gi#s@~XV4_L+0!qp-b$%r~mOeWQdCwm5 zv1W%&aUpHGCJJtCe+y(!=p)07-iU=2u&z^l4I)tj{r;FV9B%9H$;FtQo=o{CyR}dA z!WXaOxm0Wxw{12m(HQm2VSUAJ6Djbs^NH|L#O^ij(r%Ep|Dg{oe*eX?`95_BDA z^lYQbCJXuB`Y|oP%cR`YWK=6vMpg@cy=*2H08yyTL8kG$OVw3?T|37?5oMmX(rGGg zux<_AC(av0oW*un5u|>>#q(I3K&jYEBjVw;{Uc)w6W<(^OPtnX0wLX|CCO9iAL2*Z zJnDn>#WeL!BPVdvzw80xuUqnVEgH1 ze0sjqn(u5LV+8_K^UYqT;tf!sm7*bM1FY3l@MFja+vi3)Fw-qBu;M#15tUeI=-?~; zhcmJ^GejVN(;kUKyb&B6qMgM;oIes*As(G`fmT9))FCQi5j512IFnJMc^t&{BtEo( zjZwgzH|Q6^2xITvj|gyY=nt(0b%#_wk}rK12eOC{t1a+=xaRe2kh6`3t}y>t*CpST z)DqU2%NHOLdQ~?UT;-Y~)YSZsDN2il(Laq37ko#%!qJWS+s@)oj&Aeiw1d-FPBzjG zM|K8~Xph2Qn#Nh0O66c1xFF+hPVF+D4y9BF);x{WN6KXIay`5IMZlZF+?Q3#)io)Z z>DNcYI~-wrxVKrt=S^R>5!F{%A77QoH5*Jr?iOUiswrHz7? z(3+=KN4*beYb4@AszVcV<#vOx0v*p@Pd~8_CN3KCBCnSYgz#ygWdC=q3rC!T%n~e0>){?(HsF?J*4ElEnavIhJXYH%au4Cq%@TrO||oz zycZvD^8Dxrk=KR1&oAWl@yi#( z5hpUG=%jYVg0UPE@)^TEwn2sT17ff!=nNh=cLXJ#yKaf$tpbrDLTf+ugDJVd+d?{8 zhCksa8|J&C7C8y|EM8lH1XeuDS>n012kfi*QifZU!4vg*B&>r2Ln zEMASZ2uXB=oJS%6hmi?9cPJpF%td+DJhl@9rNfdepE}=Lfg}Mz$VurfLb> z%x+X%VuMY3ks+ttq$Xvsc=~*>LR033uYri2P#`gAsRARzd2|;T{+U2DGQSgJF?U_dy;ng4*d3UWh3qf{!aYw6>|J_QU3@x$&V1f zzNZ8)05uhL1ieQ13LRT^E z<6fD!-9KT|u^?o1(>5CXrru#H=iYt-Or4#N2{HxhQS(2>>OT!}6^f$ezi8K1&L8Kj znK<1%2NIcfLZmi5{JPX3dYV3ibk@o0SvGR}ZK6I;2|t)wJ$P+SlKP`$H^nWQ#EVdl z6eG>=2&n{T`?Fm#z2WlBE9LBi$3hIrU3LB#9q&-1iUMc)3n?Ae)Q73&?m#>!aFVN9 z8ug*;piO)!Z|8 z?vSa=6b}PDpk--l%6IKx6~brX+Y9a`FQzqeqPb{@wP!aGa}(;J^qyPJ5}wlHZ;!uB zGw4W6#l&yPxjqZkg78;npV5awqzVqq4HMM$X-_7}hB{gKh;ZPLIuVl0GG~B!$j_A? zy3d^3eUky)v*JySpWVUi+pRs@wFJ-QG2w>j?R%j3oRYANXrMEdc9YDGp@EA6ze+!8>jfdiJ9)##52 z4Jnv(cD4OVWLx>C%3r5xpMQW;8;jwvQPEx;q*13!@JdYEYoQm+{*(!MnEcblt+_51 zXjG4}>sSs*EPmzwGZWMPB?|?}ZQBfL4HiA4OfpjShOHt5cTZRlUs-_`qR9Hk&%6bZ z%+VmWXY}6P1&V@){kch}1&>eh$E)p1Pn;>|{u8C}Lz1<2Nl1UGREQx4neaUG#0PD6 zl?VXNxTP{;aTVH|wGqVc67t(m{NPu(E>KaT8Qv*J;wD>PA(ph9oLB2y%Wj}65HI-j zBZ~W6DCm^Pb1lp^+Y;{`i0ytK84+owJnBCwuShrIbw0n=W82b1z3TQKxi9)5&FgpG zPE{0pu?#Mu@URNI7|)EBHX;Uk)WzpTKJ%X&?3buJZLoVf4%7OYr8eKJJ)5(C++-{R zGsjcX0l~M3__bq&N6K10{4kfOAL{eN(!R{1N$55X~mYMi|IPxGgKZRxzn<6f{Zpm7%+=vM0<#$fIW6S z3giw{jJeZn;KephH16YyrwKEh3{$|G@@BEBx~BN(VOTgj|FT8*jIN*}Wk;g^&toqa=eUk#WjT>y(2~8aN<<&_7 zZOdU$=CmyL@jn;tUN`S)&qelvITMA~kEq_$c~ID@aGc`;I<~OA(0>hLu}iaHNsza& znO}6zn`1!5sJR{F%5XPvFQfT*<_H7tQH)2nHLsqm4F$*?K~-oE^xUAIa-k9~5$1{_ zpKb@>E$$4On~5t7mV5;8y4{x=20<(=;cY(~{zaB`M}?XnoQkrb^D2Ow){PR5OLl1d zi0g9hnPQ-mD0)~h>r9?NsRc`;6hzOkQLMk-KC#3LYkVX#_fiIVSO?vX~;IJAtaR5)yq3=hry&#s$1L3<0wvY2hW(*g*Wv6>eY)-!wwk zrKY6bLy>Dg2~U2Ytce&1=ro}cM5jXBU8n@5ujWFbMEI4$XRZQKohlgIT5l>CN!r;1 zsD$EN)awc}U2V7=z`&3XNHXC}tT$7$0Imrr01(q;M7$pgy$^9TF|V;Ye#JIPG^2$y zUOMq?gEBP6Me9?f6cQ23TJ=BO;Q9|)!)7y6BsTr(jzhNUK$>%wArqWahIHK3wDuhS zAAg}~EF=@c>{Gh`JzkPeUYhOq)I8Qyh6)cqPk%ByM5V=NT*7qFNHfO z%jElwGzR193e=r7M*2FgaJD*9bzBKYM2#2fDI1kwG4o49C8jvkr`cb)Z z_X(tl0+4^hTp(@l=cbb0RrD8=>LYd1Q+f+m+&djD&%~DXh9TEYnZg87W4lor&{gR| z{-d^X1x{5oihe!>Wj@m>LkTmRr>dU zl*Eg!3@O-_k=N?|IHIG6vI5)jFEh2M4P|>j7|kvsCMu9K2(owQ6ck;vfn#|>9u`gvgc$(-=#Yju>cWz z`U2qbJpi9cy{}C5F(cc_PL-B2b?GP@V^zxmvZlDT3_0aMD5555P#wr)s}aH=B5d8C z^C~hp^zzfpnuTVAl@e@)CVtGsYNqPct(1bxGXvio9{>o_@4>08=q9kcsg=dDUZ{ob znoMk?>ZdxT=Q4>)N)llk1nwq@JjNGz`H7-TL1CNyH)qqh#Y0mI^5h|bJ8%Yu4gjjNv^AdQ zTJ{O~EJ<)Ta8WOxm5unGXX2&9{8{1tWIlax_?wTr401X?vhjt?zso}z9XvTj_h)tz z2O}8P9CX{c!^lCnBkTKb1|NLE6Q;Y=Om(EV+I(MUGS0wWnwmiB2UmGmPFDcM}C}a*H z*8$?OQ+j>kENGQT+WG@LRtKN=iw_)AGNGe5sTy+GG$O!5vaE2KV5(l~U{$f#G`=my zP5g{Wr|2RZzPq=IrgrCbS@pi}mO*wC6%vlxV*b=(N%6}5TFw7V;~4mY-Yp84Zn6AU z*@X*JR>^`eT&Y((w)PX>WT+>2tEc+J6eRV-bk>>I;wz((F8cG4@k}!n6Y)J5SO&U4 z=!AZ|#xUO>?sIFeBBCB}nR;*aX-{^cxmda=$HKiVzwi2rQl3~J%odvvWc8PQ(1kOo z$WDIA>?LwgWy7jJ->-^}zTedTy1v#HrYLEZ$?|0F|Gz%mHmJ&9XM=2zt+ z`If==ECo}Dm@x`R8UFYc((0zIr{K_=(Va6Ac)6e=w5B7_k?V<>xg$Zz+3V)|(z9@2 zEKlqMq6PpOwgrP2Vp@!%8qm#s6iC$6ZOe|jc#4BfekWIa2g+>`zFu?}A=f#Ryg)!u;_^$c~7EoD~;dMQ?mmn-`MU>p!QkzDKxFQFqu) zzA@ZK(^W+=gE1$C>~ZbPxC9smwWg2J(e_RoDqT@76&*e3@a96D8=<1IFWpH(;N`oq zo4h**_BROTXsZ zF`7f7?kvt*DRf@P;Ba&XzA_j`hyr6o&ilOUm8qqUuef@iksCcZlY1vME;pTUf5Uq+ z2V_FMAP70jqtmIXt^xy;b+X$9?(LtQWz|_n+bhM?a2{}SHXLDba!TcdtZF(?Q1`rH zQdSYq+R_bn5CCD;Tkl)Xk^tgLFRg5+`zX3*1>)Ias1A@qj&v*8i4z609TlLZ>BwB3 zx1mG{5X81MDJBRH{Se4V(u6HL2{A_5v4xxWije~+KU->>nAtfk7m~I-8CHmPl{7Ho?8{LlcDFhUaMHIW!{=B`B~H~=ZNg#Z z53CDO<1v~(LG4c3iq>&3YW}d^F^L-%QDq2iLens=RLYn_i}w8ocD3|L@cpZxiTU_Y zPtQO(VDFh`Wf`O2{o*iavI^3NM)H{Ts4+Q*aFrE*ku0o{4Sm#wS!48(K#Rcn*k$>z z%^}}NC>J$Y2|OS|k_h4*ae>1G{^eRZt<=l?E#`LcNEXVST^D@=zd0x9BRUgf?e{t{ z-4((Y-sq^D%8R-vj5K&LW~T*~^u~YPB3#q_gVi>{_syS^+c6xr5s`u_9x2h!wE>o9 z?cJrPxo)NKSTC#Nw1+JQWf~z=Tmit0LjgeJTT#reyVP}f5cW^wNvuNv#$hpffMZ=K zkE6c!_TUj8Pz#SGDTMeSvFod9VAK#QmvgIg-7i3dM$)HiyP+Z4SIAbvv<<0D2a&%GD@_ub@5rw(3N1N1 zu{B9~VGLX<%~7+&L&cqPRe8U9S&&B%W~p7LhmVA`4TTC?6fy0d?TpXF1;Q4 zoCZ}GJZ43~?NhAdpR~wud)uGgeY-C^?@224c+r$-Q_~tOV`YP#_wD`>upKMbgqY(5 z{2YEorQPI?iX2cX&}V9id$eljiRw_ke-xmde@yH<#6*+r=96x27-j*R1pe6K9i2d_ zlb5>3RwCv9!lMcvGhipW(Le0mgR;DxSc^Fnxrn-%lT~5q*L7J<8)sMAU>RmaGxBGH zHpsSnC&z^FV^@%=*rO8hH628V?x>R7_XK@dvgH0yY{woIp zSKok|J9TvM;V>QlnvYwT@!5h_mRuSZ((ssL(am;wx5HWY>dK7OXpN?566df352eqz zV4qQ3pINN}MUgANYudw;Rq3w9D8`?J%Rmu;i{XkUWLE&741zCR424?gH(_sxrFC9Y z7Iue&9Mi^4l|vig9oi(H_VKa-$6f^4bl5N&lgqQFt8d6006VF;mtCwC;e|i%ut?A; zSgKsz{guyt{qO`Ja$T+XtIm_s{Ka{fdSxZ%R5xQs3kcXE)1qlpDhT_RM362O<<$j? zQqyf-8AwG8S$q3fnEa|t!iw3n#QC5#ri9;nOlcU!j4yvVb}(&0huz5s41Y$~k|j9` ziD8Vj-|XcZKz%mg@4f&{oGv!|cUm7WGNNASIg^v`H9kw{dntmi7$cucqap-o0;OEq zfcx-s(}%P7fZ{~;1EBDE9PJ}EVF3>R00ZAvuxVDZ{k)tC#CW3O#!6|c$goDuOnFz? zvinXx!nN~PE0-GQqx{Go8uMg=J~^zAmP-PAKMS06Q+Q8ainyAFb>yvmPa6XsYKexD zq6ozNI68Yg4y^;rYPvh$oSA!~>Hev95Bkij9y0hfVlLs;qI-O$q5e?@TvMZ!{5VCv zEu2&nyH_!4gAbA(T~5^GxG4s5xtm8ImMF0$>cZ#k)cG8>)Ap10Ow{q>p+Lts>P$oD zSd)*vksek!B4W2Srb$BZ^nviyZfCaXG~W}87Yj%(HKrJa($OR|(8Z_7v0Ar zuH|vk^1WN!!__FW@L3Kbm$%X<_Cd?HIJXrF5g(;rAHnBIdRrA zlth5@>*Fv|qb6WRY;Rd_94y~4YHL24UMR?1x2~-+lv75vgPZ|)ZE80_wP_I(cGpwy zKGvSKsmfh#bjRbf6UwEIBY|dg&xPU2XA-r7KL*p_QS(;u&wd3Ss0AL?2i{di@;(#Aa|!?cR@d znSRG*^*GZImt-0z&%a#Qg;(5Y18vrf9=2W(3`<*%1ex-Gz$5?2hEtRS zwfY>MMeTjjfP4MWgM*456_Aa97&_1&w?U7_66%d+vO}I#~#DAH0H9KX_H=;>Mb=pxg_PK#iOM zp+cv*#R7;x0GZsN7zU3~FW zEg|zq^S3x|R-dCqBwGub2n6jdNf)=d1~UjJDZdETw_U~X1qKII0;aFFHoWS%liSis zTwy(D%~be~g;5e+2b8)V;1aS!2%d*s!?BhIQV?F*{T&!CtBrpPrf}IHC}UETMoP#& z=X6zGW@-13r>+y2ISCQwc{_&!Pr7LNVjUb&c{(05Vb&Bdgk)$*##=Tghc|TD7b_i~ zY14l+BQQ0qTd0Q)lm>x<s~>vA&p0L6kumYVNtmeQYV% zOopI{^|`HQfyFa1T&41v@E1%Thz)Z|dl$ z)bK|s6__a6UkCC~0eB@CM3fl)4-$0RL{~$;yPd%reg2~~y(*1bN!4}lS=6B3`G?ri63+H&C2|^x%bb=q;w!}7D-`4yG zgI(kX#fJ^ZBPcM5YZ4+R$_Q@4jn{$`7ef~@_i(YAXLj)Q!bNhcPC^(<7d)_QDRrgA>p!t%jFTdqj_ihy{xX~U5`SK5W65ppH=*Fg-r%O(r8 z3J2~wV|x9OxGClqGeV?+p*P#)RWUeqOk2x6Lm5m3(LipW;Gg{i4j zFd_$JqQ}nggKE4r01=DsIw zPJuWB_629lXS3(oQ--Ub%Fe$3a89Kfro^l_;=)ZN)Me_RT}Vh;bNEW|H>6n3k)QNu z*Gz3nlelO&7u7z<`((}Uqq$gXcHae9-)TN)l6!+Ak1Emjx?iAs#yQc~t`;suau!Ye zW>c}sBo3%2r{J-Qxkms!_z~UeolUJrG@*sB1Hwtsm7^|DBu|F+HWMDUA?1RuIpu$n z#eG?4RnWF+3@#OoCWr;?4WK4DHybMJvF%l^;`=TJpGN6Ls25Y|Qq-Stz|W{OStMU< z(kwqjy8(8bjIzO&bLJyS*uPaGvw)W@zr>z{_Z`&AO$kc*XtMNm)Vuk9S*^+d5=RIF zL?z3e_jcayv2D@!5w~DVl&r%KIr-M$=o#xco6iB}@wy%a2hKVP4SVLC4PA<)E9ec9 zTZnSWQ(7dG1(`E_3fXchp&AzXqjQ&md=%o;j77GpE+r%^@jZG%j5HQC%0_H^6=%{E zGrX(ZBz+(cdMPJ{31+*dT-xIPToLk*6l4<5JyzVN%d5^{FVdfs0s0qWaKvwHlP!g# zI5j+_5=2?QDd4r?Ut3C_e_*R!qOOWE<{_I*;vzQDNE`NzUgcO>WT$ zgclBjW8zLJ0qPOb%~JjWVnE{MYClm3%J!&7%@4}%ZsGXdlBU1w#Oij@H>fO(Von=C zh#yMlq$sEslib~oAj&8L#qFl=?Ya>E4iyqQBh#OxYePpCC`}?)JbWwFs%+01hlv}* zBQEKN;#Msl6yWeZ@Ts@w4j1i2K!|~CtH$*aH0Fo5<(EuT+|N{x+^0X7<{MWJvA?FW zfuS>nmoVIL^M%MsSa5`pkRH|-&+03H*2W4@kK4Ng-g z#!6kGW7xYvFc9f*0mTkTszq=c1?OKs{besq9|ww-kpQT;@x7~T9MdA~4l#RCBFC}j zhJ!VC1d4PYMP1<&>0;=^)Pe##Hz{eFRLEny^ZzrE2J-x?>DoL?06PJ~Hu+j$m<41T z!kWW(K9dsf9>})2z2=EtgVmUY&G<(8d>BK>sD(^NZO0+AQo{u1k6N^;cWzF#fikXk zf_heI7@+4`8653uO;RRE5l(9|{FxaVh+~1g0LR#2Xw1`u6j3`=5vZJWl%5U=Czk%m zT4p?6i3D7;-A7Z97p_5%9+a$4n~K!UNY;FS;t1dPV|T&@E=NKTJ%x7S3jVo3nuN`3 z@9i?9CY|+vkVX9pLo?<9?zkQ6*~ChF*la~fJV`3`iO3?O2k7E~h##^dY`&7Y^0mx! z7Y~k?)U;REjcAOK#~P5~4}(ke$*JuorxNya(H$4c!dR^Faob6U_#4oUsnQhY12obN zw`b&>{|Y&sXr!fxSk*88^zb(LwB?zT0g<0U;Tu5^tN4yvmdXlFyy_1r<};1pCMkK1V3G9d;5!txxmb5n}O1 zU1m!0Y@;Wev)<4??c;ATj4xbHHe1Q4*@84Y2%g7VocFHN-ONzDw{E?s-4(?Wpbc`m z(q&#t%9-3}m*>fEGloEXfas*gM3Ay;7w9o!<80Y{teYo=59T9MbEODGqU$6PzZwbwH}tOpfv2r=Ym8Q9JBCpxwDFMHU7qG8p=?F<$%6qZpE}aI4b2_b z)tSI>R9H;(2;7g%mr$A)i+9pquhbmb4WN4l;f6s~8eZs-b=J&d$v6}~1~-K7ud-GK zp?DwmtSTUm0LL?=$efef5qGiGRPFTXjl1fp4i*&A=%G&VWF*J9|3!GaGS^&0*@-AO zSwgLTVZ|jmaIkS>W83D`Qr|vR(_)Za)OWE9jB!XsUEsuzGXyqcAz6Efo+Ir~n0wSI zw#FlChw8ppm`q(JBY!(HK%PQZtX|2EjQHSWI+7Fqk4_b;-r{ApHiW{0FGKh$g6gyh z7Ceu1KM)lxk@;91s#9*fhfcca0p)o(%cBhRa?TD(xhq{*pE^Rt>kePo>` z(py_{>+~lpC{;d&n5XC~GnvQG9K*MqkW2XN$pNbT2MiMd9$Z4l-^`{`rcF)HE738z zJ9AyPaj@VPeO-nnl6mr1dk0}{W`!O{baYpzeeK*Z-LJd{ zzl74zI@?sO-yWjP#8_iLFF}K@yVR{olv^he%9iK(8?P@xrbWIyw!rd*V?xo6atSb!hS06odx7t8WGN7gi#mCL~GNvXN40@ zMksEFFLbu;5%Ox=-{_L+Ki=%l`DyO{Xw@VT;Y*I!i>yla70Q4gFG=T=PaY+tiy+8+ z^NgLpuF*oH-mHy>KCvK)~bKhRTm(~OxQCQ;x2Y%98(n189 zhrc7*ToY#_EXZ~!5tIYIxb0a%?R?RM;d^<{@DS)+`6JLI^hrc^yiB#DFn$zdj7SPU z$~{l*INCVW3gPr;RoEa|-O$PF;U}HZy4z4_(*v;8a^b18Hn7(NBQZ7lbzr&{F;%VB zQc9vf`SKo4zx41u2EYkK@ikE9*W7&04W)xO{9PdPtpvQy(}1kM+79VoTAb9P9q1Ba zrko$_k0diF+};Y~u0KmWewgfaz5*TO`B0CP;Uh!PLcY>a?Q-zlgL@Zf!+UU&T`HeE8|8D7KZ;c;XmbECM zI^$*j*6r(AN(Ftd8)F>zRpGI1!4V~Mf3U7`CVf99F?u`2f^H45g&B9cJKXreVV6XOrsKaJWH)U7NEOLA{ zQBAtO5aDH0*E|O;j+iH3wr;%lFHs7@@hAHXwmA0}h0uzTacT3j7A_iX)b@gcg7bY( z9{uHf?2CJ0v6$!=N znWgpp@=9z8s0{*=zD-l$>!o2<081Y?&rdyd7;qA!2?z!jfYA2$Z&FRp6e9JaJ(qzk zQ;SFJN``zO18&yQQ%DkZx5z7kS_WgMpWoxeX1TK~D z3aOu!QNGt%SK5*!=^Q;upecvWM-7oS`Mk>eqCOuUgA35!g2Vt8pvx{wc0OcPwT8gV z1jw#CAPJ>HE_Se>l`7uccs3xa@{dHE9cj9q2q5;ShI|0h&gu}Kb(9{%a z?^*Ti(kf(1W*e_KV)MBh+K#=LqDz~D@t_3|y0*f~BjEa6QCrf^vjdnHYYY&t$&~`3p^${xHEgGae_PC6L6v*DchFuCLBFamgTa({VGEY_ z-608U9d4etYj>dG12+N&Dq^`3z~LOxV&h_&JCB#xsL?px962T0hOWZ;_EIXpxF6`; zspIlT8a zX(YHv?i7I{poS;@9>18RQKsu=Q$|;i@X=9-OHoYJ@@Nn9Ub8MxJz9PO%{ykUesn;j zG0?9w{5dt8T6Ew)k}V&ujd)th0P1chhlmIbl8%=HN(4jopqyZ(Ev%}PhG67}*9WSQ zt8CH7(2BUVs!;fKeAg~SS0IVEHNqagSgKMbDg9f3C!;NuUdyL`yu^Mw<8$;d&dNYc1@*kWCscJAJ)Ao z`I8KGK_3@?_vW38jJ6g5?>^`<%?;2voK?O_}vG16i7zxqST&qig8I`(yd;#Z$d6IJeVU~dWaB}an*iNQMJcba3 zPqG>vO2IBKbzS)L)8TnE;>8H%j89-UUs(CTF1vDvEjP|m>GKVs%?)JWh3Fyrp*}UX zs0NUb35%>8uOE~QL0?73FSs}%MRSD1=F59nk&t1Pqo%-$NNF_fCi2^GCe!AJ<-wOG zW*5My7t_|+E1-xKA$@aA;sS~a^uQ!z!Xx%<@#D!JfJQ1JEs{I`0fXtU;cu>3@@g+e zDy{myk#EA}l*ByeTbqa0o;cE@8eLobV5SZgDhqGNHAIxRj;6l_Z8&7HA)@V9Vg?dgd{^Z<0^Ar&JdI z3l&Qhp7XqUu?hS!SF8)MObY>sbLygy>0kDpRlpvx2(){{H4mrDY>jpi5Ar>f#CoEJ zJdiNyj9#zdahCAc!u?GuQ2vc!f?k7MEbqY9kKN{Uo({YVqq zkWRst&3`HRn}vzQfQMF$EoPuKrt+L?kHWk!gF~G=N9AQ(bnqO*i@MX=3BJe*40xZ5}6pRgwq5)^65aI0ul2p ze>Y+f$_R$>Ca~ytm_{Vl<#wtgEyYDy@S%gf?AX**b351> zD3@&yUIR#1<@3(;Jafhry;|(nSLPA80x+5Nm-!<{M_Y`l8l9#+Mn3gUcYbz*C0Zw_|Xko^G>*k^?Gvp zAM^CCRz5RJmB^Lfv`NCd8_HYuT&u%U=wyGCKtE`j!C!Yg0v(zNA{nb_{_CzDr+Hxh z%W>^rkq>i!t;;tof}B`2gxfEJ^>EU&Fcz%0yUGs8M~*8rzFPOD}cMU`5{R4@7F`Yn4NibRt>^ zVffp*`3z;cahpV-gcsZnCLzI3oy6Jkk4O|?)g2-!b%@as{Srki_(HT&y2tiSZ*JOv zMU5l8RrPVZf8*Qz`kYARJ#HGq^Fa`(j&hKPw5P{CFWzF92;2-I*CN`S>Zt~l%i81F zjc<$t@1UOGCUeA!Me#VlQ|nBtFEo%QL!iVCR(lb7_he?-mWWfArhdv#){SuwDvyME=Ju00#J;qq_Fn$d-sIzY zWyk?H`5sX=^TBUIuQ=-#HJT~GO(gG)Up5hM5u!5H&a=j5qJ@gI#UQx+mWoHbZ@@&V zp0f$6cP-ofx9)OslFZ_+`oewL53-~e4}IGJ7~UM&CGMH3um@z$uMUpzaQ~Xw4KjF> z5UqnfAj`4!dSne=JXPkd%ui!iGel2-Vn{Fx1cXE{ZMFEGiwkwWICvO)i&oRm~&^;Hb zW0z->W_~S7*+x^je5oDHw0L4X3>G6EBYtpjq_M3i)DUC}q_eh;A8X8&o(mS%O6_&0PjF$iHK!Wy>VGzR7aV3>HWclmSW|Gpq8xDyN`%~s}i7_dC~InLT?%20Ia3kBSG zb(IRuz6P^NC2k;Geo{$Na>*E@8#KT|QA^M`^6*$ki6M+x2gpTM)v$N;lZMb34*$F? zndaj(ZqmY_qkLAU+OKTlq%P5El|2zI;LFfL+)Na66vZ&ux~i^t7(uri0j6yZ6LkB>;Q zP(6hDSMg$d;NoBmj@c9*n*oz-Un#VnG3ud#_Bl&B%>$SFP<_^tv4?&StpJFwI~DO8 z`G|=iyqcOF*FGfkvrYW1o$^CurJI-L-JVeUId4XeX25|(JrxGA7rRTOftxo{+hu-q zSry2V9t*MMIo|)u$?4)?U}7`Xnww4$HeRNdEZQNG-(Hcz7%YKv();JY_awJOb3|R=9E$wS+XTN3NRJjaQKV3HV;_S|BR&NncP*d95j#1A@>nY z0)pma^cJ$8Sc3WMhxG44A#3&m8TtMPk+}jL#nSdk)`WPi2%m-t5|8O%rus5jFz{(P zu;j2a#X6Jsa^vhT*Vo<@w3P1+mjI-E-D)A~^KfURY2Tg{sVVpBP{0Cr?VceH$5~&{ zc5~^(P>Y-&6i8(56Y_miYWHrQ=&ZYP))#h*R^5${B)=UD6(q_Z;!jWuWijJi&W-F` zV~zlDe~6%kHvL)hlX%Q1PuUeRa*teoDj>z16`_eQuX)|UE zE3(H#$y>Ur?aYf2r-WoE^Bh`WyJ>knjRhz0J67&W2CPclgRWy;8w@M;i87}qL6EG% z1@GOO6G8H=B=G=G#Y;8s)!LqEWP;G8CD3WQbo`{{WdYD@T?V+_&1KB)6GDYC0)v%;!86S>9Vj@#EWTkweEZt4vK|$m&;Iz$p_xon^>Jy?CCn%F6|p^w2>ZOorx_;&^uPf~AGrNI#h2#m0| zE*)eDbh8&}7Qr>t5HkvHmgK`NH$8nW$2K!rDfwj#L^T-I{ zedYHhl534)gY&9=u^*Lb#^J{=iOQ+pLf26YP6p_jJ;uOE?XxbSY=o;)4c5DHYri4* zQn0SSJG{=g3$khb11Oh0LQVewb+)Kpm1-$)$^IQBk#yDrzr3@p!3%Ek`f^Hl+r?sh zEeswGWn_}k`pNJB%Opza@&MW z?jH$qOO_@&xuVxp5I5dJ#dROU%s?!YO~+hZqqZg<$$0WlgcetH^^Zp@(JWr}9OLhE z5R2>&@b7tsPyNH}srdvcp@_*Ak!7rAgWa2naw`cax{as0D37d^KQ-c z|6@V|sR$PGl$udKK4hSBPK))5!30)k+cez?ZDw88DWm*43AE&>d)6AJ$SiEr! zl>#chJ}!Z;s<5&E}Q)g`{BmfVFtAEo!TUS#C8`}SQ6PK#aTMw^lua; zPwS-L`Nwf?ejB03woIofB9duC(c_t8^=*n$B49>;m*;1!hKWVvh}36p?d{Kg(4j3n zEiJf6h$4PK;vo|!gmfm@_E6OVLKkFXRb z{{2n+@()F4>xx@?6IORJZy*e{;`rdoo0uvAOSNud|~9F8U3)+YdYP{$N4bxg5AUb*D9N_Naza zq?|z@UNXyS=AX*86eEh<>VWxQmBcr1PP(?qBNk+Q$4#5jvGsSv&)IQ{uUsKpE@ot3 zYf_}W;2i+ZxqG-3476K_BE}Lx3Ej2Yj}8PjCsCDQtULSDrr943YNtKqA%3aN!fcv? zrA~qSB1SbC{LXIiI0}ZDw%ZKx+yP2r{K*o*Hk~7}M#iab zdX|_fUKX??4xgr_>dqH_jB6FW$j=J{0AE&M8jP4I#=&UO<5A^xwyq)l z!l|vRl(t)3y=u6D>XOea?Dnz)e@U$2Q39$39ZqNq>bVkD`3eDn`==9SuZuH^=)PcJ zOA)4OnEiOJv3rd3L(n@|W^rxNRghvN_xBh@SZto_d*z-z+WU?R7Q0A5QLj}x8)M8y zg>#A35mE5OEMx`s>u@8;HR3`gQWM^qn#`N%?`#=jn}KEwd5=*l3kdR@6jUkP#R4ax z{^zGRqF1A)w-rp6*$7Q$;&ls6r2*Tl2y40GBN58cLa`SuOhk~n+TXC7xYk@;)U6J& z+ayp|Z^JcBC)W4cAnYsPSte|_8jH)I@^;&<#{oS`N5)^8nn+D$Sumu($8IebyV>IZ zj+21F-p7oNGN8H%)Id=0-S8@p0*E!SHVNQkV*(f=)BivkgbW5CMQ52< zN*;Z?B=U)&?O9kC3EEdkj0C2`t~W&+8)k!_Yk+Bd;`AAXQyAIF#1|q$j9=vwNje_y z5UOwjk80YV`ZFc+qNiCyoAc#iTN3}+n(21?;9d5$gjHFz!0h!xL&Z@}vpf4s8A2+- zQMNw?GgEp&?(;2$3?<_)Zmk3Gv}SkGWW`!M6#D1GH+eiDxFdupzF?>uCJ}34F-1ua zOM4SaksN&D4}#P#BP0-92YVLGr=PDtJnpFUJ~6Z=7^v_ibnC5CL#gAC)a^DIo>`-& z%JrIqiptWxnLgtb&AZeQPfvxsxUXb;H!&TTpYij_ag9>g4iSV{)Zz$~uso$&2+15e zQ*UFPoK<{IlK8THmQucyi zy{2dm*PkUEKzPP+eh)L{8fBT}|4UCLkre2O)1S?acL?B+z&WMU9DmgA!~lDt4ps`s zyqIzptmvD2|9nqc@GjIg|G@8m8(I0TexM5Ua$tB7g#?0N7wVZJTX=?fnNDC_PxP5Y zSXXGGOrjo1Z6M7(EU>FAQPKAnGNc*+amcuq9jL7a!42ENjY$(`iS(lqQVC~Vevy{|owP2+XRz;}pxTG7GNwI7Mo3u0?Em+C+B zw0=cLyI4I2+SM+vn+ND29Yq5HMYF!_2Uj|aA<7~1u`&w-c5>EC+^nqO5Aj(am1b1T zS@=9eUo)PgOX&UpjG%)7Y=#t0#aDS10RAL7!|za+(QQO%Te}W`9DYkY7mg-u-f!)+ zB39-pZ6zYa!I@q&0nS1Zj+=Qxz zWeJ*&L_7x-;TdKoiQ156=RM)!ak0^d!h;O+vUS|jigD!xaha0?i8SX#lbUlc+_HDa zljUMS^dMp3SmUdcbxaoO1N~6-0l3e^j~Fi{_u9RWbnDp89gxGI2lFqJj;MATqdY>k z)D7KWzt`{?$%M+mt&V}x5Fg3j8SoBs+(B(y595cFe?%SawcB{P_5PH=V8tE8H zc1K`6q&YxiEX3}e(g0kW)9vu?Daf{x>ar|gl^9%vIPY$#PRs>W-55d#F$v zM6!Up6@{`oCv91$-03`PYBU;ju6kxmbnrq#koiiY(^LGzPbaN$$~j>W>mpe@rPT-W z5clK<-g>XwQx;*R=EFuKGTqmVDZWrW`RD++++UZjF=4wlEzs9%IJVl_Cltwt91XjlzV^PpIK6-dnA1yn*Bvai?ED|E3nY;4pG$N8LoPlTx>X8w_+Cti zwJa3yt*fK=BRqX_fx@QuNZ+=!=&epue-yPDNAcmXx9(K7b-zQ>*0wPY;}w|w&(ypt z-yf2|IKqY5cW$)ecI+)!56WfVBsy>; zSfYYjB9Du4f}d)WRKtqeWq9StOov6?0Fu&bxnaZ=5+Y$U1^J_el8C$nhb^1v`GK)# z;*h$eBB_;g*LYQ(+{MxEdn(qbY~B^t)GQxRLhP@Nvj!H(tA`0Zv0eNOD_L4Ba#ZX4j^&)U#g_J*e9qh zDFuxi@+pd0^~VWZnw+ra{%Umjs9DLA%t#cpG$h&0=ac@v+n*BMbAUrtYf27UrZ;AW zD5zdtr>!mwPjr%2NTxo;37i&4pisz`avw&w5g4O~_xYD2bQ5nO5-J^1kIyDi9zqYL zyIxL&r?zO*JN@6OS+yie807N=(M;8o5EZ|cUCHlHwNg=)AHEM+!i8JA8^a~^`ghc zR01TtwNKj!)o*G|tQMoVjt`$q5J}C+EHdRj%1?C;BEj1#<8}Ys>@Cs@5S?rk(5W!E zzZMp+TfD_z`Y(!1I7QqpQ%aW51v4rH&S5GxGh|HnjL@zH|DpLH_Y@n5h?qfRUWKO5 zkmPo);v(`E%BKx(l0w!~=Ck3OSkg6oP;o2xq{Octa1OrC@nst%o_?*bb&)SY=)W(2 zYOgj^-bG`|TOGSW`!*v=V&McrUGOfcUD)r!wBR54Wox~pwRMdOX05yAS%FovX;3J+ zWc1>-IUIkC@^*RP6-<633Dk^bUwB{2GBaT+oh$vlUVo)glGv>WZic8T;Vn_k$ON#G z)Cebd7>YEXvl<#=;c7O~H{EwrumAK^aUxpYYi6|;`rNz<4}e)Gm5TJyp)R1`0^3Bw z?}DPIDh+h8$b}%BhQ7eJ6FQJBKvRM~aaZv${-lX2UxIO+NJ+k%5A@xMS8lmPiQW}{ zS>ZEJtb^Yr0{_iN(K&`GIAj;IaE#EL`4d|evzIdK`&xw(4yPb*DAf##>02;!`v<9< zAY9@YL21JCI&9XV|7Vs~9zVmO;3z>R$Ubc2eC!YUXL17}MLRVJ>y0!M9`w14iw+5r zf`6*Uw(3H0^gc1#k!a3er%{lL*=m&NjI=GKo`#g#Dp(m{As!?ht{RINcr<0SRuFr! z<|l&dAT5JsD;@l%%2&Od^_&NE(t+D#+LT74z=XQE1`+k{+y(WAcD!@_tzayeTSq2F zDFOi$qzNpci$iT_H5q(kQXwJ#^xZ(b9$8i!WaNT`877ZO*wA5?JXFzwp+m$IaRN75 zR*p}fOp-#HMa=0m6j23A75om?MYa$pd`53pp>u*qBx#eHoS{1RqZ{JL`YECC>Jx@P zCZb74Bn$IjN@i1?0-g*dmZ`oEFl={q`Gfo7V^DK}Lv;K?&~ZmyT;ksH78@el!(i%B zj6$ScnED$~x5R~Tk_zJ3J^nIuf7E`B7brdmlct)Okh<`m@Pw~b5v&-M;VQkv7kuv=AJabTG-7WL2Bh=o=zmg;?Xa_sU3ExaF2RX<<*k+h??YR> zQPbzySyB!*9~t^!*!K9Nc)Z?2ll!7eo7QSiqwRgeV z($vk~00n+~3S+#&bO?5B6K{8S}0 z58;FX1&lcLnGW9dhJhrJMH>!=^H$-I$zOm1nqGrg_hJ^t<1MTvg|84*KrnYN*W_5Q zEsn5IJpQuPbD2`A~0Y-DAp3rTNr3iqvRAH*pR(EeL6?T@fzhT$;=XQ||h7G0Z%;Q+Q@)0jw{*t4~V>T*)_X z5Cu}DC~N`~Ey7J;3WLcpCSTe#!=z@E^_9(gnUQ~ZTbm$DzsO_mZAO!Z0fS;E(me|A z3%+6`m1w_%TmJ5+x=e*1I!I{<0;iG2MVf_Epvb&Y{h&g{rC&|YdFKg*A4!a1;D)v6 z#X1kkyvivyB_4L6`^?xFnrZ<#xJ~A_xvJY~r}wI`k<`>wB?5gU@3d>M|p5w7wM+2e1gK_*&3@5dO$d z`BlW6K0*ypf|S=YTfF(oGbmm@viL5#E66O`?uzWpscD}!#nGw}K30kE7gYGns7sZ3 z?GbdDJh%JHjL0nl%xVri^TY6(g}3xW9T^?sWkM1J$rfscTOjx>Jf zbdK*?9M=%tCX4g91TsSY#SV=#V0>u4O@ib?*GUzL77mAP7_fXCZ}THX4FIy`7j1af z9^4(dL;<<{A&Ey-gv`BZF~I>m6IH)`j^}7}s{LMQ{*@`L9wlc1^_955ZlN2?4?LU9 zx&1?H)IZ*9Fi(!+bf!R4hskmvc_ANF{due`>tUkNg~R+6S@^o$;q`cI)bT7DE}Ao% zSn@R#wr3dqNWJ1PHNxz%8!$-wI<`_Q#*Lo=zyzssI*5iV1@~rQQk8EiM2>){Pz+>LPi*SnbTkA1ru^Net~XfwjZfq+>NJn<1{>Yvd#h21cp!0 zCGia1n9U>5nM%XI!fak*YnE@I-XbK3`j`jjL-c9!UXzOAQ1-cRc`kJNbvb%uepnuq z@djkkUzLu|`%hdaJh_ssYs!^PQz}A`Ny4_SWDCMqyGTx`E?Cu7*gX$s?c6@_a+RLQ+#d*IZo?s!=jY7yGfj|j{$-b#LOVmADdHG7}V?3O}6(MR(5tHRu~y?G{) z(&oj}Jc!=w^-|wQoPN^an7UGjLAk2d0*~6hVy!1UFJFy)frSYID-}?}iJ*8FE{_F` z>efd*<%FFH3QzQ^Bmc|qzQ=)buQG0Fei(N%?KZTh4fqO z$%xq$yNamm9{tRG(wdLmVQzg->#$!)8%7|6$j=%qZPiQt{DF2;Kz`{H6#nFyHTQI6 zF+1^IYUEq>%i*$`6G_8opsIZL(mjVBu&7VQVF||p!_(mG7&r0TP!c8oFWnr{-m8|*9Fsgei?n#7Tp2#MAQLAHe?Hfpf-1P95eTXC>ceyo723VgX zkDSs>*2TY#wyzsLaw&=dTZ>8*!)#5RWOg>#^ut4Z<=DPHm%vB?c#{%%|K;GY%+i7b zZfYSp+q$YcDN?q|3-46MqppkS1Kh;r_7jl1)|cgmiv7Tj4$B zRUG388>lVHa5NC-5HIC-kDI6GLalNOdVL5aaWBUb86bAEv;3^gyls zrK}y9hj<#KDg{Fpj3bIdr_axuD+|f{fAECYIDTM!G`AAC-eAwpv}iXr6UJASTa-(x zM+$MJo*&i@bEvw(U${S9O#=$zHbaar7G0$|p5OY}o&W;4XHH%%OBWzaVAjarGn z%O8@w332*}VpPCWP+**H`OeC<;TQ5*2bn#`g52m^^ulm_?KX7hZhzX(H9q6!3>Rt~A$9MozFWrSDW6V8oBFXQju2Siv6qY~L02OP<#uXKd zwY0P4*M|m2QZh_b^{-B-UGA+FIOn7>D0d!4`JBUc5fH+2`eo zn6}K6pvwrFGG2@OC(=gj$3VUfxPPK@RVnYzos%ybQxdfLXZ8;34@%zOJw#}k#4*bX z+TFq~IKLUw9JMqZoC3o5SXzmTqij=YJg^nu3NvLPS`<*fB9RlCRiwr{wS1c#2u^*W{dfA5zg*COE!?X2XM?#S&%qKgp-&G=F|Y zC*w=D9Kr7v^T_(_MK#|!gf**!KYVN>cT+U1B>Ri~-Za7Au(O8d525<5mAxPvKQP?( zUm1{2tjZ4HRrv#dGOx)4x{{2vC#)Km0cM>cIA!O#VUZuhu^g^rpOX_}Tf4?6i8=6B zh!I+QbP7$j6HJLG6W7|ZpYuSAHkP%Z_O?6n&=a6CizEGkYM!U3eHh2?Cv{eXQKMqf7MxJi2$?C^eRYa?*<&#*ap#tBnX%%SmiK2 zl-icYFcc!`@86jUTaEl5SlWG7M9bDV%7s3?R1PiNkSo1vwdhb>p==lJ*`fTCKmt#kVGPOuJfayFlYMQ40 zjmWYsK^KUOcWU4S_3G8PK`Cdxp_ad1dQAdI)Y>-o>RPO?|dmjoIv2KXKJOf^K~Ms0tO=C)X_#e`arw#*A*r5!ny)~d{}hj-OE}L z2ilzh?gMmEuy_CzV2Fed@tHB~6kN*mct3P5&va?&N*Br}G7Kv@5Y6 zLFtzkhI53vnDoR~tz{aumeajLJ7iytSSH>XGi;Tqnt4NAHDCbb>qGTJg*J5i}y z1?_0#ijL(VM&tzXdwMx>YID!~`z`AS0GJKrx-kO@xDFz_dz69-emD%iEwb*%3gW76 zVB#aju6U*k{B-!VrZ2T0BrMlP8%#BmoBV+wvnE#k5uH-i`{x{fIV#@r)Vy5el&junEsDpp`wK=&gX9(C2z_bk`x5-HTlgPe4~46l65st=z^cX zU5eoP?Y{RGn0nm3lZ;!-!_wXg!g@`GX{!dTVST^6{0KWB=MLgKko16Y`;~K{pYsm0 zych}zd5nga9F`s#A$^LK^@e~Z*VG;2vyr*2PX%60l_`};*3ax7r=g09*@W>_$++pnBwHwjW7(Gz!iMP7& z61b44GOO+EDPR{XJC^)SKASs1ciYYBsYI?%{2=7$GsLH8T3LF{N&r z3#@nXu!IlB(ajt=W00ef-ZuDYjNrQ4d9XU5K#A_tMj)IaTY!2c3v0LkR_u2?PHq_? z{aInDe~t<)SfrI=E+tx*+ZzSgsB4ayG5ofnXrh#c(jWm}`v)e<0JVv}qq>}x523Sz zt)iJ_rCEPL{mQMd7!t@1N2>tbg+}-5RlbH^8m0QPbGa29Z#W^_Ef0N)%hZOlvcaQTB&3*HzWL`-Md1pD z3d#_W2*6^6QL1-z;5)f1o7)4vt^|JMvYn+0EByKz3>gh?6EQ*#Frv-eoI3w$yL0+7Mq^NEQ3>##JZ|}Ha{enNzUtF6tuE|h4=-wGcdWec zy-gP`VLx#X6CssZ-&=Ho-GNy@=SN~Kx^7_se)fjOQ81@67Y-+v#ApuFw)Lj3@*(9` zvBHL@cz(!3_Avv6oqY>2F#m7BeV?qz5jQP$eu}UX(IJ(sDwPx{CDELMg_nAtE7qr* zU0TPB^)_``m`@kg|;6*c=`Cq5VtZ6i7+Rk>0iol{oVFc5T;$<$A zu3=IU)I`;TTR7xDj6!!js5_Z)_moI`X7wMz;&wTEEBW3P%GP+Od*d3cOuAyh>5t97 z;clr?Y&kcUkRq+rUq3kL%*8378E?OYge_6(n@FAA5yr}P(VWcx7td4eML;)Lm*5jt zPNQ7STkRl-6In4Q7?scypg|#KGsby?eDSXCvVmEzM=kYN_(@)-zFFkyG&(|VR~EJPyeDu8cf7? zj+SVw(K!lp8+M51eB-41bSo>&Q-iXbHc|o&j151`a>}SlVguJX3{lxo6U6${sVPkbDjv67&aX0~pP1EC2>>f=OKez* zs^gN-o_K)2-9}lHq)-oBc8@i#k`+~ z=ZK6f8eLSxz$QlQ@T(y6m@_v8y%+i8hZ zZ)Mf?X6zF^Z+~48*l{An%^A^ok{pLCXruXgit-~ok3v4H-~xdwXNSidD=+FE_|S^#`(FVQx6>Cw11O87 zs}#>f{ik#Lsr9!cvmIgCI3jn_YujnJWp}!aW6o`5Zs!GHMvx z*MJpCsVu{Dgk@f@Rebq~IKOkh+8!E&^uB-<1H=lL{jG4JKU-=u1C!XeY3-InQ5E#Z zjZck*mo|OkmF(624m{EzqcW#$-!eclCAx?K-y`vc-K(FQAj5?o|hNG9X z0DO$+3@fn$I2&x}qVZrux6yj^@s?wR*^Dtbw?6K{940LdaQalN;v?B|*|6idnTRHr zY{^F4^G<^~7LO@gC0NoAii<;8!c;{%_HEG4xF6ZNt(wK&tx`EkdEcAkG61?*KLvPl z-@_EcL^`(ubd&v1FirBwn+43RywU0^qW8Ab?ZAO`dC3(R+-;gh$X%PU)*yK#iX6%n zyy+KAXL^ziFnh7Q{?)ND#AF0mb)Wt`Hy)5X#BMl>ZlJcPG)J=TM3#}(Ni=iSe%-W8 zFW79sw8@R7G`(DGp~gJ<0G$@6QdsoPv1CI*14Nx#e4*_89y;PcOY?V{68brrYR&;MR# zv&|aa4sU{LcT~TFl>*J|URl^Fb|DU%Z&2+qlVAz6gz>GfXm zPvpGA;Z+|1Pp;P=b@lr1Sp(7pS;pk715pLZH@-)v`V>E0=GOoC((PyrBt_cm1D#$y z(K{!>kc}p=g(0>=?}y|vQ8fOyqy?AWe~to0QU9|xtFF6>D;pwct*uIT+_ZR-2;?8L zEXM=uEbLTRq?^RuXY6^ONZ!1Zg^?OIBgxAgR zSYLc^U(izlOvhrIy@Vl@5e>{7-719e42#Y^AMQqBvlo1l^;_cdld=9#W-oD936*E9=9byH%%veqkHoNycH9`FcHOF*&t~b1KDTo&=u~RMM=YWL zj6MM>HshZFNaNXRvIf;^S_?fO0V4ta>DEe?orKyI!E%zVHifaHgM?B=-V1*Y>Fk40 zB0Htsqe^NCM&2pf!b@ZnB16t-;heE=@yHQCQ}Sh-TFUIY@#BAnW!h3t5quVD3I`8gY{eRFfGfF3 z(OkUyb~4R6zlQEL=EO&ij5OR7wBbi;*JN*Lc5>qkF_y~X7h-Hep(vpbEztQ81!3V4 zTHe|l7*68tR;S@V@GJYr4uP*qJ{<`%Czk8wNf+*FP|jj1f17`Zy1diD0~KKtQ<=0) z_V+5JAMCJw@{`wh$gA?{j1^dx?3zD9sf+&Cd760#Sli{jeo-gtorl%!j~ldmI&tNv ze*H1M&-U*ua1#uUGQ%j9Dqj$@Ae~a)Fxkg}?2v_*r%?Fz8-Y5^GO$q&=O{LRomI)` zBbGPmj)~}xT@x0=I$Q^}tRttg^mnpH6BrtJmB+}D|3hZ9j>pCx?m@p%cke zWE8m*V@cHEe7hhJDo>z_;milejB{a6xE-gpUvw>58agmm ztpra4kEcplByGdj7!3X3*5cO2dt=`CQu&=E6teqaYb0R-5PEu0p}4jH-s7s71}Ak_ z`7Gq2{!s?AuHeLQBs~$1*4JG7xZX({=b?$~D>SX8w0Pv?XOY#|e3*C-kkUB$+B*C8 z@IJ3bFCW~;qND-bdcph&mC+Av__UIUuux7pZASovf% zHkF;Ab?oploYIpjYubNmDyx83v34obv{ijiMo^3VJZ~qhbjKpmo*0_pivja`$y%6o zU`*6Z-gXHKJe0kzn>9}E8Rw<1niESE%9xdkiPG6* zfVQd|==KntI%+j)n@Bl%2wPfx>+0vG?lFS&CeKan!4z95xpm2sQ7>$$IqR}Xbb@kAgsQa8!#RzxQ?#e&4|xApjl$k@j)U^C6UlmH~@A=52> z2h%!AZ3jvUnGhE8L7qB92rXnRPCV3}AAIcj8{2J$!pQm2D1kKE(~vP{ChWeSZWImmS=s$gs5Are ziftMdB3dl+t;5gug-S=lEyC$Lqr^Z=NG&X@1@C6|651{Nq#Jm%t`A zPKvn5BCYj075}c(lsQWFT>Owm$Ye7lMZFaORdICIzm9yau%3zdW3EYfNbSs}`0rQp zDs43MB<1E+)P^dJZR@nDYUT<~7r&o@%`vDkF@ji6^75|li#US=wOp&$Xk})X`T651 z_+CM8a90}qlyTDAICAP9 z;5k-3CR?Lduo8fSciQfoY~v}~#^kW&ko#jtEWMmTk+dxvk$+nWP*7+^)c1{3SkW3M z!qCc`I%JW}!C!;fm1wgzFFtplXgztx%DUX;A(K-+(Zckp?J13oWxoRC_0PYx+k3luK>lLBx-2A4%JKRUpSYpp+lNVo z^fa}M%CaTk6T17-#$$fK^&5FZ3hE;IG?ebQIPbvzU@^nX!TZ1}ClK#H*&%8pLWwA$$&C(hSDxMn~;O#87*aL=s)! z7M%2Vy@FZ6gJt3R@ZuUrIIXX`p<@uY1|1J8jx=;U(`ghu?i+KF8B2)xx}}ds(2Kg6 z9FTy@cd|s1h!!0~9yApt=}VZ(r2Ev7;e~hc$;{&ycdfh$EE5h0qYu{!&-oW2X{tm; zba6%a?;b(Fhp%qKLFPOYrTCacEaYU{R37(nZT5u{U`B@r(;S|YJ_q1YZePE5EC-BO zTZz&IU30+l)KsI_x^>zEZ~ z)cIfFUqj(rkrI##8X4v=u4)XVVj=^w#Rwr1;h0mSlLu50S|zVcj}r_cz+O=dtU_^Ec6EfM>X|Xi44lbz|1+vK?B(wW zeJ8Mn4n}DZQx79a3#9{90Y zT1WB-eKbbcDE_ZK0z(iT@1{TT4C?5D}@pq)+@T^HFORMnGE0B<`?P&2k5dCT!ZJI=jG{F z3X?c)se0dQK$EYP0EuqjzK4$NkTlBZ8lz3qQaa617%k`eRAtu6w=UVB=U=g-8b`4K zgXa_&GO@2snK1WY58607i3`g;j-h!7rC>vpMunC!$-S_5xlrzBUR_JbsDprGbk<*e zk)VvMEjCT#f6rn(|UA^F>0c?7f28Q3cD_L0K_}k%Pbf5svu> zvu@7hG3m*v)mK$&f{#HQn=e2LPMI0g@MGm}eZh4<#8WxYBPv#o4_h5Aw1a_<_0tTiZ=fBAlBYta_X7a+@k0=`hHeQ*z|Mp8eQ2Ek=Gyp z|EBP*0WhSq?tS#9-gQI1{Iv+o(f(^zFa3G_dh{Z-B$DmcRyjG2+=587kNP9*k947N*Er7QpVrbABOTs<&l&;#V*}2=W(mCt9#bBx^FD>quD}; z_##O@-3t+{J=ix1q%l80;~phreo6 zxp@jtbD>i!z*6J=nQmQklsu}W?xwO2gr34wuwVEdcZ?43vMcI3>Km(lXOur|N_b3& z5`m99y9Eh)ZPh+O#KzT4paNNwTwK(|@yW<0E!Aa57(RK(;3MqW1b5@+r3dUGb$3H} zSKQ5A>84%s;fSP=n$x3##0p7+B}VtIdSJ$B_Ew8IyUnZ)*FI2?2l{iZ&{?@7YaZFv zVPSaYk1C+Ems@io+u3E5OW{DD2~z3lQS&_L;wNvb57qKxJ;T?7wq>n_HGTk_ZyOCo zrKydHc=f@VeL9Iw_wu`?FW2kEwl1xQ!-V+Kd#-HYN8+4o}0!W^T5QPJ2V=Q<3(|Cqo$%on5+geHCnx>-*O6@XyAF>h14 z+puI?3B$#uDBHqr(^)XDF{!4gqOXx-4NLChYDtz3<@JHRw5`htvAmrKxmvo_mBuT< zy(s)*>J^UpcZKb&T(s{*$~;mF`E^GSwqjl`iqJxJEx)NMO*d(Ri1I|t)17@$U0Ug9zeP|9m6hpx=_NLI#Aa37ixvJknPr29<_jR(hAAUPQ|M ztN#j^`2)p(dZn^)7i~|jvnQ0mc!{m~MRq23DJQc$w2Wh0Y177Sj(#(Tg>2`>lUy51 z7(nr-NtaSjUp*LZTuLbQXh@{8JnfOzCDTpFe687dhEx*x1YMZH-4;*&SHe25^qC+{ zks6uAVPQfrTp!ZnI{+|hM#@wnd2<|&{uMw?<=Bm1-oUfu00WW8nvj1=R${Tru(vMHO*l8)rsIFCFQ*LxILV7cB&sP* z0{Q_B@;C^jmTcJZI~?V&<+!6S9}WpcIDz1W$DabUY2GzK?0fAS7K~z|G41vz-ZgZj zD#@{-{iGA$20vRuz74Osk-Hhk?O>ZmXv#^m2+bqNJuwb?VD*ydd(ngnS-9@0=TWL6 zJ7v*c#k~7EMZ1>cHAhcPS=kZMx*c91+r8xEi6F~pF{~T@q>ulZXQKBZW<1m6mA5tH zb-iRfDPP_HSNAFHXdc>}_<8V^s{i;nyX>G&*@S^3+J=v4f{Ikr4ob|(C?FfrIlk;` zzlV7n#F|RsMU$A_Oa9Ii5xyLLX0O%ybWZ~gyKL$KXCv@IezU4fb^@V3$=~&Bpp_S$ z&Z%Au@RK?mO3c7fONb+EKo9Ue0d)0*IX5QJLrIKt*0lBk;p;!@?`(Umn~+8vyUkk$(fSY{pmVm2om=B@ zVwmFEw5MqN?GY}p(l+;n%^vG|W(jOMM>&`Nv&5=uJ+Dazj$gsC9R`BhpC3_l64r!` zFe{Qi&2T)LA8t#oVhOgjm}Rd{HB1kqLuY{%z+{Gx`Enbc**g~!x=ZfZ5( z;t(Cap`3w`>-`nuhpq@Uk?N#u!M8(o!a?|Bug$1s#b4~eh>tifT>RZi-s)zF^idBL zIME}vv|mT?oo{#T!(NqvF0|m?4eCRDBE+j3i4N+CGy=F`Ag_+@tlO`D14GUy$*j*l zdMbg+Z}ulGt~<4Dg-hIs=cGVDgJPS#o6t+Muq!m{eNfAuTTkVPp`-InH78N{AP6?sIp?^eM^KR$$jF;jwkW$1%JW>>gWGbirG9bwIIoct-t7bN}Q7 z>~wRSOpCpB_JB@`x)(W=n`ENUZaP8VKTQ5So?hFl46zLtSh2|E(3`Z#rI?yR;#PG$ zcYvmr(@|kbEs>>CcxS>^`ROTUECRZgNLx`rx0hDR#zrIU+A!}=#q_IoNwm@uiZ zsDNY8vP*DTslHq}H@N!wJ(>ll^B6v$4HNUaG>z;e6IECx<63km$wOKHb$G^sT6im* z024F}0pY-lmd=)=RxaNWDp`cJ)8)u_hBmmPk(x<}*Ipgu{W6OB~ zw8>RG)A(c~y7}C@el{8tM_{AnFK(0hg|xfRyHNpK2!@t)a_S_Fv{2mK!2h!4VC~g4 zc|a@-FB*K_EQZ?K<*~6!Tz$2myT|qsL%SySO!0?gn?vbr z=lg}pCYCL<`<6sV6g(>L5B04*@CsXm>MF z-E15=x)yin|Jk{%Gyb~o#yM4+56a2|*=8Vi$QV;8vh|~5dMS^)OSBN$)$`-5um-w8 z-J!nwVT6dl9iuyr=+nasN-Rm~IFY|;C7eumsXPtIa0AcjNhaB4n;f(edjW4*;B3Q| zxsV0$I)Zo(T~5hkk@1j7lQa+nzFA!`+el$jc(QT*x5L?L-i3>TLqmeW^4)_^g+bTV zv(btTThg|6Fw4LV28(so{dg2B3+$tmTtWtBI`Qt=VxeKT3rZ`+fY<^I0owa)Qh&4Y zveKmB8xft42YpzYB>cPF*K-00KabW*Ui&Iovmc&U-cJO4;acQL?V8xlkBI`5B8?k5(AP{fa4yylKumCztCi6m`~b78~mfd z{U1DoJXuCQHf3n*^B+!mTix~shDFcwk-Q zDGcierU%F8SAFWB6GWx|k<Om))BLCdY&$rdOs!$*h@Nx97b_#17Y(@kmF}zFie%SG^y>a7%(%WKDX-?I%ziC_g zmTSYhquoDg(W-2^N_KJz6`t8nO*pW~%Ro2!xkiUr>XNfF5nY2N2M z6Du}Cr);Z2E?6MCH6yCY+H37Df>>bdY1x3QiiV=B8J6V)mox;M8MmNf*Wkt6Z1+WV z07w5Bx~pvQIMv5S!cKt|q4keOjM_)92!}~*FQs_bH$a*e*w+_nRY+`$S99nV#JL(c z@xps`!}lWSnI!z=V+>5}dvfHUsq>SRREE^AFah9qoS_CfJuf*i}O5?_+r*2oBNaKuT7qhrbsd+Cnw5vRD&6W8w1(}>K$tK#P7L~H_lsBR8L2-mzbF*WN3>EP zm^hY?z?dysFBqR+WR0Nat=$-Y&idpqDO-f#ekz899}Ye6pqn)+rQ{H?s z4uM+z%3tQM7X~7?f%ADXFf>2^Kww}Wn0@vUI{FBpAhvYJAh$wQ8Jf% zce>PEAESqctQX4Rdozso2uv`;daC(i%q!k�`C+45EwZH=j>XwFss$>Q*$n52rRXOAa+q`>rb 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 z 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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505010003-Config.rsc b/MikroMaster/20260505/20260505010003-Config.rsc new file mode 100644 index 0000000..d8821e3 --- /dev/null +++ b/MikroMaster/20260505/20260505010003-Config.rsc @@ -0,0 +1,4501 @@ +# 2026-05-05 01:00:06 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /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#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_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\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\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#/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=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\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 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 :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 } else={\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 (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\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 :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 \"\";\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 {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\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/612/a9497a83\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 00:40:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\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 [ :tobol \$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 3 4] . [:pick \$dd 1 2] . [:pick \$HH 1\ + \_2] . [:pick \$mm 4 5] . [:pick \$ss 7 8]);\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# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\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-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" 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# :log error (\$RunName . \" 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=3\ + 2768 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## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\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={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\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, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ + on-event="/system/script { run AM-RKN-dnsLookup; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260505/20260505010003-Diff-Config.rsc b/MikroMaster/history/20260505/20260505010003-Diff-Config.rsc new file mode 100644 index 0000000..42ed6bc --- /dev/null +++ b/MikroMaster/history/20260505/20260505010003-Diff-Config.rsc @@ -0,0 +1,38 @@ +937c937 +< \n:global CommitId \"main/612/a9497a83\";\r\ +--- +> \n:global CommitId \"main/611/a8abd15c\";\r\ +940c940 +< r: root, in 00:40:03 05.05.2026.\";\r\ +--- +> r: root, in 00:35:02 05.05.2026.\";\r\ +965a966 +> \n:global GlobalEnvRemove;\r\ +967d967 +< \n:global MicroDateTimeStamp;\r\ +1801d1800 +< \n :local Mikro [ :tobol \$1 ]\r\ +1820,1828c1819 +< \n :local Return;\r\ +< \n :if (\$mikro = True) do={\r\ +< \n :set Return ([:pick \$yyyy 3 4] . [:pick \$dd 1 2] . [:pick \$HH 1\ +< \_2] . [:pick \$mm 4 5] . [:pick \$ss 7 8]);\r\ +< \n } else={\r\ +< \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ +< \r\ +< \n }\r\ +< \n :return \$Return;\r\ +--- +> \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ +4167d4157 +< add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4169c4159 +< add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +--- +> add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4170a4161 +> add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +4179d4169 +< add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +4180a4171 +> add address=104.21.71.238 comment=crimerussia.com list=FuckRKN -- 2.52.0