From 9b36fdaeca89adb8297517b6e3e2ab5bf072bda3 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 26 Jun 2026 14:21:38 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 26 14:21:38. --- .../20260626/20260626142134-Binary.backup | Bin 0 -> 166939 bytes MikroGig/20260626/20260626142134-Config.rsc | 2705 +++++++++++++++++ .../20260626/20260626142134-Diff-Config.rsc | 14 + 3 files changed, 2719 insertions(+) create mode 100644 MikroGig/20260626/20260626142134-Binary.backup create mode 100644 MikroGig/20260626/20260626142134-Config.rsc create mode 100644 MikroGig/history/20260626/20260626142134-Diff-Config.rsc diff --git a/MikroGig/20260626/20260626142134-Binary.backup b/MikroGig/20260626/20260626142134-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..27a636362367cc95a1c341bd9cf8899f3f07625a GIT binary patch literal 166939 zcmV+aKLEh*sF8CUi~<0Zn1N%0EjSq3u6_`_zeP;|0002|`~QC6&IABh!s&KSEPJNR zqqnw2&3EUSIuQ)^{NQ%_w!yyzjk2>BiPqcqDYKhj)lf~bjCo+4L#`qce5~bT?{3HV zUD8 zpbcUL@j%h)H|-C!eGkqi%Z;XZI`B|I6P%sj%2Tu6JL4MqMt*mOQcMp>l$aF3vQkGh z=YP}P?In~$#8#i?@fwx1uZJV(#VJXNaWhhPs2*>|FJ=dxbedUj^tpu*Z zH~9XGmVc_?l?Zx z_vBpaN&b*LQmu}}GtQD{FCFSVYFIaP`qCXX6#^0)1v8 z=lQ&l2uvD*5S zN_3XWNewS^cm=9H*Yapsq@KO3fAHmwZIJ&CQ(6}H4#X7Upl5k6-Uk0YnvbJrf38G!uu z#W;#9=E~eQaS;z!e~m0^u^UFq*$ccy*AR|9UN3#e*&>_`{0^woVWVNI z4mM&kP~?YK-b=%+dNKoXLd-ey_6aTZ$Hwlpy4tPg|v@@bwkej{t%dRo(5SqNs)Rt5R%%!9PQxqN{@6dZv9;Dvm)r(M3-UqthjPX z6d>YR2I2X#212cq_uT_rX{ms+3n@*H1(TPOGQLVMyL%&9YVjOZ6M@s=RrK-8XqzYG zyOZ*Y&^2u;%aKicxW{cTCFhp)6u~w-4wi_|6eEMN|CtU`!Bxn=DujCj(=v^$d#ey7 zP#Y+3AYF)ztQA;Maz~Y+n(6s=kab&BB-rhw#lB;sk6I%`&6?y<_>4IQg%oCaS5S$a z!U^k943g!%rR2PLLlGJ)!IQ-?-j+`^8Gu41%ayGGH^$1DA6-g+a>smA_A-A-T};(h z?c4xDnyfHaPIsgXaa~iIWdk1XV|3Pzae)yqkt=m4pjMZ8RuAB}-R2%?#uLNZCX=Vx zhaEQYLAw5_WbC&N8A{?XNnQ2#xl%?xmyw>qwcn;5VUwCJnbzQJ+7EUQZv?J>=F%aL ziqp;Slc+6M3>2MJ?g`96Cbl59oSpDm|k zl}lXXo={Cf&`AV(o0uFSy!8l-kvpAr<_TBt=1MZo_lP4=E-h&8w0a~J)c|N&T-9mb)r`{OHN$f-BJRY#ijh4P+fjKB~nOLC8|!EMkJ?$)diqvsFBsQ zS}Dr8K{^(ci5|7>w$B?%R`_C#VZWXLzXD%X2vi@8{LTxBesqXmT)v zIJz4R3H39&dxheOhkr0m%q$udNTr{Bz<+D_Wfs^CphGZ1N2f5dAkmsw*cMAahaQpa zS%N55{A9^7Q9rp|!^OL_wHTv&DmLE{07Q&)Ypk0M27IO*msmQ6X|FuRv?kFD98#FG z={1lH3m`^%LPKjstx08YGK9t@V@qW@TntAle;8gZ%6VMFr68CJU5ndP~Kb$bJjE=T9M-8kM z|A#d+fvr)Aj^QMUbQX$h(xA5q8BaP+g8j5sgy}gYwZUeBaHCK?GRxvU;?%`sk)#KS zM;768N+>D>;J_t;gTC3;PbgDM*&54GI@e!tMPSZiy0V z?o=(-|2#n{dqys}-Z_Ot6WX&#(nCM@>?w*9(!1OGmub}>a63;V0K`T}zL1hSiR4GC zA~Z*C)N6&2HLwIS!Kv&de^f?XOVaxN#^P6H3z658>lR?GCSK`>LHWJG!Uq&Ul_%*R z;P7~yCO`$c0#bV?9(?nt_y`Fi=t?T8KOD%f#qLd|ah97<|9KElC91Zw70j~?!E+U& zhmL9=^{QVE(GEiv6tuU3`V-+ZSYJho27hU~qh01k1e=%EbybZT%+rb$z!?}XcQ;x3 z=q{jdo=~T}iyYZ(XM%__2Lo-4y`lzc7(_txRCpbNqnwGqx=nvb3hgH21H2Ny46 z!w9dn)cSQljhuwjW88rnw!5jUz0B zZi1!+E*1PKX)!bpqJ%#$w>)Q_?cs$!ZGC}QrFZM?U*|zPt&S>Od7uODcBJxU2!bUn zuk)m8Bcaxcw67$97$c^y0{0b&AsuVs@tD;MoWTLyVdrqaH$Jwd#J9*Gec{wQnF@Ci zoh3G4U-D5A(tkNo`sEE^Lp(}Y4OHU)`VEdwHo8}SSNBM`p=d~(AnT{IGPMRKx1a~_ zfUyqx7Klig>Tjm)l?+SI3AlvCU~@e$R|OqFLO6oYGm+tnebU+NsC*=Kd!{7g@D{1n zIcEhGQ!2HallDS+PBx<-{Zqlq25%?DL*8BB@s$ERp>~&Qa@tjZ| zWaMYOvl(Wg%t)TK0-!S9JNWn(VU-eaH0qy$9c4zS2K2=A*w?xy#Nlv*^%AB_F{pvu zyr0z#O30!{6?GGiS_`A$8C#W5G3?7Ijg%zyw3?|KBz%+x6ZaxIE??eK=K^~)cTA~E zyLw^ZDX42y^27Edq~3MdveOb$Tt(_{&Tu5PRo&`kQ}+F#v`UVhl?!`T2nmjroDpq+ zacKetR7>wUK)xh$h4e|tnFa$ZCu*>f!wrN3t3#&oOHfl^a?cUW8`_WFKZzhRF}pPw zo}#hc6y^Ky1T2%b%yD!Mo_5&2_EDuJAgj3MCaFw^B0RA)-<$jsRGbtFvL#eNA|80H zN8DV#i;^w`%hF{AC0H>+=IU{aUo>B)E;R;?(~OX|bO;q#V+OMG5HSB!$m3)sBmG;O zimc9N)G4HN#nN$xj38T}YJ>kY{_4~zEEs(+fl41Pjm#Ce;CPNo_JX`DS1&pq43y1Q zD;BrfsUWINI4GawD#vy@J|WNtOXzw0zMHH6EAlrKT0N~0aJzX_3oTb3GxVb@DF(j~ zm0blU;|faQvs?Z-elWtFH5+qN3Ubf`kjfYHc7aCnA4oJ@ z1AH^F@|eSbWBnyYdE_AZyE%|^dN=jup>J`gUkb2!`sOz{KNl+Wa$YQ#K^5xaL$yNK zlc8OC`DPpgfS?u<_NRvqG+oy8AZN32P{4tXrX`-(?V)s4H2K3=HZq3bXSy-nbD_Ry zY}IJcMg8LCN@stHIOjfJR09Z^@^SKQWlQ(y4S(dkUsd-e4-I*{d`?e7)6t0}=5Xyo zw5k*GYYlDff6Hg#%v1`yS7hc~j!Xb7LqJB{EmbnvCi+RH!2k4^8#R^lxZs8d-+2*Z z9y$bi^)XL=dnnh2BSr^^>VisMb&f4!OrOZzif^B2Mwa}^XAz~ThL`h0=}w~6)m(=R z&&`EJ^t@FiiXM{!pa74Ixbd8~f^ivg|JEHwmh{bC`K{B1!P`!kYbJiepxBNe;3a+* z`rx2}O!t>-C)GCGf5hM1kwuT_#D#%Z+#=?J3`JB{sKm8mrU#*7O&?br#oXbr*w{;d zImOZccsosG9&&-TQttNdyvd;g(#F&okz$VKm%ORN!c4r~lR~)9K(BS>_F;?%#GXG7 zi42u(BBv&Y7ka8r*ui=Y&9UysX395ySI6JVA^Kp|jg({8Wl244eevF4S|NQ1$>jz1 zLk@glCZ%Rvf$R^sv>?4q>m^F0qotzmU3&!2f0fGf$wcdMGA}m;DltVo^wGjCvb++{ z$3Pi53a|s<3JSg&@V(A5eP$K8Gu1(M9Bz$PMUUGF3hm-!R#<5)dWsPUk*w$21uI?n zMPBMS489sIMf03k)V>(LeSm6Zek+w>J11I{XcAxZnEqV%Slj&d$4CLVI_~5j{dqEB z7}PN&C?&VS+LE5voB)FOJC;9c?p>(apGE^PmV5hKU0$S+ZekyTROcXttVn^@ ziN%yUfz|eVc2*6BW0q6u-y8ppy?i6 ziGutz6ewwS?sGXCyL8fyuHH9TrlY)2kYxiR*f+X#e+(X zOTf;_q2_stP5Qnq^)vt5*5nrxpDkhswDg;&58CTo79ylt%el4|abH?6 znZhS`wmC7vC~eXPF2xY~LqyFGZStyBmcvFORF6nZpEw3=_yOzN8Uw{W`{13xZ6WZL z4KtWtJ5@;%YNjz0+3kFx4#-#fSJ2uueYf&eg9NDgh5glUjh|ALC+Xt9tt!^E7gFi=GFP{Au%EWA)M zck@l9FNZ1b7455@9`!DVJi@faGg>tCm@M;*=&a}t?V4kc59=MFo`(;J*OH2B(b$=J zFJta&T%eHj)H^KErrz~JY=O6eE4b{m%EQ{C0H31gy_>H|pUx0t{%AFhRKZxE?{~Jq zl*TDP)M4S8U{B%kyTcOiq%#JHk}GMFsRKD?+K}`W@F4|#@gDM|7vIgTFRc3#wOOc1 zM5tVI@B%ThU}&7%7L`zHUG@uq{s*wlcA!j*sr?dP3c9=I@UMxb6 zw?XS8V-MD2jdkS({P~0Gy?6K+ zRxn~vWJ)+Hf1w~QLPv0=oUmafXdAPN%D`7hEd$-U2Kg#g%7f0rHyDH9bJrdh&MTMG z`^*EwII3eDXp^*SOFOLjyoBfB?-shl8AzIDK z(f3aTX|H+)M#b9layU)$P%83-4FPb=M^vH18-2n7E4b>>bQh$XJpp z7U0%^naOa=aP3hoX8)~yn31X6Z}qkWcsmQH*=nmytgAal-1SdvWSL*CPoZ~MPK3_W zV+erl)L(9t;aZYxViUgBNscItF9uP%aliQnQVhGXD!y{;Mm+7Q0&4eE6x2y;ZHIn&7}cY7KXQ#e)R z2nu=j2|S8X?E{UGtdCM@wH5dL-v+^p>EJJxVeh>GJIAV=0^K2tbK-W=ySY6w-VqtF z;q4Lcz>hk>YG}mw2QEC8syCnM>};>#>eeLivG&(bhnk&(HfZUZl`mLJUK|KhCpw;; zPkJ4g)v6O!BM>{}ss8`{^wT1Vn+x?N09iB#0EzRrWbPBO(n6|8)AIoyL5E#VRn49e z-~}#fkT$?EXoNApC_fQQxUU>zsA;r|W3@SCL!GRgm$#4SogL>e*rogydO5!xe!5U^VmymI~2_Nnk+tPULNQ8m#2usLOcE6EgH3^>PL4&-yH4n+@5w+9htc( z;Pg*uR0gz&&$k|ryJ9CM{=7fcEQ)^gVWQXSPiit!0xLe|+aj=;B6SPnC_V}Khph|G zaLASFQys8tXoCe_FPjF=3>HtRqXY+5OhBOZwzceCLxBPTt&@Pd>qT-3XUS)-%(Pc^ z@QBq+nR13NoEsE2In>yH0Nv1kxEPJ#qPX^a6y|Hqqa1g1<8G%a9g9J`)eb>+w0$}7 z0}N`)dygN4!-Fzu3`}tI92Olf8eyt50IvbhJMIkMUIzStdMHWT=hngaLc;3}WH8Y7 zs}YA=fMzn89sHpC9St|N`dk$F3s?kSpE3VaIh%JVEJ^5D%9UxC^bvRM7O3KsJ}#VD zT=(Xyd?MVO>O`G}3>FztD6r6rklYZb-%TD9=^P-fTfIJyK7hMiO?g4>#^it~h59mlp6k`@~#?;eNPsdo%b4?J=yHNRW!U83POp z29e*zZCJyX>Dt(RBI(IWo4PRwfJ2CADfkwjP;Z3yV^H3&W3A5wctz<4g42WtFH^g> z9X+v+oqcuN@K$M5yYhWFKH_{Q2%LS;s%$8WcnnJfc$t4Jm0L0Eje3(+$>-p#AE>;H z?&C@=NjfMh?t+3ukpZ6XUUzl$@tclDE5>1rqW|zjs^d4-4kwCcDDoU9J3bV0{IPDt zw>w6qd>jh<2#~uvyqmx1Y^1j{DLF-{A)2WA5@pAO`z?cxeoqIf z8!kK*#^i@8Dg$4lmgcZMMgmZf7_{W(&Iixejn<<=h`j zPh??6{MdZfU`uLF8@x<>|2K z6t-C;MF4i8H7%QDXTjzZt{vbn7%UT;JpC%cKl)~jn|8Cxp2?qe3tQdT=7Rj69qtlj z@dmK-?0!gh7dY~^2RyS?M?+RFK5G?}zuY#D97Hu3tI&@D>Rw|4I}UZ1EvSy)@Fi!XW59$E7hS6cP>w{f&~l1{To$*Q9ukW_RkT4bLv!t0 zV-((--A@6YJbw#WtUDlVA`U#JW-l`WjS!U|eeA{hcr}Be{O?%)vF-Uy$yClGipVDy zH4B5Z`7ukk;F#^j)FRg2Zvu8Y(j#}IQ=zy0(gB#sC-L9QHjL4QnZJs~Z?8^dS2MkAaFqKrWH)q|> zqd)LnPfOqb!9V;_oYnxRmAYH_E7TK8FOI^Ji}I9K#a1T z1bIqt>op#X&ENnQi9wvB6&I$C3)hz`5+mK1lgaT+AJ^P@HVZV)K2SeW3n^GXua<4} z;+l7*|BeN84u7MjvfA2REpY$Q_zi?_gG8CE%>lm4J4zjYj_|Er9-ly5=zxYsBC-rL zHTccA{1;Nlg!5=*w5&`It~TZ$A(Smb9nlk@ivdAC>u&@xeU%3>qPKMeSR!9RlM3g z5%c-bWbn=U$Gd%*w?!Da2T&7xVmcq#WZ3Bh*SEZi%(wsc#~LE2C*i@FpbKhv1aXMI z?)($)zf2xN9TwcF<7UmVHg?CB;h4^7&~sXeCB%}RJ=@3Ptj{i6@HzRcDDx`uYk=I76c7y}-zT`KNf zD2c@Vt#AAPUvL(%3%j!OVC7mJwX=Y5KycZMj)v8%b8K2RhLu3RQh`2;RCW4FEjHyO zK_OsGTAvwwo>vd8GF^IaNEBpzX$GXPaJ&Nxv{Z?tsvDu$BC`&YG>0(I&CPNOULXT( zZTOgV(inHUlRr0(EsBC9A)aMMfvR}N+KcZ_?-NqXIEGl9mUu|G-a3A0c?5nFBZ@1;aJu z?1{s35iU5_#Bp?RG8$#^lA~y%(T{4&(2T0_q_gQ561xG5KQR-*N4nC$iw^dSpIjA= zT}Bpm6_P$`KMIKNY_<&V(!_{QlWoAnjR6uoBhukEZjp9y%Q!6Rou#B1hDS4f*UQzY z+Wo~O8V()bKNgDZA`~dO)^}{-G5y7uD)3NU4>muuZ6*J*lFE}+=)gU>ywbZrNqcc% zE+4Q%lI+h$^1(mXqA>__Q#W@3wZ+2m%8bZVTh$P<6AbF1bgy+SO>~UEW!O0Vj{lJ^ zmUN9J1Sk)WX>G{d?E%%6Vv@&^9tqQJ=&D+X=O(A2i19R{HD3~I+kf9f(oS$H4#!R~ zV^0Kp<@<}0UVg9QO@ zly{{o@`W;p2<-r56o{Mm^ftnyD}P?#XEBxhvo_DCi%V9~pJC}4WUe>i6JI_ROjVEo zP{|ChLJjOb-{MWZXx=|t>pT<;*xg68+eAIbwF{7YVj~RP?xd=ldIGncF>UB z0c3%IRWH2%IT(Jr5WXsg>v*-F_Q1mSeVx$-=k`{s}9*i@T5PgQX94YE#18%K8e^`4qt)Gjq2)VYUa_%{7q^AM$);$`JfubWW{eL=~_hz{c zPx!F8sTxbhc!&R~_w2Jtv|$f}Nk-!?c1)5FRnKQkcq*34oE*Doe5%v$V9@g%p`C7{ z9!1ttOj^xs3u>|~h|flcZ6S9>y7|8z7Kw9)l$rAl%t<8aymSvPnZxIR4StV@qlS-8 zrhdXYb<*eYpVuUHCsLzhFh4s+Vl&F?&!zN<(JA~euY|-AG z={67IF9_W?u9VGlK3%&3(!pm6+4DLWTL~m{s95NL|iZJN{8s zvHwI-&evA||L7Fz;`UVdP!U1vc|3WBSAM1k1+EyZd1Cf_PN5mm0`E=cV7*A+4zqY{ z#kQu!=+(~dk9G}PIcayQ)QcjkaBM`2e5|KLU3Lce9llhn4yj1|Zvp^TO(eGpHP5U^ zO&U~H?XN7;{4~|9!8CR+Ms9Fhe%Q_?0e6AYGN=wCGy-nK-WPZeh|^u|PE4n_e=AIs z=)`o0B=J!sLnge0dARup>jC)7Qgq|gr^HdV@M&;xCb!1L6ePss-} z)a?8o1C(8{zxi23F>zz5bCWy5jm_c^;0j-^<`dO>6ogh&09L+ji%AI#@HGRyax}MH$Y3zDz2SD`mGP} zsG*%#yxbY-!SlUPk$;P6nqPL=gF+W2!v3>1XF)TXtZH_%#Su~mht#%FYluToppmJ) zuQ9L9EA-+6u<5(42AJ9eqU5i5Pe{puneGRFQUCG+p!ho#d#h$4XKcfg=Xtkadx#hf zeW5ho#eix6cndIg{eA+z`@8?W)Ilhi8!AiNOST1h(xRP(*Sw_y`f4{$eIg)787RXi z04JlYnXoV~t3) zgb4@|D4)^X9UU*xX^@qYS}+wnr1)&npd2^>li)+COSQKYA+`hU8izzxiEL($?{^TD zko!W%CCGBitVCY^-?XcD;ayLK(DrbTK=1GVsW9rv30WvP1@iRu;qU_lSe!`m zt*;6u=g%M+@kC%6>XlSM^2q|Ltkc1+9|4}<_V$2!UletH~JzEAQkM>4v z#boH2&n7(7F}rkAicNo)CA~HSDy{RA0%DeMyvYis_;$T_V{l?3XupRPrD#w32Y*e|)~ebzLYJ2XwA6+pKdbk ze)Z$l!fM9MI%P3{b~Ap60*GMxK6PcV3?Y2zWM}>31;OXz%JLx8?IBs;m?s4oD?v$q@>)2x$4AKtbLr&sFv z6$~ogLag`mTjMsae})8SEkYru!}KVKM6D`O?{2^84;jj-dVlH+aCX&dIq7RjV-F>< zIPFNa|6-b6t$rt9;7?neYJy?p2tph9DA@Y#dxzZ;KsN3C`p(WSy4z*bRF(a|6b|Bm zkEhBEb7Padt#p-EngraS%73{MzwAlzFQkUoPZiYmSFooxReTT>*#vI>3Y{tS3X`lf zzL7VL8(p|7wv9aiUvG%Ko45jk0S~Y(MlgP8cD!WFoKkS$1%vpnl3zp+3KQ?gBpB!t zZqc!hb=B~VNL5Ev_aT+--VaIXqR{r@{axY4*Ze^yBOF20p`$SsMCBfai3XaBHI;b{ zWw9~^>Y@cxhZ)}(cADU4J-4ohp8JMdi$}9!8E3~zM!sq-G zL1f``DKRZk&wEbMaLvbvq5mqRsDFW(+|k7kDPFLOPlW#}pUm(veoMpomjQ)vlUuL; zjAZ9Y^CkZV0P)8bMAqh{H;~#%F@<5=1gL%JCS%Hj-$Za>-D*yhk;8ducP^Z>PH3C4 z9S@>UiMy&#@L;!eTOn&&L{P%A4@1vtpIJ4FS`P5Xdz?FxMjQmK9FVw5tVB|xQRvr$ zin}lNk&D2M75L43Jz`8A_JjoiF=e(coykZ+J1S*Hle+QSWrKp|lYRD#+3WjwvshQB zL9Uw{**}yTp8j|OXYtUP7&~=$KLZ$!$q;{qf=OPogv}q?S4&|!fvD|e*6{GxwGw)= z?_Jp3bz8+p*8G9S|FTys>!>*f@Bchokuug}_rtWyZ|71;L`Vx(2M4e;ErJ$fRJw!a z_0&Pq&H0I%zum1Y7h&xn!k?G!ZETF=V@H?I`pr1yV(xvyjtu#1K7zJ&5%gEuUs461|}iqf*@DKT2%i#EONTmhpYB%9|`J6Vd4UF<+qCGM1n$NsZM<2(jbH+I(3IH`KKOS?~XBvNEoA_y_@vO{vy4Kc;$B zT)Vvp=jAWTP5DN&voeRE5%kZkmk2C?0@~{-Hv2NX8C2Yb`d#5@iCQ@_AjxWcG9>Zo zc;)eS-;HB%p;g(2yU*nq0ZvHdJvbeG^NwE-KLAKG#Ye0rO?#`L($ECF(eA9g>osGW z8UHdmeB;$PD0}W5mAR8NZyL-iD~hMdQ$wjuQBC^a6jQ4cY8zWuh3wYXxbXtLiarmn zw7E>FJ=F9WI*44Niqs#6v>l%Q(0PsX|&Gmqf)_ z$@6v%;NfU|4*XcrNgE;*28wMlGnhj{Q6YTA0;AX)_?C3w>I)YoF1^{&DUe;8f>iRI zZ$6mB&3l@p*8p@K!AP!5?!`tAIpVj>wkAdg3|dCv>W_yVa;RWdkax@BJy|Hn=YpKe zz3_mF>DEoGKaR9L!SdJIM)>9z>qzNcnaR*ouArc4rQ zXk$^ga_!Lzer2q6Ph`vHn?u>E)#re_UqqYZ_;6e0lR3{$R+Na7pe_RafdS*m*{sPY zCdwU z;cCIlB}{b&0>M@KO&i%L@&qaoGnrIyR|f+T>$4u*llCQ>m86V|9Yral7c@13_|2ya z&l;%74lF8m+$AtlK=u{vLmtDqv|j4>91AzdKR!+|7QMbc?sm5^|NHow&jGl8sK^a^ zhG|BxO?&D>NeaZfDDhAst}E$;0+mO|kZntcd9q(AO}c*(fvy^-=~iEzIUqA?)0sCq+lrL-Vnj#emy%=vXa36i zUEZQa>g5ZF%wuMOy;p@rA1>Ic^AVUaKC$i^a!?WMbI8(D`b<@4xmz#y4KcpfAGJv^PSoHuWo`op)8Tv+2O=t_qkS zwihn-K#v3ir`X#wy{?|3u-g!)i%%Bo8O>{`xjn|jz%7{Q;lsU${Pm$dty8Vx^IYk1 za+rn0{nnn?!BlP$IL|^EM1o1e>q5I|;TsF50av*Ez8U*t-mfM5H$!D0Z;Kdac|Nr^ zFr?IUZz^vdKG8n)fe`2z;Wv8abbHI~z9yKq8LZu(zs9xyNLH$JYjd^YIeFUvJy?KBg=nQtO}63HyX@UQm+|1N~&-V zr=3+CiStS85)VIz1YzM_@^KCrvM))rWh@nhNV7GY5DD`|Mp$tcRzV|wwi@msiqS)x z{AfIB_~tl&)(B_y>3PoTHQ$`61{=AhA?O@RBJlN6A!}3<(_UVw-;>*X)?i#co1^n4 z2_H?1baxE3Z-Fzmtp?RDkl#(|Ek-w{mvxzhTjxTfh>~8JM1#~{#pS4xw}b%XKus^v zz9K4BO{Y2jjyl0Hj#(r_ z14_Xh0OAE{#0D)@H%Dt3vF`2WfI{oHqXa#x1YsuZ)7*N^`G;&^Y6}KsWl?CW@xytu zN6%9p6MrHf-!_$FD4T1R+(kf0#J9Ppr_s2_sY5}yu)LWosaE?K%N^r_g+3l$ALjXG zTL4hm=mV|<@(@p_zYDGt$%LtFU=L&4#x$JW4Q1%1vdPzZ{Yz9M0q9+AN+mo_?Vjh2 zuX@<3ArpQ)c}Y9HkWA@gcjkzSr0s*j<$VTw>?2|mQnR?4fgfh+ZifJe%PV-2IP4Vt z=mrh3Y$~d^2W}^Y;jjW5L*{!kQ7DJ^JD(`jHON&Y5Q^3MgTv8DAU_IJt3`<*DSSF8@dgW=gy;cOP3O)uC1KgXv~@PZKqD#f zWPkF59BolkxyprMq6ZtFQx;elACwiB?Pd`hb zun}zYe<`m0?O%-OQ~vRHT}Gaqf$_ViRiklrLsOOeOM`@O2FX$mmf?jWdN;4X3iT z3A&#cJJAV_KEj^2wTu7PWd^geN{bT(4>C~8zkPRKCmlv?H_Q)KD2(a5H{0GnTn#>q zopFK4kLHDEu7szXrpll!(f3GmWEZC3`(kg9)hb8M1G6AzaaKpnjU{zvyfIaw5bjOb zgiEfj)F;usew|jEWKNC(Xa2})O0^JMm5xyLbNVZ z4Pp`B+p#j=GNp#5RL8w2ZFik15qKDg*50S+e5mskKJQWYf6SHLMDT$hG=&LBxk#PV z8}=Qb6KJCEs=J|_m|D{bmoRS!Jj|*6`L=h04?-81n+*It>d{IHrGbrm&~9ias`L2>gTBF;oo2QGBs1% zo`&|BGJW%(R$6=K86y{dt$Qd$jDgxI zW}^(2dSR#QG82eeJ{A9QXyydU^;n|AwBh(KDfSGs9=^u}~2%_`laybEBtyte0u6Ao0Bk_5E^+fGWK0o}i7d&V#S z2dth8>&VuPgTZhS#$F(B)WCcOp^Ry+VNl!OwGjs#*wxjX?aNXhuDHUS>? zg`YT(XlSZ)%k%0gmnkCBFAI{Q*T9y1x+I<^Wg& z5+fL1!kxMm6ZUTGZOHepB zX`pf;)5xqIlKR66*$j}LB_gz)p;*^hBBTau+NqR&Lc}X|7w)3TLbY%=>g5(3_AMHM z{oq)+Q0g*@?`pnW&Uub8E$Q!L%AlfJ?ytq5dFJezXCQzDW9P^V4q~TUG86n41PaKd z1q>C(GY%w5!mTfck!k^ObV2h*b!0%z$DZ5T!1`%o(3Lg&Br;Us@k&2(5n3K+5zud? z^yD$$o&<`BZOPu~aHL&#Ps`<}58jooyX7;@p*(~NDgG5pC_@AG6SBwv;INlGh(2EC zO&TMQT!Du?uO$p~Fu&B7l4~1u|FG_}?BfA^x0?zQ@D0rykLuBFAJB!QYXkGC#Htex zJ4lV+h^h@f&DJC=*(b$5d*v`+xIe^s4HFFI|7dqLmI>FK_MF-rO_Lk`X359x?7*@L zBQk?7Cn=u@CGJPd0F?STIi7gal1p=jvEx4aH+Lxb6Bx&9ppkBO@z9RoVQI{>loJW>;2aj?|x2)!>=sK zwPKU%O0O(DsVt0A&3dVi%nBUV1XTCs0I+GMo_LBTkO?PQS-((=S~xR522)Kydyt{f zmW8q4+{){85K+yh#~s!K*wemWQQ45IChV?vm)2L9X>$&kK#oWG0)0}wL>WT`n4C~j zC(=|8ZT3Hwb;;U+@i%4HPA581ypJ9*Dg5gRDn! z_rt9tL;p9r`sKcP<+#Udfgtf_az=d!03yl2`k7ej+tNPan>pOWG}bwLXu_h zIb;Vd~&y+mss;UnlLsN{yZEbVROtL_v^Lrprjp4u8OT?|}dcL4=L zlC_~i+p^>X%^za&-It|+Oos@Ix*jv^RD;WY`~883X5b_aKOLAa6KamhHc52jF@C)u z(RsN_Wm&$8n&R}MmaIs8Zt98zj6Mq}nR{td@{n^Fy>%rE2bm)BXqj7zl*)0c4ZmSQ zqPH&C^SiLaN;c&?SARw;Qy%@q`Hjxx3( zp&E9=2avqkU;WDQ>}|pkV)~>k1g6!*@T2TD`>5t=9;NHd>rC;mDIxgbP6sIBIT|$> zs-}pQGd0I+!>@N?&E7u)HFRQoJ<0nuEmC3O=?4~p05k7}OAh%RjWN0tCr36=>lQt< zGnt{N_=&e^oTC8$KLEf2x)>P5#TY+-SU+)QZN0QByAAW}0q$&b9ifAEc1JzufHjk5 z(}t*W=ip6YUD+{9gY6BN2MGZ?%Q=fim@qlIniQ4xXVdl9k-Vy@VPR-7Zdi|i%`QzGJm?Z!i0O}o% zbFlNvp-;KkRubD_D7qP#eLjTUrH?IbKv0YcJ-c8~(1KU742=&{lU{i$0ecAi5Pf}E z(oq#{8wM_e&7fzBYwH*Mf~_PP0sLz5C5kQfB8ByZZNQK-cD>1-AY1^c9YU4W!^wLk z5M@mP_PQ|LsuiSf3Co;^paLnS@*$`AnEXDyJRoT96We+TO-*{9hdJDp&HNKoW{D|& z2zIkXKQvl)!tlX%@Dz9?DGyE01Mi*or=!v``Tuk^_w!T^2ycACZM1-^p zW!j@z$b=r88PMq-3Wt``=U+?Cg%S{KXhKq*fVK#^f+hr=!#o>kuQBN|TzCu*jGu*z zoMSv5%+W?ASYSzA+9ws&roFBySN?)M%@tgMLV0VNV9!lJAZx{16=9T3p0CAdl>XDF zBC3xd1JAq_YK^!CYFLGSw~$O|<{z4k-6%O}wcN%zIXf2zKLc@$DQV$!^>a2zGAjqA zmn~*8qcs;R;FL{eQDxludtVSPp*KW@J3a=&jn-DW4Lmhx@Px~JQ#R$|zpwwu7Sr0U z`D&!5Tu2}KnE9!!cRr*0X_qn6bzMIF57pJ!f8Nh!W!$uY&Dgh`8=7YsZ5<8ZAtZz(qi*sej#&U3+CH&$t- z(v=8Kh5E71|Jk_&ZhBU{n5*x%4#OUUwzRR;zPdYGpodH=h9CjxTCEO5%^#graqG|g zt9gf*16>~;yN*}gm8d7de5AAPWfG_m%CaOTwyt2Ti$upE_&IEapXhsWFNro|9hS8! z`mOr`e*}hU9^k}>l~^n578%d#oKUt+nggSJ@I~U?OPn-SasRO=Jrgnu)P#LJ!Yl;DK}A{@u~%4Y-RnAJ-S)H#w3MFGg(Un-ycHf zfOByGi=v&ep0BHeEH)PYKcgVsiZKUO;CGP|*veiLh;sBz6i;Nwq#Xg~Cc47OZuEdT zJH`nwYY5ht3|ryHGLuBYNAoDsZK{3*!E`YVD3Q)zs&cDvas}Hf+w6z;yrJm2ZFKv>w{=4M7L3(9X}>( zsr1_4Me^?=O&HGiZOMxIRHX#fTV%QiG4Dm0`bHGiSHcUqiMr?DFsSO}7+~PLnM8!~ zq?`KA)rSB#{d#<`|0_#eJV%T8n5&Z4AlYB1Jk~TpvYO#%q`O%Px{`0`kHT@+1y*z1 zqSRji^F`-rEJ=v0C~UNAy6zJM8|@J>AM6^FFN2W5?P%wH^CcSzPlPm9yYoL%^T|Ow z1QTAIn_9z1xM5Y?C<$FLmb#)bCrQ}!teB)YPhcOK*0sKbPcf#dTY`jrh zg-Eq&Q9o_Jj#S)y$qa{ZSGG+z=4BurrN&@&<4dvsrn?021U@Ovze6w4tJ@b};`@QZ z2UTi!q!};5pSoz`_toNOd^2M?otaUg=j#-j`uYQ*1b&RtUVl zlo%Q_N_)@C0cW$yz~O$?Zn1H}Fx>iWEFAj!BTlb)lL+`@Hg8SGU{{R{*Y^SToI6T^ zM8vi}N*hFBvIYU+Ki8^;z;Q_PHYSz+D~7e%uN7@bUwH>*sA3IaHO@(Q*QXf`HIFD4 zi1#?=D7}x;DJCbLN74Aco%7OKUGug=276$`fEBCa#p}0RiD2_Y7pwJDUs!)voAAtB z7>V?UbTG%7HQBV3h^dM8yf6{<0Y=Eot)A2$-Y`ej?cm-!>6XwS>il_~z_-Z17)%k* zP2gNJHAY0JavtHTwBMCVJ0Z*Chdzrf(9Oc9eliYa5}Jn8vLhWbC-vHbU5_+33~BT6CSgtsoOW!bqyj-VL3Fc|rIxqk-XY8`gHImtH9 zTzVt0OrED+EauDjqhc|q;;Mh=LcCrxoj~HD#3H}N2BYQ3%Kr#PC(#xmuEcrB0Ur3M zw0UDFWCXO2cB2lZS8AVO!%-q&cK@WfAxfWUHu{2_)ky69x^K(mX@_SFn=LCRDy)zR zJX&Cy7$)fQ#F$|2@8nmwxcw#Rzbrj2M7zwAduU&k03H`xEiiP~X)e&^q| ztZzTi;Q^pof@IWMQGf60oX)rR%K&f6OdCF{7!vuYqMk0ME%gUyu9t$)QIp>?1BA^P z-7rIv8xQVUA8?rM&g!bnPeKxcsM(QUrh8!>TTNi})@2ruCRnT{EJc%vOl+-&NeHNO zy(nI@sOg6yN-LYo6^G2QvZwI{tfi%$#-uZm>a3HcvDliKeOC2MZ%Gk7U7a}9tG<%9 zEf-T1_K7UlulZ)Jpfe#8yu+x(CU2;4Kj(&b@#Ub&m<<`B`Vzm(fDbuO%;Ty6A31w# zC@s9?Px)S#>e|)KYw{@pf7S95t=S#Iy?_6gThwDSp|5)8I?+Fi4;b~H;b$=FB#J}F zpxHolfMMviL@e~(e9yOJ-Vlc1oa#F6UnfE7B{UK$jLZjoLcE^$UjHZIdAN8Fk4Ek2 z-!LcHJ@7~v;Hov{u3dEAwg}#0JK?p!0$9VAHqoWON(Z+^VLT+cgMXJu$zoUr7`O=3 zW=g>6H*14AisNG8|0?nsb*H;)R2aEnyLl~iP=k~wh}V=uMVs;m2Ymv47Sls{hi{

