From b65930f7c9276552afd3900bcbf0559051a8409e Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 3 May 2026 19:20:17 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 03 19:20:17. --- .../20260503/20260503192001-Binary.backup | Bin 0 -> 218694 bytes .../20260503/20260503192001-Config.rsc | 3997 +++++++++++++++++ .../20260503/20260503192001-Diff-Config.rsc | 143 + 3 files changed, 4140 insertions(+) create mode 100644 MikroMaster/20260503/20260503192001-Binary.backup create mode 100644 MikroMaster/20260503/20260503192001-Config.rsc create mode 100644 MikroMaster/history/20260503/20260503192001-Diff-Config.rsc diff --git a/MikroMaster/20260503/20260503192001-Binary.backup b/MikroMaster/20260503/20260503192001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..c5aa07cd3be9a74f31f1c055d9d1c6a442b54674 GIT binary patch literal 218694 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 z

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ƍBMvr4;9R>~s&KTVZiawl|fC8a|u9gzdJq6dqka2sE}C3j?&OXwpc z@#?(q&p-Qtg^&MpKnuC0jd6bIehiNQ^VUAt+Iz5%hdcmw!~uYoPxz`E*EDTL%(v)4 z4RF)O{1ty7A8nhBIO#w+6$Yj4UX?#Y_TUR+%HKv1DG_{F_HXf@Iy&9OH;~x#Q-UHlmcO5< zh=CMEavCn*4~Eo#CW4gA^UNd)LPHpCx}}o;b!qdqx3}P(z3gR-4U-XS&+J-G-7$mV z#-b90wuC?nWQdyDNPI9S`3NT_(jJA6*lc{d7w#6WI z?_n13MGW4YQeCH2%_P-e{42M$grgU1+W-2CPeg&7f0pktZb@_*Eo%BoKEM$wf)#(2 zTSH8%5)_Vsqb;SZ4~B|E?J4rvOMOfG+TRG_kIWm3&@@B$)4Y}>K=uZd6!6G|7Qt!i zJ6mM!*@Y$-MfK|l1jR$iSd&Mj9150ME<05vJlxr#+{Tm<1DqT6+3DzM9V08;*@8@V z7llcDp+)4hht#Z2#l7e>8S8jThY6ejzwViD){J!~THp)GXi+KCX@lq+hnikl;uvCI zbKw#(q;Y~}7eQ$B{u=}QQ+wqeB>;gWnFuiluC;=Y-1f+)S6G+T&m_SW__Iz1dL|a4 z#lBM}jdlS5s%G8?t91sq1O4J7B{P=Pt;Kc$N~+ZjDN1$D0-vGyr`23dB^L@jv*rV9 zne~ayB)0uuP8bBc|3F;hB)2D|GW1+}oUo#j@MI4&&FsGm$(t<2xpANABytepw`w5f zqk;rT&B%{aeQC-MM}w3ojtNMrmppmOqJfc|*Vq6qBQ2y>a+^f54;ovaB*oqvicUy& z)mHc9cHev?m4DIQjpmGLt@>#*7jH15g)MTcH#tyUuq?kDH~2!_J=(58uEQlNF(Smc zeY>mNNo{iq#uMiX?_(>!kXNZQ>S1E&)r}|C>sK$S)q1{;x%kFjoFtv)5(b6%f0$K~{>SO|HpM@_!-*@G`w{SWx}?QK)G$_2Pdd&mutsB}`%Q`RsO* zQWFVjelmkd@vC_(n9a`oahTl_L9_VYI~^6RHoG=!q8O!;tMwTfJxxg{YzqqlMU7+C z-}AXNl~ho&;V_^5HI=h2R_bCYc1p;_SCXs=s$ES&Rg0`b|01ifC$WKB$zo08kW7p3 z&u8?6J*3}N;mqQpopd7Rh`@9nP^IL%@Vfv2QK6h`;b*g;aXKK_7atWTA${upW!CB= zTkrNCFlnUJRXYFS4f0_H`eY<-$(|YnjjNNtO;KQqt{1tL6bX>?1emzyPrFm8s@ZA7 z7N9yHIUQ*T`cH)l&d`tMg4_5`6Zpze(5GKY`{;pl&3IOiBd0a7*OLySf>C-aoSNm6 zde%vGe%P@UW?(~5GTynomb*%KS1AMYvwDi3LtC;wu)VTIV=rdxNv!XXlh0~*^FC>G zDl(fm9|3oLPmn@B(Czk;6^4CYcTAg;G+&1@U8dk(elyZNIWzGtf3ky`kKpXg+9O#w zQJAdTZm;Q0D&Yoa>)k?g#E$9F=#-XsT$js9^JQ%p&d*k>8Wq4EiyhU51O1!<{7rTA zDI-f)>AZYQWM8kM``~t#$x;da>65x!iME#-7ns0cUe0X{V-d^|a z67&~i3)uFH0`xrSpLdb3L~LwR=M(Weazg9C3`ta22!lvb;a&QzM)VDI0ICRGmGI(3 z=`k4eeTJg_vE`y1wLuu-5^n|kfeq1HVY)fW$U~~V&u`{rw|S=`j^i(fX*##+GxGB= z_gMOZ=@=B)b!iW;kq=8ZVZdI9aM_35#oShpCh9x)vNoezM;qs)WS#`F+H!K*NaYt* zA-&p9aFG`NwsZ<9z1sF-2;(Q{L#geie_aHVZo~z5OnA66tBOHv16b6s!+p*vmDN(3 z?bZL=kM8=(sCdScmnpF%L_Oe3xSyL(uM!lsVY^G-hb-*9mb7y0YXjpn2lqNryF zxxff^(t~OvqRL+uN!j8U4Mm5bFo)< z2u?je2K5;_FQ#S;wC*BQwsG!nKm#_}HlD}R^x>*BlfqD#^v4eXPfj@`uox_c z86@#IFG)v-&om~IaAhGOH||sLP!f;Id!q0ytqN5ADbYXvjWl9olG4WnRgF zab)c~*ZEdqFr*x@zPXiSutN?{xruDY`xWkPr)%cJ`8AIinX(Ks`}!`_2hctUcX7iQ@t@k*Af`;Z#p}vB4L^uK7lf&hX&#q8}i=or)GmpU<(# zq*UpY(!t)$iy$sWJzHkE%kfWey=3!O9?Odb=@$kW=AhD?X7*|KP;94DRw{*FUJTA^q2DZ2VxuV2%~55 zV_^(w1W)%kQB8oZ;XS3>VmsK*`Pfv)^6hpEx#PvAWy}@Bmtw2-WP$JK8J@-P5(|G> z%tTezEAHQ?p^!-QSo-*#gNS|>_dEqwkfo_u`!tXVi4sOjnp42_DaApj#^tBhJz!1B z2#e($dSdZODPZ$9!W2obW5$}4#(z1aRr2f<0mfVclcp&3 zI*CKXD<6l&o@<9!vvAi$KwZ8A4s|&^qu*hczCB`-hPM1ABo|WL?47U5#2>ciE~JD34F*i ziB)<6+sL$=rLP&+ciEAjjTx6>~FP2Kc0v!F_(_$Bdvdo;fow77RdjlN_W2 ziOw+77vHMg{;52K<`TX0Ag`g2==C@wq_dd#Se9vbWx zydzvSN6vlM zEV^dMCn-9_LNxsQL{5;;nTjT1`FEPYs6;7dN5X)#3$G=rb;^H@);AY4Ngv`NYpY6f z0*?9|=Si`pT8oV#h&yiy0LVaMM8cTJmRPYepjtdsJTU_YVx_pJ!NS1a)f6cs9$U&| zhnje3nj;f^aR=AXeEgFz&HSi zS)kwIxpGXcp|WwW&R1{qZh7xpR`>-L^p75rBVezOQZ5*lk$g7Vkzu3=4>D99o8vSa ztyG&Gxl4dNO0!8bC$Ifk)GCbz)8sRpC2P4(-He+_JC#fmoV;MTm1&^=PYWS1NdTI? zl(X0lU33mUD_b9cgS|IVllsU4m-PdDV2P-lurMAX!^`-$4 zCRGA!lJy9{lK(ogbGtdyfk=Cq9PG2gW+8#94=p$2)b!~ibif<2aS6Yri{||?*7nfX z*Fqk}emG09g5m||*m8K)l+`ZwgQk!;8fO{;N4fqvSmY(J{I<+TyOcJ!w$t zuM6HuoF(}4FUF=hK2XS>0n}rX4n?H1yIR*BT8D!(o4zpRFku2$F68RcUrkLB<`_%X zu)L2kFw-u?@8HJ%E8bO;-f;z}zOevo>c!&yjE(JJsuLYVy*q`c4GVBb@l<7C&Kcat z`QWnQ@8po6nqdIZ){)DC;O)yaTi7mZDOg9vF-FP*> zJT=9fMJ%!>1ET^nQ{bO3N`i|4Azw+XYz33=&@r)c97L!Az`6@-eRg2Pj!2;ZQ>OhC zT)!~50{+32zw1_>@n$;a8meKx1$4ZW?7~;@$2>X}%lNO5lw;=K`q}_RqqGZt&9Xox zB`cZS|3~jaKIq@HA$PA%gN3rJW-cag_?zHqvXTI_Wfy?vt_}N4vuR*jG?%wOo<{Ug zkl$xvy|DkX0i8=ASfYYpp&~N*3sR6NK;PKwl-w)N3j%0r#iZdkXCqUWvf{jWbFO`V zC>{2q#PKbO8ktxlSE6?T|w$84|dHS%*QTX5|trn#$!Dbig$#c#EI8u`D#=g z83<;oAubxpJMvLLe7u2MW#`vx1RpY?TA5f#!T{%hP=+0)6b#R6M}62dz2a{YDkly zoCuKO3W1Gm&=dX`68b0(vN;DuS#x!*0khMgx%t`RHGAKASNP1R@t_oBVr=7BKpvfD zy^%QR&MSo^O{kyuauC!6n2X{lPH@iVRJ$qtT6po|z9q1P0j7Q*`7E;#Y6tjIx>iNv zk^r?uF7)OBF|Cfr=r~BCMO;&ny73?zmIJ>B&57-sV^Q;(p2P}qmni=l^jkaZFZvaDwQNCL!UhMJJ>SuYuY z@-1f&@kTamR9+dI{P+N;czcqG!s7talEK=6YmX&Y;KL8ry`Gmt39@`4cIGz-xST4PeHOz?3uvV3aQ%tUQKb$7XJnc4ki_F=<YkuGd@rODFrUmr`VXGyhYWW zjp1;=h-iqLj7hl|=BOx|SIRz&ca}rsak*rcu_K$*yrCD*3O9J-!;Bc65t{llH+M25 z>s%bQfZ!UUMhMdgVyVT?LGBUaN`h{_ync<3jTUc3Zd`;`O--|4#0wKWNk2Rd_(IVz ztf*%W-Pm%SC0!#Jj33}wbrtRZ_;OZ z9vW^)vuqWlxzl$b1`Rfy&GG{gT%h134Xti;#vb#ch<%pA|}xyp&?xj{M_-SdOzP zr39aqf>+e;Sym`UHn5IyPrj0BwY~Op#{=OqT_gA<9`Q;60@x;G{CtES0`MOM&)CC8 z9?A2yf)vIZeqiJzEm0S^;jyozj&X@hN{vqPl{{bVgVF3p+=Hr1HHeYnSh*_3;qoOA z0cMBu{tmO#4m80w}KPg}6EA zR4z84o#cwcWME`!9=DaswKAymywXqt6$#=|Ud7K{H7Qk2=%!>9#rkYso%f;w3xlA3 z%4|Idnp0iNc!(3*CU$__*ScQqWHm&LKKhT~uFs_T_}DAgB;^|+~%_tA?HYU)Q3 z2X_>?oJ6=kWQ_Z0#AWz@1lqy*nXAzTt$ZJ7%z~~iV_7m?vdax?Y~@_%B+g-jwa_{i303|=eM>8(GjcJElZt-{|Y^h#(B6PpfRyNhva zB*qHcQ2DSj^HcT^5O4K(;1q){k(r6^X_gA0ATU8yl}Go<5-Q0$vBV`7@zUerI)`|o!&^h*`#R@T;bcq7W8HfYK|CC?xiMkUZCH&& ztS2Fj<1`Y7PtgcFq15N?97*Ma9F@#R_+x=8cF2DU?nv?tCgf z*3DT?$AhQ-IVM-oRCSpVX)<9ZQ5Wu#K`Xj^au>b|I&vqk;1z|p&zM=WWB(4C=cnBQ zb|bNBDgDh;`*X9j35}+o+)nXouLExN)%ui)T818?6dajTg!M-<{>`IR7p#4Skbd5Q zOKz)n&^dT^@~e>!1n6{FNTTwJ)YLLAAo=6TiD!apGVGC3&=JpJ=kxpLJJasX7;NKu zL`yYycNsAzAO^&9rF&}?$T?U4;O;FLGmmkH4?w)7rybfbUfpIen)Be4+8HzObD9AE zKLEhJ4<`|4fpESpfNjQ6mq>=bLg-+euu&PTXrRS%U`JS0d_17Xk5y;?|Nis2eFlK7 z$HhlW7Pp%;{!XPLynE3dl%!N zV0`M{otkottqhj(w*cD}Bm;e}SOz6~wp(bQCxJTHK%g)v$*@5H4OtuG@LJ-v05-g8 zC5+0%>d99YPg}^jM*qHuWtq+CyW)rUgUenzufFp-pbCHHlB5|t)o_)e{;UjaMMU!0 zXsehWT!zZ(BWFVT9VA!q`bgtOmqEnRObFyAmI8fn;7O`|f_@+5da(m4KvrT=Bu`C_ z5wysRY&G4DyQ6KXRO|Ro1e?RLr72K;DtHkO+&5Be zb>RTuH;`^}e~hHad+Y!t8mKfiPzWtpHcKaEppy40-f&SL4?Wy{94O4-w*;rN5Oyk4 zhP|CW_Ws@@A+A)|PvzDz>YVS^Y#(2|1TjZ4hmr+wURh}YgXh2B+gMql$-919wQfz# z$l~StxiZ94DEEw^ql^fJ^fM%YwV$Cko;fR^LYhW0M6%#logqeOu1Saxj<*Gb#)+<} zCJwZfAh5g~x8=+qO9f#^ikQvKHy)rAHXd>J|22Y#jSFpkj2=kH>)?1S_W!iIu>8=8 zw`c?`8Ge^sjjx-D%p6b5X9zl!*|&O$`xPMqOkvXEe7_9D6kwIkCX>%Jeq-{85N508 zuPNdF?|%KS0gfsAZ%NxW^oJCzu4fK#dlZQ_w*Y3>8hAnCb%ovsejM5=i4BH|Jb1jo z#7Qxs)fT}%0$Iv)FyK8{t~MDym;E1Nt3MDe4Cph5#eS%DjJxx4Zas@6(hO=>dwUsJ z)eyuK0<*elFP>oe<-&4b{&2DZKs;Y!%XivpE+hlvTx`D0%qn)N+_C4ryH;=4y?jln zwZTG^88m&aC75Yn?K^TK!D_5z&C@kXK4$q7H)C$@dRM4hB^9ODCb-jnG^21v_PM`D z&Paq^I>_H#Trnp>Y`my05UjtUWy@CZGy!DTK@%^@G6~EjVfpP*vmxTprV6HK{-a+I zDjl8)#JtyeA>Q=MqE|tuK{{7K-9NQUZ$8%ESnKri&vCX~km-H5pR^Q>pKd%P3ipsY zu!;J~l(9f0oB2MB@n9F9_FVl}@Gwf-hee&PIr>}d49c+)f1C@;1pE~>G$8r8NCS4WO*M(Ng zK%Q}RijV1;7FcxOk=vZ;M zg;4lxmRV18+7*bUZY&PM!dbpbs2O?RIde#NS!+n2*lrRR4iC{NwGR4qOrMR9p3~3o zYl%={nF!&a+Dbc(0;2EH71Efc+ZrC7wFZ)fK-Fma_bRmeq0+;CHaj_<)zt!hKa;>E za5Ckr*=#&3cZR=uHjcO${?>TN`_cbq^FKrHj`q=6cjfaC|BB7Aq2}CuO5} zeW>bA8tZ31{KwPR#msoyt(sN)RZmwPnXK*!0+txF&_!pL5ky%J z4O=AR>}|&PEyTftXIb*{W!A1Ow$){1mLjaI+7*PBBQhPsXUHdJsCe_CVtr(udNJeM<#@&1w|{6)2$ zd(L&=%c<3kZ%~ofg;=x=-$6!4!7_7dih<$=N317B`Sc!SQl`JDpSSq-l=a3&w-9~3 zc+@@f!8-SC$ zKzWqVz2bM%UCI22#cdYy@+6RtSB_TXeS9rv2k?ilGJ3wk{y$w!6>ru*c+vwYcaTQQU7dVZs2_v8Nf=#eOfbLb=TcDn(qpr5r|#lirRb|HDQ^|JFgC#45O*e(#A@GG{8zx{$ib zjZBy7tE(}Q@+sU2-V397Pq%=yWo0()f|mVaum6nKNUSERQUYnr==8S+U{C1{FA_De zF(uNYsCC={Ix6^~`Yy_wH3y#j$2d+kRDX+F9-$S(H57 z|99ick8OJjmlQ4fwFb2aGE;B3nEf6EN59Cn7C_BtCHwu9+R!u1E;IzALqimVFG4fm zjMBw;JnFwt%1Skjft*l5U8*uTNaB2=Q(ExWly9ycv^NV=88S{9k9UA6sAa!yd|JXv z*A|j5f(#b$)5f}}Q1VRHp9~{++<*0DDnIu~<0QO)`o1aGqQ!-we`-Yl>l}_gC6w6@ zmg*}OXy{7RdWWOW{#ol6NNoTe_o@g{?aV#@SL(Wk68Tk!dR7ZIT28I7(MzrsKS0BP zzT7NdV=H&1AYwM0tm~ylBU^q4k1mzCu++xF2sL);`bPa@1M?8k+zk@EnG((VRFQ}a zKA00pCyIPyXwXCvXGE5ANd6+a5}~u6RpUbR?CC|K<9EijpByS7GE$$ciyT|a?L)U` zt0nG_nwGDg%Jj?hebO0{7eIr%;{9^^kLClw;0>(Sk0D=WF(hBoX+fi3r|1Xg1+?bs!Rc0#lec<9@tW$drin0I+C9X3eI@ zEw6Z+2E2o>K)+XyVL#p4ue$NX5=9{Y-+KDV+#dKw8VaLWLOEA4^X*>zk0Iirw!lEBo{Fe&Yn z&P=!UgfVd?FlbMjNW|1~uxJEYRCZx&LjgcegAzIyp&y^x-9!F$1Jr6&jQ=ynqz^5W z%f&~mfE%feRjx3P(C$j=f;Ss0RH$J!R_qxggFpy&jJY7UU`en~UMN1?4QoOe)E9eQ zJbICjjl#aD*A%j_SJGO&O8YkeKPW$wN5D}e<8RkAQo#I^>GD_0yw!cZOk2xR<=1KA zXgS+p%biaf&lEz5RiQ` zZ>X1e*B>HQrt~=c>SyWHRB`qF^l>TQ5+)(M#*OgJTA_7TR``CAAKg)-pIBRTyCV06 zJYL}5Ck-MkpLeecGyzMGp&PbUZ1hQn5pEOEeXzuj(Cv6~{2xs?6@>pUi6UdAaVSxU zJDpHK3!YwMstyJfA{O^nb57n_6Goq8GtWC%Zi_#FH-))>h1EJNVLEP`$)zp3#Y0 z&g#VP(4Ihd8|}|C=#5hjD;#+{VQ*q=8|}A9B{dhJPhuGvE8}1y106nss1t#?}vASsm^2T3Gn#*Kth=Hz5q1k7u0AVRq3aqM z9klHDcMu6z|21*+l894EnIqly4GJ<5QH5TWee!EUr{LNPZ2mDIy7KX+eu|^v-r1J` zecc5I1YHwVW8UlBDy5G`Plh3wOoR^DDw9I2vrqNeJ);&TL9v{jI&XESg+<5yKaPB5 zz9tO6mG*vTt&A1_+WCEV8o7V!t@GSDIP{h~8o)mHK0p#=Cd|EWqx6udr&SC0Qjp+4I@rr z30K{aB3a!7RuTNO(Po#QWm*JV?vi&q+v)JotEJ9?*A!nP4*5}<6W$~EI+#X>s~V~E zaRWEPz-n8&BIoDyu}2|ZM?5OH2w(Pt#Ao&C#`n|l6NL=>&y^Bwti?$_pn4$kZ1-hV zfm%wV>p#5+GF~b*o(v7M)}!RTEu`&@#{QaA5UjFb*WsiDgKZFTpN2N`P;ct0(=AYU z7h=G6o{uLF)%; z7Iu*&ZLQTQyrOcrBZ0yx)@K09GeSaIKnzmIhe4`PA9FQnxgFGD$2x@DDn=em;vymA zI(w5X{^>F-X9PiC~P;tEL1)SYUgx2YClcge~q5eE9ro# z!Gv$2#!9t?8Ip`G3f^i7)hM@~D09D{HDEKmI7AI=vX|`OLv^n$N-8=t9$+PD-~0s0 zh<4?ye5xc$?X1~9z6+@!L3okhdfWUNszm$jml1GY2V{?<`jLPvy#>H1fhbtBC~wYG z3VJM?#Vi~&R@Zbzf8GwPovF%)ee~r2l!d5)PWa>{vdjB#FkKnA%*@m0S=zs>jmnC9 zAqm2ZRx@4pt6fh&^Sj%R@eabhpU?%(cTQh3I==3rdry%3tDRp}=0H!Q(%^b}^D~z{ zJMv=xshxd7e`6T#p>?3Yj~p>gx-B_KZl_pWDElf&7VO3b^5QuT^c+{*VdQfDRFs^g zrL%PJWzB5>2o6vOPA}7Oj}nzFll@t~(bePZ@_S*V%T!Azm|g69K5Wp3=N}hwq3qc! z9DS`J^>zgXGk%DNkJHP`U@TQ)u3tLxZluRLZacA17DK-5CYKmNpD;MP1*SSHf7 zR&|R=r1!L2ikAj#En)d$&WeoX%h+maQn%$+7X=b4J}i=fBP&ScLFe7O3tp5~fdX8# zF4?7)Ct2_c%Z-QBgICL#@DbXuiNM3cS)+tA=SIfcv}e~SWYtQ?|0#;PTDpHw`WfH5 zxwzT!PpKkmT0%&zM{JlurReT;ehFk1Z^3G%oxJP|jzu>(4uh3lz`+oIzaNFE@kq7b z%o&??_HVPHGOue}mTVNGRL|iF9Eg0Z>o1Od5Ai~8X`~co8qTa!gFKE#qJJ0Jmw_%} zB;3IB3TGh7#|k3hEs#ZT)(c)d*nsY8ZLSawA0UrCnXE=LZa_!}jOITbq)=f=EXeZg zy$?zBmHlfQtHu4h=Uz1S`pH*8hZ{H~8G zk%G(RT;t;CVa@f^nTS--I75Z-voc7y4yVLGJn#^d?YE_Lvo^K=ii#(01lqU2YNZ%q z9sbB$@~dhVv4X3h{z5CrQW~^nX(ze&C-P7_wZRGorn`|d?8EC8E>t&%SI41;@j&5Z zQ1>%ug4sa}ud0lvW=TDPL_$TNy!8mbV@E8rm!&-bqL_53Yb-*^8!Oy1}Lm|zR@ z6Bjidz^ZSCx}iUFvp%r%AnM7&hN-9j;?UT!f*AF-&+Qt82GAMTTYADaH;fHsKf5o^ka~*3-kmYaoB%(S_4}kw$dp+Ge@UTcX%(@_7f{LT=2z=qZ%Q z=G>bIR1}Vo#skoV49$7cc$8ot>aWS0pGP}bz35uA^&}BP=F)%hSHYF8L%_+48f%Ss&w07amZgdS0{r<)IDBH@jXo~5eUSnYV11Ecx zDyrOgwl5spN0HhAPWmhhM8huGPPyUKTQJe>+az!1vd`04n!IJzJ05|H@D~0~yd<3-KHh;G(l7hGkX%S; zfSR>ruBwl3{CW@cN4QfWj;8@Ot;jsuTGafNSP1t_G`iEZwHpUmb;m4;rQO~xt;wUG z5&OSMBuL{i-EJIytuMvtGDI2F#T1qm!mBIxc@ir37g1E497rCd;@WIXBAhEV619E! zjoEtq@r83`X8t?+R!O=CyYEHOU-YlU68X;u8ikt@Hm3wZVV-Dm}_E#w!5zWaBWwAp^6RT1~P4Bp`OYQ&jDV0 zr7zKU4 z$bd=t;o^aWfM_{45~s&CO@dJ!nKTGQ_GmR1r~LpJLQYv7Tzi)A6{spGB{WAF_Uud> zOBob~AM+md7R}3LO{qLgL*ql=7KigVe_tx~bGUtSkvKnF-(!17Jv_SO)L*Hq&yGdt z`q_F)JT{^F^O}^Z{k=b{_r5H2u${buKZd2&Wno?jyB z3u1)f|2tjj(_JX0qrI8hfenyBp_iQ=?5_G6ewnqTIKkAwe<}lZQ5Y$D0{>bqdVv)- z{+^6UbuNHN=K8Nbf-W|Dr00PJU5?B+$$ar+@@I2#-7#rv!H00Q%=jw`@Z-d(WUaoA z!-)I_oFZE!=1+-A@NG1q2a~QHgExFJ^N=Ljha-axQ=sWVykkDjoD&9GomtSOFlW`$ z?_+eY#ipT8tvmLR3iBxz#ZN6^PeXDS)aqn=4wSbwL<0g)i|0Di5p`iol7ZTAIiqlG zd8P7LlfxlacIDITsq(lRd+t7Gl%}t*;op33iy$p41-y*lOROH?jn^}qrx!^P6d{j z-yu#DA-@P$ZE$TyUZSU`1Y!IkeHW(z6%0F>nZk_c@D32N=YDsX< zP>7aEcSVe6>vYp)kPrj)b)^vb7D}hc=*!tRwO<-Z6N3q2Zqqzxs{`@Z+v2(wnA$SD z_>stY6zf*^zCOo<-+&)YKMs8gfFH8Fn_|$An)f3~waR41(3YPkSgqK5;0B1Wc)A5#73dXKWpT?{hcbs26G=bEKdH|}i5}vRkUwybyvno5iMY5M; z48zH2+)u-%pvWko{w4x&l~QQ_uYq;8k**2V_(%*oqjd@PrOxsm0*vMPJVo5~mU2AG z#*mUjT%81Iu%cztdJ(yxjlyE66;91UI!IjmZ7#ABV{Ss(HmT(%7JCdKy!{U*3U@o#zEZ`Zm`7!j#>-;y%TTe`EX}e z*41c zSl8>EPtOEUCgJE~{rOO=eWC9N?#&FcjMu|u)#MsqJnpExC-v+8mNcQf&BETL zPA;n>P|?`w$bG1gOv`;E7e0or)WUE)fA>XyZWo$(&v1)~K?HBO7M!tY?oF#^)S z+6OEX_ax3DEHXk;(x4OzoarrxS$+~AI~x299dHb;9vnRF8q9%UgH4avBjfO*7$7PZ zl>$h%43(&y$Rt9RtOVzZJY%BYmqxk!nvI*5obRVoK~lwUTQgj|PTpecQlN^RjpDQuzwjVsWkeXt&u?nC006PHx zl7GMsvqB)-{`x?dRX~RGfpfBEe z{Kev>C_=3C#t36E5(&>6uPN#v;vFEP4)kpb>rOwfBZD$JY;{VcQD6 zRm)SX7H;39#bjWB)-QK?KYg^5DUqdR8l^vQMUCR&ITRgJnjbVZj^9r30%kwb5NUCx zY2XZxl#`xM+m%yBmQ|X9WVpw?#V|d;vWEyv{r6MtZz1Ua_>fS?l}rGgAz*eviH;{Q zvm}r9;#rk;>JB1-5+mhn^z4|ko>0U_lUE{3ZKj#r;tBQ6@d|wiwGDSCb?V+Y{+*}j zHGu)PQwHNM#g#xFzjLsjF>bG=g#KRBN`%ePigm;y>_PZCEp(0K9+I1Vs>F4B=C?D` z&ZL5K6&HW6O!ZZ487}=XK8+!Zq@B8O)inFCWfdnhu#lO^ZejFvi6irr$#?M$S-7>Z zBnrk>(BbW44D*nP!RCe0-yfEmk_mFz6?0Z(-fR93?4QU?HbVZD!ZwAlrbj#fa*>Sc zG6zMcesM6CDUq2e!^2YJWCqe&Q=PM$O|1f@v48tltzd!UHVug38P)}uern2(L=a0P z#DOdR_`0f8iYS{f+}^GuJ981X{-Z8~gLP4Z(5gqc$ZWNiwEeZ;LwY&QN-dx6UU{Ri zDaIwN<-mjd5MIL{B3n(dINIVA2f6SK6+iuRvCj;C zCH3uhlWHPi_KkBqtE=hn81T)vq4aF+I+d$}9YSu~@5|J5ZsgA3)wUPGU7{iRMavyN_&mY(ZCNh z*kMX->_%QZ2!0`e=0s`a9=>#2!s04t1C>q?zHbm{Pbv!sqV>E7 z(`$=c9<)=JKMUw4Ew$A@mYD%`8e+m_#S)3gV6;br>=+EA@j!q8e zMqD87EplMezhM|B6sjItO>AK4;2dN0DnJtRY3^$sD!QiYK^bzAywC$Z2H|?#oEUf7 zn53GCqCufZ)00X8!V({f(@tmXD&<%ZV1Id-=zH5YzQY#}XaVwNSZ-NSGX>Y_(%{fC z3pt?))OYp=(7tgnoX<-9syp);y^KS^Xt5+2Hhx`;=?^<#o5oB$ zb=^RDHKbWuAgp%x3o9pRckD=%sMJ0Nn)Oo6sIB!I3Tc?UKIKWvL2=!ZcC^CF@ zD^0X0snu@)y>H2l$yr#>Pt6ATc7pxoBK7{>w7i)NmKNdIKs7>qY0J=#Ad8<#@Hr5% zJBs#e^jz&aeI$(C$GY{|VPXRrZXZ49jZ~%DeN(dh9~bFaELl`*lS_G|6&j&Y`m<;S z%+n6b5&pmI(k(63H^QCjVX0mdqF?tAH1afB&p?fX-Jw_zhc(OB{W+4|)-sKN!6Bh# z=p3p;&S+n#?ye6jN^`K|eR(*FAz#wZ%In8paySSez50Z<9Tl{SiAIL%iKMCeg0dzm z>%Y914f`)q9rp`xr4yR-jSRq(sQrWNTbhv=Lt08j`RSs2CnN;IOnwDv2?RRO30(>T zg{N;c$@zGoEfh8R>&vcHKTwR1zSgJqm_rjtEJQI5%P+qHf*`p6&{BsJk4gd&rtZD9 z>jd>DF<-wL#6FNxiKL_B$UuOJ?CH^qfD|OxzO|!m)MS~`_FB~}#bS*$;bU|L@NI5+ z4q*SB{gb@j+^R`=4Uu{%QSm%|rvOX|a96#q6o=KaO5KXa@G@`Mw1hb%B3(xmY1kyU znP(1cdJHCRkN&>kFr_V<8-@tHE%KPn?n={m8*Q%CnJHR`^E{9}jXBu-pqxTMN&YJ2 zOBJl850!>d%JUYXAxS)5YS|E)%#eARqnI~k1B%KYn8n+XYQ=B`dxb$Xh!PmV%S8GJ zOr0y7vjvtHYgHE{0ICN|m>qfdEssXNwJXJ|yAZ9S?nZ*-re5MQ_R`3cj|eN0 zcyyMD>sLsGgP1}fv9uYoMW>|JND4R=$jK{7Tlt^^M%c|G{)HD2q*QIHr~or z>?pIHoUIO7bjcI5Ktxw6IsRF;%R`>^{}1`k52MQ&Sp$kbubDk!rvjdRnF?QQRuZp^ zX}$bacdy^+1$wb%MdCKGvvXYD6lE{B2&}m#W>XQu_644P*B)3jKms8`4D3K#=^&>h zHwle{yJz%03P$yOHbIFAkC5Ygqvc2o12b#1J+x#`OkAt2UcL7GNTsxIQ3hQlVMV-d zhzgQyK1n2>8GjCQbuD%R(TP*E1o1%;Jh}l%R|%rsT*a_lmMu|*i}Kgr_d55Dvaga2 zQM9Q?IobeR$2=yGSm@Om#wAngO@OT8TH7EA>wl~pN^o&d!8n9|rGZ{rHv|983WI=p zFalD<;kWVVmrojx>m$l<;u7zOfQW8}5dcilj@E6g?*}Vv+Qw~U&=_pJL5-AymXFOoOhqs#F*RV7ujfUG4e z|6r9NF9#BR7VjGa7QKx|r237kW+pHpr;tjo`%4Kkb?;h69LY>3jQ=Xp(wN#vjLqLz?gAnnc970O=o>HIi}S(evu=BpLN!r z>Fp}=ew7WM!xo>h9vD=$Tf{MwMZGofGh~S6F~yRaF8#j#h`5d+gCxct zPV8h>STx@yCnCGJW1)n(v8OnG7wGXqCTjy%^FarBr zC^)?av^#Llg+s}2GCPPg>!}y8Ah|1=VQqsX&l14@D=@5ge&hjD4}$@6Duo+ZN!yXe zD$|tmP`N3IJC0xaU_~;jY8l^+)13X(qKk9?oGA{zsHCe{Y$%eTMbWd`HdYDB$$dCW zm_I}SsE2%}hoh_R=Tm;6>5%45rnLvkx9b?Yd!BR%kSnCUJi0BHHHi%9Y5K!s523sh zb5vQ-WR{QR+`&YFE_E?#1B}!2zoDqK*yCaX0Gh+>Pk-}mF97Uv>Iz}GCdr+|2p94H ziXHw7(oDd=^%1?|6r?I!AVHql{1!}Wh&CNQNM*TvWvcQ|;JM4|%TE~e1^)L6v+mn0 zIJxv~%tB|mI1B$02S(nImHW}>mhPR_{n@4lG+(qAzW7E#FNCg1EPRTus+nM}La^yY zOS4QcO3`0WX3L*>`|kYf(!2&H9|=aH8kkwr4)BL{stUVJYgeqgx^t=R+{aczm}= ze_XBMM)Nj0s7M|Ag`NasSqg`wdn@)GXnDgSCsnb!!5tb#Kl{6><0NPID|1|R1`db7 z1TlNm54bO%&GYtXQiKH;ksK^UhG}-d5Gc$ro#ezt+gR~^)_B^b#!Re9Y;BY$Wal5t zRUB#))Poo^{qj|fQwf7Qy!~Rmqa}zlfOl4Gvmelvv{Z3L=2LHTD+5H1ysORk)boH( zM2mR$wFv*an>Uix8-LN4Quhtj)RFi_mUr!F(<_-oRaqT>B((v^mhlvg@+T90v@hU4 zC^_3zAKWPmR21SImdoRUOC{%2aY<{r3J2q)rjpj~%q%-6U~sQxEH?(H@?LF3=~q%l zIEK2Yi&{~rQH|i< zW7m;7@-nVVi#|Wz?`nEw0ZnQvOPhAK1@NitPz2)C+`I zCJe*{@y;kqvm8$*9O{i6{Hl4#L@wncG(2C_wo-nx`$h1Z$F*7ai{3dHG>5gXVz3^?t`ois}13fSp|p> z_OWWGe-F(Zl63_`EO;?TCdo`n71OPhKSwxTFXi&ExD=fS!_B5tqAuG{$-qIyCBEa3 z*nTA$5Ge}BdztDVo7`X9ch0EDPW0;!=4i>J);4iDq^MdG%X<3a26b6{CiqGka4e<; zn*Dul1!pbCj=lqTM(CUWSkg^to9!$pRF+qW|C?}e3DO`Z@i0z1T2e$ida=L7PH?pL(xbv_o^5gPB# zxHViUEAFBq$TyP`mW%JMIp16-z&L;D-c@37>tQlFJ{Pi0`(!{m*P)oBOFMq)Qr|LF zEofGCf(P7OtArfz^->fhF$h}&Fwc83bwm1UAv(0102^vfGvTxLAQJG|^*Z;()KhkS#?ihk2#z@<3Uf02CYQX9<%R^U7;ys4fL4NzOGj-*TfSZDv5`E-FL+}Ai? z>8l*XT~YE{NF)mz!S~&?w-?$73a7EbBF)|E;R|A{8aSF$eKW||7G~ilg8kUed+vN1 zcc}$s9I-_{?aXp$$_Vc^RV+z+02#yi|3 z3YX9CSM8}t>!d=9!~_&=oHgFZOKy#|znItf$hJ%Mu z^HG0B+6|PGvvWaTH4>KsAM-K!Qz3#aq0$R>woJ1|P)q|+r*Ci70W5#U z+gtHutAsDz`DQ|Kt$JbAyQ(`@@;;Edb|HH8A>~IG4$JG5D`^sUY@ZhsIykDn=KR9B zFNRz9k%s9Dx&kcsb%qvGzJ3-%-G3qq0V`S)N<8nwzE+KqEMSprZ=pM$3xmLwwN7L- zY4&i{$8Ik05G4q4gJkf4^@5~;K(VStQ^GV+lE?}^H&qXGjW?!WYwNY~@LDZu* z8AqIZ@M zKo_>dJ!9BV?`ag-bM!3>tEFbFc_GH=y=? z&G>ld2!r2r>JQa@1t?KFc@Y;j5^+m=f>X3i)^eukjRKB|8d=|3jtQv2j)0|*-SqL= zMf#<8x(ryFg}t#qH36WGyWhVOc!%HYrm%Qu*o29^4vhjItu$k>nnvVABm~fXUIlm5 z;;m~s)!PscOx8&4k#rd|(=-*6^>DI(V*BBg+VLt4VEpcMN@?Jq&z)d67LKLz_y>&P zu?GmxSN{PA6dlf_glg`iv|!#(KAXa}g3|^^T?x+{IFUP<5)zozxPoWvG*Fb0th zOt;oV=)g>t!$xsjJ0D^31e-$uzM#Eh#F&+Wj4)0{J!vR3A=j8o_MKxnCOAe0@_& zhyh+-?C<<>HL~t?#`Uf=W`zH12?*HCOnyp9hJNN`yD9sZEwJ-4EZvD7emUr<zBZnb4n{^y zpJZyCAy5`o)#wdc9N1M}P$VdAk0 z9~f#Z!!wdq$sLYB!SLlO43P79gevK;IU%1^*bWW@c8|YXzlZ%KhK7MYtXzW}eWmt| z6UK>M>QHrrm22kjhB-fe{u*IIL{troqJwEwfwpi4kHI7G`e>09o1i^qWaLjOs0As> zrh+jwu6#!30r1$#e77enk`lcs%G4f$!YRY%jY7ho=G>~E(vMV#B#ZMecuE7{X^Cdz zNhRCTcCMd%Boskvj`6-NTGdN?GAk`$!Rk?DaB0gHb|*2ou0G+I`&}9h?`wgz{Uxur zqnoOdq*YfB2MZqR$TJ$B&_%Y+r8F@sZFx!miKrK9Skyr{(+yo%P1lxH0zQGXcmg<{BQDq*yLNYt~IL(POq|Ng$}`o=d?Ywq5zO+ z2A~QC@AT=|J)PY)U)ycHz3^)cPGcF6`BdAKd;ZyF8NQcc9fjl)H`?VXIzJZGHTVE^JicKWk|PZCCndR+GdsJism0 z4ahm5YQz1C7sULVo!xvW`4j=qN59Q_Dn%n-~5!7cDI z5t$oZFcj3@>6Y3U{Y)9%Hs0`k2=VG-?xhrd(&@s+G(X437aWhk$+(@4)`I@F$LrMB=wD)C6Wg_?a=MzH^OpjDasQC0g8 z=6X-AhQ7o*y~g*x->9NG>J=c;O3BMbLs3Aru8maUf3@bzT(j;uYJqEij`0|**;iA{ zMxYvC-=7ow&0_;SsXae^>S9N2F|PW}i*0c9H3DDzS(ke-uNB_1t;wtfq*$!#qd!{H zq2nE8l0o*1mj4^=v1>%}^rTL=P46UxvmNY`(Rbx0{doe;x=AFyLwj8Y1tl?+6`l+) z4-r1C#JB+eKLEh?BZ%gUAlX?J@gP9og4+@EXqSDFC|2_|HJ@(R+Az2 zVkoVT#L3N2RQ2RW0eHs5UO}&&1iJTY1{}>R{3Rngx1UFUguqh6VBciZ zn=9jn3H=4pSR5c?fwGJ63t2{&c}|;+HEpYqf@414oIQ$WlSm8u0Ty)jY3f-AlCyAj z3gj#<-R{F+Df`Mh^hgY@w-wM11p3&goD#}K-nFz+j!lmO$Y>VG-O%RaSwAl^PxDN? zs6u(Y9S&1g_5R)|P+M-I_3}(~zC$*aSPcW4r()?Ohy=vChR@n*GJl)(vx$Veay;=P*@J%TDGL=PH zuY)Agxbl5_#|H)eh+_3esxz+wkI=^ThT`wMSaD=?^c=#|fq(PD)Y!_iG@BoZP`Cq9#PbklGe5z|`J zG}&7mb4r}jwC1;`dYemc-Q_lUr@#|)KM~pV8e{~=;T?@sdR%1WLL~RVOyNwS0(3dR=iH$Y)Zc#H9mljrB3`DYtKNMp5ehA{V;m?;|&a} zfXTf%^p&GzhAWxMfIE6$h1U59N-)OaJ?hM+gUg|2T*@lcIpqEMFofXAGNhfHI2?!z zut2v*8e#uYp+Uv%*M~pgPN|AebKU^ZSu_>jkMXM&E8&#UyXqrcMt>i2DPj4!iIZR( z`w6MyV||yVc;W)%ODFnY!Gxp6_xTfC;L$1c#BRb!2Rc)D2DyfUDfdapJE!&rDw;py z5fA{aP<Tjy@wd@TnUxWXQJbmFjrS-w9)_2F* zWJN*CI{~^J)9fmX$1AMjzx}PwRm`L1RcftItfn5CFCVXCxqil~(2~N92$@z>v&k|g zl`=n`dDD-iQiZPE-bx=K8WLOkO5<&K2!wf)tT6XR~T=#--!ZMWbQ^~&^s77KyWHyPE~ofMgOf(A?$zM%dF}`Mu2xYfjL)?Fr>bDO)^X1K zyvGrNVCxwEs%=q5*K9L?*#b2 z)*O2Y!tX@rn+zof25%+l$9`S#PoNzE%Xf45mC0LN1u7sbMp(xNv=qEgR745bP7ON& zpW*2BI$F3Y{R1xK_!1dEMr}iO^Gy;b^~5z^8Mv;w>wz!J0qC|y&}Z$pJfiz%iOO@% z9RR(wkjsjqx3d}I+t2}R&Ij_rL9&t+P#ut};%0i^crLZ8;AwwLFq%il6YK&yVeHVH z37Y~Im`!VTVl*vUrNgyix zY#W75HB3C}>ug)1x7VG8>|CI4jBYb_l0AV@(~eAO|M|c?0IYC5ukrA=YsdA+da!KU zbmqydZUeUux|QRxQ#~teXx$u~9f;q&h0jQ(M*U^%FF}$$(_dbORUynC1)0x>P7600&dZ4C^|Jz5nh7u-I zzURRKBjM^jEG`oya3#0tEX1DiW$|?)=Yz~eiR_D;3&XW*VNUoJJ;)T|5@jgCx8fP` zBxvRFa_hJ5MYd;^_}QL`xAXpufIb1QoXnv)y5p1_Vl!5CT)2FS(J594YpPkBALKns zh4jFg@gb$Aau7r?=zgH{_k^tUs~nosj46`atZ{cCh}KlbzYg*))AOpCtjYmzd>uEx zAz84U*n-3#ij}Aj>fcdzL;7Fqkx*$)IIx^~2f6@vkv6Uou(885m{G7H9ACSv6%*y+ zx%Sof^o~Kyy&F-pw=*=9;Jb6`D=p$mG5?WacqscuVn;Y zA_p)V%qo5(^*y0)pr)9(6NFvJ9~y^_%&qgJXyCy;2CBj}0`)MMsoT)U;KR(aLE2UC zLODbDYBU4{U5-@P5v|Kw_9+Bg*!N2zRnSJ&2xe%DoMILTD#OFO^|thUux6!Fo$Ye( zSG}ZSJG+`7%We}pc{PBWt8duR%eecFfPUKk9MstR9{2b(A_={5#)F-Ag2~{UY=60N zGg9W7r?DAYhq|G2sb1>DtW-equdb%C)6PH$9IDk@x!Ft;AHPL7n7E!7?)ogd7B9Wk zy|#_EzhRf{9CwQ1qu_S}LQHiCPhtIFOA5iB)7_9bM>m<<`>A4yfY4c(@QAvx#? zwtM^2sT`*EJa6kNab`Gj@JV$pxFklECf|Y!T}WsFWc0PemGqwn`pId9)H_g2{LKbP zS^t`*;=_kGhX=>IRRn|Qd1Pa|RkcGnHy_<4`fh@h3X`&APigO-v+`?>OI{}RSarR#ig5p7@HXwalU08~Qc zI2a~lug6pvHbNj^eC;A0srbgHx5hgJDF9hYUV6o9X$3W-eMT*W=~L~1@^WnKm(moz zR#QlEO0Xs^y2?fRu9eXKKcJcZJ|F>h*MQRU*tdMD>t^+g$YYA=Dl?0QYS;pL9$ z0C(Xep~|pLa=y!W>9@V?HqOsu(LcPU#~WEFE5LjmXfxyu(SBCoucj~iSk{i?eqS8* znqp?>s@g*B(RS9ck%%eBM2eFyQ3#reTT8}VB@)fFV*aq~|E~xiF_Mb(N4Nk*MB2iL zQbfk$K-5kwOR0)3?&%kKvm-;rv%~KFhIpaB=m{|!qqye#4Uge6JJ^lrB>}wRhcd`< zX!@L}o?h&znR?1ItM>ly2*cBJ-c=wb)n(hU9#>l|9g@V0&}Bx@nZXeD*{vyDF!uNe zH5=C79zf~`=6i=CZAQ>0Mu9JRe6Jy(bDpmY_vP`lqvm4=eYURe;NMjRpMNs!RUrH$ zUvl+yFx-qI`Wwq8PwJU{g9A#>sbe(w-0ed=-gJo>D|$KahSQYzsfI%=%MJa{qG4+= zH!XlORE&Z@e~-PAf&aDxVk1ze%iwcM15bQ@ECGGXB}&d;d!r8CxHWmP8C#l)nE zIzcL}Z7}2IiXQnu#zwr9woW@lYcEPv0DEZ^VYB&a+FM@v&k5=bSK&gN`mt)6i8gm+ z@Bh8JpfgTwwmsN175Iwt&c?oJ?Sq}j6pyzWSw$+%;j)Me7(MD_w;Sos8@pU!ebE}I zxZxJ6K_Rxrn57Fg;`YO?Ojr4MUs`@rny-aw&WzB$G1RX4bF&=$jl-;_CF>^G>StbV zjCIn6h~;jmfP7O3$&On8T_3tFY3=RxuzG2vsm$t4R<>dPz40)-o?XG|c+Z;kHd+50 zbPdDOcsr8`$z9h$Z-W9OvV%8#jptDmf_muW|2l_S11KCVm){q~b9@jz;IH9+mZ2_L zI3*S%bUsl;|CJ_Fllic!K>gs6?UPqM6X>}Axl%a_?XiS^RlBz6=GgC4q|t1VmAwkNNk*?YDnFV*y{z0 z^gadC#TgEy6&t%_-grcm@ZMLp8oogb&34)kcGzMo4x{^ z6l`Pc*MbXcACaOsvu~nau5vE4m&`E*;+4Fo8*(O(UT}TL@$<> z)I4-_rRUlnLwJu%B@rbr5<~C8I98U3*u@}I2>b#cjd=G>F|`U8^2e9YEAamR_@Pjn zvnTxa_>;c-;NNAJR5jM(h+}0=4{H+bQ(i62;R94?r6@opW?kAm14}P4NFO7D)$@f& zo5Y)wNuQ_?smPD%BB`$iV`mQ#XcL8t{ z(rM(P6qBJN%DW6G_zO`huB4y)*Wjla$l(~1LJBA>fojNqCu^LU%N&D5#nM9CIjPzX zR>inmz+e@Sn44(76`2g<*|}yp%lhYOwa7k+!eFRC<%fnzF1{vqPcu!`{gxVhx^;N~ zC3bY&6hSyE^$9undNpF+30?vIkd++MGvp+w4)#gCkH<$ukYjJy5z)6RGFxAm73D`J zz$;GQQ}lp(GKx=HuR2~JBI-eI&q-trCk8Nxo)Wa#X%t;*;WAn(%;o|;;Fh9E>j2+7 z)5{0IFfpA$T3+rPXxf5jD<)z!%br(A`KKzZ5?TZ>LLB6&?5(Yyk=Qqy)L2YM4)(mP3L1${Bys76+6&t zD--)ep9vn7*g?gp(Tz%+Cd@lBgFb0kU{ETL#NgbMAlgqR={G;O=9CR}yLHJD9`^7< zIvdD#0+WQ0>qHJ@biNaIsBGw~maGt6BVYC9uUSqd18Rp13((m)>gRPqk3>(F5ei=H z^c7a{xC6mn4Q(f5ioh>MY4_s^@dg670+?;D-Jd3Ntyh{FDs?sZ9P-f_fm9+N z&|r(c%kZQQy0HfQq72k(JB?Pjo+#iofoqpIwfCH%x>|7psvJpdcfun4T)UOiTE$G9 zP2n9nrY`lWKRADYi|QT{DdIW{L#nIEcL4KTzSGVZQwVSy)Rx@siiZ=oSAKF$8}K<9 z!PhC&vJg)&!ub3V(!lfV%S^WlN$KkC>YtbQgp&rQG(p)D0q{`cQHoR%@JnqFus~fC z-B?iQ2ReJP9Yy9#W%N=Z$J7&ll9mdU(>-5gr_ue|=8dsf)J{{goBE zK(=7zLcj&NSv6%jCyupKco%x=E&QRTsFPSjh>xi8P1q%cSPi%hR6Rj3!apUiE|=~C zcW)Q3SoYOO&itr$V|)4*PL-k}(EJ?2x-+UjqX9|>O5mw|G#ysN#@M%kOXC1T%CilV zQ}R|4jJ~b64s9r8H=~8&HUvqZF8m8}NL*96zJ3AMhK}4zd~hz_APbxQ;KdM}r&020 zueu;bm=F$A#RA8MGKsOdmWW?YwC?%u>s)A}f11x_771$Ks_pw>deQVA9XLckXEFb) z!T+Y((N$VhPKgfE^PwkZ384q{Ws@!~?H52cv$b{n{-9FCY88D*n5~H$nN4`|E!1{N zd8FGe{OoM;(`ozJ>q`#(A@@ckFPfYNK*v9Z_IfkU6S9GWib9QYot0f@7wUftRH_zu zke393{x8O~wuWtvU8q?}*E}UL3ZWe;VuvdFjNsTl{BbH>c{dwRK)VlNiT1scQV~ek1Nk)dr0Dd-9W$RxegjJF&jDTc4@6` z#ZDHoPS7bGc3??U06n3I8DC98=#bw_RA)u>mGzo0=`5s~V&0Xd^YZ=fF-_9U$5G@9 zzQYJxpL#?%Yy;gBRFg=IN$_*Yfq3{H3+Y6Fb}TrwH8W6`7+Kv&;MRa7syo&k0coFm zUC)JDvv2DeP&^KC325_1cY%`Te6kxpEJcp%mHPFwy8jJtpkh<*p#*78w4 z6``^^od-533}=QdGTyyhOjq!L#*(GGI%ds<%Aq@lG#m3IW{Ec~Haz4rG&Z6zM$i)i z^DLaj>cZ;cd4Nt(ggPO=(rVC@M^$28gj0wIOBMdj6YDK7`jGix|B)B7Dur;lL5sOAE&yt`nHqX9a@^1Xa} z9|(D_N7xrT4SmhxKy{{;4bjF&5U|3i@DQ|zXJfB@N??^qFobh$iO*F50KQS=^rT5v zd{0TpP}?CWNi?iSUu8sKbr&t_J8@-4U^jsj4LDe?veR0nP670cXuptiP0K0Wc(@F# zXIW$oLJ_%wRzEXa%mZI^C6#wZ8FL7au)mxfSXVM>!E)_+Q4E^satJC56Az?kU5#FC zQX$gQS4`~4O{TIV3#I)Gk|31m&mOyVsd$(wmw^{}lPo4kO>s4)%9r$o6F31=C0C|- zXX^p&B^{NBh<3`7ju{dTR|x0#S3J`MSuw!frwno)S!2N5=X7W&zo*j8i}_BMN7lR# z;e(^9VP+NCYmx6!QWeT#zOx%7I@I@4Us{~OE+1y|NYwco0@|cH^HTbDD*;R zJ@daylCSCS+^c--hzB2#GT32bQq6nmXy6SbWhD{fGU8l5{h14)oSH|_&-*n>q87*P zx;L4<3Vg>%XFc|(?=tP%JvZ={qFIhePCv%ggJD4xQ(uv&_0|3i(hY2IyLLSD%1o@& z`C1bbZ2gYp)hey{P`%sf;%Dy;-@oVu$_`*!srpWAT{3h;DRAkK*(@3!N$}=djc38o zoI>EE3B@ggDSaKW(^E~;38)TO4{#9=U*H{OG7sK*x@O0`WO^90x@lg_G5SEF)#^|T z8f#_u@LdDW@w$d;E{HH7F?qIi5Fd^-Fz6U#RKR0Uq0emEe|>MlFzRJ~Ulx@^nE7HH z^*eu%4pi>TawbsUI7K!CT~VcZP~|(2gT;A*ROX|1V;tQaXmk~Q8BoBNJluWvq+{iQ zKMYV4D4}Wzx>$xoCg`-axZn24d`G7TTLv$CODVFxPz#+W%&J z=_CHfrl#NN_e)GF-UXTg{-aY0DNMivv1N!uDGGXEZM=aXKg$nG&%JOCO?7a!-4h}Y z2b)`LAA+fiF(Qf&(Zkw%7HaNRkUA7#?2-&=3WZWy52tjcbJkSzjT>V(9TDPvhD|JH z?D`-eA%NN;xS>@kma#2nO67KP^)ov-)v^PN72eLYdnSGww6g<)&($S3xsq7lwR#v| z+8P6qMxe1nv1-~f``ZFN`^y_6!aGoe&b_Y}%nWZ=1$P_shp+J^j%n7n+o`NR4subZ z6s#LqZZ_Y-G!3|EVyKKPUQUnox#3LwMfz*I*%neC zfHOb(YyN$nc%v?yokcujD2A{=2YobD7-|n3OkvBm8vt<{@1$41uV3=4SK!6@SIgTxb5|7f)^#!uGrjiHfO6(%^-JO-0;Evp&NoP1u&m2#0*pAEw zL~mQDj<)bn2W-IFqEB*X!6ES-GHkeH`R0R&ey}WyR(%16mAzGxY5ls1PIgbj)myQV z07i3ApAd0%&LdvYTAmI_^v+T-^kXBmmU4B13+J-O$Mj%Yhs!oen7?0As{lX)f_ zu{zxd#c$phh_II{Msg(ex zHY>t;zCLRDxrK-`?}5o^aCf!e@VfV0sc5e$X6yesG`aS_oWb9ruWn1{0_I~w1Sto& zU!gEIdayE9T0Q**BcBut`*XyEaxBpEd7HZq$I!cYfr$i&A)?mgDWC2rXAvH7Qy~e{ zQ|o!t4tW^daYaM_MG-} zSiT)5sGufpo5&o27qgLYXs7)~5H_GaEGuy-)qQ#47_VT}d^pM~sZZp-VjiPG^r?Wr zx7p@@BT8n_6?-w+6JvFW*tXSW zqt!~oe+^D;A;H`}#2cpU@ZiyrmXQt|Y7c-8jRLO2g(OXa{l?ly6KR!LR+_-F z=PJu{nQ&$^4OU^FS#;bKF;h;rWm%!(XhFp9Z7kS$Oi-A*6*W&7|rad+9EX}Q= zP!9ps8430uXPnX)tAydKCGEH*L7_S6EGjmiK5#BMHoR`q)zscWVOxe${BXj_s9tc* znyg(Kr${`R3bN`f2)W>q7y*afz1YNPSev~2+V{2gZBxA7b|n#Kejk}GyZj)rV(Ct% z=AHacu{jTBP}RV+dRBswt9MNG<%%xv%!X8>K2-6DHBm;}Zw34#eNjhqh}?lk8nOs3 zXjq9zhd)oCSM!-T11JNM&zQlgoNLlY-Am2iXa(ld@ zArM3<&-h2wLnXmoTw8iQ#d8fJFkxMeou(8nz{3xVG{p3l9~QdMb3`Fahu!M1Fio z2P0rZO4U=MxdMOQ7(ZP)ZWh+qq4SFTJ?BGeU^18)2!Z$7UkYjXL3e?Z}Z(gNPbuoW2N0}Wf z44*jk6Po)w?5j&yP#B4TE`g#O7HhoR&Wy~KQ-y~oZ6wI);W_#H{Kb)Ms^9~oJH&BP z_$K(octRgx|CW{2lhu^UsX#{n3!g!s#6A3ez_E(-9PV7x*XOIZE$>qYAOHNaABSjQ zk$HbEG$hNqnR6i?5A1ct2<=F-sw7RM{LuB;6cDYH3_z#h9U>sq>jfC8u#u9iJl9zT zgh$f-e~@I%SV-~mt8Y#c-Z;ZR@9x4p+!NNu`MLR513mFE)IAw9eW`RM^M6D9$d#C8 zLxe-Leuib|N&ywW%wifE;@z)^{pb1Ck1j=Yz(aE>X$Ei?BmpP?{UNWGklF~-I{b_m zxwppprc1uWxcOKGcOY1K(LZl~)67|A=Vg`qQ;h`D$ux(z4u=&7xNY_X&Lr=IeT~=5 zlBvQuY$XDnI0L2u88zM?%&FXc4};1o!$AP!Q~b*BA9oNS*7QEmok^Ajirck*riFXa zXsvIL%(4vg6ieTDZ#Fm6>gc^gj(Gzx zcIIjh$flJm;GX|e9FT27@Xk=}2VO}w3lbg7T?UehCz5`ltz5sTsXCcu-5F7&;Rrj{ zD58*D*6kgyUThAzP$2UIK!;UQL+@3)RD(C%eZ1$o(-GA2Kt3|v59Y%1)P(q@Q49pI zB)Wn=6RifCmy?>*Q1i>**kjpfKW-T-sYF`Q*76~Nu`O04lUUA-siyRymnb3<5Wn%u z!snN&_auW0W&wo7E72@(CiH~l1W0zxk<6iZ8@-Kt$-tEXxW$giXrKeZ3}HEImL^U< z3Wct*84=1wMFa;sfG6|ZNUy4d^oyDaLiJht@(i`KI7H?5=|DcI7g_5cCaR`*DNO?D zT5RNYpw4g?i&xPrg6hszBkbOg^H{?);5WMd_=K%JPk#1mT~A?CS^;1!>V5L6lN^o9 zOISA>o6mrJQZEH+R+Xo0RDPMZ}jGkKyv`+fv(9X(j6-L4GBJf0AN#;Yx ztXctl(du>2Fq?3^qYI>rGkKquEHYm7F4!{PJs!WTiV)`}5DSGN4DbE|nh3PFBj#() zo_xzUKgora26A!O?W1ZYn%l4vUbM*^@In;A`=~niL>owcE+;ULS!s za~_H1o1I$MPdNBn^|0X`Xo!7!hkyh+-68Sazg^oCUq{XGCepe`Enj!^nDo z?P#geRt$B-8I`xhYkQvTBLU?U%rTAj!fVHk-sGLE=K55I7n=dBblhn_ab ze)$%3OwTb1xqhcHDFQvGM>eEJN2HohFLaZ0e-2)%{2Xz!q-TC?maEJf+J+}_$8LHM z^R`X0kdJQe|G0l#%{)V#A9gR<*G!~y_CCvKR0Gp~BaVr>*5H7#$e7-cE|+&REiKgr zwANOVNfOQHC0oU?J88OA6wEwdj8-`uNqdGVJmNOg5aNh6&D}ONm|-`&Gw$zRYC#~f zE4KSmeA-A^pu_69K9D6N_NBrm=5Bel6Lww+>|@2Z#_e!fK>iq9$%b}rDMYOSH>kI? z3gSb|Fs?23Im80BcCMLL{0DjF)%d=R6{gLKD5;%z-3jD95N%A2B&l0j*ZBG@2N#|p zP;e#8N^OYTKQ|CGXX*a;1@83-b-Bq*rmY=-ZwGPIqH+!v@#j60sl^@c=b8};?LE=N zyU&H+)FB@!w)7D~*$P_zB7t|!DMSY4mLd)__DG#x#lLdL(30wfe*(uM9owcnl0pY; zIncad6u4(2zhL?;ri9poC>PS)jT$+Mb$O+_Vp_-7sr9AvF@jo<2YF!pc>sVOP=tFS zv9=18iYa1&vN+09@hVKoMiX3>!?|V6^Xz{dHSsI>`&$5-S8?QOTxSmP8sQZB=8F0v zN!pPOp!q7OQeltA>QL@ej`nh$1dDGi{`6J1F;C%zH*|orXOv!PCUdhWai!9Kx(1%}okh;&$eJlSXuKCSxB;2}xlxFylv! zG1Hs31T0Morlt}LX60&4b)oFJR&H$KnrZ&g(S3PARd@A2ydEyTpJ`_28Vt*rzOc%& zvl!X=bu62nl0}v}(3GiO9Cp&xQ{|J-lWz0?A}orkWTg~4;ME#i@o0ZOLHxt?{FF;Z zuF9AE3WLX5p*bnZ^PWiM^Y7{{?jN=#=bXYfIjVrK2m`0!yYXL#%3GNR`hNB(MMApL z*rr;I$3C|(W_&h=%kU?cj~AQC-Ma4sA&+u7p{JM$oj@-0#I2|x#Pmg9bJFu`^$qt} zd3leVvIW&ohhx@8bTqCW5EcwxNz170VI@e(j_2ZSYwuA=Ng%$9ZBo5KRjhtg0sYzQ zo$z!9688nCJ}a4hz)EHL?+k1cL!fM^?3Vq_D!b1eJ%Uf|Crn¥34&r@(1!xcH%= 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 FGt1V&==1;p literal 0 HcmV?d00001 diff --git a/MikroMaster/20260503/20260503192001-Config.rsc b/MikroMaster/20260503/20260503192001-Config.rsc new file mode 100644 index 0000000..78ad135 --- /dev/null +++ b/MikroMaster/20260503/20260503192001-Config.rsc @@ -0,0 +1,3997 @@ +# 2026-05-03 19:20: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="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\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 (!(((\$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 \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/368/b69ddb1c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 09:35:02 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global ExitError;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$0 (\"\\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$0 (\"Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n \$LogPrint debug \$0 (\"\\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n# check and download required certificate\r\ + \n# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# download and import certificate\r\ + \n# Usage: \$CertificateDownload \"Common Name\"\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonN\ + ame '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# name a certificate by its common-name\r\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {:set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :global LogPrint;\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint info \$0 (\"Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Creating disk of type tmpfs failed: \" .\ + \_\$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint debug \$0 (\"... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Making directory '\" . \$Path . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={:set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]};\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={:set Path [ :pick \$Path 1 [ :len\ + \_\$Path ] ]};\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={:set Path [ :\ + pick \$Path 0 ([ :len \$Path ] - 1) ]};\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint error \$0 (\"No valid RouterOS version: \" . \$Required);\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"No symbol available for name '\" . \$Name \ + . \"'!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\r\ + \n \r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\r\ + \n \r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Setup Global Environment for scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +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 dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +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/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-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/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-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 \"GTS-Root-R1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ + );\r\ + \n:set CertName \"ISRG-Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ + );\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\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" +/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: 5200/20-eCee/ac/P(21dBm), 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: 5200/20-eCee/ac/P(21dBm), 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,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" \ + disabled=yes 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 acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=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="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Windows Update script" disabled=yes interval=2d5m name=\ + WU-script-run-schedule on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" disabled=yes interval=1d name="DNS Cache Flush" \ + on-event=DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" disabled=yes name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Scheduler for Amster-Backup-UpdateEmail" disabled=yes interval=\ + 1w name=Amster-Backup-UpdateEmail on-event=\ + "/system/script { run Amster-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-02-13 start-time=03:41:27 +/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/20260503/20260503192001-Diff-Config.rsc b/MikroMaster/history/20260503/20260503192001-Diff-Config.rsc new file mode 100644 index 0000000..4007232 --- /dev/null +++ b/MikroMaster/history/20260503/20260503192001-Diff-Config.rsc @@ -0,0 +1,143 @@ +3644c3644 +< add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +--- +> add address=10.30.30.33 comment=NUC list=NoWG +3657,3658d3656 +< add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ +< NoVdsina +3727,3729d3724 +< 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 +3746,3750c3741,3763 +< disabled=yes 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 +--- +> 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=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 +> 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 +3760,3774c3773,3777 +< 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=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ +> 10.30.30.0/24 to-ports=53 +> 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 +3777a3781,3784 +> add action=masquerade chain=srcnat out-interface-list=WAN +> 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 +3782,3783c3789,3859 +< 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 -- 2.52.0