From bf587de251cee7b66c5659fa1d76c0233b274be0 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 14:40:27 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 14:40:27. --- .../20260505/20260505144002-Binary.backup | Bin 0 -> 271802 bytes .../20260505/20260505144002-Config.rsc | 4514 +++++++++++++++++ .../20260505/20260505144002-Diff-Config.rsc | 109 + 3 files changed, 4623 insertions(+) create mode 100644 MikroMaster/20260505/20260505144002-Binary.backup create mode 100644 MikroMaster/20260505/20260505144002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505144002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505144002-Binary.backup b/MikroMaster/20260505/20260505144002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..b65c07b62d2e13124804143cbb7f7244132e0311 GIT binary patch literal 271802 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

|3_$Ci_%Qkt1BSs$4Bj^1{ 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 _@QrJ!hBXA~$Mny9w zj6*%Q)s)8yEAakeTh3f}z7V8+w=dGcTI&a^)s(q<>AF)|W$(ls?{AkwZ+cVn_*3o7 zBNK!(!0O*IGF+RAXm*qMr@rhKOrU5t+HRjCeR}-a;)XZlI<&E4Ka*(|AcP!r|H&|? zMT)A;c2tT(j#4R?G3=}1k_V#_B5@4E&Hc$XLFvG6>BJrx|C2vJSjdtYiwv?e6uRvo zMY?cSzmP_E#=LHU+98K$(T*;iPT7VRYK1mNW+qMR?#ssE-#f$PyFWp+N^`PAA$QH= z)W~W>6St&7bc0Xbf7{v`5|dzK}yXJQX)@jV!xTXUK1vxigXjgBLSs(=pq81tW$(fRt|URZI< zxbBuBwTU_uIo))+3?U~Am;D01&ew`%8v#R}Auf*^=~1G2GCZEEd{^Z&aldMqBOY-b zZE3B=_Yr`Bt5s@f>_JrwaKJDN2+nvs&$TJVrb*G7g53!e(FkyeU*e>;8sH42t`l7& zBt-wJ@FJPWZUT>RR=Wr8r6k%tuvAN9L8jkzU25wl!F3D@*cYxbkb0=lv4@7db83Mt zVZDyN$?3i@|0bp%Dd<+|i3BKz?{!+Rj2Z419*R%u2Hh#dmUx3r_{(jE4835}gOwt< zNTWeJ*7Nb}+9%`NjalWNNUai+nXXV#w-&m7%!?E-7gby1XLu*Ee4k4vu=7qzjp_K| zX-Dzoi6u7A(LBoArwwS3-pLXoLbGzuy6Tf=d8aiim*#cpIO zri{YGQ%OBm&m@c2bN{hn>v@fem4oP$u={T_fP$r%{MTF)0@}Fji4}l5wrt7oSOcY* zIB}$$`a&GD68b{DW`k+@UZ%>D%QQQL|D3CeY&-Vq-;zxgOsa#64>&jwny+~`dFnyC zB$n$f*U>}x=|o^}$!>a&e^;SjY06MAgr-qrS)F{EvUb;ZjttU&%njdqhN8t5I8RYu z7F)GYGgmwxy8EoJ@Qxhmul-qr>g4-+vSyTEi|k<&Fpb)|~v@pbe*k8GRBn6F3WTvv%BDW}*od2QHVoq*P5llWGF(5GC^QOR=I{ke=_@gCZ91|8xs zPIoUk!41QHc`J(^vX`ZO(U+@q-jka|2z%~)qem51`-Xm9a}@{#H7|26!MuxCm6Mjh zo$Ke1h(a-on+9Qvm8eN4G^I!?MBB~hVP;??clmcoh-Rf2rPsQn;-d)ftRF!W2iS0? z8-xV5j3YC(qbFX?R)0E~`S~owrvjim7&pP6nXXtq&&>s2C$nP}64sV;I|(}svSY2S zI0T(9Pk=d29{LcQ#C{DnLtKDMkgtJjpOsv+M-yY=LEnMbi5>>>BiIeN>OMqClt4UK zCyG04^<{mw9!`Zj;@s+Sftk$CW0Pny-M{f8h+__s$e0}aQ4*|d({;a}f#s*Sy=CH} zNLJge&Sow@5Oned?;G07IeN2CZPS>vTt<9FXsW<=^I?)LXCCL~h$fQmIoR_xs|z53xjYMHF7tjTdxEV{4XMf3>8fQ4-V;9KZ#eK{LWyt_d3FpT14#?v==F7 z1eF|E-kvG89*RwDwqfjS6Fd zd}Jkswtc`~D|!;#A3xR=GW2MW1LH8+k&TL|n`ChgTu`)Bl0Z$5-`?*s{UOMgPi?^X zaQ^c8ziVlre~-`rEZq=k_xs3@YD7TMxOELK?wr_qO%)AktzD^D+L4D$ zV)Gin5IU6%kztLjYR8@VvfXWiMVFH&pud??LQY_ACg-_pMc*Qrc)pw@nA+24BE%)@ zmgg>d0}t-kYpwkW8&~w{*y^8paO2wK=&_5;3s+y48B-|jXO4A*lewuOl>05qsSe$Phx=wN zH!50Uz(}Ot5@BWpwA?KaSPAs@uGXD3cG9N(9nuc-qO~)m3DKd_6Epnra7x;!oQ;S~ zSK+r2W(<#cR^1~gyvvZlZGYWTn-`s;lB@EC5u<;N4rSO)jkM@_t=EOKf_9c&FA4-C zW`^kfY`s&Et^B?q>CZzT46s|UwLRh^ZrbC2GLFr~L(=O}_wuG+4K9X6P4dtOzET{ODi#p(#9+H)4e$?aZzf}# zP#tnlVzF~g4jo^lKr>e+gg@dFdh~pjkk3ELQ_mlSr%0voYJ}XDzCou?O)K>jP)HHb zw9=;AwX)&?Y0*VemVT1nLhGClSCLgjs+5jJ?Cqe5G)(lix3&XzSP~!iv548k3%NM! zx!Q}_ML3(&$Wa2ecolC%U7~(FSSZ7$7{i`N!i;TBf%Cz$@*#0kNvltWRjmuNi}**? zK!!dk&Ztao2E@y3`X~GTHaA>aGQ-WT4C5&{huN@&h*UO^PdREP25bZC9BC?!(=;7> zSz0GGR0gUyvPMX+Ii(4}XR2+Gd2ah3-G0*|Ro7X0neSPrUPtirkvxPyCAGK{RCOLx zIU_7VO9a$f03{E99pQC zbSa^KuPOjXp95BMQPiW6N&FM8S@I}x3a1hyK0FDVUJacXUbnYFiY61at?ZlZHi@CS zq8a#8AOl+S*;FtzTK}Civ-EUu@GChlfQkZ%nL`gRhGzI~vQ=%`v zBR&AVctPL+vbA>>RDRdP+mO5Tu6G3&n;~!~;Bf`SikU={awQ zhRanNPIWwCq?kl9>{JKQ-4hp7LWgfPgkR3ddCd%LSEP}bKd60OeQKCPHf$1V0FY=&Ioj+0bDpn)W zI4Mygh*|Dj<~ersw3^MEaL!I~LnG9qb}!ZveCpw0BKqQrf&QODmJ^N9lnlE?|I z&RFE{fC^NB6Y^^cujK^0$+(o{h6Jdq0IYvSDwo8arGm`G`>EUFK`wq#K?{*1QH;ou zD}iRWxPU)hmrvU>Njw5BtdPr*yd6;J`%hlYBFsNI5R_ekGSuq)kHH37A{R5(&+yIv zhG+_EO*9)c^n-t?LjDW3W2dM)c9E}GYQJq~ zn{2A45%xn4QVnA8T2e_I7`i!#bSwGX{?ujgibR%!mTa_y6l=Se`3RUHpzandFN2{v zDXZ;a7qQyE%c@vFmIA;&a&|(|&W6(~0%1L*C=tLU$=n}p{wqJLgMG-3)Y#n)^!lp@ zgXt4$;cRi$dy8_6XU#06PEUdl2=|J9T5`Q}*luj5R*=t`5x1&~XsKxv)9@-d6l9{e zm3+II@(B4s>Csaa8N1ix*w3@Q0dr)neK)t?$PCWY_Yix)%OYfIEqeqsI4z^Wb_OSO zE9C{B4!J`uSLvGu!>J!CBc>`}A^L8h@V&uy#j^d{7mY<}H&q+{e{hY>I;9&|`n9%! zFFi@hDIq?-I)cbo%zZo&|8qy&F{|#%Z>$!;atdkbKyFe6BGVW~*xQdxY_3xZ1IPa0 zT>q<|7MncQdu5Ki*jy8-{7N@%)~mZlM9k%pD$|G`Ony!X&~zE6);)0`xTgN`@atm@ zaUx@BBYlu1z@Ien38&U@+@o2zux zeEj0f?~+XRPMPMvwC$AIWfU0?nhJ?nDZXWpLpT4GP!3L9(-jK~4yL4|?jfr)Qce7D zY-8=-O2ib)=B=e=G7rSC8u)_-i6hPy9{PN}|cEI3_`H&1e{>NT&Tvo@YSJV7=>c zsS1qa0zcsu$EB6_;qaAV&ByMEDR5OqN1(1!#ARkl=cHw^Te?L*CgO^mhl^RaJaJe0 z@hN*YNsG=4h*y_%xEg6J&+h56nIkGX5AxFs6#m1_qmNR*v8irN zXC$rGHdgF)agMPCRA#%VsUBKd3vUKpQ~QP5lJzgS>J&h_L=AUWs=ek|EL=T4^xY3> zpUkY-_DXf(asCjr9`3^U@`}L!q?8R6m58K1f$DsAsD)zWhCXIQ1}sM$xW8H)p*QVn zQWoaPYImQM%w9RKK7c!{bpl^76~+5yW$|-G+$x~h!r+e(S`Tq%l|;x%IFI+GZ=_qQeL^C><@VLL74PWv$1w9WmW)?pEs ztd>!E;ZGlImoSCmJRG@U<{~d!odS+1)%>MhLeT^9Txu;lr6JjLU3IrU&klkKz`B>n zxw52Spue+ikb6YNk+!qDWXtq-gLixnD6yCXDdFzR8Q6Ae>fZ2pS0j}-v{JLx{+b;W zgdJ7A=N9EALz=EoB+I7fU$Jkbu;xQygPhWaYCL(WZsndgp16 zfuhjA&eXC2UAXMNPybuH*DGiC7?Pgo)1f*ScFj!Zw(mM@RZ&p_K3sD);>rICV|Wpu zgB2mW?S-_olm+?^xCD2Kv=4DiY9kOwQ!`k#KIs5{J;b7Y=gvgtb6E$8E~8P>HWO~V zEWJrP$+lA$q&bZv((ccUbtygOX z9b{su$C#IrvSk1s!>w^+8faNTZV;#TEE6G32()^dK9;&fd4|L1r8)DQFfemRdR@_yhdpm!78aJc^3L1)^|j-+hYWuOyk z*CRF~3-jS(*kB;=&I!!c$@3LO#uPWyOIfLkyc<;KVe*+ie+S+&uws;`Bpl!v%hTFih-v_`Nbs~4yr`!=YJ{Yn zAK2whH{~C< zVSwGP4{Zi+-PA}Un`Z<|@L}X6ttjFP669J)nvuk8HG9~Lk)+ezF*_4N@k)wo{2I!E zHUdcaFz!nlxbNIWDGi8`Yl9$YWc$RzW}sBKFt9rN*2p&{FiDUN`#T%L7e)RqA`$Hn zdXq7_6hl5Y(-+ky4v(oJ>SsdJ!l|fjMfivu6m5wUN}a}pTFv_W@~hm(3xA^Dheo8^ zc80~4fO3i#10Oo}B#u{`4I+DIfgWQ%vYiOtt~j!bayCx$Gf-slD=M#>tDfYq5oflF zAzDc*cJ6yO4`e(9v=_>(x$bXj{R46>%|&!}UV_~ua3G=Z;7?LaK2pg5Aoem40kPpT z9Z0GV;Hig!5C62$d@v-$`4sMmPM@rp;O zpHfe;Nu=(&$*zPi4+ej1I16~QT6iuhY@o{^YQE#tGW*w`Qj=0gUNP$65hy`6IEPoKGjZvFLNcW51vQEg|Vc?P03iurAu zgKnpLU3s?vQlAhM02fKB3B2?YQ;%e-`bfSL;)Krh1PvK>wUq>7zH*wrp({}OdZFRz ztSE^b01fy^&S&B;7aF?-c!qCN++rH)1Kp)q#OxU7s%>GbVS7GFsfg(2P`$kKaEKl) zSo%*c;=>PU_S#P*D3mWP?LnggH?b+>dr<9q?lXa)Lz{MCz_JD8RI8KW^6OA^1yP{E zG8LztIu)W~cCho5h=hm~>$y(Q=M#}PAq`h%ix6+TV~kgT$4ul77kOy9(7=6U&B98-p0x85f1;`oW>P%eYx&r@b9$26HC6%Y0-+jB`aX}S6FUg|T-DQh$lvUYrM zg;3*6Lpg6i5DLmF3dQzkYH^VkY8caq3rat`EazS22Uu-lh?(O<$7zjr4_OPxZRt%5L>VbT&s*&4^T$)B|7&;CvR=$x-Vvr$q|f&32{pNj+f6 zbGW_rW_&r8|D?xIDyO~Y2|>O2o&#mDMfEYg9RV?r37b#iD>&k&hf$d)OOAj(UA z2$$LcZhE&s+B<}>Cbo~9pqche0~EAHrEI^y6@H4pgr8_F6H|>?6Tsrz-C{RYs_A#c z7glS}qFy69t<9!jIke{FY1bpSgTvGQI4P2n$}3|e$2ATK;67a0_~PVIoitymN$)-V z!foVdi-lc7QL*-ilq{=AfCg_d0REvp>q_k6(-Vg&k7J?d`{gNdj&G=NFV<)*SM#pF zi-RG%?hx+1Jx^qrA?XYzDTOHAqJ)*H#zelgH*iz3*{yP-#>r2(|Jf(##5BHxF}iAq zLy!uc;{2I2XH=pE4e*Le(m54`PMCWfE#9Kh?ABaqxIJzdzaS!5E)~H$$B~{%11IM> zr?e}E?bZT^5$w^uUT|{4QW9a~ua+)JEVsIr_Uh5WN4)E8r{tbC!5S^KiHQA0_dcj? zxJv*xj-sJ=z8N=@X@zj0is)|xdvOiY;nac$>b%(T2wz8lTR+kPtx8|4w)>eYfc&J&znfL%AX$K3g) z=c#NQ&C{Wt#f{F?pu77pgO1-EiXm21&zlWod115nM|<6SbfTB?2yd5&~U^qfdUTg#a9sKC!SmFHJ`n@z>2C|E_+SM z>O;Iz+Ka#75wDz~X(B?o?=Xko<^fV4^4VO zb#90_9hQ>~;$#~n^l#!4y-QOot3W!&3rJD!ZmnDY-6m|TzbR?i2bRB_e&v~=r-}gg z?6PaA^3w6k|EM?a6VOfww?0@4_&{my3DJG>pXV^QTc)t6DVx+gtbX%YLxm|Tbwmv5 z^|&KDrEDJJo^#hcZ5%cY9?aYTiil|e%E9gNd2so%)EbQ|@2ug+%o~3Dpb@*X*i4XwPEWV` z9p1W#f0xF&UzW@E*|f*<&LJJI|6lO&fQA%L#t(+W&ZEhzcWR8A?x z8O`l+;_*_2fzObX@ryE2i&;i~;Yd==&BnbIEz_TlcQiB}cm`GQt0Fq~ z)bK9u2>LZ~JhGN^I?}*2TMBw4KchAt)rP9MQdA{aMS0N+X@S~gXA9Ja#UUFmboP3J zih=#Me=9f^e(db?ys?dbqDYdH7h^- z^~Vekkw3iEY8rG3bs?j)TtTWWdF7qQOgtdzMKC1dM}s#X9uMn@3TtjG$;Gls+r&~W z`O^n72*6DluiE}fx1Y`hAZ@>W-vnq{E|PWiqjuM=-dJhgTum7%$brJCh+J@C9zzRg zR>38wPNOG=tNkl%y2VPf7FUEIa<+Kg&%l=ZqxR&qAXvFIMj54LE82p~#$BW_>7+nM zF|T8$#WU1wC?f%zHiz60w}B=K8jqUASLnve)KlI@iFR&%6a=xmG< zQr(z#?7KkSPLkldxLI&_*wN-X*zN9g)T`0y*T+C{Gc}`b%IgkD{@TbJUbgvJRmjbF z@)_g5Qb$R|1?>hJwUOy4q{gofQN8hKga?Pl59{|HaMg8&`cWy2+t;FlCcB&fD&|Qi zAiv4YuT@6b&LFSRiZM)g1c@z$rqz~=rYwK-cfO5}SK#QmB;8+*;@l@>7Vd+;0pZe2n)uj7CrG;372a&M;f}Q$bDcX+-wzdrcB7s=w^CFPfHH6wG zGUgON(sN1?gxFDH=SWE<+=L6IA;^We7x#R1sIV_OTJIp@8PnL^8tupA!V#9{)ZcZt zmYI}<`|p%^)Sfog$5ZvC)mC-7-V5TZOfpB~8IBr5(*0G(-D+!8)Q`i`J@JZ*J;lWp z)bk8<)fj~0Hrx3?qv4LIxsP%b5S>xVrqYGo<3!H>n(DzoC`+q-b87)=OtwlS7LR1l zbdfzR#g@NGb~-ix(3pW)PQ3dkHLAxS#t4*8$&&bR(O3Umfvq6(mP22P5q%=ZJ446% z5+A3iw}~P~DR8PI+oj9pQU7+adowE%iZ=Z3UTcU=28fAcBJ@bg&X$rj)tVeGjMb@1 zy9hdFeZPO%dA>7mvFsgXp-tZYPN)hHhctfJZEXrmr1Q9XG>re3J6z5y1C}H-@gLiT z|H-AySs8`j*y&(Z^jyy9p^?kaLt=*xcA*+R4P-fXCu217%4C}zB#Y1#SIn{@25>Ds z+X>9oddMJdl;1AQ_KAWDt6IC2NgZ8lfh}TSk|qTnF-al0`0b!NXLG@}(hdG@>HI8c zsAYl0fbInbFk#gzu>Xb#EP21$dhJ9Zyr&(t%l-HVBjv?w^>pTu_iSx@FO3mb8*l_Tm<)^?)y zyv~bSDfD-Ao(z~LbaMs6E?Hkk6zLsZlu2a!T6cVIGAmB@KzndNPxQYVk#DBzPDROD&5V?>b{pFc_(}wPbb*?lJ2m>oD=aW1D{ zH9Y?X7^q2Cx&^hOeiX1u(vK=+#jkeIMW*;=&V#mR{|t*^p~BBa+E8X$Q7m%RHPHXu z?9*uiaXk)n;WSAq5RUX|LH)k{0?`n|19mey`+S$!9p$(H z8+s2lSJ>5x!kJ{oPF%I8%M3(=FWh^!PX&SV6BSm>ingchv6SGdni>aFDX^>i{Ln7* zvZ>7Yd5bL&O$j@?9u@8C)XCGl)(!Tyw>!I8%+ow*cvA^}O#Q)e{7fi05i0&YVU)Q4 zdn?A-z(}GNGEQE2(6E9>>;z-^paEvT;7NqLd^dJp88(>zZ1S7J&%zWR=fgs_?C&FX zE-Y(zqV?gfD;a~?_@Ck&6TYxLi5PftkEvIe?9lz;nR&|oJSMnr=2Z8f$CV22j@o6} zK$p%f;FzM=>{cxr6{$j*(+Fm{Jj3iR9y;zmEw9FzzzT+ABvBC5sT(ghIz0jdGuatc z?*(ceN1JXZEluZwrw%U0J_l}94DWykSYbnjAn_!WNCGbfT~pR@-qSdXnAiH4MUt)L zO4$O+4LiYVjR}w^(3? zZ15whEBcieQ%DrGTymp1K2NzI3*To7A;j3ad9tyvFL=B@A7@6UC)y7v_^! zcdH<$+_p=OCvBOgy8qju>EV)MG7wVZb0LPi;HcmbKOIYomLFS~z&52^Xk4Axhs1Gl z&(#EY0i2w(pjeOFq+|AdNJPZ3`TsJ%*h(XmLr-n)E!KrUK72{D2`x2-M#;b~B#3qF z9fM-5SFAVdx7i1Ndc z+Hk32iH%xPV?+1_Etv+zddh!`Xmk>OPdG|TojlrRz*RbF7na3rHRpYu93%sp1F&#PyVj13#wqzg;%z(tLX*^qKA-<6=QFS<=?c_s6+$3MqEPx z)){~e8^+Bae@(bX_K{?K;-YRPZD66u^e?%)LQhFOIm1E4axIj*&b4&F+w3l5W@3jPm3LEZ_%V$< zsNxu|v_O#IZc%%)!3OdM`LLq62nEbRvBS*Aw(@oAX;kNJy@7NZJjPQ0q-vd>brpm* zJ{ZGP;>XpomZ>_Slj-MGwk2TX+7PH6rzUulwRQ*$-lL(TYidIt{AwxvU(VdVO-M{~O}+B{+J*GaKNP_R#3lto{H5HM3NH;pq*i`$dH;*Qr1dje%mD5}5M z>AhOBifZ6lr37fmsCnY?2a*RHD>hnaNr1w9GUC)4j@~S6k89Dk9$0 z*9JToTXZz#$7z7R>GvFT=4UXzO~+C&b2s>+r5iw?$zEY3=kV3u&jty|q}$P%F*m{5 zq_Rp{$*lkD?vV3);Y`dtog|7IT`y{Y&dP9M5Zq}(PO*NX5754&oc*gGNKdZz%@DCi zQbc5p|Ll&uV?Cb{+UN4KG{&v!j&uteW`@vdc>(hzvGnb&AYqTw^#Y7Ga*)YcJBGNl zV41QIH~)-l^g&{lznFeP!xtK$$6VgQBUtseU(F5+5azBUjKocC7W*{0p)9(UJEJ ztHG#;x3KXPJ>T4+mR&)dClU|c%O#KRyX0dFQfZBkv^TDh@8^7iaE&#+~MTqtLEF zt$ea(6wF0e^ON+!XH-i7TAnzm0=v|(jkhVzZn?1`>S0dmds-nA`tM&%YWTM3G-j=E zjQ)utwtl9qLQj9xx{~kmq6wu}_O@48JO0^|89~yQo8YMFcN~o0R=%f^lUIzg6I_Y4 znuN!(Cov;tL}B>r<~!W>33)~oWKJ~e;AM91#6AlK{L@?214ZhYfSGH*7=GJP_6o}7 z=Lvd*>IoP~Nvr!@@$}glb$^o97Gxy9dh+$)Z^{`f8PL1RBw40`QOsab#LshV{2Svwq&9GA^Qy?nib zXt0o53nsUEmfi-!v5xMs|G}Z5tvQd@ru@e^VJ41K4!^)~e97FU#766DL}WagxzTE= zLQ7L)?_4NJgmhk<-q#*C9mUcO8R}48%dJ}oyHF;o>=FL>6Ly-M8Glq9FyHfh%i(OW zJig~dJcS@m>gHdTF34ImBuz$3oaumkQ(vh~PJE3i#&Q(R8g3Wf^K%lHbQQCLL@$GQ z@cX8K6T6K*EP)HI>FCTtK`mV7(mlELo_J9F(x6Jm+eYr_!^C|hC7Z=rXyqI=n2JF6 z_2_VgL>bzIL#h1?{jP?uS~@sbUL7Dqm&%X)_&yNQqOc_I_pu~$zM~CEHG~AU2-Qmu zG_=n?vlE!Hz5RgG92@&K_u8bt+F@-E)owKoU`XkI*j^rOH%ZG-Fn zp>ozCArS~(^Qb^Q6qRiIsyfDD9Ld9SS%E3TciVuXntw%thlLsh_c92K(y{lai2*Fg z_JAQ%VM27bTC~sXVvP?^zJ3@!=l#jom^K}2%J|SA>Sc!J&7#5cvE#z1oW0829m8|> zH*r!PNPw?v&fc#WfcSQilhAGJR!He`j&~FRD^UHxG z$EEb08c-3f^)uP$+08$LEVF>Q{gnw;z-%5~+K@MilzYA*{Flwr9f(ieIU$TV=$P!J zOOKLf^6gr23HN(>t33e`f%jfN?6i5JFWI8NDhL*y8cL=z8Dj6<;gZJX+Tm(t0BFKI z*6j0KY`imUnLrp9BM%MNUXME1?#x9ys=U8f5j zr-(&?I=}eaj?zO}pNV-+)Pf|4wyvG|TT*-w?f7xcrvr`zQ77os#O5;8_fAug}-4QF7hJdr<*imK?XoJ*^nuhSh zn7xdTfMZQhyI?hM3mEuYCA{QBk>EMTtTFU|AS*NRnRpOb<|nZ_e9EE#Tuh3Yb`b7V zo;>Q%4F)7$;A}>av!jnzHEvfx^ql8Bj)@07phem^Uk?Hu7(~g9JYfpV&FV~AWe#&+ z+HXXbdaOP#;QTMefx>APPzenE*AlfsM!Du+2C?IvGAL=;Kc#H_S>G=4b}K|9=2_bc zNNo7L8A&Y);!!ePV(_#ptNn^EJ$ifRm_6l?Jl^3*g8h>^~dbWK#!i% zz-L541I29CbqP%!(E;lqR!5Dy|J(Xo#2^nM5AANYYX}lVO$+i3jr=wDlB-hhVCfW zgD~v704yRZf}AP#nhZImCrbJreDDru1qWimbUI|^xoljf<2Y(+*ntwBZuYpyz6G3) zC8m!{+nnOGrTH=`5iXUjE_Ig|P|jM7&ZGdeGgB%uhJYC5EyYgt3v61xh4d3Wa6FAo z_JtL)9>HmImyqR0(dQ?kIO8J8Gg-UcD#58wo-eJqrsH@cc?#0uim3qtL_bJTJ+P|H zEY5RF18gra#=~ZW8@Ek$!S^L^HM@)rC7hkAMZ|QJLHO7*lAXM)$wIQHWlqHTdn+$V zVAXiulSEz+u{96FVUR++c*6J(cS9$h1+OXP!$FU$noPvzYg#;6b-LE!J^B>TsY*5d zwBq9_h-3J~F&~wppuWr92fGknvxoV!DK&RVa@HX0`UN=8W4^TNUwcgU5KmGdR;5pp zVuZ}`f7o0sRD|y3;%a3_ZVPVoxv@ZOfbki zW%u6fTttk-%Tlw8G6f}utCi?NEpL^QeeHEcaMD{q33!ePox6`UJR-4F_1t=+8KX8D z?>+TKKlnBrRuxc|=_Z3Wo_#1X;ot!ODUI_H8NTGy4b6Xz>F7g{d2rZ6LU#H@qJW;W zQ|$6Sa+`#1JfKeYt{(u@AQmrpn|l#p`xpzh4+YzV|92wPsl?eZf3b}K_{;M9bhS2t zQV1)cj%!rT6BupAQj+dCB8CPgFpR7jyY@~VC5R@vN>+`UOJ`&h6Nkclc7YMOVq+MK zr#TP2dz!(9Ep^NQ(ddJs@z$2Jdk|0Zm=Bt@!kvo`MznRTSt`Pc&+QN)ev3J!g4v>C zZgr|H*=W6K9VS#?$ng^qKdyCx?`Mz8g)U6#bf3w6s_wl{TW0AAj7_z{_=gASG^R-y z_M*paVjbYEQ}hKj1P851K^`YTS@8Lx9T+2QHH;?ZK5-Tkl#zDE7u%&)7i)&fP1O3+ z^Nnp4?ljqpGirPhwZc47HU3PR!3z6DMo=}AJi_w4UbN4P%kwA0XU5LFSii>Qp0%A) zyuqL_&9XzxVqH8!VDbyw7kHNkUW8f2It>qjgfLs`q_-M%F`r%;3Nx6 z>HEAeA=DWo%go{2viS;Ydumx@Lpi}1{w9gVspFshM!XW_E|NC#Bx_iZrcOK|oki(F zkCtoT?Y6_*R%%}nT1)7KSa0hT{n$Y^C3VMKw8ek5T#7gUTOI@~yS@?H7&!${Lx%MX z$!Q+9gb=Dxh$#{oqZPBN)?0m~0D zS&`uB8MbX)#=5X_at(5aZl)idW0q$lu8I)-&_ho3WNq{oSb2mOQdvSds|ERYdRMnT z6wRch;uA%=m9Hp%Wj?DOl!v!0Uv63V-w05a#B|-|p4T|qKBOoGMc0mlAj)~ZQODvo z+@-H2*9Oe~%huD9h0EROx&-B+16H+1ZIgvRxu6Ma;}nAT0jidESQxZ8>_8CePvaq1a#3h}3Ij>sK=sRnE1YfYwU}rd_7bm- zJYp2s7G1)>>S~D?Sr8I2B}(>!A-`NcV5W#<9E0eu5u1l4rqpQ|qk4#MlHm|Xjew(b zC3u<#bGdMUP9g~bKnCV|v3-MZ(*LAbXo3~#1C$wc*VUq z$H9EJ#9&vqns{smF-84i*Qq#WuqUTiD8yPE;K|=}pYCBt2o=YBoz3=A<2~#2QqC;i z*OW6~U3B9lw3y^39|C|GDz)Vbdcr_o%`cELRcd#HaoJ*WohK?&9K2UoUSTdi&CnRv z@=-?N+xtI`H<>bqtV`D~!1Toz4K`KXr(o)gAo8fi-^*P6;FSh}%!GLda{yk;!40Jq z)F^Y$9eEZT_V-V3oQFWqUHgJiov0Fm`ZrdMQv=zP1w`{!rCV<8FAo>Xd;SGcE}Py> z;fKU=6aZEuyH?_LWy9N^Z{9ar2)cwe)Mq<_*6K5Vdj$?v#c!81WLR-`65O~7eOd#j zoRa(GP{xhV9AUu;t2P&;Eqt+PJfGd8>o1CgMKWv!sB6Yef))awHt)Lu@MZ<*4o^=5Ein@! zjvybF@T5-;pB@O-v64MBjt)1&5PVC*O&dmN+KWBYJv~9-Fbl3O_?wVJxTun&A)y4i zv9<@vuHJb4L6OI<>ft!W8=-101%T9sIe;RkaI_VjBD>9sOxkTggS16ngr`+AcTxN} z-ju-ymoaHifKuwA(Qt%$(y%6KnguFj0F78KI{a@OfpTtxYL)c7(>mo8Lf$$VGJgip zb0+)~m#f|gKtJF8wrbarY%xB=0daZ|z*KrBNv0`RP8h)VEoio~H-*!fIzTwb$uvvU zK&*tXT7RC%nOz@Lb0GlYI3Odrw4u`IP+1d^gVH!w;Jc$q99$U|aoPx7Xqn2WS!zI= zHN>oZKZV*0xX4i`Au*vovzA5(M1?VHSK=*EHefBmMVbi@m0`>d)ENv@T!!W>PsPxE zylTy*;}j08=Hu`knM^;5k&lq3r!PgN`N+QbDN0?RK-A0{*J6_2>NeCn`J)3B1ExF; zDe8CZq8%@a@bY}5-bSf)n=LeAzZRgDJxiVkNTI0Y;Pk)5A&#O#Gvn0%G z6DN`n5M>+7+CqxD1;8a52?$*z&}T(E;B1O%IPC$~O)EAsnnfx^;(4;n7wKc9u3$qe z&aw|2m`MDo_F^ZJcww&@J0tiw`IVw(*gAZpdzo8#Otu9~ zS$<*|1}2lUhCN*xBOxK=z1Qo&mh!H51ed|$qKarSHo|`I*rC%!p{|!e{wu19I*nG{ zZ%E|uNLB1-esiKyGNn(B;vm+P;(QvRGyQlE+SdAjGo&6$ap zy08B1bx#Nx{$qDQvr^cp!a9oxB_0Z*m6MY^0o!2YhKU{QLo_oOgZk*xaJEP;U30Y> zT(^Nu>E;LJaVvo$su8WkLJF7sWHkQW$Q`x zU*w~u&U7wwFk9CvlL*s9SN*CLQn4UGyDIgYLLs(lEuo>kq`McCVz>6$-+tUR)EIAS za(Laj%_or+@+e%w-~o^S{nxj;DU)EGKA`G>1eORdI*DT|JCKKoAcd|{jlwRc{1Am+bh?bPLO9)??`z&;(6dnqDHu$LBDyuwV$Q8Djp+ec7@Gk%WzFK$ zjj93Oz9>??sEzlUU{z`+$ePMuR+J_g-0dUSaNjtV>~FV+jgsc?ie)?*j18a6+WUaQ z1y4`P+L?>8tHJ7dVZzlwgt_Fs$uHc^*bvEL#0_Y~U9(2X<*MoPHuL$REJQwGv3IX> z!iAfO*sVj(5IO89DKSDfxpP@-omMYCG2o~QI}aF$snt<1oEh*R_FC)Yq$O}{)Ny){ zAnwGxF6Z}_gGVMa&9PCeF8B#v^Ne-zfNF9Mx8}o)wu_jTJd=F;jLM^p7AGx z`D9n4BB;w61gC)2$up|N5ImRK54iS-NN=cwo>-Rb7AyYhw+%~4q53;Pi~d61 z7wvRQ0Slmz8bVBm?`Pl<&xd*OU@g>-jnaWO+b%z=()Iy35ytTlYi`Y!dne@z;zW8j z$2f}N028PG;b~$?v=g_#{295Es87TR4y?{ovc=BISRccoJS$`D-n50Dn#J{$PP}6O zcEwTqSm`tDkP}ek3t~a(vvAct;I(#t^rz7F1fCmyWv{v%(GSNT{?dgQ zwEYV}R0SQ8Sk+ueZM6C3q#?;}6MH?qj)98v)WW))}uP;NvHx z(r5^ZOOh0El|jiNilRqU5F=?H&J%N??lF_DxDxOEw4^N4Ij1X}ac>g59hwaw*q@=g z)MrOuj!7Fo#k>qpcu7RQ+&hc3lefm>*H*<1F+M;;a8`S;Vln8BW`!B$f9}cZ%~hS^ zRd69bcn+@A7Q~??yh+jbGwv98-a@HA&crP|l!uHjBoa;sQkHka2xWd+%* z`5A#1&ALr6Al|5pr+#?j)Tl!~Yc`o%oP1+IdxN;{f83kQw2Kqv#6mB+c~)b{LYB5( z`a`pvkp8(Tot<7o{8P}DCsfwUqt)NR*N$|%Nz}tAusv+%C8@w^`k1E`XojWRYQyAP zra#^<3QQlb=e230b85o^Gdcy zUu}#YOztR6!~GBaicZ?G^2zKi>2A-1{^Nr~{Z_Jb(xlDFX_(M3rkd%Q(WbA?EM3wJ zOD|*fFdMk+S_i9c9g(pC#X{X8B#^};B6MRVkR@Cs= zg4JJ%t&0P13@c%If^78f4id;k2gJRPpv%PRn}apD`cfdIo#d6xWjIdj>=1$iZt6gJ zt@VnewahYz!Z~{2IijCBr*56B$u7T^9W2JiPK8LD2*BJ3ze)D1{9AOVj-$993$77_ zJRx05J?cmP26=1+fI>hb`R3D=^}6OXHNr;7t)oTpfEv%y>6X1Xt}lT;Ys@K!tyG@) z_Kn%h$#FM14xsYD9_AhA&%h=Hc~E8;@F}whkd2l(t^}6%EAsxA(?w?j`15HrMss-( z{DEx>_F`G?cRFgcY1xou6gK3E)0RKGPyNMNocK%JkkW9vV)u}x&)}0FBJM^QB1sO2Vpxg>Uv3cQ*XV9LX8{~=#Gn|Z<=AembPjaSLPsN6zx2Bc~4d9W%N zC7)2l5OXKtGq;xKwE-uMmVa{LEdA}X#JO6b>!jLZy3{O@TF3la{c#=s`wdyngIjv` zY`-~$4lZVJmyp2T8peLYFQtZYKV+jzQ{gJAI8KL3}mlfEm1Sm=?O8I(yH)KFe<*42TM!Dw&58`otpV z3+Zkms-~p4p+!4uHv^LK@hQ~OTLnAot%MSfcXWr{0{2|>t=mw%zQ1r=iy+OKlh|U^ zOV{2&p4M(8&J0vnSs@$uV6IQbGp+*QU;zqwGTX&o{va(dHfzaz_oA#KH-1o``!Hmm}pntOIxj%@dx3zI~3v7}Z1s#<=D&YT#9)ox|f}^7wo84kwNH z_&JB+yfV(_(Z zappiz7hL8-k~xAxk9q5D`ts_C}e^ z5{!UhZBcvIcg_xl%t@0ZIf-&?qVSvrqt@emr<21cG8}ul9i^lW5mF;$G5^v8F zg`EK&&W?sP1fr@vqPjn!<_TfXV*S(jmDJi7hY~Y|L+2eb8IYQ<{R{~f0dKpUkZ>wT zwy*qRUdjhD%l;Ykm@*Xpaw938^EcII0Ca4u*IV{H3_5BcdPWWirQESoBh=2%pnx=u zFrVYXNVOB|YCUiC@O_mD`Y$CHV3;&mOUcQiwAFbDm_(V!>n;RFrAU(;6#Xxv zvdq!T!?m^L&E*jU*ndjx$Jvh*RMcllJIDuaql`ZOf2WtDpA~&5B=5BtB{L&ue9tJ z)~|!g6qs~ES`n*MJW+Xx6oMcHZgARo(|JdI^)3PUeCD@X5nOlbhBGKn8>=(vw2%A4 zh)BIN>u%vGz7WuL2!CIBsyc!(Wpu&wGq-i#7=L+;MamgT?d8IRUCF-9sv!IrmQbYD zrIC3i_HB1`y@p}TdGHk)cS=k%Xfy$rW<{Z!R4;R7xJxNv3~_}^vsnN0PUc{QPn?L2 z(^!Y)%`~CXXWzfyMR2i09A`DA z0IK(Vy+HOVD>rx2d9?mvkk4qBzyzspN~o*#a%Em1b(LaR=dW8nnMf)&&?w02Rfi zT$JyD(AdvD(MuX^T zP0uIUIa5sm-}N{Zbh#(&Y|u?}bij@Fq>JZId%g2d9J)xbr$x@ju$Dgc@up$EkH^l# zJcdCxJ3C)TngA`03I2Y9rfJ%@93bt@YM}&n-=uszKplPhoJWLO} z<@6#eK5-WFP0f~bWiL55T*7b{I(Ij|Hp$aQU*GHW(F3#`t?6i+i1AH(08q z25k8)sA2z`LF*!Z47|1-PJXA``As#~j<@Yq#KOjPZ&c`0+~LJRo?K2;<1I;>?N=!L z!S~oicF4nI&p{N5*@4rIvR>w!SKVoz_fHapR_k4#g1+-wgn0t^iN3-nr^B7wOCx33 zD&siNm&LD__ORrFKq7(QX!*^fYk33|Sxg{;G~2^R zP7F3$9lo9Iaw%;-xq0KBJb$MI{{wES=yHkZ$cIty@=Xv-$5Il8Pqixq=Vj$COIJ|GKK$;|28PSlp*3|XMA0s0*I}fIt1gGB3^Yv)NfX^tW~4y z4N&MBfn5{k-Y3)JTl$;SwFVjGTn2Tp`}-`KMs*aZyO_LNLdZHwWeAC5n_KG!cO*l^ zj8qSc`$lsr>Jr(PswR~BTvXi1bk_B!`zg3wuYt9etJ+ZhT}!_tQ>J}?=tsSeDGaiY`zAIe2%l*b$=Q> zk!R410%Wj4o55Hn9qwt0)Xj~XznIqkV)hbH;3g9JeK#cLe&Yx~f-8)$PACHLC%YJJJKSdYb+2XLMKAEC(a@&SWh~B-P=~8Ymb*dck&2gTvMg1e^b(IBK#uNtITSq+0K5Sxs#z9QJ-9VXrZ3+M z>*a_57fztDG=W>!LMh%Q7icLQ zjAki_``I)V1h+PGC{vl~VCvWt;oV($$fkI0bb&S4Th;ZOdMcsF0|4+?P@C+YkFmz~ z=oSn?pS4qyU+1Q!oa|J7V zemX4pjuA{DHt^d6WeC%f=QSkU#domj7+GmhW27(;Iq3AeM>?URlF{iHWBe3n=&Lw^ zg~-oCAvnba978|b2%d>RCg+V#PY`LQxhB&}5_ZI5jB!G)LD_`chS%U}%DiKB4LCBq zr%QuJVtu7H=HM(B6N**sbJJ09`OWIvkWJjAh(}j|1uRW`Yp=z~$p_AAWI1E=ukWSK z)>_x?Y+JwElJrkMh_F?Y{iPm+&*S=|^P>*|PMakn(Icg*m4L#vz7@kEG*a@&hAdll z?KSxWA!WnsW zK7LS+vlIHY-~R+!7*m(lWX&fy9t%?guGhko{7Vx*=U^l6l2qGXaBAxs|wm5!jvR2FHB7$+Bjv`Gk8D znz<@R(618|85?At4u1q|TqoR@O?^lME&_me|ttzRT^pkEcF`~RYlBoqN zrQj-_Yltf}{pHD48W*u_i$lw=fo&y*?#ZuM+HmyKq*mI_C5j<~iQM7aQNW>0!(JWInS5Cw7f!g+p`E8`Gq~7TcD4^ z##R0ldmJU;`&qR|*iq@$B(ZGbI69!0f-lO-CJofO`CwOr!x)v3&-5vhA|53>kECO2 zEj!UH*n!iLq+-=2&%s)Tz7SVQiq2s0molY3+hOTb(P41h?^`l3Gl%(ujtdqugP+Tf z1k?@!2Tl`88^15M&_a>~;nXxAdYWM*Q^YQplt3chD;{XvMUn)0%~QG&kKl(dKAa#b zeiIPm4!)p8Cb}R@-A~cjI95klsTpsyG(lOx^p;Y@6@dCZ3&>zsK^^F6UWt)08?1Ri z!#1k_Dxh$v_&k)JEiogKN@~oLBryj->_ATdgf8z^9-t|%SlSejfg6*PN(*~x@&iB! z;8$@71`Fjg9PGRmVg~1nSq&W}2?o2*b>w@k?XhWCSDQ`KSDEue3IrGQ2p4=oPa)ba zzMMxVsilVn;_E;>o-J}%9F$hrEhu#X-2rTL2eOHx39Up2$+LE|)C!d zvtXw^=cWYr+fHnkRsc$1YH-LS+vo$f3snu+p3)b0Ru1R}PSBe*Gd_+70QEPC^Fow?b6;(MjU9lHQj1X?N} zoV6b^U1^E@c;4%;x5E$uv7jy7&bKJ+mkUbu7n!$9MuB>F33-+NhKrLNK5qi|A|mz) zAl6M*CysE&4`pA-8WMtSfCPhiw5BGWEYF(6vkHMeE}_{$EjuQi2aZ4pEbqjGw^tno zn()&)0^*DcP5NiVW|SZATZ!GNCyor-2xcY&Obr|rVZ5Cn81L_$#lyfVU0rDGP_x!qsIERa~!nG+CbF`f_R2I zN}Dz>K5TdOO;VA-I^7il9Y)s42RPT9RaiPp#)GSGgJ7uB_AS#(Z~J(vR~&1sML+;u zn{l#*l965ijCs|&6nBmE>I`BDS}5JAtabwqXs1XJaC?j<=qF>VdnpZI;m}pPnOxkY zVxFHzm9|}oBEoPLokt0ikd$xQw`%qAM08vo;3T9KbHDdr7NVCp{_>w)w_{{(50MD_ zXtY7#7g*_4GiI*_xCvm798|QZc;mt(6oKY8dQK|(3-xEX36NZBu#ax!46H8yB6lbn zJ)TgBgkJBE(n;|EmHi0q0qDFplS6gJz}lVR&tjcwI>;k9%HsX9^iXn@*gjC#9y*s6 zL!5mG-!!q;3X2opob`+N-TeOUcoeQJKDruNJ5zqG$1t58SIYL|P)kJ>%2o2O<3BNG zF5T@&&EcZ6@VGuHw9J7z#&i>cx~=cT$)(WXZiWhnb%dD4ZsM;~0IT1Ua4K5vKsfigw+ zPxdqQ&8|^e{p^xYZ}*Ct)$DToBPX4J+9F@>*^=pU;J(GPXLRBe^hen`o=3WE99-Ce z@M19Nd%MhO*Z>y~8)kGH6N6$t*2~|n2JPlIfklrO2CU&A1)5}%HI!`8^owTb9%)y! zy|*7i@IHBf@oa!R8{Q8Rt|zV|tmxe(44}J-$Cys5YWsC9TW2Y^$R%7<^ zUydWi?85F|*J9EEF9KbEU^CZqf%h36VPql^7XH`p5nGijcej!O+wCNp;;=lC1EDhf zYKl;u%yQJZZu}e-7|rhj*)`{cHQp_6o(>vWOqquUdfdRlInk3rF=^)?=XT%FHfvIQ zNv$R)z;Li-aCTcV&<>m?&y1(42)MYf{?*S=3>CnIdLQD z2uV}$qDh8s9X08Z(Q_=6&c5}Ri)=vj72D^+ZzyOwvS|0qqk_~@9&8wR0wU<{`ZTnU zG(2c(1o8HYwoHvAKqwlsTy|}m-Fv?|G6k905V;uV6xjdJ_`8Zqs(^aK1EJ3Ckj_^f zH&ZH46$Wf0Neu)+6#WUOC%)#$y1qFFUY7!*Hp%%ayx|j``~Iuf<B@V%tC3R!-zY|+!yR;?k6Y5@-u`fhKm30ys7F03(`6-0AT$);dI6+l(R9NFJRk@n6p9CK_%9VGo`(JwIS}1kKJGAeXu@lOl~;XrN-m|mhy|J zpdYC4_)!Wch;Kyyj+t-EvF!~gj3EC1j197d%zq>V{&$r_rMp_tUeITn={@{>?ahG~ z_uO6(5u5WMq97lR6fJ^h|7afiC3Lx>winJ7G1l>XmFq|7fkR{Qp5P4v%vnxLW-_;U z*HYe&2OOovrfy&Xkr#63Z9E24eXb;~t094=2X@6$B1PMcVxN->A=E_+%CixZInE`Q z#L3EK(h|Emi?-hF`y$?^L=+knGv@8=e)Y*eq^U9-HCPF@3p~RpO$>-yK4k&r+jyT` z9OX%fRKVcLYYxKZL;_Q&LrjsNwPz0L{2U7uL>6p)6-8Wxu#qybfiz@{p+-c2@TUcv zeXVW9$Fcd|02D%9)S9A=LLY2TMRZu(mdX`#UdvANEz$x+^T;DRgxkc(Q_ljZYBS@) zy!o&xZ|z9!i!YcwM8rv;90^%ma@1Ufs*!p^D7+P{JIRbD*5XIWiX1(YtZ>e*LYGnKGjJrWp`js4knc8S8r5t0KRL!=sVyUz#S$U~x=rS`+9pHY zI-8*3DHpAOL~%q{hk>lntJ%DOa)2DvQeu7;JC0$;ACZ;umOTVA)0g zkL(O{E&9;ia;|>{L+tg!{+wS*fVR0<7y9_THlBkuh5$xTEhj^ZkiAP9_$Ik&kB{rp z064pLV5d9(h}pRW`1Hd{Y~w54JDJJBDVQn~L^rwj7MK_aVyN)Tk9-ZvNm`dH9P8)U zLU_|(=H4bzJI|O|sC}a;KoT&^{~J7Gvci{aDM)hcALwr$SJYb&`GchlO2QtcdQ*}X zT$|hP8Qc;M;{pB({t0tp%0QKMzO_}; zv(ViIzcJ)c8hSf>V?WpA#{KxidR+_uuKN(=W}8sh8VpUxIIXLF>x0(%ma?mTN8KCx zruS#@>ep8HHI|F1tM_XR(@p?kYDuTTqwJEUkqgs;DkJ7I^*mB_%DlEe5pWe5=mSzL zp4T0H?ID&#j4ABV_^bz*Im5m>Jj|Dnmmi1hEyMYXkY3xzumMR6A;D_kuD0R~*cN2_ z(I9FdTNbAV?SxD67R6`NO65J#1iCT@Vfq*EQO^2QAMB<`tsrmhsufZ#Y=IUCKDysW z0ElB^f?5Yxs(vzDbO6mZmH?@IOgS%g=y7E4JHX(W0f!VSJr`$xXpyGCGtN8{ZZBdi z_7Ei`=+_*-*9sCgv<8y!3k}sy@_OL2R7|kX=1ZD5k0K3d2ZEror-ESi^KMvx`}d9FJFK`|Q)V2BgV z)q`*;EMt$tE-aQqM4Z(=Wb9lsNM6HW44U)gLP+jNVyk_;clA@nM=T=(QwY;PYZ|U2 zNl~OaTiYAG_J70?o%Ye2IwKRMN>Vo!wG{G*ODp9zlu2Hr=QdIC2vqEGxS^k#%%K8t zzY&SxPb?63eEbR?K&=A3lXkQ+?@|sXU zLN!V2v<`YUbU&l|qpdYtKakz>H@Ww7^gPnpZU&KsK$28h2{*lLCp+mG`-Uru3|jha zk81@6>sM7p$DC;27ahV;C^>*+P+hxuSKxDO7JJvABq)5L$LJUAZ6r2NC7lfaYDt#P z!xkLSkbjPo+)^Q6cj*#Lt*0PHd;U)dh_&!CAWADCfpRJ=ET3xmi14C<>G^x_*Ss=F zF_GtD{*s*k&SN5GRcGGLxJ<{{vOLUD4v)v>SBH;bpW+so0Vj5>PTy-(deXq{w+63C z?4I(8Oecp57X@5S^cp2;dn-O0DA;SwjRfp+4+&9`BB z*`+U<=cpU{W-kycv`O`y_0GvcpZ;-#628Y17KvM4fkvat_E9lm`z{}7ZE__H*C3|! zWL))_{U#rFibRN6X+T2%H^UUsl7%vN_Q)(;ete)HN!q@ZN%T#M!_T4`2db)(Y3j}t zivR>>abSk$+uBf@B zKa08#W@mx^<3t$?I3l`_NJVegn3s68``=QMcl?~bxHeiud@PjN^Cdz4UquthME3)ytJ zD~66Dkxm1tpUIm`EChks-v%WKrSXcZ zR4$q>0hn4*mlh*K79UCL38*ws9@_fwpUkjgsNwV%P_8jSeXv)$xBWIaDqzEU-`$=6 zjJrMZct@c*xjWDl9&`G=p}AY@@LmV|=916Hh|R=0Nz%*?VFmQY`Vj7N=;#(;IVwU% z8Oy^(qzdtgRg4s68p})*`V&VnC+puuz<>YR=F*5bbXWgkcl5>&0*p>EJW13_jSckq zVUqv|S|Y|bVj>G#AfIk4ow)qfDo8{;M^-Wwc2DRR@EZ_QH)XwOpAtbqA%tmbI`6nG zj{#^%AY^nu>9!hS$icoMJ#eFM+<@EE1?j1k(?Ez0o5#D|bDGu-NXBUQqiZRVkI8>Y z!^`RxdGN~)+_*h`E6{WB-Upjo1Pn3Rj`;Zw8I{9McJ->^6~o+4#5x(>r{AoqDOGi? zBE157XqQC0_WF3jJV>sIvJ?ojys=!43VY!X(#X9H4~e$+W^`9TB9obn6urd_qk{K| zlSLmNUmIBC#Y^P|eI7&jZWq4*mqJL9$x4D`7^AX{8=WYzE zfXWt^#`^9*re7P5%%--UQ5h*V=_JJ^>*--UH9yF+tCDvAHGKvLAl+rNbWIq4x66>Vjfq2tHNNV6~ertl@k|1GAGC9COb8N!)OIbLMAy5&++^(;e zaEB1mzRK0D6nWCaBkQ|@E8MU z`5ssvznH4-V70#W>OS_!)V2 zg~zu``f*_2fD?1<9`AiXIruLtlUfBfs^wQKn{CnVBfE1c`%j&(udN(*$Hxvu5pk`) zDA$)Bv6rg~!1DQtFf}n^*?11-yd9@5HF4bS!0&`-A7@AX9EOgBfzmq4p4P~31bnsc zxn-&Bl9+g_h~tAF6%m>ZD&6l`-Zpci(al1ZPAAm&c`F3iy%mp9fWgnzE|Kd_|NO0GOERp04nicOJ&|^HCtKn%uUpdg()3@M6d@?EXQ_K`bo|h15yc#lS2#vVVi-70F*Jw3Y++U(gEB~tXF6QIx1q|K_XFun`R0H6x zfV-3Ot#Ve_-$qMskd6M`@a!{;N3W7|#wfvzhW3fd6 zu%$k5@IeFHr&eY2s>De7k1hx(|CVi1E}@>x1{pu7R+PDDvsx!r_b04`dgO;$kXc?C z=g_d%(X1!5-g6hxiXN36)9tkJm2vVe!UE8KU5MR?fQB}F)%cM%kPJ-$8!V*F0!*jZ zt8edQgD)n;Y5esSR(JTr%CJ{Zb95THXUy0uL%MDf>28t?*6xe7E_JV+LVmIQ9OKjR z8dBS*kv%dZodIwKKo8|FMU(S)`Lz&8 zRm`V%v%wXQ{>0G!5_pnug=w?c+MFt~pi6gx`T+9b+4t9N>51p+*M*auXe-E95646z z3+&I2=3W7ryI{%4MyIoti?{ml5O0Lv1y<^Km1{hVp2#mgy3}S*6B4#TcDiS1Ol^^B zVaCe0gRoP1+`HaNx}PJ%yyv!2axL3(5rKeAXl?;mrW+>I6FnROn)!4-V@eSFL*Z0c z70)hKTO{wB6&-g#m4JvLqtj*Z(V|R2eJkG7gX%G98YmC=QfV_Bk>ddQe6!|D=h*~J z{cic>`4-nQ9{t}Id2Ynzpj7}>QtCA?UblG(cl12DhqOZWI8JGoUr{vim9{QYH+UdpKCHB04g=yedq+4+(yC7lpC&UW-*vy-R-EozFxJ>iLw#R1@p$ttq&4}+erP#rmGm?&-CUgi z7vw*BMw1K}7D(`04(i9x|1!;wZ|V6O;M0OQj`cU$3y)(WZHBcRtN&1xTGpOXkRft+ zw;d(aihi|?&sPP03OI&(mry`W>*VDT&vC$UWN>vR1-y3m4u%60nkBS|NMTt)T?e@_ z8<+N(&$n5t*vSo27|Dq?PX0ui>+>8a`*b~_1wFq72&20kBV&eS8N52S@*$|6(ek=l~el(hCw+D*Ec zRck=Fx9jD>r*8|ZSf&@}iAsq_14t+6JogwuUOTNEx0~O0Spn6wSkiWS6DEMg4?UMo z%PWuF=-^o9pgWTbe9(z_P}_aWQEY!n^79F?9J=G2|AJ&nTA-1MA>JZhPxQz=3UgC5 zHvv0H9a{nD;-`!1n9?MM>xfpfYE1rC8zQGA_e~mHGxkP~OM=I;y@Dr{t`c9yyK%!uin*m?xxsFE<&>78eof|OfUhHOs|tSlkT~lKJ|)xVnL=o zq3vWLmYTHMv^aj4<2(Wtuu-jnlb3Gq?hXgW;{sz8l#okLM=`l!G><-II!`+ED~am! z_}sJs5*C;=%&0nql`xYo_lxz;y;ksWG&)fBA3 z;5*(bGT_~2cLm^N^Ol(ivV`q_@K|CbW6B&rn9nRSGnPApZF_d7#;*;Nt8x~jRuto| zg}_yR=%7W2nIojgl7$Z3Gh7`+ALTu$-=tKA1r5wX;=msr^2)Bz3RuPcmGRWnqy~MR zqz4HEEI2-Gmr+)#TrZQmqS#&PX{NqL8e$vv>fqT8AQgae8 z)!^d?>I~~pM8UH$QEB+Xsn0qlmrnkmssglsS$BP|eK+ApH=9O@Wf&n*Q}Bym{MVHQ z>}}Hnn&;VvVYr}|wPS~y%#BK-hP9(fD-K3pA^$nxuUk*pDB{AFsgDpqwGGY5iKsK$ z4&BT`Uw5dPrFm5vjz&e7Yd7G9m!e_58Xupdwa{70eL*jTC+ZA#RA6un%*Ve&)($br z5EvcGU}mf2r-3?rw3}?Kz93K1Oox(|^~l>DZUW~8Kt&(Swf{mNawZ*XwnXKXAc+iX zvz?mWQ~OQ(Og~nOr!T;&92`m?ks9NUPw!FAk@k;{wi_s$FF__af)`r1F&(74y}pu| z8tkaQ@57VFH~@4iQ00CA6p}_f2sgKhPW!0l89D|^#4(l=Pz8GHjrk)U;etuGB+tKeqx%UeV)uFQ=c74VO!6`6N|OYcf@pTSV_Kxo`FTW zdW;UXWcDJV=z@E|#-D+=dcVIILyY7W?k?MkZi$9+qz*kE$60c?$aI@hZz&kGd_o2Q z=uN&{rx&(x)D-nKT=?iP;Ht?dZhbfzIP3Ce3b*eHi;mD}XfTZYUY*FxSWpz^h&df} zCI#gG>A3BQABnI54qCKSAsAurrlTL!j!XfBz6897H$zNHm}K&^F)pZ3*7OR!_g%}F z8Em#E<9YBM9)~nxsucVx-J{;@F=5nQY0e^+xNE<=mRjI z)-WRo`DfM+|>0pADPTR^Ktl0TVAW+xzN;MNRNT8Gz z6u=)MrsC6E-b{@D0KXB5fM6=bk|LwFmqD*xi6;#rejX&~*O2s=*LnLvU$+8GMQK5IQ z9B{3DnOAWkG|lJ?Q)-`Ixx`d6b0zXdaoW|kCX^2@HTd>hxEmfluiQVLOagBZ|9})w zq*xgq^uJ;P6t+wUxQ;wS7d`eSe~0Oh@s0wHSpcjt({%!EysB~csMFP!Y#K!eh9Ar?~qN@WY0EBxboeWleP1_N%axs(OmRK&Qm zwht4@61D zM!kr)dLboNpI+}HT%jW^7LmUY<bO+zQ?gCN2iEt1EX42{Kgt8l`s zJ!@pqtOP_Z-7w;${K^Zd276QL@n|7vmc${dTIL!F0ZV%@s)*JpBx%?BtH|=5wzR@u z!pWxNaAxT={>ZJG^7PCpWyY&4@E*4@gcjONDGIWW1>kYoGwZ&#FLniN_v`ehv@TGh^;=~ zIY<;}HL*TX@YcrQ=Tgfluvl*fqG4d9V&kv@Eyo5RL9?_pAuM(=1TaZtLR`gGy!x_P z8GFlat00lOd%P^n5m@j(>sLimXvihjk(7QcpRc1HIs-O~qb36mL}>ETa=)Jd z{KVj>6a={^83{e&4IrTRfTugO{k}NjYJ*5F3>|ImSs@h)5x8kq0Caiat*z!pDkXSZ zW?o9-SP|wi-Wv`Fj1yZ}7Uue>{F)PnR}t|_abF|4%2%YJZW_mo8`2LZt873*W$!F- zeu)oMsps@NDDV&xA48*>Fj6q^kh>_ep6C#glbVvlROyYoRAOnAv(vEms}yp;*QVIn z6EB6Lbz(4q1R<*AaY+pAG6ALtyudRq?@;ga)}r%&js!(t>G6Hofm~;aZ&IrjLoGT7 z7Eir_hoSoYEwWgxtTlWNB(`r!Tj`Z}{3Sy!qaNN;XGZxGb z7@rLAgOhbf5MGE@14E$>3%%7Ag9Vpz#Lgpb|Vz zHf5~Jju>R6Wp5Q*W$5agOCww(v=l`?gf&T?ox7?XC~JE6Gs{v8$a^joD+-m7j6uVT z$x7s*)_w|%&u2yXg31s?YR^R@oQ5bO{g#uq4Y-@t7+OK+Wrj}k9?Zl@H<+5X%VI_3pEk@PT{FC2?3Xq5-N_Cxd^ygkb|c~nE2p?Tlu0I z{XWIQSw!u37j9d^gy(9g?C_r%lI+7AV>v1(!v3V0au{e;e7sFstX?u0Gj?l8xz6JI_E}mCail zy5yct1vU4fd_oI{(|)uawP6W>(U#!|y7gVH({J=&Fjn)ZteAMPt8+a2eQa#V9yWhW zOvpL}&I=@edEtby^4{~mHR5+^AgJ`iTJ_ta*kMahjK*TiG@+6&BNfq{az}qk(2xY6 zVZJ8mUa!+neS1{WOUgJ#2XBKcVy=s-Ae}oY4Uu3x=cPrxih@VGQlm07xxW5r{|J`4 zELPIEGQ{M&Q!?OILaP;r^SO*4r&R&PHthvtg0P->5lT|zg#^@^9h%z=b14k`N#NWfLbb*d-yCuo5f^QZ;B<~|%)enI-rBGg*>dy#MIk{hb_=LOUP z`kGO6c-AK_oxFVHJzm=LkB36q)Z+p{9Jl}6(Djxm^>pWJD;2-B;fglpUmsAzybL1I z=zd$ClOuht5D0VC%iJAud;?;XapMR_XT9TK^BS;%=axe+2AXYk$*s`uyM7P>~N7F-(rN#e~n532eZDl}C*>_e%b zM&p+zAqy@UY-s#`=AB{q;CoYO`zHfY&H3e=C@CLXoz5yeYdiun37;!f(hPb_Kf1%Z z+Av`nRqLtbJ<(2=mc->80W?W@bmg=_kpik|${%%JSKvWFRxkxN$z>Bao^W4#C&!H8 zfZS*gJti;{!K!&dA%>G3q!vOG*p_U~o!@(>9PI->?2VnT=gKDRW;YP+dCk16$+1|% zkgfAk<><488}-ro$cE_|=?G!!|GidnFl=S~7Cn?iluaH`Xiv^^lnL0Ke8ItGHrjH) z#0RhnZp&mflv$sCqH@b9!>9=u z=EO$4a)EStVeX+Qfhch`;r;1}pSL08?V^cmnJ|>I%#_>_-Y*wF4m+&&L~tQP#xquq zvlgQyU|2h9LrJJ&>lK{-Jq2vs96!7o z^5_j9mj@l;RUfKDwh`t76muMG#Fu@=tm=DUoY;s!6~8K1)TcHnilS4C@axT?_=ke9 z>EB?73t#oY(-A+(SPt?}xg`&2l9Hw$pw_M&rU7?rH1i214+^F1Z* zTiwSvpr6j3tO(APl9AekcConRzouuzw;NcGs?Up|ga|n#5+$z!RU|wcwvD6|7gZ>b z`1^S={mEoIz_hVl(j%|tqI|s&%6&=FpU78_g-ocy^WAZAbG|uRA{et8+L}4OOn27M zh@eD`2NpVq;|G+~n9}MVY2<>vz(vo|2+9wc+3?()-x`e> zf9hV#eTt>=%OrX1Rp*2DW>2*N-w^5=BZU+Lu{5C2U1fnf!mg5oy$CHs4GDtis>B+y zE_a@XjcCPRNZL;DYM5VIn{$zi!-$uL2yKD(krbol1wnd8W_fM zxFbm`x}P#kivvX5CDM5DYsDD39ClK0EaENH4+1_(APuyThM1s3mL%Gfs?q9S)rkQx-}N>)spRbvce_Unoj8+6p0 z299z>PwOvoskHMFE-V(!#qA2Gyf=gTpofQ=_9^}K)B6LXy9Kwysncok|Dv0(@|9Ab zXA9<`#+<{%TF`Wgr(4#F8TIb{OqMoAO4#L%B|R7OyLDSKpnzxrRv)+vVGtF94L~MK z3Z}+dkVbNGK$6fD@%Xcw zD?du`DY}~{p6cVO1DKeu7{&goEP2Yf7XHVE16dJ>Vxxn!w@j07AsC}Osx{nMk zyX5}C0DO;zD`mg*re%QSXhn`;LUe@c$ysYV13jdGfqS=FW8*;A$yM4I=+8RmIiQ1IdWj_8)Lh%&~CpkMam}%1&NgY63hPiR(d@`?7~li|S2~rDv&`!OQSwZ1 zvCxiVf_HE69P)yvzr|Y1>B04Kp$%uN+ovw=gS8I6OGxd-+6j#p;a|=VGaWu#KFS-` zujbVL_mov-WYB!&#D`cZq8iy4;bVA92Gd*MbK}dtJqv&9bHMEXn&ImK7vctdMrr0x zV^A5>mcEJ%5Nop{;SDFVMm3PCq3FP&nZPp5|Fv#efkd`E#B$&>3!9#)bJq?#V3vXs z0Z_92{_B_y44^jsMm+d{Rs1t{_ee3Ujqc|dHuFI#Z2835t97sq-07nhs9G-&lS1sV z;rci6=5VgpGPOT+YM#DssLP0C6CUZ-1V*wfqq#KHMOkfRbvAuPzX9y>~JZJ8Ru3P0LR&l^OfRxmyyu zE_T&MMU}6_feXRg>IV~#KJlyue~J6_;xSG0#2I8UriX0Hg(5J5OM_RM{Ifay zo{oDmjl^M`V*m^2qoo$@l*Mt)gmb;)4UX$g#>sC^GX~%smb~mu9|u>nUP;Q~On{8= z9w}OlK8o}fdjka=T%#RMT#xU_uI87DE3iEUuvwB8qd`bTVEyF}`QRC0^4@Gz{w*|* zx7_Z3MTQV<<7|aZ2q14!JI!YU`0r}%G_^y3^JFjQ_%@u-u9aL)&8KzEC0;?YDVdACswMfr)0@$cp)c^!)UMN#fT z%!0F9VTr(GrhrM$yNhsD3%!s?BePU-6cqVTh9Ir0il-UhdijGagBMay3oh zgCI~rBj6w8!~S+#`@e!_Z`b>c5)^hobL+5{_GYdfk#?up@|@EB&&sY)($-I)kZl=6Oaum!<6!;Zs7o$%v{L zz!2b0G6zO1WI80L?V1Aj9%KUb)6g7=Y*C;kCy;p+q`hD~6;&~4xJJrLooql3wh(I9O=j``y4KN8R<6~oyt{nz^jXX(K}G?-i*=w=${`|Vv0TKIZBORL z54iYHKZqIt1Nefk``iP8bmf$uxf76ft%fjvPnmo4^MnUsQA+GqC6-W>%L*y#o3_;9 zdf|H;AZbgKD2cr8tlOa<1DkM#RXOyOrL&raX~^?jRfPBZmE0?ob)7RkdX`#tezORR8htVdL9<067Lny7V$0OvOH&v}x-%Wg{p7nz?EoRr ziA74z3QBl>9F+lkbyaZRQ)K7VUne<#A zP>K0FOf;o-rF=80_DQaEcK~i983n33ePH7&kP%z!24agH{2Y$@gM8rz)c=xV$$JA1 zftFp>puG&{TRhX%CV;^GwdD5GWK9Ln`4Gt%lU*kLX3E7xhGG2w<-u4DN`_Ed2e(nd z47>LMNrS=jaJry0C7|avpeZB~W%~3N?h)jT&yFRnu<1=eQPcl9VEfbx(c?=i9yMx- znv%O2HloMHngX&=Ei12(543`|LWAWoe#xPO@s_9Ca)C;ci;ay@w69V>Vs6ORa-HRw z*{6k)mK=Ib@M%gY&LCT?(s9EMng4;?r&=aUiRP@DJN80VZGH6c&HEnF+9KuqfKYN3<&`+lluI~R#!gR}B&@0%=kIkdh=MB4a640lV6Av%**988Q<0H zjz6W^Jv}`;5{Sx~G%I(%hNX)kiwMNCw{6^2AvLa;vB#nl-)>#~l@VUh{dHrDHA4a4 zRS2tK6+xnO6$5xe4O>R91Q1m;jBUb6xS6zvR4DP$X_@6>N1 zW9RQ^v#Ja={n0CVZ^%FJ2aIk^I2?IXLhIy><7Gks>BTz~_xKKnjLVuJ%G`(#W2uvcfGzr(TC90E*lBW6m_nJG_euA`#mpvN z_*GQG!(?Dwfcp>Eqb&qRnoK3 z;-Y7eU zJpzBSkMG>7DZ+XiINOR=&&>mQhkNmq{G~As0{>>zjh7*Q5~X*XoIv`!m07!NxHa&3 z;I3isJat?}a5Yh8K>+Xn{PB9y7)%rPq}Ok>U|4v#sLq*|$PMZH!b;9vp9#QFyu!ko z;tR6rYiIInI2Y~*d;+k6NpQhK%lK=LXYICND-}Q7V`S9YMs1qRUSM2Yd2)J{0VTWd zqpzIM;PIlcoKQWysr)_p{gDS%cc_^2PO0;|t`eQ%kN|;vI@d`277D)lRg+c!HND&j z<8JMO#HK{#gFlA8@L+r^xc6sQFig}N6W-x}h_ z#zAyk>+j!}@yN_Vc7RS!hO8_07~aOR#E=Q0#Sh_4d<4fAoT1Y>@v^}sGN_|Mk#hv7 z=_lw3pwyBL{ctu9U`45>3@Pfs?rIyPDOdgRhnZl^mmb#oa2TF*tfdd2Vtk8KSB$w?e#1 zuT;9o!2F7fOKvIK6dnb#enoAv(M^UA8S|swI^&|*qjchf)wc2gJfaa1wR=4^EDCOf zkodI}G=9!%iULN|xK%_BA&;W(?i#9jaLw0ctT2F2S3J%UHi6;)l3t*YATEsyYu>iS zk$YQqQPOXxd5Z`QGYT*O?szPl*KpT~o{1fZ4}h*QP`Ra7|*>sAc7d~g~nEH`4AVQVHG7$kN3Z}B$G zj(yX7@8Z*fbNMOU#pEMuK%iGUpZ7HR3wm8A(v@xNHUI(?r%y}m0Sok9de`{(ReG}# ztpBC=aSO%uw$?3RaB|`YQz5+c^#w`o=!I>p7DS;uS^SZ(!u-~>2ETx4Pa-&vMC;=V z`1SuUG)csYpNx%&A+=Iu)sW=D(58@0Uo}oU9guh&`;tBQ;-NelSxph`exz%>EK4V- zQhH)xrCXXX+SN^dFBNfIV?*1{qYoBt=$tqNHakcbVZgL@_+K)BpdVU2b6P4*Hkbx& zy@--1p3yFFgF&_t0FpURaVV!HkNiF*X1aJV4G8vWk^*Wz7`x*u!~#`0cUfivlx;;5 zi|}6Mo|H-W)1W6~rjDV=YC9Y}qG|jtR?sxG+wZ^zlksPjng_~01CEx&SKj*{feYW@ zMe(JVu@fB1Upw1AS%8==g1p3CrlLm!g-Oh^g1P$M>WtXv3JM~590X8+<08nM<`t66 z95D_QRX(9axRvh&i5pYw$ z`1#jfc#H=_kv@wZ>v(gKQ_>tf#V6-%8l7)S)FwI@?dS-)(CCPNa-UNH8-yrTVI zy^r1fX5s()8&VvX!glw4_6v1#L7C5ZRE@Mcy%xw&qpF<8Wb{Ht5iPW88{JS zH9e+iFP(JfcJhA1uQT9z_IP6?M7=J@aU|+<4HfQ130iT>O{j(sHDyE4z)@N_-Ob?K z{m{6o8=jqOL2a@bm{T2A%9Oq>AQdJw@@xi235U@nML6yaE#pchVS19hXX(tdiEu$i!Jp5#eh1=wl_vp zQ*89LQZ3$AETiZs1|#y7%^nFZkf*&fgGSsw2OCCHj%VJi^uRWIa3>i;7rV zyd7*f1Vu>Wm*(IHCfyA&TIw9@nyh5X8C?Tkjx`t@us>RFLbFP;x;30A*lCHEf0SQZ zd%OjHITo#6|C?tFnyr!FG~5+w6!<5=z%4au1Jx2iedr3sT^z}(cZuazk);))ipMtE z!QQLz@1*>BR4hz^TpTdJ?ucNiBl#v=r00xZ`XKw6$laNn>X?sWQ%4@2E3+viLqm+9 z1p5p=LW#DP5xX(p+k3V(OB0#7m}^bT?%ilD+nHLp=Y6}ETXZq-CJumzH#c&r&?3)d z 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�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 literal 0 HcmV?d00001 diff --git a/MikroMaster/20260505/20260505144002-Config.rsc b/MikroMaster/20260505/20260505144002-Config.rsc new file mode 100644 index 0000000..26c39d2 --- /dev/null +++ b/MikroMaster/20260505/20260505144002-Config.rsc @@ -0,0 +1,4514 @@ +# 2026-05-05 14:40:03 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-dnsForwarders\r\ + \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\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# \r\ + \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ + \n\r\ + \n/ip/dns static\r\ + \n:do {\r\ + \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ + \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ + \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ + e=A\r\ + \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ + A\r\ + \n\r\ + \n/ip/dns forwarders\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ + oH\"\r\ + \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ + Flare Secure DoH\"\r\ + \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ + 9 Default\" verify-doh-cert=no\r\ + \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ + \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ + \_name=\"Comss DoH\" verify-doh-cert=no\r\ + \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ + dns-query name=\"CF & Google DoH\"\r\ + \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ + =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ + \n{ one-error={ }\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 +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 +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 +set wlan1 enable-nstreme=yes +set wlan2 enable-nstreme=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-download=yes crl-store=\ + system crl-use=yes +/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 \ + 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 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 dhcp-options=clientid,clientid_duid interface=\ + "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=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=1.0.0.1,8.8.8.8 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=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" 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=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 +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set 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 +add interface=WG type=external +add interface=wlan2 type=internal +/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 note +set show-at-login=no +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ + AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260505/20260505144002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505144002-Diff-Config.rsc new file mode 100644 index 0000000..3de2003 --- /dev/null +++ b/MikroMaster/history/20260505/20260505144002-Diff-Config.rsc @@ -0,0 +1,109 @@ +3337,3375d3336 +< add dont-require-permissions=no name=dnsForwarders owner=vados policy=\ +< ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ +< !rsc by Vados\r\ +< \n# RouterOS script: AM-dnsForwarders\r\ +< \n# Script comment: DNS Forwarders and DOH Servers | by @xmrdenb43\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# \r\ +< \n# tested on hap ac lite tc/hap ax3, RoS 7.18.2+\r\ +< \n\r\ +< \n/ip/dns static\r\ +< \n:do {\r\ +< \nadd address=8.8.8.8 comment=\"DNS Google\" name=dns.google type=A\r\ +< \nadd address=8.8.4.4 comment=\"DNS Google\" name=dns.google type=A\r\ +< \nadd address=9.9.9.9 comment=\"DNS Quad9\" name=dns.quad9.net type=A\r\ +< \nadd address=149.112.112.112 comment=\"DNS Quad9\" name=dns.quad9.net typ\ +< e=A\r\ +< \nadd address=195.133.25.16 comment=\"DNS Comss\" name=dns.comss.one type=\ +< A\r\ +< \n\r\ +< \n/ip/dns forwarders\r\ +< \nadd doh-servers=https://cloudflare-dns.com/dns-query name=\"CloudFlare D\ +< oH\"\r\ +< \nadd doh-servers=https://secure.cloudflare-dns.com/dns-query name=\"Cloud\ +< Flare Secure DoH\"\r\ +< \nadd disabled=yes doh-servers=https://dns.quad9.net/dns-query name=\"Quad\ +< 9 Default\" verify-doh-cert=no\r\ +< \nadd doh-servers=https://dns.google/dns-query name=\"Google DoH\"\r\ +< \nadd dns-servers=dns.comss.one doh-servers=https://dns.comss.one/mikrotik\ +< \_name=\"Comss DoH\" verify-doh-cert=no\r\ +< \nadd doh-servers=https://cloudflare-dns.com/dns-query,https://dns.google/\ +< dns-query name=\"CF & Google DoH\"\r\ +< \nadd dns-servers=1.0.0.1,8.8.4.4,1.1.1.1,8.8.8.8,77.88.8.1,77.88.8.8 name\ +< =\"CF & G & Ya IPv4\" verify-doh-cert=no\r\ +< \n{ one-error={ }\r\ +< \n" +3382a3344,3345 +> # managed by CAPsMAN +> # channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +3390a3354,3355 +> # managed by CAPsMAN +> # channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +3399a3365,3366 +> # managed by CAPsMAN +> # channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +3400a3368,3369 +> # managed by CAPsMAN +> # channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +3457a3427 +> # +3460,3461c3430,3431 +< CAP-488F5A8E1ABC discovery-interfaces=ether2 interfaces=wlan1,wlan2 \ +< lock-to-caps-man=yes +--- +> CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ +> wlan1,wlan2 lock-to-caps-man=yes +3467,3468c3437,3438 +< default-route-tables=main dhcp-options=clientid,clientid_duid interface=\ +< "ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +--- +> default-route-tables=main interface="ether1 - Unet" name=client1 \ +> use-peer-dns=no +3530c3500 +< doh-max-server-connections=20 servers=1.0.0.1,8.8.8.8 verify-doh-cert=yes +--- +> doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +3552a3523,3524 +> add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ +> dns.quad9.net type=A +3555d3526 +< add address=9.9.9.9 comment="Cuad9-dns IPv4 1" name=dns.quad9.net type=A +3564a3536,3537 +> add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ +> dns.quad9.net type=A +4189a4163,4181 +> add address=149.154.164.13 comment=telegra.ph list=FuckRKN +> add address=194.85.61.76 comment=grani.ru list=FuckRKN +> add address=109.70.26.37 comment=grani.ru list=FuckRKN +> add address=104.16.3.81 comment=xhamster.com list=FuckRKN +> add address=104.16.4.81 comment=xhamster.com list=FuckRKN +> add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +> add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +> add address=104.21.32.39 comment=rutracker.org list=FuckRKN +> add address=172.67.182.196 comment=rutracker.org list=FuckRKN +> add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +> add address=8.6.112.6 comment=dou.ua list=FuckRKN +> add address=8.47.69.6 comment=dou.ua list=FuckRKN +> add address=66.254.114.79 comment=youporn.com list=FuckRKN +> add address=185.110.92.41 comment=pornolab.net list=FuckRKN +> add address=185.110.92.40 comment=pornolab.net list=FuckRKN +> add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +> add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +> add address=149.154.167.99 comment=telegram.org list=FuckRKN +> add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +4435,4436d4426 +< add interface=WG type=external +< add interface=wlan2 type=internal +4476,4478c4466,4468 +< add comment="Update RKN DNS Looup" disabled=yes interval=20m name=\ +< AM-RKN-dnsLookup on-event="/system/script { run AM-RKN-dnsLookup; }" \ +< policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ +--- +> add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ +> on-event="/system/script { run AM-RKN-dnsLookup; }" policy=\ +> ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ -- 2.52.0