From 05856faf333662c87b3920aabfd83d801cc7f894 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 17 Sep 2026 20:40:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 17 20:40:07. --- .../20260917/20260917204001-Binary.backup | Bin 0 -> 243760 bytes .../20260917/20260917204001-Config.rsc | 4352 +++++++++++++++++ .../20260917/20260917204001-Diff-Config.rsc | 6 + 3 files changed, 4358 insertions(+) create mode 100644 MikroMaster/20260917/20260917204001-Binary.backup create mode 100644 MikroMaster/20260917/20260917204001-Config.rsc create mode 100644 MikroMaster/history/20260917/20260917204001-Diff-Config.rsc diff --git a/MikroMaster/20260917/20260917204001-Binary.backup b/MikroMaster/20260917/20260917204001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..98168489942f90fdc92af0480503f26bf19967f6 GIT binary patch literal 243760 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

oiWmF=4ei1T3#1bM&KD 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 yyYKV^2Wq;ZAC6eI>3kZ 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�$(`9C+wB)rc;JPgSunUMsmb@o($a`n0eRx7`1!8h>IO^%wk*?_>odF;L7R zIi;@&Zh1SDp|BK)VsfFsVH3J|UnD3vyF8%CN4t8m8K#wrzco|O-873|x%0^s0oYg|tU=xKPSK zHLp$_?ng|vJBynz?V{LQ_b!?x5`lqM_#pdPF=h7)?I>}#6Z-(H&=D9#35;r#1tzq* zR{VZAbHYOw4Cm&yg)n@#)jxu*0e3wHA$eQVa)O2&c0lZ;mnwXYyLDHtHoe`S0jQ&QdyT0g@pbvmiTPG*Pc?OU4Y#N(I! z4+(1E0-klsHFRkzu>JXDJ%iv)EPsR`O6(!S{vkd~@2f+QBIQ&8|VyT#ufgfBF@=Wdqsa zU|?NtO<-p`O!!~<$mu(vj_1Gha z_v%x8b3;LSdgCX2pnRV#1{001UEOk~a|MLdi@b+~St59Bvm`p?G8Wli0uvp;-J%mlO4GACN||tg_gOIfb0vCf(wdqD9veJ{jeA z3t!btZfSYGg<(DBSSMFSNx?7Zs&WwfQivu$;;wwZUv~jd6zg0!?f^u`4r+K2M8Vmc z&7FV#zig71TuGVEj~jxKC<2tJ5JJEUKtNEN-<7ra&V&i-jl|&7?mE3%wiar(@0+fBy8{be_fwmXHN9fHO2@YU=o!x z0Mf!uEiPy9^l(iaCA0AAFCIut1g3~~su-M6$9n~tvPgF|mnhL7^tyg!%<;MTbOo9} z7T}WZX}+8tH|6Yez8nOPPjR+Of{$tG%ja55xt45@K$DWO{M0sG_?GxM{@26nj23h@K@r z|F{1sOa<+zgWp#>D&)*xhS8uf$;Njy#J#iDe_gP;sM*q_H`53NeWiWGFzR0|sqR=3_6*S>Aq13+LLSs;8Wl-U_kNFdH;V!u z$xJ?C^jS}&Xi$5k|CGWXZ4$Y_;D@*5n&CcZjhz5lW|;P()41EG>RJY#SG|>s8|Nfx zZE_<{H@;kQOwJQ!oU?g|v0cB#r-F;`i|8f%-KL4p9J=oDylUoJGR1)-bA1-MWLpz~+D83sVg%}hmYr_yGeG0OAriUtYn=&T`=ukl06F%3WvG zG!K_wm3Ch1^okH@S`4CkVX^5*bCYROch_%$aKuc%v*+q1HS*LGBOtaZl?y#C zaKe?@`oS3LlJjO{AdYj3ldX-9h5XU3+WI&1!b%VmBua^xPCxvM>4Sp zKrh${^&ip+b|kTTi@BE}s1LmDLPqFU_5sLIlB!c4a{O}KG0~!T`xpomVNO?(5tI<+ zdvD2i|K#0wDhT!0L4c+j>Y8f5Qc<${49H1ilBLB+n*wcLEKiURlwkBg80F*B?RPm! zIp9{{9uPTo4L754?}BTwyexa^Z!SUlCHBah80hz{_%WCTz_UO6+okstkTjr1$VH;( zTB%dKAFS1Z22i~33X4r~i+q*J5B;KZ&^;d+ni%Jv`V|hHx7Hz1M*-VO(#UVysB=QIGUl+LNXs|VdlGV+<=oO-s1PM+LP3- zY`d0daruSojNN$vF7t98M<-}`C$+&{i{6QL@e&dJcqZSl2do$J+A zXaOkYyWl^Dm<{{5Sg|=B8L2$VzzIS#<~M~M^f8L8pCuCjBwzYKjfB@Jhb(%He5!>{%TP#D6wN4;9io#72@wc_4))rVQ~f*HmsiCpUsatnnliE&?n19Z$8`} zWse0BQm)-ic~=3O2f5$wJagzN7?mHWP3e-=HS$sYtG@5wU)-&jY5o1R#gs9GMd|jV z;*x*!QdIUWKcq7Bgb3l6b3g|azcj<<+jd4S6`?Z~$26svpc1S(K9`xVu$MBD_dpfXn#Bk?6gAeqOeB`{3U*hz$xt;qK=L?cw_C_pC5IZZD_jWd!ptIP%_KV;+=!HcQ2_&uA@N)9E}a4r2K235{^1(A@ad zIZENvqzeH+F`iUX=;raE5lTAIP>{EbG`D_~q{#}v;|lJFssmpxSR1hWKPfjF6(@6s zT*B;9Qy0w7%NV$;yPxOYpLpfxTYFkR6C@dVn_IXYNv9kyLmUJ#s3KyvEG+vJwx=}=v#Nf1$WI;a0rRn!&OynVN+1Tta#81>R*g;Z7EGIPs6`zlnl>dKu zlh^6(*^z(z@wGFSQW`6lb`eIJHckGC*fVV0-CJ2?by={z*%32dO>^wQU{qF=kG62% za`fwY;kZ&<+tAdd$SossRpZJ$=YA|=>y@J>fK53(gWV!dihXq3sDj{j9q;xf3kcj0 zs?%Oc<>S$U`PBVNnT}4Y%z2zQM^jOSj5AjqLw)wBmIV#!C+?0_+$|b1moyBIsH^EO z<{ew+I>Le_a+besP9JB>__CKk^@fMT5!>D6@LsTtP?6C*% znMm@G!)~aUxzg?oOWWfp@fn_pi{J+3Qa z^nMd?1yo?CKF{eXM#=!@dA)C`=c1MBKs4(hCC|r)htN0=6xNuYTW%J7tNc8*ns~k( zQ>#TAd+XM(1;e05bIW;Qc3x%F`&-$V0PSj&vFIn**ybj((Azs8x}IvXA`8>8DipFu z#o(2msf+eCVY;|fY2o}3}Ge;Xziq;nX(w}tqRCIu6hw`54eWnVm zaaRsa8E53<$Nr~d?p(CGdIMCGD(`uL#ME>5Porw zy4JWa50y2=MPD9dK@(0k_b0_MM_HqLLf%ZCs$3q~0dRP+WQfrTYd9c@v`(WB_RRr*oVdpPlK|zT!>!o%_HH0>@znurfd`}lf$6!5q@Qzhj1^>IL|cGh zgaH{3NP$xUj8hhb5?b0E(yG#BFQ9v;Y#O4AS57ZxaZ;s@qz= zCLPa57^ls#7AI1x_d5L&V`FdfIu;i&8ZC;%7#$_fjryEK_t3s`4;Et*bmz>-f9w$? zWU?#Hl}KjhnUW@w@PgEti|U;@I9s#pko>at;CNdFITv$JHfT2=LMdOlaqU6*%t+Q) z@n#RbS?8!|)|FZ#_8eOPHwRq5Njk#w3E|eJpTaQVY&nrvZynPu3Rhh_Ot%eer$;Zs#L7CN68ZpV1A3z{deb!8}D3;%}x8DbkYmhU5- zW9^SH-X_e!$cDl~Smi1Uk;dgk2l%Nd=p!Nr?}0f4t#m}r1Dp8ywrVJw-VdI?v9H^) zEN2RjbPp)6&N3ZQs?^u*kVt`Xct1yKj^IOYJf{Yh53i`L1p+pRF^E#_sH|;PM@G}i z4)CD)HtTQD4Zq2w_ky7VSKwedyZp*~4tDVD;>Rdgf ztfP`QAz%F$gGaKgKzDSB$88u_iMu8`UYnhm>Fd#i%PL=`$s=g{kVG=*T@9%=oz%7} zw6v!2dz#^sep!Ve0Y?jC26uuq-9-R6IJpgC+M$|s_0ta|+^|lDga(9?L1Fpur|icI ztO=4Rf!X*Dh0(^q_cyM4;O@+D6EZQS)U@f%i*x1Lupx@5`AtBzAH8d=6}Fbq8Xy|0xzJAWxC>0X=Fr`G{%=#@BCGrpPCORg1wO;j zdZUkknS|l~ozfHfiw_sA%HkfHx6Ah6U4{pX9IUFVlPRI!2S%d->!K8V4eW3Agjx}u ziZ~c$YwTDdQ{kG_?JNX68tyFQ`Y4HKUo{V@ESM3*c zqCcbGaCXcFw*^kQuU*y_;3FYz$rR7hOX3k%kAGmBg3g=0>GX^(#Z=5(0VT zC}i`N?uu*$R1{=T0VqSi;E|GsiPQ?ldVT-e0^`6b*5eL+>t zhAqF~@|TLNyP%6|Q0gQf_l6~KNEKt_q}}u0^Aun!qKvRT8kB!voAbWdj9dK0*eEf0 zplwkB7fv}|)KWq1JcoMVe$5Ct>HL8X$|!{e!jq7jitcg}$2wYyuJmFmI{u53 zsntRQi|sxiKZuo^42+^C^J#VMM*$CjC}cb1EbB%2GuIfwv$PiGb@u6$5G(4Xa_ZFUffSrW4;vG&ZWjG#8}Gw7vzfCPa%hkonHuyS?D#$6U9iRQ5tMw z4cj1`TZ_?0K505>7d~>*K&ev6Xj>B5E!QDehcZmE4E~fm%$rZytdbs_Tgq9yYqHX`a@tuL znwz&EMS7(hB&qtdh#7vj_wRzM{C0!sP0^g0DK4u5xz<xt^P=e`^U;dA^k3~w!7L9^; z1n0_wil8NZ(brD)?j~9%9^R$*1E61cDcJW8pKV#_&#?^ZZ$!RWJV4E)j8K@xOYVjc zxe`bI*)2L?A8Hvp_$%mOm*Cc%`SeuaN$u?j$@@7pXt09fPHQ50v=S{w z-vyZ`x2sugzqx?jWYsP&L80Kgz_Y`?}dyMjmTX0e2g zo-iMPxzZs}&RxYecW%(n?-gC(aG}f&d*e}FUwJ*A1;o5xsm{c!r;oxTiv8O;(=h=c zBUK?@cuC+%*@UBt=8?}SOwP~@(W#}~TCOavez|xAB?(ws%hW;0Qi(XrSRk7o@PP;P zmDoj8K*KFLcQT^6|6=L%=ZRSr-rK+N`fL$g3LsJ!66C}>DdxOviOJlrrybbQ06^F~ zdRr-??4o&uij_QUA8K*Ls40hrdInZ+?Q-|u7EZ4a)o`W!!H#vpOw%_dD=J5_42u2q zO^33C`ZI+j88u_Vw%l~O{23A(b?r4!;27aZvUM&+$Ci*?lAgs6#gyG0H)d!(|cB$zOA77ruQqXYRdGwLK_7*{u zkZodEKtd8VZ;6;86m)Dh^$(CV4OnAVC`0D@58gh{!$ePIcKY5>vQOt`SFAQ*9z2om zQnDFUFcO|F;F2qv*kiup599)Wh*va{Ju`|y{#6F z{#NzfW`?dM7Sm|jV&eXNF95zNTL>x&Ih8QGYJNbidJJC($hIJ?dT6!bavK!PLx#6?el_L_;olubw>Z_!+{Q zZY?$fytWevXIQW7DL-QIrcs?73dPJ=Hc9uxO9G6dl6K`S*^w6;5_ft!(E#4EODK?O z8-+{w6L!!^F%k6&K)&=m$C<8@EKO~q6|igZJK(?avl(aGxo(BXY;93O0oQi9L7 z0JkGxD4n8#F_U@3Z97|`SWe!72QZ9g_l5^=@sUZ!0|nn48Vqo(6x+`U!7aCer7(| z*J%S6#e5E&<7@|u9RnDlk>=mYNMWOLIpn6o6t_Zy#~~z(u@4lt15(xW5yxjHJVoos zf_KpL{zs=pG*E>RzJ1=vrW}-H8bjfi32)yxa(@WSjnC#lKvgzJj)wEB%_~(iSpW$^ zlTa+*aypyfGt7+XeamkgC0-lpN(ea*m zewixGuYr-xKY5v)-(69HXhR6T%E0=K4)`6{BCsDh&X)*4N%ZzU8Dc$^8MY>UH9&%Z zw5v0v1|p=Ov%(Vd-hGZJ*05RWtpM^C@v?TWcj1M%I$2hOryhnX@ zM8DL`&O-VhfGpI;q1R|iw#SpyJSYF%;uS*xo+=(F3wdjZW`!u3o?ri ztsej70S+)1f^pEBNt6s%(vVbrFM8)};gOom=b&J?;X^Wj!}*mR5Yw4)Nb`LuNY{+= zaig$tPFl?`&)+Nn3>e!4s1<^5%kE3*$cLlNV8;b%jy-MqMZZ+*eAc`EvLVpsL&j0# z1{~=|2m9u?*q0?1OKNGoyI(%R|CL#8_~lfpS=j2{n~9pON96jZ0kxmblE>*y6`30r zXgU0E^$l0#wyRFRtLH`p1mJ3~U5Nf5LZyAKDE<)q#xQcFL;EDo6rAkLbWQni zc`$B40x1EeN11KTz%o9gn?)7nNCqb<0y^_8v_ItIbEHp!ZscBl>ZJ2z!d9JOHzTMQ z3%k7)P2=5w)kC5p^4vVsoyy8-M>@CAQs3&(n0<0PKFFlQG?qS15_5P?(@vI7K%Kl+q7O{8MleHlDTFwv8VfRr19#F zzw?qSyLmt+tEwLgS*GbW_)o-ZOWlQevsH4hbt~=1ZWyaZA~wI@lkN`xDlrjYD*K4z zH^*kPKNsVfRL{jBnJs%XeeN_5_q$|_%)6jq9RiAT7{AIMBDd%U3R-pq2`E8y2^&Za zP*KxK(1nS~IggI#Iiw``qi$|_Rw!mEfdHC#Z8*YAvYV)9C=XoVu)&>zm~NsV>zQRQ ztr=VxVfb!!HX^K2Yp=Fush906VN<~=Lf>G{JtXJqP>_`3RIGo?9<9*WCpYAcB7|2_ zAU(nYFAnS7AkThSK=$MT)GKC^8J=-}|y@2pZWXS!5px<+cQ)-93n# z_8l)b;d@xDB8;bFR0ncvRfvtD%UOTy!5tTZs^MI~Ty4l9N^ZBQ&D;j*ouZ)zl05O{ zi?~33cJ3~(ur#f+F}P3~mpc(;?}TwD*&W@sEywg;?ZC3}3?_QB)3w+E8q_FDg&3Jb z?;7aK8}%|qNH7V=9t;mhwXY1!s8=dWTKt87{jrc0xlZ+MA(`RhmHn3Vz;D7&a$wU} zv`>`)bDmziL<%x3edeJ24a*Nyyc`@+3z^LW*3TpCWq6u{?VWY#z46{bFYmNLj)N4Z zYgoXFc!&gu!C;=vQRHnYe{2Y2sAx+i;cXp<9Z3&KCs&s$f_b$YbpXbzTM>y@;I>oV zg2ujuC1Zv`*c1Lp*g$}8goh5D;(bUOPm;o7QcDHBUz5~Ll%L(5t(FY7tP>s1BHJ`g zHyLIF0eKCpwcy8dY83^M!`Dc`Ng_vqH%jSBtbvZXnk0Q??a0bW^rwYz;(YD#)?etBTA3_XH#lY1yJvH-W@y%M5E@27_lPQZ= zOh+G&bo^#@Y|^zSd#c7b%2oF_)?9)If?}-E3X4A@NrentbCzgK2NT64W z{luQd4E+8k(@HStO|2JQ1nhlV!o+*$Hwvyx(Ae;}HAF5;zRg<7uT4^Vbx}X(taNkI zfVEn&dnh7gz%S#DUl&Vt2X$?u9lbU3*^vebgE97R^SWvh^lSkY1b&Jy2y#*~vq({z zOT^Y0U1wYZ_EWKwnTR#-5N?rVzMk6Uc-?Ji8q^G(Ck4X>FZJc8`FXW`9cP{AFERun zG$}wruXKRboy74DN3L+xXAnvAcd2dQUf@L@z;`!jb1B=dxWX}6htJyWD?be$zH*~2 zg|AB(=1y=bqX{Lwg4VVJsPN~04Wkc~+#XGfpj_4C+WIWrNvU0C$Sx<@>&hl!mX>?M zqK!_bIQSUBZR;Ol;JA$3sme!Sn>3{VCAZ{&ite>D3i3XzN!?Ij7>Cz0I9I7bDIn1- zeOC8DqYhihp&J*v`yK=3F)EQ2;|44VFFQv^Y>ayjtOSyefv1t~yI!NdEQH@zshq;K z|9IqN@U4c{0AE$IT2fkJgeRw5zi^k+0N_lPL7z50T8 zUs!qm5_;EA>Z7!@CnLqd4+js7ra3#|bHB*?_sOigQEnTOsk(skrd$-pYAQ!4^EYms zM6J(N1ec0%z)1$Q21$5I>&(4pWmr^7vUGYmcWPwd`5mMY*Q%^Q@Br{Jmmpe3w2&wz z&PxS35nZ*?oU}J=+!klvW~Yh2S(llqZ7SQiN(#mXWy3(QkGS=BRP(K>)toOdx(gIX zobCcEBM0Y&p6*jscyw8e7GkFoi0H@Z#7u|z(vW?EZZcSBE4ym-;I*F+(1b!LoJ~P5 ztBA)wc?LziFb_5uA$UYZ#OV_W@&Onz*RCpoouRzYwas{VwzDKw3Bc?9`3hwDEWCR< zL(2bg#KN=?BWt~*aIQ3!g0S2NL9KvE2j9SOPa^&uY_D7Z2%w{MUZLaIh<-RpbAZn+ z39C}?RG&_GO+h{3V8qKeMpK)q44ygS4kPD5cBVVl>E>VWzd^Io3fKVSmt)~@!0te z+LQ67FL_uaoXUMXM!Xe}Zk0PN8D~9WVRdkRXJi?GlZp@2u@o$R2+eFT^+Tc{Pmhdk zqy}v*AKI(-9hFCE_S}KrMz-P)EU4drv_Mc^+ZuwBZ2aBpYX4~Fq(2^|I``d2U|bHG zIkvM|0f~4^m#(VbeDZ5>Y{)ZUet#CrBzSec5DmPylJe-x81U#?DcHu1$9FY}lYY`3 zW!tCb%S`z= zKF@^4=;b(KL&z!!Y_A(1Afq$QcZi7)mQ*MAHE$n`{*+Zlqi=`KC=tqNcf0UHiShym z;5lRcedrz`I6sw}Nf=Pkc}6U9AUeOXiD5K5`f5)?h7&;+Z=&pJOSHuUMCQIfV)tL_ z-bz9|&0e9y&C05PejxKX1^#ugHBJ7W)nQI>+_6;5j=t#I`P;}q#@^mDUd7L)p!K)0 zn5dp-Vw-5q#&=R-RVX&Zbzn70Uxq6EWClQg3Q4Hkb-pJ5Wp72PLZ((sG}2&sj2I4a z$E3E7R$d5oIJqkKcm4sE(1codx}PGSlIB4h6NC8tT@oY>R#W!QqdQ|3=G2Erz9Axm zav<#ohF#eE$Z9XM4s+o1Z|3|8V^$YPXk}*b#7n8{AtXfpb_P*ZS^ViO<>nz_-Iay+ z(t>N$GcDKNcWqO=pt<&~1=LUkBMA788zEBJmcoE_ z6=1t10|iVFA4}?eUK+zF^U|pQ7sq*fu?)?7dtyvN+9-88hP~9!RAZRZozE|wG*qF` z`&L?R1Cz8xgDdR{J88;!nvJCrBzJ^>L8%@UAnjyquDtRj?uSw~89cHNxNl<0B7V3e zkz60#FF_tjHC`r)(v{btqtFKg9b$?5Z>I!Vf0fk}{q-pRXv zbP?C@brXW+xQw+~KGnf&V+mwaI^;9v4_+TjkF7~IFGP?u7_LehyHkZ?@v-0dhverBsO4aqC5Pl}lII-riVHd*@PYkFgq@IvZG97eX}W&bq`%g)P& z&zN%^_OWk(A9$P^MAv)1oe^ny%qM6ZvT7Z2ya_zPu`jo__5U(KY^4?{p>rR6rjDMjtxCAI>9K{Q;%VoJ^Qpxr z9P?1q*2qJZj7tx|NqJAjuEJj29@i7z1;nl%9TQy3dIjk3+xen%)T~F2_V}Y?xy0l3 z2l&V!I5ZqbU7wt}7Ip~d*jg+7ln>$-^_5TAcGFIJzk_<-`TFfdmI?_ycpj_;02DN# z6OD1msP%5_!>pGYjX&uBS3k2=1nDLb@hROjjz|AcD|m5NM=?3y;Ki-k)7YKAfSOxBenl@`j zSj~G$I{J&>t$_X{qFrvdtY!W=}so?d5@$I9-`Jf(>Sc7;qc53EX#l=LQyr3!E=$sXR}9 zYolD#0~)?m<~|R5Qm5Pi1{0pWq}UOK^kVkh)%@{qUd>wNTl>SYcCbfJ=j92kugsmlitaB=CEjUWD18F1l-G>esAbQKF? zC%JL?4n;=AiRvcx>kG?yIlnbnxUXNe>X>{X&ytR9y%@0g%CpG`p`jNH{@2eK@OFla zQZUMv2X2>U%5GafB2m4+$hUYhp&Z9J($|Ul2Gi~V%1TXo+907#^EjuHarzcp>r7t5 zws%j8h)H^BglxH?-mTp-z{s09w}$t>8NQQ10vF_GdZZX!`-2P^fdy&g|3WK;y`!-BWFWNQLtHEQB$k5vLR3?{-D*-I zsbg4J@5-u7X=Nq%{+sRyMCVgO%wTuCEqr)m2q3>y88LA`I`$!WeOQ$xhN%d9RHtd| z!}XunEcD>g57d$M_Rsp;2}sd^|+vSXY`49Dmi{Rd&;Jj>)4b<5BFRQ#jvak9psUpS&)pv*V+;;3jeFB9<(ADChLCr*C)9l8nbe+tFZC9+{Csa6fiaa!ZQAC{;~1h)Ig9 z!Z0maNehh;OV@cTTguey1OJ5yGWz28^A<=|W-5fiw0Qumv zX%08#T(xm8ipRfG@dL)H5xtYX@E9UJ*)pmWouOiYQilLSKM1Ju5`%Oshs=BfN7H2@ z$GJMq1o<1M>TybLyBFq`?dwy(bvcBVrR13E&ZuottwQu)FJjMqZfq%=aY-?w*{M@T z^ksK;PYHoep1nz88D5Mk%q`Zf?XhCm&(&RO#Ht{OTer>Xmirio1Y;bY3qvG$)y~5_ zk=BkTF0ImSGjcx&Nfl9d7Q-D^mITYl_jvW&)ch+F)1!BAe^fFVwhI$bEwTb|DuVwB ztSB#WK;KgAL%yc5i2(h=H~NKsW^Ar6xv;N!?QJ+@bVS-DTH~W_+W$_3p_od6Dqgmp zno}&lK2gx$@~nn&J=q@2C2M5XbOKY#$^sA4ltZ2hHd#@|wZ4>4Q&_61P_lHP?~ANW zb?hN8jERco=85S@>-ilQP^hgU5Bq6|0I0#HI&s2cB}O0(F+eW9?(hH72})`1_Yq!d z*nA>k9a?vgl#n!cZ%2b0E=Q^NtWsLjEO(6zL%;;>76lTP+pvy~)+tBy6?pn69{-vg z1ZERYHKn)HiW^gur54?vnl07+MMQt(1)?H&*>VIl`BiOgpdXy&@N?-Dkq<^u#it0s z5D^Bp`xjnO;2PVedMSt$YoKq;xnhV81v4I3M6vPv`8(Hx+a9J?Wupq8J;GU)K1TmR z{9E@ZC!p{E*p@DnLz5X|8?Y)!&yYb{mO{0}u0UN#y{|Xst2(Uemmv6)c-!?J&!VO& zS23fddZny{>OntM-gU8i3UZEgTnN>xL+!QHbT=vbWZ9VZ`DzPeiW8AT>woU+?%+pv z!D8_qz8Q;W@Vfi+y6W0wWANytwsaP2iz@nPWW-l8TUS(+A(Ju0362@mBe|;?z=iM* zMVRd8$>tM0XDZ_3j_SRDzRQ%?<~$0niWOHMfc$d2do()}My{Xj$-e77?-hNhJJtkn z_X2}M6=bYO_{~Taa!lJ^%TxzMl*LNOU+{wp#~6u|C#ZC{g5U~ahFpj|W}68`=^^zj zu2%kU;YHblM0OH&Os@h3;} z+4_n*NgSQC!VIx~>v97GW3%}SzdcO`3qCJo@m)0@m3YPv ziUkRdwKe&kHn9&Bu+WNZe6AYWS@ITb+ti41x9xg{G5Lsc(n0us%8 zpgjLZxEbe>6hO1&g1>jo93p=VPDwb-kQ^l8Aw%=c2XJHs&rW8Vnu{8dWSvtRs{@om zRfUySr_{dNd9@KZ7bn_6VT3qc9#y!~eiU6%BLkHbnEnU2jyCFz#o2EK$s1v>Q%Bjj zQBI-Hz|AfOjxqZSJW!e90d`Y#!D!%I-)=c3?K#`ZW!XJ#(XV3-ZJJ6zU&!H94WO1G zf_A4~WC&s6V9Q+X%R(RoY@qxnC*8LQ39z9Z<`QLZ1X+(~+}4utj78p*?rtA)Y>4Tq^%6&Q74OWI>j zIX&7+X>cI|^dB0I8T?0~3k*e`jw-5I7g*&m+~&|cKGvaY7REw^c{g69WfgIe3wohO zgBo4S3msCW)=X1o?$#z3F{3&+ld8k<5z?@w_!b{vgRFl=(|STH#!}eC+-nypFEn-} zoSN4y8WpO-Y$-tZi>;~jUq1o~Toc6o(JzJDDMR#qcwYAuy^VKao`9ETHi&SWhqp($ z@?uov>@=Hnj3PR1%8R(SN{`L7CFIZ8Idf=R{)^r^xXzd6wb-n8 zVmX+#+!IC_u8kAvMgm18)BA@0gOk!BlxVN@?!XaUm300ha|d~D0j=)JiLMV4@nGHiY zeX)h^{6B1s%e^?HI)g?M%0$0 z8Xeda7tz~XewLx_u$|oHiR`N-CU6)H#Rjd`ldUV`LD*{>z*` zP?gWQ*Xi{1*sGPORHX%tzIuv>;(~H;8kCvpP~f=fnkVQFHpN3c8J&oAP9oDH2*NUs zUzPBI4GZ{vp>Q0EC<%W%+)~W8pf6O9v8?+rIbgj$Y-E+%@Gpbdg}Zyv4aY5M7Q!0R zq1H*my(OHR+?n!d=asUHfOldj-~^E&x>vCUCIGDX5e(4J&}y(v!_w$Po&3(Cpbu(Y zWVBN0XjqO`hd?OQjKqyW3Yvvfo&AwcT9n~vA!q4-pf)A-D}y6LD=Z}1ZR{gNETI$= z_EaSk)$fM|Kwa^Zaylp=(o%?Uj^u*9OIQL^WT`+fWauwcq&OLFGPubPfD3iIMW5D! zz~n`{_zQK`=?Zq33N|dXvf7uBF--J&*|U3B3^&ny)L)nwJc)Jh84!p9qH{JX7_iRZ z1Iu^HjZllIaI@shUuj&p1*@yGY|yo#TsCfO^23qKeCLi#qwEaAR&7A`X4osmB!Qf1 zmWjbw@`}%pz#=awvvn8OUAP#eGP-_1$jlMLD=i%YuzktkyCYUGr^2}lrMhFCpt_y2 zgLcmG@>1)=#e6skT!$RRgSz8lTCaFBWCDBgv~OBnFrQK2bloks)+I14o>^}+X$tM{p;<@)F0t9&uGF-YuWE|Q2#u)!<5^I9b=VmJ%B6<%ug*kE8sH1?|t zc=SBRN7c4RZ}~$PBd*>A2hT5%mFB7<`N~le8c28d+!i9lGXhkf#{#(6qz5Am8R-`OtWN2O+<-Kh;VdsgA|$$3_wH;i9+o6lrB z$1t>1&s8CIB~t)1l4Q=mR3oAVIPn<@Isg1;;~LpVEtUl>r%DGSMIH#itbS`oox65h zr8b1(4BRTRGA_tr$MZw~h|x?BEe=G9XvcNU9WX|qu|)>~h#DV6AF-~%g)|wmPx9-9 zqu(~1d}FMgG4#$9JGcZj-LGgT)Wx!z);IbL*biIISyIvBjIW8T-c60n-)1{2nd*{M z3c({?bRc5<8)XkrxS6Zd-bP`f`5Enkoyookj*3A$9dqw6`OIQPdr@>`D{H;lx>2PS*V=Y~y>d`n(dy-d<(3PGEt@2#&3ms z>?k?YlD7m-#tlySN5u8uLApv^lFJkXwFtum4BDIMjL#ib(<#Or^Vk*C7>9n#Q0d5p zD%V3c(Bty4=(4o(;82{mj;w(}X=j?-U9m&ULy^tAQleE3OU02CQCOX+rLY(t3kJZT z*zWE9Jzxxbmn?UU{Br*xuN$sT7~a+&Z_L)uphliiIGQM5MPY;(9~PY_}i2skrN4x^=D`P z;+uz0Y%n!Ro#C@o4RZF*Oc3mQ+ZLMWw!}T`qt~$n5`k~yV_KZNvTFKbKYC=IYO@EM z&Y2_aLj-TH7fI;;Yp4-?;NcB1WcgWK@;-lZl_j=o5@V?WT!LFv-Q$MoDD+i^Gpz{s z2oKD8>Sg83I=uclbiXLi<44$van-oGh@Bg~e>FX`(t;uRAc1$FwIS`8IvU@c6Ys*k zv}6z$bEhZTsCXM~v-1tVM92*UItc~+i{dilcPPGM`P=wASMG=f?26xp+~*f}1|CIy z2OAwis;ybWj~>wkx4x2BYXVsYm36W2^zi7(w@CDC^{N0)uzD2@w`?AjR{V2Ui4K3G zEL1^F#QWeO-)i#V`Z*~_;KDVo-x+wrv00NG#BLsOsm;OZlsU~?VEU~uXSqrqO7y*1 zmz+{3w)^}t_v6bJju6quV%rUoZzQVL<^b6MMmlP6@?^dl!RrS07bt@)m=sHtiHHyP zToJ+mGQ~rSZF5Kl*}vLSn~d-Nc>tWw#M1ve6iN(a{01^& zFZ17uz7vYx4m5Uoa&!T2QA85uD&T#$?3;M$-cD7Le#yyjetsX~pb8f#Vvdswp161J z6i_{sI6e^BwmW5^*$XXgCdR5|Ddy*`nbjbx_6HtpJ7% za5eqm3j_3M8+l~PefvRSk|n?qMmsn+NEWEMc~XX8_fi61-t0JQnyqDtldFwugk+CD$bMlVLa5sc zK2Rhrg@88M*%r{v0Q{1nZ{HwO@C?+Y9-ZIi_VD!%2XTT=cjyy@2W7v9@VJieaVzp* zXA(2SLX34NIDfAH+a^M*b_gwx2pna31lnIJpZTU;3QY8) zr{Up)a^`e<{8UnT6}=Sux8to*8UXMVAn%>Y=PTKTYkj*x#D*ZH3*(N^FUOaAt}(Q! zR^8ruV?yf1x>2gtP&K`20c-9Fp*#qwfqn?3Glv7vu04& z-?`n0A#)=`%#JX)Uvr3q*-r&~1POs_Mm=qcdmDBuY_LeA)h2#Ziz(60Ys6fYjrTs% zcp{UswRC|Zp(c95SsAZdKrjQD8v{8k+21obthk>z;`bn+*Md)i_xTj$zN!8xAXYPm z5N#_de#w&W=Mw>mYHkqzi!*>#HSwW(G^VNT|ER+}2#aLqd{?StR!}Ri*fU1P4yXIj%Z?vmLH>pcTlnc zi0-cv;NN2fFjXlp53E=ABMVE^U#ktm8cau>djf*#0RM62Q-Q`*5yNQ-=E8|z$=;6> zvz}B4p>2I5`8-us=((EWT=!h>=lvgp(4Js&S?{jZ&V-|2kbwyG1e5Kf<2Gk1^Ifn0 z1(L6>rkOg-GVHsi>+E@7DWuE)W!+n*N)Z193w~!%DZrVevEkb--xFpJ&iFlQo8>Qhwm* z0dO@MJOi^{0spX$Y5a}$D+mJVBYCfZd8FHte34krQdD0?%ys{sQzH3SiGQ>6fNOI& zS{E(We!y4nYp5@hAu~r*ec*XEJv&~$$!IVEz#YD0?uZh8^$BPJ^gzmay+pKck+<@+ z6qYYk##K&FJ0rHNg9gzh^YyiPRMkxOZ9qP!n9+m)T$QO|2Y`tr;;et2z5kORNKt^A zVQR3Yml9ne5-F!pzDPFn3Pc^$_HU15-&z`C-B~%I+9Hz20HdnJ%-6vqxh5qD>y81W z6UyFpm!0Ah36XekVg^cY(z++~_PXZ*~N;vMOKwMK%ZDT9X0>c(~RF~b1GstarQRb6@$)$JZS(A!eM_$z2o-8Vn`0tg2|nP~7aec>wl>>HXi3Zg~dD!NQB0Z%!zJTzt$Gu$#IH2z<%a z4V_F}mUn!qz}_+@zUx-JB>0kX(YBri70ii*_n({@ym|(7o6|TT*X0Kg^`8N!+|**g z=hKXY{LE*T!S|)I5352$NhpcC0~=@aaH1-Q0m%x?K;JoqEaO-|=X!^O`choP<@P6> z#={|Jdcf1MLS{&(=O#Uxmp#_uu)$=dsBB!YCHG@&d(Hi6h?%v<@m<8$rf&Iw&^t`D zdA-7se=G)PQ^P*^;0wPC=pxkJ&UR4aCCiBS?}{i#>)dQbD1Wd&ybn8WK6Z%>cAlDV zNfF;P=m#&5yy3o2JW8Uy=Uw1|9OG`z4jeFZ*JG%kVWvlh{-?_w4rs~Lx4D#+a0(*_ z2D$J#m$Zce_8|{Q@1)`ci0*T!1G0g)3?L8O<>`GaaUqtVXcs6Mx1os%KnT;X9W|1w z`_C>E<>ha(_~@$QL2_N#eepV8QVY-%w(K()K!wTxdSZpK!7C=R@FSU(xj+3#?a*sE zKM|E<^QDnl-7>A-!V^1%wj&grNm0;D)JUc`HMQnj!p1;D_qre(?8|Ce38j#e2ss9; zywkn5IX{0hiaucGh#!<{cI7@SbVnO_dyTun7Rm1Qb^9sc#s(VIE6FXB%=|GV;h1`+ zJku{#p1RZ0clYqYh}Gp$KVQ_|_m(JA90zLTPBYrybXvGg>EgIM&GoGN4JO}U3H@il z!x3@WpQNuptColOKV7qyjJrm(8^yIs9Bsu-70x=7_XiHp`+^ebt2-E+jyu zfMFY6_<;me`J_Y~>k>-cF%{{YT1SG>wPWa^C%x`T`aHjp@WwC|p`1~;t#Vo-x&@9d!a zgDw!uO#nY2B5*FDCIGuEBubrLp}8m%+${(aq+j;v7DobP+X{@Zsts!Kvb$J7WTXf;O;-Ka5_MGC zUr+sxNy#5}H<=dd&1S(#t^+QlbfQ*ZOI|423do5kUe-=ssLN`OAerTl1%hEHySWyh z_{VltwE)Y+_)?WfeQx%{?*=B)5|RnA)&T!FVLzKyU)Af{I`In_T*QEoY}UJ>#H4&${QlGc-W6Qyrq zOZsA&FO)5lAiGLvUdf7({z8k*z> z_&v`WcE!(0CP&z_(~M?qwmzq@N;0tp2CJZ}nl18Sjf;RfD{8c&%S_)d+7&dFGq$yd zG6#+vQ}9_Nry3}z^KJ^~-ou3?*wwW`u{s@(jO3ztQ_8go=CX8ZC_aYrTWt}`P^Z$I zA=9ymQT(dv`Y6#C^Fk#4$S*eTwk5gDR5&C%R}h7du*w}bl_Hd$C5<}CPn+%wx1#Aa zwu?@6>!s06!&s~@y@(c*qWP4um}MB~bt9YrC&uLO51>p;^&{MA+Q9Ob9}D(gcT3hT z=i9v2&Y;GCsDpLmn5vBas|K%^T}xy6?ic$j(pO&AG}9+hk^^5HDLW`|)%x2vAsW=~ z(rgG-B?9nZv3o7ejnVYz06KpxsU0{5@Q-mcw8p%Uo>x--#Jx)N36X{{6~7Xb1S6C^ z0m%qZGSsyJQA{I$)udD~b&(79XBO-g-4gpnMi87CUytcVUost1V2|oQcC$26Gacc{ zav~=)gLmG<{Y-a(ldDwMt667|%FAykT^y5FUt%tNlcvAjH=jpkTvBC(7tQ-Ig9zMp zgm;*tizrh-R9bsW`hG#n`CKZ9)Rp-nirHXWp|F>auy$D}-i2p^(AUa>=nY`4JUP5u zq)|v%e*A=RyYHS$C;37d{-PX$D2l=8GDG>Ja5goE@(-6^r>e1Zu0MlS#MalRA&a!5XaeW-nT<{qm3KAn>g?9RFQyj(FUuxmX^TW4kaK!YNBp* zPJ+dgLdsWDaW+uy7SqJX;XoaNAShveA}mOQ zgwF5RozGu|ffM#06UBV}S8dtl-$?TEr0%o5ll&^LVn3XHL#f8cmc@+dX`o-HL0gLs1XBho@JmKC8W1*PdxzIhnYTo?f24jD>ZrU5DWDrax}=-+^Ltoa2hA0Kj&|} zu;*g{HhVy-$*-qHJ*p{nM`HRN-J|nBoHGt?M)*N@rjgs!7xW;i%ib3W8O3N$s9k_w z&5|24!-v?evH#DE^WsChI7nKC&B~r+bn!Ke$a%a7P@abhjf2N8Y{ z;L5Bvz@L6{c;mSi5tP`xS7DBGJP>|YtS|`69qu(SF45|`^e?>gzJ-3EWbS~9zN#`# z4x$H>wT>KzX+g_NwOK900XM+kytEKs30{)7dfW2Lsx>}|7ZHYwmk>BOm%30q*Q0U4 zEW+s+=@tRUOK~TM>GY&o_c6lMoe{tqcVy4I`<^$$&1nG?VQK$pQd3fmx0e|tasc0qE$)tBvEnQjXk&B2blhVb?#b2|JRF& zaa1{2*6iRm`0O!*^=1UrDN6m9prNd(_hi)d{)ri7ab=M}*_cwzcV@XgKu>$(_G0f3 zzfEVVfUbKuKmDovk`3rhx^zvxu;=TJC5H5qd3oHT{6`mU@~m4~vQ3xxs%wMBRI^Bo zN6|>Ui?2{1GVdJf(gXD#4|%&eh@-@s~vlv0ie$|N8Xu_>LzWG+4JkXuaI#)({>a(-@i*Ppl zCVUkTFVU`txcKP7Y(Ii!ziM)ohHGuJI&x&@#iC8)G$NkO*Xj&K>-M%UcQ2oH4ma^! z52{`T=5Kv1CqESK@IyC|7r0E)4$4WvBSl+kU~Dk>&<~JOFiJ`2GDLAz7EI-f@5v|@ z5y6Mag_Wh_NXo0Pq3`-{kSk(eG(4Q>pu2lATSn@%h%VvU*dW{D)u#+P8q9bqGC<3y z%zkb7duQWPBw0mdLOZi52|}i_23K<_iVm4xD6IajnSmSIy|LGtHPE{;o~rdY-Cz({ z&Crrmg8IiHPZ}a|)mprU*;IFZGMzKzk@v%3kA_U%dK_PayFbOrw7*@21f1l{cQlo$ z#__(UGd3LDDe}w=ayQ_<3Gk{hQQ25z9C@6m{@5OLqflpcH1cpc~x-V}|4U z_O>j_0qhk+*8^iJ#?EdiuJGeoPn|&UXm03&&>{#&ZRhJ4sa0}fO86CXcG5dvxKbIg z0qPLqZ#ytw!H#=sO`c6MAb|=4N9ivz56}Mciv5GG!dv&8I)K~OG-x~I_$Ej3j>gn) zxej9J-`@IdHsHUGpF8uw+hxyr9ac(9R=cLL)3SxBTsgR;N#y_a(_yBPz@@j)TCTv{ z=pOY40F+RpCYF)@L6!v2f34S!CTweMa%JCBE6h6dtE4;4hyg;LA_vWooB~ADp~j?9 zwDeS9!K=9<;k|lQL0opp28_$DA>EdVw%-wgarM&Fvx60VEL?z!mTolA0jbQ!`jR3u z*5$CHOK%~%9p`LC#Ean@-lox}9ay^L|4vL#+#}f~a;~@sHZQi!AHT%4fq`6(^dDgu z)1-BcauVxBKVQGmCXjs7nQ&l)RQd-G(dNapsnE5XC~eFjQ0Z zH8b zLfz&c{Q}8)|C}5a8F(Ur-QOetLPVE?2sAEAZS>oYg0uUPPCI6>7Xbf10Kl-l>k#I~ z=e|V5^>471AuhOQEyh`OHQPheW=;)jc{#?ZIH@}sdnP}&n*L6IBxjm$cg@_sfqI6P zFZBoZVwq2bn={JvBRR!W)L7;VS4UUN3YFUAtfeCq5K+(y5CG_KGEHrz&r9BT^(;K& zivdkDtC4|5O*X$%?*sI2xT83tlB(X&oO{%9yFQmr=-;7pda~fe@a-x($^^Zm5m+1Y z2+mQ)=wCKB8c)f!(0G;E zJ)Vbf`*`F*d&^A5Yye_I1D_#l~OWlrAd@u zuxk?r#UM0#_#pg-;e`Pc;)u}BiS=3$It=agdJMCrXn~Rh+#`)oH$@(PT)K@9@Efkl z+x=BdJuEevJ3%@&3d}SiP)Ue2f`^xA>T<;K%yU3=eZh}~3* z0L@uBD2!PyiCOMWK&yK=x{q7!fvH4<3J$d0eU;3@w<+Cb(Ag~w#5>%i@pS!GmBZYv z0n{>{n$~mHq$`Ua=!=*3%McPX*NOv5pr8U^geIQ+oWJD}%LhrfH`QSU^Kl;=7ewx; zJQXNxRu}RmtOtrPZtu~~d}OncHc*qFjjZH)N$zrttT_S_ zQ=|N}(PM}QE2QSs3eob{*wQ6p^5V7tv1-l3`Ho4%#MUV>p~OGCbBA{IHNQ-XjDoT5 zC*Q2gw(yM|9S|aXoaSsRW&7%gEtL{!z^(~6Tk*<9y;gg%oA6KxmQ z6oaKNJRX{nzD+XL&d~w~n&Vhh`K%cBR*nrrDW>{#h$X^5Kr4Y-w~1o)3aU~#xa%sZ&)1ccL@|p88mb? zb=0#wj&Oj!+&GA8B(WREc1t{W!9h@2nvsay3+2bdx*SR zc&^>-Mg0IPzslzS+!C)>!N+$c^rn^Fn*}O3?;V;hh-Rt~Hr?;`n=y6kP=FB0a$RRw zbj~V|zHG8q0 zW_#6mKj*NHbp#tEh0E^h0~`*dBGdgO`2sia&N6n(R_l8~q2+P24Da6UG;v~u#aX4h zWlcBL!C1j}$3bJ<)Ko79((TE8)Y#cur-7F}mv?skDaE>zs1txIq+1c;kP@2@*8(g( z8@3(*tV8XfGu2J6;(##Er48+%k-Aq*XJ#|P%2O1dX3pO!Xf?hi)2UD>kFl+XF|pL2 zsmpc|cS$h`*zb^4_`!Je8zTI#BP-l)M<7&Z8T;jVgNl8b%WwUYz3eRp&x{AmgJmXF zGGZtDq4zEotpC|?(S|~CTho4;8U!wDaz^GM&{GA!_|Ro!P&#t%)kSvu77pHzqyQRv zX#S%wDKxoAADAs-tsv*noSd*@Xg9bgzVsbq?Qs8-TefoU3(erAVG zYaoShwfjx5&-}V7eaX3L+cv6t>iW_)wc2j|v~zqajUf4?w@QrJU1B9>gmQNSzc-NdYH zR_ZQv%Ioy}TBWVJW`lJs_#>``yA_t=Q$rVd17U6 zH~AYjwGULx*t#1?X#X^fnKi^d;DtmH3f~sq77m-D(5EFv0q!SIIcD8E60c=hks>B1 zwWW2K$ZUZ!C5b3Fl&F{0d}YEprc4NmYYm^6^?Ncy)TW;0cTVI4ucoJfXAYc5kDJG< zQ5>J7Z^Mo>-9l;KA!4jj%(}DnC8+T_zj2U_WavSGZ^vTKNs2c+C7f2fQyHR4Ia(wx z8%cFGDcK4q|0>VZFSrIZiSABnDQ$-+=_w9L78K_s@yW-b)jb1E&E8Fc?Nci^0O!tV z@_{hy{B7LN{*y)Oo&)j7$+IW}2QG@^xdU8m7?lxt`iQHSSa{ZtFhxRaf>+U{YD==X zhzpTk-T47wK&jY26(^dJygn6cSSLUEU-urgXW}>}P{CkRr0xocKuM?XN_U-yZlEq>b_3Akx z`W_(ansh-GE!+l(-BCZjCk52bML3HQsM2`KN^MmhqB!i|Z*i+XReE^X%fm`9_K}^- zYT0HxuVeS~K?kS8dO!CPZ}*9uQU8@6vv@b9UVBf%tU9A*I0@?*9zz@16owpnv##X^ z^_1h$#)1xUpu4z;2teP6x3BP+Uz^KtFBFi{e;eMwR-3l%(mDL6M7;QT`YnsGber2| zi-mQJP@pCH?gysx@pfgB&mFHefpiV&(t`3Iwk9MFWuZedy4_xzfAt0bi0T}*gF{xU zObLCR^z+;Gmz1E?J!_my=-JC{b*FNkGZ1}KBd3TFutqvTsrQ}4w-X=ACvIrZm>TEy zBZlaXnTmfK>n=4cBHN|V@zOM7nx7FN z5`PZ;xm+?jowO?+7<;O6O2-Tk`fw&Lxpmj8q7=2k>v^M-@?gLtCM)IdG{G``>JQP8 zPyH-jvBVKj&Af3nw$;l>ww-H&jrnD7W>)LHDc2*&A8msn^57c+>hZmV0v#a&!=*r- zpdoiyXQ(CoStH@W=eYHbBaK<}r(eG4T7Y#ju%hp8R}_%l1PQ~KO~FDM3Ig_k&V=e! zmXo9!Vkbz+mJE##Y__vJvhFGWo{3GybxxhZaWfsmMpzZ>i8apedEmb3YC(EV0S8pb z>3Y995F?ya)a7ylt5UGYIPh4_pDa7baz+MZ+bx-IK;EceTDw~GQt9t6A*n+p6r3RC zZcQ@HBCFkpGECG8k&puA$9!-8VQcdT)yA$am4db)EHq>yDQgXr{kjbL3~+}fe>ZSI z39fUGRGZR4I0vY8xpotQFO^?KdEU4(vXj^+#d1)Hc-ki@?4zdyms1V=Vl*5N}+kGJd?l2twJ1xvA1L`IL^}Ip{>fKwk+qr z;IXo^p3~Kr_ZN;l4^A?`A?(=!D;40SUw@bnl&{CY#D>PCfK#wK^$dy;EG-E?WJi?cPmy3FKSm4@vYY~DtDw@mhS(i^v^Jg`N* z;mA|zBihkE;p`d(-tTu%dr>gk9wkpSjDSUp!3x9m9bvSwF_6!hn0>|SFg;&z;&x|f zana#P5`UTn=lZxGkd68}Q8gNa#MIjmPG$RQ80XcK>yO>PGj=w5xxJ|Hds(eQ^KbHn zvO?o>Re&Q!dGhevaOkmi^;yNLD(02%nX~~FvH&nrLFw^JwYTo(aun)GT9pkp@7u; zq(w;&s#{>%8P(l)Eb@GAnX+sOk~316pQ)t49Yo*B0>1Avhh+fAM&ox)wKo|md(kX%yfLNZ_iI99ft~FBxLN(Z6A~R1v$i9> zl~r*uzLDS#6j4nqt`U9P)=3U6JtchI2 zQvxHR9Uk^HUhiLZB;PPkZI3eP0;(lQn5gV5?rIH0=uJJ22aWP5fPp1$-6L$X-Z2@^ z!8@d%)A)H>tJ;GxgnMJl#u)ifllLh;W-q32vhDsklp?77M$yntrSTZv*v{ zTP{%Pq7jwxHc{G?lxv#W7pNDjk#Hmt>w-^uwRx~67u1?CrUA_sXq5XR(2Dwrp-iH~ z$m7ZxP>!MYeAF7up}x5Irb6`PK}Wz31~hZ*h?|(3v8~(7g(>rs&}xO{sIt{1V`#^i zljLmx1aeU+W6XnHO+L9|3o8F;MKF7$AxWp@-hr?WRf4I8G05EGAX0nR&dBKMxfx_%+~EuL#o)Q|LYu9!TaV9 zeN-Kr$%Uk3<1txVU6y;mNt{93(4%$zf60XlfB2AGVeJ+%I0C8~B>1-?&g6UE-Nm42 z?Zy$L`exJhrsid>N>`%ymz&d)HCJc8eO*^Knr9pOW8j3DGmG8CZsk5_yF;Tr>aPym zw2f!Ofnb-+mkn@zb#M_RHJ0)2P#VRrhLatp{KcS;bega>YGqQ!x@)(o-S%)%)c^ay zEiNstb3x*&0p7$zYf}g^Gfi?qgd9Z5580iyYy%}q0|~?hGu%LP$+9&o=Zac8$^y<` z!s3pP>Tip`V9lOG{XVXh>jie(!h)*%#RE zjdrm1O?JP{VGW=^^{x?GALRYMV&@veMS@@23tihY|Bq^|z=_A6)O%$XKeP|d=fbZr z$%Q}&yiKG-E*il>4O)Qx24T+W@eNGgGqJ4X6-Bh3=DU6`%J8K_*UIc}Q!u9RN$0|p z$m|nYl%siWvL}Og6*!2cR@{qaG8nRb0IJcY=fV?Cxe!Y`&LPIo!Hi8(RIf9 z?ChbRLloFk*q)owDiKBmpEi%wu?#AZjR0U7E1{ex2u)E+(yWs%+OhXzO%2O2(SKTp z_p@lt%dYcY$l^-Gmlx2V6%ieK3NEu=E9h+EJR&ogc!R>Efr%0MvpA-TWPF+Tigp+B z3V{tTx{0^y{?B@Sym5_>q}o!GR`Di#q3f! zgyiI&eH_%CX+`hK9EeyuZ^g{9$-&ebvs}RuJI&RCdD>FnHq4)t?p`EXpAe`?j4s#V zIT@AF#|cKB!eY)WnNm|jC?0Vi4$F-Udh>&(iwxl}R=fd}bRdrMo=D;;cWLQ5463g- zajP=>)D_-sl*3e}J$}0y1+*Hd9sU*5p14H!aPt5d@0&j4 z+2~w8S^3$VVRyY(Yu&0}9mZ|u)gyAka7!A%U`9g#U>#hJQ&NKOyFREXcAsCh?0=)ypT62bQ*_$knvmxd z2Hg#A$1h@oY`)=IA)$@4&d6{;I|A(kYKb90#p~y1=uUvr z@Ko}=wVcS8e&HHW7<O^sC< ztTe?Ol80uWCMI~VnS8S1B!C2K0J{;7jR)M-wvL{oT_a`G^IRjr9?68qd`s+(=S|%^ zx|D7JHSr+vYTuk!;FmaKb9yPqVKn&v3KYVQZjVsz&3fow9W%3c}x`DPOX z7`tyL7Zrt7eJE#E^4Rl$fU4YU!lfYA`EsDd@b2NIn>IMkjyW=o?H&<_L(%r+ftAEe z4%XyqVeTmY-jZ9BtnNb$>5BH1Md9}|O+T`WhMt{TN0Z?+<8h{26~?xkwJYY0=WR{- znlk4+nCnK1=GuTB1WN*V*}c}__g9?Jpq1JH3yYmZj_jxHS5 zUINiOORX`l_!pzX&m&~$iQOMVg~EB`PO_FxOQz+~*8)0Cgjj)aju~FHFJ7-eI+6}| zm+1^-j%*K|rbL-x^oN+R8AchB@LjU7HIu3-r0O81==4!Lp@Y+-Pqgz~Bc4@)CaJC} zQ=ftJ=s@eh45L{HM)I&~)EAAE3*&Rd>tVZCF)(5F?$33z0==urG6&LaOa0gJF)GyCFiGtt0Reqr*FLPBrNLTTu= z*F(KW(S=Z8=JZOz%x+Ej=)SXIBjECQuVkaB%SZYgx)l1)a1V{I+R5F=+ibp~vG|%a9u~Nr z3Tq3tk3~OuxZKk#?#ZQm4`WOHsOUNP1@V7DIjEeYt29>r3K8r@Nv?Ep_^^eZ{Z%Gs zst=>ex~&f(|8_%w5tdOQ&d~n(tY!80<>Su>QfuL*mdt~8PAf6pw~v|>{gQ~sS)prF z*=wIM{3P#yZCN=-Fv0VP*KpVQuOTeu+qr6gtW2v586TrX+H6CV_1FLM@aCkGm`{}B z9Sj8K20w0s12bRlRUShx+O^Da`2D`_lY|*c&CJoJX?5}MH!l4x5`1;2Q@ZG44C$1s z(9+GC9Rq?Bvx;H5ULayY9LUJI#fH|- zmsOwR{^+_X0gIkw-$Hs7+K_k3Y^J0V4mWy1XOts60HfRh50H+D_a_LU$r>FJVrZ0? zT)(d0n1B;x)OaX6)1WO_Lvo|6$JwPq4!?;7M3V|?>!CfS(R~zV+U%-L3%os<7tM2{ z+qrhvi;<~@j);;4OXRI*wgosBaMxD7`-oA<1Yh^e1 zki0=O(W!~fPlC^Puq+R1CqnvF#ND%GgC5dFy6T!YI7!I%(_&K8C;ot1v8O@OaI#a<@V5vLs| zF`=q25S@z*pJ2w7q{Znl0|qKnX)~+sO@*Hn2jL%Y^N?+l0C(HQM2iPA{3tAJ9sBaaFzuf_bBgsy_Li5VM?EH>7?)SYp#axlVQ2PDahk^|1KGi)3NMDWhn61(`Xj9j*2%jdcX8Z z$_j@=yV@|hma)7cKn(cqGpezj-=Ug~@k~yw_|gOv4sDTXE%*`GVu`uXI4*AGZ60iC z*n)ml5a0&UI>Lco27pzj-x$>cX2dl5oW@Z`x5eTRboj`;@R16UMhP6C%5f*SR@8s^ zarqge#hYp<7=(ki#0A;V@ut`n;EaS+mc-l0LE&Rk3?8d2Vgrnu$*#vmbxwx(VbZBO zOk^}#bT@pqE2Z9x>ZHkbpHH$`8T%TNsYz_a!l_rmo3rwKF6! zdKal<*=Z;oA@iUywPENA^ zkOJXBCw7KVp@re2>5T8O2PxVJCq_C#OG_G?F4!mQ?`oWn;HzBpUpGbahmJ^AfgC>T z%}7SBerFp=L)&qf#{g(&I}h40?gsUjvU zBIBx**y|gG?NJ=;U|I>M3{J`wdn)3~(9;jLTtmS`9903}?(*T6&z)LRYw>3Rm}@=8X)X^Q9SFP-0`56ggw79p4?C z3f5uNk6*vu^+KMFZ7*tFKC%q6$jCT0px3bPlq@w||C{J5>6?zg0_q2zEhv;X$8`~~ z*5Y^Ft<+3c5$}|33jT<>y7PKB4cQzbRh4#urX`;bo4Y2qKD^SPFBp>STaX1zwt0)% zVLdNyZk8`CDHEpUa14EQj2F*y--}y>h57VL`k9RnRly=G8-p^E^LB|LLpgp(bBA8k za5$^t1Y8w#=celvj@&eC??@(b6Kj4VYb-IpIqr`-&Z|@BiX4Sx&-+|+eB7Qk z&b8B3F2rIeYrQp7Jr^WFZFSn0YLUkjc$RfwXz|6lEVuCwUnD$dc*2ew>!)}i>V=UN zh%Ba%S;?U~69%ODF+4(_-Z0z>0Y|YWnqbU<4@`4?uJ~3?5vnhprO#Q|Xk?R@2?$IA zf=XEB6X^2si8!s2;kF+tWkM`pj1oRx*Kfl7xUi6W}Mh-BIic8!7$A&3OpJG{G z=6@FJ(?b%3`4B3QTed6*DLG%6N-@gE$Ub?h!nNt9p>FU{Tw%_xK-I zD=)k1>$~gIoaP8tQm)A24>W~)8G2f~sm>mlW)rVqFQotP<-#cJGXylV?3i0be1AD1 zT-!+OY<$`yn@Zkrve{qb{$0KT!MODWyqr`n^!1%|t&tae!*|1PZroLdC2Sf~m|$~> z7{UIvOkfVPJF2A2mj75?g&p3e@0Yu!<&2r7Bo_vim^9Au`9G-^>mB3`x z49|3-wu>WgKV=s^(4ZhHm!q;yrUUk>EPiO!X90E4O1DbONl*qKk1F>yt;eqikLt9$ z)EblskUcS^Lti#o+;IeHXx>!;^|CCA?P`=Sl7JZ+X4^6;#V4~i7vwhjaA>+ZPpbJv zIO{Kl8d#(A3oinX{Y2{R04L}TDfqKadr>S^v(6kO2mv2i)DPyChjmoo+VP|2CSc>t z+3ve78cVM+O=E}(I=&hH=LT3O_6_OJ#*=#0gLePw$UDB?kiVkTN>ZV_;!(qZ7hsbg z^0~I$SxfR=rn*fv(1NM2ze_d_j2E%_u*St?WiP_|R<^L%3q7CEMEv0YT1eq2RLyN6 z$`_efYk}y?HZsSH{3+8Wq7$(6*2G^W+nbj1kN}n5nMot}&Awe89{1_dT$Oug*p4%; z+ad(l<7LfsO<@JDp*nhX7{c=VN10s!7&2?u+1%c$5h4jxl75>zn)o~C55ML!cc>Qo^uNQJk# z(^2lnw?@+wq~AJdnyc31bZ%XU@5{F9zKTR-wR){g#NC=MBz~blk2qo`KkWe#j z0zsgg4*~^7dD6=PUH6fKn<==fHOv;lI^x?M z52pf>S-c*Hv6E&x?A=-n0+M518W2Dzd&gH;^-iFP!%79pj#gU{jHG}fuU%ufX$>DG z7nCW2&}9s$$z!buO`)(MrxttS#DXeA=w+az%~jVG7M|%m-ZTiS`12ttaXsmo zY{Aen`N^D|Xzbm$sK#^`H6>Hsyb!Ho;-D9+Jq`-OiNd42cb&yrGcbQT<-OoHuM7%u z#KHz~4tr`sxO-ci?30r@U4H+QMb~TN3`a~?^H|NFBFVFlUcq_;O09F6!94HLdw=1v zW;oY=$Z&~1PrtkvE$v*RAybWT?eI1qCZV$ZBh&2;KM7s{?g)&WO2Z?vT&HmxJ|a#D_Y5!*cO z%~P!~LF3165uS4m$~5f2kp2@>OGVpqeMY&!3!q?tT4l+K@!1dfU{h41+55I3SyMgC z6pdxYHD7vJ!M-#$NuL@$8IeYSz1>%X%-+;MzOJN%~AHsAiMZS_rmv} zS9#R$m0KkrC$u|;vZ#o)C3YXyyH@LbZY?hyPGt3~B{TZ7?U5fIL8^4Tr_T_NER?=q z`+>v=$zF>@c4&22KumuVP5Psy(H*zVsiiXymM*h0{!7X&osIOmM_OYmg2YOr#yoprQVuRtL1&=SHM)q%rw#x9jYUVQAf`2)lFv6da2bXVe)icz}j~gjom~vl1+i`JWe97 z^&b!$I^``8%WIz+{|Ov~Lc1)N`Qp2d8#5IzWO8L2*@TBlLgd3F<FWfZ?CoJ4JoCs% zNRad}#7XikD2w)y&k+9sKeU9yYz*-G^q;+JSoF;7klbYZ`3T(P3Jp-|ecfJ}rl+eg z_ahqe4Ku7-`Q7V*qwa8d^-OG;8Vt}IxVch{Yjcw&xF5SMD41-}ZP^6wyU?lEo2`qN zC=)qST^ExmDSdP!c54MJYknH7qQQ~&jx!zEcz*r9J@LD4+g<^p*Va4#T_z({J~dfq zkqW^BiM)XALFBeirm3X8Iw0vS%wlD)WiJRRPW65Qny9p7nQR2}R=fB_wn>p!&_x~P zCP!E3jox*RpDPw}r}NNVRx2dYa2XrPqC(p~ULaz$orGx^E;SOey@!DYCAYbM(q*71 zX!;llnlH+vfcI&5w_Y2KwBj{F9(6@2nFPB9O6pc|`|J%3NH z2D6>cU>eeiP0Gg)az;(cho=kL(0j{mZ zvSr-oehe2b!%4aTZYC4sdk#ORw$*cCC#-Jz17(-O#zQr0oNq$npZAp72m+OUGJ6I~ z3I-kSs*?x<+H$ppr7R6LEK>ZAgH=Udo|@> zU(1EMrpZMdYv`9aO37Yk8pmLbG$czft3UD|K8Yo@)&u6-@(tbSoW8qprQb%9MzoP1 zA;|pu4>KdVcRc0Gr_7P?)Iw(V`$&j{tmkmKqEKYBBj%2pUwZp8M8Mn2_V5>2$PC6v z$7kAik=X6ERV(AHu2g=1ROr!*v?qZJ-P-C~}; zQ}6Da8}+OvK0X*%Fd3J(!AKnX=fVZFj8Ik+7S9%e7W^H>dZlp)$d?JM#$)wB+3ZMv zhc)%eQejBPd;3yH&T4uur-Xhg=%lDh{ePGtoJXQjb7Vah z@bT3papC$5*0%oN&sOaW zQZ|Ko7UEhNV~l&>;+^wA1x%Z*IbA7RgDlLQ>*B<8PbusrpcRHg0oh2!fK$M{h2w%?&ap++Ph5xYSS|F&Xv+Qt(>#tr1DuE z9&*(nsv6TI?N8RF8D2`x9N0AnE5GvE^#++;p{>sT!UWTF1-=UI`>g-RiXbUvgYwLNds`xu9XybS%;|Pxd${7PwLx*qOJtk!C#0#Nb?vqk2*A+P8isv>6dGuL~ zf1ib-&k*W|7fR*``~ydjK<_K3u`uv)TSOKtl%Wn}gYAs@*dsQi%6!74HQJpG&)_;h zvOS0rg=*iy0OOk!;aa+e*pPuj0eQhq6peZT?Hi}O?LqV;iepB4J=)uUTKGA|W!*dD zBfj?5{IB7JG41+cW(UrM#*}X6&Jtx;d%3IgmHcxlzWw(%OGE zccqrqQJsOn=Qs(aa+e*)UD)3wUt{dn>dZ&6_~FLv_h^EZ`WSHhM?0K@C_Zkc!M%(u zdJZ@}?!+ z`1=OrK>rkvIkggOL%5++s~Oms1T%CR>C*o6VVyxgtnU;xjFi0 za87<$h%tv1gOrymK)O~f(&&nFq~4@DHhkBvcYjAb_X|S4&&u`>mv|&`S$wHhdL>aK z=-0JRM>?bmnH`_5VT^(!tyKXNvtT?l=-AHwHhd7e8=%d&@raYn1a`?9W*TtL>*zYFPGpd3NcxCL_( zu9c!N;S3>%wXGl5@8lJrxDoJkBQ?W_OXY~ZRZm6w%^n4JL*#|K@v!*@BiKR#m!q{` zBgGT{Owss{ZzCZaABI=A9g4@7=z20Ru;Wgar44~G9<}nrbk@K)zw2;b$#?GS>Wv(Y zBXvblK`vxIR5JAx34j{xf{|htGCBurwVF`FnfGc1ueZ0FM+P-k;^EmFgrasX`t3c) zHTO-IESiCTZr)@s;+hL$?--*hd< z{K)7gKI)D8;jk}RlQ4MsSs4E85m?RE)B}h@fkG6e*mY zQO>y+p$zRthvOB~iMbT3yRQKvU*Cb#eS8xpK70iwe&S+9jtwYaeAu_-=pnSqo+N2{lX5d5$xvmqD?FVMyzM3 zvQ{me0c`(K5YkVHtz19Kc#vXmzb_#s;ym4C1!ewlFYef#Z?`2j#I9-{&%=yj9yGdS zDeVfTyY~9>XIV*cTb+SVb>DqVs`26>Yr8~BKplkPX~I>Os2F?Ik_ERU_!6xMPJryi zcd5S+m&U2F`*#U%Apxg9-#1crsa9MNvna&nRR<=-=X3@hfMHP{Ni;eFVe~>4oNx3>$JjRtz+Hr( z5_;(nggbICD8(!sv5?!Y87X7(0{K`uW8)(*^RRD!0#Trc?sdY|qH`jCt1O|RU5C|% z`+QYwW8qnnMWqd+oFYWsOObQ)u}jx}V|Br}DCP{ekgwCzV%+4;cx^W@+-pB*KK+2> zR}BNam7}$&^mFPS1H3u9@XDog_L_o>CzcXcH3s=6Ik#7UbUiD8n#69Ko3H8cO$lEF%E z#z5hHjcfkTxvM%Qq@}uFi4&F3SPtb>*TBgp_A!KNPUSb=%7~lTf{^}{ z;^)kvGC#)}OAgoO^5Q))LwkOPj>$~3S!fp`)S1I5s@u+q&;_?{>uG=n;6L{XV0gN3 z`3;!k59f#gzNqlGE<#~j2gQvmv3LQzRh53xUfLDPjZoxO>15q~giBJd1E>G!m;vBm zBQn*X&AiSZ@Pu$X9$F?IqD*SgRlquyERsbErVXw?4Y7w^nM#94>wJ|2V6O5h$TcU# z0vF@*Q3L?COM{3{Oo8=J62slH05IN2ByZ!sgC}vf%RDu?&}CW{RYo-PL7kk~PGC3( zsGnK*YHp?qLM>1bG@crxUCpH~jS!;o6{Tyil!@kwb{dR5+lM4vc;=~;wy4jfgwdBr^y%K3nQm8v1w-5vX=-< zBq|DSNs}ejuij%!gp?V|?|F=DyqcImWrs{d@o5LE{8+H8B6Ak$X-wS zBZV$hTDBd73Itfdf-X>48eYI8yqu)(+;RW87+5YQM!fb_RQu7;rTvuIkt3VYEdQV= z-CB^mRC=%CA?;2agib0wgWAEZk-=oup^B=^f$$uL)*O66$o~_?NKj}Dxvcqd1Pc+lifQ=EPS&p&Qd&MV3=of-L691)cCfQ15lTiY4#BG z2qHZkX9XmR{(n?1TJW&8Po^WVk3KR?2a@VqNOL@B8 za{PZ`!ExoROIF&CV)+DNlBmM$Pt6P8)a^2FJMV8EU7EczpMOR+JvMO0pR@&K3jdoX z{EzUo$5Rqj+j;EQno;`!B4@O(iSW*o?&Ov#+vP*0xjuUMh8vi9dr^fDwpiUm^g34N z(vvaD`RFSXo6AcSA7Mw`aZTS>X^L`Y87I$@M!7)4?|3juUd4)>=(9Imoz|ukd{_Ft z-6~YDSk&HK{FjL~5-o8V?+AU9!%R8X#AW`kq-QMOQ#`L~FNE`;Y&q}aoxJo_@E}N~ z*xzI(C_vl(s%>C-X*usD}cOX6?UNxhrD=0{~Yb>4J*!_CtG7`z;G3b(m^#H ztT^|E#i3{6_)l#*w zbWMYIMRm1OT+|b@h<5nCP0FJCq@-Nw4)&8g&^rdQIdn^g>`O@&p2A$&ur+oe|3<*{ z@N1af_y>7ThME9pIpl>A1DYkG-4QO$n^PU}=vGj`4AknHfh=fAfNa^|!=58o*Lq>K zvR4_Qi|1L?A!5+AJRV5`#Pu_4#%1< zrY&pD;xr_T&iKHOUel8oZ>(dRZjjD3`CX?uh%EuRyT~u{t*`Mh(}Q<0Vzva36!j*4P_EhxM~uw7vt`VM5UFM zw!VDE#B!x*-K!n)X+N4-jm<&F-h4xw50KK|t*1@}9u-u}Y5bPW!QBGmWv+XllW&9m zdLYS^k;y#{x(M5XK_)QG zDwXSV{{GEC*P+Y_ErcCDqp24OBub~r({=AC$^U1%yrhVuj{VQ*(|x4whitRzeRQRG z3=qsEGI4?3T&&;anFQ)nzB&@#fJEbt%jDLt2PCgtwk)g1Y>*L*UJ;F#mrp{A_Eg|y zc3=RvF%IEc7y{z=<>eM_`YR!;xINQ94OnarDeK0a@)Ae-ztFR6VX&{GE@f8dot2Z* zqA?(l3PO_Q)Bq8diuGPRBE|Tfj^qDioIBtnSLVWS!OnB~Ka=G-Rj$_q6(p2^lG#Bm z$}>hc?thIsjztA@ceOS-hDyzlYppcpWayT1QH=U@e(he7YNhJK)=tT2_bGJ$pXxR=HM%Oh*VsyYV(U+HPp6> zT3TOGptlDM4MJ2Nn{SN_2NjE8mZXlSMkK)TSBBM>Y!h3rA7F=@40j%r&5`|OXyIRH zF>|<_FO8hTuFfG*6(|0A5W+Ed)V2I!rx74O0VcI|C=MgCvi2(mU z0Kj~BAazK?2kYZd6P(N-opgs+5hslXl7Hx$ZDR}TtA zew6>mXBgmUbgAs{E~;hj^DInD#6!*%T2W%u1qcEzXt!4o>o7aU4lJeKdb~I!%u(0p zC6kphS@@eMV1_ATFS?_85Tv22NJZqY8D%P)2V%9B{NsRL`viJ~NtN$y!SAeHDSVz> zu^N3D1xH^s^EB;@oEp`&Q+TCCm6T7E8ng;c=ndN~&Sr|_0qo{1d$LIX=YNnyuIseh znkxnzJMZQnRJmf-pT?&DgE&usWM2x8sz%`_s%Y;WpVU6pl7%~-6CQO|fLNz6u>v|S zr?onS+9a!5+*Jz3NjM;foVPxBzH_Y&0RW;Zxt)A)asZA$DlhN%--)+zexF^ zD4r)IL*9`vgk3_uPQ+DUR27CmUr}&E&de{KN(qi*DDX>{@3=HOt)0V9@ zO(+NWSyC-CR}E^45jM9>@7|Hj;edRhQvgVKH>qTU%WEsOycju)B~Nf($Kw^q4JX9j zm^J=o7ZvKG=b8tH94y1f5zL|F#52&t^9hG~GC5*5aOL@HK?d(DrT|$T5!)8K4yvk? zo)qpER1*#PeR1BwAPPCY=exdqRq!1DElDW9Q?Ol+!8%qR9QF|R&dty2O0zBN!Qt1N zjYWNO!YQs`RX%>pyh5!+;C?r=Q1Cq z%sIt)jmK4J9}Sz{#W!&y2aASR%iDYEHRExW>iN_E+v`k484zY0BF$}mo|@8X8qsYQ zK%%zu1Zt|{gQM-zBU-|0;e;$>as%B)YZ!L06F`ncrc=sDS!IfVDA6kOxGXD{FZtPh zykhFWI2UcCr9?i_y0J-2H%KyGCi)}*>}W)Sbg@1M_EWEfzfIQk7PfZO@^lRc_)#F- zq4F|L%Y)cA(ra(9h<)kG+QBKwrXdWtfUfw!9yRM zg|w-wahWy$O4wcmQt?80H}5FS0@tH31!m90}pCq|>$9$WFg&va%k|O-l=y{)}G( zZ+{^^`jbd+ueH#R=Nc_4Mf&$IDT+Wv)W6q3Zjp5Rr{fYxK+v6^UBD0}O32nwmmz^rQ-ff3PTuByzbG{2nXKM%Cq>0T*B!&5UW#F?S8P zm?QhnNRo2_rpX-&`V5vEUMZL*?uF$^Y_l!gA~OMZ!}2pT@L3Yf)KnrVbgG-9M!y!?0$jNcyZXBb?NQS z?B3dQ6}As7OK-ca0X_9quHUUI^;uL`@KTduvZJejFh)LtX)-U@Ns&0EIF0+5}5RmDuJp*fn+yZk)Xs<+g20cH!~D87=`XLtfn{Ea3^S zl!_8gWYJ!^oC@9)1ol6FQR5|Sbt`~9NVT{_B!bNIwdn5KFlNQ>p5HO!p1my8T^8*P zOJ3ENCBPggeb3oT&3yn8+L{Mebd!?i09T`0dr>50`h=Y>Oz>4hLSLo}DRER|5dXAu9;xc*NoD6Q!-$2*c6c=28 zjk8&#hBW2QkI*XBR0qxGlJzE&=cKsY1sKVJW@f)>nql?0 zlL=v_u+;(m19#alXyfdoHde~R zadNSD0ApAsFsNcC*@d8nVYfeF<(xVY}s>UJ+4ehqA;5#|pE3BG_>&pM-` zi)v!uC{2Q3n@IqJaKKPWGBbfJq7g8cjqq&X?#vDwH)6fNgBB)$#4?VT0kZSgKTbR< z%S0)v*PgJZ8=AYpev5Pzh0;_`mYWy84P!Z%e__c?rq^Az#45s zf*p+N_N?S>y{SnU@jDHbUrGAaQ69^wyJ@64t5R2+odwZctfUwaUWpT^%0g(huyjFQ zPhY>zIo7zG=r|$1Y83qaO#6#y)%0Vp33McwM|3?xTlWRHZLptnc}4CgkJS6Yi3L(~ z@*b8|GQfb0M>qbF7n;u>W1m?QfHRUD1-*w$v^~FVK3g5QK+D`v1K@Z+yUeyWw+#wO zf#cZ+hD$47k^F_jj%R3$V?n)i`1V?_+DsWMF-}ti(5&H*?w#q*=;8$saPNPt_t`h; z{kpL-X~h)6-I`Z_jxODr3yqijy53K*E%B{MApPbw4#^fg9@<~Cp}3=zk=14L0e)uF zJ4Qr>RGyVv3m14!5u@SHd0svPiUD>~gqLmwecebCB8Lt^ArycD>{bH+_dknRpHTEM zW9wb-avF0DkdPYbMFfbIg$o7a%vCO~A+-I%IBZ`@X=}+LqYhY#EBjveQ%U4}ltWQ- zn&n-TNXD74;PHHCn5b?Iv`)Uwf;(bA!q249s21Is^+c!0lz3PnGn6FH^p6b{AzFDd zJV(Xq`;F1TyX9~FCe$lfEgi`&pemAAlRt+B0zV(%baoKljc6VloNVZ#oRI{Dx`nBl z?bQMnJXG z1C|(`t=ed&giHeXMFEA%tWYzfvwUNx^o7B&9NFK=sfpgqvoVS!L?fw|Mln3v3B5hT zO7}W(-l`m2=mC_Av}p>Op0f~Zd|y9(RLIcd0zdyu5M^eVx1+Q$$SS2i(smR)DYuKB z-_I+Z+Xq%6l84At@Vhg5KoS?&NkDk&myh5&vpOe92Qlh4`~003E(wkO_&O5>;7pKy zaIoFbJlLpC$6Q~O*g|fwgOhe)>{ie(jn{ndrox|Q*!!_qihHJOeZ9&r(jb>KjcD6$p0%mU?Tcz`8@Tzagv% zN|C1=xH*0Pxt&vyAbzfchG!McEA~NIPsse)1cMc>m!lZj&CS3G3GHs!u!CR1;*aBp z*N^_ya27?K=o_Vm$U2;?3#~JJWb1C~`R{42zl5`Oq=e^^9jMLRy4YIyZhO5J>GpLl z)%o%t2A3h*rn*Pc8J zf0S(XiBxQafa`?mtg@Zr=NVFxk3+(^8#!xN)|6_vI{ktW7=>OYog?Mi|4%(KJaW^= zuIK{`JmrIm# zRMyFCW7p4|`g*+O z^fcqTK{IYmUJH1lZYpEiP+ps5=IYlSW2Y~IIoacotKYSMk6>t?)<$y!H%NOKySL@l zFsQ>)Rt76yyEoFf#jY*`)4F0 zX3Te|t`d^c%6E(F9wkqF(AvtU%&YuW=k zYw_Lc1v>x8NqMp%?c?Uiv%V|%}Tm`!=XA*yfj3?7|?=O zAgzSvRu$or`tL#@sWfXBUx0jP?ZR~pS$y*4>onP` z^EnkB+Y#zCl~tFpl(-;5o*u_5Q29n$Q#0*0cFW?M4xk@~PV!&ds^Jxhiwp?4VWO)H zwy7@$YUFQdX^u|CS;ogt<7s-QH`X}7m06V5eTbuYU6d?|k&D@N=<%kfh?j~Ce|Fsb zvE>+<19y_PgAln;G(`WE+%=T*f(3~Ftq#h!p9q7l!7S8AdHSLIH^C!oU|;w2Mw4tr zD&@uN87Vfhwl|`ShGaH|T#g&<-qjZR0HghkbyB!=>Vic$`fmSoIjgnTZ_OCukxI~3 zQ(r&x0M1-y2dPl6lxFbYH+@z{6%7TA;mY4&fI zY7;yMJNXFC9u6)K#nuoe=MqBmqlM{W|41-P{Jo$;x9mgV#AG`VhFrD{}MztAq1iORZn+f|!0~GO`G4xsjXCu+tJk zy2OX15Voxx=peM~$358E8y8y{`trRCXL-N2gwR`3r#vvS1e2n@k8Y}hmvsh_7H0mARv2>0B;M&sBMY9e*6UyTE|?z@?feEs7~?E(SyMvk?xJ*vR( z^1+k+TKmhN_7i9dIqG&5P}Ni-ysKAP9(-a2rG}{zc-`Ka2~odEA7h6GJTA||0Ka^7 zh+kHjL65Ql->l*JW#V?oIon|0-FFYCY(TilKfog(l2?zu)Mb;x%}{9qf*qjk(Js80 zoj6re$y;mtSbxvX7(URR)I^WJ{Ls)f2|;^#;P?rG^P0b?&7oLsFLiWZB3`XRtZF!z zOW;7FKxAcY04zs1{(kB^yj!|D9XGvPV;g#DlkoezUbq6>Bq~@Wcw=XDko0a1JuYVR z8$UU&YJ`KrB%dAN-r3iJu+ZPY-D%`T(As5obFFe@Ld?EA>e<7gCg)g*V-zV?KCoGU z;wB06SqV+JbGemd>PU8A z7eU8Iejbs9hM}CpwcsTPLoq700VIi*7kW(yqb4TA2!6`rW`$as{<)h`M|HL243cCE z=k8!;6WJK*?RlFR=t;@aKij!(UCnfeRGlz;iXuq^Rwu?OZQJ$du?5ZS9Z+bgCl}Tq zUb6~y_FEgTPOliV1_2zy?3wEcb7}Juvi^+a?h?1qYNDtB5xbEIuq<@VFqn$+jJd145u)rW0C8?g(i1MsTR|c#FCaKI4GY*{~sT zBNDwAN_8F9kb0$WbTxcKT-0W4sW|q%-0wuxpf5;G3OC@s;)@5|N(X__%z+4oU(aeC zXRY5}DI<&u=iPh08r%Jy0n7&S=n!~LvujEzR>@(S_m1H}u??I6ghc5-#n)E3x76{o z`g-%kpoFpzyKle9{)EZY3O2|4%Cp%y^&}uA6d_2zn4lThx-)-H+5q@G zsZq+g_%MpKbvJ7BAEdi-ae{J9e$OI6Y-CLY{My%01OLeQR+o#(KOnX)?M-u%qdG<) z)hZ?<7*T86k6}C4Aa9CTxSnm+r!(Mn^S@-d9c8Xgdl@dI{OoUuug)@afBFOXzh4M4 zF`*aup}e>4V0%IkF*)LNl$tkS0umIz$ISiTqxi!V0wnj0zY0oaE(-5C`Ov}0n055{ zMGwHf(DR|v4)XkUn(+j}PR)4bL9u@J@HG*3=o>y~!Yz#K1d0t;9yN$Ud~=Zjd_7HG z5;rgt#f|Vnijf@t6Xp0;n$%%tN~AFeteX_N_Yc}S*6)`^pzo(dR;vPxtxRUh3`6dW!PEjFfd+LmvX?Vb9{g^?7Tt3NIqHEf6{V z9K4W&ff}{Z?=eDUB`My{8_n_y4rs&Z)WFn5Wh)jZy!p#2loxD7bkF@}Y6r*5RMYtO^A|48*KF_qd{H86| zC;Y!KFPNVWfc4z5z~EJp%nFx1vw1^4u>(++$|Bw^e=WXx2AoRH2vi9!kme%yrA^ja zg1*nqd^WwH#>vF|y^%p^*iXd$va(bj8)Zg5wb5>1>)ATc`EmLErC>Ots*ekuZDW0X zvv>xO1M3|s6?SmW6crG^#S1eLTR&xNj@aM?A=jr~J+asm^xkh?M#;V6vc7_A!)6Z+ zNEQizd-(zJu1ieO{W6|)pp|GCvuzVBzM$NK#IP9t@isY`HLyuaj;(KPx)i?473bn~ zWKf}J43NicF z{f_TX@DEh&N~ryW2be?bL9h*TPG#B~_&MJ|MZD%P5m7`VH^agEuf+M|S50$75fR!~`wxp=k-O-8iX%9`i~qDtJ!^H7 zGXPn8%jv;^9}?RFI8=isRkrS%4zXbSM($P~^g8VIW8S^r;N_m~F7qui~hL zfzx#3bx`S;EWrN$XSy2ed(135Cpt5v|G+6ZWb1yt zfZ;9o-&P8Waj!sxqnq&+nPM}{d(1HcAt7J8qpdWmp|!TY1sTM?_ud4g@bzl!N`j2H z$(>VSf~qN%w-agrwkEu)@gs%f!y~}4l&q9|*fP@XD=-L`DCQtN~jWw|$>__8ujHAg9V!SZR#j`G-$A#g`RNLNc%~ zEe9l@Sg3a5BXn1c@oJA@t{E8W34VL1xrt~E7Qt9m2gsZZSK`w0HAS+G@sN(H76{t6cNI4K~WgyGhWP(v-|M}(PX7`A&N+KFFT z4HhqX!lsXH4g{hz(e{rfNDfQxVsvr_{h?Vm~d(Ihw0% z6`_6(NYWm9Qz^F#mHRD;*Ekvy6<@<+w187);RuS^r|$d}hd?N}nqf`HD5eaRP+-aU zqUk8__y%P zGx5Za8TmnQ3LLZIvgtO8;VQ#%_1!+TZJiCpg|&*fo&l5$bwxjVRtAstdn$cq_{PqZ45YHNZGu`2LQnn=yHF(G06SC-}`ZDqgY3Fn2v-Do@g+)<6oIkyGh%16*oXx{u|QVRkpg z!j)-(p>@xks58^Qn?*6zFwmY9k?lQzk<#P9cbI)RC_SA+kl@nf?=2~Js3|m1mq4i?KJ!$Y5`dX(o-ymGe4>Ue6sL>1~E zxbCA-&U$zgi~_X(@)rmpc*?;PlFjF`6xV$PZ8LPxg-=lW>B85psv)sz==tqlBxC6~ z_-3+txsi6y*i>w`+Es$f?j)qhvv;xj^%u8s5>rLS1=o3Ro6i;L9F}HAai_E!@l5Du zQt-yX8jaJoRA_bAc_Db4CBaHJ{1*OU*jt}SQ;XqG|G14G3Nf0Fu1Ym0`hpx4$;j1d z~r$YtTW%jyLH|-SMkv4DKH-Iwh)$lHJh^_-NPStJO&SB%55cYl7m) z;mhYx%AJ-@r*vI1K&`VNsfxH6b1k*TWSG3JmwuaV`J)3#j~!u@P0_N|Qrahza|m#? z*ZX*b`1?l+bNlv*RZw=gxXLoCC1#NQ!x3Bg-T~s)LTzBp;fNsS)iswXm2B*S5-yQe z4h$^zHFB2(iDOr=rh>l5Ba>GI#mY1+mnUR_p)2+b?E=_bCCZ)_a^N>1dkXYXAG$ivnTf#K*(U%C)3Fo}PItp}=L$7T8nvToWRvAqA$79jmLthoR z`uV-C6c?_bE=*f#AYl!hh>q&O;LEFoK9IjNk5}|yy?7#WeEhhV4|Y%4GSE!DKrIqQ zg_j`&B_T$g2-2TaVybtZ!uIvm$4c?Hr{A+&mSVOU%#3Ewkkf`6$Q7o(mV>}L3T2e^~rG2pj;~(k?x@#x+Ik_X?Cj`IB5CuXQMukF!c}Uo z$O%24vr^%OFiyelF+2Wmu&KMJF8r7r_&&`p)IR6}`C`%9ztFJMT=lvn#!HiBXp&nF zc#%d7Ok~Lnxk%l;P|+5G2s%O{6uH-4h(K@`RZwo04EH`{)KX`3YUla=NFg68y=tW+ zRfS|%+xlMLX+?ysG@wK(Rt;I-=Xk|!5e`6TvLf!t)A2MU+0o5288l813W>iTDmb8h zB*yHYI?}K~zrf#HBK?~qM8q}<6(jiLJiP(`f2HA|*`Zk8M-d(&+zimkY?O(7sep_E zy}BVPP(^&ZY$XH;7k9dpCmvXhhW0HFX-X7E<}#Yv>jZFpcNUTH876xU!-FX4Of@gH zhF=Zd&j|W6jwW0J%`ra+Q<)qh05I*L;_P}D{yB*@gEVX~UeAz`Zabs9XV*Ipe6R;l zlSc*YU!y+}z+{2N4yx_CA;K%)7~GY$$ycTQCh6&^{$%g9f((#$kZXPyQMSx`E*zsj z_;alxb7a1&$a5!dZ6tsF9Y#l}{(b7TG6IdJQ4SRpWDBlbt&cy-!g<~>BYdP|w4v!A z7W7OVp5NtNyYWWGWRmRLV}!_Dv!hjuPoH3!BWr zmGgC>ane`YxFygR6JPZiRV%mZ@eR<)8MLT3n2r6K&6(`s{3H@5=JXD~_ni0)yN&e3 zJ}EyNTD0xbXR9^~(nsYcLAELfup|5#g^y8U1WZV;&2K4sCWy9$f3yRR!Vkq=PGyYs z{^K51b_hY_LpRiHX^Od1>lc6)DBGS91>>dz{S1 zmw=4%at61b(Z)<|;!l(kF9k;Aj=W+Y!IIu<^PiBFCy&lS7XpQSH=W5Ir$#LnKN)xt z;ViGUT44BTyS%6b;6dxQ57HHv6Z{yce9 zoCm~Ja+1qHN2u{2HgrOIymp^WjBkS1_wpmTYvK~k4Ejhf-wBlA;(@j-<{hOvZj3;( z+G%BD@iG@s0nr9@qmkFoV+|8h=Pf|H3QG&?@FM?sRdNxp2?I!ELA>7uFzY70*ipXQ z?`xHJ7XM~eh)S;)S@T0p)~&ctOMfmV@?T*A(>5erCHDexBC z1ZUwV_#E=h=;LOd6Ykmo9)0x<_Du#s?vIPfzAu_~yC)xNW4xcU_`^z+*DnX;z=IX` z58~1}ndqZe2Q_QSRNo+dRN1ACXEMnvI=}I3fS{R@WX^3N;E#NvL(w9WYkuOHCTU{h z$D!&EatrnaXjjFzXUCTZp?~r zz5(#@L+O66P}?5m72e;wX0?UPq&{OlVydon$GaQ-A6#s(mhC|yOxzOsPBUmLP`Wz` zv)8xu2JDu}(Zmc5=^j)g5bjQ*^sP3iMBwJm%kv2epGW7gCM`caW_ox zBj8558kP5@v>qgyj`CPAisSGYtF-GFX3tCE%eHJCFKuirlG9_CRrvR!6MWqZ)6WRA zQX9(hye4W_90xMP<(@SZg}56;5lX=^7j~H%{1T(^LCzV>VY$HxR*-Gn4D`fwtc>zS zuYh^);K|~P%(ZYuhj>vf6zE{6;y@p=pi^IqQjzVdVMJio512RB)pl%Rl$B&gvG#P9ZI>G5$f)-KrqL^K&}1r-^>D zjFcXy)YH)MqmlapAI}gZj+%kPZe`_U0m!r&ZThCKQzZH`PLKMUm;qah49=O;t`_}` z)|W=qKuMEfpF)xBzImFT11*^r!-=e9&zjliU3KRg+oRRyzH^4LGLHq)7%^FTa)Pl7 zuYmpu>)%(SJ!B&JkKIvVm>x#Yv+@Lr+$HCKoky#)#vaCZ+s?KTMd`9Yev-rqW{CDM z=})j4PP1WGn}R|0GIbo)kAvIWT2t+Xq(_f+jW=9f2mk~$o}v!Iyo!B+C7vChB@CF? z=lk~+CaB@3dE|);T!z9+!>Rf*je9)VnLeE5B<|ox z&~bRw2IfuiLlxhFCNx|dtsZDY@6ZqadE%VX6W-Jz&M#^=G8>FFrvyMiEmvAH9dUBc2a8aZYJ=nSD$^v<2;PCX=` zT58&&o6M1D6tffOJ%-eO6Cb_O z;Ux}wx~WP}$@vlvp-5o>%&=^>EmVz%4Bq5fOSKLSX*5oe(0-oGEtomN#qw=6un0rd z6tq8Tn+jX(f&WBuFeUB{VJDglLwA=$z9?SG3d7}?f_@Mv85nSy+0=6|398)f$X z&6PQr?AroE9yy!+ekRUO=G)xeFsE8{ca1ilC71#CvI!ZCRI&!d8C~JcsW4t zs-(@neHQK5uxJoJc3;l{UYC7OO=?Sf8S9AssegM^)$f%5I$1%2bI%9gU5HE4oe0R=QWcWds zJe!rmQC=w;4hHCyN{>!;J%*f1^>3?dA{i+Sevg~i5j&RS>tKtm#^JGjZ>QsQ9S>aD zK@8b2A3eK9*cuMi$-XmB9k;iVl29}UAQrn)pE(`w2854DWo%Cq>@W!geN7xv?pM>7d&Hd(A^fYy?OiT_>rOhi{GVYc&>95N{Q@%`bW(4IMy^dFsF|O(&SXpqPqr^ktj6v zSbDumrK&A|;@E~PI61xRRM93$4}2QrXXojK^VlDZQ**Mtu^ z%ZWS;9UH7*Rh1WQmivVw%e}@ z_A@dNJZcNLoN&-=*K%B%I&HzDA++LDI~S2i=Z2W4{4sazYEIt>PmDKf3ZwAf&|UsR z8(&}F500k8;X2eqv$(xhjizC?9)M;O*Uq^Zk576}I*ml|4D+PBXN)V0M}IO^DKW^A zMX(8Bu*vsMrQ0H}5;y$w&#O7={F!IwsW|~a5aj<0bre%q)&`=Br|&eM6Jc%G6!V(c z=n;E%UR7>H)h9Ohi~?h@{4)6HHY^&`06fl}bR4v+Ji5EHo7~FzaZVp@9;a`5sdv9n zc%AJBukvZEV)8ZeX^Akh<+yC&2XD_V5rxr?#Fp0vpWd1xdto^3Y}N#{BqWn^6C|!J zg4t}Z(d+qL)ByDYUs={MBl4hiopP_2Y7Te=Kvf2eam`;#vg#MK((bp~XlP*JBfFls z{0sxH0ZFvdo%Ve#nllt1KCA$GsCboDkl&BqjtU1KQeo>3tndE|%$RznFoEytCsHQw zTvaCU_(LN-!3HeG&g<^qk&v*F*Vj&PJ&cJ29)Lo{`?o$0W;EwU(n0b{q;fw`G4f;! zpT{eZ!5;9`ra?^4weXasUNaEk{F#(Ys`g*6-gP|J-ka3eVpQna9%C-}ut7Y&ds}jk z2vSUk&Bk?~((Rsfdlz9^I1e4ZpMGQ?5!cQbA)~0n1W$~__>jXsXS#XRU+C$8G5L(A?q>jC)K5N{Fb!Arm*O6dsD#fwcGzzI_cLC$;A#8Be-T}E(9&g{f zTqTVmj-V0ZX2c!3dgH$ zd0I&$xYP+c=}8vf8o}nZ+b}DJ=ggACp;kC3qSw54uQm$h28@;&nf=LJJ1-jE}k5^Tll$)$lRx)AUn@{!hoF9S*>faDy%Lbk=1fDjzhjRw@S zNQoEuPxmjFpO5dxMvqNl-C*Uv`JGt=W@d65>!@n06(-~^kCvbd8! zFw9b`!PX|tH`KuH!j8Eob%t(0zsbnStW&Y_Kxr#nM^nQlx+)u83aa= zC!E6)qn@eW;~d%iqD?erorG^+unPn!$LIiHaa9>Sxj)Ii5v`ShS6harJZYQSH&U!~ zMBP@_zdqAqOScHl7sfuZu-JO@MU9Jldy)1B19JS&6w^pX*BF@uQqh+`MmyY1jQQL< zN(lr0(hW?LGCXqZ@Ia8{eQI+|H4wLz2$!c8=y%5yn%af%e4G9@`Bd`PC? z1tymzn!yekO!y0@KM`cnU(SRZsHB2`=by?C(DtynP}O}&7dz6Cu*e|lJW%t-(QE)C z-=!t#c}7Y%b4qAE@T@i<|CZ-y4bp=glynfu&&vi!ykl_~71^Tr+#M(rtlZc&>uhE9 zIf9r&I#Zye?fiIffJUlcQgm|`Me)F99iux23$t^b!)5U+zK1Ly@6Up#pe+YAo@7Ay z6nb_hL42AN!ck^Jvn*d+x^S>7d3k_c#;)D{$7UjQ`q#Eja9=?n)xgjzNS@CecQgYp zo_$xU3wwo~c1$fsUD~Q(+;RwTkDPaR>R2ME3!sy#&6V_8`?q?P`TY`d6tiX8!D|3f(X-Q%R251l@0$Zd!y6&NdUt6Xxoq}# zHXVJzL?`b95zHZ%;XQV5`M=y0sZ?Q;T3mypWl!KHw1)DD_IhJet(H_5wxb1A1u%jsBvpl+_ z_pv4hX|!^&z^xN$vuZ(pD`ofF3X>|4@ri+9$-$MZYD+6#TR60kqw=o`(wc=T#f;n< z)SOJbGq$jNg(Y8g+Eta&mC?Oqx?)Ir{M7e8ophntLWUQ3YIXaU4i({d!g&9v5Y16e z5icj%U*SOHv%bC&mJZ=tuH%3XF4wYVZ>{#bv7toPdI!n zvq?-1uYO88w2UzOeZ0+RFj^3t+-nKcHO^%j$`jy7 zl)$tJR-$7p2yD|moqSRr&@n}3G>;UOmULx)_qenT^P((8^+SFwLGP;8d0ZczrkZh} zmJkUk=^b|K_T{hYPpnAyXb2R&Wdz6b5QL*cdNXad$~r({?m_GWA2|Q^2aLzDqNaQ4 z3C!Lci>uBoFvRFe`qgmLJ+Vx_2utTDmf;FZ@;G;E(&XtUQ#c-CW3#Ul=31czWQY0_ zfI|)fQdg#>Q%#OlwORAP@0rh&9Z@H%q}}Q5al(;NaWM&GKOl#H?&sujHZZp%C2yX- zYC#)M$8!!iw8sR<%Y^u4726mxlE_KT`Ri#1?6Oh!d|;&!r1!BlrV=1#HO0z%7ESSW7j=poupX z@efiH!0^ibpMzlc-JD8gy=vZOn|;WIvj@T3I^GK?483wQw~1b^gob=qYVW>ilR0NE zDKZ>egtQt{S~ZnI3y8uEGKP2-h#*DJ|03vDD~I7-K*yZ-W`pw!4g46qOo7M6m=-?# zU-eZo=4HQZosLqgO}@vBdGBsuClbPykx)_aL!ugn&S31brDPdYq37HLXsIu&;oP7kA1a*BNosVtcA7I#7*&SESpvWjJbVFzg%;k zqE-M1VbITu{09;_(!4ewH`2}o-t01hkNy9C{@iR#Y%e~PzQ!YHfabQmU|~*bV!Yvh zZ1&w~Zs|p)*D3b5@lSh}A@21W4w6oT46ONrSnyk<3An+DB*{Q4iMYt+C@(${0lL4j z+Zu;AmOt`&N%Ko{fr4Wo8w=p~rmuS|OMu`4Gbi$Gia8{#v)!#P8FByFY(V$!aI5}3 zBwXDfRa~g-!0%H$$--rt-|r2ys`{j<;N0yz;SX>s1}9y;q(*4t7z;w_r$7EfL8AS< zxqPzmw;MQ`mXP@B+))q6XV($rbQ_Qy8QQyjT;(R*IAJVVbE^s(ylvraHY9E+PwaFVjtT1Qikwu$A0&nZC$7ktP^mc7QT zKfd>%xc z&|Cc<-2<8snceY`z${h3xyN~nF$}A6?E+2nW7Dp)5k%v#fF6EMq-@7|DkqL>?EnmS zJ2CZ+jeRTvXF8aaq!;?dBX=J;ZB`zQ6SnBGX1rk3*O9{%pM0+Oj`By5nlc%5>s*1W zSFOIAS}mNQ;#n(TFUVV(1GBVmP|&e%4vjXV_qij`m>CAMYHdb&-ruJANG(Vj_SHBe z>3T62r_*)ijFdXSgUO`T9-WOLVl&=i%LFX)P!XZEb|U=z!0X5Xw6WE(tI*QqUi;U=4l3Iz zPGhzWHnuMe3?O-Oj7p-8s#KAf#H*4%=4$^L>je7U;~E6;+`l9+$b*$~^c0qvBt_I; zd|>qCK`;TFxr(pJhb~RNl13>U ziu+2EKMENjFP}TE@~_;3*!XPxHoSfBGRBLV`K8}eh0R-77%xCOE2b`RE_1I&3}N+r z>@BC(uZsmnt>_2_*?^;0E$z1fA%#hG5wwc7Xlc*Mq%EOVcakd$_kzmXHKC!J($|5* zDR^pLhpVF)`FD)S0hA8-4w!!>A3tSc4!uA~Fw#DfhOVxxd-jrFP^jv3DG>}tg89X4 zyo->C$#V5K+*hkA=8us&Y1a|_SP1D4u$j(fXDrve*-z1^zniF`Ci+4NV46K~#o+Lm z3k!pvl-jA9G+7T~{T($tM6sL^E3l_R9#4VCEatu2II9XY#J}5W?I0>t`V*x9PXUp+ z6!0hq=*e!DP=mw0)wdziaU=5kK_0Ys*|lM3a17{p;txlhRZ*QV4V=6l@TGG;XFDn^ zIh+u*Jm$wXwS<&agdkcW^QuJl_^QDTV6#cPtEv)Od{w^c?F4*nq+bVIz3COHazAoA#XN>L`Xj znpD^1%3aPHN7%*sO^yw#!u%MTgE0g1bw6~14LJV#b_#s{1~4*R%H=j#ByC+CIBCEBr2#;Uo~^a90pL5hyIb>` z=@&Xve##sisq1`S4@v`b>kDVSE{6_g=iYK+6|NT%OkF7@ItGk!b)@E{>H}i zN+wn^?*RWl0KnETAT?3}A*qh!a8lF(OXKXu0FJF@r(1Koh;s8`TMk3HP#CbpvXUQu z(+_Evv!6K35P8;6io>ufsjMgLK9@75YhT}x`A%^up$;{s=qS2=hDkEuH|S>ZVYTuygAnwlt!QUYpw-v4g=3kT=oq@;}hV zMP@@;KAb6Mz^LYahkr4a@>CXKzl_`$gV^D}4h0z`C#<-H1ncJvVFwciu#C?Sm;=P& zd&2(fwio3Fzkk+Ph?stRuH;9V!{ExhCR!|eCSA8{`zpTR%Mj~F2W5r~ZLrK;*LUdn z1f+s?*jF61(At}_xnwsV!bI)8QW~5cx{a3grWiaji2KOlB3=`dF*_$BNmZPUY^gyN zo_*V`I1X9Ae@Lc)w%FFB=NFXyZ~8oz4YzgM+IcK7c3ahIZfB5ka_tL+a|ua_MAoX# z3XQwwU{+y{uQb2a10v)|G@7zWX!VKi3-)M6@|#qXGd}?T9X8#$4&nP7M_SiDqOX9W z?bm*)=`ZDh##n%jU6n#~?h)GJNq8FErMjkhD*@Y+n(|BM;qZjSgAMSMyqY|P<1#(m zfAiU90gux5((7D831{4za2e^T91GI1y^AD^xPz% zhice+G#W7}tin|Au0OI{8+<_12U>ip7t1hSkB5|n6Pls7Ma5_pCoD3~1!^jiF?0}w zxlESN{W77>;BRvnAAM;&D-*;^G-%cF9B=6@=$uz3z>m{VP}j08fHJ$ zITV_MwSedEFoM2iq!Dh#gzD-LEunPU!OND?=6Gxdi)Ts03AmG9xl@>Pdrje zW`0jABt+%L%e>N-_=*qArg_!%1|OW)*9Y{&#)Y-D@?*Tz`McW26@FDJFTPEy%thSa zq#kP_d?7PkCmOu%lDOSF<-YM1B7Kq_ajI9tJ9w?<@#F57 zp$t$g%%UN9F5E!={1KLEfVIFRn6Mg?+zp8hk(xsuiA{ZL*K35AVmzc5+N~dcur;#` z5c5EvG{x2cwJ@=DX>DAr)6Mqx2+0`tu>k5<-Akq2$%`f4 zoJ;CRo*cz1kW~yNH8R>HxF(r&PtBcDt7=51HoaFEMD;B2Q@LO8av%rfW1P%)iuUf! z@!L)kutHtP-Ad*|`Hogjz)j_*?AZ#kgw-`u7o=SJw1!6Dh&gvsS_j0PYuQE+=XZO0 zuPTmK^ea@m2{eDhjE)+rCSOgo(ZAyg3XTGKaU4D$|nX7G?rscC|`G zs)BU$B4o){sMzS5l2$DuPd{Jz$2@(?zPxgj$3(+>}( z>{a^79=qzv^X}*~j!1TOWVXWG$V+f2Ab>|{On`V;y0h!F**RXm?<50`@J#stOCP%izBV z-GL9ZT9|3U7Na?>bu0#4&M(h3*-_DZ2q?~qS1c$;$o_YPCNTV56@%J`2m}v#0Hu83 z1IRO?m0b74ZO%psII5gcEbX;&gm)caUK#qbWl7_`LrRaGez|bMlsf^siCIcqc3omM zI1+7~^2fW5k-$b7CTz48uhGAL{EMh?d-C|1tU4-m+2B;D*_j{v-AtHUr=lS`fO6*m zG;kz9@I1IxhLo6VC>uv8G9;)RY`JPwTYtX76POIZ4gyFeKmQY0dH2s284 zrKM%dR|3_3q)zG&$OiB>z@Uiw_*gO8iUQdga>nh;FC#bUMroy*$(&C+}GP8le&tUh?QIYMByVfLt< z$z^vLHD)|*+u**;)rpIN!%RouuLYQh^OV{Je0YnBXIcG%%+44R;nJHlHZO}P>~p<8 zSk~S5bfvgYq*%qla_oOHISb|A#(EG1n);X!)E}wWvVxzD6T&AWm5?OtX%&V$rNHTA z9ZD$zrVsrqEE8!CRcDvB!_~ZExxJ113b~YWQ)Da4e7yG*IW2PQ$q54P08!9%1SeL! z5~ipIDYdo*GPjm&H!e@U2>=pXN~SaHv*yVoK212ZjJ;E;4k(K;V;Us0O&8a73sM@u z`cG8yuPrIeQO310jiQ~`aYf$X#meUMj{`v#^u0bi6wrN9LRp31Ihi509Hq_X^>mGf%ZSe01E{ zJ-ZiBCVG(j>@}Yb{-QZF+4;G$-k2K!VPi*C*Ns--UT$9a~8?4mv^_$m|h3ig@ zcd2+X0Q>7319cb)(u|#m4uSy^)-OxK8bu_@=b=XNVpIsU+4`}pAc!Tf%E=8)3L)S~ zOUfnWG@`FuX#H*&41GpUOoS3ytebI`Lkc(63$0{NPLYGP&3T^Adv|6V52JwPz(+wU zxhA;N!3CYss)#}azyRv!2x{_@AF5>_ppD}TTU1A-2|tfz6ta910{63^|GL;q1xU3%vg}7j%#-pBq;CP5t={eHsDQW zE_BzQbU%mzqrB>h5rW$}4z4T|9Qh}Rj~`5sCff7O1Z$+2>|+1m!|LOryR~BMK~p|s z5a*$vXIc1vD6V&AOuUZ5L@_BY(Tbx{$QWlcle69j;=E{SEt%G-Ded2I8IO|qP5u#N zuvJ^n0j$e7;&t6TaN5a(2U8g(**f>ox29DFfNVFD zqZj`SEvj26IAXNJ#|s%B5kR-x74B(0SC0EHJG1BBMpwDu<;tOZCA?P(G4|?;SsE%z zr{V3O%67v4F-pW-jRQrjoTAM%CMa_jzXGS%8FY*`CRt-WT_gcQZyJ-kK<$B#MUz8x zzE=SoFNO@itEj5Ebj>wu$x3eB@RPpEHYQo`=>kjL@c(%pg;fUyID1oHq?g!o^E3ca z>~-q}BeRR!Xy%QrSm#TLgQ64DqtEi_Dw`jirV4!ZJLto3vFTSZ%Cb21f4Lfik}1}L z9tEyo zm0I=r5qS=#WHi?8yu!u5d+3YiIgS4^vhH>jjr3SJq;>u(xLJPkq_LbNl zk}Rm^`r&o4BiCMEw~&pCO@_@|v%}yDfuh`Y12SLyUtOrWQ_5Y~@^)1; zl{&ahGxFQYetpdAVsCM5X#Q^zQkwMiFsJ>KBK=o1{D>hgC0)qJr6rp&w9*+KGx3&N;K@x~;h1!Hz- zPL>v!S4|Bf_W3a@ZijFjHG}K&x5(zmJ*IHK?REt37-61e9IZc~&lN6E{M&Z<#zLgh zEvV2J&+MU3WVPF-WVpn0NL-%LCCK-Sq$yMJoD|HwSTMW#E+(Rj7!WVGi(UR4wS}M% zn=}H2w4{GV_;aE7gH!XXy4g!-2vgCUJ?(3iQuft(K%V9Q! zu0`6w>lA{|lEnISLs=`V*c0ZN)sDD22iQX#>fG-)N$)@VB{!(&5#55iXt-{Z(zDBM~RxI3TdN0&`&lm63zPK-k7N}d$y|TRuP{@K{nQr z)PIzpU?@`)jeu|Y3F3QQUr{gilj&9V62VC({7PUuA=qvBPzUd16MXo#c0zuz;L^dh z{G|jD^FQqOF8b+;^G{Y^S5xYUKtqnQr;_&M*&=CyTVS$UNBh#=z7Uv^8x)1lbNA-e z=<1J`sZ49VM3VBS7j!kq52PIq*>n2q8-K&OcoSeOv!I!v|Bg+7fL!pnF*b87`2Hwo z&%y`-b2w?1EhTtu-icU0wbp9N}Kd{$z>{J%;W;oX#2%$S65g zo~2^?MPi}6J5+L5s$H{uCrgeSueQV4#x6Z_bDGqkmalkvl_ZqYKCQmloB)nD$vZ6B z^bxz*BMh=>Ou&RI3smO}ntT?5HEUNSdj)abB=;&zF1xPP^=ASIEI$}QxnS`Xk4~&I zFD>+cayE9po@t=`Z@DLEC2B88{C}s7Z>p<>$i8fcM&6i?bph~-P3ON7(f*}B#a-P) zP*a@CF;X@|h{c03pm4C18Lh6|jT3g~D3VT%Hg4cARJ5L+_wV#R9CSUF{$*jR7ot@Z zfgn1i0cwUO1mV@eMKkyOG|VE5V88;Ywta8-ZqgLNTEAPG)JWITBBX7?7LU0-h$6G* zDDx26bHl$UcN~0Dov(mMxH~vnZHPA7R$vupM1ankt2U0V(u)^(?IZ4Pwp2a1Yr_vN_-@oBrJo3u9mTw;uo~*d zCKq3r%o;dT1STg=FJt1Zj{<%(Fn|}?q?^e}JW62YDu*QRI!0BPn(5=QY17O);SvAY zk2%bUvm~rFyh0w89IH9hpC8GBQAhGS_hADf%?Ew>%~CGkK-F8{alIjc*eO8Mg&z)# zu-`9Q!b6&JJUBgrVQ%VSoII(8S$y+_{_0-OcG!?@P?i@7E1I zZ;vFe&b^u>@E3k>d#xd(t)!y}do_O%Xc=diu}edqK>$fgs(fvz_81bliEM*vt061( zuBq*2TuZ24Fz%t!>yLsH>D(xr+e(>R2r~a;+ro}#K%7VNs41mc*){)x1rFLCm+#ZA z%N!;)`@Z*+tL@7>4&JC?8Pa(`)3dY!JIP2Csw7Tj`0rt=*_EbD_lafl!KrDa4vcSa z<;MZigT+yR7JbUUZLY$Ca1__HiEjQ^9-+5MQ?{Qu+Z!QxDGblnnUT0RL!FB8VB^8` zQK6X%``F43z|`yl;ay$@*nxYpSeK8Ceuo)6Sc-hdlvwNeYXt!azlzD9m-qHISdY(^ zP=Hh-TuMrsoo3dH`8oJ|a)N>v*LRVsp)K%^yo#hIT>uD01h~ZpVo zPD?Uh1Tu> z8NnmKU3o6CZuKtu$#lP84o3a^z`>Z^yL9H+RW=VCBL`bpt+5ZZaf=^;7(cq-;VWHe z<__3OXfCU*dhBJi%auyuCw7Uw{!KHu`6~K0^_3&8C@APBFbmgxJ|sB{k&+fU@rs|P z;!u~O&K4iFM=-~dlSfNrA9g$0pL>q&M8zC??xnLR(SigXa|&KAAn{0y6ldZ&Tk5UP z%tk9C$MQTrcA(|;ywNjFA^Id7%)?=Od zahqDaT!HC&abC&*K}FCP*-h&;?64U94elDS;*OQI+Z^58SADu%-Rc`xWoq)I2+8@I zrl<5@I#$wwQ^m#6He0$5r@e_xo0Yx9+!x?uR7(_aFXCC9V>1CopYZ$4B1fos${Tx7 zLqR+kg2Y}=lJse|om3TFz;6V^C?<6>u%ac~vzN%|Y9seFAT~BdtFvSR7z9g=^KjM` zYOjNY;UTI96?RG*dsMoAOFDnP-vu)_L(SNoN*Nd5B|q^pL1V!vtLa=CaR0@Q7oeT< z$sid-Dc#D0T0kHuRCc)A6&>JEb#0esukF4s7ESAt!*OgiiuBf|g;hCwH_RlPL!=|X zF-r|=Z8aSts;$A;ZoQ!kl2?DFVpgcjs_VaMx_|B($l4tl;+hmuI;*U?e*pE>bRBV0 zwosqs=;x9Cz+eL@7XZZPmRI|GO7|_V)4_;1^5 z=&-sEyMIGCVBA;o!bu{f)VG|x|K9I%g~pSDgn_$`VGGL1HG-hqCIVmRwDmn(UH=rb zMLx}mJzYkLiU`bwO(6#`yUrg@K#C7wkQ^vHM@~iSM(Jtnk0Ybu+gn^ubX97!6PeWCh#AdN@_#a3W_Dqhcn zP7av8nzudqf!O@$A$gVJ$n+pMzPkuUb=?BbpbjU8+?Ll-8#OS@2EJ;5zsX(jTEfxP9ig!pIYJRK)*>%epMB1oH8^ko_fP~`ixAq0rqYPLL`D-Y514FPvs$f~%%lXO_SztCg`$DA zz+%oLi}GW6;8yMoPQ16PL(hVQeSB8uR_s#0(hri-w&zZY2vii+s{iUtn$V4va1>q! z63?~ReS7#=rG+;jmLdz=U7V!C42SxTaF*U|9*?o>QYQE@9-izM8Ye~R0~M_WE7#A! zyy2nJJAJ@e;2*jj6yG@NxNA^m@(9;aZ{J65m8m4yqyumi39O}nm(_N%Iq>tQgT6@1 zOO$^m_1U?OivzivC)iFY9D7V`+6K;P^y%>A0zjukxAm$6?`9`kNR8>ra<@fc?&q!0XPZs4$eKBMLyxK%awV7&qTZM#c=Zi@Lfc`T zTCSb*AnQqf&@+hAU%jKoVfO2b;x9bIFpFX_6?$ZBAVX{F?+u|k!`(;u{Zwf^y^wWU zVl8cM&CO6$%Q|@{*6Mv~8-fB=RcsOg_JqubAA0V~PD07D0k;l0Y=|cz?e5YgEZ(WM_g^^Hpc!ja`|OV635s3Uf|VaSX1fI9pEp%xNHc$5Dz)l->w3j|H*( z5E$~{EC3w5X`Pa=Xt3f8y!2_2Q(43cU*RZLJ?8#A7XF?-!*FPTSM*P&86tGKUan?NCU*WmOt#L(IQY$fH}0Ce^Gg5dcG7 zf1$kyck}l|(?HZ)waeaaoKZ1#4lekm^dTXf)?knAR}G5_R^$Gh40eeIXe;lHc*NBMSyp--OUn-X zHzys8yE@P1e*62gw_XY1NH*v}zlnlFbGpnJuQEZ?A!76lZ;uwYVvHg?he{U0fw|pi$vA_lBZjO|L5pM$vps_( z^Qs`1_DE3d>q?xx^IQ-T-TuIA0TA`dYUWiN7jRwg^|(;$E1I*(Vj67X0%qWmax;4A z8Q#2-jpKgbo}T-CiqbqNi1Q>uG#SilvAj6XMsAl*Rfzvx&xG_^#eDJC?h1_~aHJhw%R#s-87eoR&@00rhij3=B-1IMKBNukhK zYiG-=5_G|y+G5GzrGu+A2-Sp9+y~FdD=655u}rFphnzePV9Wy3(;21xdyj~(U>Sb{ z^$dM|P%&S5tL}S`1g{xeI~Jg|66JhWy-Kx)qNy;xn?`Bw%h=Oa8LEe-=~Hg&Pu)-5 zA>elqx>dXj8q#-A@0Vpw96OS|sPI^RZta-n7Sj*1Hb^{l@%%$c8zi4!^ZHd&#ofN& z!ae-ZodL!WeTO+}>XJa>tCdS#9FY1I&m8vY^%smB|7^2nS`XzC!1e-gQ2`8MXnUr2 z5XrTt2Of7u37`F_7eTh;X`}wA;Wjw+8b>b?MruJPJJY_GM@u-!n#zBaj3@&}BH9d?j~ky;C}cpM#<1@vo-W|uoC2L4lpE{vCJ zGy5nM6AqeZ!Fe#9<}8sWu@0&ETA5|f-UEm(lgTU;tp0b)k2r6+{3yNi+D9Csz==!& z-BZ7MY#L0t8NGzs`fga@#YUx+?uv~fdh3}@T?_=kRhHAepb1%;-+p15|DlvR7L8-! z2>P6#ng~?+cnd0N{+;CJsY&4KAJT3=GL&EbS$L4fPVtwOW=TUMN z$RMBDPSH}({0Ma?sa|~(SC{<)_Ys?-kc#2v2sn1B(N*;B2=aZGDq2oPKKilr5AJ35K6be zgXwZciFUZCS?;B|@{C~ndeB*>VF)I}%;H6#r@GSK*5 zHPsMI(8_VlPxW@2(($G0Xai-H?B6n*-IqO>mii#)U!HDa#%MTxm~1RZnKcIO6%hhj zKk1%TnbWMqW*$wdm}zMaz^11El_Y!fzTIH0V{+Ww{1YwSC}MqJz>n_@@a`Uv^_;Hv z;E;{@Mx*sW&lun7{ApoLEntm@6G|#K$;Ih)%p#=SOuytaxLfa}7adfRBODjfHlNkc zU6+P4z}Ayg5G$60i;kmfA(L3Jh~1S9a;~!@mm9Rm*hK)tyxENgI8q;Jiz2xwhp#6` z#Nbb|>P(WU_(>3qc5gF{gh@@EsC^o;(BbGeIV3>FgVT{!qIm;gOk8^lyun1$(My-M z?Yme-^4;eDS<;3M?yW^PIK)N*G`6Cb(vs`e zi<1$0tZJyJnp#fYLm67s5XY8Kq|X2bVREppK_k;K%&^@tpW>J=DzmAh&gp{7`Yabpj#&K_;s1&joiy{`}RWH zJHVqmC7@eE71r4XqnE}w)w4;WP655!hkls>Xc<=s&y19pMq%HfvzGa!>c`)u*S?ve zQHPfKUncjZyULNZeA6@03Cm>vcy8~45_+7iHKMN-vZ38Kuft|raR??@mbeHezRVSq zX;9*wmfS-a;@BFfcaK|+=8EtImZG!vO(}WwN*iEyPLSBJ!`@;Og3U~)7WpX|JkD@Z6h59tHcBtmBjTDSv^s zmbshC={)(VhQiR2ZO||{BL>#$6WrT+LYKwPQHC7ZIni;Y8Bff!lMv&Z0Q1f#CSm-f zXgL~qN!_d)ioTz&;PnnNv5^2tCcy^*QSI~KeiskpoP8YK=XPbL2bQl1lSs_4S`ulw z5LgkRx5`-}#NzzpkI-k;hsKaWSl*UjfuSH3+g6bQDv}|-;u427EWF@#aXvRq7($FI6N0!~zwpnRU?M5=RSX z!)arG(yeE?-QfBIC>uz^Gv5DFV@PsLuHVvITtjyM<~`c@vDJ+c0R?zaN{CJ{D_}!I zr?26(`KGqWt@>u_%R@7SX=nfX@fFFex1?YN=*>=NTB2JxRZ>7gAg?L|3Rel4IpD=W zEgkjirmQ4N-wf#7(-Ri4Y`~8G_Z&VLq$~`V#nTDHb&cDi z>+_DF6Qc>k8nX&+;4{Lu~8$@Jm zGv2o>5C6=FTd>s&T9@=-Uc%h%z-AYAlwkGGw-n9`-vVIRL&%$VrA0*HX;(Q!m+N#_ zWU}@=T}T{e46S;si6Jb^OE?(w?!#hzT&ys+L7)`c@>GFenAugO=D1hGY zQedU#*-Y9Bb))#X%ePQwrzGGHLSo|)<_0U|25B3QOm1n!N@ zW@ffZ-v9C~_a%y9WO@yO&n5YQ%uI#ky>r%T9Y_iJIFAn*AwP+m-(`z71IbWNw{@y> zQXErpw(7#MZ80oOaR(q+?g2-=i$pmw*l6En9N{xxGWvDOU^Ty(;SKYqN2JSwtL^r= zB9q#1bm_rNEdx{r7oq2(Ys843Mq9Np>y?aL7vMQpH!Qg@+lqm*H%G%e?ql z<>p&hdJi9nb3T2MC#TSzzGe$DZI$RMXh}zlGN$so*Fkntu@ zL__d9Lk#!}hEb4eJ-TO-CYj)A#^)y5&Fy_A%I$c%E?pC7xS^||-kg@Raq!cPx7U-v z^T5eD1PnI*4~Y%+cjafpsjHdpc+S&6c~2#8rozzE{rM1|ncI_VmRbkVUZx>s@NLZv z#n(yvuV>6?UM=n^oYgjNf-{^~Yt6E$O8#7xgJG1Y8vG;&c(6MPnQe+wNX%WZw=gK7 zg<>|PUigMAEZn+Wa%u>;4T@-btiP8p9|EA-Ze?^JHTzizl_MQqnVBV{C05A7pbBRo zM;chZHM#`vNB(?Ku@2V1!0V={2w1;WicvVbnAc(kWw^`VJsw2SqZ8LL!J?yr`G3+Y zbJ^0CxOxK$!=R3Lc?U?Y(-nyzr6aBQdJsN{0n)ch9w%Pu?>XG)SIW``jw%LKaI@u) zBn_P`w(hgR)0WW$Fyn?(&O&15@-^@9#TL5pOT-M^>>qxUx(h}d+@+q9`die#sZxAv zvVybqghQ-Lo~6eH&NaYwv9SJeU3axsP3kw$G9G62VU8RZAi)EgIkA>7{67BLCAgc; zXo(tx5t5I@RsK0Eg`i(zxCe1h!}Fw0FzAB(I3vXI^G)azMgti-KFB5y7|(=epXIv@ zv^g+oGh_a&(hiLv{~(Zw-{ zcVsKPrU8+}A(;8LiT0g|4bm4?fSV0Nde(!}go7ID1Jx~)F=o&V1@{AGQO73EMo{{J zoH?CQrUBD}Bmg3EInoZj0)#pMA9nw+Dbe?hF56KdOM;+>T(+^z3b08JQ-|%R#yaTRT!;w+qR3TrdHrM+=%UXweeaNJQo3ZOyF+c`F1lEC!_ONyL&o zQkR$Q8C_eMOe!}$%%Z&o($zg)vP?1hy1akrcPgcVf_V{mngY5~o)UBGYPkShg`l0) zpht|~-rn(*2T-r*_2qjH5`vQKLTOKUQ^ERYBe}wBKm4^Ro~AQ=c!^PQS&h5VaF^{I zVOnwROS^3@@=x65RZws*T<@vwrt~>~`PCFqufyTdh_dMd8*D-&$fSx2;w$?(!e*L9 zwJxc$&V&R5%t#oPni{olxO4K2;|bJX5S9k)Qt-AUoL>L?>*6CeUx=#ti|j7)CaYaE zd=AJ9FB+JZml*xZkPX=4k?-ZoQFdx7$lOYT5jMSaM8UX?Agn>`W1C1(?ke^LF7@!X zq1r)j$Jm>=NC-Psdk`>#JysA6;k8e;4QsVyVeXgisB(a(WA)Ui6A;>s_El|Oq><0H zG(7_C`G>>p$RmT;V?h7*OC^F;=%Jvf@vP-2SAV!fTbN;uq;Xca%WJp^r z_e5>~4`3lVfg|xGb;!)saskho(e{;x+X==t()98-A_IfvY8iPm0Nxrqt@q9S((uIP%C6WnWk9|ImA zmy)a?^|4r(zh`Pd;;m){n)tmW&HCto&OOLL4h*FA+qSSKq#~ zeGvNEc6VL!`Y2TkvTZf%14g9R~m_JHmNI4*^ z&2*2ySmJDr&Xct&Zd+AqdO|a3JmJl7w7s-iYMN~?>=K`?s)%|nfnm5of^!+yk(rSQJLpwWemC8)y7H|3RvMG-<&?onXZ3J%7 zMy>k8h3qtj#&iSC1LZdEi^ybRz(4cX;>4K@AghO%PD%pyFTCws%baN7l>E`@|F7zV z+wGtu^XAP_DFqKvhm9J85#23kowmh2G$YsYdty7Nph~fz&F(_hzrWG#=or<89``pN zI_Cr&ZK=Tus%A_o$v%h%1jV#`IvCDag4t}2!HjYEPn;gry0$)N* zDW?qfX~&U%2e@SFv5fUzw_nB2h{Uc14QO9~O7%3TqC;By#r$hbZVrmlu9Q~*e_4>P zYV=Wh+L)9Yg9XG_+rhdL3aSuCKkQr#xs%{2mB9J|&s%Z&pzJbAgiqQV0^YNCnM0ozk* z3Y}J&swa(N{!oT0K%8tlWAzzJ@URnvo{8eZx8bJ~a3F=gcf>r`R zoqzdn^lbd>aS=viG3=e67l#2dF3fqSl(;-UkZ1&y^B)@nRl_?{Pqz>2(ZpoUyGDoj zH4F`8!VSzV;V-_`7cr#5#;__RpgO=B>Sr^b3!IGa5&q{Wt$*? zi~Z7(b8^5f(PS&OgKqg2TUio^HpE{bnkqxV?XaJxx1^0p^~Zm6m<JnjB3N+;G`qZh-G!$TdGf%|3^|*b@=Bk-hqK^j#$yI71FPUA z{GGI#{@!jB)8l=KeP7I6@7yeXv55HY(3^ab8>qe5jlCG4XL$F^l=nO9{By5us4XNB zrBQw#j;Z_Hni^M^N;3ix{#E}x#qzCiD)5njHl;4H;uk?cAR&Q+!Au0!al zsQgy?wjJ=Dz|AQY<^Zy95N0>R{*S*qPWO13x?(Un#9(jlrY=)Aad?-XmX2yV>NUS! z2PipF_?@Mz`6pwq69x*yAA{Gp82S`9lwGbrL2+Rl1u$K6%r9vY^DXU_;+2SDtHwy zERO)UOD?Jtv4%eBkdyJB83fmWFVnJ`lo9A0T6dI%X9(Na$w@(tq%-Q#Qv=J zZ~b2H%=Rwe!nT>#X11O`UOn9C5}R(^mdW%=!o5L+O$qLagiB!sN((=`z* zP7YIf#~RXQDGg`lfC$sTn<%LCART7jF9J&sOI%AoeLp`>K9G6T!1nU$9CUGY{COFCx1H9 zFEPnp)}IKLVY|1(!>j^zF&!7S?H<_HxZa^q87{zKV`Uo{O+jAwwY z&Fa3%;Dahy_V)dYW}L=`E=AJ{Q@QOvW%|?r1lXU{Jif=Ol{P=3p`3GJ61?q_2yw#! zG}0zAbRL<|&ixKY{^HA7ZgY|bNb`K%qr7P>Q6)$*CEJjlBp+&5car*u03s*k7Q`?;JS|dq5U1xS)F^mSLNXphjC_5PuK@d27Y$R%aevH|A zbq_F4d;+}B=_cX0uxAmmqOdh@{cG3E^20J+FtX+O%q}PP*hx!7uY7z)7KiyzQLT{G zfPvp1Og&GM-3=MF#rH63Y+2BiJjVB;DH1@x>ym`a1=%sXOs+X69(EvTAvRIZ3rUfp z+o9LW@?&;lE}b(%d-NtN@j3@*!$7t|qrNv7p*e%x7FJ_bKYhc#opK1P*-Og~BHs#) zj1Sf&sVU5MwLNWFHy(|*+zsY}V0~-+va%4p)=TB%#=Cy}Z%}!`9iM+vVje%N&I#bp zH4aAH7ucaVeOJH$;0{9YYs#vIq@S@+*}Vm^8($0U{LhJaFNRwcPS!F!&Aa;Q_F76( zQxtr8Mu7nW@{Ak3&O^e7KIvG`LEr9VQ0LrE8#;KVdg{({$6*>J!d2c6BzkI5^E zIiD>8ilN&Bv7;HN>`%Tw;2lW?u>w^8_tx2F&a^@E)VQo89@(Mi`8IK0wn`JjU^vOW zM6EH2FI99nsEzC!sVwE-x*(Sb!&E*}PZ1Q?xN_o!@_u~Oi;<7nis9lrM-8Ybj6erg z8Bx|cx@mZtVgyXr^cknS3YS8&u?z9ykdg{@>SJ2z8H#@-6>TrAZ5srT7YiRa>ZO6W zVIp#S=pC>ps>svNWEhe^5-k)^{6M{?d#NWmpcO;-6<{8mXaB~F8j=Q<#gjZAO;&Y6 z{D9eN{9)2t<#P8PQFmPJ04$EqQewfI>k$g_RrvTNy?k_ZfZ}zdl9dU-7Y6D)y@YAd zBxoX#rnx_L=e2-DN{hNMD)KAGpM?R71${LbO-ePt@1c4=?5j0fuVF!%F)&;sMR=Qz zm7Ew|1X(Zwq~DA)jX`IJaj8X$SPEjb44C{Z@>-lRoW9_?g;1DeS z%V=bwf_eE4obo_w(EAlU5K~N6wuuG!DZY>*Y0t)_52oD*>?mq{Tvo<-RGh`8nJbz>&gX&C z$GPf#9a?@B65;ajm4buRk1(YsOcPo*3XjRnCM!xv5l1}v7>_Z>=BpmtK18RX_hlZlrE}$Y#Hk~`v(Z?MKj9F-dP6W%g zb;hnO8-l;PWC6gJ>qIUWBAzop`o~l>81mD{C-6njkrwt?Fe{S*t$nAj@uulSXAT{Y zYT92m3naHfLR1zP)c8g$K;EqQfH8GdA=a-MEq&EZ^@m`VW*WwOhRdkbNvnOE+!ljj z-zPh?EU&7^QM&ijv3&{gU#`cx-ETsHab&E5s56-FL5!7`7DZzvwA=TVotZjFuo((}hG}G#?IR0cd z`rmRpHjENh)yH3Xey7#HSowx|b@Oj(_*ukdo;SR>_C&8o9YegO!neG3nt1Dic$9f7 z071dn%TEusK#j=c6^i62OFEVQS2~#)J7K3vYK^9@WDd^*fQ+E$GajcaqX5kZeuyu^ zKcpviEjzib=VcpMO2@c%4T$6ELf#kvh^f=&jbOVqH>E$q4PU=V2R-+MBvyAx$h6TO zo%hz1wvXeE$#Irhg5=N-3-js=59BrFN+kK~i-8;Q_&45c-cD($L>rM(WFqr7g@xr4 zh!!wu7dh~&@|Fv2$k%lYsbxnbgCm}eKu^~=# zQ}%)L(MqG@Tc+64V#Ojhby_w2Gp8^x2p5_paZ^tmGB(hFE*mYFPQXfRYj5`1rrpAO;%xqP~I)GFoxw!Anw}Le*gy>~o#7%cTly?K7S=M;sNC1S|nG z&^;v5ssauZrcef?MF1~HyUN$-RkC)GkLQ`DASH|We^6p9wdD>EVktnT7@d%-Ibz=! z!){~*nV>`GdCs_H_MNCL)k#uH+p~!26ax0DMxo}8tzP7FN_}L*stn}xgpd6SMjJqw ze7q!0uqo1}w2-_BciZa7%LtDy}-wbhegoWQM@a zAHA%7Xbx8Z_2T);1b_!oaL`i}JZa)J22tK*6|RKjpi5N~(!S=`-wB!POj#MEMZ8(W=h8q=T!#pck{jX>`+(% z&q>a`ZrVGp#~XE_XXAWdZpcE*%Ro8|e6di62eHJdgL9C~^7*Wk)72YjD$VM8tEYwS}1>&fIJ_!*RF=HPd*J*?`)UY(kt8x@6p77napJr?N}e z&J(8WM++9sWb=m*I857#ne~VoXj*j8sC-2xn1Ne_L{;wsssnI7V+Ho?{9O<-x~BWP zC@#aqk%Df9*|G1}lmR<9#K*YIoq!_-T$th*Td%%9K*o@0-Wv?y;;ZN!(VDqMb_N?cPp0`g$+ilr-K&xHI7S4%f%v8% zO`BF*K0E^ZfPIXTg@|sOH~&9e-cg4vDR8%WP@cc7u6?^q)xtLHbOltW&HVX8+;z-K zlP#HRQJ@UsE;LZ0>%Q-&;ZTyedBr7)Yx`PydSyo-{Hq>s!j;7nwMt+Rd()EQi@sOl z&xdYw6Xthtsu-}W-#ZgLvP>wb)}Fz^$P)|&tE9g10wo*bFPeh)+92zHA+i}Ac=WHN z)P6>^-FtfcdUBM~f~i|gWhTrg{a8S@w`a|xcM?%$Ltg`{9vPzb6;qJhcZ$JiO}XFd{JE-k5Fm9MGP*PNA%%%nDcQb(ID!@0Jl)(?urHP~ z+ovP3HNftRqx{XS@E32pfQVc6$jyDZ^JF}IHwRx{qmRheVjUSZei)EGDip<#_}LBZ z-LY2YZ_ok@@RuzJTc}C(O#qJU^fB1@pd#7(RK)9f2vL@J+bNrQL$%IpjU>MxlZR3ox zHVGKd!fgil@JM>T*{mwc4G!rzusokEhWOi1FjgO=UZ&xc;P3UmYQcHPt35h1A!=cA zqjlzLhBYr)kw-BOd(d{#M=kN{+nI~?W|9l0Sth7r+rey4BwyFAzdg?pKjf<}%wqqD zElfT#^RM$NFET46sfx&bLSUSJT#w5!ze&;#Rh9G$LoWzDhL79)IGC?40XFC=|IQq7 z$&_!Nd2?5kjm#9@Gpt8&G!N_oA*ypi$W3+0U1um~FdQ;+Km(aa2A1>KkGUk#lh zz-T)(3@Uk$%Z#KHH(!9|zQU%<%(9-srhzkdY-dm^ zWYts$G1t^pHe7lval{?8-H=ZiovAL|7V3OON+w-3i=!Jj_7B#RbYTvuU%s466gZ!S ze2rW4eI}x~?DF0$&F<33S5cB659Id{h!AkZ(vM}(jdY~XnzrKZ=~Aq+ExGhVc1XZ) zt!MGZ(zJU$C2(*W<~5co&;uFT?vmbegjl96ixkA9SQjNWGOVhRDlt7?!zy5cf#k1} zwbtEICwf{hcs+&+LMo8C{m=mLDMc0w_d8ily_(cFAVa`>p~oBPrcjHcWnU*uznh!$ z&sz_Wy1_u*wc%6#$*$9RM2{5%?sztvHsM|_sh`=$niv1=;7qT@nv&;g z5}NbC8AFN;%$weM+H^nGTZoW?Fh@H|3p(NP;|tsBRCcTwV@Mn;_Rh)=h)QbD z_NOM0u{{kVK5S5sT)3|DUo~+^@Pnc}XN7BE9KD1Tz&>iyK4p=#9P(Nfh+kxvi0mq3 zAZl_h?cMz^cz?OqzH<@-Ztohj=t)FenXueXb-!(AyRld05QOyh=bUoprC13hkZqQq z{$4D`ZN8Vnu9{N{Tn^ve6>UB2I-x7FToWot4RO|4JHy|J3n)L-ZEzNvwQ1)4Y`+mq z1U7dw^QEkeV6YiVS}t5%r1lGdupbRj z1JiG!t06GbG8eVi;z8&9oYCbOBOF3Yc^_!#@(B67hA9kh&+*=vp%S=}smZt@7f1Bt zC(HEHt_?WG?TV;b8eFHWPnk06bWa$q{eo4m%)N65T%9G6UsBO>t<5?8D#0hR`!2n8WHAE|vA zPJLDND_!g(1ezA0LUr2eLJOlMn_az3-@LB)6rZOs`*GQ-KN)@9bbGqLeRu9@Hr+LZ z<1`Mud?&Yv&>yzLOc>>WX>IqnjCD4Shif~eAP3NYS*wI7w;_h}?+-Z?R6_+*PWr~L`OvTy_H7R$f7#i`D z6J>ydr2n&hcw^pjdF4T%aIIr1t15G)E0&LO>jU3qF(jaOh4&u;1KSrA|M)^!OaaD9 zV0UxBSuNIagF;2=tT1{fI`C&@_9MM;?RL9v(qP|e3P z6W93Dm__HbCvuZG)r9Jr3J9(PzC$*L>G^(G8Kn-^J(dq3!V&m}I@E`7Z-Q)thuYW= zI4ObK&r>Q*UUh&nX`tc-L>=VU86vc*w=7_W1V_Z!p>8I%D7~V$LQfhR8v4=a`c#q~ ze|4U~J<3u3#WAyh=zI;w$B)OGUvKB`-}rLmg83nDdW3_&wJkHBz%S ztFQ{n0-m{1L>51FPF!xed@<;*60(1Hps>8aGE{ATWO^fXQdP5?$f$dm?#~C?&Clcj zFyX)#-Lc%Q^Z>fY$Y?*Ar6ILrG>^Hd5m5kb2h43LB~8;uK^mB8Xu!C3@h4)gU^WJ8 zI4eXGx%CysYf}B3JJuLA1|5V$uZ99a`<#@5FDh6j(LJ3kmhdRlDgG;T0UWD2=aU-? zm^!X87PRQ3^f>jZXZ&M#oNOlmT7t*x&(JS9&@7e{Hqg8?82XDo>C1quF1kpqfx<}q zFz?qW-dorrdZOnLJSD0xF-=}AHw5F8WPo^{9B>KP@mHakvX*EUfG07FsU8yGvPBk@ zE#^>2B?Hdv?(yF%Gw7JvDjGATDFA%(YjdB|c(AtQ16^1#qUOHrVeHYskmv2=!H-qL z852*CkZ%}77dPS7+Ae~NM=2zNKIpSfh`nN9CK|{CzJPh|f=uiS7)PC35BPATSYU$G zRpER>3D~sVf<+|ZsO6$fFzASATotbS*Fk4NH%l~XY+~mYvoxbj5qy!ZP;Nbn;m-dN zAEfN75J@6!jnU@?fVE_PJ7~4t2;uwaM>cGSh(#5E1(-3AONU%oA?g_m^xe+4ngcD% zQ+KpgU>f}zwkMgcHCy$Q3gJlwK;wF9xnGCSQRtQ!%K6g1FA?`ASmbvbjb zE;Sx`d6(!1=N9$}EKnp}mafj_XqBtIDD$e)=6-SioyO*rm0DRISI`!gkW=rYYs9!h z_QKneM^9M$lecA1NDGBIUou<;zD}~3FQ5Fv3VM#WS&)UQFc_blDFSs$GmaVdJ>Xl% z!)L6WhyT@ZCgGE8z=hkgCLz3AhZMO%1ams})F?`vV^mzlJjFxq>K8A&Rbv# zv;`dCrhsTZ`A5xs?OncL9`5?sA7P7Oj)7P=7sev+hTNiI7%%Ulyc5=TnTCEg@&xhk zlW1H4H%dZ4Zr8!&3+yZ#iLzWWPx;0c+_y54ud`xBDG6qmx{bFg%3vWSsfeK|-sLGw zs|JrRt5IKFn@@dwm?&j9(X~h4S#>36KLzMHRguX%U90sU$V+Zy6JgyW3f2uW(Xz0a zb(1x1YWuUgAR&|i&3C8KzBZ%ddf?@G$>Ud{wI#g+j8Hg#l3&h;JEGMk0FN9OuzGYO zQv`#)x*8_-zvlRtS6(lp&eBS7|404_z~4)=xv2KoQq)LkV+fijB^_#l*%ct!f`mu% zJ-*HW_)P)hFq=%7@pCBUE3HwVP8ZaEvM$*W3@4aEB#72n9!{Ag@fXO08g}?}V&H!2 zE^sgIk#qEGer4}Y#*kSDB-C|pJ#^(+T2q0A+75)(4+H8zG7GluQ{$3>KPRg7E0D$A z0wF#J-UtnbWFL%bzAcn0*;F*E+>MTNCuxzhg#Ip4c|Sutngo)-Vd8;kZWM#~hQRdZ zh-kcxWx93}?L^(F_-ui)gyv-g(F~SL`rCR^XZGrH*O&DkdD*x-a6hPuDQ}3Y_Br_z zfiO7x323zXmz171h=7*BlAjsk`_9-Ng(Igk5SLF6G%)q1D)`5VInVTk81 z6(LP2xcTOeHzIyb7fjzBN{}b|Gxu8q#`=Zj(ZIP%g;G8y{)o51Y*@OAe76rQ2^3^E z`u1LRdJ>Bp+z#W>I8ECOmcSlj(1t{n53i_9qBGYJ2+7bJRY{0BHhqOn_HPPxZ*foA zpzR3J0H^(G@=MMt(ANX(lpe|ykuH<*)p&Gik!CpP4rsHz?y`#78pN(Z`)NMLQmA!7&$>L^Ab3fw;Rp`)~+{qPyiLHLw- z!Fa*>gO8N=?-EkLECmt0H1}`9o{sGt=V-#kz7HOns^fu4MxBraXK+Nt zHK&*XHwh}7UCcBESRGVmG=iIl;x#o?d5ma-E&sP;R^rN&O%Pq(nR%HopetoL!#79x zn)yvYn2g`)OyiFN_a_Lg2G_;GuoE;C>J{abhy$?KJ2;j}tws81d`=9vfDMW~0<7-7 z*eqTcLoR7$<&^duvorwO_B2QU963Lo29CFgq=)V2tF}xh3d$o?@xU5{@qY4x z;*X34DX|ggvzWeHW)ePL_h2UTqlE>2AZ-u+1GtgIOm_Df*6McS#h+_7`u^_Y`XTNo z#HE<|X8;r^AFt}sP6cQtLyb%_tQol-zvGI`7=fWHYCmY>#xE-Xh-24uMRjKSUs@bI zJ!aLWu_wIc-JD!1BGvaS-7X3S2+nUsoD7wLUZ-_5tK!7s>weqplZk$j+|S}jJ3@7^ zJ)2tf3r(|QM??0tLX}^E6sIF05W1v2(t6Rax#YPQ@z!rkfa>FjtkGr6%$GLG$v}q1 z;D=LNHdub4&2BW{V6JK5v?Ej28U9DI%p(guwF`)47=`khdhk`5?%qj5)q`~X`ZDF) zjTlAG;+XeY+P+ZIt2^XljeJ2;r9uMJlY#BMo=MhB;I?xt)J+U7wy}sp6J%j~1!QDv zHkOzR{$4K%D3P^uV(M#5(1P(}Ds+%wbIloB3aw#UM5I@h15a$O5*sDbX3c>|1~~9u z)aHn#D|KzC#F1)|k)E}QOJwbYAtDX8=wPMu-NwmfAoNwLT+Nh{8=!wX7yWbi4`)7Xvq zI^t^2T`p$i{TGZpA|{O9$4E$2AZgzK(ZHoj?!s{!&_&Roy)d7kBzY?ZS_j8+r?k5h zIKk$9+}SRJb<;5QB}+e^Id=7RS4^M)wg<^@RmO*C!0zIgX2!h2E%AUVw!xh z$RacvNeF4MN97VY4g^!vP;!QB`LPkWHG*1qLf$mBADQ=c& zF0VlXm!Q4fYTxK}7krldZ6*RsJ>5d{ryS%cz%qV&N@x6MKd1fgG%3lL77qI7bd-$X zcX%J*Ez?sI(@c&_{2@&2ctG+Va+Y?!C$4g2afPvo6~30c&|t+54bWC*1%U7md*W9n zEK;<;l$IqpjR(T1bg@DYeX+r;e>XDitxg`W&c*Td;X+cOA^><31K|R6^EMSS;s7?Q z0CLs2vu}hz#p8U9q!0E}xP~ZV#M+1Ys1QwFQ0DQoE8f9G`r17?&*79Ug!Ii8!I#a- zym@YqbkYW8F`U8I-2fzbRH_sV09A>Fa|)s719XKv_g}BYx0o(Ns0Kj@Z#d29>nT#m zmI(4b?P&-BSHhWWV@{0kq)!=A2A;PtHWc(TQy$+lVpE$1seX?9_vC7#Fb|DO0$$0eQmY=c zh%H4@IAboli&|AGYn!`}zE(HMTe-h2IAqN^xTJ6$nP^>}6g(eTL3_M_c8>g8FZHOG zdWh0xC%2;-p)lI(1poAQWkI*!e7m~r2W{?v%ZR?q98=m0Y2IAsQ^SNiq-*s6oYt>Y zX24wi|DZ~71@W8x0G0VMXsdQng3i$bQ9vqF$l zgu7L|y)xjnh##^rpk!Ypr8xsC>aTV^{RNLD>F_rNk2468I!GnSiCPtCV>pX82JcqH z+mis7Wn`J%e0>Ss1D6OR1QZRxRVC$oMF+9xQt0F;<2%29n>trEo(`&*iNYHa;TR2V zb2OB~4a0b!pA{1`u*0@>M4vQ3Tg(anuzK^>4CmD|6AZpkK{#?#n`6aP?)GjrP6F8< zAg3~L`G8Q6siBdo|6BBYJTLhZkzQvw4RMj>EB``fe4Sx^{k;=EhiImrP=ddPpw*nD z)5Vo6k@*2PYtEdU@5L|%l4>fqeIhQytbS>TvdSbJzd>8EY)HhGFqU}CiC3ZL(SY{z zt;JFY?+$_u+{+>15})+Dv|=>xp_f~i{||l}1m;OJujDcc4R%aCNMkfeX@5fRsqJY? z5K8(n^cwjJ(NN&Y*O)_S!xXN34k-zdQ(Qe*b0^lZv?rw9u=c811&g8{UQdFKZ`)k>EO1v9LH7#QGDFlSHxibnuZBPgVL1YDJ~x z620ui9=AP)hBzaW%3~+);-_Wy1t>1dD4n+OGylWXKr_nP>`sNs$|038f^n{x;@>ws z8WAPf@F11K%v1W=4Z``EbgMnvONV1W&u0?y^(pR^N&Blizb@auUq5qdgD+Ac4=#^}&MaWM}q90XqnrcW=Ure@tYTg#=T9ePY=%NAqEAHup1 zQ+YC=V4cf&Z^JYX^TF|-vqID4tQ77MS7GPSTqqx9dT#Lk$OuVP`XSh4Z#~rbon`}mW7}=PoMs}M?gfdisT#CZWm{AUfMx&dvJD6Fa8(+ zM1g${$Qpg55_!;F%)TL**gew#cdWR;;TBIr-dqbkKO}Z5A2eti0NA`uHi%+r6M{RQ zUI~~)WeeVAvdLy%G-0)9lG>E~ zos_aA%pBJTn4H~Xo@q|mt9465trwm#Y0vW`*)v=t{}V-Y8*RUhUm-8HOuzF@NI0`j zjhnGnmtgIfH9KaNHg)%O>dPZ+c)lek1RkAnCIj&e|w|SD1n~Iws z(8zP3Vfqn~vIj#aCg@ zHHPpv2Yx-FVk82(SN{&QfoqWhGA!e(pxcgdm;?R6c`8sP8`!!Rm2`%z z5Qz4(dGxnH|7urB@{4Z~WS67qtSLs(Rin4BmD{_5F(ZxrKNM(L%VS{T6weyjRbTR! zT@frh+0{W@gTf}p_>*FzaC~nH42dmNgXWkJF0=u8=cWhJE4)eFY>_fPY7SM_OxDpi zjZ4pg2>~5>vIL>yH7LnqF!j9I9_SF!Wt!;^n#;(rOpQ_p(=GoL>zt-crK@##Fs;qT z(n%lwwC&p=-zGkN&R*n{+X8eZk@>)hJ6~vkC@pF*m@atkhd1u!6xFOfcOrM9grpzV7nzP41Vm^UhB|BYHYEi279YZ5cj>_l&U zY&mZ^pTvu?ggs$wjD%Ol0H;u6-ay4G38Wmzk;ZGfK?}9yM|ZL?L3#k4fJEreo@u;4 zDmH*AQbe%o96fIzWJK_YO4_EqfTwU#5RqT02y*0}*Nlg6HTkbyoxdkQug) zaf7r;<0u-&w1X(qtl`F&q6D(*0S@M(aPRlOtWL1%by(stO~kaTI@L_0l9S zGR*O7-Se_JFL!E_Fe#HU@H7G2rw4y^w1q^V4E-p8&rVXm0Jt7KgLOikTA|)VfT*gp z7C5B}>hMg=m(?rm2OH4rRFnNZ=f7OWU1mM46-|A4_?ky6JH%)SxgXb=<@Ot5i}$O@ z+=J{7xLs!!7sevzb)sgp+~jqo9Q^|k=;7c46h%UK^JVh5@H3z|YWrlrwXMAo`JPv&)ankYHi%b2N^OYf)m_r zQ>1Ciw>L&0k<2bB<&iF*EoDbIb-Y&5X;_2>?O2Ine`TxLk`JKbgbapc>dNsR5_Wyz zD}RojT~2~>(mq!Sh}eg7&2_(keZ#X!+otYjf2kB*2Dh;K-sj6M_62>l3ZlrbCq9x% zdLl_)B7G^jSq|Luu`igcE&&?Y`nxU0ln4xpMxRx+Gx}>c!CuKp)sE)uL=&8m=v4D^iNKh+cRD@n5J=dF&fPr;7`E$|G@9JG<3&!(|IXc& zGbh?sR$Ng$-fn-kHEz9>^@K?*lmc5lKY3D_OZZp8!03B7tlz!u8cxS!Bpwkfd#P&J z`;`};L}9uEa{0e`pBA=?g^n>nj8}cDj5%&3nJiIup6Q}yNiJq};kPu#yyk@KWexj)pzC5<8@LQ%WC?wTt^8Np3v6Cb0CkFL zWb!lFgl(5&lFo4x$I~rVhy{`H6qL|~{fWqu#Eb*=sN&2sGhIOtdn&0q_y1~}j0*cF zN!MAG*Xo=`_wk#`?W!0pBRYa>68tw<05`yLw%TVO?nxXxs$1ZRQ%@vnsVT{}jzlS34TrTTeTO{o&6pX9EJPY8(03i$nHy8ZOy z*u>#zEM75`D@73lMoaL)kddS92z$sC_)&mX5K4u6=X8Sx&nN8~9qo`gXesoFFQ15p z(e}(e#38|43;f~qx3sN~yd-8}G`fIegfy>b}C);mQY-D=xTy6*bj0R~{k#h*B8XH+?pg_{q&u4M=46s;3w|=2}#7NY% z#0`gFf?l&nl5DfLoA%u^k2ros5Hts@Y5Lel#h+u8R`?gajz%MJ%x7EUn^@ou4OZ-E z@N@DKV}SK4j|nR01P@Tl^ldzS$QWZWLI&Em`BMaJrQ9%xd;zp-yQo?{$ zaNx`(N@Cj$!PP0(dncC^T&~Sy=C)>d-F$I_8|7MfHC3k4`!Cz(lv_ikee8jXL6zvZ zz?*g?jhy`9c2cOMq8B(2n;vg|dBNwWOY9veLdEG%3|rNQ1x4^v_n+MEeK+a}eQp`^ z`rEZhsO&7UpjCZGEmcwN;^;II-xv$W#h~NNkXPK6&!Ikz?EErAhh)20A%|taa)Gva z-%+wP0cC}Ag{fxrbWGp|iX0BP#898|tIxhv$T*L}XVW-qM#O%<8YB1+QUw5SSL<7S zWa&?@e)xfguxBFf!vmQlWg~_+*4GCXpK^u!Puu(kpe{WAUBnp|4;sIjvK~v!cao@s zWiVpgv24CRvyKf{zl8h4+2Q$fGjsiJ=cLC!bKe5u#XzTo=kW4%t8TKvlzul>4vLvn zX}P>j#CgOqG7!CZKrq#twZ@Irv+SGtD;0jd|(#_1U zltc(nK$wf~TNJ#4d-u%H);=T7rACUAPN<=g*Djm(;!4pC)XbgK)VjZGsSNIK3^i z)<5&oYpfK)NDnkOWQkjf1CF(CwOx|Da1E;x%AJ^#P4!^OJ0D;r-d&vwH5*s280nyz zLY{c(LXgerqm=PANU@p>p@?)$+sIB{FN^iN7z)1tThfXjsN9|fa}>q z1%Z;^ZybL4w0>m=Qixe~^#cOaI8(#Z23blodxd-~T=zBI8k^cX4V0bYa%j@dK2Z!@d}Y+H+rp;S{EM2m&{z<=VB-n z5B5z^doj&#!l$Im`D7xsnw8WHk;@4Ga&jr2YgM5V=c}x|4E7FyyR32#DaX8{8KWbw zm2gtRtn>8zlP2&Pk`#>xpvt-)UFW7B8CF*Jrme^-s5jA)&$v-c3`m-os*M89(K*C? z8xz^jZiVRaZn`HBp$33iIcAnT0DKp)T3BS;&e%Z!R1!@)r~rWYsCSyq0}RYP*-3ma z+oDkl=X)aS%pbm8-v!W+*Q{NZ7 z6^0EuIOOYYf)2Bx76<|d7h}o>wlhy9R+#I7qryxvQ<4@kGn%O;oAsu2xk|t<@d z#g(h*0JG_l1<|Gh$=BYL3G%P|%MTw=UPn0K0`R88TL8J>v#%wTW*zXg7P|rnu5K-d zwM@A1{~N5rb^bnV*01evf_62Kk7pwrYv{o}I3JQ{U(r_1S+^A?u4QG=6#EC^hve7g zg7K{o!qPd2N{@VOQQP=U1-jS;LCXLF%s58ZbrYm*f% zLp1W&!2KJLb8QN+t1MtCV={Ov_W2=j=J$S1@dKFO(06EImknUVZt1@M9lCLgldoBO zghmZXuZun9g$YV$a;kjEh5n7=XYn~EK-2X{SQBKvEDCEY(u1@skITwk-uu0T?NqSEqw+By&zg%lG!@5nq+es#?UCB?|!mlFVD!1r? z&qv?UR79#f&$rf%kbM&0ox(R_0L|Nzi2y3@-wF@6X5ZL(`-zV31udmaMW*JE!K3(G zS_7v4NrGn%T^M-Hga$qqPnw3xkb8^2O&BrwBwNf8v4%*5`!J_^aXuOYRuX_sJ5u0Z&RNgwQ{{jD}6cG#*8Ut*VgM#fzi&zZz* zmYF(>>2cB}@M(5G5z1mVvb>JqY8qOXjc|z<-e+sL)9~FNw7^MMVKpZ8Ga*=ZieGTw zY}FHsg-3%uIJu-kp8MItW`x@AxL)_az)9=#vS~}*7uSsC(s>CecB;Vp<~!%CT@EQogP z)i84J0M=&9Xz;`vV6IgFaQ)OKNMeVRzJ3iHOHCvEft8bPSsF zXC9y5Te4hLX3IMhQdrd&+y*yI8AZ*krL)o&U_AGG(|<@f^`hvkN?DGR@64h>-VkPh zoEIDQpSRz*W}U-VHO09*`xtX~WEaGaN*jjmmD=1KZaK?FDG`}QJ%OpdR^YIWoUAT| z6eNnm+A2}Nck|T0{Y`UA1UP;80aHS6=oPJEsC}ob?E}6PF|$O~qVrMsm81_YCppNH zYbTh9C!Fe=gJ-Ypyr!yUGY{FvKMXDgM6c=Yz30!VbnJE2EPy$Yc zlwvfs4H!fWQ9RC62%SSMo!-n{0I}=;Hrag9dE|;P#8q(%cmM(%e+dP zJNanJY;HVw-Yx^6H(yE+e^skmK<^X~=b1Bqjcw1LR%2Uaje*m%kY|o!hHGI)OVIFm z1-$odlzMVb~&H;qVXdp^hzy)`^tmJJ>;!WsQP zk>;r}?BRQboh;#V5^!iI-y_{{k+|GOvWF44@?zf?J2<^sbxKl!rnhO$MZ`Ql;bOAjR+0&sT*DwG&|P5;}NC%=Kv(2k@fZ6sDu{zd!DtZ z)0bk<8Z67j+?{J?$C^c47*c2+s^9O9mRq_iNnzDZ+W5S=Y!w?vx4m}cau;HZw*meud>*TfuL3 zx+hwpZQS;DMkSO)CJcc1=!>rjKtNZUtd$nmOgoQPS5fgQ3#V)EoCMwUU4^JVnA@uj z$9o4=5*4H2G2$5m$-Vemw--RytiDPF1;GMSHRx33U$DdfF~-6V78$UZf1Rvn4ET+C z;Tm?UJ%(eJKIu+c>)HbVK53NqATCH-FeJnwC@$rqUjMJ|c}F}2SP`1ES{=<8t&SWK z4Q^$LAE`ISKfpS9;46sXBFX?dpHj7=E6J02^vQ^WuC%I{!x_(XtEp!7k7!pkY!Ic! zMN=3SL*^p{+{-qmv*sV_A_j&z_OH4-CQ&d`@LnB(Kli5% zMBatp@a+VsSu@ZX%SziNIXrUoM|vsWLhHEjo8U}H+dtWXP`1aP6(~z)jJIAGmgZeKKH9P&hnXZ}n!JPIV;_Hg zn;C!bjibjP3rDb(lx))>ZQ)_1bw~PZKxZ3gtA7>KV$*S{9@m}R0@r6S4bJk#=F?#N zPx62b1xFF`oz*?xx#gux)O0-EP`Nj`xsV0u(6P3;vG^^`U|(j#?*(ssV_|$zO1J2A z`1Y?p)hdi<-|S$OzTreNeXQNhnO*o}di>yxg$Ng;h))Abbcu-4%L{+6WVHeO1182s z5oKA7s`kQ)9!47`5!LF{(9r8AW_jsTtUYFnP9P(aB^`lSzOCAv7`1ERY_F4BU=3Wr zKQ_tN|JkiuvyNHTmf3s7`)!D8v#e1` z4*TTfNZu}}={ya)q()Ipi*1t&XG%$s!m$}jRc74Pmd=NSv&6={Nb>{W0}kcEnBUhx z!W#=I@|`pu140=>z9e$`I3fYe9J?cS}(#u@5|jqyFqG~H*5 zBXOBp|8-ZPUTdo{=#H_+CMLU5XMCMc8%u3I7Rg8$XLa;4TTudA9loC8$dYrq@zaTV zZNid|(C+QV0v3hAro`YuPEeLhX1+kj)#=JI(;etAh$Ql^TW=vK#>5EHSNACEEtze%k z%o%a?Lw=w3--cG>IQJd}(*ogn$j}_Z2SVTIs-{VLl|RvzB6gtvG2AUFtj2Bc;90i#S$k8_Og^V+?D4 zErE0MjfVNYlA!H%QfkeWPtx%&*Zt^;rm=id9_eWMYf7h(TMt~J&}ZdBMC9=<4=kZFD~>s3-}GEe{wrrH_0*T@DLY{BZ9bZIuYm)5;^> zg-7+T5yP1CbQQ{?ON5xp&PFbmmultoRCl6r9Aop+_#TLnMOtV)%QWY>S1+jr_V{Xb z(A_PsLV!5K9RpH>B_}_JG)+N%wbQO`>e>;JI~XaVe#EGL%8L%XhhCNW!tVONnpPFp z0kr}jdzhy^I={`4Lr6sI^?s~=Z0*@nS3&-!%`RZITpk>nac#gA%Cn<4B5%!#ZNHI9 zso^@20S-?xgtt%hIfhQyaeuIsqY&w76Ejp9zX8UljWsG8H6oQko5;L|EzVAAn;KM< zkn%m3EFTyDrrM!WfwvZ}7kf(I(cfg$%t zTa*GibJ2}X1!WG401foVPkO$l+Gta#s(_cw@imBXoq&*n9hr>l9U#RN!p$u2JMGz$ zaHCPqdlai0PR3lg@7)tefslJ5NR4yIxxEg8>DO#r6+J|#I-YA`nnLU07%#+|MdYU* zt!txR>tp1^e3s(z*ANAgH#CpRsUH@W>`Rlsmo&(6ELLCWVIU_>WkuHiQFlJ1kfG+% z0m){}fCP|QN>qbA0QW6*G(zqOBZT{88sF($S~0^qAcRdf`iH0tP3=2{`640m6CTAW zGzDS(nQ0-dn_u!yxxmBEc>Ri1A~3+`(r2Y|H=3Vt8%gmrpxS28^=)md9Q%*D4Y)HD z)2rA?@|n1=1`R^3k~CAh-tZhMkwMC#e`}5Npd2#Qj64dk9rOux#bZH!{8qmh-7%tN zOdk+U|HD+E@^L9GVn^ZUhM2r@_dgWwQ{P>VNQm^K|JHy8`DXB0Y~U*BHD!8`_&4+| ziG7{HNVygd*C~*GdPt9S5YX1$xp(+O(odv7_GlxIvs{!heU5y%SFYCh1(@@=2`vxQ zGb-y(v8puR91&(94!6)PD6M(0rIq|c6TzSt(i*2{Z}TML7&XOFEn8_~3Ep>sG*iRg MHXEhJ@gn+H_*nJkKL7v# literal 0 HcmV?d00001 diff --git a/MikroMaster/20260917/20260917204001-Config.rsc b/MikroMaster/20260917/20260917204001-Config.rsc new file mode 100644 index 0000000..f227923 --- /dev/null +++ b/MikroMaster/20260917/20260917204001-Config.rsc @@ -0,0 +1,4352 @@ +# 2026-09-17 20:40:03 by RouterOS 7.23.3 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-Lan +/interface wireless +# managed by CAPsMAN +set [ find default-name=wlan1 ] mode=ap-bridge ssid=vados wireless-protocol=\ + 802.11 +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] disabled=no mode=ap-bridge ssid=vados5g \ + wireless-protocol=802.11 +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC name=\ + "ether1 - Unet" +/interface veth +add address=172.19.14.102/30 container-mac-address=30:C8:D7:A4:6C:D6 dhcp=no \ + gateway=172.19.14.101 gateway6="" mac-address=30:C8:D7:A4:6C:D5 name=\ + veth-awg3vds +/interface wireguard +add listen-port=60585 mtu=1280 name=WARP +add listen-port=41430 mtu=1320 name=wg-awg3vds +add disabled=yes listen-port=32252 mtu=1420 name=wg1 +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +add exclude=LAN include=WAN name=Internet +/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 disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon2.to \ + verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add address-pool=dhcp bootp-support=dynamic dhcp-option-set=domain-search-set \ + interface=Bridge-Lan name=masterDHCP server-address=10.30.30.81 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/routing bgp template +set default as=64999 disabled=yes multihop=yes +/routing table +add disabled=no fib name=To-VPN +add disabled=no name=warp_table +/system script +add dont-require-permissions=no name=fetchCustom owner=admin policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n\ + \n\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \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\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \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\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/18038/819287c3\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:20:04 17.09.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\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" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +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=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 endpoint-address=172.19.14.102 \ + endpoint-port=51820 interface=wg-awg3vds name=peer1 persistent-keepalive=\ + 14s public-key="MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +add allowed-address=0.0.0.0/0,::/0 client-allowed-address=::/0 \ + endpoint-address=engage.cloudflareclient.com endpoint-port=2408 \ + interface=WARP name=CloudFlare public-key=\ + "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan 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=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +add address=172.16.0.2/24 interface=WARP network=172.16.0.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/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.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.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 +/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 servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net 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 +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +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=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 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=2ip.ru list=Test +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 comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=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 comment=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 disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 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=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +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=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.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 +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +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=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +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" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes 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 \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + 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" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" 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="dst-nat for amster HTTPS" 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="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/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 route +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=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="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +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 packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/routing bgp template +add as=64999 disabled=yes hold-time=4m multihop=yes name=warp routing-table=\ + *C8 use-bfd=yes +/routing filter community-list +add communities=65444:900,65445:643 disabled=no list=COUNTRY_RU +add communities=65444:900,65445:112 disabled=no list=COUNTRY_BY +/routing filter rule +add chain=200 disabled=no rule="" +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/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=time.google.com +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260917/20260917204001-Diff-Config.rsc b/MikroMaster/history/20260917/20260917204001-Diff-Config.rsc new file mode 100644 index 0000000..1aabe60 --- /dev/null +++ b/MikroMaster/history/20260917/20260917204001-Diff-Config.rsc @@ -0,0 +1,6 @@ +4298,4302d4297 +< /routing filter community-list +< add communities=65444:900,65445:643 disabled=no list=COUNTRY_RU +< add communities=65444:900,65445:112 disabled=no list=COUNTRY_BY +< /routing filter rule +< add chain=200 disabled=no rule="" -- 2.52.0