>H2onfz*jo@6vB@UukeKPvuA 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

U7$;=9D zW|>dV5GQQ+;ROVypZ^%9x|7eR1~tb-ff^m4`TK!Mvpvm-0Lwj_Ovge5P*rU3pe_G; zY8wnc`$Bisf&l`6SjiSz&>B?J#sqI$2T^CVwVHkz0lfiDy%KxV=Z%bPM;~$$$A4JI^6J6)Y9#18|uGH zc+xdK_XC<)oL%r!htxp6^9z96`o)n8%jf)`%6tA?E1z*J6lNK}jd}33FUy%VC%(b4 zviHC*mYaL}6jk5TC(gAFp&3etpRodL8dbm|UMBX;Hg#cAUJTTIOTo9_Rr;AKR#|rV zOhvy`c-E9 zYIF!m1*#(5zNijL(Z|R7pI|;WZi9KxB0Sm3u|b&`ob}Z^H^9}wm{w6k%&(u>^QSeD zY*$a>alG~azstwy^DtX-AXKSC8?Ak;BuWEa4N6VFcU1RLnNFUgh_b;t-c^g?w6Ip$ z=QlTyL%R*!dDppmEdWTr6qbVb2x!k=D)3T5!8#`BVO@U=;#%fE?X$ahPb1+lmM&a8 zZXUk^v(u204*dDAkF)VCQTVCPAJv5ZgMnv|6}yiYlOn&97SM}W^iS8Nmpj>tigR>j@VSs8IlJHJ0(xG8m}F<>BD=Wb zT^gqYewn@#RVR}qk7WZaBfPk8>a^dp?YXbrkm1sf&Ef?3AD|ZL(14`Q%-z~{YmY;h z$R0>ZDW@hq0eiqR!n4w9+G_VsD!;D$2V4?VA38-V!ggY-sxLCBK4gs_gCneOs;(b> z$LH%|pYBV$TI{4j5w+V=1zkWR)1go1!~kX=d5|dhu9sv$9!#u--8l-g4NlWTp2&vk}gwzZen*0#D#!UYtBlJho*d)5bu1qf@Yxt%v`zL)M)pz>UO;v(dukDQRl_;x)3ukNU&L3h zsEIfO&NiAUaczJotlRdOz{A!MeX~aY)jBWIa)+sVrZG6o%&gfcR}3E>(~co^W$FNiDxc{xtl`%1jN6i=?MxkwtPmf zn+MG+!EPD$ib_{MDNcP^KXbu9=2-Sf(X$)WFnh>vE3GGdv1OJTEw<8LB_D~dzee~@ zz&Q9+J_aNAIKMW>6-BDFBj*8*ljXg;u3%4rg z8sQM(_w(4D8urAn%c<5_wtuIB3!z!*Ra*jJ{#We;#3m6n zfCQ4&jojpt$9Opu5y~sXoN0qquk#Nb*O7AFdlQFXgwBcKR;j9TZI%$`7Sna-* z0yi1WHK7kznu0=T-XJ#S%lf5B^oDu?>aQ-}N__4^PFi}=RC8{}IY|*4SO_hLBuA_b znEBiSs`FYN%s-e;@@$8i@HWS1PhElqSnvYKYYd(Q=x*ACby88ruel?CrFZBVn|U8O zdS{h`z6KGDjuFKPeK4jQ`)aF%K!IH)5Dd*{()TvhNh*GWJwjMyG2FJsmnU^f3vWE_;?5;J?k}Lp>;ULX4 z5FjcU-u>9BJRdbXu%yqw6Ow0PLIdXi4~z1Jt=0 zW``ZlpL7GTLh0mcoiTbV9vTXSYJHY4a^P<5rWMVX$_f~h%NX`LyzkcNMCCgA7zH32 z-n^{8RP;-Yl$kPpHKU0NfVy)rcPOH;-ysitptyw*FW5=8|GRw>2bm5w+xW3`NPkN7 zo>m)pI<}JNR~S2Lp!UUpeRqG1>g(>=Ea&dI?egr6wDX}RCVh?W3 zl2KGaFFE+kd6XDEIOJ>~Ti2X!Z+$}6*K)9xq#)tUh#CFV{4vDNCFZSX*w0;?u^&M4 z?=#GVZLH#n8ZGaSNGR zu(+GYnIGlEoFNe1;mPYNwg?hF1i*W&U&rGBAf|4b6{EFv6_0a+Y@LP`{3%5Vx`zAN zxem`E+!V2-a&7}jH)g&8)ppu2PNeO2Rk=EEJeY<2_awToY%%EaF$TwmWv#WEcjE97 zDUfFb89ObxhgTCGl|xBA!7er>WR(^tc#L^81ODDAIRwB@BJSj=->UWrfusfb@bu|h z)x#V>T#hM-6VhB-OCo_ZFM7f13L;AYN0A*Y!S|#NJnH z+oee?{Jt(Rmx)Sj6zwXkE{a$R0ELAxsL95NkY|Z)YoflM$tWtUra(YMtjn62x5}(% z!+VfYZ<6rA9HasD;Qn_nl^bd9*`O_|^&DBNY%2k6@k%IrRNk<$^0JkK=6~I6W5Uhcv zqTO+=N5s2C35ScQ4}JjA!~RKrNvwS0WUpUO^pzIM2cS`QflIpQyF@}WC%y% z{-gjX&X~9zh1;YD>wp5@Hdt7S*xJayJB=Srj>A#$e4s9>M&c$NS zdiOr{S4uPpYeoQ&3^xkk6nubUhDas0V`aG$PteqgXss}?-L#w9>pMgf7^E@`+Pq>&)k3N3zgZ>%kyyZ7(9|?hnqt^gxg6~$mj!# zW_+W(4sD1Gg3deIc%|a}a~U|xoB_azI<&OQ4pP87JX2H?e+eSJ*yOL*9 zp5`^Dw@3B5UWLlk$b?MIp0pAbfc4%9Z%eljKZW2|x$DSNzTyTp#y5hUx*i=w8W4ga z98?#r-*-1z>&!gr1&IA_g}Tg>~IkK8=6Di(ryX|f8d-8H}u>c z3Wc%cnh!yFAIlbLyUqC4ji)i3F5c(PzWq&HzO{qxMX`nL62bIvFBi`u+>Trx5ByhO z!R#LC;dUuL9R0o_bV%`>@><@sYc3Q@u-vi#Z>9Ko>~%97EH8|*7^1TPW+_{~!I{xG z5S3yzai4iQfU&Km_6<@)K^9j3g9@zaow;)3YV*+8QnAGKN1m85T1zNPc}O@C^`iV`{HS zp$yGCXs(lsI|cF`l-_pZw#0`fs9lhEcyahikf;_!(UfpunYEBL>kiNwp5Qa5L^ivBxgN`d5N}M;^cPBXRGgB1Y3OPVueOZOfM?($RFlG5w-wVk zR~r#!+P}AyDQ+SRV}6KOYH~D_!KoEO>u*{Y7w$qpM-PfAEu@0`75qxQYq~~;jHXC`8`?bWdkhWek?_A)MO}61 z;lfDp4Kb#_3j{9OP=&Nb0c{KYtwGUNiaToR97QaO zWb-Bnjl6-3Yvz8%ZBXU*54zyNacl%0b-k`aO!GYt??Q;5?vAw|T0zK;XlEobOgSAe zN6)OGmswclKBg081IpEpLOT#BnQ={fboUxZI$BF(>)N4yS;IiQR^2Yi_Tu2Zpdm!( z;&n-Ww&z}g-7wymfA;v4?VHe#wTk@q#=HvIysW=zI%XQ`&0_&oqTk2>FMiyZ zRUAihG?B{&?~CtIlvfK%WeSGk+iPm~*o%(lM8tdYzcR6vP}P?gu<1SlUp3Tns(8}w z69#{@$el1XYtgqy`x6q4)zgd!gxKKTce`Dh7rQ%YG7*f>lHwrFHaMQ}U2f4V3C7hy zoNeg!A?HmmfD@zAe-o@Vp7Vd)xBN|E%@7Bmg`Qc|s_a?mj^Q|#+qK_)vFp=*5W zUM5uHX3Sm>CMv<;Mg>Jsz8bAP38!s_FTKvaDfe6CzZA%%WU7!xe%r-I{om4EnZwW= zOc*oXgQvlTb87qM;>l+k;#|pMHm}nFetfk6Rfq6}7VZH@o2Oa~WN4FE@*seOu@qM9$`+<0rig zr*0Y2>leuRv)Xb`8(L4cQf4!p_s-lKVQ18WE>#iCAg!xu@A01tYMhL|(U(cGgukUy z4!9Z}^?Ha`@FzS*WXCtgcpdObs~sF#GAUVq>JR-*6K+_PpW5&!Y+6*i)2CHv=gl*> zP5CX(?cGq!e#+R|?E}M&O9?~fuW6t8BQyV;a6ue1c_$4Gt_%U z_5rrna*CL0=`2$%wC485*`tkv{ZAmYDegG3ooj!oh1a%JhnVcSNn~kvl`A7DF8}et z^K;<7AZPG}6&!|`D=%sOp>*Y5$dltgrIRm^Dn(#%5^2^XpIRvnP_@x_mnu>RIcRr0 z!)Uzjn*vi$q0`TnHj80=g}s<-W<3zzq$^AC=^(tpq;0Whkzx8mYCEh)0(;);+I*L0 zd{$BZHLx}1XQ)}(X4i#6jhbgT7Zkd^!`+J^HALg~j1b*)$MWdNAxujle~5t_o0s92 zMzAAhsJ^ThGttF@|H6`e;id~V^R>^|$P}afgfzYKHdZP&+sTq|JmjJz{k9zarM*y5 zEnxU)=r%&w!=e={^m#ya?C^(;WE}F$FJXGg{x%|xZ|n0f|0F#UH9O*eOcVZHnebYu zy|LTDf=Bdo(O7?pQifl0y<(n<0`doquAx^UU7z2#=SB276f`9G=aI$5Es*V@`FNL; zFpf@(Gp4M)B>Da!0XU!w!yHqRa{2hDFcDV3b3{p+{$YaNFzhkdF+J=R6DV)HThV(r zZ3m>f^e1U>o*LX#%s}p*VE6eTrZm_svXuopqvM|0Tc#QC34)j=cjb4m{E6zd&u0T*8KKG75O`9t<90(D5 z7tL{_AKXK6rte@7_&!?%{{T{@8u{;@%@t``Wf5t1zkx~TTfRk}6~r>y%rs?Sztwh~ z_+8d7vu(-L<4n1EjOy+efCZfhP2fJb>jJ+9ja{94m7!o?5;_Sjd8D+XiLFh<#c;z?W@KrZkI!CgrbuG*be_{zT9EwV~}orr6eNHNub} zmdD&&M-3}$2^NS`aqhQKoL5zk!G^!}^=jqU0GY>(!a9@xCM;)AcZe}1id=J<~Dr8nl2G0638NEo;a}$GK(17xfaf|neKk@ssKRpVO7q|X0!LW8Sr=|5FviI6Vt(4H zqj4U--;t~=T+ZE-eK@ahgC$@=t9i7zb8V9AcbAC;2tr*0(nXbi7g<}+FsLU(7J9ON z&A?)EPvII;?q)svw0R_jP3T zxY>_OZ`>@aX%DQnX|cC_AT!`BIioU~AwLWZ8>)dNQW#j0HIMEg)=HAzMc;I}Wrvdt zZ*NETOh331oKYJuP|5r6h3PQT@$arTQqX+Z=w~yzq~5HN~K_#+MrQ>&@>6 zRK7DKblDkh*ZV+WfK9)Ahp^gI!R7wcYw3|_HXrG`D}|I0;tZOsuYx!wE!L)12JXQ{wG z@b3C|#)^&E+$t8J7Wa;igA9ydAJ+`1v(I^fW!j+C5JIS`*L?y6h4W~IBlYyic;#%X zQ(sW)9R8FF+F|L%?Ke<*o^`A6VSJXp%f#r_dC80p{oF8#kOB)}w`LhTjxsn7iA$rH z5mGl-FW%}@h|hC~+`F`vrPtpbOd87P@K9ZFG+p~L!3pa5!N3CmNRnA~Xg$MB{ATB{ zR{fepD?z*z^7ruRh)BVnLYwRMbCEz_JTKt|50u+SBFbGHi<(E0?p`8Cg^0n%5-ffI zpROcaf<3I40au*izr25#7V-Rjqr0r z1#U}R@UY698Q6QinQf)bbEN;rpP!2fgS$Zys{5VJw{Va`-5G ze$CJk&}W|XH1~u-gheDhFu7ojeV`%^?kg-B4Vjx)PW=8ysg+XBv*uK7rA+L{gx8F- zjYm@1R7l$1THBFFmwsJ}9IEz0U>$8D<*?(PSBqkXLA%(M@tSUoZks--$d!y|saZ(J z8Phci0%jPGZ%P^i*4ogW-V-kD`=5AOUCqXFHtRp| zm<9V@%b<1P8DUOj`o!?%gx_GZXeIW}wyK(oGc4@}qon214?kE?M+Dm-odmF;;XiB9 zfz%brp%OjT3-X8M{>uC){AIa9Zr77yA9zYer@_m^jvK(?6+t}w1&FKb+rk%%pr3Np zp>OL;DeI*x$jhQ}!s#0Qy&e2Nfyy&(N#KdZlnyuR5yK`qvSYA=jayy~d>SXwVjRf2 zUyd@@gZwkm%uL2c?`?xuX_nJc)c%_(v%?7&2y*W0V%Qf65i`UEGA~nC5Okq~^vGiT z0dcZ7E31KByB#+$4(FuT0cBDlwxUH?$x>oVN!HNJ+Ovh<3dOyOMJ-2Wja1+dv*hQb zJ#OF90m7TiM1ug(tFSx+1MP<@%qhP$*}OGv)ivL&-%zlM(I7r;iv76q1&J|U+jZ7U z@ln;->-_1>W-Oscq(;S>W9H10KD6i@rx7S}yZ&2i3rr+q5Puo|nHFQ6^HRaiRuS5U zi@=%MCdNO06B%0zk~1@8c0EE~!-_T5fW8tY)3!=~$QlE)2|W-bYrc2$_UWO`N_1Wb zBtCNTsqVZqzD3AWUL*uc*kE6haA5DLEeL^L{<*M!gE8@_N2;iP^`O|%YjiYQ4JUU+ zp7gb21xFydh3mIT;ek^Bg>E5$V*j<`x{6A`NG9{UZ1=qy0RI;cBYy1j$|e_K110-F+fz`_xVjIo;Xk{-B>Y* zETO?P7;k9IA_z zEaWVaN+E!5_GeBlMv@|a^^Mf z3m2Zs&l+mr*E=E*=`qkfyk1pJXbzguKC3{T(Y}*qjJjnXiAEiu?xC5-_3dOGyZGvZ zj9HnGc8=EqVoXj6`Kf&pALMC46E#%QV@;uqVr5&piKv&DI}T6zarp!@GU^pY_OM0L z7ceQnUEJA!-8Wr1_>v+(` z#Fhf!b9M%CWQGBrEh4*ORQ6x5#RaD1RU$wB_}>OON)}{*q+S zy}hNGX($B)?Y#?y59YcbI2D`*)?&4Wzm9LL$5TULhO>-8$Xdw&*6%nno%4)R0AOqJqjNVW%y;`_5I73pT@v#)O2 zM?__`K%&oTXXDu*Z--hVKeto8B{Jyt9 zK&w}dngVivBR=`k3bSy)N^${3X^X3x=~vKMrYAJrN+UWG(P~A6_Su|0aJsUXy033S{2NEoKbz7VWt!3#csxzAs3^c zH^hw0WH0B#{=8;w0FrlM%Aw=gD=0@$+Coz&698J%$GdXnlyQN;{S5Wbi!wH?46e=@ z0l@y1#@B&Lnk>L|hqQJR%FQje`ws<$^{nX8m6ia;MTWjLB90FGoXIOthB*qSdOjp_ z>9alqVi?76XIJB3kk{DOb5V^IyvDLC%Wh{LYcYR@-6`d9T%uU6oL`31 zk!w8PeY~z@^eE~ho`)48OPJyL$*yh_ZxR$j+xt3wA=ojw5<3^?TlcO&V>xty4f#Sp zlsWn6xi4zlZ=}OPEAEFI>~+JwLb=Xg^MH2aFW{N+e0*V))&TR@`?nhq>cx~|Z|Gk{ z1dj>fH7D~oB}pkO4o>-{Fw4!^~1%Yi+8cN+`8D{AgmPHks*Ym=8p$w`fJ3Y?P5Sx$o_Uo`xM6cpkCOC@u*iQ z!_1}8;yqNIoj*R(9vN$R@l5!*`OfDc;CzVBbY2kGJKNG^917GI9w5`hY6+tey|9W> zobTwx>uLNpZW62y>#oCHN^fR~Wy=#;sV%ku2<>AbnyEo~!OZ`5QkW!`l|J0+B2xtO zI`=0z|4Q>KEPH>AEkYark*(I=J_YuGNd^97S*ZYoC#GMxnk_p^v$U7o(mfvcM+sZE zoWltbon3oFnQy>7LLrwEWn^RCu;`&C!-a#{n*z}}ai<}JOKeBXOPZ;+yJPTol^L-N zwZJlatzE?mjhy7p<&6rZuN=uk4*>K5)m5M&Pk521Q_QqhOBR!gBwb;J*fzBuVigUH zB)^@yxQ9y^4X>_X24chDLLUV+BT_m$q3|YvQ-?Bf?6cL9LfEh zCM~njW*L1TY{<3;M6^X#lQo^S9?XyTvtsQfcF`q%BVEqxDHku9NTwKY){3%lleEP% zoV{vkE7l&^TPrEEaHiede<>RX2>st-wC#67*2a$py!K^%rNwyUFTm|m@??QtpMRcy z&S4yD1ACGz;sKoPqf>iY&Mb)y0PGOv3cMqr+qC2Kk9&xJlvUa|3S)}r=S#}%@KOs~ z3(mE)@eGi{saiwx6q{#9Wms2$L9+)Qd2>_`SWZ|f*{v(&ULDqQLlS7h5MQSTg}dqQE-BK>wc4|A|1CvAQ|M)#kjc2t*4E3N>ww5Wy?D=%`+? zEXop*dLt@4kdaAOZvW*+xdlq@vA3&<)`oE5tJ&{K@Y;B3k;kfcw4`N7-GO{#DxkF5 zSUs@JQ0^2s1NW1qbRn7*B``e6Va4A#vY*;V;>6Ic=_xev6uGEQ?-E+ubc>l-u^?YT z0SzGlw zYzFn-%nm|?K{0EqQ?YC$UV$D}hhW%jaPH1}C<`^T7f9;hL9$QCy*$fBTNHB10YY-4 zB|H7Qk!lB`SmW9o*#pf38*}CtnK*vMKw!$gUh6j^iFH#W$6HdQ={i+#9qrTGW<@+d zU|s^_4KhQ#v;TEuN5y}GYWaZZsZp=OPI!u8y~s+UlxJ$84BY$6vu<4y5J=I1-aP&{ zBIJ|p3WyOy(gwpVq+KGGbJ2BCfY6-?hGd^7V8kwWd!;w_O~vktcDe4<8Q=L7!dt1T z8(dZ!ah+dA#wfg%0Jt(ZG%)hFz=m{Sd6Wt|oFHVY%%jwf4>4#>cHUfybvS}U2QG?g z6bI;2`nMVYqDFrPj5HDzzbg)~U6?_iMnART2Pmsbn9?oVuzn3xvXQ3>;eAkiaxk+! zX-p!_sKX4{-@Q8}x_p1aO<#kd3jGCmZgDAq1gy4jqF@*ct1*a1PqR3nfBU`)!AboL zhkPbVi$wz(`-jUz=ZMIaLvL4U%ZD#JA2l}hRE+#sW8W=!CSI;cBLhtNfp(2dftUeX z##mTRnFyYhBOw$rkuLZA?rRIicMj8d)|Vk}zT*Belrz`cNXf7uEpVtA#!T02Q&-6n z)5IjipOEH)L^i0P0C@9neZHiw*3<7Ss_kZ?YGZ8WSGJ|iC)Ojp8g<5mj?gob51+br z^Uk@YRAZ}2!pF$eB8kvrGiPnlwX?Fm_$t?FbXYu6p<<*ZtJiYCiRlSsqZ+y$+2$sT zt^qy#+XAlL&e%eqdq)1^h&awb)~aS6hP8t^@NIGHIk-($CI>)b6h=Uj%Kf!Q~$hp|6rDLgu&%J{X zv4IdA9r&ctT&Ndu?&WK?-H)F5NDytsFPm8O$lF%%Hk;dFnz}XPh(p?bC+YnqA z2u8YtVr9QnQXGK+5;=krE;%IEeQ}Ei_r%y*UA8Q`?!514Xr#cV-UiNJByh$obwTHE zO6|}7!TnhUXVK}6Ysu3}Tn@N1%h;Ltqgv(hQE<*FZU>$y5=a;_Z!x|H#^$)hp1Etv z-yp^A>pIOy=)X6^!xr?ufdKoM9-HCiYa76nCj&6#qmx5O<1g0l6Y%mSZJi?MYAABe z3eSD;%D)QbM3@-<9J|3nyi#D3-boDjufw-!j$737ZGp<2PqvDw+ckJavaqOCZT zL)gOXBLd6BRdPAiA(0`86|h*8m1=j?MeMyd8(jqbTfk^_k zP6~~Z*e)ifN&iF_XX_Oe$=2QmKOeUsKA-ruz+Ek&Zr02m5AUvDateBV+TEA{;2RZD z+gsIT40+4p=PnP%V*+UMOq}0`$IBWnL?~RInq3aSFg!I035RddnPPR9()No@|LUQB z9AEuHiW4qc=lzod6`-qF#z`vKJNwxo6SiEmYa6G07s5W(Jh(g?)2xDGM$?q$Jkm3W zqD6-%{sG9;MOI04ER`uNBg9?FP>^l8#mI5EoUu(1!>=SyXu(RK?=xB$S(G! z!2b}Q$K@x$;b%feR3zd{+Dy3Q=FLSvr5C%sc*KZBU5E@cZT*%kr8ejdMa99k^LlRQj8$zf9`3M1; z0JC0u#YR2$g>6h1x0FiQb8Q7aE{+WaNGfk6VtQ! z0FOXuRHW*j9<$b2&W9(*XPy$a&=U@rY6GnQNjH1u*=fyB<%pSB93OVo1IYR`wTP-h z+C9MJ!2Mdq4M7#U@Yi8a1`$1bF7G)n(xq83*N+O@@S>LL08_wb4UWzlp^I~`78jusfTAaPVO)nzs{thc^v z)8?%eo0KrqNAIru7#3@zN?_d@7h>63ZV1k?Y%IKoOAb=-W_S#Hf9nn1}1paQ&$0;65@gzkja} z#ob?96o2#S0>LR6TKk&38k?L`Y{TMd%;4t~5oIu55m@Q$86z*krkerHgbJ}XEyj!yHUFYmripn;Mk%tZFHLU`a z;)_|z-mI9oRfBU`)?fE;@Q0y&RgNw&C@Lba8^a*`csNTg9 zp~Rl`8K$Vn=@Cvseqw&{k4*S$99Ex#~f3 z{6yVQG<1RpDtG?Y3g|WG6jkq`Sj8LVy{{&VBU^+Ac&=n7oTtuj$Df3Oqo8 z7u7j_V7SNa9m)Q1tpILJ!)!)4v0RN^+YpEYQdI?#XVAT^kTWXtLF%)=ZyRuMXd%F+ zt+CthCyFjOTNixw>ZLY26g&{KkY4@j9KKa5=}#5Hv0->S_jIX&3`v519KbLe6eU|I zcM9zM<9E_|phGOzee-|mA|sF7FRO5#C3Blqw0iXr+^aD0Gb@?GJ@{twe@j)HN7_|y z(TLJi?g*vN#%W`&oFlXL^XV^%_O6AU4!fx6VXbHRqNQQ0hHV3eJ7EG1So7qustFhT z@m(Taw!Y^JXb}^4!wZ2mpfZM$bzJh_{U8XP!o@A_Jj*t)^MBYNjI+9CuC|N0v&D}` zLI0P1kmaA;YU$1f8D5K&`(OMd-M{=CurGIyWpEf{3vlEl&nFb>FQfZdgU%gf&;Q;0 z&zC;hdJD1waG59Ab|pto@1x|R!9E?QFw5J!-&#K1e9@X*?aK43QgwleT`n9p?+xfe`fQ7L=QxPe$Sif}s4DMh+=&}_ZYR1su$8N=LDuHU z;=;O>@&%Jr*$#FFN`J zt{0=_ZzqkC7N^*0;GH1(8ADcE=_<;>c%3nhTUjG)qj4DXPp0u^zYrJ*!&h2D3!We1 zIe22=kGh?3{yW)NR}ov+T(PqqniWn16mCrj4iYU?@Q8LgAp$eC@45M1ONpe@Tjd*{ zyM2{&0!5S$;w;+R68vXoxm%9f5lciJ(s>Z36zD^{tF6xwizKrSLn zlKy_~*F-S|@MQ2LI6@@1vB&o)dESI{a83;gl|06V z?N3#Rs&@$a;|MpR%drx)SY)FNm*2V4uQU-*dYA(J!?3K+=1;0Dr?YAya5!XwERB1{ z4&XSD@5RpCB(ZpffKre)FAXSG+Y%|E`e(>L#paM%^!LrPAgjrGl0Cf7YBqGaBxI z^*(F|O$S&R&mp73*dA2+)8LIv|LRw zTPeEL{u~JT@i}!Mj7SsyJ~aWVpv4n?2dY;{cm5-u1k)J5!?m;}I8nVpBYg$L(k0@8rnFG0IO3&nx;yz9+Ux0$j5T`eQ3~)n z>E;s&+jJZ;X00LQtI~NL(i4iKfO-Xc7DG{1bj=`^v0Y%V+UTjwZNi z`df3Gd^;sV;h{?jK^=!Q|1r0Dpn4Y84dlhNTf0Z_pz-4s=aA5`M=7IMzM=@4->~Z) znIeT9g9E0|UQdDXZ$nyR9aX~?7gSLTGCI;nAJSxlQj4b6G2z`o2z}qBSu5II@lz!& zw8*#DICrZDbv5rkD86t6GP3LS3cq9+zZuMCF8Rd!DHs?_y`ffj8Y%#t1RYrKKs$sP zN&U|PDJz7D>76-N-Zj5(4XS|>-~R>g>}$Fp$c{t9tjqo%{~_Z0ZBFHaRt^K#?lzjkg0K{>u)MYq8hOYuZq!fe`L@r|*x_08dh;!1uHXACU* z;SZJ&_kYob&CMTsB`6J7*bJb`q80O+el5hC{bi^$FTqz==WA$O&L>fpL)}?uGa_$V z<@`fDNZ;+OlPO_azBJ4LW{^jUhdTQZ3Q=%oL%7A{`@aAyO?=BV;8e= zYkv{0sqo{qe9DA4Rgx%i3PpN7SZ$KklhX!km-3i0@e3-_(YRr}$jQq}Xge$rdN+2H zS{`>1ZA>XftA9hZ>?rbc4k-E-d!tv~tP`m&^I~^`4|?L{v+Re;(mK9Nd6pWgQAu-K z?^$m)lO^>D4ojg`%#V6SU-vi!yal`SrytYQ^RzqT5T%PtSfh=2qmkTkEcO+59dZda z@+*?pja(cR!$#5>lXb#g?1I0?kP8}vqLg8iMoO~OvWsm!ZIP4(u_$PIv67ROt3C0NCD{Evj{Hc*{lxb0Bf!XO%KMt`iLCycDy+x&JQR+^Ks)6x z)2U!Wl{??#Nol|#G-#t!clEw;c))2eYihQCFBYP=-r?rf8|(mch*2I5@>uodKg)F1 z2z#j&#yFKf*qJL?+T&L(CD~Cy#@RvFo!h|qr49vwzdb~JPcg9pNr9@vf#;Q>r%7In zX;m)Bqol?a*jt}rzf*!~bbnq`1xE4?rOm}?`&84`oPu(|>E|Vz{1l2~*$sS;LjhT| zcwtEH^fe%bkIC`sUkajQjx&#m)Zi%t;S&dU%`-Qwzup1GFnk0Blu7=AX2DDM4R?~C+ zWXi5^UzILR2^fi}!-NBn=_}jQ1aeSyD;wZz+Rvi1MyfHDR-QY3)!zxup^=%aE|BAs z+fM>#Xm|vg3{3%V3coq?>aY)xM->Rqd@E-GSN{bexmH(e6V$y9cFMn0|23U3M=a{D zZtZ|Tp_pQL-D#+%x~Q|1-~nk=JN>gpvjb&)J0DXr5>NN~kG%QO^zbZ{Xn|1SX~xvT zTA+#H5$07OAfP1P@)7J|tNgX&llh$sE=h*J7di8kVZx(P+9R~0^i$_t0;CI)`PJzT zHBvt(H@jMpSNy-bHq)@0u@o2#<+T>yIwYkDq>!q7zzdLim;$12)4Df8d^s5VnsgWb zKkanQeWx^`zM}#9t%Xks(5B4xON7!4pp9otfy{t|7}waF(^JzXF&XCT&SQ&b2CS-2 zN^KmIKpC*yTBg4cUH`Lof{SBtsL=<(CTCzJ{_oyYS8ENula&$l2v7FA@~~f4s9=nF zhhd6BG{nA1S&vj6?KCe-H^W64-zOdiU*t7Q^n<@?wKvztk4FH531-HNLRm_H`lYPF z#zkNI(*V%^c6;aTAn$~i&=s7OX^vD2;qFN{Y$s&|M@Dr{QBA7*o0{c+2i2V8OBDW^ z8dICEM=LH1JvXo6m!I6u|29vnQYSY^!!V}5o*=yq$v2rK2nRss;eqbD`d$-U0iSTe zdCU9ze1OIExOzp7!@(395a3YK3l>v#M3^61tO6~dQ%WLG5X9Q5D>LHMlQYF$_B;)r ziZSb4RPPNim?UbuUM&}v7?%;K4}Si#a_;`sFobc}%fT#B*J7z3qWIU}4YL+t5pr80 zglW{98sSUzBxx1*=@@ke7U$yCdMMnJ zh5&+9JB1zDY%^`wb$%HF~ZW?t4mwdi&`((TNuow%KD*A9(*hm+*>$_y~z|Orj zr;l3Ie#!g0LWMv>i>g`uHCWj$e9*uK2ehN~F;40{#7cAgOVY|Dfd;`UBq7ViC&aki zYzyKMwQowjuBeTQb0JI+`n{ZaDOB(IZ-A)ZTk?3xzK zGwwE0f+~d7%HyX*(~UL6mv$CvF>CKJ?}7`KPZ8o!*oL`xq}oq$s03L6NOkXNfw*$y zitBElVz9!n8$o#98^>5f-Ym!hOuZmDFI}pjS(o)^T>ZS$t><3s*>k}x_;|~#8$}W7P#SiJ|tZ2AE7|=EO zS=|yfqbP^&>A9N6SS$bVNO#P8u#^~7@6U3C(1iLE*vw1nAdL|U12j;WRmgGyIAk%y zTP2{Pw_=ZrjywZjZPyP+#;bb7d-&cei2Y?RV<+PB?oN>B6~HkdHU3co%|l}?QK-Q) z-oEv><7W%Dlv_F{j%=U0{+8z1q>lnVusqC93HzDxkE{>_NS+l2h%U0@UdCYRQ(tU> z2(}PlnYmot#4T^!tLNEH?I6CPAC-p88i~~DK-}?dZLQXU_(ELf07c&hsA!SYrLDGA zHpq*?f72+?I)O0Wr9h=7xGKfYpy-!A1!rmd-f7ryIBU9EvR&&Zd8nP{Z8pWDstlWf z4IaLy5`RUac&2sFSVKFl&n&3tv{C0hUYF9bHlQ`q)5I2Hct2I>A4eSjM>tac^bS70T;UiFw`)YZ*n*nb;<) z1+|f9Dl0u-L_!UR(Zvw;IYnDVL?7ngTp;SnvZ=Boh9r~2(jB?JxQ8Ol*KlNnh`EMp z16~m|n(n!5_9I-P$Gwq#Qv&0UZ1r0H%cGOLsKiT(N_I_V=sXR}E_u}Z+=P+X_lP=X z-=|1#AN8P$yFCHUPPrD5{;rE|+0+V_?=Ia=#T!NOAybg-yG|#rC)!H>>U6%m@PeXE zX}emM$CX!w=nRYmLW#FNK(Fb_{Vim~ytKxx;5j?U>WpK#uypYwVLI7tl~boNdx~fU z^Ox>kRUviPGoVQoZ{D?*RbLwVi;p~{^y?}XUkHw`$QDjw_2_beA0LTXE7E$N_!CTz~Fa@>Cy_Dsc69= zz9xda%~NXo);s3<9aekCmf=@F5Z9gkWpyT#r;(I}Z{B4V(4QfIPtI+L=;G<_N$Wha zr2Z2{Gvz=hp`$mEG>*o%`b<0fOhYZ8w5GnU<1obkQ(c_0S2`DkC^Td1PsH;^>G1cl zm~}w}c0_!2SoQlDOlu|U?lVLL4kjlhEnStxX-~9S#@vNHcK;1s{Jfw>=hSV5r$Il? zHgz|mON$dhtik4qcH&%f2ehIJzKg9UHaBxt#YNrN_f_0_cTMR;<@!G^Or~;z_OqRlRl!)NGyswdn)RzC3TZQye7omEs*xj*0jY1H{I~~%{M`8O{CpSFEcdB zb3Mw{3|-XJtKtJAl^OA3lfXNaC9hwIQI=*_xrUG)Jfu_*yq@^D0d6Wb1gl{3vcUKJ zM=0>ktGvlHNuT_7_*WXdVlPjR zU7}>?@xR%$iG9l|id{Eqb#Pz*Af{DvX$;P_=d1hHp73O(nJZ%wP%54So&G8Jx2q4} zIY|`I?M=nezCk?Fc@+HQ1@!2wLcm!oV(h#2M_z7l&y?C0CFX%7{@0{X&6Z%=;Fg>66dENYxJ29MXv z?ArGAgJz?c=X$iVNSyx98vxo_22z{!hBRV=pg)SIn-m>b`#hP#u*K7WLOh5YDTS?h zCI2eeal~RSLO04&L8ZI)S(2WvwdbZFRTJR!X);(9P7wbqRc|h36^XA|h>xWybX2l?8I$oK$V&5b>tKdMdZ=(uL zv;$jHfQ3H2Z=l_F!F_Vf+p^I*tlmn-^QUWK?}|#f3!b<{Yn^jn(~!fa^d1%0yO@={ z(}J3Xh=xxPRM;r)Z>*OA;>BdK>$pZsIDFu_x3gTBVl89~CU%wk(JP>o2lZCAQG>KP zC~{_{d;KTFY)~WGIM4j|7njT5Msx;43*Z3%KLEf=^$Y#3+}6e-2;l=r*%Q% znsl$zWzA8;kgf81qIRUgSj!kI02 z38%fxHnpxJ6ls7h8k>;&7kOSVwu<1;+BWA~L*0?@`i(KSeyR8U3(&ihoR@%Vtrmt) zW>-P7AGjVAFHc&SfgbgR&fH-N`sYu59j*x<8Yi*YJ*Umr#-a<2JP~ot0TseE4JgZx zP_zOW$4RQR$nutN$>0S;oZVU&hTvj?IA8%^vUgA2diD}~%qW9Ea!F`bsVHW>u-22m zPXszzzNGOJ=nps6itMaubsp&Fo3#N3QNsens-6WY?QfbsyA8@)HYz4;%?~RCYTg%bW1}>&;es|*a0*bVo=tvWQ<6hEpN@K;X*T#?q zp&1^&b2o_SjKh=Xe-~M32WpDR0+$;??L=?Jv@x#liJ=1sm?Nf-M8=+u3(+fClAm1M z+%j#=7eju}6-$=e;&^Gly9)B}$S(Q{%oQU;f>7g<+6E_CM*_cC3vSbUUKSM%C40rh z$83F7KFh?n?l*8S0Fx$#T0i)>ZJ$JSKsX$y9zC~WL^`4uEZn?7`Ok$=%$vZGl& zf>UNVz$8p%L88VVTY2LH2_#CIaH$19r=(M%#eaQmo&vilFE#qc023t>=2WBx+6Fcb z`HwaZ`aiwxbg!S~T(${qzN7J0c#c|!?qi!y#2*_2#sVKv$4?;!W$h#n$<9JE=1@CS zZW8%P4xxr`;DDI=wGZdbVXB$ccg1XcQ*`@La>wn6aMq9I{x|%OtgvDRphenHtO`e8eyaH89BlJ|BRA)&j)u}6 z)^I2Rhv5nOD#mK&im{%q>J`%THMnb}9Jejn_E2FCU^#kVk=nD({;JNXUs05Sv@}vw zNM%wVaYkL*3PhU*i*WQs1-jn;mT*WGk&}0A!O-(cE_9o@xDCKD!p3WSn6-zPIZ(&Z zODDl{HjT5I4>*8satR?7RGVm^@e!r`gDP~{jOxY8dYc{7VtCVh?f|vBoTMj{>J8{V z!p6UOtT8H@Da?d?NOvXYU#)tfpxWts29GQ<*rw#V)_fEBTt<0@63A%?XC^dKwe!zk z;^;|X55L5_XW*(KY&J`s(C({2=H0peaeN&yQg{9!H-?ugohLtHLGoyt=^p+&d(JxKR z^xN2Awdqg{i>O)TyhuAL$q)cd;enLZsPp}0UJ?Z2iP7MusX&BRL7)aL7HA{CLwI_? zt3XUnfYwaPSPlq<0JQ^&XMF`psG%Rb)Z%Q#%8`1SkENg2s1BXKq$gXS`SPed#lUzI z>#5y=AZRMpB)>;!1&lK5+yvkp0j7g^vkc}GWeY^9skVKr@NhX%YUh*9Pcj@@lUp{u zPAWg&a`kQv7?Dg(yb~>WL`6bYW35dKIUy5>Em*9NKAoLs$9P4<4^v$++-I$}56l}N znFkdVX?g2lSmQE}7k!$el?x?u^%MN^O+0#lNkO%Rx~B}#T>l4c5?fs5*ft{Rvk+%d zk?z9Z^@wz1(%YGfm^Qk<2FU0FXl9t9E?7vb8AHTI5}`!0SDfHvjIT3dBQb#z7jLI9 zgtHoSKXMCA_zG}%Q68jK0s;4z1^WT4-oscHUbNErG5J!iEqdW-+`j!%jU@8%@gB6H z5M8>o>9?uTMeQ~RuZ zHlZLS{Jp;D#tzbgGi+Ox9`M0jOiguEZUr+d;sG?4#x)+hp~t>||BbcEeLxbOlW1e5 z7!IG4(5dSATM^j72PyxK{!X|&+1a07@KlY`(kN+BT@L56XLuzD^8yvayF6PzC36;r ztM3mns-=PU_23#ml$#!87le$9{?^s)$xgBt&-x@|5%pwyw^)F!Jxf7pEQ&6m&=?FW zpsZW)DIJ`PY4?0R{U>CPjvtMY99(AdG4Ah=jiq(NUxO}Qwu56o3mS4D5;L5m zb&kmG9ztmZ4soQrxT4NR&-m|G90Tk_qfrfd#@qJLU6WoPEdFlCuOEezMyC+)>uh6= z(ZTO@boOx065M|TbD_HXVlLI^GE13t&zfa0`Tpd>E`6r-Di%Q%Yv|fy$vkq`3FXBy z984`r-FL0eKue8U~<^xeCh6 z!q-20Hofoh>4MExr^EPnQ)4H!0dWaui*(L0KmSqSqa8Ycgb1%$!iNqVu7>3rUY>35 zXx~_|L*d>ex2Ns2R1-Zd)UQ$6dp2h-3>1`<>}ui$`fF1(@*#En=Dn#n`yMF=;U~F^ zN_#8HZ_NgWa9t1f^8E^CTB-Iv+qi2TG|W=jq~3wGg$T-CDhAd@r$J(!nw!xZsu-Tf z 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 b?b3>pF;|dtk?ly+jA*~sP|12%e0`WV?l48z literal 0 HcmV?d00001 diff --git a/MikroGig/20260626/20260626142134-Config.rsc b/MikroGig/20260626/20260626142134-Config.rsc new file mode 100644 index 0000000..883a7ce --- /dev/null +++ b/MikroGig/20260626/20260626142134-Config.rsc @@ -0,0 +1,2705 @@ +# 2026-06-26 13:21:35 by RouterOS 7.23.1 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=18:FD:74:6E:58:14 auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ + name=wlan1 ssid=vados wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ + name=wlan2 ssid=vados5g wps-mode=disabled +/interface veth +add address=172.18.20.2/30 container-mac-address=00:00:00:00:00:00 dhcp=no \ + gateway=172.18.20.1 gateway6="" name=docker-awg-veth +/interface list +add name=WAN +add name=LAN +add exclude=LAN include=WAN name=Internet +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global 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/700/f14f095d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 22.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" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/certificate settings +set builtin-trust-store=fetch crl-store=system +/container +# download/extract error: check registry failed: unsupported registry api version: +add hostname=amnezia interface=docker-awg-veth layer-dir="" logging=yes \ + mountlists=awg_conf name=awg-mikrotik-arm:latest remote-image=\ + reg.vados.ru/awg-mikrotik-arm:latest root-dir=/usb1/docker/awg \ + start-on-boot=yes +/container config +set registry-url=https://reg.vados.ru/ tmpdir=/tmp username=amster-dev +/container mounts +add dst=/etc/amnezia/amneziawg list=awg_conf src=/wg +/disk settings +set auto-media-interface=lo +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip 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=Bridge-LAN list=WAN +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 +/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.18.20.1/30 interface=docker-awg-veth network=172.18.20.0 +/ip dns +set servers=10.30.30.81 +/ip firewall mangle +# docker-awg-veth not ready +add action=change-mss chain=forward new-mss=1360 out-interface=\ + docker-awg-veth protocol=tcp tcp-flags=syn tcp-mss=1420-65535 +/ip firewall nat +# docker-awg-veth not ready +add action=masquerade chain=srcnat out-interface=docker-awg-veth +/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=1 dst-address=0.0.0.0/0 gateway=\ + 10.30.30.81 routing-table=main scope=30 target-scope=10 +add distance=1 dst-address=0.0.0.0/0 gateway=172.18.20.2 routing-table=To-VPN +/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 +/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/20260626/20260626142134-Diff-Config.rsc b/MikroGig/history/20260626/20260626142134-Diff-Config.rsc new file mode 100644 index 0000000..dd518e4 --- /dev/null +++ b/MikroGig/history/20260626/20260626142134-Diff-Config.rsc @@ -0,0 +1,14 @@ +2572,2576c2572,2574 +< # download/extract error: check registry failed: unsupported registry api version: +< add hostname=amnezia interface=docker-awg-veth layer-dir="" logging=yes \ +< mountlists=awg_conf name=awg-mikrotik-arm:latest remote-image=\ +< reg.vados.ru/awg-mikrotik-arm:latest root-dir=/usb1/docker/awg \ +< start-on-boot=yes +--- +> add file=usb1/tmp/awg-mikrotik-arm.tar hostname=amnezia interface=\ +> docker-awg-veth layer-dir="" logging=yes mountlists=awg_conf name=\ +> awg-mikrotik-arm root-dir=/usb1/docker/awg start-on-boot=yes +2578c2576 +< set registry-url=https://reg.vados.ru/ tmpdir=/tmp username=amster-dev +--- +> set registry-url=https://reg.vados.ru/v2 tmpdir=/tmp username=amster-dev -- 2.52.0