From 6194af8a1c2480fc615887296d65471b32aeb562 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 09:00:23 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 09:00:23. --- .../20260504/20260504090002-Binary.backup | Bin 0 -> 253465 bytes .../20260504/20260504090002-Config.rsc | 4044 +++++++++++++++++ .../20260504/20260504090002-Diff-Config.rsc | 12 + 3 files changed, 4056 insertions(+) create mode 100644 MikroMaster/20260504/20260504090002-Binary.backup create mode 100644 MikroMaster/20260504/20260504090002-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504090002-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504090002-Binary.backup b/MikroMaster/20260504/20260504090002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..d35703416d0818d11f81b61c162aae8b78d03d19 GIT binary patch literal 253465 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ȗ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%0AYkL7vjGBb&3tWT?Ko&P6a zdP4>V7+-Jl4ih!I_)E*;^DlQdSF+UOfSO_y5ELtbwf%H7hEISk8Wgq)Yqmp5A-IYFyPS4bQC;x zn6;1$3cR}FX31}h(;}43;;5?B?@GJ?Sm83`72koys9jV}uR*`)y*@k`I^4~Y0-9(| z`ULji!-0zQx!uCTbpDva@ND66#{3en;I%oKm(30Xx~+r591_=rR04`XI-ksC>Nqd0 zuni@Yy00Gvk!CIDc(SGpR`{$vEL-6S+N`5UkyOBiRuHOQphB?pBb%jC9kRnNdUtPs z4?{j0CUqKw2%JJ+gH~Dv1?)YC1lGN*tT0nJT( zu*uOT*&A#rPh`+LM_S6c`YRTd#X|5vOmi2rvII~|jXDVWj-CY#zQo5M7gbB8bk{Dp z^C@b}lpvK-pzxo=E#cT5@YJNAxe>gHwB=GN_s~(}YM1r!1iDI#m#E{Febo;`vKfE_ z`bhGn{NpDhAjtpn9ICF#hGr=I1emjbfs|$`*-|mDo^N%Zv!9gjK2hZPf-gufy59f> z#TlrLaV$lmq8V?RN|bIDl3d3m8iKrND_Uu zRhwomg3`W`892bh4hhkcwKaAI;ghPQ3HcwHC~tQX;NE}Hb}=KHt3@Qr!!lcsUL<#$ zuURk<@iq0vfN0z;K$(6hHnp|EU3W`Yji0};rkXs~4^%q@Je-x@WE>ol$_$oLntoRI zp4Y^_?Ud0ixZa*zR5CMRRThIy{$p>d9uahrBiqt#JEyUOZV=M!1$ z=gZer1dLJ8r@&0BA^Yf<5&(9!VQc363H_Dqr`SP1Fd~18v^l4->l;X!J@Jd>+X0Vx zo}1l_7emX3dbwM`=VgpU4COm97i8R4QC(3}wzm*1b%#TG5Wt&e7%m9+B2&ZWTV4R) z?6AUE3J*=vR9?n~f@X1un71a4b^%d`;_69Tc{Jak5A}{# zDEMzJEC#JY!guFm^d2;O&fGD;>{{sG!LOBmcIqpb5I|d=xoY!}gcTX%F7fJt#Np<; zZE7vzoqHTx50W@+Y+!_Fh)0h|hNo<_C$oT9LrKo%*G^r!y>vI{s8E-(TdF+l9F{TR zHMvg)X1@&@{u8+?kDg`W!L{avwyypCQS3lf)euaB->rLXDvcy82Y51D*p8CJ2rziFYL2?C8BR0~%N z+!LK)P@8N-(La?p`BDn?XpY;@`;j&$>osT)Yv1= zYU_D+XV!d^bLgv1_IWl4<{fK)=iy?wVn=g=q$I@Kvf6z4@;DVoCFb@~PIK-tL#iQE zOFD>#zdHj1_j-gM_}p?NeV*@jzcrGth^~-$85${nRd&;-YTM1+PzmUrWpu+qQc8R^ zo{769(G7TYv!G5kzOF3PH6S@d+i4Ew#CW?57}#uc0jFimTGb?F{T(|kfWW3Kd4`;6 z-K0Xg!`){O4Ber_I4+I7~c%%vI%#O}%T& zmB{elv3f&6_K2af@8GL~hOAe~7*5(4QJWZsppqKT@ol!swPI;BaYvv!Cf2QCMY=H9g>C#7&(g;> z#>6cfRNjoGu`DJ-0gnwosK=V0r@Lj-%X(xHxf+y`H{kTmc}Uj8!fm1o738YhdskCd z7_f3q$?ET=Mln0J7%W9tooUm>tlhC+|BwC;Y;`XRNOT_I6zosr zOqdfb;Y-)e0D59IPgv`cEyi{pJ6ePTWo6atZ(uyeW3N@0}qk^P(;t^wBAU58VNt#C-OGqZmdUIsRnPGwc4mq6Z&eM zN}-1oPOiO`apnA8=3!5{sCE-G%a)$lbex^IKt7rD`e_VQ#+neeEg^zjzQ4z=*S^}? z?I%kD9;~hsbjYFQ)7=bkhaD$?N4hrlEs8kBmz?nzP%>2A>jX#y)UdFjLu& zq;&jN{yi?@jpoBDH%_|4B^hAUFr{{w+Z%$A_ZR}X$Y_4Xjdg{XZXO5dz-Mn=h8OI?V6%vP^Pg^JI9d=7?1UnGn7VXY|tr&xpM*B~i2t2X0pPy$r)9sE7HY9&ap~EIbEWwwnfp zCCx1&JQVdQzHMda)2l$Bz1SnJUoTr*?!IYTlnkL^ zer<#w5m8$E9{ffElql6FHHv33)GPi+L1i5Q8b<@Wf;MWI##20`7+gM}<{{D?W{4yX zVS%x4kgltT*uAjx6cZO8I5P{e!$>Q7`?F{^gL zxs2n}rtjLGCV_IG;fR=4vNs8ED-@8Fd=<)Y?asgR77nH9LHJik%}8|neKSj!Ql9Jq zd;LNIu`m@EOJe1Luk~svDaJQzhl^hq>U*6xM zU%-~ZQ)F_KyX;CS9^|R1o9y*<9t-|f49~Fy>Hdl}e(Ym+epCor7!^s#)eoaSwlGlM2k6qZ&uDw669~;fUCvD2%)l?Ihk~qejy6s!v zbg)bNKg#9IDuE!oU|jTmkfBNEk!4>HMNKxFP6r;3*Y+1U9adJDYd1WzYStdrmnq6m z5acK(j(a*q-hFhqqfu2h7B&q61LObR2{#ws>CQ>eF_54Ru ziL3T$Zo)?(O}+_;@4COr79V*FA;l^(5RaG2y=y1J5FG2id__2pbB=k5wJJelR;g`g zK?O7LYn<8zC2uKh2O!Db%{kpHBh!Xv1U^d`Vr31^{Nh(6^D%p())X!&tX4~rOjtEQ zLO;XNddl251)P~6FFs7xf(OY)JkkNv$NUl`p-fImwjK?`j!RGz*Gi?ng0rcL(1^A~^I^I_(Jm$L} zGogrY(2Baz?-q#zUqy7na}UGc$W!wh!N@}H&18zV*W9~n_}}JQf-cZi1!5W3yRnj> zhX_3dNfVASlSb_()zuvK#@Y)7X__@}u@<4+gm>yB+448m9pz8Uqpy5D*&79#ZA{A^)3c z`JOtdyBwS z;8->+ts~Ndfta21@kDM)2##T3GWLtfU@?gg1CRHOPJ>$Vzw-rx(E;73D{F`{r36~5 z%*R`Tg}&63CoR?C@5GA`WyxWS>E`M&}@lKq_$5pN;gPQHIh4Px~ws@D+i>f!{|!5CQ>FiXVI=Q_29g(KYN4#>mecu z7kiT(!MT(mt#sO5O|r~GfM*t%VA7UX6gHyxW+fTeRN4ohDvUd2sFUt!RxF5p?R?`` zgyf`kv7Eez*aZ1;(afnLi?k3#Ff^VCVgDEOc%>N>#PN+c_s6xMTf2_#kgJo3;FqaP zkv=HS0P2)k2jZO_XhczJvDx!#bLZPz#yxlYGl8u`&-41^|A?a4Y6F*oIIsS%^fKLb!I;(y{6&0{ z+d0_M3BYQ%jsRPbl0UWryYiVd7m|faOmi=&-)zY9f?-3O7R?rA*Lr9y{LN`Upc;~n zR?+aC0%Bom10!L>^`N{1GNoi1kRYs;V&LkS$_70JT-ZeY@i~wxHx_n6x!@JftQ~U> zlUTj?%v1S0uL&8(QwqEFRc4-Y#_r2kFt16pAAsrmKK+du9ag@sTTio zzKa0}JZ-zsh>Z385Sb^P{bvF_ebT zumJdWMo0}6(GEVi|7x2ec%BDKxBXql1E|wO)F50zM>1>VEjp-lulGYE+}MOR;14OF z(>F-<`4R@Gw5}_bt#zO~${hV%iSkGL>gE1Dk-IgQH>|qg%3kXU#J6%<-G{2)PlPj} z3I!|Qt~%=xZ}<@^rKzh-+6XZnm~JebWp;)c0-A1U6P=xa2bE~|XBH!fo#eisl(M>S8q18|nTe2O zon#(Xn5-lKzmB%O6y!Agvi7wt@|-t2oK+Btb`lDp!nXJ*jvW8%%ZOx|#9WG$TX95E zk9ygrlzm_-omJ*tI}HHqNPS(gYre9ZZ%Aka$neB=*7V%%)ic=kYwd1IZ(yKM<|2ue zdF1NJ@8d(M(`wb_us``4QRsHJl=xF@Fh-gDp`0CIlvzB+=O0OFjAAIjVKfi%k3K`l z9_5QcE@STnsjIZu0^jmuDN5|L00dN50H_XR%2QYud=@b9DN>OD9N>sp`s9$&_e6n( z;iI5lpDi$ukb>M0hd5ZA9~>XYrZy%}vWlpc#9^j-DHSOKlXFi$qIanirIZl$-3Dr|y^_Ny99;sM zhFJF#xKr;8?dX$UMlsXxFf)({)Es;7LRu#FH5 zXH}FieSTs1Vu_&Lu4=s!C~U=)V_?h=Zyv~5(nWDj>MS;k^jMD2Ej~44sr4zI zhP_q90?IZwD zT)_1_rX2#l14&mLg|8R9r-SZyBhf9>jY8ds<%2eE&pSZ9Fp1ej_D(7Foh3($ z8KOYFNtv-%N<2`)6I;C4$#==v$G>RCzBrZSx~0bOO*v1Mh@Dm%j$5#>9Ah*pu^Jd= z$rT31NG578T1K%5igk~iph!pMe$+K!DXs9G&JXK0jwC;M8oi@4?gR?B)x!}CIQLUf zmjSb5j{P|ovgsf>2eF?a|U^!1prF||X0?@r$WXsEU%(*K>S zs9_NvykU=nRC0$B!F1ni2C;Rsb8Kh%9{CEtYL92FU^aB~aI=MJ#n5P?8L6n8^XXG? zTJOKl6}6x6VJPi8qqAD;w&PnNE`ajUWuX)xSagpLF@%CpjNL*j3eb@gO{-}Io=)_7 znAdnD&}??MM|vfF-KsNHzEXk4z#$hv>NM@yh7ObK5C`&`mdg z88M1JgGmz?%trn5IT+2`m0-zjy_dIvSB`Uj>%x1jU5ga$xGdkE(CflZD^iT30#Oa; zMwMr4p5%$W6)OCdAselVlOHzD;=l+IqIEGN^#&3YM`Tb@J+bE$dhZee>@<&7;j}yJAc8(B{UAf zvZuCN(wd{yRz+S$!tfomKrNsl>Iy3o^I$l)jB$!#K;e1?Ml1#lYDBH`?Qb?I8!2-0 z#>-LxIz`gEsetwpD3>3qRx}K(OX!BgF~TkpL8(XHacg-5U{Gej`ZiQdD`bb#fTH zc;&cX?#+J}Z-jPr!9dfkr)nm>GwA(OFmY6tV$eKmtpT1RxkOD+$cxhMAcw7!-2nOb z5j|QadTl?cOnRzpmUqg3fq;pq`_!bmLq*vsio0?23nr zZ*dM+Jt*zc`K60`PT#mRF!0)sM9IKbaQ?Z(pQ)Gk@5xrs%BMDsU?8#MHh^1wV8%Nd zVsUIo7!y9t^oU4~AJyoA-T_s?7saD3!%E0)(jkt5-ir5Xn~DkrY~v+jR~|V`1{TKV ztqKP!)HtR7K-X>~UbB|7ZTj*)@BL6xbSwXv^p-ER$9C`db)FlA?P^n(%Q`B8(&?h| zQ+Sc0orcM~klV^NtJlJq8)7Ok%DG(1{SKxHgmV29Fw*`nV++*`*v zsl&s09pxFvCp-SakujM_gmR)kLyD^u&0nG7dy3rH0|9dhoNt`r%b@0Ro^QuOAqj9j zFRznA=IR|8(3dNqiMDt*02d+bW{R2xA$Rb1?H12Gx7U_VCGJ7bDJu2yln&Vbe&_>@ zgf=xRd!GB&%Ewj7jhO+51fW}ok3r?hv1vrDzW_uf1OaPWD$996KPNV5+K~D4+mcMM zTU`dWLb`e&2F}uNlc(UkUq51>$WHw17wB&z)iOfSTEe?0E9z@)lJCl3uweWOYTJg* z5ZKt`--&<4yv7~y*!OWJSMZo$-$qBd~U=h4OxMwC5$^nlTWhL)DQF}Do7$3muqYTVV|?Id<7{DKe_cfm~Z zf@2m0iUr^w$o1~6h?#;2d>n$ktwI5vm%lD!@FF6xH;Y$-6X+?V-S#3N;1N$Lj2Yx# zs!o+R!*e!XqqYZE)7(Gd_9PDF`+7FE!F4jYelHOv2xNBlesv~+d;Ib+kz?*TZM$l$ zyrN2Y$5I?{_O#jh4|sR5oMQ@c0VYK11Hp**0L&}zP0GoK4P;`m1 z$H?D$G<-y-ccEBL;rVd!!|CP;6v1BupeoK<<4qi474uVP{z()B)qHhJX8LoGU!ph8 z_SZvUBLZXh`W+Wz`PzJ2w0B=8;7Aw5d;ixpop3B1J1KFR)($UE==C%I&w?){= zZQMsMV#_WcWw_SsnBdF$pmh=~rs`4`Mp&!5W66KsWaL zDt!a*-@S}-JxP*8mrR0swOP~LiN*T0Au1u#dwIDm;2oeU2^yzCjF3B$1f3JH1THIw zR8VjcPZqJrtpS&Po3YPzlh+RoB}F*ol^T~u#;m7+Znr#{-As@9M+eG)wTP=IxH^ze z*65i6H^cN`tv?Xn+-r)e_g0eNYo2T>l@C4S#`Hf}4Rit1@&K2&#IP?Y;Iv??*R)tp z(3vW(zbVPjCD<2(SI%ZPW80sXDIG`4GgW@e-;-sN8-JM z-Rv7xG+Z!@(~$Xg8J3(XPkYz)TPf9={?S?Dq?I%GFAuH6s5gR9i{CO=kznzg_oW55 z-j*!`nia1OGh*nOD%u$9u5A55d1xcSZC6|)6L$DPSAGcK3#beN{u4Z|F^tkNbpWY9 zUBP9Oq5>H?CyWZm<*s#jz$WplzHhX+XaLzg8>LIuqLaIW{#mI@0cgPk5_^Nu4q*c6$qV9m@v^nYSBAs)45GI11cX2hQ=>*^r-=xGk(gGAF=Rr7sf0W;aMFIw0BZR&K{`TYeE z*v}c!8VWGYl+y~bfWMMtR)>NUb~eX{erua#xr775WfZYnmXam2prhDI45!v0TJIB^ z_k9WyajGdV9OEjLI-jy?Iy{c?kDI`xocZQrnld!)m5-_`o&^ywLdY3jOoL39@7D|Y zX$_n20M|M*hqP^CZ&`{_3dI9$$LoTd!aV)g(=Jv3!>@%4S9)z*~_AFgRLn*UU$0!7nI7D)gR&-k1!Rg7WTp!CkC(F1`6 zU!9HE{ssLj{uJHaG}ifp&k~}LqAKy@QhXfdsymbffo7)%rXeTJBD<;a%WIfq?1B>AAmFkM@EiZdpbS2G6`*E6XKPs&XQ4qem#S%5u zL;oNvU6)eDGfO!^WUS~5=p=cs90J-d)z-d-$fHX*ZrLyRqRYB6h|<7$MZ+3NbG0D3 zLgnl|@o%W9(0XOk718?;%iM`7B3h|{x)jy*-=wHl<*P>Y#@0C z{aMzrA=`%*dii!PnbAELyQ&=RSZ#uS#TO(s*XrAjwVhcii$8~3BNyHn+)=N7s(~@r zCVYE#h;|G|;4|mj+req5IHWM+rTv`o;F&VPc7<$dchZPb%AKxURumzB&EFae97=E@ zQ;45Q^I%{bp!p)Hpl2Ziz+}mt{Sn?Y$nqj6;>@|@-5b>xFYBL=Swx9h`KYwPMOSxP*{-1ndAR?Rt}BkWFygc-Aa7fJ~`hhpp|^|?^F!P(~6z?N<*wL@n#Vyo`GxK zwKu>N(ok7M96gkU_{Mj6uN8-(7UL;*hl)=28)@wl#Y5{aCuVh zHDXSVDX?A`Cot~MH%|N5--u;vaW(yyAB*&+r5YJNGrS(}$L>j{kR0fYvjFM$Lz=ui ziSl-vlBGicfHYN=&ra3de1<~}8;juLa}tcHS!R>RR6#7C*-OPsZ~TVC6rfZ?HMYLy zZ;>O7BiDsfXE#94YN5ydq3E~<23ZQI1=BVL4!aVwgCv7HAgGQ3RXIzKC>4t6+SHqhjO<;nFpzD_Lo z{Lnlt_evK+LLbe z^W0a%PdNlt9%v>8q&v)+=B8v!jo*95v_A1Hk)9%s6XeuQyJF6BY+%8ZD%JuWCeOrz z%(?~+J+oG|67zE(s+6P1IO*T!6!RnV%>^P=H}81zA~>SojYW3T&K+V3&2vyZw)j}J zm@e^A#VFgduqYJw`F+r`7+M>469@8M2ys!I3TQ`JfQF-?j>-g}2;0 ze*gftI_#C6)%V(g3v>`j$`4&8#A%k^iwNc@(_ zHytcnW>c1LC`X8a+lUy5L27*Yk|IX zYGXL}u-~b-NU~Uvkek^<$leqoLLWq894h&~f6r+hhzyu~@Te;SS^ldS0n}AvfR{|; z0EY#7ZAOf`5m}9$R`i^M-J=F-siHH`;0={u?J<@5g>S>O0Riq$I#C4%o@zz z7L1}+wL#A@z@FnpZKEYP!I2}zTK-FrgFeDzVoq*Y{y{Yg=${xhQlA8w7FH>AL~0MTSaG}&pEzW}Iz)3<+l?Q6RG{%>c)9E| z5>+_PsIg{NHZ?P`z7y?KuFA{Kvv(DB|97*N+^3ul3r;#<(m%i!tJ28ge33GANJ3LX z;39Y(E(I+&(^R02T^+PND=7K-eY8|!;5GchLu)#ohy0BpXNZ;iU(z#np4vgN{$w+S ztXNa9{!Vj&-rvm`WpEWy|9-K*mJ;u*>C}PV$GMqTVO98txKMIxjo9>wW#6Y_&KOXB zlCD@nAWpXIKLR`AaR(e?BL8*0*q78#dNp57 z;Mmt++QK`eE-i>cVZ6oYU)KxS0tnD3`zDf})Mk7{Hxo!nG`q^A;|Xd4Srt}Hsa2$7 z?%i1q!YqY0ZMaU4B@8AuH4x7#kGh-}MQCD* zTU>YfISNfn%=7Ie$XI6JuaA?th_@5E&L2s)iK{8Ia=ZPb9yn>A;IryxV{WuTDy@s+ zNDu22e{nlTEbyGfsRN=b1*&u1tReB8Ix|e8Q+GCKefup&J!p^q*5f&2&MI{NJHnA0 zDaONfM(s3?*~{dnx_qygL%Es(ywoVl_;_UoJB*XIZ+MuQcN$jByaU0=(-csTjG6gfYuMFpq7Z(mZQ$PAJnU)pn z?^dc;$fU=XcxB>dZna*Z{-`nSwl{nIU&kq+d53|vqQ7ovnhx|s-2~|Dc>p$6brL}z zDc{6VEtpCpC<5$F6)Si?e<=TzuRhwpX*kv07(90lqdpGH_Lf2>Mn9n~ctz=Z)6iZpQdAJrtr_K9C=RQaOA)Lpna*16AT%??;YzRGm&4X2S zyl?vAt*gvkq%MuG!Aw|jf_*Fo+4V@Y1+u6zqug><;QZZVM!L=7h1Yhi>q21qLn-QnVa6D~&?oT=|!u2fM_pLgx*T?@X z^0^VX+0ngSd1D{APkbHMs-j*&pv|M_xy(^;U4tl7K3>n-2&s^Q;QKBuCWO=lg(J@s zdj(}9LYC2lnVFn#sXgUwO-EOZHr5Hucj>_5(Gtdyuw>3DnMpJnkH&|d&jrVY5+D!2 z?11fd*-gSO$dSI>(Wq`}IM6fiO}_szTe5^L4-BD-S*ZOcRDW=OR*|z<%FwqK^4g5R z2DWZ7e&32keF9a=>Nzf;4=+66KR#2E5YLsv>UDbp;?%$Fq+YUL_k8QCJ3&D4kK6d~ zRV%p9Am1Xo@G!|PTPkm21>2|!n#B^N;Fj*gcDCDKSqBp2<)l_|m7 zo&W;0Y?YkX5PXN3CVB4WoNHQfFAOO02a#OCipsh-peTfUIX0UJVngW1A4KuZE9C;h zn6d-!3e`cwg*29@zU+Nv<|9uRAm-fIC}X+G;b~HMaI7k6lU15gz(4Izl;uq?=KU$N zTBzVJ2-;e%N{oYQ8J9sGNuMNG_s4|X^d?iELI`0X&Z9|u*%M}OQKz#|i2YMgxOTuI zBo`!opGGW=p-~v>3Cx36<%A7nOQ>1$E0PLyYJ}I6^J{Foxlx$}` zvn1k@p(Q7HCkURn}4xs<(x@Tm3&te-lg z!H=SBZ8e0CR*}nq-*zW%9LBtXVf${wXGGB?h=lf>6;i-ZN*N$c{jsR$OUv zVLAy%-9(bbJSF;~qEe?>m3R3GJ@!T~K~5*67YEA0G+JoUTZ4%3b7%aji1$9 zCgs+NdN6`=s|28EnVG35cTPQeiu->&*BJ8$hR8z3I zWsdo-YhxQHvcuZYw{jWxDKFvu7lKX1(ZXYj&^ z-(GFW#zZ_~&R-Pq&-Kvw#Xcdijo~(OOYbIe0}X{*ekNH44-Xd=YhtESWG^mvYp|i` zl_X0I%({lRUzYa!byefhVK!2DagBlsX+$|XIg~TjI`+r!1{qi-Zwq}<4SL(^6?LfB zv5N(bp-;*mzCr#+A=_bOoXdAvWoy*t^IHC)f1nU&z##i20=Ps0o=K`-Xc5e^#xjWD zZ;5I|SM_ps3V+MWNNyD=cC$|q26~A;e0MA)u>vFyS1!}`Xoku+V}Qv=IXk+JjeFTl z{nipEgKWbt3$y220|!;9wQGhmK6J=ZQw>pN1848c$lW2{SGp>@-npv`$29uxK((zE z2F&2y%|-nT-djMErYm>WY(?t;t1Q|SR=?yN2uMXsW<{v5E{sCD+VCV(pZ=2g1Y(>M ze=>&@>h-1`F`uvD(C5`FLL5lYr%78*7WhLgcv(HI?D4d3s+I5QLPf8;L~t_D$G0AIQ6QKN)oi0Qi=OI`~)v&0>1t0d$# zzLVr(tiO~1Esu>Q+FKhSc!7*23N8Tl^{5k?Fm?s8iK-DiFWE!H%T2<*ze`#~bfirU z6-_t0m;nDj0Kh4>9tM}a|D28Oc$WL*7r4Y73ysmac8Wczc_!-F8z(7FJY^2ifO?d@ zNydX5eA)l()iNr<8(_@2wX>MM>%RbCJs}+n8 zse=;h?(W*+O4T;MO!ZHQTfplDstQX&q_xkWD*aS6mn`rs+}`1VV{8mpatK1eKi`$* zpqqA_n#G6pXFcBj`MlwgEN;H}qPnRl4xUf@aQaM#OTJJiy)TW^*)fQ)AawLi9Qw7y zr&+&i!eZJTVoAv&N;&ss4Y@<)SIWKv^>O&E^JFKZF)fW}odVa)l5LVwW4m`F&p>(W zh4-C4Xy=RS)%c8;i`v=&%NSspgy6RoV*@CkqF0Y3wPS*EJRFi@Dh%dU-NKEPBc~3j zM!2C!Qcy|GBx^K;ll_CIG}9NuIG@Rg5QObwu$GXDn(?Opmvcl~YFQ?5E)T7fdmyUw z5j{OS7)(nh9}=;bBqJTRKcxo5lF9w0oL?rf1Vp}L&!S6A+?}fORFlz!C}%l zxpIg|UW%@1F2~a#o@4i?8Da;4M~_|!6~Yu^qEuS2 z3>Y?WWObYSm_-SD+PYgzQZn{_5$`HfC>5Z?!;~Gv6LL=#%~22P#j+HPK0|SZ&1=`E za`aP|0`8~4p`hQBZ@Kz{Syf*KyiR{JN996O2}YD9DnI~&ng@X}t-vLYuDZF}Hn=Ka z=x4{NfzH$vHDi+!FLj||0zmTo{Ql_X;<*69Ii#%IgHnh++9rgHMVqLmqHXKBSl^l` z#R`iCg`!=w8=aA$Vydu4)D%LgI;@Kf1MApp&^a*XLhPp>d?M{@wQz6cIIFR_dy^3X z?2cYj51`bJvjci@Ws10Y6zk}IqJSo8J z;_eoX_xx3{&Z)lg{?Bwcfgb-f1M`PUBVV=fhJ}VRNd5N?f4z#E-(VVwBJSIYny0x3 z3qCMiq>t@0tQInWgj!*d1sbsxm&=E3I?&wqe&J2B z`aN?l!LTP~+SqSREJn0cv`}ru1VNOyZ+8A1SsetFYT8N5_E@5^E5tJ8s|svzURUQo z{z9;_3L)g)w5@C~A;yD1bv%Z8i=VnOnKo;R28h2FysaeGQ2J+nUgH+epMNyqX?TSW zB41Yh9TG+rL-t~saw>}^nSG0TV+VZ^{l!i*adA$jwJ%s~j19S;$Ws{UjlZtCwX&j6 zIg&+US(a2d_;0)>u=Vhg-A}wW1p`h@kI0;nFYCgBp;mYD@gw{C%6-DrU&qv8M;8~J z;{f^Kk;&+IYJ>6t+?tg+h$jE)oZ1?9dyaGuLZGQhytDKU61#mBq4+a1K}{Z))jX_b zpaeL>6UBuQ;L@TDp9pR!6j4-_$-P}A)94C8lR>8r8RDrWIK+^)N{9ceJVr{aa`CL7UzVjxJJ>HY&Q*T0^F;_mi3x9m166nYg_Bgyqnl>E!>P z3&6DSjLmht*y>&#BS`+vW9}&=y zq7V4o=W+N+mCZWS#MblLUb}~+r21wpt|;N~b@Gy?KX#*-!_mFHL@{>~duGl+?`n80 zG~T=iE9h*?AGI25=p&<&X z5w8*tYvVxsQF7HZ>x=y#l5Xd7Ab>$;HK!0iE8YuWUz2UIx&-Yw3K8JL{ z<&`xqy4gP`L)%Ilj(FCOdy3ZPY=Vd7x(_WR0Dn5Lf%{UqyeCS<08Pg~QDanm7E4Jp zyatMkD#U{O1o5T8l8a_V)edwAPupfzUaSH>5S@$|xrb-6EN3^62{R~>xva-ARH5}4H1|^bqz3pr2`C6=s_k)sN?rIt~azj8HYru1(Gi^ zgmNX<5k_*M%RiMw&|^j!w>+ycfYgHSB(Q5Ux6YxnpF_4`r&9x43VQZ#68IbK^W%U?dSH* zjU4|kZpmZt=EFnEIh*9rxID$Pl5^VubnZc+A#p!DDc{HQmT7&68+vG=)BQc_)%3^Q z_Dwksrq1>Qp{Rg=N9_2DHdtE=lKPx(#5^lG+{IGY6^RV$RV&9$*}WLDf#U9)eEW28 z!Qe_T=bu6SIQ<`a0p+SJnPCXPW3ix%$=?MpxIJRDJ7^$0pVT|5@<&1GIX5qL_2Fxd8kX6fS5G96y zYU5=>$ewN*w~-gY)Oz5e6%;2_c2nVpP?=eNSn2_kh z-$g+;gp=%x17`%ada$#u5p3ZYYYEDPbXd?w_LRNol~~{x%S2k>s0#FNh)|HM00aDR zM_?GBU>o39u3{xaPh!c=#@<@UU=|vc)Z!Wp48P9Km6DFlo!v>RMz&9SbEJUFT@H9w z{ok1MkHLfCaPV+4#vsHh4$3(^|H$a+!>{!FdDnSm11aqxIAN<r~HZO|--C z(wYRSufl9i^maY(`o3ELvmxsqE?-uX!LbHs&%vYVc$pWTx3~kzek6c%>W2* zmy25IQE|h@d^F<_ndS+4aWtjdOPI-O3x}ukRplKQbG1^abZ|sd|xI41J>eVbdT` z8b-23psyf3mKV`~BNIFrHtrtTiHw-t-q@)0sYC4EARG7{{a#B1nre$`tRgi*{H6>; z;V{s#sr3@*Hst#G%%}7Jqu-q)i{C3xnoxxk$jz_SN3yzQH8r<*W^(vM!D2Ff(V20(VF^3`ga*DJ+oy+z=+=;WgufN*c-90u+L0zyob-(;V#m5Ir`U0 zDK5d9(7wERl{{!iYbgzVSh;_%e|LWUZLAZk1^lj#^9I!e9meE%3%{U#fq$W8d31BR zynEE1{@wDf!O*qO4qCdxXJ6)`SlPiY3YL>hrrU^B{>j>HZuL=X@TEGXp$XFfdZ?f5TQ{~)rl&jRN`yuz) zb-FaNHIKb40>xGtSsKxDPsMDzBM4hz@OoTdtFDg}IzfJsUc@6-BF12GO2pRu06;}a0HRre#dg4fR%1vXYypd(}Jl|2cK126Q#nMy(MNBlLzD=1tEfge} z*qRW#0T!o9v9oYCS|%;neKAR9im#HQj3F+15}}NJoifd#?^kgIt0rDhxK6eb`~#xe zXB09F@RasV%#jm#kXD{R1-C9MJ!seAbyzF6emf0TTKzN0?s1#;p6Cbf0s*kPn8JlV zG!)@D1e71Zv}_t`WUM1dP!hO9{-&!6T1P2(IBX*U0KFG@D9z1+Qr0NMKtpf#4sYJ| z9PW}Jw_GC@`qDir9PVh+R3|RQ7eWr6JbLJXg#s9|r8ilxxUo zs)K@y$@IeG){b?06Vdc2)5opz%(X&v!{=D`zM)Xla(U858O{#Q@6Nz!T`3s^1^(Q` z^^*R-==PzrbEvn6L&@lbKH#z&an13E4c*;Qj?++q9MJ#m+Ok2Jeb}q+pc$dYH~i39 z{QhQdytJ`|0m#L!=x*Pcm7X#q>*KIKA^l4Zj}=y%BM#OvKbPk!%0|k-vX}5>%feulYiV(TF z3Z8YQE0bl&95>S7lO*7sbM<4igsx;}?Hk3h0xIlHvrEk?N5?9p36^;ogXrY?eZ?Uy z>7N6&R7|N^U@YaPW)NtMbdBWYFrlrd&TUp5!h;#>Fu=ItoJPOig~X z^RGwlBokZX@A2KB-9h!_EmVQlX7U|gH)VFpNpg{nWUu4lY9!RrGx?33E*LTCSPt;5 z1`Zuo3qY?BQ#1nk9;p2|oW#j)cTR81{aK(AzIW6WL-wu?-5*c&mVUj!ZaWKY5b%Od zqyJYfH?t^EL2{2&`TG1HpulWco3KsBGL^9D(faMhO#&apqbr!TVYJxRrRa1#T*Efm zfBnpGu@k~k2hlYlB^DGJYflrhn9eRxe#s=EpRbrX+S7u4B(IvwKg}FG{$iL%HF|_V z=}gDWugN?Na&LE_H0))@$18HH!FI!mc z-p(n`k2;o zk7v=P1-Q4f+eoO=jW9g3CidhtQ>m5$;wOu2Ol5dGzl*zG(fYOP2rXL#91gG9JDokx z(O79|O-2PzN$(eP2e0Xh{hIi0f14Jbe4Dq=uc4i!09RW ze+qhJ6$cxrnp<-oaK5OGipsV0VDSp4e_SS}uZ@Bpd&rkf+~&Ye|H$4j#Us`ZGn zitZZW-6>?%=D|Ia|AiZuvEdsz(0Xh8@V77hJ5<1!Sf;oCdNUoj7ADgDI4hZ9XA{83 z4rAa&qMrn*MQOGDk_U=^}U^KB!x$!g(AN{nkX;u z0lZeY(JlSo*@lzWLTQo?fE*8Sb5Khx*=w`FL7Ls4m}|K@ja5*KSv9nH@380Dvko)gA%{%z+_-abJPT1>it3pVvgWgQ{a*wgm2pGg3(O$YGVpO*^A}Nk$5vjo-Lsy zT1KcE$kGJvzA!j5&Wc2-_#vC8Yphw$#82i{oH|nP1)FEu7X;>e&1LgS;#j6!WE&8$ zPk+C?jD3izU7^c?LEWPpqVs$?85zicSVz5qwVof{=hIYA|Nn3*IaB|<+@{7htO0c) zYa|Dpq-;i9--oB&l&#wZ;B0lkcklMAtLN?%TFgvzkoA(};yL8+hdc82mP2Ng#7`!V z#@Nwt{SBqdIiF6#uoulb*Mg?-=4pv;H{kcY;E%(Z+j65VPfuZU zT3j?oJ8B2yvqdi-0=yKrFFq-mni4-yIFadq5jz4q1uY~ZhqdTDOnQq<-0JyCu;i8% zhr(t<2MDnar9%B`IMt&|K>DTCc(@?S`n}98+DI5G;sW@2dbuXnBmd;r0m*VQbWAn> zJAWf(Sepd8z^@JB)uldxLZ)KMnIe45-Cj`~of0X^_>&3Su>H5sXQR~VEF}`&p1lM@ zA+E0xTvviQ5mG#|s?`qjQtEyaC-NFh@i3+f0gSIrcoBgNn@lE<`Tcp`#h{@Q3V*dw=_5VU;E|cyS$7Ny zlRovE5MDZfsxN-GH905wB<2H{y)p@O;gy+$+-^QHX6Wm|Yqt6n-dLg~MW}3P3f-Q_O`+Qb_whbMA=Pl3AoiryN&K z$B~Vp#=se`twfj?X50Dqs3GD-vbW_H5hf87zWB0IH^d`8>B9}tkPqt3LP5NO^<$Gz z4?n{uUXJvK`P!0#b8y$rKCRi~cMNpKmXS3<3UZr5)#dQ3u57h9Rl29W%ZCrNXvUFQ zYiqkb^3G+P@D989%#1A%>jCGLFUZ$i^yXTm8%OBkM#s4Rx`_rbO?H3m-RJmOjh214 zZsufO40O-vgkG!-WfcYLjN4G)*gGB}P08WE@I2S^pMpFma9q){XXufGkru`E$_(XY z%PB^a^vdwoR^Q89u-@YcF0O^|pL$TyA!~%(6j;3&l>#JT3iaqSjsv%qF*=0K!@3>;yq$xXROsK+Uwr_A&WiC=oi;9G720J=hu}Zp! z6?{CgGv^BK?U;gAE!u$8oIJo4dZg|t(-bI*X_iO_OQ~?5A3wR)?x9TfLG2Dul<82j z-@ha&|7?_jKU}Uj!}m!S!M~UtDK@SKr2$7PsZoe<4qTW5u1j5#P7bJaitZd~kmv%uG#Jz9gU1FgMwYoCX@S zm!9oio?1R0!dV7suT2rpS*Wt#rnm7GY0LX7Y_0RzQag3|41xs}NR-^IF2rTs`|4m1 z8nVWt-iy;srgMy>uilm=qbHo?v;S`(^=sib_R_~l?u8xJIV7<+seVGeoQ{qE%iLJd z!K1@JzqC7#*OXj+Bu0h`C#3HVs?rh{LCQgHW(t;w88SxUE_<@e^FGQ(fZlWlCeZg3 zuoZ}^Gj~p^7-JSxN5yu$I%MH8z@unSU_i0e%rOC9O?OKz)z!^@F9m?3ycF-cy$Pb) z8XYbBTFct)j=({tts#u2$JJJl3AB=_zYxSGaWpwQxoqA;g|WWp4Bst zP?={yW$5MhKQbh?!7+3R5|^kr%q`iPcmIvJ8WDW>Lse@i4hTWUYo)6a&-dH&hk~JC6}oq~?_5vblm{gos>e z!_y&gj8X=f5V-d7`4< zPat;QtPH~T&|ZmDD1u8IeuPA@JUz;^2k1XGnw}wFj)T1c#kWo{Q3`d94rA~|A<$=u zLhfz06m>NkM+^zP%d8=ew$!vvV${ri@4($+7_BjO#bhn{^pq?w20GdE|I%7<78NJ; z7-mBfDMw=3lC`d@g}pZQ39}A0x&()`Fso=U(B%Pb`H-h2#HcX`3$^HVsLk{{K^rt0 zF6@hJ!W1&G(bZ0734c&Qn8+05ng3@oDg=doP3HiVmUa8^14u4!t^CU~1}&#u=}Zt?89VcWQecLn*%(KFK2*H<#JSal z4JLTN(518@>VyHOfYgs?hh~Ec87rZMrJ-yLbO67c8qJ}mEMDO_;c$QJ*O{(3|KsL#P)_|xfRNMGVioK63==`A zMbrCHzb&TELFc_AeZZ2v>7Mein6>W4HLFoGqQ5PaU|BMBcLJY-YoT9-P)X&1Eo$&T z{K#lmVJ|QvR}1i|evAI{y`$<57d(~mp=I$S7(eDe_&wz-0qQ8t{AyL44sql!V-v+patcHaPzVn% z={y8dFWf#8c25gfLL^68RRoj8NT$@X?3=K2S>H@2ZpOPt%*jt$>g!DV zlRe}3b{nQPlnBEXgzjus<#I$P3!)_gG;&9Z5{Wx_TN~2!P!Xbr!)2)o^I%zCFXaIM z9t~71|Kbu`@E=3)zw~3+4LhMdL?T$^b|^N%Z2;~&ws%!7>Iv-;%VkF`t|GaCXYk`G zzc$A=Lzq~P#gG8iJ>kc`R`B(FxZMjeWl!)%fbYiVAUNF{T2-K*!L5Z?@U2L@X%O&$ zI)A8C`{SCmU~#w0WCEPc)3sg9wFXs%h59 zwNtCI%>>2-G8l{R>lF`+Ba}nt5@AsdqOx#=bidR`eTp9;FK=;wp+a&Be7*`;Yqo=a zQ13%NnaO*4wY!1>>BuLn43RAI%4P#i_7QdZ1ejD@n6J)pwS=cfK+QX#4Z>+VPj(JO)ai^nw+#D6KI| zf({=|7NK%-8J-f^cG^B3OeJbVhtlI!kR!s-aU-R5c=-t_1W{k=tWGJleJ*D#`GtMf zgb$}u9|S_F zXBaQ@94W6S(%fqY{ERQ%Dk2(8SO7_hg2NHTIe>(4_9LC}9;2%38FJ(T-D1aer-v{n z!4345VL$%o0_Y&lDAcQHU+W2)s9v))qg_(T3$rM)$104kMR=CPy$o=-=OmBS&j6HL z=Qy-N%@L+D!&qvt9uV(46b9<V}OVw?bFx{E?Pn1mAkr>a&Qp<5MxL zy9?&IlNf$})O~H%NmzLu8aWUxyW0tQGboLKE||A3Q~se&h5Tnr*UW9}tZccS0n^g| zXH*>M_M_@UTBS_W)tlr}1-`a~_n@!kVo~mjw0jE>=z!5)dlVjCYIvrwc(G2-Y!c0} z*llrE4N4!7n+_zqAMW)!zRM}~-q)of{H!VrJt6whfA&-v1|6@>adDDB7U9E_Uj=O+ z53ECKu#u5v_|(NQ0{M6?TM*RB>I!L>cn0+~T20ORjCG>V-bdRv*%rUL%oQIzH^u*i;xjF?X$Nn2O(kT|#Y65!w2j~)MAtoHwu zqUhU?@jX$qdY%q*tUC-oZme)RbbaaqjFV7-VZ-R_54gKe(5W2<-T(4lgLDqX0l#St zmE4NuS52Wu72rd$Or}yQ$Beu?Yk*a3e>8z0FA4EYeF0^Q(Al6n*rOfK$kALRmFN5Q zRG^~DNaNtyVuOo8%4K}4_)DCD5+%zgY{n5(IYZ2sS@t(Xi|2a?n3e7p7U>I~!cgbf z{J6t{VDr+st4cr1ohsk(9C#r~G&VBht=$#xI=aXN6S^&nl!M)sn7F+mO)G?&??VR@ z830GigWXRjhMZV6UD3sjyKz?c(Z@aC80z~10(QT57pF?DWLol4B~Jmhj$wgD5so&g zR>{2xR{zpGhZP{aNiUBN*@0x^CXGfc#zzl%R^L`<=h>gHsIbY+%~V(iK0 zpY4_A88ZVcTlGS}MyB^c==>EigBzPLC-WGB1p_4^7k4?;*Y=Mr3@mRB#GY4k*Px!z zy$+BBj%D~JQ0n2gU5`F=F1ar8>3-2QRV|mH1A)wdHq3aJ^(?g}sjZtp1=^SpM`f@F z_hVQG3u8ANeITD+yeBOjaYo~~GqKL;TmDoA7BE25BiKHJFOw~ zxN?NGgxc1)Zri=)*a%@<(b;qk=xPY%pzy_S;zFYu0OYm20-m{CXZO*OKb~*RJm^u5 zsYkn-nX{-4c9gR}44~XwM^P?ivj;+}cfdl*#Ch%8%!hz*qoZZ__tRPuHbgDE`wiZg z_JnnFM7#%utK8smh#D-Jy?akJ9eLSHGSJV~UmB!f9>=*S`gukl{Y2ke<)c)gB0iiD z-x3!Lbm*N@Z!JP0#V;-=<$?&Y-I1UQVnJEkkCW}~>Z}dtDcuXe_2mOJQa7cltyJsB zxrna#(rmkadfpNV{iK|kAa`}>Zs6EtTyS%dGlb61D+GSQcK}NhU9_C2pgE1~8wQY@ zby(&6#pq|0hr(8{%2)x-8IT#zc^q8E6kT10aci2mZBjULxgo{QMxyhiRzxu~Za@$6 z4Pr-J=zT00QB{OrE+LN}vNv<-K_)W`_iRka0~~sEQ(=JpyUg~$M$GoYb+^yKKJeS& zHssrPZo&ZtF4{98GbZL?rHnehs)dL+;MSJ>6vU{`k`@1$zp>cK*cq6L>^g9I$El-Q zs8mq?0a*`P6(g3KQ>P4G5wM7db1WP5Lg{u_FM_dBv92Nr|CI;O;lzL7-NiJ8gi1II zxl+cG_RJ&;^bK5j6V~D@8F*XRPz^NDN(9Fm#WLtQXhi#G;vmQjthh=aVx&Zw&~U2$ zBC5<+)!o4FXl=1GL7g?gOhra1nZ+;1nvFkc(-p?OdTE+M{=Xf!zH)<{GdM9yLfAR(=NOqQvs|xGH=8g2s=Uu#8OoprAamYvn6E2uuacCQLe)E*$wEFm z4FH{?HaoIY$}Q>N+-*i4&*9Lq1*tUe2p?yIj-by-_1BbQBYY_c%d8aQG{dy{P+RtY$-*Dm zTFy`^scKg2D7xZkmkgy(Um7B)*B;u+Y%mH#dYTpExc1dNt4;0H_aj}3?&J$l4#9-tAAt+>0-b)mwC(Ueo^NWIp*td<8z z1uXhVJ(%Cs)Eo@M7?T(9TLlUx;X7s8zHe%MVPPEWw#0zsGb6O*aHNz3G3Js2aOmy# z`=`oo2t6|Chxve`+aVj~7x|_?z>?<(tyT?X78v8nts@$o!lXeBLhye7x$>h9f=V(A zM%JUAMr?t*+h-Fy5F^VgYyUd0C@&Mi4!HxyrxF9FvCLYygvLj$)Tl z=GSLAa_oD{N3fI4=pV!0I(qBc3&hSpDOjR%=ZHdr0zskTv?qix2d`F_uW4noGRXHw99 zVLk=xsR$G4;!i|?h@G_ow0tkwyb->Rv=SAE(R<|J6ah1%5gbLHr@i##Qc=;?C^}o& zj40j8Us*;U$$AGZ1tt@DW6j)ctrdvVQ*m1A1O+xOPtc2KQ!G~%ITJ(#g%UWU0=uMvXTk#2@! ze;Dz)l`=e(#yn><($kfZ*j|veE`ng;UD07lj-i*Y;N_$Hv%9SMo|dA7B)s2xG|d*) zj%e9m>z)Uq9jQ(pW9c1ytUC=6ywXfuauW|9{UYU|w{#6<(CSj z;XFFpIASeMs#rMC+SA^2txVv<{W9{PoBesYrp_YN9Bz^?Ug#Wg0Qm(!{-IB6 zjTbQF5Va<&aW47CFc2rJ32YZA_7x0HNqpKJ-{BL_fuXdwu(X%qsaS6ONv`Xls5End z^-3{<vVmHTuxqQZ4jv<=IU^bSOL;^UQ?HKT>S=unkX z5N)w>I&$Ana%B-jg~Iy+6(-`rf$e#@y2*4rovtFr^z=AiLN;1lt94Ezkw)Q1+-_Aacb;RO3nMAwh!~ay{+7> zEHbWG@kO6iFy1g9!^n)k@J?Q1Gl$ci(DM_2_JVAF4zbs9IIV_J#}bX%X$G^$~w z`_=sy$8WM{lmZ+S0PU5mMOb$$KeHCN6Y3u0YJt?S3uf!tObqoT?Q;pxBnwM`wr?-G0m70cB0i)6!MI?EwZFi)@1QGXEBbW8g@&}8KgjHp#dg{UyqtTwB zqXyMjd0lRK^gJkxfy~b8g#UZT_Y-3hcl1lN_Ou|D-8h{nA`PUKyjXKNNvi%?jg9gQ ziFn&VWqyH@S}Gq<3@*qCvbnT>quqB2G)p|?`rJO>m%9DFMQEBD1yD#40aY@k47M=HI5KCAnS>U9P+ zONC58IxNe$MUIP zD;ZwRsoSLC3ezdqO}!Bm*>n19B3-R-nc$>i&&E{;nS=p{>2&3?Bp%P)yu#YNCUcth z%{t3vyD!pZ%mxO;kqV(RNJ7us(P_wstMOi_r4tq;n6pjJ%9M6U&5l}yL*ldW-K%J$ z?B2wjAX2V*!9E;|`Ce*zhaWMEZb2~7^q~i$bZeOdwI3lq9=%+y;^X%eLa5jjp`0Oo ziHZOSK7GwrxyAVUG`&s*!==nKPHI+7Im$)jUGe9BZzbMSnq?u!vIlhLYTzPXGT0By z-ZDo{xI|tLOx`BF7>qd5in~4O(hksK;9_%D7Lnh=4Nqran!mE=0r{x4zV_7#XY1#| zPzLlv^3Y47Ad+=IwfVTT`e?;8u+3sAK=mP?Ig#%Y?57Hmp)Zo!BqxOwIBtTCuj4SB zbt_mre3zx#b({Uz3Hi)rc$eAkWSu$~+rESI=)DU&2H-k|k?0^9fErWL|(}@7=jsugiGc&k_n*@6NeX{BYv@QaK}Lb7gykNeAhj zr3~@HjCIO+f^Q{n`YgpqoLrEHRFv=vAjsYiuYbpig0~+pZWu|~lyYNr@}#1V{S@!1(v7jH zVKrzn0u{%_46_lRZ-qJw=i0k>PnmVxUKnr0H5>o3BC)lBHuHSahz0RJ9LTyKV+R&R zK5P%^{@3E_0|z~-}p_QWq`;6(HJ1K#$ z#L@?}hOMsP%n&=&HfPS17P{wJ^)u|<0Kzu>f*UWKAXSGt_a5P?PQE=`eiX-$z8MD= zMF$7A*Yf9T2K!}>tVlhimD}o~M7hxMp0FD(sZNJ7_uVupGcual68_{|&YvBKaTSt1l zM3Kp_Jdzon^S4sg^jWm(&pV@)o9xlXO$eR;0>Bwz-_X#U1HF5jrBIJghhmpw4w<9& zpCxVaHFzZMp3Omx%lXewEqz0FE!3hs^s}ah=f*K!M2pYD+T2Wn;u|N5ZcH!eRFL-E z$}$e@U}@PY5YZtR#l8?h7n8Y!T%==yxFAOqaXWBqgggCrioU%cIl_uGNQ@kSI2O*$ zJzTLKA^j2KHT8sb>al{DN;7NR_A;Cz_ow6w<<#hDZiK8>7nOdlO;*43xD6+U7_Z3|u z$nc+6kGR+5I$W@@0=`Dz*C@C>UiYAcb0GY)GLiy?BhPJQDT8D)%1~gsPXu|rT7!?W zoTAF_M{k)ZqT34QTU{KdNU(WYj-w%6=F!YAo;DW0Kbq5e?SwIwO?KI;dU+1{K{~&a z;!)QX=NLch${-f7`6xa9g)!;QGY;O8$UVxrV z?z#vZ$xv~!%wtFk#i`-sqZ6fBwEuA-SC)bJ$%m00k@mAO&BhMksR-otu%0n_3M7CT zUVu&5D9HGCj?jkX7ZrMT;PT|#-G}zLiej*)FHuc?0Wc%jAG3z(8Qh&Sz1wo>u?YMs{0y z`M?_01e*OJJqK05oyyqXMEb8@DvK*5Y7h)I0^!(oE|3b@ukaWGpw!J76;z^o$8)5Q z9jZK2Q{HC8Q?t%9J%K`fm9H%XN8kJug-bQqTVOCh5Rv0MDPwm<66@rNlq#G{WyU$V zbOSzfOm1Jmwa!Nz}*2gIAp80hMnQ)S1#hb8g>O zI@b0D;N2KdGAud=^}+N^&%Ip_aZ_2nX7944c-Oc3gmz57Rp6G~ThVX0%%V}V9AFb3 zh(MlA{h7&@?EdV3zJE}6Aj8+jobk;?fN100xP1)FiqK*k6~wl^eS%seA#fr}*))%@ zD+~7JlNY6fm@ITv5TzQ7kXF0$`m~YLcoi(gdKx4GXH@9FuyWLw4YFF>4Z0C+XeD`N z(<0UPYJJeawT{E^iKQx}#Okzaa!tZ+JX3GxDlVAnzR?fdiL!JRjVF2mdx7u2e}FMNmyScaAcjj2yWV3 z+kr3o7{BK0*k?*vHy=0l%JTE<$IoF4TZ81LVDbglNZRJ;I5u$MTxE6QeUQv_HS^o! zfAgem!Dlf6luF8Kwx;SO6o4Tf$j9MMrp}SRVp9rYsUumJ;NG3qCe8q&PX5#|>^>GC z#xhVc0wJoe1-W!ML3xMJT7)#&!Jy@eVkob9eQ5`d4H7cwN85n$`4bzynTE}|=YH5b z2(DNcPGim<;-ft5u5a&%VHIMM=?A(^jflq)hk{a+Jd~tkvDXh2oU0#I5l?_a#y2Vd>JC4Cd0Nq!Mka! z9k;BiB}~7{->UNh5xxc3lPurk}II`;VVWg?xW5Mh+&&eEa~C zif)5QBD0*p5&NXmn$pu2$kg6!VN+9mbe_=<1_zSfvC`{G@mI0Yv5Y1phxdo-FmGf! zxso`UK<&gV{(zNA!ZLF%jH+UBJs%oKv*$7s-GJ=mtLx~hsrWqV?i z#r3$LKXrvYRd(VuC{i@($2i8$0Ax*|1_VpSJZ zB1b&x4tfhQ=h}+s9@C-+@)_Z23yHDuTtN2RY#D)>PKiOzKWEXQ z_;3P0YPPxx5A{%lnP_32A1&ga_1zACtM*hNyU&}uki||g4o`43LuU$c^#=r*Gf&olE&xVHGrB$*ZsY? zloRf!A8vsfSATfIk6nUOd5d~_+G7{t7l|m(tjkCNX_plrkwB0KP}wu1%aR;lg-1X| z*gj6h{Wv~u@NK8@@3hs2l9uA#Iba|~- zY>^;HdDEKHph0%sk|P`di_JGGmR*!y?^z{PxP=gCN>P6e#{%(XKanI9u;}%o!wni< z--Kqr+?h>vmvV+g;O3%Q^}M!A%U?-H{s4uU>5=0_6d%dFy@Q{}@L2SsdA5P8jE)&w zHv|@Aw>GXzw-lpYE?XUh0tfe}HG6fX66zJdKC6ye4J!3?R9i%-#`G5W=A!I%2Htq= z-vTNJ0I6rK=&}{H+lno2gg-HQxuhW`iTzyI1LGJk(H+S|BUY)lRMZ1&=&sjCeahK3o zP<1&n>t2Z)w_tk^gA`SCBf{3Q!a^^$1v-#QR^1cXJqmy56+im$D5eQ3 z11Hh)_We|aJ3GXNi=;o^yU{Y&CGTea&hc*8h=5VWD}L3uA;_^iI3+nrl(f9=Inw+^DvtwuYKC zEH4%Wq;aTYrOgUVlSz4+Is&RfT!VNnfJsg^j94%IXquQ7rf-`oxPo8zuSIOZZ6!>s zRlV}uL&eo;9~*`IH&0A~M9xm|WPgcz+Xn3t+}r>NZxjeK1(LibIRaD=mZTJzp|=vAjujoMki6i}6fs#L#oM78kPRKC$kq{S?iFcto|~FdHx^}p2m&dEC%cL6kcO|SwjmV9_0XF8CHI%j|> zJCb|k2x3>?9}~5UKZ}~{g+I7Z8!v>11P^wjSl!#^SIGJRSZkkUM!x_y=*+#8Xt?yz zM)u{4U!9>AyFUU-jz0+2ff*``6sQz%a4Rq`3OD&Lb+@1WJ48MKC;r+z4d?b36$g&) zp_VPD4v=GFqzs3o;-i4QvWLbK1V~Ks0}E`oQ8b_oC+|FoE*fET=X$JuME$}MW4*I~ z-H`uYwgJM_CZ}!$x2FpOM3jYT14J3v0v%h52JE*({pCK8L*Q9#owd7=J9qHMTMasO zcGXjA6$C3WCh`bGRn^!ZcUn`~>dXndCc(+MTVxN5EJtjiU^pm7=)aH($|MM-aiz*vG%FMCeX%!mR?lBK9@ z5O1qt&9Uyi7XG?+Y%&%!SLt_Hr_lT>cNP6cA#jK5kIUSw7{wuv$ksnu)guX6vnY&W zWp#T=M*g9*dU0nOOfd6Z!3D>Qv0C153ou6k+4N{xOgAT7rKshxGeDbxu(8?zex-`S zV3)N!Q%&7-vRx3HoKF${wHvTgeYuwHLnBXx81YYJ_FiuXe+(-a@SZ_M$kIi(pV(>w zZ{1R6B^3X!89PoC$BYJD~aUS!a6UzEUS%&wnZ^^~?b+t;FrnXKke1G8+ocVHCH zmH(PhyjcR3=0P`(e1qwcehdMbxZD0cLSLS*6F{k@OVUih=Dd{X8cLSWZzWMzP#mB`&7Z($vpz&mf5-r>Y2%3#mmDw z-RHw?E1301R8rD{pLnYd6h`r5$3j%rS|+@Nx=a(f;Gv~zj&}w*rE4I9)6**XBWevW zP;-egx66&U{^>b~vf8Nc0OxWE$-3sYHQE}THVI}u4+TNFF9rV0pyEgp>hZK~{AuPg zX!Z2@aqD|pnbW$JGG&N>ZK|(P^S|w+wmU@b2dI|kP)G~*NhM)l@Xp~VTBFRf=bz}_ z42;fI9hReUi3%Pppt^rw6fGp++`0e`IE@1Lf>L{xZ)ff?c^D4&N3I&{_7KScZUI`h zMlcM9X=gW%43Zk}PbIBr5gH8TfJm*1aR^6s9M+KG{M~9TVnbrVN-}rJw?Co*#O6yM z&lzSeWdS7-Y7wPybJj>uRWoNKN(`l9bs-Xwd(huP<|Ca^ZGwv3_@4vUSf&e0BFj!z zN*K(uOepPK{AyaQrT(D$aw`miVrRt3f<^7`HP}IrN}s18*tgthU~S@)S3eVDgFYDU z4&i6HDzmJ~6k>DZ`;?{uzm?r-PUz*Yg0NZ1=<**fuMZ$A%W6UfKD*l&p02JT$gKtM zO-B5ErNpj{M(3}}8ENT9>?F?m)oULD^xNNYzK#l5bc6A={n+anWy|LCpf;d}{`CL8 zn|BcSRKR219#1bGzBESyPj8y$PppecdXs$mx!O9aFjvFeL&7e{kgvaC*;exW zAlSE3iCZd&3Mu9V>HBC-;AYs<5gojxi^r`>1~O6;v2%ON|9+`t`PK3)Be$ZCL;&FR zG3UHsjPP40yd&a2I=VaRv!S}{^#*(g^CiQ(&dL<1KR|o(gfn98%GWI;bXF=QcOk~4 zY-YDbjqj~`vI1#s+v+EF+3K_3=5=pq%&X$g7U4 zyY9bqVC$r*V(S0d??8Gs7D`n{9M;^Z`BM(|v5LeuKRmD&H|>|!G~cv4?{vyPdSQL1 zs)!po+DI5%K(Jf%S^zsV|EUyS`%3^|jP?>c(ESBFh0mZp?AT@=+Gw|QbdpU~wqrwn zYSUTkF!(LxF0VZYt4}p)1Dj}|xS#V-1ZR{@kj(ubDJ`#6K5?Nl`Q}vJUvDy@YAVwV+lgP22QE(9d{S_-D z_aQ)HP@f0`_4@`2TunTw^tuiXe;z4j{Gy<&Y68qHpVTId2M;i235>qDAxv!>+n_8n z!uZ6?GvZ*^4_4z=s1rqv!-LpBlX`h1PN z*S1?OlaFd06}y%CakDD(oYvBOjMHMp#D*KU9`$nUNZh17Ys4G#^DSQ38Hpf7b39PA z>9Nd!mw@a_bOcpO;FZ4TZS&~E#JFebZznlTt*+k2t5&p42Db|ri_k_>BYwe_oj_&C zV;s}~ObJKTJ);4bYUa&(W3*(3%r&N~CK@ZB#!qS)i1M3{v-2TDLKg6?3QtA;z=4CK ziPgAJm`uqQZ%xcqU$ucD)nrb+yv(dAx1zda%%=gP zA`jkwP$0or9PBe~pyKDvQ4w^bdx~OC-1#$RmqFQA`78x7O!N4O49_2jr?56K(bT3T zyO+m|e&xgU4Gsab_hZ;MWM`(kBf0%rr|X%;t;eFi-&vy%IU$?R4~v1+Xz+h45$S(` zdwXf&5%uYVMUEj%3a~h*gD}Mf&+fm_M-d>)&1QK$jx+uo`*$V2qjmY!{na<+@{gi!&^SkzI1!g@rgnlpEGUG;IVLt)R%5YjIJ0_#RLx zkY^;sy|Bcb?=FLXEz5iS4PBMSz=A_S-kbUUlIdbDb)w4H#Y*}Hl_P+?0dIW6R#@i8 z)&H8sqV2&e9cN|i*G&YoNxgX$4`Buf81!tXq9xaL`x0+M>vU z#;vjQ%RMS!Lc>wy+DDu{(`)jRp0PL<#(3*>N&Y*EL{Fe~lmb)u(icKaVWj;d=`JX_BP zbIg#ysgMJFf6mzX=*S09;I2`4EI(>TQd@EKBLg5a!j=^WQD(k|67W%;lIY$xK&m|Q zj#59d!TuynSz=fbKeE*}ynrobu03=1egD?#9preMDxc$X>yfkeSqD?1)a)b!$DxPHDC zbfWd!TKSFRLuv7wzjd49QzmPv=^ZH!dH%l#Rj3EKuHJ*LuCpT0bf4&1r!do!V^uuk z@wh9qWtiS>D~H>ezK|7apw497WEI{^4~s`x%!%iG)SJ<;9im%N)et&2E%=Y7SH(@3>~~b73n;S> zh~y^A9Th|b%!qbYU|GZW>?;H?rwP%TdiBLy*it$*!UfZ~Jy>9_o=@V4vlDP#+K&@~ zP-;`BGgs`hZ-q*^bWo)x z&e-OCGk-Ycon7R@{A1MnDMiQoM6rY9GuBHMLwd=O(&vJPrm)rxp#i@^MBu(gjAIEebFrj0;7lRv;D>+;^D@;llBWOn$H;-;>1HdPvYtMH zNd~WIfnoK9m4OHGW|e$H{-hCW24cj$%todkXWVo}%-^JKfJo9%0p^^a=^c)81;ViR zt6s3$N^hba$h&01wZ)V-!H2l>i^?s^{o9~IH!b{HqiF1UHX-~?a>zBd!PnN91-&x> z;F^)6a!DIyB1w< z|5~$`fCLkf-mL&(*3oy6n4)$SX$}!vY}$2h&7#91Ffqrte+adGc2Ue9yF$g5UdDg6 z56#e$!1~o+?2J|to5B^{@F*L2TX(0MLrT3@0xF;A9#E_asLoz_F zYO;cNrGLkBi}wB1G2)=~_$O!W=WA)#^^*vCJ52T5WyrS~-%{!aFieaUjJ z+Fwx@nGdVM-vuqnS>e3HXps_@Fcqvp>3OU{2}DQhC3_>Sx2K3&@@(&%m|2q$zTcFk z0TrayOoN6WAO`~i!ENBQqNupN;=(Bzl6wi#ZZT`vg?Os;gK?QyaTgBwb8fn2bKxp}3ICnd23TdRjnW)2$= z&@rn$zR`Q;#x~&1J;mY?UX4tHS%mNZFDjx#xoc0%Hq%(k8^kMOPbPuR@r5BeJ8hX5 zf}@%9+5%_Dw(^jRXV)RketGa)#TqLKjLG)@;X~SMC)PH_kyw9kFf&Nc=-eQ~v}?`~ z=}o#!b;t01Ev|&f)bUC$4zU*dj+u#98EG^O{v?#m+xISUs=*e_eE%lh2ngkLdzAJw zKj`}nni`k55Til?pPIhT@zC1+l_y4yqUp`^lD- zXxfjA36pm%B@gF6Z|IfRSxuNbiYRMT1p5gBY}%m61i{?r;9z-Qgm2~vwNqaPRedZn z(nCgTFzLT(&jD~O*kbjc9D^9=>PiSpK*d;UjfNe$2_|m3E?v2??3&KHiQ!bPz$tLz zp7obG>nFv>#F~bkb+Q=19DJGRz@as5pt4vqqOJ-(hXiJbf<8-(0(slW)16}2{;P0c zjT<@ERenq7v2Z*g+0ff6ygo__5Um<8|4Mh$RxoJkpQ+zXM5tBZ?GsE>UZWh!Ni)u< zh=B;C_Hva@2^mei*aKIgZbqs2s7u!0eJOgubKD_{XjNjEjMmMn@Vp?vzalx<&-CEB zryvG?E-9v+MTohpzzYkotl8KXdZ$Mq_yr_q-<-a$qEbN9&(S_+Mw*P@K4oQ*Z%Bw1 zHSbKA58T~F>$|B9ko8UhRpNZ4dQHd+m0J$ECc7rz;{%I#X>UH>H_;~i9k_f~muAKV z&IGEn4KPK;9uA*r@*_cfd&m#orWBa$64#a6Jlss6KBd;AE_?@b923TRa2R0MQQh0j zS+>L>U>Pa#M)9-DnozRsH?8smuavITE)%(7f2yPIiHbynz{iC8C!x-&q4-NLJk6XC zHg#I1TE@A~!sl^PYFb0Gcq0e9vBJi zTqx|uJ&9fHl(=8?E(=uESuaOU(pH-uPm!cNTLYJ$+8zH0?eo7CD?)D7AuQY+I5FX% z>4m$WG0+zV*+qB)AJ2Vp5yRuZM7*>SO_fZQO@?h|8b@?FuY~-NLxs`ozZlMe@fRBd zV9&8Y>o^r`d9#=*u_0;a%3R8z3?BOpZqg-TO(hSo=TKMC7yMiW3xrpYKnsX=8Stc9*23CTiF%Ou#tK1- zb|InJr+4kWD%}tseW+r_$!~*Osbbqxs-n09Cwf`5gXXQ52EJoNYj*yn6X#K!&@g`S zGG%sU=nQctf0hr^fVJ|8vClfc1GK-4rsn@7p)h(E zB5jx_q=^!i*NcGAFmi*3ch|_ebv+Xy9;$gmYna%xoJHqUVkkkBXMOb+(Bi5Y)LImW z*RRhukG4P38!f30*uVpd-}>cY^ENQh6y3nwL1&ff7u`1pdJN7VNCiJ03fMRwf)khx z7rB8{L77N<5%hTO!F+Qf5pR$ z8&eIAUZkKwJix#G>%au9}2+@CK3!N_@51^I5Ry336Mm z1X7dgGbE=syQNEV*@Lk+dta@AP>i94?Mkcuc_jz3;tIH=O8WypccK5<%O?L&9(pwG zALrN83fDuq6=2mmcsGCw9FIYF8R>|Hx907I>+jH>{SXy+V`VQPvvqW#Ttz*M-Aa#h&MeeN&Ds<3kJB(!Q|;$NqvYm zw;e6G)!J)w9j;e5sYxznufM}M%g43UjkVifr)J$+i~+0Q z%s3#6=oG{b8A*1+rNHG~KDd1ET_4f0U9=m%pf+X(>7;bm;Fv+846VWcI5<>pX3H%S zEH=%kxGD3>356KhI>JQi@@g=+YDayq%9bVpJH@4<#RVmJD)UdIaSrxR5!l0;&GGam zbPM>3LJ(tMDp1}cyCLGPK z8i`)`F|0Pmo;q#AdmOEX=L~rVa^CS$T!y*j+`2qK&|am&KA-2ySNWvAOLmm%(_laP zJU_6=9KtD;2f@3Y7FuQqI2I5#ev4~$PwEAZuY`D|8bU>1>p3hPn@v}~f)o3Y+@E?V zv^l{?kErB85g;gZbkrzun9CpHE~bCZU$27*O|yw|HR=twt>j=ku8T}Y0Luo&ZFmW; z7|V@ukWUDHQ!aM@JHNWwc|H`ZGczT`Nbi*e)neBKtT>@dk>g5uXQ0t>cg6#X;9)!< zg~Oy@FA=kjd4sBVlx*(LUW42?EiO_`VDWL4#3(!@+%W}zF?K8ope6S4&}Hlm$zrl; z7J^kmHko+UdFqEw(VCS4S#tkLd27%^>m`TzJ3fkIvV8;u>YkBpv^{m|*du7csa3PV zcnd6KWy`sljdc0vMK_^&D)29oM1Diuxl~S<^CovDc0(CU&1~$Q!l%XN@}Xn9^^%3r z{i3j&XMWZAo7tNE{HDE`1)TDWH1X&M7VkLTR*_IcWeM;BTFxo;MlDbRDd--&*f%x?gQloV)KIQ)!OVt!FHatFS=OmhJ zd~g8`>1xF8o$_tks*EbZBW1ogaqKl4aY*@w2t3PtZVoXr=ki~420U(d#}+& z&!t%7yTg~%oVVlyqkEvWgkVR7CB!I#bvATgY2i0uRkNDZqU(gSp9mTXc435Ao&gxl zM%rhvo}&u*-z!PJ0{j(_=Fi9&l-HhOWpSD0*+Y%})Q0JlY{j+CLr}|dlt|_Fl}=(^ z2V{qXR0`;wY9de7nE8lLP^gRz=Ltalm@8T3$*ec2Xry6cb2}RhOQH-8<60(Kz0488 zwL&8li_9(;C;yiojwU?>H*c`;D#yV5R8}sPq!JV9h<)EPYbz=zj!*h*Ge&W-HV@4M z%b=gjGnF2{$zGqzYec31qmZBgxnXYNQqCUw(ll*ZYaIK0i5_EzA`2_e@ZOW-52zif zf-2xR=rGp~^0`r4)_44{;BZna=7#WdiU5N-R&I*3x_*3 zMDl51aeGMlr>H7IneQR+zmAm&*{@1dQXXWaZ}ub(`qLJtv?<50FO!jCV)X>+5OAL2UU|0x_d@b z1|G#=jm@#fY%UQdr;&pezr_i@kEl34&}ggB2{_&FG~0@5AJ&gj7G<6hpM)hK`Y*o( zL%J6gg%_q0`xv0Be`S2Z;r9pU`~f8gV@5xJS9-L!-H<*s)LXYpJ;43!FG8(Z)U#JE z_$2R%3Z$L;`I4S>m7KtW=Nj_UNpEKg9OX~HCO#>!1S!yL#9WjnIKXM{@xTozIF9t| zW@uQcDP$CoYhMXj&{5un<82p5uC5LslV>pwpx>M;Oxq&L1qOLI?@PfOCRG;^jNg2+ z&ToS*6u^#%-Si3M&MoK-eqRudw-H28o*EsYpP$}J`~DE(vFY4=h%f|=y--pET2v~V{5Zh4FOUHYEh)lAMl{m-?bEw?w#-7+a6a_>0~4s zO}uC!Lxb{s9sDo67yjowM(A#nFUL_z!_RlYb=Exx2ID&Tdn@6ey9|KzvPT^+8{4qTTG&-Ac(hZsjWcJk&sS&-PZ0| zWm}lr{k9><%;9oxYjGRi)-L_sP16UD;^+#K9)ulkc%9{&e{8GzS@_q%9Q&Db0EoKk zq}dY~<1#x?6?!TocsacDSGGq2-W{Rz24UrpX<@xdIuitl7XQZ(qRan+r+bsdETfGW z@)3{1X$wuOTf|`|k4);H<0+~C(+qw5qiX%f@(ygCNqFS!B(Af7qFRzGskqW4t05IG zRF|Y!^Ylx-n50Ek=_pud3KBP2ps>U8p3WdCZk|o)g{TjY$(4`V;Usb1H3ewnvBS9=;^Y3T}H-TRs{b>}><9jUm zDpYKOa{P$IFOlVs78c)dc1mvWrD#q!MpqzN9a55dPRciOX;MOPZ#}#k8pwL)l5$rE z#YLmbGD3;yMjx-bm>sS6J@^RZuldhSJ-*2Z`%YRnTCKv9lb@=t4{d5w`I9jE3yC)@ znbDu}?bpF0L7(4}Fz9N>JDEe`S82 z0aR4>9D$5pX+x?k@u3_ zJbOt`D)@@CUrZL37@N{0R+ZAZW zpcQ(VCdBSGnucc4AthoZZD)20SVrdlwd5$XgxBeB*jH}BU?VXfZ;2qma!L!%E0P@z zS7QrlNyG^t)H8odnnnOc-)t53p8R<>Z~IP>493bDdy&Pp(_iUj4oP0ZXR|zOLuTUK zOgej0#-YzcGaGA=ag4b-WtE^cI7yZ25u(a`={_gn3S2O+`ynB0f)A_%J^W58q~5Y; z$%cx`ug;F*pSHpQPL$qCG-01^va$LIQBZ81<4cBxI_GL&hmiIJgxhcCohm(%SOS+s zBQ0Ir+zWHxFb0~gXI4bxWzYn2d)?wtOaM0h_L+ZlHf~>Sph*fo7FV-k$)`jFley; z>}8E^%gyjc_}pRl@E)gR8MebQSyj8cnHzBROBvhz4TYH+mF@S-`i3%)>g@E}o~cltsOqG~vD4@Vy~ z13mrEL}`qH2i5+On#n4B$4#%f8sKa3$N{K_iZ-u=#D}wI7n~`yQC7?>!T2HZ{?%K+ z)?(L@Z0|kAd>9kl%Ye{#%xnV6Xz?r4O}{5ZuD7>ZQY)qS5@b*3su#+=n3+2#?RB?m z>oeFOGF)r-*W8x~K!*%moXaL|OF5B5$G9D*t#J3B9_mrtAf{Q-aw@UCDN*SPs3g7NsaMx+0#1&1{%X$KoA-!n#8N3fDGX8 zwgKrl3o38yQW~jy725rsBrh&0QU4(mL$PKnME%d#RLuV73p&hr9w&)Jz+%c~3+QvG zYrw^Povi@52-no-A1cCDen$8yz_UoSx$|7HiY%T{PI+R=Pan2WaMm2bc=~^@@w;~s z1#ufVofzDPdqI10xZaC@xDeF}J;UxBGU&nTM*O97w>nSMG>a`~Mp8A=5FDW#j}XHJ zlWLx8(`pcbOqIw=g#`@FxJr+uG~NLEdcB3`f;?u+U7PB0(1KY`Udu&jNIEvU%?ACa zb*1EzshlW`KjzS5(bQHNFGv{SzI9`j0JGj^K_6`BI7vS@;Hi2|yNEHL7Q#@*RP5H)}D`AEr?TSQ$z?##C- zEm-d>3>3oGTZtB+cyIuXW~Du1qzF(~4{rygF)2cvX~Hr(LZEocji9+FbCtpVSE3Tm zpx^7su2>PpUiM#FMcZC=Y-={aRhpKvbJ{__&f$fR(gqg=%O82ck^80+#54nCQGS+` z4)?<)PUY$^QcUc^A+V9Lw3!tHT$+%3+w*#~?k!T0uxk~iFCDS!5LDV09E|;8X~Ka5BAA<%K|1!>YQ+*fX#@Hd;tR4WBdWt*6)5 z=Upw8tnJ?undr=>{`H4)sRoW_lhq4gYx0D0#!^tT!={wsXehz2|#zU$gU?Kv>P=fp^u<(r`UPx}z)#>FP;~2S8g7>7vj-9Mp zJ&(5aZ59Zq`N`L(wa^-+Sh|wHp6qEwrR&i2r4b|b74(I2^B%3D^z+veVo>H_>aE0};Fg1W|efhQRJPoqEK>Q~rct2m}~+?2)nNs=@f< z(M_Uf0r!aPvAP))Z$>spYeim4#r_}yB8uP-c@N4VMgrGug%ovRBUEzD{Sc!euQB(R zz06)n`J|OT=`GRLz;Sa0RpIJWHmF`J!Wm^KkP{dJMNTZCH^tPcfd_v0?s#ZT=B%l6 zh>8!P>L(q8qNOz(pln-|dfs-n83dzTcV@#MddO>sILQZeyV%VD7`T}Pvi0l=C ztwPk;-_DyKqa=ccgJ|<@x^zwBQAB31Uwx#I$kVu#r3MGv*xdAZ;<3^tKc*}tG*C7W z0$Kyv`JDCQ8f;lhEpg7pF)#J`1?^hJUWs?)@m5bzIB@X%h^l6=<4bCR^=0gbkeP$U zi>q!pBh414X&Vsm{*>@C?c~f9uT09?nCV}K$#xf?tLm{3oYNeI8oj{$)FIn}fk^_< z87*zkib8LtjOVLDcX5|%z@XFHQ|ohAdAVw9W><@YmR|A0973)4)AGPYyVMT3`~8B?-WcksE7 z7Vr4<4h%C9-!-lh$T_|#81)5q6+`eApR}&`%s8VkJ*lCQ(krs8QilPZ9pgh^zNx@I zfYrtVE};2~o|QDBixNo+QZA10PciZL3x{`{=46Vory`N5Klh_Nf*V@<3J1}(IALTH z74&0#4us+#u0C()+>X=%6@;m~yhl!7H{VqmAk+o{)lAXch8}K^m9!ZjzsfhP2EzT1 z(W>|(E6CP+V-cdL$k}wjH@)}8A&`r%E*=yc>gUbCltKx^vi=wIpz_4)gi`J|7EbC( zwn;Bb`DLF$kS+TJeUTw!)n;|!yxR`Qy-S%p(QWg$scFQ}!EH?pP1&yRhBROoJ6g3G@ieAjt^96p)?@LP1>TWvFG^Fmx6hzQ6+)%*#s(I z^&p`y!=}~J0Z2lAvnKE0(%hLa(g*Y@K5}~tBUgf%-CTJyq^o|7mlLcfX-8x!{xSqh zh2z!wSVv*6l{14^tm+QB%dAd+jOGz6=o%pXdPhsX!K? zN;?+CXGy!Aq8QO2zj6hmwD)e82T711KOhc1IvhLinHnpL;3v+lO0q?(Xm7g3Xh9sV zM=r9FZ}d|#MHwD?Sxib>K&44CWyj`^rqR*&u90fxF005&>~H^hS)X;TB%1oW3`4tlUq9&tn?13V#%&6 z3DnYqUP{@4{ilJLCHyRiA4{|E~IVn*)XVLv`kQYRbScwF%rb5j#Es zhe$<8E94d%*I($@6VBH!CCG1h9bEu_#YT!=e~~{nngdL+q`0Q|B?;ISX!$BIsJ3$A zHu;WOm>dPcIo>lWdup0f zoXPrt6&m}U*a>!O5{wORhmC5l1Al{74MnAL)Q{z92lXUG9Oy&J>y`L8<=h0hNrl$j z4#xjIy9U4Z>Mcy$2p!{?7BFW&dy2k<9;HWr@9W0fKtTfkj#r=3%9*llHKvI=MJjis z&WvY+1CL~3-_X3)999)**5+T@V0Rn?=IECYW-HmDXiV%pcOXMa2&b&xR~*$BbtBjR z*Q1m$$_$T+(=gLqYan?0x!SC{COuYXW4Za^*9}U z!|TRK4GhW3K%M~_a7P+?z;$g60jtr=r1L$`TOkySp1)Bv#%W7oi#p3ZdC$i#v0k0!e-2?-UD;`8~?4q67u_9Y@5*BE&I&-A) zmMw5A?-EFSF759_%W1%_*sLW>ld-%ZP4tloD+3tUSG26Js&Ev1GB=nb?hE!RtL`$s zull}va?)wNK8v*L4ABuZ5ns4f(Az(SY=CQ54qcg=$(PwIBcfV-f;M-w-~l%jWiXTa zv73mDX!v4pEsfL>)DA>!_2Wx@A_#t`OX%4H8X@Zg#&^4CIv2&McDe3&J`JVc^k~?r zpz!tBGWbY{9f)rZLBd=Nx(f(6c+6JY2XHz(4KK8>q!KL7Fmni|``mzdF66hl`Ub`~ zc)bAhRfB@_1Yh^T!^uOayj>hqh$IY@-^^w6gVrEFlR14ZUr42bPz5BUt_f8Wm-|eP zW_*Uh{0lll4pLRHT{tI~W24;*x~M|sTU|t`@^*R`Up&n<(LYV)(5g=_@8<$-)!0y( zwW|k;3v$227T3whcbvEyi^9tF5!H}0e26#dVQETGO<%y`ZEu6WU>kg&W$-xX;6S8( zemd=N5-k!jmGj|KE7csCVZbvj-G4Sn;eG_5ow~Ka=KJV!@}pAC6kANrOx*nN@Kmw?g{~ic3*2x7W(tMUpia`6tCE#QCU#r2a5Z~_4$=7iQ|KsiaN1$(5MwwPmdQv9l2OIUITmwS8fYt+KvQ@sc!KSk4 zqaGk#VGI;;_x&aakk>B(yEV8y&)ezz`%GjTJYR?hug4--JJXJd1OIR6PEzXxn@6XuR5ZcczuOt{Aq5xMA^ zLRALK{LymML==#wB{x30p{(52pXFs3dr`ffe0$M@|wO^L8Uq zk8A!5QHmt|!YoYSjHW47e?N_}nY*dwupjc0Bq8B}ZX{0fu9f2oF?V4zOyv$8JDFiu z*a9dcL)9@zKY0J)a8)aR${9a2}vVVpX$J@T3djWa4rb z8zZc>@Vov_JwcaT)96hs?0f6EeYv_QOu(gc8oA%l!ff=ua7~{#P$-{SpwO3u9L0M~ zWEG9tOZ~iLMqCR=(fD-LhGy|@AuYd}&*S(^APs+ibRQgiB8Ne$Vr)JF;dbN;>RcTN z_{P%8xoh_P77EFh9}*6!^T=eVf*>lH=JBSh**O2xs-4z;GI2A!pAx5Y6X2rp4Fsp*F+5lH_s%D1b1aso5j_xlR9!9FvCzM zq5VxHA%|efMxDi#m=ZD>E?V!|lYnWtu!X@e=2*>&M`asx*ftMWnla0`v;1`pAB#={ z$??|;GE|OedZdl5qP71Fh3hKTW5(-r5e02U>qKESJ2E9R^*ZGj7>sz>JAjs&=IAyhah-YOT|9I7AecZG_;B z4-G&UDSxj0k-rOBNpi__@SW7rh}#UV60cU5b;U}YTh5N}1vphZ$DmKJ8NN7CPGvx1 z8#m2h-o-wU5?O)u^)`iz8z`;Wqie>nTI!sA+#bL)wSrCqmjW#ZEsfUy{NNCgg)HTlne zxOf0BrA9%tsB&9@miG`Tq?}A1`H?W8R*e&#d)p}IMfs_(WK&=W9#%ASm5Gr6HKb#7 zfQ6da=t^*Tv!D379?OyVoMM6iinAPB180#LC1U?t{H1rr7PsHedS36iat#LLbjOGe zWvA6wVNRFJQTn$qlF~H1)7G~{g}xCgWr2F@(S~}@_PuGV%(P4S8?gW}xYuX{XPO?b zem`|~Mv}3I79f6bQZkoo;opXG$Y-d+;Z!5}TyW#eI*yg_8R>m^#p6z*NHJS_uZlsx z#;-wRB@If#scc=xD46| z9fJ8hcK+w+VcmONH*bs4k}_A}8|Rd|aIQg$NH{eztDzl|B&}wnjh$VHvPt}#5u;|X zq9^hSIxY~75{M0e6_3v^tubY@XymkEVZq|aNO=G+8oan*Y*q?+6?8VW)~N22DT|Z| zXZ91dtOy)sdd${3UJnOo6tvf;RT=Fj9(o8lE}kLEvEU9HdS*I6s`&KOBhLUfcbO21 zi0D4dzppVN6Vvem@-WZaK|W(5e;znj-QY~St&u}BH_ z{VRV<(FM19;v+j1K*I6QVvZ^T9$9jxX0XzKrynoVYj={O)Q7@kz444FRl6bT85GNv zhGPi*lg{sA#1DoUt?Hb%)qZcHX0omcL5|HqRGEEChl&tbw&ZKfAnSNs%5I z!?XJ_^bafllvYT$mU@)uv$oI*&kQ+n3t+)Mr#s3>E!Q`k^1XzQ0^3(5ebao(nigQ$ z`3l)U4UWY6NlPhnJ-Ro-Y44PvBFL&?JBdG~nU1}g>ZxFqHo83;$c0rtVdgyq0s46W z=W6tSWpNTnx+2f_>&R)51o>MtImfn#T#E1;Ee46Ttu7(Kyxd;W#kkAicfgToOEPz} zvxVc1WRprB_RSQ)-ejb_0J11v>q;OV86A5QKA zJJY!wz02*Fx_f%DcLdIEvsfrb&bW>Mewv$gwpcs5f{VfZmRsi;d9@i0%OvaF!y1}U zt6gL_hI4w?;%F>SOb!->(p7vISUFT<=^E~TFThwb*Z?Np6`*2FJIs5x2ZE;^{mfqE z4(gGW{gB%-rr=SFwahJ#@y0GOQ0}AchLXvD)IBFHm{ce!ox18RT&dp+_}Bms3mnTl zwb_DU37&?4fDm(E=UeGT9sS99wog zbQ_kMb%o~UN8Ev9lRP4FQN_7WBoGO?t*FNHo3p1CBos^jqxe@qW*iReW>-`w zI+rmvW}18zh(k)M0!J%1_n28}6-lh8J#+8104ue&s~;dnkOB}@MCi-rN>_Zg796?o zU&riZEmiHPj>4GP9DMfx=T`pTKWOYsi@uE4Vsa$&r%~g3yotu zp5!ndOOsqI09CPZQE}N(f^cw%@icCVHF%J|1Y`Is5rfKomw z^!pR;M$I0Ou*R!{H!!U0j?W|$l9c)nMO6yM> z6Gfu^3N?#B(%Is!ff2_p!{%AinEFS}54ig3(Siaf^U|FJ*&8Vqn-Q&ZI~+nbM0S@9 zei54@mbwvtG*S!*zJ3dWJ#Rd_Eh2Q%T?f0U)b>+CzA$?aDsn&KV*=q26TrU}6n>bH zg}W}zx<~X}danZaH%e^J@J@Si%j-P~nrZE!*(1CRV4j#Dka-Q`Mi#H%E_woJ9z<+? z{1LZ5m9v16J(6&Q|5WAJ27$W~5?|?Wx)AD!WHOAM+yKQZ8bvTpC5u2cYv;?kP6iMRz@0atamnDJmHgGSnk4Zd_Kq4=zaQXX_NoOA0)5DudLPHjUXdLyYgX27`-GZBXrLUdm`3D4mizd7z89%%I8gMD>!NSbC~- zmMP?Was+nhm4{0Sn3>O=!fP$FP#Uo0Z^bZ+E=v;329xDSfji80i+RKzQz3WGj{7=S zAA>Dp2ggHfR()zi00un_vqP}jxQAtc~St~_(_FVWq(z;q^b95 zK}7aw;Xg~jw9gfEBnM=QXP_c6NTms9ibF$|K95d5dIDVn0CvZS(3?9tA)E90wTm7` zDfz4j7i?Sif;@M7NQ{~XPj#r6Z|+~+nC-_%cd|4AFWN{=!io&jXeH~=8wp?tWCrId zs6gox=%Cb6qeRzNt!OQsF6~*SC(`nRE?Z}W_JbajIG8sKuiqeuv5bxp$0H&^}&?V6Xn{SG`75yF_>1qfIN7N#DxFa^K*PQe`ywK zP~sp42m)5*)&g{pcp?Qxjd)*oY2z&3#WsVKyl3AVC0nsh-b5v`Tb;=cxP`sJ+@4%- zw}R>^bi7=3K|f1$LSzegqmc^BokYxOfvvF3TK2%6o&WDA@SeS;@h;@ZzkT>l(X*fl z9fvH~U}+q9N6$D34cQVJ{5K{>Z?t!ffx9Y}cwFVWom0-Z)%>Ex=pvFq8p38@Dv_D@ z;hzaC;$$AltL0kgxWGF}FwNwtg9+A$ZXmX5?wZI;=C01S9MI4wGUgpCL$p-$|62aT z8M|M;EMWN=1VhFMZ~=1dGgfaIR)WBoeOR4%@EGDv_I;E@;+c`(Qad$Ne(KC<<&qsc znDL@Q{k-H)iw6Ri=*eJ9@S@@%DVt7xc7VVxz*w_vOatfq1Y;Ph9-IQZr_Xeyra2&5 z`Fd-FZ=Jc->Tt|;latx76-V?f3Za8DX)rd_=z|3xFERCoZlv~qB0Q&;GLYB#Wpg81 zPU2&4dZ-*S@OBKI9_Qyff9IQ`f~9vC7=kiXUX@6mjm@GULj!54f0;su*FArZ5V8e5MUV3bNgtte_yB zg?+fmZ&QL(il6H+CN>1A6>&9)gPU9#m`(Eu!y1*M0BYNbFRcQ9Ad{8&MH9ZQHUZw+ zC#aeF&YxJB8TN?*FrfSKh>IG!*ur{Cb!LUtp;rB=WV1#km|9h-r=)ApA|+olv*qjS z#Nhv=CTtP2qMc$og_iD$?QRJ+_%ggE&X8a!~!aQQdZJ~z*(^$Ye#EX4kIn%&o;>>wAeDE5Z^O|DRTCD3w%IKWql0l!gb zYM!=aK^`+h@`*^KWVJopZ04?rR(+WDhk7cH9>I(vK7gG6RHO2cp9nF5x3H?;j!~=7 z(0|D+T!62%7!N|UWo9^h;3~w6VT`mryD^Sw zov??(1Rh^K;Ruy-fmpRdsiy5YPslr3bMPJRR-q$j*n6W6nE38s-T6eCUC)vvoVBP{ zrq2UN;)UaNSjzVl7amEY?LF588eL$i341ke zd6V`5Ut7U=>x5so!>mlI85|nd2D2}Y0Cv)yQ59T+9I|$P>PK=X1(ip!1XK9o1eC%r z{oS3#GObYZa^mhjB7$gk-f{ENLb?F`VneV@e?lrn)MP4A{~u3FrENR~G1E?oWNSW@ z6FVz#S|p0~F|tnP5f-syB0Pf-qO;4c-KsIT7#RgL7m`*=VJ7b9xy+o)B>r}6l0pl|lHv8NUasEc{iE4p&fOZw@={)-Q!lL1#fidK7%1Ew zQ@LDg!bIEle|j||Dnj=@YrG4XniD>?1(6@yV48S-{z}ho9vlHD2!o^^0dn6eIyE@@ zrcM;a59D3cObyuoxjHyR9yAyAZe`)|Tep4pHEq0}368vdn^$nrwGvV<{%NmY1D!q( zA6$Kz?_(h$k|Ut_Qg0fFMmXKcnTYf;>1V7ko9MRy^nz8jB_ARR*th^-S$R+Js|>`qTvlfbpOjC4TZv zS7P9!@-umA6FRV8ma<$ebG5Cnpy^0@QIBGzg<1E%gm)R|EAF2KO|$1F!&~YYeU0lR zqPEN+i#5n?i7nw#J|y)c5ckN#9Prd+P{JPb}z+C86!?Imq1%m$Edu+ z5KS^gFHa8oc-)K*Qu0N9oc6I_WRb(ZJzU@q zAVa%TzBEkg8X(VOhf@zk2PBa5aAMQcz0lhVv*;%s92;%=RZ(kD;@Cu~#pYZhG8>=y zQP(g87ljX0%N-yV&hH+u(JvPd-E~D5%0#sT$bGh*6N^uN-N-`}JlWq7O$na}g2e|} z^=|y3I3Rrf|7y0&&i2qo#=yBQuw_&{ zyxr^G_Tfq$9_@Hy+6W)hVXTr?TSLGy7+#aW-P{slxy!m0)pmk**j44c_R5%ssJB)L zO9?I+el^=@YZn#_SB*``M-KR|_NyxqPT)1t6SuQoiC=HTWa`1@3f&OmOm{HM5i1G> zWd9P{Yi!x4EUBTZiFV(pUwDS4On|U($C#d``^XBpYR>Wq#t@W>Z@ZL+spo@HfD2k- z;FUEI2mr#NslHvRieDkUcerL8GG^uR(=8-wwkP))1$BjAh^(u{xl&hok#n=Ggj_e_ z=JMLCy|4*%=Id%Y2>PZSaefWM#AW|Pw*=t8gSji+>t|Fv1 zpm1TMYX&GI@c}u5eyFnsT|58?D`U_ICA4Fn*`cI}RsQkp<3TjJg|c|A4oO@ngV-SB zp=?p}=&-k48Sf0(;Qp&cN1pP<@c2&U0NOfzQ>*Epo)roRvCMJB$Kh|im?v4nLUDA7 z2vVdxx8SnekY<;*H_-J?-*TEMbR+^WVhuMMY~*l^a=R%EJ}EbWYuFdB%!R?!^cVZ{y?$eK~yY7L0X_xfT=lyM#*&&L4?`^pI#oH za4Zii#qjt`XOHM!J1|mT*p{QQ3}M}EF9^5zB-jy;{KIEY-SomW#pk9$JAUF+03?C? zjJfsk7@puF2SI*}_=TfcqjoSK5uf1&7I~r}j;KI_slC*fO~Q}<<5tGK$YkxggqmFP+q@p& z?1{}?+sSFxYJkcsEZ}K?kSuZ%XI67?!Q`!n->om8<6DPnl_@!;C961G@=|1*;F=)Y z>FZKVx#)U$Q&_Pfs3C)Bx!OHevpH?wVKx{&h-NH=4O)($TdQ~F0WqIuJ^Rbl3e2(C z=)p`in1?FsQtnW0U}knKq5EJeD8;&YzT1vzv=Fr9zBwn`mi02^6SQc#PWcxMx1au& znwZNo;7=DPZe1P_7aXf(v`o`bUd1r@3Wo52sS7Hf#~u-Kjn}$@n1k#E-*IW!k_edB zp#sLt>_b|<_c`)v3=WOyOynJd04Bj$Gq6-0Ml!jK-=RWpy<-iAA{5Sa>n@2(8jxCD zkj+(rUbvX{B5^LnM6VfK28p$TjG?8tVu=v33_L{pRt=GpXEo@gIjR&yW)P%b!<)jg z5KA6YBpK@!imr3NH_bAZy!Vk9}^Gt@4me<=Y(!N3*k=7IM1Te2xPQ z?`iRM+DCkq=y~{8`QaVJAt^gNIFl@f{!E1cS)&mzF_VyLknKzD9n+r^vKxb4YH`1$ z)ombsQ7dR#uG~494j+Hf;03frfyLlq7PZ zo+HeO^$^k1M1^WbwIHC}jJ)j3SUQf#d*7Wv$%riL7TK4Ov$Zsv;4eO7N0?$K62IQ{DpV~2ek(%WaC1l$ zNX$$kxkVG9Rz2Gfa{m-W@|C;KcC{^PSO|zGA1Oc$x>}Owv;u>1sEQJ{hT`Ix{67YZ zPc+F^YYE5@?S8a-%K*+zY@pop`}$MlxYXk^ANwG&of-!iYryW~Cc`%1gBCZrhe!zO zt`=^hgT67T@$-o&9yv;$c-|_EAy^273)yzZT81Aj-2k7`-@Lmb zLimQPQSTuHuWMVdUgaR|p#kuY6Al`#Dy}I`AzJQ(^Nt*>-b8P}k$bk7tMR1kVy0#U zo`C%au+Pz|ER4CQHaP}!gRyoW@HjWF$r?Q1LIqoLskSG84rb?{|bLH_yX z^yrK9Kg4md-TVm71{oovAU_)1LPp}{Xg|sh7&AVw-SM&)iucCZ;s^_N-Aa(J4$AYt z7f(oY`tVDEvAT(7WGb6!H+e2T$Zz-061?rvq}%IjR@`xjAj04Q@GL2RKp(x`5`IN# zbk#Y=TI*-zs3HRz#WT*8>$l2Fe>F_I) z<{Q24wtv~L1wmAu-<=^MyfD|T6}Vx9L;LyT3djN71d0BG(OlB_yEiK1{+QE-qBBeya;*EpIL)%KisrTP$ve?UyAz6vMma z>Na3vl0sp@t-@rp$g5F3jTlc57AV4d1A`-t$*WXCqIe-%G?89XdoMOx&L$!U*{a`H z2I>U|;MEAJl>zH^6j=VfwPVKU;M&FZaek>%n2olx;^Kj++1eNC09E4F!=n$ypTBiYUWFaaQ$pwID^Wc9XL(Z{*H;STkIV3xXF5yTS>;QxwG z>A&`=S|b`jO8{y>y0Se2g%VL9f;S$rnJzM8zs^*PQ-|#C+xf4)7P*Q(D?$lQUuIt% zm3lyWBe(A4OWqvbSiO`_km!C-kihvJu+c<-ITA1U{)md!IdoA}8_`E-YWeHc9NMV) z+HRW!+NQ;=4iA)Q>8iCs$BfqmYri8MucgGM8E-jqrx3FI1vbvd3L?UG{)`^%hmBGI zj2p`r*nAkrW~6Ac6a$`26$yS(q&z(m2rkW6E>%25d)BrX3G3ihf*wAaW{`PriwL7Z zMnEL#qoRi@&L@Y$^3J&mds|d&cdOq zoLD@x543e=JiXU0e?wP0U7~*iLD;G2D&nf`*)kC#qMcFYI@i7=RN!6lq=v`3Vm>AJ zCZi8^4`5)pMIh(joqCqslW<*p3}hE_m#kZyMV&cC_l=DN`27$DCZ7vtAPIoC{tdoO zz;62zXH|~lw5x@CJV~-J^Wm)@LUD#~eMI!*6e_*|ww2E`S;y7+O)>r3Zy5gICDa(3YN1g zEGrem{YDMG3qFvrSPbd}5LK;~BC8G(pjH)&m z9jGqins!+dFfuf^Q@`@(mNt#2PMOm@fyU@ zzRE+R%~)H8wavOXG2ewW9jHv8Ng>vMfBDMwRcP8gJWq6>uc`p6Kmc*(R~<39L}Bc3 zEwg7oN~y%Nf(F;FT{=M1VCHbt(}P&3Z$9bN`F|HnHFdV2R>H$W4*&1MK>w!D7Q}U8QDCJK7!})=qPnBnHkH4cDcPHVn{mF3eBw`?s zCLy6sfP9*?+om#JD(@u#bFFeS(*SQ<j_R=({FJQ!w8h}}u^@N_M{a=@Z8W-^h*T%emxctqu_yK^Z%Rbde94q9#;G&B)#6C}uaPe;y@#&mfL)XuK7Er@DiX zD{XtEkjEz`H`T@I>#q;4j{p{{`{=0abYx(6WmnrVw>HT@>AFeVB8usk2jCfu3`@&U zN(#8wN@YuYLGJ3i(Ss};L#z2Sdn+91z))gA-ot1!b|Boxwg5A)p7m-T0H{fc0n`K6%+jnGyyV)oCJI^G6?@~O(3zU-_C1dU`E+=^6H)(3H^$f$ zIRTU*j)m7LrGT1;Ty+kJ@(hXD`e|Lq__8sJ zo7;5lYcR0BMx5J6U=B&u&9O&#s3zdHly?4{i6-^U*eQT!C-)%oYEM)1Qd?1ZOM_lZ z2sZI&&jd%+h4@y>KDoX(PriUor)1=r!q=1u;taLl#Dti0@ay6vb5T9^!s+CWa2V0b yPg|uEvzXC+v>n|1_r%3OV+ZxKJ~(y11D*-SH_C$cxvG8M%P^Di2L5kR#++>2M+-9m literal 0 HcmV?d00001 diff --git a/MikroMaster/20260504/20260504090002-Config.rsc b/MikroMaster/20260504/20260504090002-Config.rsc new file mode 100644 index 0000000..a6a3d79 --- /dev/null +++ b/MikroMaster/20260504/20260504090002-Config.rsc @@ -0,0 +1,4044 @@ +# 2026-05-04 09:00:02 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add 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\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global Identity [ /system identity get name ];\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add 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\ + \n# RouterOS script: AM-GglobalFunc\ + \n# Script comment: Global functions\ + \n# Copyright (c) 2005-2026 Vados \ + \n#\ + \n#\ + \n# requires RouterOS, version=7.19\ + \n# requires device-mode, fetch, scheduler\ + \n:local ExitOK false;\ + \n:local ScriptName [ :jobname ];\ + \n#:global checkRunJob \$SriptName;\ + \n#:global fixCRLF;\ + \n#:if (\$fixCRLF != false) do={\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\ + \n#}\ + \n:global GlobalFuncReady false;\ + \n\ + \n# Git commit id & info, expected configuration version\ + \n:global CommitId \"main/529/575f9924\";\ + \n:global CommitTAG \"unknown\";\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 08:35:02 04.05.2026.\";\ + \n\ + \n# The variables are received right here.\ + \n:global GlobalConfVersion 138;\ + \n\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\ + \n\ + \n:global Identity [/system/identity/get name];\ + \n:global IdentityShort [:pick \$Identity 0 18];\ + \n\ + \n:global devBoardName [/system/resource/get board-name];\ + \n:global devMode [/system/device-mode/get mode];\ + \n:global devCurArch [/system/resource/get architecture-name];\ + \n:global devCurVersion [/system/resource/get version];\ + \n\ + \n# Variables defined in AM-GlobalConfig.rsc\ + \n:global TerminalColorOutput;\ + \n:global CommentsInScripts;\ + \n:global DetectIpAddrDefault;\ + \n:global DetectIpAddrFallback;\ + \n:global updateChannel;\ + \n:global Domain;\ + \n:global EmailGeneralTo;\ + \n:global BackupAndUpdateMode;\ + \n\ + \n# Single functions, without nested functions.\ + \n:global GlobalEnvRemove;\ + \n:global MiniDateTimeStamp;\ + \n\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\ + \n:global LogPrint;\ + \n\ + \n# DeviceInfo and Updates\ + \n:global IsCheckUpdates;\ + \n:global WaitCheckUpdates;\ + \n:global GetPubIp;\ + \n\ + \n:global GetArrDeviceInfo;\ + \n:global WaitArrDeviceInfo;\ + \n\ + \n:global devModel;\ + \n:global devRunningMode;\ + \n\ + \n:global devRbRevision;\ + \n:global devRbSerialNumber;\ + \n:global devRbVerAvail;\ + \n\ + \n:global runningChannelVersion;\ + \n:global runningChannel;\ + \n:global runningVersion;\ + \n\ + \n:global devBuildTime;\ + \n:global ROsVerAvail;\ + \n:global PkgUpdStatus;\ + \n:global currentUpdateChannel;\ + \n\ + \n:global ScriptInstallUpdate;\ + \n\ + \n:global DeviceInfo;\ + \n\ + \n:global OldMode;\ + \n\ + \n:global ParseKeyValueStore;\ + \n:global RandomDelay;\ + \n:global GetRandomNumber;\ + \n:global EscapeForRegEx;\ + \n:global ExitError;\ + \n:global ExitOnError;\ + \n:global CharacterMultiply;\ + \n:global CharacterReplace;\ + \n:global CleanFilePath;\ + \n:global CleanName;\ + \n\ + \n:global CommitBrief;\ + \n\ + \n:global EitherOr;\ + \n:global FormatLine;\ + \n:global GetRandom20CharAlNum;\ + \n:global Grep;\ + \n:global IfThenElse;\ + \n:global MAX;\ + \n:global MIN;\ + \n:global HumanReadableNum;\ + \n\ + \n:global IsFullyConnected;\ + \n:global IsDNSResolving;\ + \n:global IsTimeSync;\ + \n:global IsTimeSyncCached;\ + \n:global IsTimeSyncResetNtp;\ + \n\ + \n:global WaitDNSResolving;\ + \n:global WaitFullyConnected;\ + \n:global WaitTimeSync;\ + \n:global MkDir;\ + \n:global RmDir;\ + \n:global RmFile;\ + \n:global FileGet;\ + \n:global Unix2Dos;\ + \n:global UrlEncode;\ + \n:global WaitForFile;\ + \n:global ScriptLock;\ + \n:global SendTelegram;\ + \n:global NotificationFunctions;\ + \n:global SendNotification;\ + \n:global SendNotification2;\ + \n:global SymbolForNotification;\ + \n:global SymbolByUnicodeName;\ + \n:global ValidateSyntax;\ + \n:global CheckSumsVerify;\ + \n:global GlobalConfChanges;\ + \n:global GlobalConfMigration;\ + \n:global VersionToNum;\ + \n:global RequiredRouterOS;\ + \n:global FetchLargeFiles;\ + \n:global FetchHuge;\ + \n:global FetchUserAgentStr;\ + \n:global CertificateAvailable;\ + \n:global CertificateDownload;\ + \n:global CertificateNameByCN;\ + \n:global CharacterMultiply;\ + \n\ + \n:global InspectVar;\ + \n:global InspectVarRet;\ + \n:global ParseCustom;\ + \n\ + \n:set IsCheckUpdates do={\ + \n :local isInfo [:tobool \$1];\ + \n :global LogPrint;\ + \n :global updateChannel;\ + \n :global PkgUpdStatus;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n :global arrDeviceInfo;\ + \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \ + \n :local CurrentChannel [ /system/package/update/get channel ];\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\ + \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \n }\ + \n\ + \n :local Update [ /system/package/update/get ];\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\ + \n :set currentUpdateChannel \$Channel;\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\ + \n\ + \n\ + \n :local StatusPkg \"undefined\";\ + \n \$LogPrint debug \$0 (\"Checking for updates...\");\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\ + \n delay=300ms max=5 on-error={};\ + \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\ + \n }\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\ + \n :return true;\ + \n } else={\ + \n :return \$PkgUpdStatus;\ + \n }\ + \n}\ + \n\ + \n:set WaitCheckUpdates do={\ + \n :global IsCheckUpdates;\ + \n :global PkgUpdStatus;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n :global arrDeviceInfo;\ + \n\ + \n :local Status \"\";\ + \n :local Update;\ + \n :local WaitCount 0;\ + \n\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\ + \n :return false;\ + \n }\ + \n\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\ + \n :delay 1s;\ + \n :set WaitCount (\$WaitCount + 1);\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\ + \n }\ + \n\ + \n :set Update [ /system/package/update/get ];\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\ + \n :set PkgUpdStatus true;\ + \n } else={\ + \n :set PkgUpdStatus false;\ + \n }\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\ + \n }\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\ + \n\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set WaitArrDeviceInfo do={\ + \n :global GetArrDeviceInfo;\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\ + \n :delay 1s;\ + \n }\ + \n}\ + \n\ + \n:set GetArrDeviceInfo do={\ + \n :global LogPrint;\ + \n :global arrDeviceInfo;\ + \n\ + \n :global devBoardName;\ + \n :global devModel;\ + \n :global devRunning;\ + \n :global devCurArch;\ + \n :global devRbRevision;\ + \n :global devRbSerialNumber;\ + \n :global devBuildTime;\ + \n :global runningChannelVersion;\ + \n :global runningChannel;\ + \n :global runningVersion;\ + \n :global currentUpdateChannel;\ + \n :global ROsVerAvail;\ + \n\ + \n :local DeviceInfo;\ + \n :local Resource [/system/resource/get];\ + \n :local Update [ /system/package/update/get ];\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\ + \n :local RouterBoard;\ + \n :local IsRouterBoard false;\ + \n :local RunningMode \"\";\ + \n\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\ + \n :set runningChannelVersion \$VersionString;\ + \n :set runningVersion \$VersionString;\ + \n :set runningChannel \"\";\ + \n\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\ + \n }\ + \n }\ + \n\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\ + \n :do {\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\ + \n# :set RouterBoard [ /system/routerboard/get ];\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\ + \n :set IsRouterBoard true;\ + \n }\ + \n } on-error={}\ + \n }\ + \n\ + \n :do {\ + \n :set RunningMode [ /system/device-mode/get mode ];\ + \n } on-error={\ + \n :do {\ + \n :set RunningMode [ /system/device-mode/get running ];\ + \n } on-error={\ + \n :set RunningMode \"\";\ + \n }\ + \n }\ + \n :set devRunning \$RunningMode;\ + \n\ + \n :if (\$IsRouterBoard = true) do={\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\ + \n } else={\ + \n :set devModel \$devBoardName;\ + \n :set devRbRevision \"\";\ + \n :set devRbSerialNumber \"\";\ + \n }\ + \n\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\ + \n\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\ + \n\ + \n :set arrDeviceInfo \$DeviceInfo;\ + \n :return \$DeviceInfo;\ + \n}\ + \n\ + \n:set DeviceInfo do={\ + \n :global GetArrDeviceInfo;\ + \n :global GlobalConfVersion;\ + \n :global Identity;\ + \n :global IfThenElse;\ + \n :global FormatLine;\ + \n :global CommitBrief;\ + \n\ + \n :local License [/system/license/get];\ + \n :local Snmp [ /snmp/get ];\ + \n :local Info [ \$GetArrDeviceInfo ];\ + \n\ + \n :if ([ :typeof \$Info ] != \"array\") do={\ + \n :return false;\ + \n }\ + \n\ + \n :return ( \\\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\ + \n \"Hardware:\\n\" . \\\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\ + \n \"RouterOS:\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\ + \n \"RouterOS-Scripts:\\n\" . \\\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\ + \n}\ + \n\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\ + \n:set GetRandom20CharAlNum do={\ + \n :global EitherOr;\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\ + \n}\ + \n\ + \n:global checkRunJob;\ + \n:set checkRunJob do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLock; \ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \ + \n}\ + \n\ + \n:set InspectVar do={\ + \n :global InspectVarRet;\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\ + \n}\ + \n\ + \n:set CommitBrief do={\ + \n :global CommitId;\ + \n :global CommitInfo;\ + \n :if (\$CommitId = \"unknown\") do={\ + \n :return \"unknown\";\ + \n }\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\ + \n}\ + \n\ + \n:set InspectVarRet do={\ + \n :local Input \$1;\ + \n :local Level (0 + [ :tonum \$2 ]);\ + \n :global CharacterReplace;\ + \n :global IfThenElse;\ + \n :global InspectVarRet;\ + \n :local IndentReturn do={\ + \n :local Prefix [ :tostr \$1 ];\ + \n :local Value [ :tostr \$2 ];\ + \n :local Level [ :tonum \$3 ];\ + \n :global CharacterMultiply;\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\ + \n }\ + \n :local TypeOf [ :typeof \$Input ];\ + \n :local Len [ :len \$Input ];\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\ + \n :if (\$TypeOf = \"array\") do={\ + \n :foreach Key,Value in=\$Input do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\ + \n }\ + \n } else={\ + \n :if (\$TypeOf = \"str\") do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\ + \n }\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\ + \n }\ + \n }\ + \n :if (\$TypeOf != \"nothing\") do={\ + \n :set \$Return (\$Return . \"\\n\" . \\\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\ + \n }\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n# !!! The function is not ready !!!\ + \n:global FetchHttpInfo do={\ + \n :local Mac [ :tostr \$1 ];\ + \n :global CertificateAvailable;\ + \n :global IsMacLocallyAdministered;\ + \n :global LogPrint;\ + \n :local Url \"https://api.macvendors.com/\";\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\ + \n :do {\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\ + \n :error false;\ + \n }\ + \n :local Vendor ([ /tool/fetch \ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\ + \n :return \$Vendor;\ + \n } on-error={\ + \n :onerror Err {\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\ + \n :return \"unknown vendor\";\ + \n }\ + \n}\ + \n\ + \n:set GetPubIp do={\ + \n :global DetectIpAddrDefault;\ + \n :global DetectIpAddrFallback;\ + \n\ + \n :local PubIpAddr false;\ + \n :local Url \$DetectIpAddrDefault;\ + \n :local JobName [ :jobname ];\ + \n\ + \n :do {\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\ + \n } on-error={\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\ + \n :set Url \$DetectIpAddrFallBack;\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\ + \n };\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\ + \n :return \$PubIpAddr;\ + \n}\ + \n\ + \n:set FormatLine do={\ + \n :local Key [ :tostr \$1 ];\ + \n :local Value [ :tostr \$2 ];\ + \n :local Indent [ :tonum \$3 ];\ + \n :local Spaces;\ + \n :local Return \"\";\ + \n :global CharacterMultiply;\ + \n :global EitherOr;\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ParseCustom do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\ + \n :local End [ :tostr \$3 ];\ + \n :local Num [ :tonum \$4 ];\ + \n :local Return;\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\ + \n :set End [:find \$rest \$End];\ + \n :set Return [:pick \$rest 0 \$End];\ + \n }\ + \n:return \$Return;\ + \n}\ + \n\ + \n:set LogPrint do={\ + \n :local Severity [ :tostr \$1 ];\ + \n :local Name [ :tostr \$2 ];\ + \n :local Message [ :tostr \$3 ];\ + \n :global PrintDebug;\ + \n :global PrintDebugOverride;\ + \n :global EitherOr;\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\ + \n :local PrintSeverity do={\ + \n :global TerminalColorOutput;\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\ + \n}\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\ + \n}\ + \n\ + \n# check and download required certificate\ + \n# Description: This function checks if a certificate with given Common N\ + ame is available in the system or not.\ + \n# If not, it tries to download it from repository. It also \ + checks the certificate chain and downloads missing intermediate certificat\ + es if needed.\ + \n# Arguments: \"Common Name\" - the common name of the certificate to che\ + ck\ + \n# \"fetch\" - if the intended use for certificate is \"fetch\ + \", it will check if the certificate is available for fetch option and ret\ + urn true if it is, otherwise it will check other options as well and retur\ + n true if the certificate is available for at least one of the options.\ + \n# \"tls\" - if the intended use for certificate is \"tls\", i\ + t will check if the certificate is available for tls option and return tru\ + e if it is, otherwise it will check other options as well and return true \ + if the certificate is available for at least one of the options.\ + \n# \"all\" - if the intended use is \"all\", it will check all\ + \_options and return true if the certificate is available for at least one\ + \_of the options.\ + \n# \"undefined\" - if the intended use for certificate is not \ + defined, it will check all options and log a warning as well.\ + \n# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\ + \n:set CertificateAvailable do={\ + \n :local CommonName [ :tostr \$1 ];\ + \n :local UseFor [ :tostr \$2 ];\ + \n\ + \n :global CertificateDownload;\ + \n :global ParseKeyValueStore;\ + \n\ + \n :if ([ :len \$UseFor ] = 0) do={\ + \n :log warning (\$0 . \"The intended use is undefined!\");\ + \n :set UseFor \"undefined\";\ + \n }\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\ + \n [ /certificate/settings/get crl-download ] = true && \\\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\ + \n \"is configured to download certificate CRLs to system!\");\ + \n }\ + \n :if ([ :len \$CommonName ] = 0) do={\ + \n :log warning (\$0 . \"No CommonName given!\");\ + \n :return false;\ + \n }\ + \n :local CertSettings [ /certificate/settings/get ];\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\ + \n :return true;\ + \n }\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\ + \n :return true;\ + \n }\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n# download and import certificate\ + \n# Description: This function downloads a certificate with given Common N\ + ame from repository and imports it to the system.\ + \n# It also checks the certificate chain and downloads missin\ + g intermediate certificates if needed from repository.\ + \n# If the certificate is already available, it does nothing.\ + \n# If the certificate is not available in repository, it att\ + empts to download it from mkcert.org.\ + \n# If it is also not available there, it logs a warning and \ + returns false.\ + \n# If the certificate is downloaded but still not available \ + after import, it removes all certificates with the same Common Name and lo\ + gs a warning, assuming the certificate was imported but not named properly\ + .\ + \n# Or if there are multiple certificates with the same Commo\ + n Name, it does nothing as well, assuming the certificate is already impor\ + ted but not named properly.\ + \n# Usage: \$CertificateDownload \"Common Name\"\ + \n:set CertificateDownload do={\ + \n :local CommonName [ :tostr \$1 ];\ + \n :global ScriptUpdatesBaseUrl;\ + \n :global ScriptUpdatesUrlSuffix;\ + \n :global CertificateNameByCN;\ + \n :global CleanName;\ + \n :global FetchUserAgentStr;\ + \n :global RmFile;\ + \n :global WaitForFile;\ + \n\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \n \"CommonName '\" . \$CommonName . \"'.\");\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\ + \n :do {\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\ + \n dst-path=\$FileName as-value;\ + \n \$WaitForFile \$FileName;\ + \n } on-error={\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\ + \n \"' from repository! Trying fallback to mkcert.org...\");\ + \n :do {\ + \n :local CertSettings [ /certificate/settings/get ];\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \n :return false;\ + \n }\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\ + \n dst-path=\$FileName as-value;\ + \n \$WaitForFile \$FileName;\ + \n :if ([ /file/get \$FileName size ] = 0) do={\ + \n \$RmFile \$FileName;\ + \n :error false;\ + \n }\ + \n } on-error={\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\ + \n :return false;\ + \n }\ + \n }\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\ + \n :delay 1s;\ + \n \$RmFile \$FileName;\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\ + \n :return false;\ + \n }\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n# name a certificate by its common-name\ + \n# Description: Some RouterOS functions require certificate name instead \ + of common-name or fingerprint.\ + \n# This function finds a certificate by common-name, fingerp\ + rint or name and sets its name to a clean version of common-name\ + \n# (only letters, numbers and dashes, other chars are replac\ + ed with dash).\ + \n# If there are multiple certificates with the same common-n\ + ame, it will rename the first one found and log a warning.\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\ + \n:set CertificateNameByCN do={\ + \n :local Match [ :tostr \$1 ];\ + \n :global CleanName;\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\ + \n :if ([ :len \$Cert ] = 0) do={\ + \n :log warning (\$0 .\" No matching certificate found.\");\ + \n :return false;\ + \n }\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\ + \n :return true;\ + \n}\ + \n\ + \n:set CharacterMultiply do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Num [ :tonum \$2 ];\ + \n :if (\$Num = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n# fetch huge data to file, read in chunks\ + \n:set FetchHuge do={\ + \n :local FetchScript [ :tostr \$1 ];\ + \n :local Url [ :tostr \$2 ];\ + \n :local CheckCert [ :tostr \$3 ];\ + \n\ + \n :global CleanName;\ + \n :global FetchUserAgentStr;\ + \n :global GetRandom20CharAlNum;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global MkDir;\ + \n :global RmDir;\ + \n :global RmFile;\ + \n :global WaitForFile;\ + \n\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\ + \n\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$FetchScript ]);\ + \n :if ([ \$MkDir \$DirName ] = false) do={\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\ + \n :return false;\ + \n }\ + \n\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\ + \n :onerror Err {\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$FetchScript ] }) as-v\ + alue;\ + \n } do={\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\ + \n \$RmFile \$FileName;\ + \n }\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\ + \n \$RmDir \$DirName;\ + \n :return false;\ + \n }\ + \n\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\ + \n :return false;\ + \n }\ + \n\ + \n :local FileSize [ /file/get \$FileName size ];\ + \n :local Return \"\";\ + \n :local VarSize 0;\ + \n :while (\$VarSize != \$FileSize) do={\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\ + \n :set FileSize [ /file/get \$FileName size ];\ + \n :set VarSize [ :len \$Return ];\ + \n :if (\$VarSize > \$FileSize) do={\ + \n :delay 100ms;\ + \n }\ + \n }\ + \n \$RmDir \$DirName;\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set FetchUserAgentStr do={\ + \n :local Caller [ :tostr \$1 ];\ + \n\ + \n :global GlobalScriptsUrl;\ + \n :global CommitBrief;\ + \n :global IfThenElse;\ + \n :local Resource [ /system/resource/get ];\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\ + \n}\ + \n\ + \n:set Grep do={\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\ + \n :local Pattern [ :tostr \$2 ];\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\ + \n :do {\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\ + \n } while=([ :len \$Input ] > 0);\ + \n :return [];\ + \n}\ + \n\ + \n:set HumanReadableNum do={\ + \n :local Input [ :tonum \$1 ];\ + \n :local Base [ :tonum \$2 ];\ + \n :global EitherOr;\ + \n :global IfThenElse;\ + \n :local Prefix \"kMGTPE\";\ + \n :local Pow 1;\ + \n :set Base [ \$EitherOr \$Base 1024 ];\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\ + \n :if (\$Input < \$Base) do={:return \$Input}\ + \n :for I from=0 to=[ :len \$Prefix ] do={\ + \n :set Pow (\$Pow * \$Base);\ + \n :if (\$Input / \$Base < \$Pow) do={\ + \n :set Prefix [ :pick \$Prefix \$I ];\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\ + \n :local Tmp2 (\$Tmp1 / 100);\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\ + \n :return (\$Tmp2 . \".\" . \\\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\ + \n \$Prefix . \$Bin);\ + \n }\ + \n }\ + \n}\ + \n\ + \n:set CleanName do={\ + \n :local Input [ :tostr \$1 ];\ + \n :local Return \"\";\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \ + \n };\ + \n :set Return (\$Return . \$Char)};\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set GetRandomNumber do={\ + \n :global EitherOr;\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \n}\ + \n\ + \n:set RandomDelay do={\ + \n :local Time [ :tonum \$1 ];\ + \n :local Unit [ :tostr \$2 ];\ + \n :global EitherOr;\ + \n :global GetRandomNumber;\ + \n :global MAX;\ + \n :if (\$Time = 0) do={:return false}\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\ + \n}\ + \n\ + \n:set EscapeForRegEx do={\ + \n :local Input [ :tostr \$1 ];\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\ + \n :set Return (\$Return . \$Char);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ExitError do={\ + \n :local ExitOK [ :tostr \$1 ];\ + \n :local Name [ :tostr \$2 ];\ + \n :local Error [ :tostr \$3 ];\ + \n :global IfThenElse;\ + \n :if (\$ExitOK = \"false\") do={\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\ + \n }\ + \n}\ + \n\ + \n:set ExitOnError do={\ + \n :local Name [ :tostr \$1 ];\ + \n :local Error [ :tostr \$2 ];\ + \n :global IfThenElse;\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\ + \n}\ + \n\ + \n:set MiniDateTimeStamp do={\ + \n /system/clock;\ + \n :local vdate [get date];\ + \n :local vtime [get time];\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\ + \n :local M [:tonum \$MM];\ + \n :if (\$vdate ~ \".../../....\") do={\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\ + \n :if (\$M>12) do={:set M (\$M - 12)}\ + \n :set MM [:pick (100 + \$M) 1 3];\ + \n }\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\ + \n :local HH [:pick \$vtime 0 2];\ + \n :local mm [:pick \$vtime 3 5];\ + \n :local ss [:pick \$vtime 6 8];\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \n}\ + \n\ + \n:set WaitForFile do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :local WaitTime [ :totime \$2 ];\ + \n :global CleanFilePath;\ + \n :global EitherOr;\ + \n :global MAX;\ + \n :set FileName [ \$CleanFilePath \$FileName ];\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\ + \n :do {\ + \n :retry {\ + \n /file/get \$FileName;\ + \n :return true;\ + \n } delay=\$Delay max=10;\ + \n } on-error={ }\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\ + \n :do {\ + \n /file/get \$FileName;\ + \n :return true;\ + \n } on-error={ }\ + \n :delay \$Delay;\ + \n :set Delay (\$Delay * 3 / 2);\ + \n }\ + \n :return false;\ + \n}\ + \n\ + \n:set FileGet do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :global WaitForFile;\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\ + \n :local FileVal false;\ + \n :do {:set FileVal [ /file/get \$FileName ];\ + \n } on-error={ }\ + \n :return \$FileVal;\ + \n}\ + \n\ + \n:set RmDir do={\ + \n :local DirName [ :tostr \$1 ];\ + \n :global FileGet;\ + \n :global LogPrint;\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\ + \n :local DirVal [ \$FileGet \$DirName ];\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \n :return true;\ + \n}\ + \n\ + \n:set RmFile do={\ + \n :local FileName [ :tostr \$1 ];\ + \n :global FileGet;\ + \n :global LogPrint;\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\ + \n :local FileVal [ \$FileGet \$FileName ];\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\ + \n :onerror Err {\ + \n /file/remove \$FileName;\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\ + \n :return true;\ + \n}\ + \n\ + \n:set MkDir do={\ + \n :local Path [ :tostr \$1 ];\ + \n :global CleanFilePath;\ + \n :global FileGet;\ + \n :global RmDir;\ + \n :global WaitForFile;\ + \n :global LogPrint;\ + \n :local MkTmpfs do={\ + \n :global WaitForFile;\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\ + \n :if ([ :len \$TmpFs ] = 1) do={\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\ + \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\ + \n /disk/enable \$TmpFs;\ + \n }\ + \n :return true;\ + \n }\ + \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\ + \n \$RmDir \"tmpfs\";\ + \n :onerror Err {\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\ + \n \$WaitForFile \"tmpfs\";\ + \n } do={\ + \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ + \_\$Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n }\ + \n :set Path [ \$CleanFilePath \$Path ];\ + \n :if (\$Path = \"\") do={\ + \n :return true;\ + \n }\ + \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\ + \n :local PathVal [ \$FileGet \$Path ];\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\ + \n \$LogPrint debug \$0 (\"... which already exists.\");\ + \n :return true;\ + \n }\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\ + \n :if ([ \$MkTmpfs ] = false) do={\ + \n :return false;\ + \n }\ + \n }\ + \n :onerror Err {\ + \n /file/add type=\"directory\" name=\$Path;\ + \n \$WaitForFile \$Path;\ + \n } do={\ + \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ + : \" . \$Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\ + \n :return \$2;\ + \n}\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\ + \n :return \$2;\ + \n}\ + \n\ + \n:set CharacterMultiply do={\ + \n :local Str [ :tostr \$1 ];\ + \n :local Num [ :tonum \$2 ];\ + \n :if (\$Num = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set CharacterReplace do={\ + \n :local String [ :tostr \$1 ];\ + \n :local ReplaceFrom [ :tostr \$2 ];\ + \n :local ReplaceWith [ :tostr \$3 ];\ + \n :local Return \"\";\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\ + \n }\ + \n :return (\$Return . \$String);\ + \n}\ + \n\ + \n:set CleanFilePath do={\ + \n :local Path [ :tostr \$1 ];\ + \n :global CharacterReplace;\ + \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]};\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ + \_\$Path ] ]};\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ + pick \$Path 0 ([ :len \$Path ] - 1) ]};\ + \n :return \$Path;\ + \n}\ + \n\ + \n:set IfThenElse do={\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\ + \n :return \$3;\ + \n}\ + \n\ + \n:set EitherOr do={\ + \n :global IfThenElse;\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\ + \n# this works for boolean values, literal ones with parentheses\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\ + \n}\ + \n\ + \n:set ParseKeyValueStore do={\ + \n :local Source \$1;\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\ + \n :do {\ + \n :return [ :deserialize from=json \$Source ];\ + \n } on-error={ }\ + \n } \ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\ + \n :local Result ({});\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\ + \n :if (\$Value=\"true\") do={:set Value true}\ + \n :if (\$Value=\"false\") do={:set Value false}\ + \n :set (\$Result->\$Key) \$Value;\ + \n } else={:set (\$Result->\$KeyValue) true}\ + \n }\ + \n :return \$Result;\ + \n}\ + \n:set RequiredRouterOS do={\ + \n :local Caller [ :tostr \$1 ];\ + \n :local Required [ :tostr \$2 ];\ + \n :local Warn [ :tostr \$3 ];\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global VersionToNum;\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\ + \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ + \n :return false;\ + \n }\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\ + \n :if (\$Warn = \"true\") do={\ + \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\ + \n }\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n:set VersionToNum do={\ + \n :local Input [ :tostr \$1 ];\ + \n :local Multi 0x1000000;\ + \n :local Return 0;\ + \n :global CharacterReplace;\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \n }\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\ + \n :local Num [ :tonum \$Value ];\ + \n :if (\$Multi = 0x100) do={\ + \n :if ([ :typeof \$Num ] = \"num\") do={\ + \n :set Return (\$Return + 0xff00);\ + \n :set Multi (\$Multi / 0x100);\ + \n } else={\ + \n :if (\$Value = \"zero\") do={ }\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\ + \n }\ + \n }\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\ + \n :set Multi (\$Multi / 0x100);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n:set ScriptLock do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local WaitMax [ :totime \$2 ];\ + \n :global GetRandom20CharAlNum;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global ScriptLockOrder;\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\ + \n :set ScriptLockOrder ({});\ + \n }\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n }\ + \n :local JobCount do={\ + \n :local Script [ :tostr \$1 ];\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \n }\ + \n :local TicketCount do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLockOrder;\ + \n :local Count 0;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\ + \n }\ + \n :return \$Count;\ + \n }\ + \n :local IsFirstTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Check [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if (\$Ticket = \$Check) do={:return true}\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\ + \n }\ + \n :return false;\ + \n }\ + \n :local AddTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Add [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :while (true) do={\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\ + \n :delay 10ms;\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\ + \n }\ + \n }\ + \n :local RemoveTicket do={\ + \n :local Script [ :tostr \$1 ];\ + \n :local Remove [ :tostr \$2 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\ + \n :delay 10ms;\ + \n }\ + \n }\ + \n }\ + \n :local CleanupTickets do={\ + \n :local Script [ :tostr \$1 ];\ + \n :global ScriptLockOrder;\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\ + \n }\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n }\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\ + \n :error false;\ + \n }\ + \n :if ([ \$JobCount \$Script ] = 0) do={\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\ + \n :error false;\ + \n }\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\ + \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', resetting!\");\ + \n :set (\$ScriptLockOrder->\$Script) ({});\ + \n /system/script/job/remove [ find where script=\$Script ];\ + \n }\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\ + \n \$AddTicket \$Script \$MyTicket;\ + \n :local WaitInterval (\$WaitMax / 20);\ + \n :local WaitTime \$WaitMax;\ + \n :while (\$WaitTime > 0 && \\\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\ + \n :delay \$WaitInterval;\ + \n }\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\ + \n \$RemoveTicket \$Script \$MyTicket;\ + \n \$CleanupTickets \$Script;\ + \n :return true;\ + \n }\ + \n \$RemoveTicket \$Script \$MyTicket;\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\ + \n :return false;\ + \n}\ + \n:set SendNotification do={ :onerror Err {\ + \n :global SendNotification2;\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\ + \n}\ + \n:set SendNotification2 do={\ + \n :local Notification \$1;\ + \n :global NotificationFunctions;\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\ + \n }\ + \n}\ + \n:set SymbolByUnicodeName do={\ + \n :local Name [ :tostr \$1 ];\ + \n :global EitherOr;\ + \n :global LogPrint;\ + \n :global SymbolsExtra;\ + \n :local Symbols ({\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\ + \n \"cloud\"=\"\\E2\\98\\81\";\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\ + \n \"gear\"=\"\\E2\\9A\\99\";\ + \n \"heart\"=\"\\E2\\99\\A5\";\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\ + \n \"information\"=\"\\E2\\84\\B9\";\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\ + \n \"scissors\"=\"\\E2\\9C\\82\";\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\ + \n \"star\"=\"\\E2\\AD\\90\";\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\ + \n }, \$SymbolsExtra);\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\ + \n :local Special {\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\ + \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ + . \"'!\");\ + \n :return \"\";\ + \n }\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\ + \n}\ + \n:set SymbolForNotification do={\ + \n :global NotificationsWithSymbols;\ + \n :global SymbolByUnicodeName;\ + \n :global IfThenElse;\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\ + \n :local Return \"\";\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\ + \n :return (\$Return . \" \");\ + \n}\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\ + \n:set UrlEncode do={\ + \n :local Input [ :tostr \$1 ];\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\ + \n :local Return \"\";\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\ + \n :local Char [ :pick \$Input \$I ];\ + \n :local Replace [ :find \$Chars \$Char ];\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\ + \n :set Return (\$Return . \$Char);\ + \n }\ + \n :return \$Return;\ + \n}\ + \n:set ValidateSyntax do={\ + \n :local Code [ :tostr \$1 ];\ + \n :global LogPrint;\ + \n :onerror Err {\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\ + \n } do={\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\ + \n :return false;\ + \n }\ + \n :return true;\ + \n}\ + \n:set IsDNSResolving do={\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\ + \n :return true;\ + \n}\ + \n:set IsFullyConnected do={\ + \n :global IsDNSResolving;\ + \n :global IsTimeSync;\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\ + \n :return true;\ + \n}\ + \n:set IsTimeSync do={\ + \n :global IsTimeSyncCached;\ + \n :global IsTimeSyncResetNtp;\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\ + \n :set IsTimeSyncCached true;\ + \n :return true;\ + \n }\ + \n :local Uptime [ /system/resource/get uptime ];\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\ + \n :set IsTimeSyncResetNtp \$Uptime;\ + \n }\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\ + \n :set IsTimeSyncResetNtp \$Uptime;\ + \n /system/ntp/client/set enabled=no;\ + \n :delay 20ms;\ + \n /system/ntp/client/set enabled=yes;\ + \n :return false;\ + \n }\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\ + \n :return true;\ + \n }\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\ + \n :set IsTimeSyncCached true;\ + \n :return true;\ + \n }\ + \n :return false;\ + \n }\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \n :return true;\ + \n}\ + \n\ + \n# read parts of a large file\ + \n:set FetchLargeFiles do={\ + \n :local FetchLargeScript [:tostr \$1];\ + \n :local fetchUrl [:tostr \$2];\ + \n :local CheckCert [:tostr \$3];\ + \n :local fetchMode [:tostr \$4];\ + \n :local fetchMethod [:tostr \$5];\ + \n :local FetchString \"undefined\";\ + \n \ + \n :global CleanName;\ + \n :global FetchUserAgentStr;\ + \n :global GetRandom20CharAlNum;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global MkDir;\ + \n :global RmDir;\ + \n :global RmFile;\ + \n :global WaitForFile;\ + \n\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\ + \n \ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$FetchLargeScript ]);\ + \n :if ([ \$MkDir \$DirName ] = false) do={\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\ + \n :return false;\ + \n }\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScript ] }) as-value\ + ;\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\ + \n :onerror Err {\ + \n :set FetchString (\"/tool/fetch \" . \\\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$FetchLargeScript ] })\ + \_as-value);\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\ + \n :put [\$FetchString];\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$FetchLargeScript ] }) as-value];\ + \n } do={\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\ + \n \$RmFile \$FileName;\ + \n }\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\ + \n \$RmDir \$DirName;\ + \n :return false;\ + \n }\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\ + \n :return false;\ + \n }\ + \n :local FileSize [ /file/get \$FileName size ];\ + \n :local Return \"\";\ + \n :local VarSize 0;\ + \n :while (\$VarSize != \$FileSize) do={\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\ + \n :set FileSize [ /file/get \$FileName size ];\ + \n :set VarSize [ :len \$Return ];\ + \n :if (\$VarSize > \$FileSize) do={\ + \n :delay 100ms;\ + \n }\ + \n }\ + \n \$RmDir \$DirName;\ + \n :return \$Return;\ + \n}\ + \n\ + \n:set ScriptInstallUpdate do={ :onerror Err {\ + \n :local Scripts [ :toarray \$1 ];\ + \n :local NewComment [ :tostr \$2 ];\ + \n :global InitSetup;\ + \n\ + \n :global CommitId;\ + \n :global ScriptUpdatesCRLF;\ + \n :global GlobalConfVersion;\ + \n :global Identity;\ + \n :global CertificateAvailable;\ + \n :global CheckSumsVerify;\ + \n :global GlobalScriptsUrl;\ + \n :global SumsDirAndFileName;\ + \n :global GlobalScriptsUrlSuffix;\ + \n :global EitherOr;\ + \n :global FetchUserAgentStr;\ + \n :global Grep;\ + \n :global IfThenElse;\ + \n :global LogPrint;\ + \n :global ParseKeyValueStore;\ + \n :global RequiredRouterOS;\ + \n :global SendNotification2;\ + \n :global SymbolForNotification;\ + \n :global ValidateSyntax;\ + \n :global CommentsInScripts;\ + \n\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\ + \n }\ + \n\ + \n :foreach Script in=\$Scripts do={\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\ + \n }\ + \n }\ + \n\ + \n :local CommitIdBefore \$CommitId;\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\ + \n :local ReloadGlobal false;\ + \n :local DeviceMode [ /system/device-mode/get ];\ + \n\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :local CheckSums ({});\ + \n :do {\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\ + \n }\ + \n\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\ + \n :local ScriptVal [ /system/script/get \$Script ];\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\ + \n :local SourceNew;\ + \n\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\ + \n }\ + \n }\ + \n :do {\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\ + \n :error true;\ + \n }\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\ + \n :error true;\ + \n }\ + \n }\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\ + \n }\ + \n }\ + \n :onerror Err {\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\ + \n :if (\$Result->\"status\" = \"finished\") do={\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\ + \n } \ + \n } do={\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\ + \n :error false;\ + \n }\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\ + \n /system/script/remove \$Script;\ + \n :error false;\ + \n }\ + \n :if (\$CheckSumsVerify = true) do={\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\ + \n [ :len \$CheckSum ] = 0) do={\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\ + \n }\ + \n }\ + \n :error false;\ + \n }\ + \n\ + \n :if ([ :len \$SourceNew ] = 0) do={\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\ + \n :error false;\ + \n }\ + \n\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\ + \n if (\$ScriptUpdatesCRLF = false) do={\ + \n :put [ :tolf \$SourceNew ];\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\ + \n }\ + \n :error false;\ + \n }\ + \n }\ + \n\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\ + \n :error false;\ + \n }\ + \n\ + \n :if (\$CommentsInScripts = true) do={\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\ + \n :if ([ :len \$CommentLine ] = 0) do={\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\ + \n :error false;\ + \n } else={\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\ + \n } else={\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\ + \n :error false;\ + \n }\ + \n } \ + \n }\ + \n\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\ + \n :error false;\ + \n }\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\ + \n :local MissingDM ({});\ + \n :foreach Feature,Value in=\$RequiredDM do={\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\ + \n :set MissingDM (\$MissingDM, \$Feature);\ + \n }\ + \n }\ + \n :if ([ :len \$MissingDM ] > 0) do={\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\ + \n :error false;\ + \n }\ + \n\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\ + \n :error false;\ + \n }\ + \n \ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\ + \n\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\ + \n :set ReloadGlobal true;\ + \n }\ + \n } on-error={ }\ + \n }\ + \n :if (\$ReloadGlobal = true) do={\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\ + \n :onerror Err {\ + \n :global InitSetup (a);\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\ + \n }\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\ + \n \". Installed an older version\?\");\ + \n }\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\ + \n :global GlobalConfChanges;\ + \n :global GlobalConfMigration;\ + \n :local ChangeLogCode;\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\ + \n :onerror Err {\ + \n [ :parse \$ChangeLogCode ];\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\ + \n }\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\ + \n :do {\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\ + \n :error false;\ + \n }\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\ + \n :error false}\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\ + \n :onerror Err {\ + \n [ :parse \$Migration ];\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\ + \n } on-error={ }\ + \n }\ + \n }\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\ + \n \$LogPrint info \$0 (\$NotificationMessage);\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\ + \n }\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\ + \n\ + \n :set GlobalConfChanges;\ + \n :set GlobalConfMigration;\ + \n }\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\ + \n}\ + \n\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\ + \n:set GlobalEnvRemove do={\ + \n :local doRmEnv [ :tostr \$1 ];\ + \n :global GlobalScriptsUrl;\ + \n :local ScriptsUrl;\ + \n :global LogPrint;\ + \n :if (\$doRmEnv != \"True\") do={\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\ + \n :return [];\ + \n :error true; \ + \n } else={\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\ + \n :delay 5;\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\ + \n :delay 5;\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\ + \n :return [];\ + \n :error false;\ + \n }\ + \n}\ + \n\ + \n# Add and fix global scheduler\ + \n:put \"Add or/and fix Global scheduler...\";\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\ + \n:local Comment \"Every Day Set Global Environm" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260504/20260504090002-Diff-Config.rsc b/MikroMaster/history/20260504/20260504090002-Diff-Config.rsc new file mode 100644 index 0000000..6f8ff22 --- /dev/null +++ b/MikroMaster/history/20260504/20260504090002-Diff-Config.rsc @@ -0,0 +1,12 @@ +933c933 +< \n:global CommitId \"main/529/575f9924\";\ +--- +> \n:global CommitId \"main/528/a6273d14\";\ +936c936 +< r: root, in 08:35:02 04.05.2026.\";\ +--- +> r: root, in 08:20:02 04.05.2026.\";\ +2911c2911 +< \n:local Comment \"Every Day Set Global Environm" +--- +> \n:local Comment \"Setup Global Environment for " -- 2.52.0