From 3ce6203898b5386fd5e8a0ce2d4d297b8beaa9a3 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 9 Oct 2026 10:20:07 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Oct 09 10:20:07. --- .../20261009/20261009102001-Binary.backup | Bin 0 -> 243756 bytes .../20261009/20261009102001-Config.rsc | 4340 +++++++++++++++++ .../20261009/20261009102001-Diff-Config.rsc | 8 + 3 files changed, 4348 insertions(+) create mode 100644 MikroMaster/20261009/20261009102001-Binary.backup create mode 100644 MikroMaster/20261009/20261009102001-Config.rsc create mode 100644 MikroMaster/history/20261009/20261009102001-Diff-Config.rsc diff --git a/MikroMaster/20261009/20261009102001-Binary.backup b/MikroMaster/20261009/20261009102001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..25edb30fa1572741f2372aa0bd8aba23b075bde4 GIT binary patch literal 243756 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 z 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 T4dYvQo6(UQPWX_p>}}aI7bTa*1lB3eXQj- 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 z zuaycFRv03-3VAX@gLsFWS4fT~p|wH?kCESG32HuMFtKE}(b&6X;L)Mi>@6;xIMm4D zixTkBIrauz_rxy~s|I--?NdI;m~-~1_6ixactyQrV}!o0UxRIyncJ$YauJ+$(#gaK z?%ynk!LH`{Z!r{iK|W(79tBBcRqILgX4b?vDOCbrreq@DWPf|NMCm}E6q2*6>X&M$ z7(F^8UN&&AlA%3bL*UAN5)N}}c6^Oq1K0z86!9HDKa@Le>s33nEYywEK5Jd^A#-o? z+kUnW-$|@A4d>ZPAy_oCmL}wvH`q1z5Nt0y#1wR}+_l-)96()LzS0Zatt(9qZSY@N z&;autk%pjDr{z$u%-+1OcY28&4wgIgOJdAM5~;7re%>VwlK>xJHma;glgD#AkGv|K zyk4A2AS_ej%lz?#d~-G!tmgpDzMYODzi&D-kXYF)qq3k%XC0=?VYf+qIsF)YNk0NN zVj3ML2HNotUmO+aT#|`VF(zS&GV<5k;uzdFE~R*#N;i#L99uT?br?XO1rh1w!g&2Q zuKlRD+81JrAxP1bl0yLrn9(aDFB**!e++9Dh#Bap(&iRUQJlGVWk;&W5@>g=By@3* zrW>9_4MaHD`(;3#E|ndvU6t5mC6nWURfb@yzTTZ#Fjd$VxjNn~w^D3U)wjZSA2-H# z7>`Mhs6ZiiyvOP6xNv?&N<=D!MJ>ljV10X`lq3{#qVMzvs&eE^Hq6f5h_#GC_YU$8 zci2|)2#q-idFcniHEEw@0m;C}G5^2+(rsXG9hE7jwpLP2zJS3oOYtdhzWJ4j}FvpjQyNfu zmXyMM=pL|KF44gFV}gExaY4USLV#5z){}$^p}d}pK6*r#frYnmzA^wrdbrBiOf$K3 zTiWLdxCBr;m#^RwVG|h)3Og2&=`2>y`;VDTfrAVEaYZj7iB7hCA7w$b3Y))dslr(7 zZ&!J?o_UU^rfgf;l=>u04~cP1>nElhH|0DoqzS8^mT_obsQb@sApXRZBzCkY_fHdL zJ}6*NJD=>wtfOkWfOLI<28UI;Yd&@jG>Ny>2e!=@dDGiSLmF@ySCyxV_$;>c5sNX} zMf!n1c}T=A8ZinKCD_u!_632N6LP24P$QlV@Txc>6hB2u#i5?q09pM>OIE2tEB_B= zSQEP<<~wxhQf>naMd@e~I{fHMr?{pcL&F5!VM9;;oSRl>e@*bx`uA`ixQItF}N|5AngnPDbB&>N9aQgO-Ou zVizbu&%3<=!WfPY5*?Gg3*=~2Y>4&PKuwp2y{U?KLqnwn3U>6m+WA;iaq(c$tir%=)Gk>yR0;u9t3tHn|LqpzQ1-qUt4p}#BLOgIbznWjZZt+GPd)3n!^6>v$ zb)vMN(a&V*E)PfhmRGNzzV$`J&RztGhAiG;%OWXhS3}T!zVY@_hC6I;v;{)c5}ZR|{;=p{Ss^I>!>SLj z;FaM`GJX8h&k0LdT~Im`&1}bo$`y2#Bv1+poM0`D1{qcdCOG(Qy$lgNd6_Dx~>oEBg64J z`b}5fjxYlW;xG3q^Gvj&GP#lfic!5T@x?m=x8R_=b88vS*{Zcf9xBN0FFA{vT1iHA z0zmjX{hCLD4RRsW`_r@e{m9gz)itD2m)FpEqTxit7MdVfrGgR5R$?T#>Y+d8RwTcBt(@D9=mJ z&FhW^j<&n~!x#aSEG|FHK-=YJ9R=6M6ml`bLS^c2;)1q<2-bcGW+S|;XaX$i42GUr5_g(P0-NZ?0IAgyO%z^fOA&Aj+a(EEV3Pk zZA+fubzvsa&GHzf=jwDM8p6gcK|xUo!_eP)_dL?ksPFF&3(HCd3%>1tM~Wa$&0Z)M z@Zn_BQfMK-LhKf%8T6*0rdg_wdE2@nZ~r6bVCyuPyf&pVe^J(dFSYlTF?07aV$_xd zr$${+@QhTVZ+fHUPtQqO(~;1>`q*%i0prHgo&N?}5C=Sd;AbC>C0rQtooxd&mbRPBfzW(y1aK8d*cIv?e$MS>~}j6O4-iJpc%A=jF7KL(ht8Cbi_OMNMT~jV(;@jXCzRGAvf^X#(Y}^o>hv$@Hdp~T19@E z-8ZmWwEnT!oq00lE}JtfZFrO*1)ohpNoDUY`XR4J9`GNNM!~ZBC#9Up8xSyEeA!W zPfT4#9?w^&5d>P>QDP#%Cpk9BSd_-M%;iv6);tX*+sd=ExWB+XGpME#$fD5+WP<|9 z5jkPonidgX3$hkdNUhG-17xgT|!-Z`i|J93=?o~}GR-s6h`u3!F zdRC*|4HVBF$`w@S1KZf*ocs=47{#hBRaeiJF={g-$_%zRP!vm&BO?faqJ@`Kro0!@ z4+veB*>=3xmA&1M&~;i}q8xi{#06HwZwt%)c@vLWObKjAh|cP)TCM(aXOW%TG(r`D z-K#|Hbj_D}IeTc70}@M>UpP65TzUM0AwQ5BM(*%l#S8a<2yslP!d-z)!qG5(q{%EXg8>9GY)=~?4)Ky2OVj2v zhB{&&>m2>=gQ{Wi@L@}!-rc$F1v+!6pD{gn6mTW|12z=Wsp-Ix)AY96Y+_r&8l9` z!(JM}1r7ilMNHiU{n&88c1SBwVaFQEzwPPv$0&IT6ZL`0k!ofKN&+yEcdmR*8X8X> zR8_9^N{f;P*y;+yF9P_E(23v<(ttw5x$*8~m9UNHY}|(+1Xhx_aGRx9=7Pc`vCeRx!{)ZU%2<8qfiE65(@pz*Ym%n@ht2@f zXp)$}1-fb!Ep$qwVg)%^q}UAj`~0if(GJwC#G~e!v)4s-htP?+A+(<4!Bgi5);u&` ze5POg_Ax&jd?;3jq)C@2B+lRF{re~s-AW?xsyN`!nY(GFrQ=)vr4MKTl511tBd1K7N@GDmDlAasrp-C-1nC%OEy9dKtr?pxj@sWwQ#Yb?E4Pon0eSzmnU?BljrRt6;qid^*FY)s&4ophWFmU|s%7Clh zIJL;|C4`&@J~DwktxT2pc6)HsorS@_yj3Y6B!%0U0E%gKQlZQ7dQ{WCJS|yE71x6D z;>y+@7sFXedM0K9y47ncA%l9+mz%>3X5rqeU-q$J;_@Z=gd|_;cbr9DWT4c_pZ#op z_#xF?wK`zNnF;V!7qVRGLd>dhMN%U389y+_x_6ZMlDV&VaSexm-orJ?d_SW&IksFTMT%bKb)|JJ%M zy{GMec}LO*RgnIzip4_ZO@(S&jxj5eVjb7-Mjr;QyeFUOp*RRfiX5yRr8Yda+~Oo| z1jZ8TdNq}fv)Yf+e&1xi1$$gak+U2NB&34pxw}FRWx<+)l|I?B``9iSaO|Q~FJ(Fx zlKj8YZIj4Tx6ohe1mx7j75^0pjEUF(QF}x3qmUHT9udC^QhgWL#3^M|^doB(9I3wg zjhc182L%hy>bTDiVx0kxgv-+WBD)&?RLkMSQ4q5MQFL$#Xa|+*r~dQSF!G&osG&Hu zXg*HKXBt6r5WZ{gQ;p!(oRW5%;np?r<|iGYmDqu#!OutF7Bc8-)TWfC^CG z`Ir<9b3+VN)lDq@i+Um^?BbkL0*nNi>#$?35TsHhCPHwsg?=hQ1DTXmY3>jNy{AwY zQ?=mo|HX!vJ{6|9oj8tk8PZ^|3Z$$=>j4Xw@Hc7VElA3dPT9{0ldXm(Fh#l)L&rNO zhMPeZ#A(0mK0sxfV!Y<kuN)z}PdTQ!}awSin@BIpGPK*lq zepay7;#q!#ctp+mcv;o<;})p8UVMto(zqm)AM4Qm-k1aO&XzF5h1vN6< zucFM!+@~IB^~n4WWFaLc8wcgu=?K%ps-iP9*8N|98$!JR(bru9JXc+IVv_P2Y%KU% z)_36S=T~hrel!wJ!G>#sC$TBA`;V%*`wFvoV?(*X&|z-0>0_~1%G7ym9B8YH%B(r3 zLsRbsRo|3CN$abeT4O+JU^@pV7w=)hifo4 zMD=`<)~B>A7*1hc%mqj41h2dZA(6%^Ce(L`(YYgk64_Hb+TOVX)eFi*dGQSif|)?o z0H2<6v07HOB>knKtJUYT0i;o6v%_IFpQ<&KkY|aPyLW|b3CY8qYhSyXS8d+-VY8?d4%-X#72orgWsOCV zODAhu%6?$quR9d0r&xw*az^%s^&ykRTD?Y&_L>Pxs3KH>+}=w)9a*Iw@KdaO`5%&# zNHNc|>Gy_<{9|nMQ$K#MZ(`FwR4=Rt?pjbBw4XaA>*_*@Z3AiGvb|!({Mug0qqbsU*JaBty>?q{hcs3V~b%CC=>r z%45ZkoMxd>gjE@WATL?O9l_Zt0aFzqV5JZnr$GigmN|Os8??2 zb;EL&)09!X^b(^MvrGXZBvlT`2j2!#VW$X-7Rt6gt@b#Wy{ql;Jik|xTfuj90gmk` zAng1-=jq_tXhg|Vt=UeU2#244JQ;Lpw{yneE_$1}m8=|KIJU4kT&4+W&E`j|j;?Ph zlCxHmVAE)pzscXf4kvp)H+x-5(B`#{TM2jCEE05*3Of#_%EZd)5c%xaPAv%{aFRb{ zo;=WAuh3I|!n0q1M{Ir6AXCtiO|-}ILn9i!yCkce9I=}Wc7(Wg^&AM}hS6s4$g4i)p5VmQGrJ;uc38OO(@~}ne>ZpW+vHbUPoct!?Wo>3 zy+d8uFd`}A9rZdDJ3Xt0uryOihsr;zybq(KaWCkLV}y&6jNAfB7$Mh@20`9N&oV|! ztuZnUqCQDk2j7&~m|bs_-5NU9YLP_dTiNCmkb2gbLhI{y)}AMxbW#2!sIEQ}f?czkz|(0a3*F_S z;}LpY9X0QNd<-MidTCA;}Y{_mBvRh%@wI<7p}Aj3~pjcr$P`R z(B#0!?;YiR$ko)^!WKRqAU(q{S#o6+EyQuX@&}=EOBU&=x8FolWApS4x8F0*LdcWt zGfWjIPoo4em3kzWHHxqn0e*C>Z9ldCxlwj&YsbCo8%OG7guhCN|!H8%MJU>*e zQA{JZxS@_wFA_l%g1bEV?M2Fu2(2$1)&XlLTe-%YO{)%qH2ntflek#1qN9VbwnzLL z3;*GRHy1t7hW*gZ4f$v)@VMoPL~1N**q|rRtdGw6%C8(A58}_1%@s@R-T!~o(D^+} z06q(y!hH@92h6z8p|}Qj|LoQisEr}&b(>{rv7(K9p>HK`^F;U^q()|UHN%Uvz=Z>` zY5n6;*>(URhL=!Yn`azI?5O|fW4BF?CEvIOw0tb4L2gfM(@i2LuirlSpW$hmO#3%^ z(zw6ujm5=Ov$75C+je+jf)iD|{p}t=_)=w@@v^0S7p2uhX_ue5!(GdwSyb;KCqJIp zF(xxkyKC2pXnJa$NAzz|ixb%};S&|MDr5a0rzE6B$kW0Rpf6~+W&3G_qo2!Bm2vH%-wNTx9|UY z5%ukLKnV68Aj-o2Q+`gW?V>cXLti5mR>lV9C26(z@Urv5?hXP?oh3GJZ5!4D)&RmZ zbb;1s0I%&qVw_qjxyMColFdPu#;}$~f(WH%fGb}h{6^4C(PcXM0pY@82mj9-)XaK> z8`bit#26*6IG^4adW4oATho@&I7kkrUhXx|%(Ig!S>rx<0Q_re!3qbl73=U@3V4i? zdVHVQVxdMkh}k(UP{bD%;@GZ}+tTz+I4q5Ek7&OWU2m(6)*@J>dc}pEIvWLtiThxo zTEHqOhylw?@i6_zl&Hg{D*EZ>>oFUb`a%Eiy+ZD;+J2sgvljSj+ zNqc+ni3T~OxRg3$0oSpFn7$)yxZR6NDJ?tw1fp=xW*e=b5*=#Mq*PvU*wJ7~30#xs zoxDCmLo`G~^~)vj&>${@#@Z?v_7Q%|uBuE45<@~-Gc#j5MLF-L z=DTM;C!p4n`v!%#Uc;w501oaKPeuhf`G3!?MyEXcryv-_doa7!d^b2@)hUk=%+u42 zP01~5%Ds*PQ3Iww6`2vL?d!DR+T+wd`~?2Gu$WVK;+bnUl^w8GYsPAVQuy*8*C`d~ zeSr5G6gTSsm|_(h3em-f;a%(K%Wy68u`A>Cn)$(RDx*CO9wq}#)iWZB>vtzgkER;- zhENE$WG0+YJvz$)+divVTEbDMPqIuHNa=#!cro(rYEK$AVBekQ`mRGF88AJA+Xumq zoJUEajVo9{CXqqoFC5ki>d|G!M_N;04ah{ucvZQDwSEl`aWFQmJOZ8YX!6PTo4S!D zyrLHsyi>OHoJpBVlH3a(k)f`(?sohAN52b_OKAe96ceEVw-GmJ$9jT_LAgJlh1Tr^ zgP%!fs@_t=BzkJCay8y4pTG7D;Bw8#G_0R}nW|+CCU=SW*rc06MEE;i(Tq5B-BIA! z3720LE01IXD$tCQB$is*HVeuKNYv2LxgGM0d@v3si-V275}we zSa_{;kNvK)YLhm9^u(8Ue@U{L(V@T;A&ov|4(KGw0vlu%e!9r{pDkGI1_;j52zW)c zp+cOXtRucU5z$Xl6EtF!Y_@BgW~ArU=)6OIg}ME4H<(*+V~;4y?5 z_DC&nX0{G*;IRuceW4?Dk_PjBZZ)K=%I~gzYoKI<+*lV_VMtytTm>BrW^+VJoqcEFm*Qza#KOb<$dv_#DU&!sxZMO~~n9w0G_{&rCBL zztTXA8qcH*sTBk@k=(7$QMyzUvmZ<>+xPm~dA&&Oz6Qrx`8r3;0c~1?`Cx>|u`B^031oJ!r?kjzIoHec3nwQ&uNbHD zFf1^~b@TznJ)Ohk%Fy2XU&0!fKUOiySXA5uC?*_0FFDN*SkIU+J_tJ(d8Eirxv%=K zz@EW~m#@qqRu!ZXKoW=7&M7*g5dJV3&X=n|xzqF{Ri1>RW(pQl3ruS`mtmjm<*eWX z`}|YIq-5@bOu?n6>!%Tw+FxaD?6IRr@HIyXTL5*dgRmocTzt?vwm zBA|5yv2|$=qHHiTS1obb5?p5Srf~8U%wr4zsinpy9F@qh@f96%*yC=AN0(guQ<3o1 zriMA<{&v~+3#~=+;EC-|C03?Do;$vBjV*$0M}IoUOS0mlQCreJ4EY4p$w6n!lkk^( zZT7d#GAe+Ta&us?(=vx3H>&xa?7UnscKuyfRyv9RTEdMONjl*0ma2H+Hh8>sJ9e!* z^zv#__ggW1YgF{^i0$b{0#t-InCgW~+q2xM>Cfu-RCo#+%%_M;rl-)FG5ql|e59DvtMNUjd$uJe~>YCc) zg&Qz@5GkH;l2fL}rX2ex5y@&JVz}h9AZYi0)`h#DdX1VkjC=}0#baljfBW|7mwJ7 z=%C@e7)N}CXfX>}prX1*03>7*Y5q2$_D1lg#D>l7pI>j0u0w6nCwJLDE@Z+7&4B%Y zHx@g^G{W|NYtIOZ%Ro!-B&BRQwEtyOBnM}?&V}!7?ecaB!${VkeCnM;F6l10MOU3u zim`@$L>e2Mh7MktWZNK(5Zbf!RL4=~VuM)3%NK~gzQ2^WVb76grn zSBt`HZKMPN!kc7fUe%E~-d{t}5o~ZzcDkmUc6XH!6@!gS4)F!Hm}zv z!Upg(TO)i|NG(+)KbZ4{Md>@D-F~^zil9oY&6RTvvwUAWalkUSS!d}^{ zKg>+vDToxY`#~h9^Pi@n`i=~h4P$Ao-dD?I9O1EDtb#jw!_j1IX9Ho=U7;OeOaIV6 z3Q(_8Yb9R%z6t3)UZGYy8+VL^kyp*L7wV3s#ibNF#s7seTV?MrRfxK*>V-wNpp&6i zb_^7{i1s<_-oqR?u`60GHAZ5h#07^YV*bVXAQx+^n;mhapvhgVYw`OtoYcwG;(#}| zeNQ$7vI47m5zmE`Oh^3<_KL>K6XM!{afH<%s5tWjjI>oGVS|;cL3E2{K}+z(vS=gQ z$V1td&kG?OHB976)?k^ruH3KL;x&H);W$R5LnnJ=JlPwCq8>T|ANplk{^y*XMCRm$oO%z0EAYl<3_|GE%zXJOkWkX1Bo z=awT{pIP4OccDqU{N!d>7p_m7k)BdHl8>ow<(NsqJRO>hn!io(^8D7jVH9~!>MDqm z;Md9sDL39YHRnWJ5uv;00zU+(id;9bJ?-@dM8koIShy7qy<01R)@nP_oU5<#BB#UCT-N2EkA7 zX=gDzr|$TizZgpQ1J<^jA!uGM7L~js1MtLzCd*3{J7yV)f$A`)URzIukfO0+xv;a!e0J&%Uh<(w;RV*-c&SA zw#H#RI8~lkzS!QYKBC334EK2z-49|>fLw&&Fn-=#*6~$Ue_exn{wb-;nwp34RIFO| zjSj&W1)i;9f1hzAB=_qVxJ|)B)c^6XB9xnAbF0_y3%^S(NH5`)q^1w)uB4eOsp}Em z7H7ZuqDT!?-c9hKCqRoX9Ry*Y0hQ<3&4mgNKme%V_k)(PpYBQh-ib(0$J}Lvew%dV zI~^;*9eq|Iog)Pbdpl520s?<%5U43%gy1~#%eB~6i5z6CLMdKCEd)b7mg8Javh9S$1V}WtB zj+XbMQbp=5_BF~~{sWEwyeyZ4>ku&P+;NGy{Rc8OSQY-ze-(cn+&fB@oC@M-P%dN+ z85QA?3d*KLt7oH&5$K^f0Kr}<83q6Kt!>YfjTp?<6IgmeLuL-TRZD2a3K|>VPDYlI zTr^&PN@v(tc#aOzi^`v+92v@Y-*usGXriBO)tyuZyaCpIQQD+M2`AEXk$Ad}?p3ag zbSof02|71)Gjy%1F+~DK0Yzv476=LbG%#(Vz%!Y24-TA*G0`EXcTfLv-*QEp+Yhy9 zp8$>J%7d&*fi#bM8vwbh{4BaE9=NyY(JzvorN~Q7Z7<;Tq=RcL@w>^QPGgr;eK5rN zBoABEX{wASwTd(9oZLGU{*_h}5)b6CA>n9s9m!5>R|5B@{uCP~sj8!^Echxo$zaO# zO+u3gvi#6PjDsNyQO`EpL0K)wSK8$4jeQ;Wd}-kr<6{;7GJ(anco06;c}>tKv|LQs9XK*$g%l818p@*JXALwCKL zAPEZT(KZR52%GeG%3KW)Lg*Emf`0AEFy*EupLbRc(r;D7n@{JQAt+#dJLzqh2?Nhmz)g0%Ysqq=hTe$B;=4{HB@@%^tGowP9;0Z< zs#xD7qe{lvKXmv(hWxtlVDUo!^Y4n91gJBI)BVCMNB8E@SKHMIx27c9%^{FtT4Jm@ z93aGb4Z@1epUaUH`y-{S3Q+?NXb@2tib@A%>Xm2mGajAWoV$gy+UQVcoPrXV4Rd%M z$b?SanRW>Z{15i#`2M)6xlfO_D&1MxNSn)uUb$kFR(x3(n*Q#izyRVj{5nT|gGqY5 zKxt?|$c%v0d`{g}x%-O6_2iD;r9IT|!ClblZAdjw`gC#tm=pEp}~=Of`WeBL=#SU5K)$&uHez`Ok>2KmE+*NJdKu6Ub|9`lEl5)Jm|O z`ReW4)3n=+TFoE8Osv}?5jF9%!-YmBZ5|-QSmoQT1K|j+TnzrrvDTY}d_Y*XqYph< zT4uaTse+jrC!fcnro0kYlNZ%${P|{!BC%K6o!M7GVx{e@bHgZ$hKyp4_-FgwC+(9- zQrwCgc>joLCmg4EQ>}vCzkmzD@;W zn|OQAQ*(C0)?U3?Gu{Lj9~Bqh@Y(eF)+NE#m+s)TbEWf`^4+{ji6hMpx-2YGQW9@3 zpF+Ia_Rx5<`R4MZIu|*zVE9hEv-+rkkKYZj67)=-Se_ySVzZD^&$lnVvJ{cq@ zrxppm?z|Z3%p$^LPR1=mD@S44jehrg8?(?`y=>BdJrovtqLIxQrEIMwgdX;$$_5)^J0^T;-fWu zq)2?!g=Q-}1LP!YqcD{6HQkfh9-ENyA5EaC6Krn6ato$^$ozukI6{4~HJ33SLC;cT zHJ?Ak52&p8;e(DMzE1SAcyYVW&IzWjg3?=F*}HkO#KiNZ#lh3rp^{2&dGdNpw}F9G z{niFz3(!yRfSxzx7x{fzkaa!vgfD+<@~yIc(Sh5qI$&-_2V@c~O9i}czndv{VX-AD zPgeK2vhheXqN3N|Q>W&7nj!l2heAW=x&4#%OzlSapf}px;2^`?(~i9e!Q;F+o3_XB znBvkT(aqk0KiBLXQ)b21e+jDG_{HkChunCev4*nE_fSw3qA)U2w0x#2OL1*@B%>{u z3fHcUBg)#-5?-sHi!#UF*?>p%)F%!8rTrb@v@}EuGDG%X4d8_kEP!+kBT7<-o=Q?p zotniY!s^*${J7aIt<1zZ#gY_X%=2Xek#*zQwUL+wvn-jUtB`4v7BHOdm!S^jH0MX< z&M7&Un^i(ihCl4c7eRXZdj9D*Pt^^TjJ_ZKy1_nmWcEWz<*S!#bJC0EayaS8ipZ&SYTxYGe~Yo3`_}ha=T6Nd2`uJAetZsWH))6IvR~as9}<%5Y7;SR{z+TsTo^cx-uxi=`Mhl8kVzQCfG!dB?hS^ z&1PxOWDT}VvBXSzA~N}%mflFV|H>db`0$Q^+=3PmWl) zdLVNsBf5%v9yRu4{_j{VahUpeu4SS*%lmFC3dd>i$FG3o_C87x8j%^b&o)ObL07GA z)z`A+vljsOBHumB&;_f|EP((m-mcH%^}TgPh*Ogeq>9|FWe1#|&p1;I0wDFR=MA6H zzjdmb_}q5bJ;@noL22(4ZoF{@6r{mN;N*T-Ho5F9WOT;C*aflE)n%~sm?kRP#9C2m zLCfb4ecbB}{U?lYAe)RI*ciI`=>ngE6E1lnwV=xfhF}wF7zN=d*a3@T0jw1Rp9oGz zs$x*<3zh;?xS1a;DQBbIibpW>Qd6<@_?@2W<5ZHeiw_d-^HlAj)NE7&zhR*4!O={$ z!ZiPX_?Cw1YgI+iqTPa(h8#+3suS=!F~FbWZo?HYowPB>M1txEs=F2LH0=F+gBhfo z_umhy5PKc`5AJ6ktC7}Jt>dKtXGWp1Hl&rEw9z9uV&UPP48pGb;E9g(EQx^dakO!T z=D22Z+$qPzW929$-i9KRc=cCn8|FA^g-0|?i>UJ;rAdBZ^{yDL+1Rb-|8%V|9M5uc zbJi3)H1sug+zkZ6k}+CVUVh}YUsLQ?6__!a=kKE{YDp*n;^x8c#)=0v zwx-1K*j(mFfdDn;QZ}OaWQQwesS#t1pTU7xW*N(O8%(IM%AW$(kn0J7!{lWZ-gh^D z$LIdkyv$?hyRhl-eOF7Gyu1JW8h`~bgXU0yp}M^7%WJemg@1_;rq%hhg(4ns?rrF2 zjJyV@Ji^;f2Zulh(!EEe%F-o@ktvxe5QvtsyiOLaGkKFvh6LocTRFbguc}v!XBwnm zkIZ5CQ@?T8?JN+<8EJJ`>d-H&VltEcODck0KCQ@OHz_f@v0N>(q~8`&$ECJ#9z-*> z=`FrfXQ>L#vIsN)2N7Vk;5&!_-e^i*f~@PYcm?$2m3O0Fpf94IoQ=_ZCb7xWo0rN% zfjAJFl1>2|zbX9xO}A-iXB8D_*yI8BLbQ!5r^?N$65`uYrB>DszG_OUHM=M@v_yQ= znVjhOr3`;PYPc$~24s;2rid&Y;^r8Od!#A>jnWu%ifZ=CIAZie%dwOUd8$%20#3h* z&P!IZrU1myq;?whnTryEL^HTEf!z{55RzxWUXI(93{)%k=9`QXe~Ie~Lu?6ENyA8A z#IS^;Ez)N^Rc^RhCbvUdxasySgnJ=M7+LGne_QBx!Ya*Aq8 zE($whIxvpk-z4ic&^$0e9)R0(px{wQ0zJOSSw&$G!0A)s+|mOPB6uE1E1?d%aOStL zzA-216P$t2OJ>ZDf$QKjzQF507}Y;;Kh+xQ4S%t>J4re%Q2mO^_;v0(7Ti@N2a-B1 z2z{fPrYoM-BwJLl?95GXOVLFKcN2AM(w@rlmKcN=`>&2GJitI$H&rwN&uCuI z+P~XbBy?IFH3e+5Nh#&k1$WHJ)4@no(E<*DbsXwCtuBW;Fjf5wn?-eM++%@qK3^P@ z%AG#c1?W^AJ(DATK(-Yj(Di^fC%W*hJbwiHG=OsTpjRNc-wHg}3#7C@2$mVYMkqqH z`Ido$(?4@=IU!>UUDfhjHfuq3Q_F^s@9TB`#uT8QJo7Ql5y#h%=f5Z4Z6$g%o3tK1 z%`%kQg?5vVsR0cv{Pp1&1D%EP>ark^dr`nU zz^ET>g9ti8sfVTL!H^U*iW?-Vx<>D^ABX2L+8Sunc`E*LK+j;y1Nb^2RESlN#(GA3 zu1Zg~q@7Zm^s@l=fjR~1d8?N82wTobAv*4XDN zlNvs`B3J6py$PFGP}ef1fVi0&@dD;~{|~NLzY;pK;m8CR;KnHmg5SzagueN*y*+UX zb4iw2vGyaw8}qp2kC@TPr|Lo@&6V$m-Kz-FBlM>}tyhi$^wX!WZO4NJNv`@KW0?R&-ky1~mmw@^!>(x2rjH?Gi>RhN80q+aQzN{>e1H+GHd(%ir* z1c$!B%el6NF$uiAZUUquG8Q<-S4^C>=Oe_j-JQ8Klgc?$sqmkMf29-bKk|=h9;{P_ zEI1O+Y_+ro$xg%jsy;6{XJ#$Yrzp>Gf6sf5dMbhkkEoImqLZa#ZS*X_;Q%w~Ns<%9 z+r>2Gcj$xgHMpO2UFUmWakq7^dA(|SOgZmlE~IH+SN~^@B5HJZdV$?)gK&1J8BBH+ zudX&l5@G4zRm}&5+q+oZr;)imIy!V}^==9ZfjxJF9jRF6{Zlj#pm{-r1_M`+)zE}F zyfDiuf~aBL@`g}ux#ZdF5`uE9o|T09QhAsXhY*$B#4C>)FqUSJ|o5xBHs3k2IZto=p zX-Y5r0@k4@EQgzDjQ@sH1rk({@Z`JVS@Y$H7v$Kse6V%zF=iiA#hqvc&LVR6_16kG z$+?@hMA#OGDG3BfSLn<+(@w);Ypt`J7dY3OyLl}djmD^JL4Qi~!VWArValJs=^9+% z7JUpSKuHOB)(ypU)hC55wkbb3Xw^3*lOgg=+M><;m^7)9w`xEDZ=OsUM;e|G#VC+g z2ApVO4YAG=W8%1cacxNirzER1h5!;-QlbKSEKa6rU$G%bw?S9EzqaXW8-96ynSzmY z&65kwnAZyHW-oP+Br6xw7sGfrry#>)nbiXTd4b^REWEV)ms&>+ zS&7ohox4E)23XS0{o%zObE$ch_Y1|THw5WI zUutHqEpOy<%Y>RO^=QPY3gXi>MZ_A;iJt^vZx&W&G9?(dy4AgSkBYJ^psA9=v5*wp zbiJb%by*4F2^uvtb8zuW#I_oSC`)R=#y&X~a)7{oweg=Wr4y)ai>=md5SV>CwXGjt zgN@EL2!n)JBbo8xRKK;outCS*fE>k~h7-tH0N@aE ziU+?eRX0V{k@Wqd6SqMaMxi%c@_CFHFa;tsJ=|rZALR1ZfI3%EBB`QEsfIFI{W`0; zHEF3LK^Bvrx1Ol4_GxY@!#qgVnO19~iDDn0qAo5&p(3{dxHlR}I9*Ot-@ zY@NOq#Q{jz9-gN5Mu_tkGJ~e7CWBgJ?YP)KuUIG5_MA602Ls=SUZ*11MYxORG~4mX zON}sa<6j_1WzjTe&>^$t8v{ z3%IN|Ae+=h)5W{!GmcXa-B+YhOUuAf=NO5`tTJ9wu({mQ|!mO)>Ot*N>HHt3}Xy5m{bM}G{U?F)SRZP=ma>k&iuuhcG}s~ zbapZ@EBN_KCK|ASLfz5fJpVV%b&9X;v7u@M_oWBf~EGKZYw@ zWtWzP54{g=s2%nX95tSQM<_6q7a?Sm4*VH%2`x`^5v9ATe4DI@N6o(fT+dhBqFK|JEWK}$4`T*sNl12Rphxbx%S9O~r|XcGE`%bMI!3Lol8b5WNd!^#J~NqhHF;(Gc|rpzcE9=mtX6&OfO?Pa43GiZGI1 zQ|>m4YUMXf#PuRtf@rDKH*5dX^(vXnb+x}T0vMKKvv^`lK}43hWV~w65`)%3q*SvV ziXocT-ucs!`z$+;0Gen>bTp7^RBR^9jSvA^9$I+AoGo22t4AVFt+8C*3NaQMH$dUl zN1Ay-Hx*&AX%Q%}oHp)b?mtadsi+E5kA3)ofqR(s^OCweDFq2%9d6PgA5qW%c8Lq4 z#$KY=PY<6p3~k%c;t7ph*d;M5t)MSsDJ~9%GoI#UThWZURn)5v)|Tb=I9Y6&`?R*& zuylifJqWSOZO?J>F)TI|XxHm&hCV3jKet@))d(#>jr8Pqde(npz3|t4;tb<#eQWhn z^4s|H33YhH@KyG2cJR0*DUyRCW3k1V78>_FZnU5Bl{zuBVV0-@36rb6+~ouB^s*Ci z+_|73!r_zk506tti5`U8k2M-9ge#_-dI1DLZG{SdIKJT5%QWruIhiNpmT2GxwP<==tZDAw^)ye1kz-#VVXF@4=^}8eea_(b6u@2+e z#NrmK=F>bf>rkswt)6*vd3I$95)gZYsuTmMee_H9RuKFo1d5KWb)<25Hvzh_D zagAx&P8h_tEsV@mgJd!%u^uV!Ad;H$pr9zB=yH%cYmB)@XL4cbO|c`8t9P;n`94%V z11z5Vg$At}dZQ#?OhcOjHH{mXPEYRzKA>=>S|r)kz;s1haosHe6^sH;SU+Oqom44^ z`5}2uyp>;@tmEueSQMn4a%&Qe2lRvLl=hAd0Oy2YvC^&)y=)6VDrRO^Jt(Oxru7G1 zJ=b!0QzT~jb^Dr-y_z3WXGAV*2omZ2;=$G@t7F9>Zl&Ke4fxHA3=#qhpJHdrBG2i*?TW%;_FyvLr>4(2gZnJA?Xw&6yfc9Q$h3*oQ$sh@_*b)s z#nVgUf*mIa0Bpb~It$MfW~v7bnZ3*2DSBFxl9ReLZSLBSJYy=t{taF|GASqpsTt5vVhPe@K1eDS+=oorzC0ti%!&I#D{*-e{o3S&f|C!qS z3Io~oC1#f15?hTQ7$Kq(t){Gz+(V*4dWdx38@jbBwa7-51)Ps3wQI#kEhQ-ZIJR)1 za+p=)|u7i*8=@HpCNcl7DkFyeCt z6`}4#C(Ip^a=8Uf)9ab)@-y9S8>!BywG)Z+0WuzcCx!rmFM8a*6A^U7zy@L4v#3CkY$ zmkNlGJ6&(IK!F+v6FYf|BjJVZmV0r5YdCY~zu+?uZa*R+>%!j5ohW>F_y3d1Ib2-B z-S+n)L`7ru4+4m;n!MP~h1LLWltBDj>z5$}Z~cYJsp~ofRfri-AD82B(pzV`1H0GK z%1%2c=goyBvb~;c_Wqx#jlqxM^;UGlYkPysYcxteYfGA+1u-z~Sb4BomB(gxekmmB zb^95i8>n89m&O`<*9v$G{+$09gBX>P|VAlNUz9SzkT`4!ajSu}1Iv6`Uk zYr2JYTQg+jfJ?z5L>u}KPvp6&eI}SCQG9BVq#)B#)3>U`3C%tcwFGNvzKRN>s+t{? zbGBzD5I=S>d{Vu!990TrvcuKq510F z19UIEaX0NJDWg&@^%%2ZrLK73NXnpL)ugo6D^$fwX#P<~n_;_!0fn|y145%`vLdt$7HIM*0bE4lmH6T=yOw>vFBLGF2TpA3tGk^|@_rV#x={Ytw zt{Jc;c=s{?DSz(yq{_o;moq!JolPLF0kj4PZ5$r#@ z;Kp>MCcVc`E{l^I3d=SpIw7;mg?pHw<(OiPF9EDtp#$N3}TF7cv$5i%~muu6b3VL$Hasgf(c`?nm;74Dfr)u;|}oBOdh zxZw6#4xVc-{h#Vp!B9MSkEFM6Qgr=IP!>LMe+f+`XE$%_odr$)bl=s%v6TDatB&m$ zfeu=(D#_T!?o9Y#&h9&m$6{KxIb%5D*wyWNO^qsb@dP*R{aIYFC%k-Dp%LORy6eb$ zpEOA?pur}CM9uw?71H9|nyoqit{2!{jzWXSXcM2N|z09x5`bP;gc(2Qv#}8zD1JhzJd6-J4 zX^&-YcRZh4aAKS`$Nh-~6U$2U^K>Klah+*auE{-fmz z*-~!!@YmEPO>QEN-T+1j>5Enxx8?f2W%3&zKJ@kzLmK~s{rp$oM273mAp~Y_NkMVg zBE0S)9`b13=qt~0g#V06H!3l(H^XZsZNl^8Zf8rgJ}M&mar=bYrrH7`oDZnMdsoR_ zHDeD$(pz7!T-F8jrYdvibY97UwjWdTL+(DHwKV=4-A3lK0B9CbnQ+(k;` zc$b9LxLGqF9WNA>l(y!Qir#k6V!;K@Pug*VBym+Vyea=X*vMeacf*R9QZ#Wla zvOvLYmqQWy{Wso*M~>?iab7EBccW^v9PKkwTa}@EXUZewljiMafd@m+(T(_JMplrT z+>Vymu6_W#`MC6h&{VtzSs_>wVsft@whfpIosFe;%qVW@1cH=^SkXRYg6zb#g_O55gMkber;*U-bG_PIKxK0mHf3M61rp|M47tBDUUOd&naIDqu2^OS|A? zpntpA7f{6OUYo{ZiThQhT-IFv8k$yYj*N^{-%CGK>JQ*TJ_XHfsHt(pe%n^5)DK7! zWin$N#?@MV&s?dW?skV5OJvjeUB`tE zx)f*|eEk_dv2xd}xvuri$G+J)58bi99eRb{Fl7rV8Tmcc`R5fp`wW$^=~^DO%uHFm zNS1K_EFJ%@S+E?qgf>rBgDTEJ^-MW*1Sjtm{}Jl-x5!D50p z5LHVi^@J&zq0ClYj-M{AfH{^i9s?yHpNU&#RfY@G)_SqYYAw#7hpy=|ZLNC|EGI{; z9Bl8Kt_{%^#r7*uQ1-QsCTbZ!@hNgCMI-LZotP=plhsdN(qeeByqm(2*re;v8Is%* z4eJ+(srgH`2eA-e-{J!s&mN?4ZJT@humR%=-+Tzs3(D^~*udb$YkE0EFZa4rv;j(P zw)DO^0#&)}Ye=e2%zqmHz#=0^YyEZ8o4lX-1YDs}oC7zwWzAAzx{)U{hb!}6T=#n@ z+WGVkz}G8Gi&g@irLEPS8S<^5OpOzqSXgB`E z*S46yyx&)!gRNkx9;&+hQy1-mIx@k8hh2rB2!#(-bOZM+Disgr_xC);Jx=F$YqQMD z{(b8DHx}(~GI~xQN$bmBp7#rEK7TcUT}K@-!;e-u0>kM;bqxsWYwp_>%t2;de195k zF5ndMPv^ahbtAI5pe*zJ0HiX#M~xnhQZ=a?3?zpfbRcM^6BI7@ZU|sYs!kmpklXTx zDY_rqcZ(pcZad*f)N8(8J4yl#jIN~IgtJ1u(5vO-gxIk%lp469Tq~9#Oig~QbT%;A zC$b(wHhB14c=WOA1+|m3dNz{|o7tWL7*!L~YSPN%g2Bd;t&LF$_p9jkcYVac$8)!- zLcjwFZgWoFiu4&PmY zP1l1X#I&-X(zXEs3}e~9B_&+A1S)^eY8uG&D^Fi@mf-JI6QzGxrk~qgSF^NbH3vv& z<{|sV{^D5DfgI}4{YYD}1x3C3t70bDcRsbKGUeA&q>XlNS)ZBh3OatuKn`zz2MH_dUX;nQ1s0?!kA786<-qcLTj0ZSj(2_gb~yE z&}6k9N!ex>69=%41PsWVhw6g-V|W{l%oI9lfB?#Od<%$Mh--0H|5uH3Ev3AAYz3TI z#yH`WF$P64*Sw44>E>cNiP-4Zw4Nu^{8in(m>`5w-H3(}%F!im8&;!zXnHEf7}dwk z6%6f}BrR{njt52(=6boj8$G1fT;c8H%-^5LP=;DEe^u58BgC<3g*t3g<D9SW95(8TJtgr-E!v5ms<<75oXe?ac$B;r5Zb&s)OkJs3vSttu9XDxGS)^e zA@pH&fy;+kpFd({@D;oGz z?i#{Sf@`s4PPa?#4H=$W-hEyD*avh&9)~%XhjU*Ko|Bw|&fI-*V_BOP&2p3mbxF>x zyWU@l&VPDN#?)Y|OP0HcQ$w;KE>)uwU87`1AYZ@6Q1$WI)V7TedvEv8ysAD2afzabl5~3{^ zU)iDT$2OlHZ*kj9Q7e}i~}lj zy4`~uR}%kdr@6FxOXGYA3x40_uiRA_AukoVm%e(ENRzR+GOt8j9r%qDoS>Z}zL3_! zp(0A~Wx&X*o2g+qqyK@&9L8bUZ+j2<;f%+}WgXKGTM-8XMwTn;Kt0IZr%WlM9vAl%5 zt;!CL@>4NDK^6ns$XZnMb#l;F`P4DOYq-P-?Sm?Y?rWtei4YD0M+NSboU)hi&qOGD zK%uV9%<+2s7{mDsw0>Ff9ekL7+ zf@WbXZ`w_#VUfYRn=GyzJ*J5&=0ur+kCGGZ=UlD{_ng+Q_{$?InIN>Ld)W1bs0#E)uA~bSfBb za6H=}+dtW>EW-TqiyVw*yJ)H+1!RZb49?};!Q1Pr|UBOI{W4apP1 zo4h1ckExBj;!RoYQ}Q9gBcJRF6iW`Si>Pe!I!jId2Et?tUUP$vR1 z?S{h!Jh9n#jQz{6TNFwB8A(f`IQlD&Yt_>bloD1kIBN8H4q8J6>v#vkwYHoh0?Cf5 zfnRj4m5zBpvohr=WSx#5;Q6)Y7E|l<$+i_Mk9amTtUZOt%nmrtK%gQS@bjG1lo~w^ z7sQYdzmtkBsYtQ&96A*-ur9)OX$0AQ$Q|A-OiPmQ7Gl}P8Z;pJWjl=XM$VJn*yE|^ zCc=^hQ(y*9qSoD>DMjAKX<@mhbqHZnGk-*ePMh z;qZHoiHqC#=`G>awu5EEHFjrGzwX!VmUjjh z!^#HldvOdgD_lv#XnHwUo}{z6`^wl8)P3r#1pP(o(wPteM^Lt;DZ_S*q0H?90;T-! zmj>jue2c{fO`AWwdmR7w+LHbxOQTYaJSS%bcnu=4|BQj{v_K6xZx^TIC7(5Rz=Y5a z{~`Y@!ICh8Q;IDthq=TsLwfq3e^vhtWFypPjd(=BIuGx7Hj?_EkxOu+n1?lyX(n>dO}P3SK%6Cy8@M9hdZ zSvShZ`8VFcgK!uPA*F;3$XkcKQ^GI;Dl{_tL#OJeIBJ7EE`L*g3Z6*7N@{$+AFql{1*cYhTnoR++ zrH-`vCN@d-namPL3T|eDGINPC$EDU<8v-{~2H&cZVSWjj8u+{#$G;_{NSf@_Pus?@ zX4goS0fkJA`%G~L&R<%Q;ETCbC%t=qER^XpKrSaM);XN@qL!@ybA`o1dEz)MR{X9jso^UH z)ty1GOm4i9Vqobo^Ak17sQmm<*I``K%f+>Nd7eX2$0eyjgSQT@n(Vv;*-g)KP=d}> zleMM1&xR_#+nDbJEhU{&&duwB2%2QaOsmGL4b@(4c-qQU^-2m4|Nht+mw6vYhO3;a z(EsQn3Etcf6ZBLSAfC@ZJSS(0pT3;3%c!Gn!knV7%m;fS+Jr{3mNJC6t~tU;i-EzS z%%U^jK-Y2V2r4o6DIkPM2!BC;=m9_7eZlHxgy=VD?1w+!PGL&WPG}+qG$C?~B~kfY zt_-|?e+w>N3UwRPY2=I*3cHb+YK`Pvn%!$9!%@`C4df;KZ=EYmQ6uUJ4@bd1?)>w>GimuEV1=t8O)cmUeOK?oYtWI zNwh3{`|=q4k@vUMZG}lf?c}uynDTv13TG`0xsbRK(Uq}X6qF)i7C@?tKS zviq(D!)oZdL~Jwk#j|j;7*I9)bAF$F*!mEzsEb(t-Y^*YtEkGsCBJO}-#vW@A7t!` zmLZyjqrRN$H#-{{@iUAp5330&S8vC5%jgJ8MHitO<=!#~tES6X53;vM4d@~u!CRg@ zW)BUs?h*;r_t>yZ)}R?Bk8U3<`4xb*PUo;a7Ips_;pKgZ$;+<(XU0SNuP~dVacyi^mxfai8x=B1metV= zC+5xk_lh4=Td@N*%S9bG?qqY?^>+-`yM82GsE(SoI90w{%!=-c6)X$1=9y_vLTN0W z{ze-mq-&s8x*n8P7P43(9iI?soI=CYXtnIU%k&-Wpi{-OZ^@Ps5xSRU?4|8KVXWCo z`R?7rFE@SfMmG0kj(FHe;5bIR2%~2>!?If!evZdKGGwM9n0^+NV-+Ydao0Job*DfR zR$tr;xICnyAM0o;D$LJQ>GTyqW4{x)L`J_^VF965`$h)>e$_0$=Cq5g14HcTuDz*l zE%t3LPdm_3ezLBqr=^?yI|rVJ`hfVS#8z{AK)kI#trka4_Df>& z+s*|w7^}p;D;7`JQ8B2yNE*3sm*zjWHu@Vzw3L0v@6bWRS#vf+t-%S)oOeKF@#lDy z@$_|B{MtB~wY>1(8~e%{Cqol)K3WC3r;OL9^4*oEA5YLFCi*+WJrj2Udy7fk6a2}j zV03O*04)AZ=@SnL(e9|sywQ9!Z;b0ORrGyy5`jN$aP*O9-<9VaDh{bEZwAhE0kn~y z`RJ-LPBV8fMq}^Cy0ylvj`)UnHKNh{6}g#OTUqLeUKPU+g>2q88RO|VqOn{UR*w`=>)*4){2uIN0E(B%Vi4i!^l_EDtyW2xmN(0 zLl2^6^Ceh=`N6&-z77SdV%<;!TS6aD>6lD$6_ACeqCij&YMDK~ts+IMgdEHVYjuSJ zQ}WwCp0_r&;IpJVIC^VCGpmXk|81zNTy z`C^#cDDQ1j7>zz(HLZ3G*DyEd**vP08?xd%nbCXsbZM!#)A11?ZGcYh&~@?*F-<~ zAhn=VZU0YK&@UL9%q89^hYbf`-=j4mIl@BD6eh}?1sq(ca{L)u+j~FEH(FNGmxL#U z9Y6|v4QVNg|G&IS(Vj%tu%inGv}x_L?8kruos@Cdkwqh7O!P9tVe<;3<3)b&{%YGj zc}2ykKMHQ)&SfXufUV%)gyIH66WUAu>man~LKBmxNR)q#j)X>rD!7H|ERQWvX$p5^ z`PdMl?4O+u%aNzglLrpbf&)c>Xr=376ms=a9_xYYrJEl}Y%Mhh(q4g|{Ri94AqN22 zKVOy9aVPg9O%c=qgMbw&Yus;_d0*g$QFLrWM;k*TB#`NT623zx&ix9z zeH-RQcA*z_Xofa-z6wT!y1loS-W{YpGZ_t3IrF&PLx@rVw3cM~A(akkMfLgo%|ejg zZEU>adNk2JX_<*+_ILLE?dCk|rzfKg)Ws?Mbh>(aKb_`7U7VDbSLNjD_~rUU!%jNf z#iCT_e#+t>Xy3ONk(pz453uG6u^JWFZ zT@7^wbG%gvsJq_eLQuSl>baZLeMmAR#wqrOo(5D!+7xQYM&>8UbS$(PfZW13Fg}87 z3>7w-xy0h=#bA0)$j8mmmmJIf*8GxAnyPolA)U%AHZ6why~13wID~~%pTk&AaPh?x z%pHRJdvV`@mJsZj1^hjuq&p-ce-`9at=?$v?F7wX*f7Eoi-^|HSAHCD#$@uE%4i~8 zcvE)IM8D5NXlBoLrBZgNHQUiV9@E&hf^h-^62*m@3PWX0SR1>f2FA>nVbphE;lWLO zJ(89@WI-&xEx~TS*{0y`9cJ3s+c>300E?0pWX+np<^PX$7=0ni-A-9M&y-p~TxFbK$e~5{Z_M0WC^#d&U z@4@uC1$8jGTjy^Khi!Y#qpI~$@KpZ>{ny}Av^)mf3oPD90tJf31R-bi3Ae(qJBe`U zylEvV(YeAqP^-k(hla{3k=Zh9JhMbPJ}ZIj9B1{g@^Pr1ov*y(Y-0WAp-Q5W%qOS# z%BR(EOXY6`E?klHz$5fmoCS#B2B*l;_4A3{E>zZ>N8p9J;hCI zoVdI$sd!wz-ssOtI7UC>s6uOg^>_+x(MF|>R|{gdxlae-RklAm`a&-U6f&gd!B=H-GUvXfR_Rmt=zKT*QSsJIFZk zah7;EK#tgm%=<^vW5Srpg?aO!2QX~9j4GEHJJ`sm*qnQdTfJC%E=R?dgY2P$J=0d$ zf1wZ6f|8LBW@RX1SM_#P78N)Fe@x(z2Tk3(ARwacF6w_s8B4+Ph>@06Jut$vL0?p2 zPafdSWKUt3i)^P!i?PR44IBlA`%e#58?Q$$6AOnTW!VL?Au_i55 zoTo>BpzUD%Rha#DF_*V?lSF8zjG9vndXKupr)m$8^{9!t?>hf~2-<&HQ4&v9^hTgt#=Po-l(f9|L_*tbk9f+O)6?8%|YO32BUcQGtri#Vl4s zV^dG^U0*;iN^*(3G4${pneGRN=Ychp?G}?CI|(CWA3#gy@<&8NiV_NX^zKqWH!HYXFMwqnkuLqBscU^M$MnstXb4_s2R0R>e7cSJ()8U&I^e7)q zod~pKcy0aI>8axg$?P+NGkd@h z4&}k>>Gj$R2abo<365+m@41Qz8pI{VR}t`eak2v!yw0|?<@bS(^j8RukBJPF_|qJx zird@Hs|$l;)2uN=>}Z>o8Y1K4Dm3@^dMO%|99(EtVs{bV?L~}W#>d(n336JTEep;F zY%tYCmtOpyB5+!DA^NsmJu|#}KbOn$qconVOo-mc?f0vKIN~+xfdySQUpppdWwb=j z|4cwhpdlFUgj5oAF#BOBB$Dzi4!&Xu*fR2J%l84#Anvff!NJlm=+RE(iz8`PxrI3p(zO!IG~?H>~po>Zf6+^0j#ifA)_ss*{*;v z2qzz8p*J){Z#~s6qKp!e)bV7Z3Y^dPUTzjW&B>_BN~=FWyHVwsTm?>updLm|DIc#5 ztD3YON0^GF*r5xqLz)!J=M$J@V}S?tlH{CTSO=x<(KNCD%VJ#S$Q)&XA5E`J-Ux&? zaJ~pA6*b)*nK9l!7i8R)MCp*2S637u`$*I`ex7qzyqu=L;WL8zkcg9~ozY_Nd>rDB zo_s|SIDSNb{kRHP3XNbIn>IZGQBbvI|KolYVfF++w@1F9|n!CXnkQ7jumM<`(h$WczO#-+dQN+e6t3pM0iYR7= zAF07nB7rT-GD&|~#Qp-MunJ~kRGl=5yPj3;CC`^YmL-A)Mpq?dElt_k@W}|6w=&Cp zDOU9DYHNIykF=`2#jHsw)m@x79B(zBCk(OLdz@O5EET=M%}BoYm$tKe|KDT?&!_Wt z+tt<6(;p)$0l^|<6ha4HYrco-Du>(!eFMH=&UNIDG_eCoLt+^Ux zAJHBwFfy8>oNKd{!5naY05;GHG>t|G@n}TiUD5f$2qoY~CE;lBGJ{inDPg z;kgH#5tGuTQnetQUjx%e0kS+Xe~V_ zdrE$eKF{QuTzk3eR2^Q@d7Bso!BEKysR@=%GSNR>)UGzbYR3rR(I z665zX2fXc<{1ON53{Qw=VTBBsBRb(gSRfF!R_fb4#|^WcI$i-tvS1DXAUn=A(a>Mv zc`5(+C)v&oJ*oI`R=Ezmf@fYaca7TZ9GA2Na~Xb+DKCUx$l>!hCUjh6{NfssqntW6 z%COfokn6d&_e*yKRSPVV0<$98|S(>_aOjP zN#4)r&+3O-Z>Yof9?$9*5m>mL<|dtACIZPMIYd zhACC9mD&;3tcxikEI}C-uG9!J6LJkW3LX<4GqodQg-TFD+3-;8I42AEu~#cX?@%^G zl0gGd)-7a>N=r}9W4SO@02>ENN4<9T&0GUOMh?g#=stwj{GK>}_O=iQ-3@lF0PQo> z=*Ak>gp@ESn099W+a9tt*33`-3ufd*QNcdi(HqDe>E#J*?!Qs`Z|3jy(4u;gxBuO# zdIV?R=J8InwZTTGL0M9~w_*r>lF`_%nMdp%x{M~pc)=-b4-g-eJqn?^W2q~+-gi1z zT=Jr6dLRDlnVvN~dj2sfHLS(YM(761hGe-V4YYlpO{stk>me)wNW*U=*Ab^(jdJ|* zxaaN;PH@&5OVH1cA8DF|p7Fj?cyU`dREYji5wv!_ouFyoSjh*X@ zitKA0jxBA3sVI$n)wNumOtC~p5f)MAMSwUp86+YQyR@5Gmt*X!7i(jv<;$p)G(4^# zL}fvKqoYf9IT#tHz{VcqteNg$Xq4jG39c1}~*(clO#1z{t)r>S0Jim%CqQTo9IMyBvVEq^yfhqn#y9dBC9{I`L?ju&i zpccVbIuvs<4J&q71?lGE7{o0?(7}=;JOFeX4ggan?poPQVR8j#DRidMF#=JtI;KXCLh6hTBJ_UtKhYE+L0^xF_-U|#x5R0qR zsBl>$y% zKn{nL@>>f4Lno1=LgoBSpn%a!q&HnXCil**t)&!R9eJ=eKx3U1W%x6U>CTxOG%ze$ zXOQvkriQ_h8w_*Ub@0Hza(IYXiG|dpD3N=Dr}hGB{>$RggN`4+h1rWNz|=*9-p^twVcBliwIn$r`&A3umNvg`C+r{XS{xYEtI; zT8tZkoT32kM@fsfOC zJlb##{a20d%zs4kcT#POQkE|k3Ix%QkU=!rae`D7wJZ2#F~VBLNB8d?ba^OH*QKpQ zgrN^8o2?wy??J6TOHE*B$(rfndWflsB}>|;K|tnw>0 z1(Ta5K9+wi0`WgMm@scH%DMVUguPH`Vk2m^-C3t&_fe#W>Jb;o$j!%O=2O78*zC#& zwe*wr%(6B1-dLYJ2oR@u@k}AXtwV^LW3agk)g&}z=&lJ&ITOY{YIuscrt@-n&mYtq z`s;x69QDm{Tv>OfXk@=!RdM#X5cY36J-zSt92w*NG)W>MUTSzU_<^c>?%8bo#U8^m zGyZCVY$I{US9&E2t(78*Cdi)L>jd>`fr19}>9>mllg!gP>&fyOS-WCFocd4H zFZyr6a>87g?fLJ>>>T_8OFgqg{g7KvyS z)FY=`<*{fz5U2Zm<9VBMq`N6gpt1q7C%5KYR&}W}f^*Y5%<$5X7{riKrSPsEs;M_H z{%;^!{bZQT%y@2u#RQCO(ufcrCCMCPI$`%QK?kAORb3Dp&IXm8JJIvcfZDi83$f~b zo#HdJ8xc3CER>vt5W9Mu(Az`IJ=1?e&Oe&ej4Ud2R-MCMFlP!Et1y}Ka2au-?A>A* zI_>SYOv7sc=iUbk=cmE<>c(jG=T7#+SgfcrH8li@Q;h zlDRO6@fNf1nlO4AL_NV!5k7bgyF~}(fDWWAc-a3K7K9DMb#pGcWJ-pm$gSl*|;!NEO0AA<9&W9G_le{f@vkX_T z=0r_%{>-|7&QH5j3b)b-Q zs>3)*kdQ!;J#1V+Pj!9NCvMHnix-d5XR0tD50sEnQr66Z75b1KCEsvgjD{T{>BupQM zF}gWdQM%s0P#C#t>(Gb80$G4^i$G?7zt`8Z=Ov>mwlQyhfi#=Y`6^TmKF4cowd#=G zBSHPdyJlP+lU`i7t+FJ{O_^J0~DNC@eV2Iv|;@6X~K_<72(OUgFE{0YE4*(^d1{kVE!V|15rTPW;PQOknaBON;jdgWS}}@B^y~ z<)k7c^^qy~@nVv_S04q8y!$dR%#@LAXt>5I zKF$G&SdCz$ClF0m!e>ET#S?B#uSr@*)64Ho&@C9Kjxvv$9ib{uTZ3!KIw~!9c8GV9 zzR@W2gED40`MrNQ>dpPk;IlcC_?u5lGmLQVrO9TDR3A#j8yn`$Iy13ODH8XY!~b7j z%%f9;DF)yRjQL{%x4(wI1VqAQ5G1=jUUw+aof_}{1!-NZhhR{v%G zLgbxwu^ci!_%(q;pM}dr3WSY#YkTrqipN3H1LMU}#ViPExztfLOP}x@?{%~Q?}uEv+N@(LEZsdVhekt9iqWL-#$JGqOhtswfwjf-A&RAT z86a98NTwyzd|l(UcV7$h!Sr}Bz`J`_F)|t<#)!q?;n4wTVDpid2VOkr6y9O9X%wLB zhKPS*wI4DyD82a(2>#A81E@C#>dcHa?g4@qF# zT)i*55bWSk-7l_u7hfiJ>(4%?Ar|p@x4QcKr5ZA;nxql-$srP{Aw*-#eUgpLfMS^E zsgENS2q(~>W`MV@n6|06f^L53evpYNk?9PjdI9nycHJd9t`Sw&F%h5~Z0)K;s-<4b_h;jh z6L&LeYwv6&NBXfrGu5|CuZnE083mGlzJx?|wqF@fg&}3ZszDa6O z;KCS@Tho9;_$3naqdio~kNhpB*Jw9_FvVR6qCnZEFV6-SJUK37YtNDFv(4Vk9f7{YQNBxlX~LgG0ZXCq!cD<$m0f{+EiG?+u)

>-yOTKVD>^>zKvk;!4GsI& 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\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/24468/d8dd3847\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 10:10:05 09.10.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +add bridge=Bridge-Lan interface=ether2 +add bridge=Bridge-Lan interface=ether3 +add bridge=Bridge-Lan interface=ether4 +add bridge=Bridge-Lan interface=ether5 +add bridge=Bridge-Lan interface=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 disabled=yes endpoint-address=\ + 172.19.14.102 endpoint-port=51820 interface=wg-awg3vds name=peer1 \ + persistent-keepalive=14s public-key=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-Lan network=10.30.30.0 +add address=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.33 name=prt.vados.ru type=A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=2ip.ru list=Test +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru comment=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" dst-port=80 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=80 +add action=dst-nat chain=dstnat comment="dst-nat for amster HTTPS" dst-port=\ + 443 in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=443 +add action=dst-nat chain=dstnat comment="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip route +add disabled=yes distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +add check-gateway=ping disabled=no distance=1 dst-address=192.168.0.0/24 \ + gateway=10.30.30.85 routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=time.google.com +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20261009/20261009102001-Diff-Config.rsc b/MikroMaster/history/20261009/20261009102001-Diff-Config.rsc new file mode 100644 index 0000000..ddfa0fd --- /dev/null +++ b/MikroMaster/history/20261009/20261009102001-Diff-Config.rsc @@ -0,0 +1,8 @@ +607c607 +< \n:global CommitId \"main/24468/d8dd3847\";\r\ +--- +> \n:global CommitId \"main/24180/73847c4d\";\r\ +610c610 +< r: root, in 10:10:05 09.10.2026.\";\r\ +--- +> r: root, in 10:10:04 08.10.2026.\";\r\ -- 2.52.0