From 2a2bd1c828f49d3adce099d3499544614da61bab Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 3 Jul 2026 15:01:38 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jul 03 15:01:38. --- .../20260703/20260703150134-Binary.backup | Bin 0 -> 196636 bytes MikroGig/20260703/20260703150134-Config.rsc | 3386 +++++++++++++++++ .../20260703/20260703150134-Diff-Config.rsc | 29 + 3 files changed, 3415 insertions(+) create mode 100644 MikroGig/20260703/20260703150134-Binary.backup create mode 100644 MikroGig/20260703/20260703150134-Config.rsc create mode 100644 MikroGig/history/20260703/20260703150134-Diff-Config.rsc diff --git a/MikroGig/20260703/20260703150134-Binary.backup b/MikroGig/20260703/20260703150134-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..6ecf4d32d3ad9ab5550d34c854af2c0f01fa5505 GIT binary patch literal 196636 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�H69^c1q&TnU*X@Xjae*dZgtcx9m#mO=!h+&L=>?Duu3;tkchfT#~MZhE&d6#mq~7QU{W$xlHF_;KjHWf zPnF`ymk0|zt*HW$T}OMHr_j)jx)mhGS{xodN;UfesCHq#SFM2O@NwoH<+VAf5=#D- z`L2tAYZrf|%T4PCOn59ew28!Er7=l68_sDz30buMXA38$d^%{!WHHwCn8O$w(?&aMgdjqiX*>)E zLjb_UnQ0qDqBe8WF(Wh5$VOrZ9wM3Wits6sdaPCi5U^*>gT6@Is z8Rq0WXq;^PD0nU&wvQ?=Te|A@u5sH6-ENY4!=Um=g6+TCvW(vd&o5!K2N%;%CKXa> zAJ*`(g{*~NH%GVt_1^%;-Vn{zYj?CBL}J2Fz?2~Q=eTl=*7)`*BHt**Y9?zy{p+D! z+l1W9n`hshvdhu7)BM6y4VZHZun6?RCqC_249}2IFwNV&B_63#_b;cOcb3q{kWE?e zhJ9s>$Omfg?Lvz{>aIzzICcZ+`>)U9z13p~vGh0+yRL*(q2`jFVhCPAsyXAbPa^)G zj%9YujDz^d_!rhuNlc|0l&2B%yJJ*wPpouN^GU0GZpuvFoa{Bdy32YDKa{!Xyw;cm z5tdqgBgTj{M8(v{oTT&%^Zr3AA%dnIIJF1IiZi|H5Vh{x9M9vNhfTMNXV})Dz3J0( z25DDGr(Zkcr>7R@oMy8Vgq|IElzrbRhueq_kCRJh-3WXbQVkOYTWI|j_uiPMB~#<( zij9^W3pZCMQGf9g&62FZr0=}5ZRg1iP31bQP^cmo<$h6gnv-|EzycQ{+WpzQL=etz zr_fU#q~?A_J9X9uQMUUL8u>$8yX4$6QN{9myaK9Z0W&#fc;|+L;2*VT62A!8`XJYA zdQuOMd!YpvmP3@&KaRlYeSdo+K@Q_tJT@HX+Z)*!NFEwstLMEH_D>y>+p@h+o4EE|7AJ3xqs(NV9CINI2o2kruK%?RmC`*^7;NbW{(-!Rhvi83 zTs|Lp)RjvVg+qKsEjQX6vQAXInOH7m-ZViBJ^ z_2Nf5vuQ7(A*d2wk*Z9>J#a7V_BIe+r+;v|&IcdtBGH2Un$t63JT*vB$f?*?^b>9S zb;k7M=~Q(cf47PEcOig+fW=+tgzCl-^$R7r0R2QOql;8qaE4&UxU7g(KHmMP;DifA zq8$hxbY*%5c;_HB``T?5tv-`F*u=e22N*F@%7fXU8TZyOT3=>BKLn9qxh@z+j<7%L zlRBZ5&9P~~?P_YjyMcqsLGyJwbZw6Syz;o>rQVvfFVWd)+l7hxBt`8%TFWn2ElOw zYJY)t@=`Iq{$N*wq&NCSNgj4xYN+FytYLe+NqyD9dqhSEX@Th4Zt?j>GE#J^=QN&{ zGDp~ail4xK!*(2uj=;$zYdq_v#{3_mVlJchDVFI*y_y0hC%?guk*T3l?kj+FzJ(-3 zAhDsHOgVt>rvky}6mPn@HHAFhTQCV86(D*(TeQrdJsCYZ_;0k){20Qar)P;Ig?d+; zk54PHh5fK$P#dJ-!Ut&Z9p^S z-$Fi+5Iz}W^f)tm9I&fhnZ-~#k~C-D$bYEyc;Y45D9)1rEs(1Us|GiUOnd_4pq{56 zbP@lQW>u8`F+?4BJY*xwKXT29H7S9RWFSAqH=FVla2Pwx!!TbwRy_LNpp_TusDhwT8lR#Zr{f4vs`GE4#9 z(r4$KzlLxZ+lDtAH{NsV^q}{TbLxu9htsRPMz!GtfO0|u)HrTnXCtjtDf=oStyIiH z@{if`_74=9lggI+CVaG{V>!gFz$t64i@<@pJ(z5w6Nwf)AOVGI|BN?^ZB72&$h!Uh zAs5}_s*wA`l_yL6sdz%jpnv_W%%7iX&4}yDFNPgjym+|f4g_HRH$8kY_Sbm=w1v|h z!0ml=laM*ff=eMhBb9^(G@u({j#Ok95UU?L08qG?z}`jEUGQCIMT^}fE$}6Bf(tzE z?+8Z3qqs*&++T7gPvQq}M)WX&s=vvY{acgb+L)c@^e3vHv=R@->vf|NLRXr#!ztJ( zky!6>;a`vwaT&}OthGy?8=3=9>je&;R?Qska{O?OC$vDo*_6K7lpY2B?@)gCgX~JB zSSjB8H$?buay->pyXd7&scE<#Np5dTD{>r`HY%VaDk@vi-0?{|e#6-&A+=*~094TQ zE+u4B-=r7bEPwj8%7vx$N6=XhDg&lS`@e+^WRy`9sA2=7OqgC^fs-PqZ(&=j_!tMe zM$3)ZjQyc6p3>|Oe400pTxWbJProT*3P;bcp+1k%*uJ&=11$r`( zgy>qrQgCWoVKTv9Yipb}tx8hFafJ+#Kj(^_5Wcx%4S@^y~njZ=brn_h_qPG7S5XQCo{ni)1Q0#T& zdjZ_^m;Cr*-6w7hS%cRR@6%%f2V~ zs0GTY*NhbAi5dWrLP0~0ckP#W+CJ7WsiLe4|L5F_z>M{FcuHyntu{aH$X11W%+2k* zXZlYO%}-Rb0#jTpU5BFMefG+PAJm&af5{D$MwbW?aVS5Ru$>lAhZk;2Ri6J8=4+Q< zVE~kWoZ=Kv=VoHZZ&SLJOT+6k4U}DpV2$qJ; z6Bj+K{?goy6r7rx&C&J|b7|Rz$<)(Nhb98Y?ex^WPE#lr#P)_1N>^E%EGdF}40ww> z9hA1?WiQsC0%uk{m3vOpCg4_})Tzcfliqfbk@ zvoWDld#R!+a=gL`Z^h~+g=Ncy&fuInq^Ftf40cn!4Jr!Y?%BfuM{W|UXeQ@95-o<8 zIl6F=7Y##&@qGUQ@p%^&B0-@Vwri}@%i9%x|E;%Qz{bjA$I1uetT+PR(P|~+pk`ZDFY;O?>_lP%@VakKNC%FSi6IO#DOc^8g>$SLp<&A&Rkl*@3adPqRq# znt!z+lklV;GV}*q3{cRCBle(*iOv(lOeEFVllDmUl7#kb0gx|=a4^p-1J-pR5^I^x z`q^t>j%x%&&yNv^acR0-_e;ZQ#Lk&8$_)P|sfly{9e3kt(~PX}8!b{ZdA0kRKv^gV zFxV@->N1^1M3#-z46sc};4MavqilHk_==zK-f`u_@?gc?E{I66w^r}JlBCbVVa|7=oNvW-g&T0(5VRBQLVD{7%#=f77j@n7 zKSW27?K`1D5UD}G_*)k^;Y`a^_uGf=yV~jFbChRFql?4U*a|G2rd`=LMcTNm$9fM5 z7|ig65!Ora7f$91%%6mr{KOZ5R;Wb}BxXy}hx zTa`<_XW8iyj?hxRBy@fTCf)9YoiYB+t_6v&7?L2fGjET5_kc-zR_4PSO=DK@DbZo_8EH>KR2^w*o~-uGZ!}r1{G-DOispclUU9%BNC;a>q1Of8X9( z^E53(v3lQ30n{jqGGlx0NDTF*Gl|T$nubyGA5~lS0?xBOm3}b)yVc4n;xjQeFgz_q zHUUFsP6axw^9kci7CiJ5ApX>0jcyvSV(WY{Jmr(HCAw68ASE>ddhj;DrA>aNQ7#C@ z$@+%)m{%$ij%H6YEGR`NK5DH8oNm!#cQ+XQK278;vK?`k>)%Lse#i6Q(t}Hyxsk6V z+P}gIZ&Ax~cE$Jhk+q;WjV`luUx#pC{B8ILZ@Wi~hbxuas&-A6N!a&(=eMPR_LoN1 zTmHa`kDfRC%2|FHB+TOslM*hp2DGq*(rHpFvB7oCI1EZQ7T2Eq5EVpB^c@-vX4t!n zB%J+hlYgkxizVQb^lWp!F=YkAQ$~OC!qb}4C#a9C#sv)xV5Qs7(#blme6b5~)Ol{r z3+a}KvcVH85QoMwLajK0o=_SagB8UYQ{~oe?OvT!(bT=!=o6DJhi^*&ky-50fPI_R z5;fDpq-=Bc{GkQQ^t8w_%M))@KpGdUAmshx`FoBT z)MhNnpKly}lh-{r?KXA}M_fI31!n89OX@S?z|zPOTrhuuziev_IPCpdS1bA5-Ck)J6(d@&-C}GiBym2h*NSV8)e+bb0ow<`)FE-W$_N3SEJP5T~+P zx8{xF`up3Qc)Aqq-PNP*_sni!_TB&4?-n2AgPCU1CIBc3J414EQM3)p!cpCSK>L8* zt|`D^U?Vew)yr<3pAhq)A^3>*TN7Ji(WPgMbX1`5oUQ!exhzbG+^vSC0ntI@aEnRK zBLW1gJ6KEYibc>!-T@1Hl^coN1JXJdBmDG*S#5y=;wx?-4@KNa%bO68H69B&eAcvf z0do#T=Z4pw1sZTltMkLyP>|wU?qQ3mJK5%PHsm`v4sD99V$n!cRmI#F!OGKzR+&e0 zWS>XS60*1XU~OY`C-Yy(`D1XdYtm<3D2VK(n#5_Icgm0V|8GarN@Tuy{CGVEa8f4) z6m>^wb(*?FZ{!>@Y57rhFbcup#lla%^{kO&%N&v|Iuc zFrwg5RC`L;g2Txds8iOMu@|)C2VTyg%shS~1e7FIwgM7V*?kOb2%v3TY|9KWflf)% z(X&3Z$#t&AT#SJ6xMs-meV$QR4TDK=D6am$eFGc{GFSNX?VOY8OHZ%>O4f!pb3Aj|*n@Dlow;f%FA&({7s{}viUoZhIjB3@&`15~mCYs5Hb zr|n{&BR2hXS*uSuX%n zY)GJs`KY9abG{;Ryj|Q?EF6E2cXk9%2u8G1;+Gw9uVz9nd-*3ogDpG8z*YyHYy>YY zs;ia$hma`IABo14My@m+#_+RoE}kk7-ZpY+>->-K6$(< z%jaruA()W#5YnVj+0D9?^lb2F062ZdWhoE9PJ4`Cy>tO)56 zV)tkK>JBsd5DexT%Wpf?zCO9+#`*Ju#T>&jgM!Gp-7xil!MXbpFF72+l~KVR$gdiu zA87DwZzV-+HzN&MTDp=zeUr%@{0t3cy+I2#CLS6GnEwGmJPrtLBSC?<#)|l(@4&gk_I|nDWX&{0P4lY)3kDI{&uc^hDw6n z4F#jZZ&tAAu))8NYG3goNJP#(t6zVc;(J6?_|Nz>As}mV(qs@Gq>8 zm#5bBdp&o;_{uJRA1gPY2h$CDw)**=@v6B`}W}t-@(UjjdkNWx|m# zBQTbR-CK$Mlygl6HrJMaL&HMNbDR75^e=&qV)n>Cg{RT*|G?>|YI6cj>XHchB%&Ki z`oyp{vEXCzYcx<_lo>o|$IjaZ_yC{x zoF=m>6^o$xd$bi5c`jU5`KRqfu1HK_8ob%Ozd4a0MwYt?SF(_SBCEOq*>6gPXy3S{ z!vP*1Z9V1i(6ZC}ICe;FL94NX#{M92V4Bi?eV!IWo0Ss>PSD4e7+_Xa*(z$MvOylQ zA5F#7f#;P(>Fv!dcaY_dxV1+Jn{_i$ z2+fXgJy?eE{-ExLp2@E z5kuGx2J6#=_GLA)YT(Je{Ga=@lHwcN`N3PmdL=pC$BGSaLUXJhq1VE0abP90j zZX}&d_?a-{o8qEFNe{Qhof7j>Th|#f8=*=atFSgd@8wtI{JP~!(9&?-5Tgt0hLOaA zK;u`4n=o2Qxa?{TD~2zc$Xlc|3MPiD3$i$xDMDTkL(W{g4{A&t*RHEuZRE23ui2qm z1<3X`8_Sd-)8^R_IyH+?m@CQsOA^>J1ZWaUVyZ_B#0ZsJdy(Ttrj6Qw>^vk&w4rdCJe7Y(G8CI%^-Ap`6{&aM#xaf&S}LAL5$>fTrr)<|v= zzk))b4@NZ&2-9{PEObj0nZcOD*$Ie@LvS)%R7aSh1}gCTNhZ>D+cl) zm&E7hI_+GR>D(Of8_~PGstcM0y7v9FQgyQpi0SM$Lr%Vg$NVf^>O`rV;jf!ZN!WZEDR!X!4Ei$)Mf;Gp18TQsPZ^n3 zJJIyUpQK3YSd0s(-XivNH23TYEXq@ zcjvlO7fduyzNo&-cXCsTeI^8eO1~NQra@m130mk~_t8wpkec)3!EC0UMiV}+yLWo; z1OJF_6jI8r??Qh82cp#<4QWDwBQe)QWOm~< zY>`MsSB&+c$s5Ny`)q8Ygdn!wAA|0NosS`foCs6a@#AKP38^KOU*5!&r6hj%luK5X zWFiW?O#0X!8V2AL?d9JSXV5-9tVwa5p@~bP=Ttf?z(Lk&qBv_bStido*s9iHlq|Uf zC4kiW3oX`jtCgy4@{R0Hoeo;}8HaLD_+@PRU^0rIxk|W(D-=%*7?I+V0d(dP4(8wO zOKy+nIKYxO*)lR_U+ zj+4I32!?jWR#@}`f=-B<1M`!dOz-9MdaFD=e=&t5^}h$YrtQ{{Owhj_&ZtQ>C7q2}iGubaN^lS2V7@gGRmv?(%8r+}s)=rWc|LI^)$d2XT z;z+fp$Bg=4OeMf^=E-m3t_pT9gdp?0+YFxvb&!MKMod>n8$j_O;E-&U_@}5DgCG+g z{2U(R@n3C=S!;hu)#EbWV zaQ6&xsh$ak>O|yPZ#ezCX&s~@h2Ea~jOki>wP-u)mLR-^oO(x&op}{YCkr1oh8%Po z=S-=xL>4My+J2j}cF=`W`PrCe*E@KbyOzH1us8ESZ%J){T2I8QOpe!JGe&v-0J+g= zmtK|y3u2m9H(0*JB1I^;61jmd|1A|Ucw0WlVf@#WWTy-*`TCdMZhQ;END+RFWt^25 zJA&9RPFm$^MyUgLJ+SQf0}}h1h@&kmmY1Hn@)zI@rHD`!*sCGf5z%R1@K8D28eSbm z%;5Y7W5`pSAC%npl4%Lqy4)3oyW+K?;X=1b`{zqyva0fmGJSMPXJJHRTm_I=re7 z-4{Jhm$cz#_>zs#v;eOj0pg8!<)KeBRl(#eeJ&ED<2asjmTUG}|=prlX ztSl8i*F#~Y^GDa~n$Omy1(Ce1m<@$E`xwO!<~dTM@TkY7I1??*=KuH~Eugv-BKJr< zOnu%fW<3S{q6htKub!qd;F{kxEtItuw1*c$AV_Geg}<;1WIh87$%l?Vt*qINRIgf# zBZ*+F74mgf67~EL&j~A>pgD{P6RGev#V|8sn3PbUh)Qi|EN^48!ljV4Rw+Qh4XnI_ zs?Gf#WtVm?W8X7-EDS~o7jtVpwmtRWvBH39e*xOMfC{zoW%^-kvTJk%XoHfjE#O9_ z%ax`-TE13=#?&TN=ExC$RjZUVA5-{@PtL#?yoL-TsHjqI&NJtn(1#)B^#(|=&kg;@ z=D18a)f3a!1Yk13K(YG}ZOBicQCA?zC1eK0u?9)D*sOG3no?)&{}O!973Cd&1K4ACmc=*A7ypXeR+!})ksmUnE0^o_()8bGbfjz1DEdn6H6zFBo7b-?qA}UD%K&Z zm~OQtE%Y9|K5$|>O5mJk*E^1DI28Okjj3F*X*8A96u0W0kD${H{t|H-ZdaA?zb_-PQ-OpS{Seg>#K#@hm9Y@BDs+H zb#(tbDeezOfj#p=E+HmHOX~RHFwx7+18O`DD7Dd&^8j}a5k`EA#*9i+|3f z^O!5kIb%HDE(;wn>dgV>?Fv0WC1{44U%b=3mUj{pbwz|(i_x++;Ct%5`~I*`qu{A< z^e}S0+fMN%A0BT}v#55-tw8}G4QoghDlS-JfIV2=b?{w!PK>0)8IZy) z=C9WhdbjfMTS?p1KV6d;;TMW)6`3e608@ z*<|$9BHWJ5%RqT?a~A0K#}M2mLk*afuWv`~ulWxnKGiYA`^e&No6s3HDQ_d!j$4}a zRpgF}6`F@!T-}~_?b4U%ZOb5G)Czgl>x&v$-fGx0Wi)sFuU-ExUKrC_dW71^i$v8qQ0$2cv3t8E`IF>J~A44^u*f zTV)`}TO$BM+kGXxG#DV|l;>$n9XP)}6bDiTMci^ukYvZ$AheqnH8aAl!!@*)!8;pNzSX8RVZdgdH8enj8pOGxiah(`f}aAc zBa2z`#z%yqGw&aB(fovM-6@$c7U>UvYOq4TaT5xc^jda-{r9Cb<-hcgbC%RJmnIPH zR3zfIFcXidFmrjX{eZgiv*-Mkr}}ziYV}+Nvq1K{thCd^h#K!%^#z`&!T4bwlW?Lm6ngsa z;A1C&VxEiT!;TyRvhwUe_Hxs<{~JXnrJ9x%^KE?or?Hje<-45W-977D&{xI9hQF@*T-z7^Kp8OJ(O z(5L0_P@uIKf+?^o;-IuI`$?+Qi1)vEnJ>f;52h_Tgrze9X2X4n4+{y-=WUS-m1f42 zl389F+yf&Z#58qYmv8pI0gkQ14q#SOXJmO;3gH*uOejY$^Y7-SGhV2aMX0iUu_j8d zz`caTvP>l$(5-jcZ|HB9)3Hr)G@U(QVmuZ@Q`JI(#DHlRj-~&u@)Yo))ubqRDER;o zU8})(qGd0QH}FhHX}C1Ueu-Jg88k4(!)Nxp;U45u2lWBn zG-D53lH*~(gvv>AB09S0F24?5RG=x507o}!&>Y2G!4M$IUKNLb*vdL#DhOhG64X48 z{q<(ENHg1re}EJs>+MK4eXFjcWnooa@WZg#2Xl3q7C>-iaUw+g2jVV$**KH53nlZb zTTzy_s-VGxCh<`uH|$U-evy0Vns?n}zn@zomNOsi)7p-I%3S9q+0U9McW6f0vZjY( zY{xSR!hHs5m=lkpiDr_$ra+%HkpO#}YT<3%)^SC+%ax7wP*K*#m=?CO>pVUb)I zVd4YWfeMCp^i<=bZ0h@lkQNbQ2mMm~b>Iv*4J8#v*RBnPd$R@2`+cAJnqcz>#Y#c+ zbq1`am1SzZ!^fKH$b|!E4F{#4roO7a3(62Q#^F69Wjvu9q4W`_RQ;$nC?n5IK;>x4 zhR`fK6vKn;h=0pgfU@C&As_I(dX_VxtSKp0rtdG6H#ezs$Z^zF@xKhvn#7&dsaj~9 zrHeKFEQvP8p4HvH6dB-z%1gE|Lpz(}#;8dddHVU)kNX%Oa&R#49v=WwnmP>Ec;=~5 zp%G)1$2B=gIBvcIGnObu{{8kGQK+s|fJL~sazhJMW}{1>srySJ}1~R-IM_=TIt<=g9wDuygGO9FyW(MBWJhr9(ml zARp`+M+&3V`GX-F`PKZcs2#!6v-vOyCROkCwDmUue&f0ItyGFp^&Rd%U92v2bkN5R zd}eE#(AJyY=xEafV;3A7l+ojFvCMR!Bc!#;rs3aFq5x##ZVAfuenmnGJX44-5jJvG z`xbT)PP3r*K@wp8q&;#kE<`~GdtVH(G$bFS-X|&=)bNN2^ zfDf)kCy)~zI5}SMRNgZcwL1)MEsX<8k+pe%_caJGuH8b|lBv{3oQH6F(qTj=leC04 zzhc8k#Wc6gUI`m4W~zNyv5sHI`}ln?@flj0Mu{FQykr9e{A@w1m6Rg2)qDa*AFhv3 zIM@8$2WKYe5W2Cc?s86;^={5ASm;D-b8Ik{CFvdF@f3PkPrZz$SZFqWc(ns zReM0yQ_!e1OX}sLDJ7E+QWa#NsQ&>RkF3ob^pN`a2=VQ|+@w?F7yJo=g4Uk=`9Sd4 z2@aLDn-!|axJ}7|SY2Zcg@f1lvOAt2$a4}&j=sAwhb}3Lh*h@E(&b#RBIWTBo(2k; zAi7Nk6jl67jm2H?j`xO3e&^#+ExWq2mk7w&4uVSjzB>1ryW|`6wDxxIHr8>oelI3A zEL|mMCVcX0y8dCM7FOQYbLPE0{P&>v_1{}ok-Q=$S%DMxs(LCxmDnFgVm&8dxqqtFq+S0YkzW8Gz z34g-rp~;fvc?rVbiW~u9B>HRndMZ@ps5KHKkzZgVBzR(5{_0z%oEeWQILb|W^!Ld( zdBCW$0*wquea%4XOnZ&bm{WhO0p2bkb)`dX0R~1)Q5aveFT&+>6i;OjX)UE;1a{z^bWwl(wo*+(Q+i>aA&|;A?F!Q>fn+BJNbaaUYO5E zJ_&*3z1*!Br~1t=wAlpp%embI54%SeTWRL{WY}WahEWt z@V{O~h-BP~rqZM|YRZh>xvr^z+;DjI3^|F^YA}ktJrfHXL^wW0m2N?yX|vzZYb)X* zCb}xcqrw)BIVtEyZu}a*#5FC!_)zn}QtxN`aYO}?xW|9?{_cv6d;s&CT5cuOcT|~A z8h&{xx;1+Rd`m$|tOq{LdFnkqfQ}|?DkttqC~+|o0vSm2fe?s*u}}n(S6+M4MC5}1 zEK8uc(2jDs6AO>p_Y7h$#lJn9UxR)(TYlk|JoEe*qXOrDttP=<2!a+MIkW8yqQ9Z# zST~k9^uR}iNU68=(xINo*H6%X5jyNik*vffEZ3bBoC7?MRKl2NHIR-7VbK8lQQr^K zYyf?l&zZYdo3W_}NNfubV9w3|qywMu#Sb8V)GiwzbJs%P{jN01`Q z;8p2ttJZ!*qn(_PY#1|;&}7H{3Oastahc#M&Uez5zUlO9!z%!@IPzz)KRpLe?9?yE zf8?gs;6E~C9WvoWQI&nN|Ke!i2i8%(ko(CNK)(}y)dov5LlHb~a1{}0 zg5yjA+CkX)rzyktvbN`ivVVT2#iNyf?7916k<{+MsB?O)t z#k{SG*w^d}jXq?+J$E=klYTumL`&Lf-Xr`Pch(aVF|_9G(}_@A1$%~u!O^jid`>IE z2Rr_8_2W#HNy{^b7$YUH9v+7c>>FIs*MSOU@S9YN!u7Cd&5_r+5*bh;oEsM8RP)S1 z!an%M?~n^Dxk(>P0vy^sX9&PjTzz!oL1O@?(7!EZMc+6BTs^!0RA>u>RB-nk47lTr zN!P3&oHlXRFEcm_tkk*+GI)_Er;CoZBovrnyFvp$JDjb*MLP7{k`dANDq(4hBYyUX z7E|OGBU#to@TK8Iv`Ow$d;b^*x@@TciS4vteW+rCZSU=#Ks&tRuw2-tfb5=MWTB$w z8m_B_ZZ0nwi_ei$*=n{hzfRoiwa`s)tUrKi_ zaZ{=+KoG6_7lOh5ybw~PJk%JA-KiEtgj3}~ui~pTxUvrHw}+!n1{*JzPA*(x$Z94) z*D<0N$QbZ;Q-D_*9s}vG-w|kDj+FJE_>r_6$@ns$jIJ|^)SzKH*TIALH0Y0#TSY>Y zU;M0{1mB>mEQM=2mJBILup+1)W6%rsn zo_wxgSG(Dz%KGFho8WBD*aYnB+=#ydCSX1ma**fERwCA_uoNnt-KZEg1Z_D<-obO> zpAD%b*Se=n{0y5u|0naueJ8gW%7j4vmKNts=j2sxUISs!9uQklp?I$VX9qgZbS%lOuEob&$*VBkilDImQn z_JT=(Cu_Boi35-fh5qnGvf(5Wx1HKHtO0y?#Z)XIeK3z+UBnr*hg!1LJ8r(&CM zg7E$LX%DA|0cH*7x=0E|QDVbL*jg@uu{fyzxszhNNh#KS)Ta3kfWP~Fo+m|> zDL~NsKLTmc6X!ZC)SSQ^Wy^murG{f9X&!<+&xMwFfxIuxt;Nyp2}KGw%JrCq9cO*V zKHYP6X{aRJdXj;{q+0zQ9wOsrL#5Qd`Z0vCymP!Z$&wg_KNZ~^K1M_`3F{(^FPUK@ zRjsziL7qRVzHe2Bm~}#ftez4zeZQp}X7|;hRc`^LcwA(tr~o}q%}#1R1tiR#FG5+i zT?6u27zq9E!<$CmX^BW22+Wdj7+m()C&$n4x_FVh1+LwZFN%$w|G8)>Q z22-!AM)hPlg|?S2fC&xGR1P; zv@lDTDSlrw;a4;^pF7H|dFRvRq=ESji#L0?@|azFMkU&}Ec^!pBa;T5@DnRKco$b% zEArvvF^n+13D1dw8Ycg4fr*ntKD>CmEMX$y#8UHkq~Z5&IkCT>Cr)eU3OJb5KdKY2 z+{HEwzq>&b(VJ71G95=j-+LzdW5Q zpy3&fAp&k0&&?+kKEQiuHJ_#yNA(Tns2(y`ucD;O4?Wc0J8sg5)I1M7Z+c$(!xHyB4uvZ_q62~P0t z*Eno`_2z>?(lc_j6ZwUlLH-{V;{%cRNGgdwpjS?t58(-z5`liCHITbzC|uE&yaBq3 z{LZRHJWA(ej+4!{3$8nIm)M-tV_(Tpk0+(C(B8I?8I^^=ixJgcq|9S+v!;g6J`NX)GD!eJ@bO|m6YE6yT+stM* zhb0^2;3{N~zV?q-{TeV4Tr6TX6E^2Y>JjlDZ*uPeD;^S@tSe1eH9`_X>p1@suTv79 zF`=i9NNS&dO%S*VtuzKB{&%nuiFx|sQE6(Rs7xXHYXXC}Uz4FxFNY+FV$`NOH zmBUh|?*91q%bUI?xCVzqp5H%vIi1EHFXzPR<}h5GU?ibGT73QEJc|*N+C%7^ zwCIufyvvUP8jZ+I1xr9Rap2dc>#{KbQsM0KRgPEbd+P63F{%XwQE1B%PRjVzOHbs! z*H~kF-Gj&d5cmbZm!kQiF1kLZgmBn87K+;D9`FE?Wpf~`RC z1i;@mY@16W4osK2iS!Pmjel6jo3^aO|dvElbiog--X;+$-q2toDY`jVF z8mg63Ob$EW!fM7k+Q%)Gv|WYl$P{Iuy^3FC>v*J3tF#~F;S>2G7X{E)s&1P^K$+e8 ze`89q8k&qMzalfJ6EVlxX!Q3Q#xq3LKhjg;`W2yR09Yv+|BcVY~AR_&rBtA%4IY;C9k zFUC7{eIY#Y9;@MbvX{c4tV$stil<70=HrXYBX>O#$1V%hL;g^>c(3rB5I?e<=FVF0 zbA;VUlly7O(D$R1@lLS%kHz&2SH{S4&$fG+E?ufn! z`C7xl(zd3|IJ`qo95kwJ%^GLtH8av6{y|*;-X+TeguC!ipoQYR7-!6A_U`yx=gyNenUcrHZS(>CiEyH*$jY>`fo+YPZ;Dpb;&mJAvXSyDpmR#_>|)VfoB$J`e^KwU?u*prZ^gg`m; zbm<`EesETJQB{s3f!3=@p;C%|JQP@%xSsXb-2H?t^Uq$UvmV4J8g)FFtNaded1_yx zc{xOsq1y{>BU5LO|7CFN9>xLWf#_7n=}}2gb(-yovj<;I*KOCFPVhxUv-w+)1d_?W zQC7c9(i)Dx;S^a&){W?kh%%d^xxd6lbz0Cet;%N0Y=iikBoJhk z3-^;)RgI*ENK~2K*~&Q+L5)W}BxX@P^R&Lb$4G|b`|oN9$Iek$zd1$^S9@1|G+>*} zYwGp+jcY1q57q&zPijwzM-Cl=nXgDTc(D(Z%0@7Z8W<|1NCEIpwKmj0kE96K04Ni( zf1Tr~HagM8)p&kZm`lW#F7;gS>^S@E@Ko0fyN84G?q$q<2UkLr)^hD1p$aFNCP=UyWDC9ke(Gw2V{ad72ikCm zVDIN>oQo>08zj;Epd2(P*P(@YLj}>LTGSKCE<%a{y`O!{_Y8(;VRSBDK$>g6Ll^J3 z0wIOA3HzB7q{Dx$%pf<$hODQLngI?YrRv}Yu=$adYd2`uL_n`b4E<9+LXNnv zhyLd}V+c3f*^+<$Uiz*r2P7GK$ImLjF*Zjl0WiSY?B?S>`D)~iZ(ni+s+YY|F&zs@ zb;kOaKvekFCbia`uGt3lld;|`85t}m&XJrrB)XI=9xBI!TY~LteRy9IB6EQYWA%XjU3uV z`Ip|Ql*lU106n-=8S3x@<6;sh(xpp%s{*B(&rS`1>-OV>`cu1e<&0_rVlI39HHKTTc=^eAMEJt^~ zggk${Yk4Z}$O4W#OG~V2`$4S}eZKo|D4+#Myy&#b{%3Us1*JEr!Q5Szxp9(Wo1uyy z`cOBzswPzS`tCj&5R}3(@J=Mxy$(S%OYpm0iT)vQ$IXOhhpn7NH-KA7Q7oh5%Ou%X z?_wtxg;t90FPTwdH}{0I0+$6|N}!)3tF(vuEq+tSE!4o=T2+N;201*nl_yU$5^hg9PX4CCf_OiI*F#AuLrf^JLJo;yw^gQ{)X_6Zs`e zOuykT z$R$cZyYuCvKuz`mn&^m;#;*&$p$&_7A;KL) zhcE956wKQUtFY%mAbkwzkukedN$+DxS($^NT!Wjd;F~v03Spr3%EfJjt-$mzGvz1o zIC$l)8r8nFzb%uvwhShP?#^wlkAvm&=V{lq-F8=;76#C{!}mj;7;KI~_iPq!K^r5~ zbW}s4dm1XLJ;jntEwb=PqgNAx4`cnN0~;x(Z?N-!-WhK$D$5r^WjV;r7(ou zSfp{-Ql$V?y990o02F(>Oi7WfmsQn(6Q&28T6fbx?m26Y2TyT5Eu^EexX8_47boXjW8RI#9Vn9WEk*j2xRTmOP_iz^Lm_S^fSJ_a)lD(KK?bbBNQ_ zTzKm5>7KektxzBcv5>+|L4-d|G!DGE^#?kem4H2$KYRN1MBE$;XT%+ z2PT4{!W<&LV~tJ+x49B{+q;GZdg}?)OUkwpF9W-@5Rf*XxDa~ESfAQD{K<)5Ms2?Y z)v+1kfR;Md3cMr>pG81^XH*&z$YyrS$a)r|B)_qi&O3r`JQ9K<)lsxmfZ`6VUyNk* zas#Ixl<9KG@j8=QKUwOXI*ElhqxA2I4bn(O)^q>;6yMm(7hj1dhE) z=tw3@pc4%vIBYHXkB~#247b4sOhIlbr+g+ z=(h{i>=&5Fg|s6)vpNjVt0}c9UX)X<6c>s;O<&))Szvi1)gqoVxjbgGbRCL{{5&hq zPI|cS@@W+Pg7r>jlWA(3W;@jZ&~UU*6NIDwsxPv$Jhia>E8S-D=t3vzfU0DE2#Z5h ztV?x$8rVNnd~4AhL?5Vo1VFX)VQEBn!?32lGk!JusjMFt6z~bTaZo9q6!P~TQtHA_ zE4kCevXmRZZ)1H8@EpKV#o%(r#`uSA6%dHwo#T8z=4m#NkY)D42;_sNALRel>XfJW zbc?`Oq0^7$SPh?*NG$byc?GkqBMADS5EY%~Tnqo!#1Z`ksbKYojXk)3!EDZSXv!3N z_tFe#LOz~{v_>oWa6Qvn&Hp(YghRlZYxVFW@npEUfh#T+PjR=@oPYM|fraIX!13=< zq~8#S;Vg!jxrE;JRxp0#r6}?p{}F951q$3h8KlSAL(}I~4)%O= zWo@#UBFkFZrX{p?px62wAP;5zg~G!5*jDQJOP2vcjl4zyt!gwQUFM2q-ZbL%-6u-kIGuVj1G>O-C?HmAX9(yXT2RV68kAx#Mri7~RkfD&%?& zFn&%$nA}IxS{O!C(KHb}{WP^)KT*+}0j#CUFm1-93#~FlQ%S^X5)FMfH8B9yEB%1O zCy-+n_4lre-xZhfTw(e$TtBc{yib@Wb@&eMgZ#+l-7oP1n%;JDi# zj~|F?>e~#2`E@$Q7!Mi*u{Ubl9<9ayOJ@s6prE)vmzEA<;R*uN^3Y%}>Z_e@tl`cB zLQz()M-nSc3JDeARCViB^-@b|C|8;fL7+TQ1+(DJmX5TLceI=C0mE@9Z1~Y!CZ(9y zsO_}YDE&4T`N3bU@%1N(4C&BWkZTocE4wMbCoaw<;yk%HcrFg*!9<~fK`}i6nzswO zFcD`Jsac1Kag=DaZCV5+EF$hlsj{{JL?5rrFH2pw74milQbAXDZ4N;yx zVT3dl-<=0OPDex0o?hdwF1Al9(ub*Sl(uS=R7A_{w7yZ43~_{&OIJAi zl8De0cJk$~mDA#vM#ynM_Lhc&%Q2!u`AA}DQKgS+D1G50CpACyVLkZ*0kTrs(333a z@s9xM)vmkM;EnP~J!<2JO9blK1PnY6eGU#J+jl@At<)4;I=M79brL44!Z2L1i^tc`U4cY0L%#5xmH*r04L3w@g zsq(}!+09<`^ZUOi%HdnyClUY!rVv}&5;mp715EaoVfSiX%4_mMj8dD^SPwlKT6yL^0t_LqV3rLrO5Du z;q?kpLBw|S<(5`fKwf=h&I+RKTw)B)b>VC1xyrSc?FL-(PVkRcqxd;sR3EHHH?Xsy z-&|T5T;d$?j2X)!Ms_=QU(*VTZ)zpIdc2-s#hGODQ)S-}npYrsdIKr~kps6*)9D(| zRM%A^cW+`LtdA6yW{i_Updp!JnJ@W}(Nx9q!;$}sW`Drl;Sd^97p3WzMb~v>&@6l* zr;{nNb;8CfLtu00diyRjK660?^XJ#?VJq7H_{(^53YQys?~c-i5`#4{$uHEjJ=>Ou z`vlJWu5$qQ7Gp6@dpZ4iq^-UXxCO3Ous>4L3->>qHKIWVzr3ehI2a1_mHy$^WG@QU z`@2N0+jaoeN8Du92_00pwj=U~JvrQ(D9<>>Kp-N+A}Ltd<67cvBr}F%4~LegT{s*I z^(z@~J;UK35oOwTvGVM1YU|TA6cn2+CO)ri1>ym5y)S)9!#Jc$ErhW?=8=yJ6Dz02 zdgjIzlr^3$H=JwM5_Nk zukZlj(I`lvFLf{baOVP;v#hZw+iP|%4P@;P+5I+`#KQ3erj{cov>XKU-%Mpl5^hhx zza*pRr6Ay&1zp<9A4i{%PTQX4B#H>)rYlm@@i>qrSP|dyNvESN_@_X$d;Yfby3y*sS?#l8+PZFj_~s;>USbGgi!w?_a$l7+=ZZ~ zmvvpB3}m;4u^I0YR+mkEe;=h|`5RA?y1m_G3N)l-2$g@lQ954y>vjxR?8#)~ z^|YuPlZsE(aX8UO6D2$_lcb`LTG?&G0~yqL`4h8WE?e@}Pi(O+(HxHD0TN7O29}a{e>jwH)-4=jX zzx+ADk|)K`l}zA6D;Ph%6j6~w-0?HBcEv-gdIHJHpYCp768bw;r0}icqFAM!o^01O z5t69}+Lo1)mz^Y+y7Ne5E=%T9`kcf`5tw9$Dl2_woXb#74>)i_Vi_8Zec9On{bhDS z)k|5xWIIHv$;5F~;%6*8TcgKP0D?Q;U2rq1Au8LOu}!+Je0#CgOV_X+7~RY~OgY!C?IeDB z1B8aRJO4FQ@VF^KKnl~5Dx>FNm0*X{Fgzk=kp1B`Oc4fpw1Y)7P&+sF07NwmL$_?{ ztV_!X4f*v&E>*aZ=(6ovFvVGe73&I|OQKOqFcNq+%hYV_R$;Z$bBD`($tJ9dcEVj+m6k$*Bhmedc%fr8-y>;r@^E5Ph%pltF!u|}w5WS;-b zg=e?oYDW6&9q9L|IQeg7F>F;?HvkOnGt(3q5($VgsgRgBRBF=6>Rl4^ZXxu{j2l{u zx@cv;J$!Qq-YFb+Q$x6+l*C`CIAP{20)D1(Z6z?69h0C<~~Il2lKv0&`>q}|7IZ&H4+(WRpe zQH8u&%eY$gRAtm}N06Y8O0`D7hX=G{GuIB^941p~V@VFN{prtAbxzS5$DI}x+fALp zz`ezRTByhET3VzVCyQ<;YZGvql;{>SmzMqnNfu_un57b3RfF1!t8#<|8hI$sY9N`E zeTh^6R^Eq@Tg16~Be_#|!YaLopn-FG+D8Z-m1fWuxQ3~?qohtH)@NWeOFmGPWhwFp zahL>a*A(e*a;~drBtY40&XL~wGWDwD_4vypt-k(8zFKV6UVe3%E(8)0-=GJfogEL8 z5Mi1IKOcv($`3o#eY%fzKCePYa@UtvYX@;Bd9i4+7it;%BqQ?_;Dr4*r~eix5I@mZ z0Rwl6c_oSr>ycYT9Xjr$P2gL&Ygpi6@0cfZ{I3klHUlK7_kK=yV{Ze1Ts@3*Oi%F6 zm~oINTl2{ZEAE~aM5Q=5H2Wyd&EuD1d zz~Uj(SZp%50kmRKm)}^iI$9!g;7U(0?n4M5%M`q~Y`#6DwkxUVK`n_D-UpWSW< zv@O4ckw#hk71>VN@^ltksd+3-xwh}0N5_t_yu~3-5S=a;c>|Aqw#o8LOcp28`tDW-{gh$Z7UG!xv9m zWCc+O$#d(~$tc2L73j$aq+Wliqa<_WO8}TkMLK>t{NPR zAI;9X`ly36q>^Igr7L{2Hw@yptIp%BNg05yuyGSS3;CpZ?;>mB=G`A|0)?pfp79gO z^mmvF8s$nx0e3k=7Fz}VwxJXK=IOd(<%=CR@mbAT$u4~!ZYar?7{HUw{hI)4d>#69irgVxGX)C zWV&FDA*q6^C6+3P{r^;f;^rd7x%kG-X6t8cD10qov+s`D5FBert>+`y$Yq@rXVEzC zHBn>p6GSkM8r0QqB?!zAd55{EQiPU++HR#s+m!R7XM4~=>Gr8=*<=Xn05M4V1|2&U zm5G6HqAyy`&7`&`lj&B9zUol~>O&SHeA)1&qMweM4Jfi9&UJFgm(@V1q}!J3ZpfBx z2Zpz3|M|$z4O$qe$eS|I30JHPJ^OAuphC59B?Q;Z=mmr!%I^%W=P9Z(Z#ZYB-ktX7 zA17h;>Qf##X+FGa`{BXgnJDkIB*v-@_VzLy6TLsVGmuxArp(93W}?njylQMd>t@RO z3ek#vaRXuQ0wb;#pC9D8=w>}>{RTN=Y4Gf(RqUS(27p%)7aZV#v3-&Ip!z&XpImVp zAk}Q$u-EklYRwjr7TpAH6KCC5vZmEyGq8(`WuDerh8(aj)2(udIaofBATVw1V^wYX z4xqQ!k4AtL!4#d*MM&)nbn-H%PkjBimPoimhU25d=Yj_1LN^h>7lYL>ft#v35GK4l zs_Y>@ogh7)AdDS3BVa7^2=I=Jr?}FrgFUfEQ)cPN zUi#)0(p2D3>_ps-9p4K*GhJyx&D7XMqh(1U|4HYyEW|d^hcW)zeVsL9w64j8=AZxX zfKf#^?%N5q&@!Y5lmU7&Wh?JA)$%53Kgi8smrt)XOC8Rg1I3hIU&iAVvDHZ5o2kDX zOn?`q-ie^j<>`3KRB7br?%f<#CEHdbp$U(Sg>21%mI`Qu6tj=lrka5V7&*#tzxISsSG~I0$sPi+9^&vis!Br&TTt&%U`LREND=tfIp$ zNT*mmpHWoZ8wA+(^4+)?UiugdfPQq(L^!BtgQ87nX9S&Y|0;$rI_+aN zxt{;R3i{FC*OJ!4dC2_}KaEiL>_~;{%=*Mz(@6XfN7Z4%fk@9fjR6*P>VqPbEdzE& zv-k*ULlPqwf2233>9xaH(>2N8xSR4-087hj2t?7(N!d~)mXItgiy>muEG%U+l+U@9Bo-^h~v9klldU$XEO|Z5WNCzGCCOq&h+- zh!X z9<1)}B1yM@<0jm(-vH58O&AG<24ZagSK!1E1=8o19qdD;a+H@fPw4x!t;>YWTsBoW z{}~8d45u>o@pBOi$gbPwnl+kZ8|27D+0>D?6&@~i+LNQ7_Mb!?DQ~(&?9;tAV+mc{ zjo25%CYhPT)j;r~n^6WR&>P^^?!%x65+`l?YeRk!oC@|JKE#(~!2>pP=`f_)7;2=GF|GGgn+Y>{YeevA^0&kpi zf3HvyI*^{JKl06=ZfJmuGx++{d~Zxl&KiQpOx`E^5{U<=_BzS3=&mkPD?_q(foW13 z8E4qXbNEl3=vr{U<8xesOGYS)I2ht?4RshA;WkqD#~k8jeC>ohtLVeKPW2pEz@GXG zvnUmbGVZ=Ns;NPJ7cU7JDc^<##&{h2zGzM8R+Xj@6na-3PqiJhChnqXg1y5HTK44@ zL#3c^KjW1?H}x#HHJiWeYbVcQmx{{4z^rT{Hu&9WV_S6E#pK__Jb?E4qtn-k=Xbt< zrUMs8TW%4-lX1s@BD6m1#HO}36T=uP%s(#NI`b`OmQr5<=7t;l!~J#_L5|h0ynQ7KAYX6%jkU$aFc&r7Pw)LQ#N~gy@6mt=qQBm7WU#Nta#ViAbWv5*g zP^66+asl-<9LvX`|H3q8HMO{`wg<91p%+Txq{KeeDvKgIh2cV=?#fRq^mfdoz4Ty5 z6_SFkK;oh=I2v|3aB;ATZO{qu3tVv%aX8^)TvNQk6Cc^(NyxmXh`)a;fZg52CgE?R zP$C&v&vN&4U!*Mes>jj~2%Hj90w+A6|J}oN?xpyLVh?sZ2S|fhhZHjFdK$8z><#cR zsOBF|y{A7u5s!I|C%lsVJZz5F4a;Y-7b23k`CtnnuNHqY{vTnKR%8^;g&Mczk9cs@FJ?o2QEGH#JF<@P^47+n*2SQ*%pTRX z2I4e2!%Jdcz?(ULz0F?UVyQB&$v~9F{i`R> zZ@Lec0)9tAO40v-jN8K;Z*n^HFFgbEALX$i&d34zF(b)l5=O&}b;%Mjwg-YIi3~`W z{>tmQtM+Wnfc;|n4G~(3O$8dc^l!u;gxXqsN_B?f!Y}*1ZcQb{N1p4VQJ9~8C1dk= zDeJb!frk1uSguf~rnnR-UjNh(?;`qX3Y{~H%3BTkIsv6sH|*mQIyDVG0-^p@l;B;i z$FKP{@t<1h0Em45$QU7TS&JW&d)9nIrn8nUhBGzf^T4@|Gh_0}y+u+m-W!kn2%Ak`O7ISK$SH=W}?-%XQbbLb`WbZW4@1vhJU~!#&II$r7tbBg2x5*`G)e~ zUJOzI!6NEj&22+)hJLSJpi&v3KB+kC2t*qB?&6t44zJ;Q&)@##BMVIo3npLsLt>{V zZ_7060L>gE{a>>twCwfK7dVEdnYN55foM$CK?5S!K__LlO@p-N=4BqZ7%(A43SL+u zq;>tF&KcqqE4u*q-C|#5BTEKf!e^bL=lSQ?Qb%NIh1KW3zql&JjmL*b+;Barml<-S9guh2+NM`9>6lX59U{%6BIqBGCpcS|HfV zRH#EY+P@NssYc58J$S=E2D$6C|Ae`Y^H%ADioz1P0F=caWM6jUx9#Y0nAGv}<5Vhg zU^ya$UMKNgIuJ>;>|~pVB;;l-&ME&_{G{awt_iv`x4_#P$PzqnBye0b_ z;f}|If|14VhL@b~=yLz144voHk0L72EmPCw#ihX-qofq^D10w|FaM%OkEZ;Ic~-7Q zV&=dpdj>kwGzm3B>Ij%Y+QqI&gmvMHvHGuLZ~4B zxh0^xgpl7Fz2-EtuFAJvBm zzyM=m@BSkW47}8V5#f;#*xolcxZV4vn+d!aX=&V3vKm!_4hIL^ zfkRUl&+vM*8fzXSOEP<(dnqVy4czK#O%)c+ej8c$!|mW6=FdV)hL#k{OWdmnW>7f! zO(2|bEy8G!rm=Hv)QmUhegUpr@;AO=xMeAPXE2}pj9-YtzW}B zOcfj;6+O+|PXM{W{b#o^l?{ed!s7UNRrS5}zwBf7al>$8phqwP>FOqhhy>`CW9l*2 zVe!vA%y93V1hm7Yyn!#pQtEMLVYBQD6P&&`E9x;6aZFP)8W>k>%jDp^iY-%Yv%E*F z-IdJ220Y^)!K8j z#H^ctSKM}@Fe&cEfyB;yjk`^ezzhEV>SJnrq-A;=K84pcyBS6=&w($nPZA97I#{Um ziP^p7(&~D2(`0BOa^yRGDHrYAEif3&5}~Dm3~@4gr#o;uj~NPJE8m8?z2v4cHSzhaezR* zIa+q2>RW<3JVM*P^zUUJ{&KWPl(k)9&(f?EwB*Xk|`;=93g8ZbV2Ue z{I>Ms$Ez-BBk}F4C1L=^@qEJ*)UYhz&>>j=)`bA9s*daI#0CQm6y@A7sP7MAL`+gT z#K698x*ge@UM;nV2avz_)r@wmIqF)QvSMpv1h~ml6}G4h9~n+P+TdH0y{!LE+9>u~ zq!h!rhc`i#cS3F1+f8fz${=dk&p~Wfl``|DCn?7cN!YjWu)zSz+UPlq!T7P=VI4%B zqeTbovH~zp1qkgAu?JuQ}km0zdy0i4{I_7 zV(oXz{IJYjgNh^NpNq*D-keX8^A^DQhXPA0^k_Jt8gtfg>3nxg0Zk^JU`sw;m24?cHy5bfL`lku&nwxWQa8j09w*X^v42)bg zg4HcE@k{MlzSGJWx!Q!&L>PmZGARTLRFPpqzze;etEY4ZY?vEr9us#8Xx@XykK6aH z*8|pU+ZT&@+hse&XNP|O6B28uX*5DzqIbD@gNmTKY9x;QR(%$eq!g4T=bD3;p++?{ z{BpLfGW>5_tLx$MXKN$Dkg~YR!GFh~E^39XKavhA;kb=+#O_$-SrFS#4~m%J8qQ04nMltPiQd<_^8fOM=0yB5$rLK zDgiEyc8Qf#z;=E$BYe|wsyKZzsCF!ipDir*3)?p|kC`blwQI6 zu_Or!vho(Hs=@lk0to60?|74?fh`H~Mm!wbFsorg3R@7Ej^!KBPrX2|d4!}RVJ=e; zWCx}j0s6I@tS%YrM2oo_n1#V>Jyc>Gd-5^qWHz*QB3!V+$?F@L75gS)wayPSjA4;2 zJB4#;)Z$c9s{m~{6eZj~4P9|!$Qs?^LEo@cDk z3lhG#_~#aZzF9k{u*P(j&QYze>x^UA%jWWJtCkmvWb*258W-VUE=rOVN&e^ciKt$7 z>_FKWtu{cFAC-L2=|uRZSXqX z(~$nVcU3$Ez^&HX@~NHeSV3NtGX_d|%gsS<-rN0h{8x7O4PznG;{t5j>J8OXbHXBH22V)G?@u5?c#UZ{4(EW9wajEYeRf-p*qnHX|S>AZ$ML_ zcW$Qir4t-m6tyF4e2oYEYt&wn4h}J}ez=thWDx0XG{F zURY;b+vlp;&ZmXdIP+{}*3vp0h1Q>NMUXr0l--PM*~O4-Wv-oHKttK3b|0S)*`Y@bPe zy1h?}R|ZO>?Pm*B&t|MPZdA;ic(jX=Kb^f}cC483UBVEt{(K5-;UZ6p?&kc>gC4%Z zFK)%3&J@0l^bX%fTuh?M8lRZF;25V$@Kf8sVmsJQF%%SB3WG15XX>|x>03r_Prt-N z-FY44{l9P2NFB1shSw`EuQQox^uC1T9a8eDL?s9mX^xQfrzgqFS(m;1)9E_E5b2;R zznU8m;nOeF*Xo+C$?(RBIcO@FJ#Sw?%T&NA5;M~hZN~s`@RMV*G6vb({hHkYPi3%$Xfxghrw1dZ2^O zNIZsHyKKv)sOw8dgurt0}0`T_$<&n>8(iPzdD8mG6BOI_>Qd-suP?1297Q-Xtnu zt9hMiL6|l*jEEF*GBn^uE-lMU-0~wJeYlf)%&%60xQ~!}C>{kyxZFt^u2-2t3F*{rBL*RD=tjx(g-6!F}jdgDPQ#DJBTp0qbo( z0*?_)Yu5zmh8#*Zt7e0NX!^oL8173D6?24)>k)jsx>~R^PO)adYa?BPDH@hVdGmca z7VD7xl;^4xLN|3(1V5!p4)u4Cg7F+<{~A3?zAdRC__|n5ZRk;&bXRE)rq6orF-+`9 zIqLB1gV@NYPU;Hd0X}vHUP#s;d8anQxiG$QGk9>xbKUW9gG{PN;rwA4z4UZP1u?67 zPd}lkWvn#X5q7e+kwhhtzkunu2Sg#y^ zYfgtH*Sqoy|L1TD68n)hKs1DG;9ypto) zmFH0B*}3Fw#*waMf@7M?^qe`wL$?}E0&q(s5)ng}xse9Qrb(ls6K4X;VVzls*582F z@wS>{ku|E=4K0nzHEnmb4wss#U4%Kcoo4kza&>lZCie0}4gE?)4P^W1S#-^dV@0*F zCjUlm+Cu>D|5n)0qOSdg9OlaReb0CDp8!&?{uIzU2hbpsEG?hV2Iwk{_iHL2?8U2} z!jCsXi|$?r*C{RMh1yerxdpxx$5nJ&Wsr86&j_!6k0eHeMfl$reD1Ljf~8G0K6L|X z+fo;il~!ru`` z;Rn_$$xA3tdP%>hGkQi(`|P*DC+DkCw726$uE7c$MhhvHVzfBP7FyD}t^X$D;ejv? zSWe2&;?W4bQW;;y28O-VG!>uFaR3--5R0O++`)|ei0s672cZRyl@01G(Ysd&{;(kO zpz$v>)WFdh!gmk`)GW;uI{PFk6Q^^i)mfDfrUo3kQN|xfeU?f8C$brGyUmHHp)7fq z3}Qau#kejDx2H5U4Hr(4sZ>*=G}m`3kq5{J=*i(AsGI@#S5(ocyTDup5C12~CzI1=p+|`5d#iB;+SsfsT$)!e=z9zMswWxG7 z)DwhHTNn*f%YMI~&>8ZdJ$ns;N6I;{yeHGt>_}Mfu)Kdmnp9&F7BL`}-|wwj#;ANz z7nR{rpUm5623_`gg*HYtA%qsMmj{XC8BPNyEZKk?>6DM2HYHt?%#m;j)TR%yNwBTS z2Lv5B-1P%~2=al|#kY?CH2at;z^dROWgFt4C7hY}J$FPb*gQ`ONN}6ksF)jDep*)~ zzB+jzQ)c-?C{_Ptv=FLiC9o zUg#>G`rYwu;lQ zrhUl8A&xl}89Dp`F}-Ee>`s44pr^|;2|{O(@F{7v*F^X{oftyL%e$usgq&?Gq!d=K zKIYG5?!qh6rL}_fvM|Jk;)DR%Fhk~NE;P!Vi0zYzm|H40b6C)i!27K+;hay5RZyRz~n`)CI5_Rr(E6IvlJ%}$*@akAZ z(#e!+O^!a8AU2|XZQr8|BrJjtKYSf%B1@xxB_lZ)xldzUwhRm=Aa^=XdgM{7fec9y zUPT9SwB7W%HM2XKr&FPlmlESS;>NWvyM8u2n!cG7$R(!ckT$P5<% zlK7jsZRD5(Gj>U7x6y*1jX`S`$<|%kt;{&rX{Yh{=kC(u((Dm9-O7Co{}yrVxxt?+ zetZ+U)x3~=zY5Loj0PZR0n7|bm5KoU4|yQq&`~@l4PHZlVZAPN{DHS8cu4DT+Vzi> z1-VRibqsy~Vd=UF5wq^G<4r@MVJ)$nca0|^crR!wixa=>XkP1FEO!IiiYu=pYF7Z9VP=Vzl(wi}(k~kuOCRct zgVxsYBb^r6Cc~v%cqXNw$?cDf%~W zpPl-N-DL3cMaHURT6ZcJg?c1ye4Il!@A1ue#mSh^xUP1jN(f0YW_9Mq-DZtc`jdvC z^^%x*2u02EJJQG;~Nc?25K9-4>3pCx2Gkw*T{YGKCD+ zbzPQD=4s@Mwp|=vXXgYc-J#P3DQ8cnlF}K@OE#w0nX-w#?^3m3;9osBimI(ISks6@ zU!7%9snpQ>kv(|nZkaLG0-0ORGOsgz>O9z~V1c`@gvMy{zl%?y_@3ip52&MpVK zegroRRvA+90^Y;!Dd47t9nSq;4snZhWU2LQmrv^!w{kQXWDwKiH#3on!FOpOHYCj! z5qPvrjz~p{+kbIxT5@JDH+t7hk}5`8z_^L}O&Qv@Ytoyb4NU=1e(~Sn4Ija|8YqFP z6Hn#*BWo9>*2XIoHi0hYPz)nd%e6_;_~JOF!qNl zUkV$x%Wb%r{B>+&k`m!` zXHu#m%lJ}HY4<<@1*%7KT~P_zFF8ut9PLH;xQ~xH=CW7RDS)4gtrvV4xZnn!wuo~{ zM!>x6+_VY}w8sY|P%bfrdtd{V0gtS|KQ&)sVg#(QwakUzz zqVRUKBEp3TIKhT=CB`{O)A9`Aw+f-pLfoeNc?Iyq+$ns-)e8AF|Gd}RXqIAWfd@vk z^SwcRp9~9vrZs0?6Ss+4wDxO2ae4P;6_&}qaPOYWI zEo2Adh=Z4@H}Bvca9~%2mTVeK)Vnb#Ufl4~0IYDl5)y}PsLyP5(M*||wg0jL$Wkw9 zb$(^j3_KgL74|%Y+%ESwWv0ZpX4&LKs9iPGn}oWTxJ-OfAKiw@hXb6(Rpm97OB!x5 zdr3b&?87TO%*Wv6DMDDSPmCUqdX^&8WKe7*7~T|di}Ub-btdk^oEHuUxgZTkiZCt$ab!^iy>ytEWLQYSN| zuL@-{ttArLeC$QU36u;g*A!QG8akgQI0D5BtAaOotZ1PN55O$WA9VEN(B?q7g9@4;K;GhrmknhL>^4AhAG%Fc*qgH9xX}VF7q{~Q^hjD`PRW> z#eZdd+vi9P-pc-v>uWXE)h$qf_EtXn3}o#@8hNTSro&S&Ypne7_fPqDL!i6)ot?*) zS-jw&2R)lN92|&Z(#8I5Q1MrZA~v_}cHUntJdFt$yA6$lCVy_U4p#E5S_W*{iddRN zDf4?&-#ukf&$xdm;oqIs`q)uyQOpf3d~nq}2BlyY+&6N{n~V^?e+vA*P(gx4F~f-q zHH2;7Urjz`KP_Lo&4R|2TmolFu5z(peTgex;SfWiC0G^E;`3|LF(}c4Dl^~XmkPtm z1j(6s{bBC7ve=&gJ&nSM$o6+szR<`CbO)fE#$jKs2oPrqmIS(-bxzpk7`@!6pEm>8ECbQg!C=K~`kCu~(_X7N6Iknz(*AjoiJ8JxH^Op(3r=J7F`J2=-}oHt_A-1jgEf>e2aq`9E|H z+&go5;V^TB(KX9og~Eg=aA*XsNN0 zqW}N#latk>H!mDRMgH%(zXu}oIeUg&6Q==>TzV!CLReFd)cScXo*PO|+H%4uo~YVH z6)x_s?b(V(ct!N9^)6ATRc+u{z}z`5Rd(#8hg z6>P?qaKI7OQwfK1bC&fbs`!%24Q#cWq3v#P!pBfoEpar~ze+CKP6jpXm{|vmREhSM zp^uQbPu?JQN;LhTV$d4KM4^0EAsac0zn9^k4;TjS9Was;Efau$Un{gY98k4vV@&5E z^YqSH>^%*}k%hBsCz!G3_9-ch;1glY>b@wFT+A=6LH}b+X;l`QDJpnW^r#QmJ(@E| zqK{}!@EB`MQ7b%)SfrLMEcnX!*s9m+^R1AS5#|%Y`^>)iJ|`w{;Y7*}8Zr1#`U@WS zol3j{e+93oq{2#zoSRiP9Hu0i~*gnvIiFk6jC-m^vkV`oPm-4!C_zL>aaeFHkdC-G#!>0@LyQQsyfj zslF4b6OKVLf#u)yY*F3m8G5FQ%uAtz@ zWRI*0sBWb>A*Lqx$)RaoXV9gZmNdto`ZXzmv;(El9dlX-U-MFFl`|fL>c#ylmYFnk zSi*HUrI?fKs6m2?woG`*(D(DP=zkaIAPsv|e4|G6T{_+YGRdj={?S<#C;N$(xNz4Z zrfsDS&MpnvNwZptkqSYB+mDdb;p2MYw05T~Ue(8g>FYc~Wd3NCaS=UQ|$ zX9ian4sVf_#|~N6%TkLPd(E7Z#+tm0nOD-V_K!K_#+)u%I-TIzHq~_mH)TO-pW`TA z)VC&m_VYDs3Azy?@Giudm?(Opbsk3TM-i4CSo31IP&!@8{DZ}D@j2LsC!|$tEcBn* z30*?^o>PTP{>OcZqPiLmWU!)FVEIjb2Y@H*Q|>U|cgfR2oz*=9_Lyu@|6QfQQ7^87}oOjz;v;>$~mMy z(mQhb@ZvQgmZDxuL=!ULm6k1kc$Q_7MR>P!$?EWX9-k+?i#(~0pgpuxHNk6pk@QBM zMKB(Mi3+w!sTiNv!@3BbL&o{D7Ugip@k3aCoq#&rgC-)S5_&(IQ(HlB`qjHM@7#RK z2d=L{jzf5`j9bulPaN@4(4yz(SZ4*!yf2}-eCG!ISokQvpp-ED7Xa#^Zt1Hl)Vic! zOcbP3{EK^)gFGiW1%>P(p$Fu8aKbGD&FOt;B%}Og@sj{@Sr_W zP#;-ZAr>$Xf=1CLuCU*m8{F&p)kdKPDS9{>!f+jr@$zqL&LJ(8wi}AS^X7!-p*sMj zZAg;7rj&{RHu%VD?&BEcBLxKbqB+jadO)YCn=v_ZomI&U+f98%(Ew?M%E3CK{@l-7 zzs;(_ZP`p-{>1%iWia-TpLEMW^zAlQA+@LjY6^!-qv&5Jim$hWJvlA_k%vaO9T0*} zy>Xpu^+cVe>C6%?p~(4=|BxK;z6>m+G~GPo?nk=TXIRBbSFH?FP{km})=Rjhe1m2X ztnDk~#e;SDMXAX^QMcX2Kj?4B0r^$&Q=8FBOGk-V_mFdG`oqt>kxXasoecm#POVaB zAEk?Ee5ll9<>XkO?&E%`t{2OoW<;5d3-E-;Q4G-qw}{<{(c-KkKxL zEPVS|r>tZ{2Wx)VhIi}3b|ld>y~#88vAYerokCL#zIgWq!M)9c+0Dxk2x?f^&Laz$3Gu9#G7iU3h(Z zZqdv4*GNc`kwya~9WKeL< zAwhh{YNFelb`-Ow8qS!Hjtmko;amy%9>kc9)p6XuzQ3{c{uF^ILp&rC(-z+&$O-~u z(Mi=$WaY4aF$d7N!*Sy#DjZDISfg%f(IM*F(HNm%N;pse$Vy(tofWhLK=JzlQ43!> z#`gyt=66apl{TY-X(RwE4t$(&FOlxY>FQ@wAk~f<`3stscx(=VnQD+)JIn{A#)PSO zYl^;s{ifdyM~(P2tEPRtIP=%)O{zEgb+rds{7z&gu(&4+F21b;p95}_mRH6H+^{bb zvHR}-rj@$d8%snck{K;FkiVoGu1VnVv@qjAs0K}L(72V$Tm~OJQT{2SbNL9lSr_LU zDNwxZ15XpB1c-orOd8TAZ!&N7Iv7`JM6FAt?MCHK(`g)w2K(^{K-xAlu^aOJ&;z!Ze1ZQf<=&2Aj)xuV8je9lG5@ZKo=B&aCEq*v| zTbZdeX5QX7)F#ia(zDt4Hg}nCdZp7#d#>VLwa<^o*i@|jnn?L(e_Ys_=gJXlg)7mq z01>t9gUHAfH5hUgiy8U6fD@`~ni8hFWdGPdZ@xSR?fQF+dr0I*mQ$lweGFXcIktV-R-B6$mV@UHRBWo6 z0xM+`F`45dhNzz%J!-OIv-B^rKj_M`3ddxbw%q*!q0ylqSDex6pyh@LrPPl#cY^b} zZ*an6(C=AP>uog&l!HU{!RfggV&X&*ni4-v<6`}=$Z`>Sd{A5W>x zPsI8a3(S{X0VD4h@&oun5P1l@5)!Z3wLRRV6E>NQVwe~s>^>`PJM91OsQ2Z z@UvJ;!VAgyO=d^cmvsQ=`9^%Vl;|qdO7VDuo6keaBuCI zuOx+mSVznWMPkEF^*k#{o-|;svpz^`3GG=KYHBC)ky>x^_%YvRZvQq?l3-4626O;{ zLC1<4gx->=CKOzPlgF@I+HvAKq2l5Z34P$#4s1EE`PNk7$u6YkF!Xn(e;p-%hV2d+ z0jaEj1E9nx3!M;f@%ssulzkHK-mtrbBP#>!X$xh+M5o1Rv7QI1CfF-cDg6s2I5C;! zU%_q=5d@cj9Pyy@{w~rhY;A>6v8xM6WIIO;sXM$*EGeSkHsK!@8%KykP+&GBck8^x ziuUJ#D0HSD{`PW=YP}9Qt5zfcR#}NOBfCj#Nj?7rBNDE@xWNGIA+a9xL>hjCaO+%m zAU|{<=Z>^X>)JF)-fmR`ybV5^pv|QN=ZtmocULjI4xBMkUyq(R9nWMYt||&6&*ccW zQ7h?M4cdJP-VYI)h&$Rvx2#$?#~34wQ}eOus9k)6+*hs`$&?kP6Dv^ll}?`y$48Wr zq2*qr^P=Y3-kPcL!(pl}aIQWlIiMbf%drgr!PuDY^2F&|o^&Z4#;fI^006-yPt$$6|b419P4#1)wm zbDn8)n>S>S!8uUo!r3~j5(`JqVnJgPn(^EgJAI_B85~;Hc?qm}o4_)_`m5B@ttSF&L6Q!dS(1A1)730rdl>vl1z~~7Gg-dEo*u|HKTkK=Eu{B9%OY=+ zjC?v1o3`3eH1pZ#1ho7Al&T6x`1%>0wIu1YMohoaq$q$X!K}xM(M8(w%oqP#;>G=A z9)%F6=&&zfeLz$IKlr~Mn9W}(5y*e9-a~8l1;R`U4Tlvv@cW zQeEs&r;Gezjduqm9ybZ8(K9$1=Gg0saTDbO&DU}c*cL|EX|+c&8R2vQjgRmzWN(yo zA%$JXyDTRtm(>0C+LI_2ydcKucER}ndxxlLUSDug|pyLc4p*hxE(BsvhAz zo+c}bj(utWEeD>XDmGsQb{Z!FGZwwR0qlDIEZzW&J7#Ri;v2)UiT5tu4)w!C?YqFc zQgL+SmCy}ncs?>4l=nau?9I88VRJHLiY@*ZL|OZ^ihV0kqc?os zSj@-))aOLd$ub4y5t5>1v-$#=2FAw;=HOZ_G)rK7I}FVo+w6xc9Y1`cN{0w6G}MKg zP;S@MrR-x8%=vBC$^Ey0cG9(AnfRkk`0XPkB9h5&TBZJI+^I*+_$)r%eT=5FUWeNr zu9ifNi$c^P@WRDxMzoAxd{f;$MyYk6qsI<6mu#OC&C)Pz7AuZd7T+W%=B5{G?mvhP zBo>W|xAbeh@syX14S289uMe}oSuT!{^X3xTx<8G@FVm;tF~Y;FBTP2Wf&2h!F#oY& z&Ze?#Xi*N9?YK*$8!VFP{v-o>KUgTA9TZnjRZV9fW*WUm7nr=MSH7cG_nuDYrz4{e8xQp?lIC`{e^pqp&BAG=8U;APpDg1 z(${Z+X|JoRi2@tdhbK*14@Z7qc9`8D6k=%Fn?j@4z)+#%lR^4P8GEauTNW?Q*RcxJ z&nc{r<(x(d@!_UCW5(Tcsa%H|{R`TW*{xq2j&@XN_%FL}*v@9EA@abR01E$fa^-qn z62p9em+iA=%ic1x-bPI#e`#V>=zMg4^b2m?Q!EY+tBK0<3yyI;ynq147nD`4w>^@5 zszdK_wf%Qsn_Qx?`=ts)Pa0U9^<0!Oci$XNxzNm@^@ByMFpi*>5ReeTn$u$0oYxT! zoq*~RDiQY(C_#{}c&^N2l5Z9RVYNE!EqHPaR%J%-vH1aCG@D>1(eWC9Ym& zXrST4gngR)I`W3&#tR8dZ?^n2A~t-`@LZVKo!%A;B)fsVphps<{5UsCp9NO4xuU)oc6%a8ftq>^65(nU|2b@bYX7w#RsZv0WA7tQ+RddBZNYOC#4H`x}$1}m=c}VZuL(3ceep( zHZ)&qXA^cL?PanGz3&Ss;Qp_u6J`Y|fc)~mFt{golPTHR`o-?6xmmR8u31rh0#iXQ zg;L+KZj714NSnxx+oCs?u-^i^6&FO0wV>z0Gn_s1#jolN71pB84Z60i<(y|1bTg%T zKy+jj+Gad|?1|1oMXu zJij*qO#5*6yhM2?M)UXI0eKx19w!u9k+ZW_e6MRy-1O-tt=!p?ZuRRCck#PkiiHis zSa{OlG@tw9d zNg;%4Wlyae#rT^a=^6_-vOde~_N*r>LiH+eJ?*ME%gvhqk`Cf4F6=E87NNLcSNH^njs(R+CE55O8_c2t|_7T|Q8e5JCie z#gm>eBvDK0_J#VaE+QpP|H0tnu#0rfHdCa%hAn_t%v>@M0cQvg9%MKS3Y44RsUi@t zDQ8yfptX4c6WWxeZ$(`^hG^ff1T2)R^JxXaHV9HesU;iYmA6(Dz^!FWlDJ#>H!>cF zWmaI3juj3vN+MO^F~XOno}qZ?Dt@81i}IRgga(NBHR%*9Xevg%QFl~n7m>*|n+MZ& z#Re2NTFraDmz`FC&1EEMz=vr_`k-l-QLM4QkJemJ3>(VfR`{|EgPTxLnQHc&6LAG* zyK2%!>a3nbarxpLpJY0y{i$P5jFF^D_!R zR%){H4tjTDDcH&XvEn1zP-^tgQ>sG%_^yM|r(_qyaCC|P9cu=z?C-ALoz0+)xMtOc z$TvRH1f#BA39u{5E?K=_ECtwCb?%6X`>y%B+_9Sp;;!IpK4@Yk=#hqC>|aFsC|wp@ zr+`7R`2dxrM^$kC%Io?&?~VB?{e-%85`$x}&tbcX-`dTGYbBpLa03R4Vk30#m4De1 z;Qib(Iq~AoU@u)cb=ss-wItGYu|$}8q5T7R)}dS^{Q+|aIQmO)J$sn6J|uE36F$I% zPB9F5u2`q`DmUbt*t2HRh*aC~-ss6yKwEEDo|1HcR7LwP{GMmhbpv(e7@$c?(o2Dy zW9kU305V*{K|tgOy@d7mSItftytebLs##To8#5m5RsQVom2^4Qg>qX%T(fw7|JTfq zot_YmbQEne~Xry({ieJJQ+)<|4ewgp26jgA5?s_oLX%$#@3jpYOiOlsxq zEo4FZBln0OX=JIUxEPtOH-*7+$$t=33+kEs?bk7+N?w}&p`D9Zlw@!%~nDT zcha3Zq%9xBNB(dOCAlILskqW!5}Q;NDqj++ZsoHmqC`kHZcfI2zl(?#rVCP;ZjXvW z9p`<(Q76L}LY%z`pP`7z0vy@~M|#lQ!GFp{o6yNQ5Ctb)N^vKEh9CDOke)-W32ofF zH}1GP5<}t$-#oM&$&6D=Cr^U>+@x5<7L~;VeV{q4~#i!jXR6)6q)Gt>grt5J#7ox5+pt7YH|#^vzARu4NIQu@rDIuun9eACu~ntClR%s1wZ6FB@o#+ zxT$y)3`2bKfF(vo)@n|fXs_$``HT>_Q<)|#m^bz>6NYSe zFjQpVLdAdG`Poyf5j9%aP`{0&XAYW-@~BnC^?Xps=@KX1%LENNXZx0gax3SU6~D#$ zur#irAj&At)UkJ~^(tQJ8TQ_jqC}~iVpLT{OELqK`bOverAcjhe@}8;+`9;c6nGrB zc6B~IbZs%}E%HpX0FDQg@CmX2`?kW1!uma;NY^dOLAq?g%aPJi#^cVVEhtL`?qSB% z>wdvKYF`z91(ZGvM$KqsEBsN?UX+TR9*Rnz8j(QRBS|0PG*B)D-~wiaJVu0v$YaXq zM1^|)9hDXqMG<9EZTHZ6-jZHx+p(Y(X)#oLk}EM)2d!R8RCMUi561OgYG=< zEfZH}Xc1AkD{DM?1BtNk;Zmv*qIxfqhJ%n$hdxnete*0${OoZSiwX{sEVM=IyiL1_ zj%2=>@mc2r#;k@@N*@Xl+8q&iKj8ChXkDy4U!}EibQ2gX?bvi9d<z$kg5YX)Y(4e?rt96=qZRQao`%;Y%En0X(bd@8o7 zK!OEmh41B<9_e|6HBw@zHM=pt=$?g7%Y=pHqAd2zKKUZUS#@N)3$S8NPe}JoE*+iF^ZSGG*{7IQd+kAh8Z+6 z4hE+fle2@o80rxMRr)*G*lthN*DR~8hM9*qK;gWvnFiqMC>RwDW>^~c;^6LZmH)@6 z3mD2@$l%xpVFFh+nnm!1$U)*>R1fpPKI8H#i(v(GeFHu4tNybj=Zqkt0xkJd%^Ocu zJ9&P)m}@_Kx}XZnSet7l19nG06G~*d2?wxUjoU3%U#z#NLC>yv8yDF?7PawD321(O&%Wi_*Cb~lcRO=Be;FYXFv`3GvBv< z>P0A9nK!FMEg0UyIUIjNu2tlfM!om~TE$Fz7DR1d{}*PzM93tMCRUtSK7tRA=L< zhA|h{*USnYEWg{9H11qJQ7xx(m*Ev#A6X}%VQL-JC&o>f?Zv95$sj6c@}>qk_WVQ@ z;7S~GLPgS|HV$CT{BR%`ZXABVU@5>Vld+V2b%{x*T;$OfP(-QSuYIIc^EirQnR*;ei=O{2ZN2jSTF{!;s}pTrIlha7V5UN#a{jV z6lg&gk60)4o({ z4AqAjl2kX3=Nd~-A{Ppr?;)W>p-lBZ&*3nkn!g%u>J2Re8^TG1Q!&hLDT4cSDe12O zBN)E>{(+vNe8+N}%PSTC?>!mlX9=*R{1$9+~FITC@!SP8x7C>eLCDtfx|^ zyXI?hle?*x$GFpyOAkh%W_^SH`goWX3x=}iNOp;V4s z-g7*A#?b_D?YwH!9_A2)Ko1fxgEa-gTAiZr7i}ZE4*tcWRXV=#3*Llb6f{2&15yNc zol47QU#62bIT+nuzW7I03(;mcrO^r+NS6W|JAle1q$ zcYXFKAD{J(EN4=P0EfH~nB-p65)`qXD`IxjbXdng-e4VBG0Wl-hECiQyuX%q&&?JB z@g=;JgWTM_nJ7^C%86nfXMmGDT$(^-Y1_^(VxBvd41`M)W|Xj~0#X7edJjL?1tY-e zJZ-Sows#!~%9?X4>qbqENRQcoiT!zq(ijip=jy(+1}dJ**g$MSJl`nOTtz%?pxtUA zFZ9A%nlHcVLG=(N0|C6o(A$80%+s`l+jf!H|N6kJ@?8X4PaqVB*foc~EJ=hlZsc4z zbnXK*QN}5;KZOHZ^Fcr(cB>POU?=Y~$=;z{J;SX|+<#mhPm(6DodA*w$AIz^3 z<+~RG%8VU`RY*d3)f8PlpWIn@1#kZX`UdJPcknWGQVTCO;LO?4YwQeF5^%ogshwyL*9xR!l8uH{}Wmo#M{N~l6x>18{Tf8~;EJxJ+TBt2$dc~Z` zJS|5jlBYi;Pw8)_vT*{}=lp{%tpS1HXg>mSj3&c8nK>@*IOT8NyH%qbVt8H5!L`}J zR+jVK6-&JFsDMoWJRt&ZLNan+c9U$?Di;HT5Uf?Q>P|EN+ksG z##E{a&p!-k@Ki3@`e7D}Alg+a=a`!N$5?rp;K+|<&36%)^VSGxPsyFlkIK~54EuAJ z=abaRvCUhT)`AQM*WNI^v3%rAvO>&R94^CBm7|9LRw83 z>JTpdqBU0)kJwZZSnLQ|n%lgd#M`@4;h2NcP0g)y~NH_$umsYt}+ z!vh{O~eXtFe$8IiZ+FZ!7Dq@-(pf&hC9MjJSCEqpE~oxMM7kDN_U<`M6k)#-Re_BT9pw;NT)8UJ%mbOX zS-3+#o~Ik~NBhd^KI52m05Q~$xY?{ zlV(G5DDS3n4wJJ(EaPVfYRVc-5 zt3Y!ij7QdIN8B}}!K?gmDyu5M3aq`8H_=$00Yq`33&Y}p1qN;D-yGz%XfN742$Ip3A`UTr&q;ae#0_KY*bfF zVxoOsw4DrG6q0X$kh+zyN&;~xzhko5I5~@(V>l?JXIrBqxyKTP0i5RHg_^<-@JL~54UrW|}l&$y1T+S&@EFg#rxs~3sr_`@y z$kx2Ua4#}}xoUlRwZr4no`Auct}h2F9l{?6X<4CGOypVOAb4`i9LxQtVy;um<`HNC zdo5dZjZ$%uehZz*Rxy;l83LF69FS>bsVqvzbtk0ZnZJ^xB3S*O_6t6E$;zezAQgnU zrMy_|I3OQRj6Cy zhXnS`uQsGC*X|yF{R4V$N7iv)XcrWIj?zX(L&@guA&%l6BMn&`Xk|!9B&fZQ#UXyx z3L6=4%G>+ZfHlAAIf*v$!D|5qBK{f2Hy#9~cuQvb zV*;ecLEr6-=j_Pgrbel*eynMD-vWt%0i=#g4@=giJa%_*kbsPCO5m#Qia6Elhl|WI zo%p7(ro1=Sz#_N7taR63JA6{@%qu&Gpz!5OEK5SrKk+xFyF{N_$cB)d$6^h{IH=YlfcMin~;_!T?0&{KqU5v*Uu z$`htw$1)A3ltqdwrj=K(l9NV!MRw^kVj!E#i4_!5;8KtgD{cr@39`t?M2*G7%x9jK z$4+ePR)m1VjP)|v=oz~aS=u4cYh+WTcq4J-J`wy=n^K@q5nAj~l{i-*D92`b;BgB4 z3KGm6Bb7mk8=SzIygwYA1^XC9jwz5e&O7$+9YsMSN1ij8X{Tu@OB4&9sqvoq;;Pq^`Wl z(Tn=oGDy?xeZHIzTLyshYOEv65|q8R9D9NmxI_g9<~`7dHWtZ!)$a~J=t7-gvZ*}X zlh`m`z>RlIK8Nx6MQkCBRT;1UyU$_g{Og}m-LW8O`)4wB2Kem7E$}aKbw+spm~>Z6qwD;=Qr z$XK`V%}8-SZ88AooD*nOFabH5#C*jNKz|J7fY@_Luq9R_fYp+V=*YNY<1ir#`Ki*u zHnCWe7%n$q@i3I1EHftYoID=Ylv9!$1qNc(T#RPp97H92z0~15uM<;0!6E)(F3LpM zoVEuKM*rKQyTO8Ok|-p>U^{Rkk743+G;b^6dCT6}O37D}PdHa$8Wt<64-FHB8nF1$ z$a3Z;K|ShxK2Gr%zUXV*ung$|VuzkL-xS3m@@u*HY!TD1(IxXxLB_l{adtWCk722o zy&P&{XWAH;Ke1!}pPrAz2kxf<;s}c@(buT~|4i;)r%$I9&5JyfOPMI7)63OfXCYOt z!4K)N;)W}JETlI;!Qh=m?$7FUbHdrq+0wi}K9B>67o^W%&_(?NX4_c!h-v||XiPs| zXr8W+r6Aw}pq#l8o0*sEwm>jj-fT9YA245J0mC54b-f)?EP)u8 zFG4*KlIzom`tgyiCujD=BzE&U9Z|fxf3eoURp3XOy7Sf7uQ4Sh6h( zWhMmY<~iv%Tn=&c|AQ63qUgrLgA^&pp*t8#VHMsoK=OWMxVG{hm>$Oq`*& zQgidP8$`evH$lLRfSa(NdAk!VhP>!**wE7RHR4DdyQGu3=y{^4A8=zC4S1+x`R z>|oSB(LyhXk$f_cysh8vw>TO;U+cpwfhD5VvxrAuBU*c5!{2c)m!>H+(&t;13-GdT zUyM|M@G2n;J4t0X{)2#s;itVnh43+EYm`joY12h?XCxs)1xa9c+&;`iT5DdR+f|k~ z`WUd|&^UE;Kk+6Ve0WXgBDsbQUVzfi(RAlj{RNLdZCGNj54mQ=9~6<%3HE0{nv5@r z}|v(#wifsd_{Yi6v~q-0JgihnNd8+SbSo{=2WJnjuM*gh23a#_R+4Z6tqm z$|+fChZa@$?T&&z!9WU#0YvPwy9H|++5Fz)$R~CNPik$oIb5>F(er!5SHFb+Je8xj zZ7PCA>sN}RIVwdsd^*jZePs|~4`^fDT&_m^LN&j=9@|>~-l%^EQ6fpPijNoZZLEpp z{P{=L4NY>N-{X~0*_gEmEirCq6cm}134w{+$a`){JEY;_ma_ZNF@x~R32%XfpR>_g z?Lf8cv@)uVWujXLn7BnLq&7|sl=<{txzSHRuJ#7-7pnlrkJnoO3Vv~to7DJ;9<2I% zj{5oZ*W0=YXjd~Q!OV+=ZI414U_ZRd#(&HPV%{Fya>Zyf)$;~{MduTi{9S4SG2pC4j&zPqnAXWTSE;M>UMRzE6NTWnduWr zA7!sb{Olc<u1M7%6Br`vsu=LtS9M#`fi5#-&PsW=4G|%8 zHr>Tfl>Ze-_KOxxM}?3JW?gW_-)9u}WC#+9ABd(Vd*B(YwO7HMTh-qluO6bF0_ zX8}>T^>AEk1#ZllfdP}YM#TnGDU{Xd?EjB=?d98wQ_S1s&Mpv{w{cdd^?Yb-CDtAs zJRI~q$W*TK{^gjKlbHE#VId_;qHJyp&fc1*s^oPIw$GbO3+Ot9 zKs+d*se|@U)d}o7g!jNQf{a%j*y7@SG)uPP!vlb#H{5<*S&;ijAd2U3ISaHWEg{_F z10_I)n{2JC|Iq4$Lzab^=)HP&IJQAy;DvqgQ^zp4>1Gr2a|8bW5wp8ry`b+FNFrU{ z&Bj7E^$-YExpCj1znZMX_3{7fj(ZWzc7W(hgeM#mW*uA3WaoivSk6W;X$m3 z$|E&0JN#qgjz7?y{4S`to1oe8?t(Sh?{VvOZDm(F*SV!Xi3sgatl0p*C`vuqyK>hE z;5-za&f-8?(9c$4^u9s$z)dy`jnL8~^mj+mP?l~!&ePp>4A#!}n^r*ou zzhGkU`kAzBuI}>vdyBH7OqPmGWw z=5zCe){k=2+@d0pCU-##IA0a}>L5C4#^)VSGz=XaRum|j16wjq*V$XYA8J#mcv23W zT~^(S;L8U()rQ|UlHRFB&SZssr&m$J63*2#B*2Ui!3!+^z!Hu|NwIrajnKVUOqQ{3#Z}ItH4}Fl&7agyd2(4cH zg}Va&$pQRir~);_rxB}IXqQeCE-mQnch6hie2w0{sH0n1^QYS-B6F|7jrvUTwpS6X zuoAa$(JFG>8(u9VU{@ll_@o61C2OjL-7e)*W(kfc!sD%Kou?A!san}Tq;g;93jCON zi5$KIySQS9JV3n&is60m&8=Dcao{4jZJb$6S+K0Ld3XYbYrWx6Ju+2<5ngTM24AKq zq2Nr{;ELv$`u(LJ6b%UiWt4$e!4H1vA%@{p7+d;CKN(#9rIt(i zDKw>qS!Ne5N|8{)WgaYB`SIKt(Rka~Q(xOqdp#h65LOB0H+x-K_RN2GT+U?yKcrg0 zu_j16O}BQ6`p5B)`H86)0g7g6P&43c{%@3-3b>OId&Af!Ub@>9;;G?E6w~iW_r!e+ z2{)80#Rf!h)6B6hYH_5KSo3v%LAqguye`{(-v z@#*~&ZBZWv)$doEBJ2u6Xnl@_mbH)O}gj z9;TIjp4f=mJ-3r?`ftWWI_sg$_T%?aGSX<-K;%`C-hf-lsArOrv{1(N+Uc>4AnEny z%usJga-iNS+l!uvtt`R^Fh}L5$6m~6)T0P}@PA|5o`VloSjec8MQp5?P8R`)%qKiF zYxV3ve+>t`*JZJR!t5Ax{>bYbR6~nfRG6EdH(O4c+G~9-5XiG%Bc+{hc%wp(aV;&t zupoKywS?|2Qi%YE*93qJ6A5INNA1Dj!vDiY(zJ(mTm%;EN&Io=oGQrbC3rDny;jZR zKv6&)s*Yv`x6zJ<3YkU?@0KYG^>!2Un7)GQ-t#b!5jg(k-DNLDP93r6#`EqKPXRjp zk}*k-BzYuAQ~AFpglCfSksqGlq!`@dW*;7l_dIvo6Q=`10cqNk1pa#y-;Ol%lrjMU z^b-v1_7C-SE}UO&+k)4}60j!x{^Uh=)>LsK&gqnO3q8AKBC91}@z9%G+G#IXB-&Kgs8Y2q|NY&Ke%V;{XexFuHJ1(dv)rxh6`ibLx*3AkVq$+$l>-Dz0Y zyj6~eRtKA5)GSFx2ZB+U*!HUvw^K5y0TwJwt+jXCt{?)-gG?bppynoSFgkrQbey;En^RkNYsw|!Gv8=+7iv2Tq!T_P{ zF)K8BS>NCV?Kd6jgIHEen4YMy$pDnjmFjhu;dI-^SNtM2X)PD@J2VNkb5HWe0thrX?H<9M7t`Itw%y0HcyX;ZC8@cnyr zw3cWTNt@RPAxR&>p%%7)=Bt5tdM{k))j2gq5TMkG`f7Vv-)R7?W#ov5%ndZeE(^pV z_+=ebLa1TRpX$O2XQ3!ScBa#vfV$zX&dAo)t*o+nMZ~u>rqTBpfJdVgraU&*b<# zs@jCq2m`W-X}?Ge{{G)@uWFl?46KF1bBP`m%D%(mEHW9&YFrsap@d_=n$G0_`<4e~ayzRn zh<584q6tHFE4`R4!t+sjh{6efbWAV1^XrM2rj1*&3V{1Fas1~|Y2z`);!MKcnf70R zcW_Mkr&QbOiTwa<-g3(xjtOIP$%U-APB*BA1I*h?Q?yMr?C`Ws+JVC zJa6C06ygyZVjZWm|4@c;xY`|$UTdnH5E6Z@B}v@_OlDESNOZ`6z8I{HuHgGoC0CiO zd{I6?)_z%=1j! zA*+_bcU-mn2edj276tL~RqZ9%uinY5N(-4Nb(a$aR7E#JzzTT#gv)b`h$%L(2qwP) zFbIF~xlj2{QCHaInNviOB~zR1mjPw&X@Bm(Ut&RZ7qpw+*a+e#xZcy3#VLu=9DyyS%4o!F5XA3fQC3LWweS@L6a`y z%1rL|ktUz{epvF^L7JOg-z5jLDZ_>zy@?Jb;$h-I%YqPse#x=S(kaIW3pXz+&@Ch+ zlonz6NE=T7S^VznZ1!2n+97`7&K*=}!I<7H>`>;s1@wg>3WqT;5Nx&L6qWPFTYp)J^$&GoLMF4>T-pHT{r}a#rX#qEUrf;F zA&?7$?1M0#ca)+RAhTrtwcFm*`-iNVq%mJ%Rml-)0Gp=`h(+79f6iip7Mh?iP>xSu z#RwuhOb-_<8Z-ZVVzV0{l?4!IP+OOP=`>-++quO)Aa1S` zM{|1PY&$=fpy*m58C`Q2=WqlY2f;d9vSDdCmzwFWPr(T z-`}nWu6SUOE42&*xW6M+tKqRq!#$@sPcnWRH0yq%#1J(Wx!;HwRD6QUPY*9RdEA)x zxBFa<0!-);e0MQ7m)t8DHZlT0@8|lCn}q%J>3JVtA$x?b8T;{l2f;qc>V7}n(FR>{ zEI0;*g(=?3x$~R`az4}$9}s0twokpF6J?J7^xK&%eGr=Mb*R_9Z%Btxl(aFvKjl;{ z=Wmrmf~^hE8ggkos@6|tI|Nk@v&^eHrD@?df!1=WfrH^t!UgfH{lda-CRw0aP)!Y5 zGy*?3xLd%iBaeQKCY^b0JAINTaSzP&1w><|@e?1R?h;5NG#tF2KP30|7A)8!>*A9e zDXWWYEEJpIs&oaQio>E)r>_x%Ko~N8wUA|SfEY6zVsI8n(bepaJ+K?Z|LHt#*RBR| zbS*}@ed;oVNDd8>8flRQ9Sje}$Bf6jQgZvNmJ{TP32OPih0{v1_iYN$9z3@WWNqY9 zSm9}F^OC@34F{a|l)pI0g@b6XzMialX@(D@G`~yz0r{trYOj-l9f3>Ak#5R@toKRi9s=}6>s6M zeYpilySn*2qv-9UeTg44I)Uum5~iQt_NzwX1@MrA(z%49O&HiPgasoxi&25!D!c(; z9{`%+O%|l;V%1B~Mc=1qT$_P+;erxmWLH)bE5TEI05Sr>^cFJ;o~9^e1#3W!`xF?C zwixCUOkMnQCsZZs3b2QnKK+{cA$7g?hvewPecf0)0wr$xXO(18c}PX01$(vdL^n2uzwmc#}GX23anOIE^z&b|nJqZ&hySJuT*0gdK_Ws92KhG{VAIdlYd3x*rEnUht#;2!d+y)$-Ur1gccjA-^zz9gKa}0qZExbT|I1&?UtA zJ&`h^Ih~2X4<{@Pe>wmtqxrFEnjUWo92_r@!P<*C{Q&0zB&%l8uUm7ZQMLJ6ma6Tb zGCmB)0VXB*t@#2jiZKOY2W0~j*!gZfdVBqD4xpG@|5buT7Y0wM)tVry)#;T|PTAzW zR1X!xVh)OBlKNV?)ucMu#h9g=7(}T8>$P^I;2xq50szxMvXlP^>94QD&~7Qh6eK~9 zYUJiIVa|IbS^X;*i_iL#1aUm?940>&jM))9$qaU(EZcsqZafM&<+gM)A=!>&QM-Nd(lh~hLC_h9nq|yIbl_S06>{x z4A^tIsZD3ZrM6=GT`e?{S|UZzucuosamGx?*dum1Vm*NW{yzkS=AXu9+&O4{JT1`R zeyt1MJYc(SgfoTF1{f)Lc9Il#2U~gQT!*8*&z6dRC-av(vw44FMp@X^Jy4_scE5MB zbobtZci(ZN78E>2F{)Ksh)Iop=*QIY@P^fXPcUbAYXe1+chr;UG3F?mR?SGk=wC>p zol=uS(mogAiY3o0_E7phj_fCX(E%uBX#mk8i|yA%Oh4L2;qc6hG*s&wa~E4LtmkTw z3kN#3k>=Bu1t6lx{0K~W`vyrI0ft9ed{CyTQj#{JgT39T??*i<=a%}RAAyLcN%Hoq z5;Yd^b;zqj(~Xk+N?+Z-jt4|dOL(#<(RKxyGqmRN7O?F^pNF*(tZ%Iw9~1BWR6wtP z`EEmwZDSxFyKw)C4DUhsHsKihO)Q~iXparQC8C(qOKTZ0wWpHkU=7OllR3jbwPC_3 z*?m6WN&GM6GvndOMZdUE`e3DpHdyZ{fTUbuy863JRM26{dgIsEC*c~8s|{&~WH9;v zn{oLj;#6THP!g8bOE}-@3hNF=-J(*YPQ}&%fT|rK=YI)odWxgw&ufyPj_?f}>hwug zPeP_4u1XSAJ&`f(ZzMX&RmhWti;B%HRGL*p*|rgDr6qOwAn5}wRc^fMuUq^nL#9fT ziOz_(`R^1ESFxkPlX+gEb}8YGKohvrxrK%5K%QL>wI=&2e(6fS*6S|-rx__Xwhm2f zZ|xj+9rhA~`WVSe!!|9rmigx?+32~q_~u?XSQJ1x549)(-%22-#a@@Z_;!Q%{EdC) z$^28GAvD4yk(R9nL6<_v{ONRb@caK#!=nI6rPTjtV$%7!+41@{s%RMjH_M|BL-w_V zTS0ow(dW8PB3K`)YqyI^*lNim_fz55_A>hKi#-X!|68-~C_V)wcpau{xRLr$H98tw z{X><#J16jZ+^{C9zb@8I7-huH2@G9|gq1i0#4(bSU*ryy;{RZnKwc{OcIe zQ-h_tp#}IWd|(C@+t+(f@RO3(q?bxy>KD`Scp!e0 z*l$I&jdS6+K~(EpTAKFNk>e764#)^sU|`~`=9B42w@7h%aJyF}0w-XaZnDCRrG*RW z{q1hE#Bhe@Z5mtxKinYl_kJ{P^WZEJ`x9{e8?5Ny;x@_h-*8wOg|v^lj+Tx6T-Du= zvff$gusZiO-(SdN&PNfF{z~?K0ORT}G4P?L0edKtXf;_3%4AKsDWt@cccPQx-+5o! zB|h__K8H@g``$2pAaJ?aT_+^ZQTM!UE%k?)kR?Iie^_2rTBtB!l=F)=*9L<23WT}S zgm-m5-QKg%A0PYgHRLkB`48f`EH39Vp5jcy2U<@6^g;No<>}-&h-}M=mJiA^FNz;=j-BXpcL1tdNd<{6%6i$3&6d$2(~ie?VF`* zKh;Cn#VNw-K3Id4oM`vCe+M`9MTjb8?lEC$wVwNVZ}l*&@YG=)8E9~)sAds) zd;BmIlF4XI$#|l5Nli*)u85)xn-HL-BA&y}`7`KZ4^}5>lf1ps?hXq(!jZ&9rInVF z%j!lGB(u@7^*TV_Ah}-tsk`CG$UQR1MP7Dqaq!o9eHz^3Ywe>AwIh-cAJt+5L=#>wB4@5 zn_u{anBt7A42{MYdi7Dd_Sk?@(O&ywtscj(ejN{fGQad*4~m%vS~94)QvyOtxJedK zbmG1UJ?v4tYcq)jF9qp_?6=cG5gGPLRlrZ4{L!&*e_|EcLY)wk8-zLsZu)1M3Er9` z5r;`Aj{i=c{%4qICbOT*{_y2m)vOhOd^Tx zM(@K0MH|;uA;!@!{QJaj7l~bd{(+WM-(qYUD+NER^}R>PlS+)||B`cw=2E0QgV48O zfRI;(vGpl#h?O8MtZgF2I2d^}XD!ePJlc#INW&tvgqx=h%!Ww){O5F9#r^0Ll1e0i zW8E+rXc>kYcSj@k6H3CzcZjN>VFsk2*IJFnR^xJ_^cuopgaR~cJ8L~;h6#o4w_#X( z&_SQm>-ZmcTc%t&UxudJ_q5-SFfoT)V^zH7N}m%>N?}_p57D7pF-?)>OoTv{$r!}< zLoxsow$<3Ru;(RIY-~sv`2^vmylwnUS5vz39qe=x{^U-1&idzlrt~&2K83AH>)F1D zAnH2v_b%RMltu^}wtA-rN9gof11Ld`R4)xdOM#iDKzT0mg=Mc8rt(_$wzu-WO@!R@ z8km#^|6wATYrR>X2OcQ;)|*}Y5NIMVj?0BW!Dil-(-q94(WC3F=YU>%z<2hazy|~o zE8hNQ*v~Hp2465%R?U&dUh4zqrtPP=IVYev?Z|&2*|W@80_uCF?$fMj(&IM)J)lo@ z#EA54QAn6U?@ZTJSY9PH&OgD2jDZ*(^I)M)nluuRb%eO2ItK4lmAq{PDv!ZWY}iO* zq8!c7KepSZ&P)ELHA&grkJ7~B21-Z4r1=Qcp6#Xv`8P6yLFiwpfesX5!QSzwxSX{# z5n%EmE~xIAfw-sVVOZ|@^_8aW0ApFO)|I=MMw}6O;M-v*oy+kgK?E`zK=esS^o{r6 z? zhjKnMIbH8v`0z{}2tpKgeag!O%iL?#`vpRhI~;^M)<%Uw$VfBwQtJ!7kU5gS5V~rJ z^Fy7YioX%SmW4KUjZv^ojdW~ww16;c`Ml{Yh!W3IgAE?tA&f@$!1_F2W(R+ zsXU|d=^h4)t>Vf!>@s8K>BG9>DHBgozn`O4d}esN4R84tms@B| z-<2V223{G1doAelgjQ_MZXIkA)?32;!F?P6wevpsSO&C#SmRmuCds*BEAC-^6|=?> zZL}kK#xqnD4b_z|&oJX_+K7BwB|N*xTG~6G$o)Z`#l~7@guakK;g#eeFO~+TgM8u6 zio?W`yRYga5OtB(noG5aWbaz;u^<8K0l9sF$oI)T2&HF;XmCQ^+TfVC%Dj?Y*KD*z z_bFm7bcIu#jO*4<7vLt_` zR`HK{P~z3*&SQ7%V775{WoM?bF-qT7rdI~RmvB2T2|(aKkdKPsV!Q&YdP+t%a6FyW z=R>L3?Mbukk4X)q+=JJ6=f0a=bfzzYmojRM^$FCKLYlc!NuQg2;P!%+SZJ3u?tW@r z*`-sK?5jJ^!RAnQuj~k4FY4ZBWG5Z{3cJ14R~C*>ydFGg3rzgcAW8A8)t!dYo=w;x z%GcA}5T0x-F~ypQtxkEK6k(t|DKHZ%W1WhY5#zxSOfk$%+(bT8{{7-cF`b~N3nET@ zDC@=tbms7$GKSj~>BC*WBgWjNzdtq1%TLuTk20pM>G!PMBpXJ(k`$Q!iL*=3+EZ8D)q!Uu#h~WlSgV`EXo_FysE<1YLfEuJ7D4Ux@%}37mSbWV^c2SxK7w?RI(Am~IOIbaHBr)jMwb4JpH@q!52Tv9 z4^&rf)(X=#zFm4k^8}MT(GU`NLqtWxnR7pd#Av1nAvJJYd|cz4HzRNTHRn7a(#P97 z5&sRBIr=|+_AM!|Dhm%SzO?mKaA`pjij6%L1apxH&kEiW?Bx@l9FvUXuV>-hsj-Mj zA#0I<;}8f4z@3aPy*6dCr%jiBc{a1XI|&NM{SFjGKwhROnUCVqCr^gR@K3HldG8DE zW^??%qIeE{JNqu?3$=&~TJF0G=QegNjY)M(Vv_;S-FlQM^UsZhqRow&3psmF+kW@K z85W2u4CeWFKSDo0w^=>32rbr^@Oc>f{l#I#;vAl`lJaQD#R?!0BZO?U(1; znF&429S7+0|Lm?b!dWtHWn8>33gz}gmUHtAS1)J2xA-njW?Gj|n&aH28(l02m#ut2 z)UK#3aX1fSnpr{}_1QDMmP0JT`x{|IYapP|kjLVbkGFb_%*~j($K&X|6gbzA1^red zXEk4RtUtF>>C+_>Dazbe_O%gCTXPkv18_O2YdAiGiym|X$s`fPV>f7J*H7FoR=4u) zrC*b!v1(XuHT+&HP0c{Zc%>fMp_&7KYlQp-00~LkKdq!f!ftrFM_;qF0sRep!bvU& zb1QA8q{_Z zb#19(vsh{B?_z0)e|8u@(_ErXO_k(c9f_oDm@}t5*b3ka3%IZkNoOBi_58gPIw(@t zvr%&DT8ZnllXGHnt?u`w6G1sGLBfS=$P%-^IS_ip~dxX\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n\r\ + \n :local UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\r\ + \n };\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :local Script \"mod/AM-Certs-By-Ident\";\r\ + \n \r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetch \ + check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ + rsc\") output=user as-value ]->\"data\");\r\ + \n /system/script run \$Script;\r\ + \n :global tmpAddCerts;\r\ + \n :while ([ \$tmpAddCerts ] = true) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n :delay 1s;\r\ + \n :put \"Removing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (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/728/bebacfc7\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 11:00:05 30.06.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="Download custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n#:local ScriptName [ :jobname ];\r\ + \n#\r\ + \n# CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n:global tmpAddCerts (a);\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n" +add dont-require-permissions=no name=awg2-webui owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + :put \"Download image, and save him to usb1/tmp\"\ + \n#/tool/fetch url=\"https://ros.vados.ru/docker/awg2-webui-arm.tar\" dst-\ + path=usb1/tmp/awg2-webui.tar\ + \n\ + \n:put \"1. Create veth interface\"\ + \n/interface veth add name=veth-awg address=10.9.9.2/24 gateway=10.9.9.1\ + \n\ + \n:put \"2. Create bridge and add veth\"\ + \n/interface bridge add name=br-awg\ + \n/interface bridge port add bridge=br-awg interface=veth-awg\ + \n\ + \n:put \"3. Assign IP to bridge\"\ + \n/ip address add address=10.9.9.1/24 interface=br-awg\ + \n\ + \n:put \"4. NAT: masquerade container traffic\"\ + \n/ip firewall nat add chain=srcnat src-address=10.9.9.0/24 action=masquer\ + ade\ + \n\ + \n:put \"5. Port forward: UDP 443 \? container (AmneziaWG QUIC mimicry)\"\ + \n/ip firewall nat add chain=dstnat protocol=udp dst-port=443 \\\ + \n action=dst-nat to-addresses=10.9.9.2 to-ports=55055 in-interface=eth\ + er1\ + \n\ + \n:put \"6. Port forward: HTTPS 9443 \? container Web UI\"\ + \n/ip firewall nat add chain=dstnat protocol=tcp dst-port=9443 \\\ + \n action=dst-nat to-addresses=10.9.9.2 to-ports=443 in-interface=ether\ + 1\ + \n\ + \n:put \"Create environment list..\"\ + \n/container envs add list=awgui-env key=WEB_USER value=vados\ + \n/container envs add list=awgui-env key=WEB_PASS value=zoomzoomrulezz\ + \n/container envs add list=awgui-env key=SECRET_KEY value=RanDomSecret32Sy\ + mboLs2325272931q\ + \n/container envs add list=awgui-env key=AWG_ENDPOINT value=10.30.30.10:44\ + 3\ + \n\ + \n:put \"Load and start container...\"\ + \n/container add file=usb1/tmp/awg2-webui.tar interface=veth-awg hostname=\ + awg2-webui \\\ + \nroot-dir=usb1/awg2-webui envlist=awgui-env start-on-boot=yes logging=yes\ + \_shm-size=4M\ + \n\ + \n:put \"Start...\"\ + \n/container start 0\ + \n\ + \n:put \"Verify...\"\ + \n/container print\ + \n\ + \n:put \"Should show: status=running\"\ + \n\ + \n/log print where topics~\"container\"\ + \n\ + \n:put \"Should show: AWG started, nginx running\"\ + \n" +add comment=Generator dont-require-permissions=no name=AWG-VDSina owner=vados \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v2)\r\ + \n# 2026-06-30 22:08:12\r\ + \n# ============================================================\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# Auto-detect storage\r\ + \n:global awgDisk \"disk1\"\r\ + \n{\r\ + \n :local usbFree 0\r\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] free] \ + } on-error={}\r\ + \n :if (\$usbFree > 0) do={\r\ + \n :set awgDisk \"usb1\"\r\ + \n :put (\"Using USB: usb1 (\" . (\$usbFree / 1048576) . \" MB free)\")\ + \r\ + \n } else={\r\ + \n :if ([:len [/disk/find where slot=\"usb1\"]] > 0) do={\r\ + \n :put \"USB found but not mounted. Format as ext4\?\"\r\ + \n :put \"Press 'y' to confirm:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n /disk/format-drive usb1 file-system=ext4 label=usb1\r\ + \n :delay 3s\r\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$usbFree > 0) do={\r\ + \n :set awgDisk \"usb1\"\r\ + \n } else={ :put \"Format failed, using disk1\" }\r\ + \n } else={ :put \"Using disk1\" }\r\ + \n } else={ :put \"No USB, using disk1\" }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall script\r\ + \n/system/script/add name=awg-VDSina-uninstall comment=awg-VDSina 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=\"awg-VDSina-\ + env\" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local storageDisk \"disk1\"\r\ + \n :do { :set storageDisk [/container/envs/get [find where list=\"awg-VDS\ + ina-env\" key=\"AWG_STORAGE\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg-VD\ + Sina-env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n }\r\ + \n /ip/route/remove [find where comment=awg-VDSina-tunnel]\r\ + \n /ip/route/remove [find where comment=awg-VDSina-dns]\r\ + \n /container/stop [find where interface=veth-awg-VDSina]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg-VDSina]\r\ + \n /container/envs/remove [find where list=\"awg-VDSina-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 :if (\$storageDisk != \"disk1\") do={\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n }\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg-VDSina\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.75.208/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.75.209/30\"]\r\ + \n /interface/veth/remove [find where name=\"veth-awg-VDSina\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg-VDSin\ + a\"]\r\ + \n /ip/address/remove [find where interface=\"wg-awg-VDSina\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg-VDSina\"]\r\ + \n :do { /file/remove [find where name~\"awg-VDSina.+tar\"] } on-error={}\ + \r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/awg-VDSina\")]\ + \_} on-error={}\r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/ru_ranges_time\ + out.rsc\")] } on-error={}\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { /file/remove [find where name~(\$storageDisk . \"/pull\")] } o\ + n-error={}\r\ + \n }\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n /system/script/remove [find where name=awg-VDSina-uninstall]\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg-VDSina address=172.19.75.210/30 gatewa\ + y=172.19.75.209\r\ + \n/ip/address/add address=172.19.75.209/30 interface=veth-awg-VDSina\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.7\ + 5.208/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg-VDSina private-key=\"4CHyNhbOs923/E\ + yNDguMXJXdghL2I3UyzXPwrANVgHs=\" listen-port=14710 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg-VDSina public-key=\"o5Ig\ + Cl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\" preshared-key=\"RNvF7T1cg5tyXcY\ + QnD9N5BEp6e20vVJQTv0GMjyvHU0=\" endpoint-address=172.19.75.210 endpoint-po\ + rt=51820 allowed-address=0.0.0.0/0 persistent-keepalive=10\r\ + \n/ip/address/add address=10.9.0.3/32 interface=wg-awg-VDSina\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_LISTEN value=\":44044\"\ + \r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_REMOTE value=\"109.107.1\ + 77.79:55055\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JC value=\"9\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMIN value=\"105\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMAX value=\"920\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S1 value=\"90\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S2 value=\"136\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H1 value=\"472437748-472\ + 438637\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H2 value=\"707808381-707\ + 809250\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H3 value=\"1609078552-16\ + 09079495\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H4 value=\"1012329484-10\ + 12329741\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_SERVER_PUB value=\"o5IgC\ + l1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_CLIENT_PUB value=[/inter\ + face/wireguard/get [find name=wg-awg-VDSina] public-key]\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S3 value=\"45\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S4 value=\"27\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I3 value=\"\ + \"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I4 value=\"\"\ + \r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I5 value=\"\"\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\ + g-VDSina-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=8.8.8.8\r\ + \n#/ip/route/add dst-address=109.107.177.79/32 gateway=wg-awg-VDSina dista\ + nce=1 comment=awg-VDSina-dns\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_STORAGE value=\$awgDisk\ + \r\ + \n:if (\$awgDisk != \"disk1\") do={\r\ + \n :local tmpPath (\$awgDisk . \"/pull\")\r\ + \n /container/envs/add list=awg-VDSina-env key=AWG_PREV_TMPDIR value=[/co\ + ntainer/config/get tmpdir]\r\ + \n /container/config set tmpdir=\$tmpPath memory-high=200M\r\ + \n}\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 :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={ :set file (\"awg-proxy-arm\" . \$suffix . \ + \".tar.gz\") }\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 \$file\r\ + \n :if (\$awgDisk != \"disk1\") do={\r\ + \n :set filePath (\$awgDisk . \"/pull/\" . \$file)\r\ + \n :do { /file/make-directory (\$awgDisk . \"/pull\") } on-error={}\r\ + \n }\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0) do={\r\ + \n :local freeStorage 0\r\ + \n :if (\$awgDisk = \"disk1\") do={\r\ + \n :set freeStorage [/system/resource/get free-hdd-space]\r\ + \n } else={\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\$awgDis\ + k] free] } on-error={}\r\ + \n }\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 } else={\r\ + \n :put (\"File already exists: \" . \$filePath)\r\ + \n }\r\ + \n :local rootDir (\$awgDisk . \"/awg-VDSina\")\r\ + \n /container/add file=\$filePath interface=veth-awg-VDSina envlist=awg-V\ + DSina-env hostname=awg-VDSina root-dir=\$rootDir logging=no start-on-boot=\ + yes comment=awg-VDSina\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg-VDSina] shm-size=4M\"] }\r\ + \n /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-awg-VDSina]\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-awg-VDSina\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 109.107.177.79 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 109.107.177.79 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-awg-VDSina \ + comment=awg-VDSina-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-awg-VDSina\ + \_comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg-VDSina-tunnel dst-\ + address=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg-VDSina-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=awg-VDSina dont-require-permissions=no name=awg-VDSina-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=\"awg-VDSina-\ + env\" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local storageDisk \"disk1\"\r\ + \n :do { :set storageDisk [/container/envs/get [find where list=\"awg-VDS\ + ina-env\" key=\"AWG_STORAGE\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg-VD\ + Sina-env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n }\r\ + \n /ip/route/remove [find where comment=awg-VDSina-tunnel]\r\ + \n /ip/route/remove [find where comment=awg-VDSina-dns]\r\ + \n /container/stop [find where interface=veth-awg-VDSina]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg-VDSina]\r\ + \n /container/envs/remove [find where list=\"awg-VDSina-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 :if (\$storageDisk != \"disk1\") do={\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n }\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg-VDSina\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.75.208/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.75.209/30\"]\r\ + \n /interface/veth/remove [find where name=\"veth-awg-VDSina\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg-VDSin\ + a\"]\r\ + \n /ip/address/remove [find where interface=\"wg-awg-VDSina\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg-VDSina\"]\r\ + \n :do { /file/remove [find where name~\"awg-VDSina.+tar\"] } on-error={}\ + \r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/awg-VDSina\")]\ + \_} on-error={}\r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/ru_ranges_time\ + out.rsc\")] } on-error={}\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { /file/remove [find where name~(\$storageDisk . \"/pull\")] } o\ + n-error={}\r\ + \n }\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n /system/script/remove [find where name=awg-VDSina-uninstall]\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" +/container +add comment=awg-VDSina envlists=awg-VDSina-env file=\ + usb1/pull/awg-proxy-arm.tar.gz hostname=awg-VDSina interface=\ + veth-awg-VDSina layer-dir=/usb1/docker name=awg-proxy-arm root-dir=\ + /usb1/awg-VDSina shm-size=4096.0KiB start-on-boot=yes +/container config +set layer-dir=/usb1/docker memory-high=200.0MiB memory-max=2048.0KiB \ + registry-url=https://registry-1.docker.io tmpdir=/usb1/pull username=\ + amsternl +/container envs +add key=AWG_CLIENT_PUB list=awg-VDSina-env value=\ + "NAonhRSuFIrFpNKTs5X32ItcvFuO1kiJUigQZb95YlE=" +add key=AWG_H1 list=awg-VDSina-env value=472437748-472438637 +add key=AWG_H2 list=awg-VDSina-env value=707808381-707809250 +add key=AWG_H3 list=awg-VDSina-env value=1609078552-1609079495 +add key=AWG_H4 list=awg-VDSina-env value=1012329484-1012329741 +add key=AWG_I1 list=awg-VDSina-env value=\ + "" +add key=AWG_I2 list=awg-VDSina-env value="" +add key=AWG_I3 list=awg-VDSina-env value="" +add key=AWG_I4 list=awg-VDSina-env value="" +add key=AWG_I5 list=awg-VDSina-env value="" +add key=AWG_JC list=awg-VDSina-env value=9 +add key=AWG_JMAX list=awg-VDSina-env value=920 +add key=AWG_JMIN list=awg-VDSina-env value=105 +add key=AWG_LISTEN list=awg-VDSina-env value=:44044 +add key=AWG_PREV_DNS list=awg-VDSina-env value=8.8.8.8 +add key=AWG_PREV_TMPDIR list=awg-VDSina-env value=/usb1/pull +add key=AWG_REMOTE list=awg-VDSina-env value=109.107.177.79:55055 +add key=AWG_S1 list=awg-VDSina-env value=90 +add key=AWG_S2 list=awg-VDSina-env value=136 +add key=AWG_S3 list=awg-VDSina-env value=45 +add key=AWG_S4 list=awg-VDSina-env value=27 +add key=AWG_SERVER_PUB list=awg-VDSina-env value=\ + "o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +add key=AWG_STORAGE list=awg-VDSina-env value=usb1 +/disk settings +set auto-media-interface=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=wlan2 +add bridge=Bridge-LAN interface=wlan1 +add bridge=Bridge-LAN interface=ether1 +/ip neighbor discovery-settings +set discover-interface-list=Internet +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/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=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +add interface=ether1 list=Internet +add interface=Bridge-LAN list=LAN +/interface wireguard peers +add allowed-address=0.0.0.0/0 endpoint-address=172.19.75.210 endpoint-port=\ + 51820 interface=wg-awg-VDSina name=peer8 persistent-keepalive=10s \ + public-key="o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +add address=172.19.75.209/30 interface=veth-awg-VDSina network=172.19.75.208 +add address=10.9.0.3 interface=wg-awg-VDSina network=10.9.0.3 +/ip dns +set allow-remote-requests=yes servers=8.8.8.8 +/ip firewall nat +add action=masquerade chain=srcnat src-address=10.9.9.0/24 +# in/out-interface matcher not possible when interface (ether1) is slave - use master instead (Bridge-LAN) +add action=dst-nat chain=dstnat dst-port=443 in-interface=ether1 protocol=udp \ + to-addresses=10.9.9.2 to-ports=55055 +# in/out-interface matcher not possible when interface (ether1) is slave - use master instead (Bridge-LAN) +add action=dst-nat chain=dstnat dst-port=9443 in-interface=ether1 protocol=\ + tcp to-addresses=10.9.9.2 to-ports=443 +add action=masquerade chain=srcnat src-address=172.19.75.208/30 +/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 walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add check-gateway=ping disabled=no distance=2 dst-address=0.0.0.0/0 gateway=\ + 10.30.30.81 routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add forced-ip=109.107.177.79 interface=*A type=external +add interface=lo type=internal +add interface=wlan2 type=internal +add interface=wlan1 type=internal +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Amsterdam +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=10.30.30.81 +add address=10.30.30.10 +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="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=Generator name=awg-VDSina on-event="# ============================\ + ================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v2)\r\ + \n# 2026-07-01 00:03:43\r\ + \n# ============================================================\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# Auto-detect storage\r\ + \n:global awgDisk \"disk1\"\r\ + \n{\r\ + \n :local usbFree 0\r\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] free] \ + } on-error={}\r\ + \n :if (\$usbFree > 0) do={\r\ + \n :set awgDisk \"usb1\"\r\ + \n :put (\"Using USB: usb1 (\" . (\$usbFree / 1048576) . \" MB free)\")\ + \r\ + \n } else={\r\ + \n :if ([:len [/disk/find where slot=\"usb1\"]] > 0) do={\r\ + \n :put \"USB found but not mounted. Format as ext4\?\"\r\ + \n :put \"Press 'y' to confirm:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n /disk/format-drive usb1 file-system=ext4 label=usb1\r\ + \n :delay 3s\r\ + \n :do { :set usbFree [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$usbFree > 0) do={\r\ + \n :set awgDisk \"usb1\"\r\ + \n } else={ :put \"Format failed, using disk1\" }\r\ + \n } else={ :put \"Using disk1\" }\r\ + \n } else={ :put \"No USB, using disk1\" }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall script\r\ + \n/system/script/add name=awg-VDSina-uninstall comment=awg-VDSina 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=\"awg-VDSina-\ + env\" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local storageDisk \"disk1\"\r\ + \n :do { :set storageDisk [/container/envs/get [find where list=\"awg-VDS\ + ina-env\" key=\"AWG_STORAGE\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg-VD\ + Sina-env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n }\r\ + \n /ip/route/remove [find where comment=awg-VDSina-tunnel]\r\ + \n /ip/route/remove [find where comment=awg-VDSina-dns]\r\ + \n /container/stop [find where interface=veth-awg-VDSina]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg-VDSina]\r\ + \n /container/envs/remove [find where list=\"awg-VDSina-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 :if (\$storageDisk != \"disk1\") do={\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n }\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg-VDSina\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.75.208/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.75.209/30\"]\r\ + \n /interface/veth/remove [find where name=\"veth-awg-VDSina\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg-VDSin\ + a\"]\r\ + \n /ip/address/remove [find where interface=\"wg-awg-VDSina\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg-VDSina\"]\r\ + \n :do { /file/remove [find where name~\"awg-VDSina.+tar\"] } on-error={}\ + \r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/awg-VDSina\")]\ + \_} on-error={}\r\ + \n :do { /file/remove [find where name=(\$storageDisk . \"/ru_ranges_time\ + out.rsc\")] } on-error={}\r\ + \n :if (\$storageDisk != \"disk1\") do={\r\ + \n :do { /file/remove [find where name~(\$storageDisk . \"/pull\")] } o\ + n-error={}\r\ + \n }\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n /system/script/remove [find where name=awg-VDSina-uninstall]\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg-VDSina address=172.19.75.210/30 gatewa\ + y=172.19.75.209\r\ + \n/ip/address/add address=172.19.75.209/30 interface=veth-awg-VDSina\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.7\ + 5.208/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg-VDSina private-key=\"QCMsDU98Gm+nhn\ + kYRcAN/dyczDYHOLsX3PfBRFjWBF4=\" listen-port=14710 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg-VDSina public-key=\"o5Ig\ + Cl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\" preshared-key=\"b39T9K2/LR8vNtY\ + AZw+sLRze6yGlS3EaZhAa7wiFB20=\" endpoint-address=172.19.75.210 endpoint-po\ + rt=51820 allowed-address=0.0.0.0/0 persistent-keepalive=10\r\ + \n/ip/address/add address=10.9.0.2/32 interface=wg-awg-VDSina\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_LISTEN value=\":51820\"\ + \r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_REMOTE value=\"109.107.1\ + 77.79:55055\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JC value=\"9\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMIN value=\"105\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_JMAX value=\"920\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S1 value=\"90\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S2 value=\"136\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H1 value=\"472437748-472\ + 438637\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H2 value=\"707808381-707\ + 809250\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H3 value=\"1609078552-16\ + 09079495\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_H4 value=\"1012329484-10\ + 12329741\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_SERVER_PUB value=\"o5IgC\ + l1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_CLIENT_PUB value=[/inter\ + face/wireguard/get [find name=wg-awg-VDSina] public-key]\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S3 value=\"45\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_S4 value=\"27\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I3 value=\"\ + \"\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I4 value=\"\"\ + \r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_I5 value=\"\"\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\ + g-VDSina-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=109.107.177.79\r\ + \n/ip/route/add dst-address=109.107.177.79/32 gateway=wg-awg-VDSina distan\ + ce=1 comment=awg-VDSina-dns\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n/container/envs/add list=awg-VDSina-env key=AWG_STORAGE value=\$awgDisk\ + \r\ + \n:if (\$awgDisk != \"disk1\") do={\r\ + \n :local tmpPath (\$awgDisk . \"/pull\")\r\ + \n /container/envs/add list=awg-VDSina-env key=AWG_PREV_TMPDIR value=[/co\ + ntainer/config/get tmpdir]\r\ + \n /container/config set tmpdir=\$tmpPath memory-high=200M\r\ + \n}\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 :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={ :set file (\"awg-proxy-arm\" . \$suffix . \ + \".tar.gz\") }\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 \$file\r\ + \n :if (\$awgDisk != \"disk1\") do={\r\ + \n :set filePath (\$awgDisk . \"/pull/\" . \$file)\r\ + \n :do { /file/make-directory (\$awgDisk . \"/pull\") } on-error={}\r\ + \n }\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0) do={\r\ + \n :local freeStorage 0\r\ + \n :if (\$awgDisk = \"disk1\") do={\r\ + \n :set freeStorage [/system/resource/get free-hdd-space]\r\ + \n } else={\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\$awgDis\ + k] free] } on-error={}\r\ + \n }\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 } else={\r\ + \n :put (\"File already exists: \" . \$filePath)\r\ + \n }\r\ + \n :local rootDir (\$awgDisk . \"/awg-VDSina\")\r\ + \n /container/add file=\$filePath interface=veth-awg-VDSina envlist=awg-V\ + DSina-env hostname=awg-VDSina root-dir=\$rootDir logging=no start-on-boot=\ + yes comment=awg-VDSina\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg-VDSina] shm-size=4M\"] }\r\ + \n /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-awg-VDSina]\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-awg-VDSina\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 109.107.177.79 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 109.107.177.79 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-awg-VDSina \ + comment=awg-VDSina-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-awg-VDSina\ + \_comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg-VDSina-tunnel dst-\ + address=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg-VDSina-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg-VDSina-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" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-07-01 start-time=02:03:59 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260703/20260703150134-Diff-Config.rsc b/MikroGig/history/20260703/20260703150134-Diff-Config.rsc new file mode 100644 index 0000000..7b5f4c4 --- /dev/null +++ b/MikroGig/history/20260703/20260703150134-Diff-Config.rsc @@ -0,0 +1,29 @@ +19,20c19,20 +< add address=172.19.75.210/30 container-mac-address=26:CC:65:F9:9A:4B dhcp=no \ +< gateway=172.19.75.209 gateway6="" mac-address=26:CC:65:F9:9A:4A name=\ +--- +> add address=172.19.75.210/30 container-mac-address=62:7E:B9:A5:75:B6 dhcp=no \ +> gateway=172.19.75.209 gateway6="" mac-address=62:7E:B9:A5:75:B5 name=\ +2989a2990 +> add bridge=Bridge-LAN interface=ether1 +2996d2996 +< add bridge=Bridge-LAN interface=ether1 +3003c3003 +< set detect-interface-list=WAN internet-interface-list=Internet \ +--- +> set detect-interface-list=static internet-interface-list=Internet \ +3013d3012 +< add interface=Bridge-LAN list=LAN +3015,3017c3014,3017 +< add allowed-address=0.0.0.0/0 endpoint-address=172.19.75.210 endpoint-port=\ +< 51820 interface=wg-awg-VDSina name=peer8 persistent-keepalive=10s \ +< public-key="o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +--- +> add allowed-address=0.0.0.0/0 client-allowed-address=::/0 endpoint-address=\ +> 172.19.75.210 endpoint-port=44044 interface=wg-awg-VDSina name=peer7 \ +> persistent-keepalive=10s public-key=\ +> "o5IgCl1/G6xbl6j7sPaP4ZNYREeYOmqZjKbm+v0b9jU=" +3025c3025 +< add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +--- +> add address=10.30.30.86/24 interface=ether2 network=10.30.30.0 -- 2.52.0