From 24e7de3f92ffa805c87620ff4a3a2cbc10d267a4 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 4 Jun 2026 22:20:33 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 04 22:20:33. --- .../20260604/20260604222029-Binary.backup | Bin 0 -> 164162 bytes MikroGig/20260604/20260604222029-Config.rsc | 2667 +++++++++++++++++ .../20260604/20260604222029-Diff-Config.rsc | 4 + 3 files changed, 2671 insertions(+) create mode 100644 MikroGig/20260604/20260604222029-Binary.backup create mode 100644 MikroGig/20260604/20260604222029-Config.rsc create mode 100644 MikroGig/history/20260604/20260604222029-Diff-Config.rsc diff --git a/MikroGig/20260604/20260604222029-Binary.backup b/MikroGig/20260604/20260604222029-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..0df4d8249d7b8435abc42fadaf8d0678790c0187 GIT binary patch literal 164162 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 lODg025MMF(J9u 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∈{=vXGVZdXgOUDes?nkz7*5>k6=-&?pI@HqkIj-mg;Mv9AxmC<^)?o`+d7NxgT;z7Sh&Ol99`l z69lbKwD(%PCdl>lwQx04TlF2C{j({Uo!CqLc;@IwZ|r?h67U%kHB}miy2Rdt=)=-^ zZ~hG|-IPVc%bxmmKlcR4Ln&2_1;+t7aWjNz^N8^~^B*6tCnFW&0%!G7*d|SZ zCL8{V7qz|H9ACe(%D8+V?wgpA`_H?!LxWgm>X&s0o;EGnyb#N~@o|dp)?)J_LlRn7 z8PIh`z!?6UjvO;FiuXn%2UW{TIc~_Uf^tqp|31x;{>Gr+E2IC&>{sXNqZ|M}ALH?j z0{mfW%yK2aJ}5v^01_n5tO0AqWutL$wQa!%WDr)SwQSkeh5bzG_2nwQghEjoEu%3^ zfi);WF^pPp4KDx`N8l`TufSM8Fv6OxGIDg@`_f6*o*LX#p;A;m7vVfQd& zta_!#`z?J^)s_{K01a4EgkhtLm1xldRxl=|+*BLu@BkFRG)+XjGWP9jV#T^HPEO)Z zng#XiVHa3tu&QES*q>L7MMaw{mr&Jfi`&wqJT4r{sp{ zv=WhQeotjdR?bz?OkmQ~AMytZNHpi-<3PmABb!mY6g>D)d9xd;AzJIM%pKr&E!AZW3%$j-}mnBw0cx#N=Ms%y|TqD3o<-6_8~Zf1Nr>ZQh&ApHpua(@qX z=B}VyIg>Yr^J>z|xhT`|zXI+PgE}R(Myt2p73(-+)E>O+j6d^Q}dzl!I?W z#W2Da*#K9&o0au94Wx*gD2>-Tf$jqLM(mirm?hzfb9HaDsK;8x&R$!=+nV2Z>^g$x zcWDo_lRo6UFdA;u0joIXr}hacrYyxULGZavIl6H@oA1g8Fl2={vd8**Ue9JDjyUt5 z*LU5NnehD(k8dbKVq#`~27(BFtWzr(^LafJQr))D{s<|n5@pV8lYU}DWKB29>-}C?_0xpDlfjXOB|VHU&QZPfVLRTpr_dv=*7k5~b2a)I zghX^AN{@-b--Z>MF|C-Tq~>=D8q#{_(PCF2#8n?2Cdgk3O(*u&caIg4J1N38P21zK zQw-_sPU44WW+Q5Ap`!Z?gNQS%l|mZ%w25&S`sN9qj^d>rN(9hL?nGi2xdr&^QX=)W zAM>?V0UfXr6q9C3tpx(05ZOvp32Z}myp7DHrb(D`TC4!zj>C(I-1uC?W0%XMajQcn zh9=d=q?#*d=MCpkeQ0HrXx%>i>!m^$04CU1O#GAuuK-|CLSv9qcLPo@`kwI7&78W= z#`qqL$tpB{a1TD+qOsp-Vj!eq>A!#K?Wbr5Tn07P6S)o>36DAGG#S5# zExoLR>32#@QS9a8+%`{BPI7$^g4%=5+2Ep5e4mKA#KLaFoA#ru`>D7ufvXDX#~Sb0 zZrk`GVu6etdvZmDXA``J3j~309UsDn#fh>0)AYOOZ4cpW0 zE_KMbF%+Tdkwm$zCRxnRkMz@;X$V;+Za`K2yr}QLg$N^VilG38En!%-~B|LRa-6a&6(z<4(L&->C9wS}? zBeSD6WOYWuPxI(PnY=J+7L{%V7m}Tsv+--BOMmSuq9QVUEoZ&sU{E@pIUF*#7_$wt zD7y9f1C_fG{&KI9N8eDO93L-lifPJVFj0}9M=4rZYj=2xUIPm!Uus>-etToT4=zFlAak=1uBvx6gdgeYQ={b*;2md)xp8*Fa_{) zxFpWOL}-Q7A|u1HTrW3{?OWF-vhuXm4isJG{tsh7?jk4NVo0>X0fgvcMm2Uh@(8n4 zK~`$-er8NC_a(pl#wVd%Zd872Cm6# z%neCUoJ>#4P8F6x4mt$N5zAsD>=ghCB5GP&R$Z@;Ua((!jQf8s5fnJk`?K3#ak5Ln z)CofrJeFhEcUIU)brk&@w3tInrX%M*kRBT`PDf=Nw7TL_889A-5baTgbwuTB2B&mL zmQO?act>JyACc(dV*Bw?q6Sh5eMb+-rS|y!z*TR_=xttXr1s9*auyM&KY`K{O2*eo zLxsI*a$&m?^#N@x@A6a1wy--uJEj;D|6~R#@A`NWTXu6j&ybX-M7FZ|3F@}ok=W1_ zL%w#<9N9z+@xB5w&idJ?R#Tjv-TV7zu!1SM5>fA~LMQ_cX9A?L^Jbq&nj#{$SSGxi z>8mWSR-0VJXZltT@U?6>YYWs%&?fSssMA&Vo9#XJYy^l>&^IF`G=p8(A3pe z;c|1J*10J46TxzPZ#Wkl*5r7ox9qU=A=Fz~QS^u}_Dk$E#RMJ>*(7-0P|$y><&1va za)MKGz{#cyk=DNWUO&g=DlYoCv+Wj?JeZ(f{a{#{%MW1W)E7Y4TBLlQ11hZKDir>Y#jkZc;=2dh|CJTjB zy)5t_-?#Rz4_EZDGI{oBY|DwsBZ##jVgEH!P*8kE9sY{5hWV^(35pH)^LTH*<1Pw; zUKCB9zOF+@4n(9ddc}1o#^;Us&OKJrZG56J#?YUjqcyA+xi5rpedus8 zo)68^@srhe+Gw-&kWtk9cryOy$GhZH{eTK~TXC2RQ1}2Z2!upPv#R1O(=FwG!lZVl zhe2f=IqdM7W_Lq2m75T1@?y*uItUTvBlx-OcTI`oK+d-XWX`vwK%6j%)Adx2igTtI zT`zhZCWvS1lICjhK2pLL;}8SX4Uw$IKt^+pnX2s0$|ARsD*SG>87e`A8^x|0wZbg{@SX4RkP#uS^kKX zmHiy1`ry)19LwQ9eDeBPHYT8MmHapI=B6R=9I!?-9{`8IIW&$0q}-EOgY~B#gtUw! z$wn_xc9_3d$ONKVRO^%Gdi6L$qQ~tTd4q1)5MKOGF@1f8D3$}ZW;+y{1MVKZU#HYj z=w#aw$>FHLu_W%=YE{-#6eC7D9I;|>f??7{UY;XNObt{Jr+5Kj@<%u)M}D`k1cUbd zrZ9WHvV9>bQY_36+F z1G6Zw{`AxJ5t6^aAwf~uj;%GdC{`bj>Me;YYjJrkk1;iKbX1Yc0>c_hN0+@bW0L+et5rq^15e>{l8z9opa zN^J(r#i&QLdHdmusqun}HlW{A4479uu-?ccG&$mzO>dH&yG@Zn-+0H7lgVM>2J%wX z<(f}_Z4wYn;Vc@MAb;I7a~VQF3pGPV;^jLt%j(cf*Wm%M?qr7daM!l_a!yyBKzW9t z^cO(koy#?sF)cSMl_ze80+gtk6*N-nY~MJk7qo&Q)z)yMgudybS?6TDk|~-y4QLzo zfLYLZ?FQ9J3brHIu|f6j6dY@_jqo7Hn$qNaigcM4$F@+roc5r&bRRSx>|T6EHz~f- zDR54t_(t3)$kV1cZx(IpD&)tM!HcT5ZIa|pKZVStF$y=)FZeFwN*k2D%A%pFwmofX zUn>CSWE_LUVe61Avt2h>3;sv=N%?2NJe{AolLi_^n_(##_CeK+c;)EQG4x&?v-Uk|42kKY!>9xA)9o zsXC+&uI>oW8nXX`4$)IMki`yKVDNi{c=?4<27x_zNBMd!kgROL2vtoA;jQ zoTuM0Y#5&8anlw3?OBO8>TCDOaSmP2L6uO=0jf}4cx6H!`b$TcxlV6>Kc>R3>o?pY z1W5$K|A-=g0e<>;-@nipaU=}Qa;{jB5_q2-8G(5EndoQ6?vf}w<w*2E}A>p9Nd0WyWAmpTCjU2uwmC4L6hym^kgZ zu`g^T$$e`)ff23K2P@Elnw`-%kq>6Wm(3!~AJ*ET`9K)AEC$c8AM7k{(4 z$aR;nysg#M8o*zSO}n<(80!e+VV>Aq8X+tek%MnS)diQ!Qq8SsM>W_|1OAUhJ{N!4 zazXn2W~8UAf=9cn^o4C9;p-&axMz#V5)kB_6SrqlawuDyPN)R+n>L(b0r{Tub`K3p zTn(9dqLK&y;JFcKSAFd?ND z!)|WVvjrrl-EJ55zox5B3%3k>+Gi%Xq)R-{7lN5f(m$pO7n z=ykB-47cBXL+e39&Q0P&J%qK6`%j-xl}s^~UQMhS(6W`3Vb66_)vp^5d@pCghU2l+ z;feJ_U&JRx=eJ_a4h@G-4-6(#d)B-NB#jn(@QToP8RH zs01M#wz-$1e|-3NgIv`z;N}S{y8qXPrQnH#4@TJJx;vDcO)uan>$C;_s3#=Qssv?t zGYYj?L^^j@4zm~{ITZz^BA`8pbo~60juGC(pJETVppt82Ns~iFEddQ`aJGCa7G@Gd zdpqKR`y~qB159e>Aw^=PZ$f_6ilppPn`FQw5ZJ|P`Y>0xVqZ^U<+Rm$1?fLfJ}5K& z7%k9@Ik7nMc-Y{texqJb^nX)i-2dKahNeKdH54lD|1DnBR({PA(`em#l%8O$7HghZ zi4h&kbQMlG7#dwKjQ4@^rpn8x?*`Dw;KwAStUIZ!IF@@(okIssC-pCCLujWvN`i8T zqr5w71GDethx-2q?pSK|po)2kmk)Ty02*_t*;CWQDH9= zoEMgsmgu$mzf3X4Qd|L;RE8^3Oc*O3Z;Z=p?a2(-Wp; z)HBUU#R70U;hjDE-3yRX*<(dIiDgZ(KFsrSy)JS6JZi5F)wP1XZ+V4BevS&zIemi0 zrQq?yRpjp~)O!G|Gv|-7-RjHbo)lKDu>D@Czmm&p)t(3m;ujDQ^TN|U11+1(RAa*G zch!wZNH~#5^LWbLAT4 z(b0Pnaoqsf`pI?V>^o=Tev%rj_Taf37P}#SS~PELQfbB10?nd)L8zEUl6&xu zax8PjfF5hf02&NUA*UyI0eP1W2zu51kv&e;K zyBQYQJw>2Mc1}3brQF7M@Df;El;JE|F+|qtl$j2h`2)LFM00m20qwpva+6fbj<(%m zZ^yxMObnqIs1JywCrE7w$^U-tLMf+@V=OluXwRUD&r!iW4TujqA0}mTkvM?F;#2Tp zo(s@pf*2A?!kC^V|9bFSx$G`_&H(zjQqJ{1>KbG991KdU+9j!?)k4B*MinZid37q! zXWmAa*lr;E4~@aO$|SSVj_XbZmBvfh!j zOsHYx=l0C@luVM_iSJz~KE3JA_=-C|fWTQ)V`@-g8BkX*<-7Sd1{ev?OWnDf?da6YmS@?$Wh%I%j$q7lmk7Nw z*xY?}Aj1>Hyw>zkC#0UPAK+i=%KZRP-GiIP$`j~IyP3_95==O?HoV$Xel%*h6Bo$& zT*)^5=hhY@vItARI6-*AJ6?l4P-Z^wdSg>(6asIJw)EMH%T3^|300gK0=E|+JQyFJRi+D<3QtQ(TW+eTq& zNq4+#E(vliCbGuHfqX$4yvrQFEQD zwmKHJTFzs809HOSgKQv&=hd~2NShwngJxFKMs+Ht~bSw$0LcVU#2?eh5t*xx? z!tg)l6a!3Rnmczu_+)MIq?vpAE%dRYibx9tPgBq&&iHITL8d!Gc*K8JN9ox&YC_*0 z=dNOwt6^}PpWpm=91q1}1}Yx%_H^FDz8kwu>7m6({)xu+X6pKbIc0|F?TuC4Gw9#t zNcul?T#DwXbE7VdTlZsbyYu|DcnPXctc85tR2cGOkj{|f`a`rpS z;(GS4LxB0T*ioKWVPRr~p(a*U@I^oJStZLEpI+)8m9n{pDU*AT_ipsd(DBU}rOPba zcYj23)glqKw&L@(ija&CbfU3d?IK#sq07vRMOboWyk$OE(|AoPLsgo8Vh(RVSk zPyOPGi2V$W)WK6RxLJopnvXcnn8*<86BQ^H!{4bWPoI#tltWCn>G8|HDw;y6VVDY_ zc`)1+NDwD=Yc7_~`?Xh*)pn&{Z|K!;Y#OKS-NkM}>Nyy@Kub;l1C+SyxR6gGQd! z+wUS8^lH@2&57;qWTxVwMi9`wDbG8QBuC(Fp>L`8Iu2~Mv%E?! zaJ)9B7=v!V*CgCu4M1fZ5;ytL#1woNyaL9-N0zy3nqQv)A^JSctjBer2qpjnzd$%B z$aw?HSUT;sKh_-t{!Q+z7;LqOS zP7`9d_7RKsY7IQ^+0gXc$S-gY&dNjWBxkO#R_U3MGqeH4C1 z9Vp*^xGSNdv-B5O7b*Q9}gnauLD9E^U1L=N{;-#ms@>^~C1K{+ECx%_? zk8jZL_U@?(L3`wL7UgFB)=WMYeCqsZhe+R?QjmnfVTN${zZs#5nETS90o4B9GZI*; zDJg&5iT*K`=qN|P&4LjJ|FvQ}S)1ZuXU&;M&fzwI8yB0;u9BuSAeu5o+)Lz1hvX13 z-*uCFM*aX6olecnY9|rE4m+Q_e*o$a-#P!Cn}+?S4@M$@^4eenZ8-sJGjkJQ2VBH| zD%eOFJx}87bm1KPONoszI!;D)P^Io3^=bDfyX^@|?;N_kz&7GQGbU*Tn}&(`mzfX_r~_CRA|e1RfmASIFX-vej(TxxD$0U~0AW5*viejglBX zuXG;=mFY*R-WC`5m<$anC_1tqpg^`XZWqPaJ$=j=JrnSp85Rm)H(Z)Z*C>9sZj7D*lgK~<1f$_uIBJh3$pZgN# zgXw@STj!n<@)@(gF}17&fG`;hWrm=I0snJUJXzUIh9zd)0!|`q1BWxmCvX+@qGoPq zX^a}UoLh3YVSLyje*B^3_4~Nd{X+!=X^8MVmErEy{Abh>pBc~JG|z#r2@uX(PWOww zYe9_3zJLUg)y}_cS~xav{}+roKO#0kx(x%z6la#Mqn*azSz?RXt*#N}ntgev3lVW; zIQ9ui=dMfT3a5Bq$iB@Q2;SeD;vIJyjn?=hB+z)-bfW`YDoGcz*Vr;^zFy~S6Omc8 zoX8iZz^CA`nP|Fvc~c)Y>;0u{_tVS};cP_zm*F4et0*=YFd0SPsr@;DH)OA@Vvl3n zLAcHG@8T6re6W5t$ZPG5O_GY;R*Al@Hf4R*l1Lj^(T5Sln|9`yRyB%HqDk4?NwJ)g zknxJ+V7_2Ln9()@T`P}nh|n8(uCwR?qC8V9N2D%k^#vYpM1O1A4*dXykh7AK3V^6f^SO}VqACrvt0dPVde6U&az;0N`xwAp)q)&G{H{)$OPFq0G$FwqHmZ5qpW zi9reyg1H}Nc_jIXKqZsv2?kqT3-cZkZF#ol)t@EkP{yfb53_b}Q<-lvI76{dh6`Od z#{I^hZDwtsbevu7_k*$^cKzqw?5pSlWOg{_vc%ZROzAxPfFC8vtdj_;AycubtBz?= z*YFRv123TbWac_E2@-fl2(KRRgmn8z)hkSnPTV(OR&b-NDwLo$pAci;R-GS;F%{PQ#|{M^=Mfz)RK-I3 zEoFe-OC73u0~{e?!l)>h;tJ4lt@{mOHUC~qw2>;$XPtrRWZ0D2Tql`q5~WxTZ?rKs zBVniatHZ`r;xp2=-ohN@&DfyFIflIDf(AKODX&hE5ow_gBK`C=)#}K-qV@YTR1)Un zL1`K!yzuJ}mu8OZ$KWal*s&_QI*=``0>s`~=@JpLqAw8K6UO*qH{G@SEauElPc`-p zv5rrD6v5rzCBVt6#@t4#jD_xtF+BUUhmpTZrmz(%ZTWx7IJA zly@Ih^V1AMI{cUQ+2NFdBg3D;tttP-{Z5s9yo4Y*E=UYP==7L>z?(uIJDJPpHlzgm zWRf?z6il6G=wHf;V~;x|s5B<7b)lB6&LDAWQRIeGi z@8?h_U?qYeD0*9*U=0kV8bm-Bn4hrACbX!cm!o>c99AZlV9^j2L0fXAg5irw)8TbV zZE10qP6pY^vqd(9jOmGgFvXDj|GsPUX(4Y(G&IlCeU<=m#@1hq{)#TSpI& zZ6Tb%LAX?H=zXjd3m$}4+d+(iq(MWzF8xjz#^oHYK-;ns;nEFDGnUn{KWxvE!HQ8# zUbcNfX<;bGC=-VD@VE*+_z?XYej${xNuK33V_5JP)y}`xLZwM(!Q>mgAQ=Y(G4$Ho zOSE>0snbL*`I9SM;(?#628y&_Xj$*sI|L%!EjYC@!IAqVUblE_<7a#O{5BEjD@d_Y z)c5b0I=B>FU@Kengb`g2igx}n`CfM;NaOe|%*WOywZb~LZB$dg6(xLPNF1Ns6KhDC zNbags{Bv3VJc1l1l|HDdmgwb$_27`B(b9mJ4ckOMDL)P#D%^?w4m2ulzweNjs5;_G zKe3dj9TURSmZwUO>TOitTP@z2gglbRY>{ZSxsf3aLCb!|$lqZ?{_tNej#$o;C4M_o z!sk#1@mwk~r=pPVWdAVMlrQDx6go=SR#d8&o@(zj72rB_nJ`NQ04jX)&HL+CQ)edg zI3-~f3`yIWn>wgS$5lGh4t?B8HM1cXs`WK7`-V~)z5&TqjwvraP$d6xMd3F|KhR7el0v+yM)JX0Q?PMp zUpds(nT=2!?=0>sThmZruxF+_wBI;#2mGUncu<|xx#7>rCNrHMULNInU=v_p_s^2;}5v*gy+-}HOeI{ZTvul6dV;C z4Gva5kPtZJFuWP(ioNp$_|{fZ?#Ea}!x)hjdGCJbm3FCoCqKhxK!3cwvLOni`KZwTdKmw}df= z_!|;Wyt)=ZwGjcQ%JW9Sq}wT>(@_O)lZ8^`*km*I+W!?tEP3x@3*o>>Bv1aAblYkf zulyAYX@JlJQ^X8cL#X<}6JeAY+_aRy3#Lj^!49*h!HWhFu7h1__@D64orL1fUkE8i zWLtJip`-toxD3S<0fN@J7sFTZJLUtFRR&aJ+Irh~OTIFhqHrdID!1vKO|K`dHvB-2 zXel%ZJ(ETkFnZPZCE7^;_uAoC7?A2)+Y`a>?S03lUmkQx?-cqrqh~`RhDoB2p*%Av z)WVQc7QQ)HSI~}%3xcNG9DIWuHr%ATB^S$=!XA0B+)5!%Y#7}`c)No@2E2NJc)$Xt zcD8N}_Yf>6bX&fH7Mn+fh|w*TxULtyyKY*csD|#%-ub9FaknH=Gz9yhKI$>_CWN4U zclr+aX-w-RbrwMiVL&sEuAP4x94%CD+&y6Su1p&yl+WGfwm*R!Xl7Lw?e-TkJkXML z3y;HkH=PpHK}_*ijMSbj`cDJ^`DP)(R+@f}`NBwVt)zy!abg_0g7#i@A37STJ?Vy9 z>#t8K(n%`Q(Gq;IiFeFs$Do%A^qG){(V{s&5@7aC5at*ZmDJ~zzE=SYkf;Iij$FW( zu<(Kpbf#nHVCr-LI$BdXV#`ElhR?1>u1-mr(+%mw56p5$wC6$ox; z)G9pKH!W@A`pE#^h>8i{RBX`>s~wInS&1u-V|V39(; zHtNFHE;}5%dI8_W2mVtDvIA#;T+T=(&gb(#Xh&Q|;zjrBQ*h1_IRZ@G{@V#3Qa#!OTprY*mgfbws_I!UACa1aS_m22Y zYJ&g;?M+A(e@M+cqM5^%qFPA!U6<}CLE2x5Opq*#Mq>?|Pf@DO-)i>RoPV?=HAY-t zx00O%()C^aiy$+Nzt35)5hBQb9oA+7*7j#0b$93b6FJ4@R{pW1$xYhk;&E=-X?G$n z4}s{f+(Iqga(<-{xJZW4dyB>h znbQt@QxpsiOOymquC~`|Y)KdQv6o|Cjq?;t|67{PBHWuztyqA4L@|EL7gzWinKONF3I(A|!5N6sFObtFS=*JoZf6yqv3{bR#}`P9;nCtZ2=oJn zZl2O>bK>nyP`fwJ&m3ARHl4`2qm*A}C@|`D!wvRwZ?H5TC39PjVC)tGh*UPE4DRo{8 zq8_*~6Ua(#$VHaDE$o2ZIMXFo+5-tj-js7Bu$D3NHZ8HA2NgQRIBNB-LS0ma14ry| zc>zMhdt>RdtmvC?BmWENRHVzZd>Ej8N`1SD%`4iS0YklGI-^Q$^-v>deCpckh=z4vC3wYgUVTF6TpW&p*?C4zHb|67_5{gg7q>``(pC=e zPBW>w@Blg_)6pfD+eX9NhekMJ^e$UHb#5HHS&T24iq6|Zb5H7%grlDsCvhlLhCO^6z+?Vdd9#i;B&Ls)#DNZ?v zbh|}EGM&Z!j=jKoR0_c7@R)|B-|PDDN8ARcU%gDe!>xrcPn&i~zB!D3jw?2w!*Qxu zUlB-H0r>&J=;?sNk>ob!25EsT2i_Kh83L;OOweqoU$fCdz;DM)XNEz*c1+gUb=+P4 z%QRT;gwla3pR`dSkml$!%?^)&2=Gwo(GKIA!*0d(&_9yW`qk4P5(sD+mwM0rR_*_c z^1W0zz&8xtIc{C8Z%(<6`~vY3c|1*+&t)nGkuzN`=RYItItiDS}+cKxIH zqZh}YoOOgjNRfFh&Mdg7PNH1p>^mLO@wURN!~Cx*Rrg4BYRU+HSL157fERfIxw0?h z#l97Gwg03~^i3TtTGRDEkHjg3oxdTRZE8LyM>^b6M9EeCesCyrFV#ocEkrxxk!}PA%dH>My2J7k|0^iKA<(rlM{P0_=r} z*HWz^394Ui1v$So0VX0o!Uxqt^=K3Se((DWtyVnBT(>yS3ydZWnpa98hUUynu)Q4?~9ZazKe;w>3q)x zw8{x8M`FP`rV}S3#zD27f8}(tG(yZs^Dt&n3-gIkjDTs$>WQ=|Clo zDqw6Y`mq92qN1zuZS+lExu@I!<4YhS6?tr8(fQO#4;VUhsf3Zq4R_;Tl?AQE4kyUr z?zYKwdqmsQr_sqNg3YZ}yj&0Sics;9qAeBwy=-lr5ILP+ZxCa^RSMtGi9@THUa z7WMUZE;CC!djO#KW4Mz+Qae}lXT-qfuYA#kAi&1c{C#_|gERfWD;115E=hlLjW{PC zh{y)#ck$vP>rZcXyRg*4_n9HY^blSI^5j`ahI@tKSk*Suis4viL9X>i^WvsSA(f($ z2Cr#}4~SfVIkw^BKgU@13;Q9`>Q0BZbyl%K2Lg2$!P`{JOv^>JqX(8wb(Vp|i^k-M zPTEA#z+x%Hl90i4I%Uh_*nwAq5CF=wkkXNWENZpXu=sW&@cM` z+<(pC4uoFyquDozF^|LgfJTo`7pe`L^*WH8DYih(Ne5AWbmjt+Au?yQF|_oD`%7j= zSaGw`gA(71SCIvjCjgvBjXpLKi7&+icE_^xwPL4ytIuCmzeR@$74D7!+JYD}xIFKu zz#DHq4ykHQxouv;{=&wD(L*vT5m3?BH)A<0qM8XVg}4n~J~~_JULvp0?k+ z>2Hlz3yh1X9HGq?vvZ-#I-AJf2e{#YxEd$7@9J}=zzS|~=yfMZkzM4I>lVY^%fjA8KDO0qa7bIdH}B|!{Fyr zzu5qn&7+fJ=dZmF+Z1awl%j>gT;<^bjG1iBHbde8tGy8$Q3Vx58gMA;I8Ph7@NL*@5Q z2Q4_*q%3taRbKxXrAo+3zF?ykQJWRT{n!PpPlsG@Cb^AxHE1UdhU;71g0iUa>i#{F zI66>~&yCe(Xb|L-7Tz{Dq!Y8nWsUjd_9DM^x|RjdS*uuBCLL~0guUaHn^?E*v53iT2f zif1mok$gZR9X*QHSq-?#kFXWdC4QRlo)#~=Y}v9Du3O&66(?+5q5e@FLS!*s?wZHU zZw^>9`1gYbM*QfB8x^KnaNj(^S`x-D>p^}Di8uz z3;$!ta~m2B(wFl*t!-c^66~bGMqkKmseLKUCarczJfYg>ygq)=+PB2#&i>a--sqX%h3D$-U7wtpBh7%m?kK_M& z|LjV&Zr>5zr@6`{P9e;}93BrE(^12$^d$Ee@$5Q{At@)Z4&nXUmOO*QAfo60gFsUW zwG@0!ex+WB&AzMErX6v|E{yjq2$OwOM9NVrq)txrf6J*2i94ZGOmc+rV&b)F@qE$` zoDA~5#01Byv};lZ9J!%(1H!7v*}s0RaK6jYBPYnk?s!E|yfc9z(y*lYLThc{Sf3p) ziNba)JK*|^vB|{umae?7u#^&5Tf-Yv!O$#K(MJOMg)s>@0S#el5g6HG-3lYk8x@=% zVtf5QOIWZ^7#|OWveyoJAm7j2cmXF&U#2a45`#NQAHdjN zQsfd7QJ+NwV~^A`)}y=9CitINy&P^_@4q77Vlaks<>6TGk{gv5D_ilhKHx@jZAR?9 zt3%Ii_%o`Gr<28OAU9a&y3Pj{fDJB0<~KIYIuJoC@5HN34x1!LIX|L@0%uAL2hJ0! z7k0_}+b=d`hx%iSehm=gpP4x&gFB^8*B|lPU&$rhXW6KwE3iqc+D3h9nV^Q%tvHJO z2-z+1IGIE8kLpe{9r_8up}G0ew@?V%w^6e3?~)}L1nAKAtuMy;X*T;1*Gbrd*x7Y( zLC0FM-Oy|%xX66>U!E&+Fk7OBEKR?w>oO}F;YZt}bDR$h(+6g$|JOxr=i+lw zM0qOWz6LUOIBBIg{9_pzwI0!Gxj_5@LwcBJdP?g-pb!U_X(ZzWjO%J`L@OnYf#2oj z4Fslh=~m;-O5zMEafbM+Rg#bgh>O_zqD$lpJ92uwxf3Q`&@_{l156RS8I5AHB8?T^ zEw*_?t`y73(s@2V>R3-6&_piFl(X~f&nBn*mw;g(zGU<#SkdU&j86NvEH48Fd7hI$ zv@7CDc6h1=iOEmlOTl(Q#Uqo+#KQT9JS#{afywG^CHE@bkCD%A7V<%q_v05lG}oE0 z)8-XQumWvgN@!R~_}|Tbpo8;PxMgH>A)INko|_~_ZtBQ@An>A~s&&Wy{f=>AGqsNu z!cOE}hp?u-y)hYZR=z7|zIISUfpWn3Olq^DY+AXAA>!0DJJe=!5viDRnLEm-&z{kl zm@_2Oaspggh@o5RrEsf#OL^)XSp}>)q04n7d98Tkobb zNFn|4bh~;rwG9EF4g-C7XFKYfXS0#{T0&i{a7_p|=K3fw2T6ECjy!mo(!=c~8>#4e z)2cW*IffX`EsXe1TLGY`F@#Z4e_emD1`9$dfbhd2wT| zx;Be+H2;H6YhHGPm?)bdwv5EP=jX&=jXRAuNA0Z7)!R3C>ek?ITcK9lu&yw<0H$G_?(>26F3ke^Ei$EQ1oz0Yf2_GPj=a=DiNg{1bGYEy%XOmtmwF z>1;R=@lJi_;8!yu9!`c!F#*mw`>+;%oJdUff+x(U(o6coR;l>I^wL=LEG)$eYi4ZV zK;crDrr=@S<>7B{h>{{SYG$zUGNX1J5`4>NzMbR^v~b|Diw?23jq%H&B2=K($BnsC zFjUjpprORzW>I!o9Vwiz2OOAH`QFw7Mc|l#I@zASYD-fR@Un8`Ric>bM2(jPB7xv8 zC4VC1{_!cWxhz#rw|P+fJ{E z1f$15jGO8RO^hvaV?#%m_qbef3q3y85$tW=d1`bU?`b+bf|z zE}(D!=TcWmrns^Vv1y>m4EaGj!cFD=)CfoQo(Lhr#o|XoiQ0q{`(n4w#&mT zY+&eK1K;~;Vs|z-Xz(Ze!?RczyFS;TGX0J;Sr51vwN+g2CBD7fjJ^HSE#zKX);RJY zZ@>-k<@Kd+s`|7@Sw-hvs+J^XJ>UoLzk8DWa=xk;1QQwxNakQ^TP@zpafV=7$3Uw| zxZG|YKnllUxRO2{<3AYFpYwl)adLfvRu}+!vCX!td=pz}x>Q z6_sUlLze~u@HTDv<9nfpy9($@d0VexzA!Sdel4?O4!8173oSXqG@O8-XXW}U=$tE9 zaxf^0_>@9I^VK#%$?KQ+roPn&wmR6$zNb{E>G=NIokSrch8nUgv>#5O3|(S_HZ&Q0&+@$ zzyNTL=Mcwi^42(Yj-lSdE-Y-sh${1zyks7UNz(ht{PXhLzkeFfonjj#NKP2X_FcX> zhg7@jekN#n_EG?#Z7L*@6Pq_$ah?lI_F(-6@u7jm52uM!fJM?|FyuMj;nAB@6%=rQ zTyH^4m6UU@`f7G!Vjmf@H@#5~>{Q-iTg!gzOghyWzG|)&Sjm3cPR+#<^}m*a0cdX! zddWL|;cEn2Ar_nOYJj zjhoM`o8tYz*FQav-_@;Z5|zMi18>f*#@K-@@pVTHyq}ICsv_;nW*PJ+(37CtcPI7tv=`3I+fvGJAPgctYgO*&?BJFH{#|j~{PHJ*UM7L7D9v}` zl)!WcaUY5s!`?Q7RU^rDe#9CMc{#S3_R#Z$w9zePY2fUx9!EPyaA7_4DpF9QEOh1D zM{M~Qwd$LWa<#wHq)3=xp#1PPk#Yzy^mrsj6Mx<6BsFq zs?x)#(iRsU4`%rh(HsOj)sx4B?zI#p z+Ol%n5Z<1MvPECIQ?x|)05Wk1`+iQF;s)5-?s6E=t`V6+!T^`a$OSG!5mZZ(Q1oHO z6eVK0a)(4WtI3h$v3 zF2}1yP#{_fd?-RAa+H^{0mzquX=`w5k&?J+iy-g}TNA`L5X($VVHXrfXWJc()g^K_T_OU(TyWwGr27R(`Mn|`X+rssdMJ&ER=%H$no z+LeMM>M<$6Ek3LZ%6KWv+ay5+;HX=XtM=HS;g$vpAMKChT*i2WS^ryaC4|j)&#Uyn ze4bUIn)^n`TV@NTZt`gZRA(IHqAqsEiJ<%&MHeN>xOFqAv@$!0ht2M%XPZN7lv5*+ zjPI)e%HTyc8OM)X#!s~6#}o_{>8Vk*g?4H3wYCHj&r)=HqAQk;=jsY(p`Zv3`Pm*% z;@Oes8RfN4{vQ2)IY1D;prh>95FH^P(10OOqMTu705*vj&Kv_3wDl z>+u=4onyDVrz7sd`Ask{%@p$rA3ZwLI9_kd?M|piQ4829PQe~We)&XSwkxZ6aajJZ z?`;g3ku|pib~Vd+)mz`-aYEu1`fR;`zTb(xLVE%2oq?}_&c4c*EEme}l{t>mGBlGnV8c-PDs{@VwEGBF{`5OnCxWX`9=aqNBtuo#9WLP&ObH zs(mX=m?z$1PQ80r zk2ef4npC_h&sOBX)5%knnjL#G4K64SgfW?ZzTJ4UziS`qH_L6ap90^V9?Fp;-AYmT zq~jD?`UB>4VJ#FS}vPiQ4@I3AYyTAP2jG4Be0+<=naQs?3j;N<>-o=M}5 zuMS-DhZS4ZB5fJ_Kk2BKJr+`QYLD$)H8G%@epiaBhfd*m9ebLhPtSa(R?Um;! zg1{y~^7z_7s0!8cI&Y?c8{i5FdV4slO?m|c&G3axo@EQe_mFUwAM`hzP;J=CD zG5;z>ELL*uF*XAjl6GFnS%Q~s6Bnsalq!4b$&)6-XW=S=o zAt+fUI&Bt6FSLi;O*j7~JWytI+{Cl~K#;eU);K!=&SO8tFhmJmc+vy6UUp|b)S6V$ zMX^CP!o|7sC8?|7w^IF;zyH+>jpk!x%?;cBJx}ZDTHfG&eUYOiMDb<|Mi8rGc2>%AzX2I^;71z=dxast zF{N7qMrUIGmK`B}9sjC;Atk`>wTChyK++ zvSv?_K~MMBc=>ngg-9IT;F04{MgF{F7Tpq6b#U2~UG{S(?wlNz!xeQ2b!?}Rerb1J zgr6j&Dhm?zvly_Jg}82aChUD3W-U|eX`d1M8e)n4xpsOzSF?o3*#(!l_7@THZ$(6-`2g$B(#Weu z(U<56Egc{eVrdHr&(Rl`<8}~h-5H_tG!jh9M!Agmwj7*5xS_4^^40)b&+i5hu-0&{ z6iZhYnTM{pRqrMCWZvZPtbTOH7b=(c{{CbPakjiU^+&Vc8JwQ6x%9gTo7MLDcI|}o z!Fbe!p-JAVFNOarK-9uukrRyn39wWBCyTmc+dDL2rXcb298$6m7awoCmGy@6{!5?d zFs(yun0m#Xy*$8=|NPBNC$;qKpZQ($5P# zOa_ZsxeFI$U>MSbdOVX!j#uiDF7-|{zKSnfRtiA7V}?7tmJU=sVat#m z2<$j^KV9D@$XoQ+b=%7_UYmlYZUqx}N;=lG@Vu~E@{VcH-c>T(59UH1zap zNzrmwH7_}+7N(VK9LIDH(G}E~ZHwe0T^HMXrM!pN9U-?%NSu&;G*x&Y& z#aH>EevqJ})vG>;UD2=tJ(gY=kHM-R#1vgDEH_40ZuHe$&F<$|?fT^%^Nml?voK2X zK}Tk>oXiZjfvrU%Me9tVG_NT3l-Tv(DhXXyX_T`|7umJHI0Iq-#Fs{;|=NX z-`z`GXfXQir{eS1zr7mgqz@;z9x&V%Yp)F}I%ka~3wEZE$>do`mk>|h7Vdb%ATZq( zVr;+?UAj+h*f8v@h(hjU%KcGC@+D0WdE~G-Ut)4aWRSL?4B>wCPTc;m?#JrnrUY!F zS2aX&(|cxE3ag@OU%nN3Z$SIiaKL&O1Wjp&H$6l&e+3WE?JJMmK9m54^9dtB-PXxgLu94iyf zGL@3?Xo|IE4d7QFVFRSJCn0%UO@}e7Z3U&h~>`~f7EMqQ(7Pc8d zl?1~l@U51hIEQ0;)J<$s?R16iaT>u~K>rSNouk2Eo*$IeZV>P(T4HcS@w2b$SzYM< z*1+x#8Gd&+b`;CK#f|ucWf+EUM(OJau8C(TF=K(+w2}Xm&Djsae11jrC9t3XT;LkH zA*@rXDEK59SW(Lo)Qw)!bzqUiH~=J6pWW+B@ytLr;XiuV(*^BLRX6x-fc*l;6ShX{ z|GsRniL3QK#uC7WPUn|&Ya9WM*id&2)X)@!@Es`&aSx1dCtS6BozcQ=c z676&Zx#yxDRKREjx|A@3CQy@)Nq?@*c z5#tzUM9}6JRG!tvC(f3AJB!^OqTK>LKS`|moYLD@-u25Xz}xtm>e^a|j|A&Dqij$h zjUl06#_SnL0d_)xwp@l9=`8M^kp7_MgNz#CLg(BP1u)K!St{Kcux4Ez$mVs|Xv)no zrwl4kp+cXKlMLAGqsc*8SM-@j*c^>e(e*@mvcD zV}qUK$5{THfdk1L&1dT4+jktWu_La}NHYjCSdn59#Z2!(#P+T>(H8UuYBKD$jr=p)w^vn? zk$sPvr0*HS}H0_o@3B^vIsu$anpC|P{XVysYoRC;&ewR+4M_&DV zH@r>7a-Epd;l=<{*Xo*I{gDeSRt#u{GF(0bQF6 zc@fD>e)kVWvJnNdX>#<>SLUx|_&dQp>&SUoPS7pj*Xc$I`i)2{S+O=0-R-TM&;&^F z9ctDShAC3`^+l8EP}hIR&8rfm|5t?9B4E9Ir2rD#hn-23G`O}4z>r5*0uC=Y-M{zN zlZ5?(JUHG|blXu^Qj$SWG3;m5c5}Y62BOw!9>TF|{l-N9&i)7Ptv$^;B^7FvIU2yf zVx-xA!m@)h^0#I`O=ecGc3WL7Uq_}!EOvI4a2H=Jr00!>;7ZR)>$g2`WbTa>+i`mo zN$&<>>gmtL8z0-MXu=NUox40EFX-P+uX6yr3y?>wB4ECJkJu7=cO4w{<(s4>P2Qg1 z8+8!QZN5@+@e|-l4;G9-O%>!M7xfY~wqgkm&U>B4F&8m1H#dXZ>nv)Ml%eH!E&YO+ zuR%UfR=cRb&I;X_Zo(e$KA#omU^=6+u7AgA_B^n3e!#}6I2}=$#;AB84ayz!ca$iL za;iSW-7R|6tC;V$q=+);uTC=A@;5b0NCYk|)GSWBQXl0Y@KTO<}1F?>9Lsb;zB#gsv9kB){SIm_1;xcwubH08ey){o%WFlq;s8 z&!`)g5j+tok{H&$T)y-3wO^|eJzzPEnazEm9> zmG5B$z|&YmE9$~t*w3XAKc6A98u`bLXXeA8(x;md7d79YeYaXO7u41k6nBw4$dO)Q z7?}8&+s&wpcd{+h$@4>_U$c==3&^l9{YL)7&_ub^pug#J&`Y%)a0n*I!ilC*WJ!Hb zoW={gMyMKr?b_ zD)z8h$MD&>8uws?6{pS1wy{nlD?E20G0b{o(}wZ7;gjj)(H z9it$y+ZD}*p)>_Iv1PORiGYc|Qcc_7(HvcZa`6^7q?TBL?L3>wJqCmb`aaTQxwkV= z+E7rMDfK@3M6gwz_5{0sIspti|1Y0QWLNV;as-07V~b zu^jkpZElC0&NqaYrybt3%t&_V1o6Zf0=d+mI@DH|N53#WQ)N4-2Q?vm$aVKwdo+av zR@iV`vjIFkK{blmm}Qe`=G!Hw!`<`;d)E=@?6urbB3OTPnaYaddM!-vsJmI}wWh84 ztbs2V~daNdTt% zTR--A)}9<};ZWkpNO6;2z917}g&2cyM!j{TH$UTNi?dR==6G<=Vr zm^U|YKxeZchLf*?*yrGJw`{`bsh85;QPdvdNuHT3LhOF%Ff($xCS~p^a(LrFhx5Qz#`yhY7N`bjSL~< zn>NwT=9XSmp1Olx){N5j$0uML!=R04=|su3R~H;^I_}5;azPDA9AO+0Df6_W#zS^;m@oA z4=SA2F@dI@q8P*xv-?$sZ63O<>+}0@_eB_DY#`LBEk#Z_tzqz4{c+T`k%LNpnO6gd z(0zHDrD&vNjY<$+?C&51Rvak#Gsdld1w&}k(80nCgik)=2ee+ksbxm^%Y_eiUfB~v zo$!TC33swJUG8$x+M=Bk6(D%9pIxkL<1{*<6a#v6G0|Z!);FAB+Q(pthpo-qU`6!j z+}`Zy_iWkkhK{;pNzI2p$p1Ih<>@04&Lbs7d9>IyOU%P?EG*OZIkKNi%VtTlJRk>O z@K0XVCDA%nXWPnXafJRb6c1Hqlaz;;l~GE>isN87X&;>MP4|Rg%MK<4S**1dT^fqs zL%@Ha5tR`v2H+J(ckMldYV+s^G+zNAPEHw%-FaMrq>58Ls;mNJ_U>84x2+T%foWlG2BlrWGH$(HC_(tSz7X4>q@s6xB&J1 z)3hVo_g?NXw*k!rIY=QkTgKSAE>%ro7Z^B3`3z&I;R^4j>~R9ppV(vFvv*B4i4jy; z+p+a4fuwf%=V`Zhv1yT_;YV)u^nx+S*phj09>s2 zGT>x|{CwGRlImnL^Q@q~TIG1TJJZ6Jina0YHx;NemBey-=lbQB$I!d-AZ{u`<<)m; zGCRkJMRV=+h76{Zh4*gZ7A*>KT3|y|K%IB`d7tTKyASZcD;BCh_rKeu8c$eiaKY-V zVtSHmdhSI@Rgeuksp|=mTWNODzkR3$eeZh!K*w-pex);hMo~kqbx-}K_yKnd$>sWw zkW#k>e@12vo^uB)_rkJu^Zr%pD38^*we3rHl;hlf@&w=CX6_(U*z45&CtDwQfkW`( zHgJP|ZITfZAVavSep34qZhrra^0)F&D4xkAj{PNI2u@|q_OE&H167rQoNLVV#IMR9 zGo-kBspE{X+tPjSP$HOK6YL{4hu1CRTs&GoDqg=4S+2V?fLc+sUap)MLhS$cgkmDO zat=3dYuL)cfWJ{Yt&QC=h~JAjD_i4x1~vs_Y4?D%8$bg@>$|!l6zGFg*d2LZidggF z5mMn7Qi;FZHsgT4gp6;g1VE_xqs6gOR4am|G1SWUynRA6V1R+2|JZlzqInJF%zpy6 zsO2FXEu03V#v;Zrf98mf7((Q_20?_e1xK8e<)-m;tr&l zU%5Wzk-j>f!^~Uq2_PXV!TFCpiMN)3a3g#=fy|C8M0*fvC=Jn7|CF^n zYFrt9l{r^%p z5O{A2(d}f@U3%Nb@m0r4rW)cE-ul2RBiepMXm<83iwarJTK*>I#p(W!Fa3@YSx<X=GAh_h{86opYIp!N{3P=8+fa8mf5`J5Rk3A4#B=*VS55%xn_avF! zJD&C>n4*em%Z^sRNCg4NjEBC(4~bv&-M_s|BItgEvl7|w<+N+X9BGgCPh*tbW<_52 z4D}YbC$MQe&`Tz(_#O3$z^RbK7+==cBD}JZeg~GiIMDJR1=ajbn^XPil`2-*2t}1*wbIJLK9&KFc zOHE$mbX2K8(zAtB#LYy)X(nQUS`U*3feb9c$QJk{ZgP3CHgbR?NH;lWc;db*A+?O z;gcn*X7){=>GuG#Y#<|kvtEirT(vHpvD%zLqw!x{WdI4tIqF_ zgmsqR6sOLN4lGF|K*);*Cq6WAypi9Wb%I&OE;HfrO-IJ7hN0+kWVE!y@N2jf_L!gh zLrAN8c{E2SfU5X#5HJ7s3Z3{Y-%6|8TEj^W)e((^Pf$=cEMp6&LM?8FcSpfC1Vs*~ zY=aufzb;WcIh{M>Il!%Gqicp4d>n&U9&zH-})83O&}HQCh2@RnFa*_W_b0n zo#s8``W?*VV}2B$$8w539T}J-mE9|sT{}8%TG!jz-R40Ln|{R?S$dn8#)kfiH>|rp z6{U<;ur>i|Lh_`hAITKlaBz%G0-?<2D2nagjrq|Ipk91NnF%p*tsN3{x3IqDgY3j* z$(||@ERyBoXOMw1)1Ab16Eouy?ix?Hr3mwl2{@$}#@NaMY;t+b|E$81P)kK`v#rE$ z=yodXB_#v7glXdjT;h!lhK@)(B9#cZ@S(M1Lo0N1d1pZr81Q*ek?d+J38>Y2;9x|maY8o46lLKzX(p@u6; z2RHY0DFs*VjD2q&L~DuZ%q9`+CeMu{x#k4{0y;goc0M$-GQ?_8ABKzUCB?F2)8?ZF z@wNc%{-|jPgP8fTAekhj*Ewk!rE73q{Y)ijeo3YKe8%!vl{&~iHFDK&wZODk|Bsj| zfdKHU8?rjUX`#0RRE~H7%;lPnu5_OHKAX-E1pz3D(rH2{nh#S8G|;4d3<8_oH2P1Ktv#|m%P-gYIEJFyeyPmZQiF_loujfPFFWk~BQzkg zf=sTP%TFV@8zok-D3~k6VD03rEUU1aBuX)^c^I2CfR0%$aP2H**#*4FAJDmp<9e#5 zoCIjH=vFaL1KR*H^XdMEH+1Vl9c>B}sP5CvG3B&3kz>}m(=G%4j3UtP6{_?7!5tR@ zL|dl59!g2{$gqFEC}!ImesTTL9NIPt1TivGiy+4MK^mD|M7u63Tqrr7gBK@bP7?izANQaXv|d4q}&eFeGg?_cBUtL;GP2 zfuX<0-k+$PcqiJ&D|Y&$uBSlEZYI@Lz1T~NJMamcR!Jsn9&XNcQgY!#hu#CkM%7>uq<8Qh&{Mu}I-PoZsqW z1KvKCW9re&2wHRFq|Uj~RD_X!o_5Czz-%^07>}Q&jIY+I0r0#kesp@zOnX7Xq+0@S z3prEE6aLl!|8p-bG6~i02lM&Y*ZaR(0_6Tno!$pB=?aw_-(r*9;&!z2*l#kQ$Md@( z?L(JJH23*E_fz^Dw&b9i$xP#as9$)?N zx8xd9U+H05Ewe#~N9W0GojHt5$ln!x%j_8?8q@dRS162JZ zA7iKsS(VPwWA)QE5^=zKdFWz&@O%lyj4wIVa%fkjVEI(O#* zFS&x1R%xT2X*L|@P_av_`&3Ev@G*nxPiC)Y-HHCX53hrP%hKwU60$(-V7k7fC;=Sm zlm<@?;OFHKRYF+r$;U&u1J^{e;f7%Py}V(Os0M8?*1sD1;!1yyuJ&i3J&+1M9hOe&u3-iFXl$ZKL7HVbK5xB zrZM9D|2QnN7^=?~>o$U4I!brbqHvrN5tBF-?^=nL^wCM#tti+kf5u$#S=zuK5)S4w zW9*n^dd#!PArwz!p&XtJ8+KzC4h~P~9KW?ez4_r-^HMQxg2Xls5}32dgF?8bJ@?3) zrp(C0VpzR4%P^YcB+fCS%PKHxvrWLCby7#8%cbnM0S(uR2)?~O{s0Ox4r;v6tnMxc zuU*;?cvr-hQ}Q(_A@3_JN0}4d^N@=Ok+qC2&VY71huEg^(DL&;Fi-|RV(0SKeTG;n z>&Hin+3ZrB2)KbdA+Tj-9L51J4=kNqc}1iSDGsVJ#7z+(pSzEpywZDjA|{!ZMXZrI z&YL>LqLIu%EYLbkhk&v1SCEC*Q(n{Bq6kI%gQ2_(yqmxA7 z*I~f`&?%3Q=<4anqjz8;wWF+efzMBAU}-HzeyaW|S%9S$2G~v(ta=CFC{`;9S|AV8 z4qmcj|VBV#X zSHJC9q1>2VS&}~GF!a8LR>;;E3=U|REsUP@n&M=ujhtyHr6z!+vB13<;TK~Ud(M%| zJj&NIblh^=xkvr`q{-Pa8kSzEwUzAF!CCf7hu_GMbu0igI1gzEn=fS)w-Q6Wpi`O% zvBSj~wdci3l7u}URJROSSMI{}*q}s$&#Tq0J0IwweK5B1dSWA^Q1ClQBaI?V^Ot;; zjf^tm^i$ep7pXWR_?Ik;QXyQ$pA6`pSxNNFw(8k0LSbxvWgOOZ;$v9D&a(sHnqX&V*jY0T zkhZDX!Mvnj7(b`o3@Gv~kcG|x3y`{Hob><7{ROt*ErBr-m*u3c;%*b{?E#T0|7P}g z36%Zap>|&&H7KSsC{lAHbv&Gq#UM*EA|&^U zCQzq`Zx;=^O>i;yzLnMh-&Gp?0F@tRQ!XHwGCL~wL+%ocAtp>@mX8G>Tmmt1^S zccE~jl99AnZ#_dN%b(q{kXmz0rXM7@ zzua<)NW9XI(%e~#n(?bA%X6f;htarOQFS%Jl zTIisyl_7me<*y26N|t(m1Mjlfmf3@Hua4#w`a7X)YA=9AzPze@n?i4_xf( zR-|xSQ;jWa#~5UO+dfSOd8(A>LG{}Lh4oquD8{)&N;;VSB-0+mLfkJWsF0PT(|b}qypP9u!qsk4>(@c)SERR@zAE`bsEE|%GA5#9&Tvvaw0n5ZT2Q^2R7QLf)Y z%_P78a2j9SrYr`Y((@4ojp@mK;s;-~(E1aE-6{1@4Nl~En`RL!-i5S9D|+k%$nb(% zQJsi~fl1Hn!-p6n0I$DJPfo$*Eqs2}gB_3JpP%70ySk^`z>VSf(Blg2OXj=dRn&4C zuWdt&3xryl1slH$Gisk537qw969Eww${LGAb{~14upKil^EwEiUw^DGA@;_xBbdZB z->bH}T0&0p1LQAo)CLGc$8ZxHcXo&{bd=FO}MWPlv(o>dPxRN`YO2=2y;XW|GP+o0+nU%a#KCN>E}osbjjardJ__tq~V6 zp?=!s)E!17uv16%@S->`TSD+dRtXo(iS3WuRX>-Nl3d4F@nxHIZJG6w%@jv$bYU#@ zY)SL1254uGsKz`YRqPP7RF=hi0zxHOiynGZ>5Ccp<35QP=dUA;DB>V?@KZ2WA!SC1 zyI~jjkG~0MI-z+^cBk~xKqW~U@xJN$5*Tgz%JiCJp33fLYE|)<1%{+?`=pt3@EDJt zr0{X-5T|=M9|GZ&(8x^+LV}B>&Lh;Gn2*|DW%eX~0L<3s=mib&(6z?AV!{Y0E>@48 zZ}~o)pyyJrofO@G^rNScR*fdoRV~`QPOjT^42?`8l^zHSc1y?Dxx`iy*`#M~M%-el zp(W1=1;MY27C;3#Ecdrruy~L&vC)>(I3>VlW()7Fu0=$y{c-Cx8r5kB-TdeH;^+WT z;4@|&BOqncsWg|8t+QM6IQioJ2@L3JUq+|tXgJ=hJobJNs2(eOpbk&(BcF)bDBe^D zu@hO*;NXARh^0k<$_D84hY7G&2zz)5;AzfVeP2`ika(BQ?Z#g5meCWp)IV6o-~6T! z`5k*i?Z}mbq`Vjy;`>fqtdrYr?MA1gQr|eeX$O^E6j5BeXeS%_);Gn2Xp{37vYP|- z1Dk(_LaM(RO%P;*(A+E3n!kw{jw*rKgg?nrYhiT-;ncS9MYa^X;2`qZ-g^sY$2( z$?SMj?RTd*RtRgJ>{_PfZg<;sP_*-Hh+F&~6?Ezp09>w|BEf!J0~?2#dRkIWHc6A= z1ES9wB0m@CV7)=6Qei_D%p3z&%haokf)&%J7yQDz4nwf2pwi5=;+$bV87dN(+j>fl zqiRI}RP&gKP%Ycg(A5s7?aDWdwJS=f>V=E}Qb{E)<{NK!s1~|q6aP@+8w9URRS7|{ zn?&b=!Pnf~EOlcAE+;OxzL_>jD%wID&1t^Q!;Vt=sRPF1@}^R~I86ZZDh7~7rC6{T z(U2P>D0`s6lwX98bBjZh|%qivbFxSwAGz0}zKSUW}Ntz+~ z1bqxgmFQtkS5=OX`|Ve=KF}k0otKUI5!?k!>?Jm>OQSn2lu;$2Cw5Fe~CNoFs<_VWY%gd~P z&E_s`{If~}0)V9W9%`=2ACsDO38LuF%)08z?(lf%}HaqgnnJIm480#8?Vq5R&|%} z2zGi$wJW)MQR%FR$L5suPe10FdXNx$ZPl0Y3n+y2S`^(U6MRFo^9B1CpO;)-yCq$R z#UM1Kgz$_G>V`>-4`Rp7%u|7Y_*7tSpWJ^{9irhX z+}Dl{!jz79*k`X`daX8`TY5?VN3@BnaYXn!Pf2rUfr0=yJA2aA`eCs<#`Sm*akN*D zvFg7$vcRfPq}k*1tT!w|H;i$B`ka(W8khi?up|;)j0#Q70i%36$L9`e{mq|jbR_=A zD+t1AKqIZC&&3GwB6O0mb^x@#Ss<|LcyaCQYYmoaQc>Y_^LYY2hna%tgabAxv4ClI z2NYH3@oSwHzSc5vbV&llsYWHUo}QAWNN`E=f2lEHK0k8M^`v)GwsTK8`qv1YZm^03 z)$edF7lc0hYu({A`>RqTJwJCMAebN)hHyWiC4t5N0(#zl zR#!5#pulR0T&_HV3vU}xu5 zjL9j?RFYs_#kW8p6)6KxOi8@errv?VWgR!QM$V=c7y#soT|uxI5hB_qoS51hzFH}c zI_%02`<6lkI0e@bmd!qvk6a9!-BUG+Uj-Z-Y&SKehll|pch?qd?9Z!XV7iSMWDW1Z zD(RFZk9f}R_qh!2VvF>EPed3)u4DjHoLm=Rrr_qlyrVKr?w&lU=smL6S?Zu*HVgWu zFIIa=KAN)vBi0LdAjkj>b!4?1Mwa6agrPY3D-Yr>&5MID-=xLT+KiU1jngp)-82XA zsta%$rcoCij-BJe#rV|WJDC2>Q~1#fQS4K&EZza9tbg>v48+!e1kIHwYtR5b*llX~+d%9&C#)W?{D1nCd_!}`U~@2eP5t-sOH z3ONbQ&jIrqD;@nT>4!B?>pJJ5GiiDrD}tNKSRqY@w?(w<%pjlDP@|RqI(|;82X<(f zr8{vsYSk84^)jdr!to-rZ*Q?b?aK7VB2%_&2#*1wy(Qtw&nD5?afW)qg3ZJik=kiX z+N^n+iz-dc_m47hyGo?Fq~es7P|kEnL3WaUw?S_zM?DOddQey- zvrL`k4m-nh&#Kd`V44$~>tD^N`*3K&6zYi6dSiFYMvJ&LxcDAzVGm1GjLwEskKe$~ zb|q8HNa5t*k6g#ZxHl(a^7WfjQR;zeCXI-=8psVU+yy#Zo_qmXB4LqBpf-9m6?R$Zy)}YcgTKXv8_?!tB)s$U!fAIxooJp5nYXoczS~Ivy|CHDh=C_1S@6CKK2&=frL_?@vnu?&%+7Cp6|}#emsYbSg;QcI{(NNrSS^by1^E zWEvM)Vw5fLMQXB@Kf0oMF(fN{&uY|^qD>B9<5ox@)O|Bpi1J(cjf|^4r@FiJ-Mx&d zhPf%bf;mw~B2d8>$@I>M%6Du!?e%Y|+`NIK&lZ<#l`rA_6sa2rnz^yrtz|D7UliUElFj{1k~4M1d4iS4d;SwGWKwxWc1BT5vAo?6pI(GBi{}HdExmCI}3d zQo~Uvpb={Ag95hy=!@g59mOIJxxv@Lnu9WguzSgJ;{R`>Q}m}56^Q~K9&nu%?v*=s za@zJ5NZ^29{J@A+CMS{@ztt7;t**per)2pfrG5s7zk5knYBJ6eeS9qS zSM|do*EG#MVpaEUFUf-qZNL#`jZp`Ou#b}oE?FdJQOZkVJN){yL_1UvAMj)%vFkWB zA`feo34}0LPNkBLfD1XtQAupj=FLesJNc>(yMju;NPUP=SSZbwwKy(?3A&*|#tKdj znJRc+K9ffJnv}Uo=mrLYHY_R|8jiF}Y;%DzyJX~F z%^h2x%Ety;~CP!d%0Kf$&ED)n6gio*D4K9h8DqEoEe$ybJA&%$A5$vg>fm88~EHW6(}!_|FSiC%t!7DyH%%Zv)QSBl~H4W z%MtX7>pj;_H9yv@Ulu3YDrahI|0uTeM8?Z4X6AOTq!*V#`70mL7j>9bDx|y&`LmT` zS2{1BkZjs$Sc;hZQB>a}HRaf-lp)(^6dR3AQY4ZQra2>7zhpHfCh6-|gF#{3BW3#6 zyPsi5)=-1hcjyV(pbn^HM}b~$77c^<`rXBwr5gkkM(V=8bybD zT)|AFR7}wLe6|(l1Y}qj9|+dyU&pG=^KIrFcv!M2FDeQJGEWChoDnjhJ2-6vC#|&G zo8Lr&VpQ~$q0#Un(CGRFg{fUE2n`o5D@pu@J{`3u7-%>fr;>E#5XfJXE9(A5SUVSb zwcQ>!^c}x^o%Jy7-ohc)R#U{0;3PO^q5I8rG>N6_7_u;~)maInQF^wCT6HK*;a6A5 zD^>vb{_i~KmUIE=eYem7WZpb7mlzIYk79^hjg@UGB>1`&gsw7Iyj1VNbj9kA3;!4z`w;i1 zf}eV2R3j~w&U z-huPx3l%ILagC_Fm{<~nMt_09T2clJQH3w%-hxi_o9UDoctih7l!i@c2mL)(Vr4L( zV8duhs6o4|627bE6B6YOJ;UO0fFkIAq1@V|*nG=;){&S(v<#WKc*NLA%V^cJSws6b zDL{yk!?*gKJ3bucx2HQmc!3#1;9EB!WU%?n`@qhrmqWWt;Onh6V2KbpxVk*Q8v1+m>*av81(*>um zt<89F35o9T^9Q?7@pnG!VDg*^RY2*DmR)7m6^FMSHdgpl7f>6VI7Sk*d75kz=<3aF zTpx;ndb{5(KVOR*D`@jn?^;wbxvV#ByNB^H!$f0mWM&;--^4*vv3LSsP2)&Xh< zEcHP10`zveET;^5sIQX~PBC#}qNHn0pwrL8qyvda0Ge3-R@vO3{#hi*qHtA8SrEOf@k5hS zlLHCBn6zm6kyqA@uL-CfKI=&5(O+d52CV9AVk~tSMZ3va_Q;_6JC{q09K_w5k-!r$ zBbB+BxunuaNwhTf7HGpqMXr<}PLOfGVHf`H^dnpX%v2t(b@(ZN6JPfPk z)HDPn13$bprCSX~;UnhIUVR5Kz7{{GGl<7-G009 z7uj0OI-9-@487x9qbeD-Ce4Re1wJ|_bS#a7+;H$fr0Ct59vb|3>%GXq-8ep(4$Fjv zg?jJcEiweuXpkt4=SU>bK@z|0pj|deO#^&_KXrqzi^nnF*mRp7Y!Yul&!%m;Nd0E-u6f-(gw(FKfqoUe_K~}vN*?gx;Y4T{64wd@_w>@FV~UfO;6&5lK=7`{O|+82 z%0?*$Q2Wd(tDhO`H$+0LX_i>y^ zAfX=9GUd?7uPnILwE~oj8j6K3zP-5C<#A;bfhh%%SBaZLYQblN%@a8*jQVLSRDx)A&P>nYj?UbontX;0XdqrRr4ne%FcJh_z$^o8t|q6S`6Qr7toGNx)fU!X^W&*(_GC@XA}kfiPjO z@H9+z{~2+IJ**F%;2)Z@goDu5N-L)IZBOW#se={`IoCK*#yg^8`#f#aenvhVrlC#GC=P9_dcSo?DS`po=W zDu>O4k01MoB|{*930FCo9c(j3OEP2&3dfhYq1))}y=eix9d#Z(8{DdG9jp8JomPR^r9HOfBAd5EaNx96;q) z=$mFS*{>hz#vMJ}?XR==kRw4@>d}rE)guV%4*JAlwGkxA5(>W?Au=%Ak5~>B8L|{P zmA^g9H~&}~jXtYH3xJZ={-1Oku9afNeY`1VP|Lt9|5H9V*#XserIwYBB^I%#Ng${O zdHP+Y0oKGSdeh~VvtHO46bd%X_F?Pes+4^^We3ia_z7*N3SEBJ5j^~p2_B~)W!1=o z0u2sOZB}(JYw%7W(pjf4qcSfDOyolODKV1Kaw5vAgUH|}{QzV|AJ%7E&B-95L9kjj z6uKAxpWCN>hR2`-o1_r_?8^UL8!?gw_j?WZLVSVl}GYNj=@M=Qc2n{k=cnmE;ci7h1;L{VC za<%re9;M4O=ITZ(Y{TH(y;o;x@EX+erGQ25vfK3IlqpTihW`{_W}Y~23{bcysqw0L zxS-a0D->h`h2}${>2yh6k@$SjbC`>(b$ab#mq6N|fl^dhGho-l&`Gwx&?+{`8ZxCw zNmXWp0U){FhV6dh?M75w2l`$7C(_3P_B!rrXZBW=jnbnJlx*R2JiV}DtY`}$_KZxj z9&i_bIU$;)HSZr}a`17yT|X2G4}=}cFcfDwAX+X0c&P5AfkOh6&y?q}`w;(_`$an* z&&=dF7@C^sk)riQhFpj{)>b9m@_2T!6-AdqM#!u67iP6q=f={aXVkyWoSHfVx{yb? zI8~CYjsO0&L=yKe(51e8O0P;Yq*2Pp^t?)KD;Fa+77cf%FZC%z{;I(QO{pA`j=zuV zb!SFPwjq*!@BJ2RT84{})c2J#@6()3jSvQ(r50{2-X;o`C`WKJ7|t1r^(CqYuu(j~ z)T7Dyn)L}R;iNS!|F0+2HN4JA+#FES;`v_-Hv6N_?VP3>d8%m)WF)eBtRn)NWl z;VCbpC1@L!LPXGg?FQQzcV3I#o9yU-=t9jXW4zJXhp44liIGt=(Gn;m(M4+KT==Xa z_3Ti-+@6Xkp$vH5^YLi={Q&QkcK)aVIn|h=K;cPj2C%C&jQ(sek~&-i;S27>)Pe-8 zt#>>u$hw=6iB+8IZohqX$U7Nf}3CS2+g^NB1k=fWt`?(Ev~kAPbtiglNoXY<8Jw6{9ALIx7ax)k7Jw$nzM%h;v=^V%8rWFEIhDj zrCS({4u_J+gO+UR%jeipq^0FZq0fvD-$>X)+7-xs=CSC15M!$rQUM29Mlm3R0)bK7 z7V&3(J7X{yQ>-sEn8PO!znaNuHU6O~u(q2O$p;Bz)vFFU_?HqF__6_20!bMp5{Qdy zka1>|01Y^ZefH*Fb5GwqL<~!1k|xNn9HPOQ3L~KqBPIVseQX5;M?w2qIRaZn)o>BTKPD@+TW~X`}`5|Jh<^`XY8G_ zxE9Ys2VQ_SK9l2rG9D>u-Pk_h|EHj9Fh1hug$Dj2(+Tsrz381EVCOB(pwgYHw=DIl zr4Oac>b#u)-#Ry+rqU2sovqh&*LJL1^n-agpET6<#7TuohT+4$VF_t9dGEFlQPP=n#e zWg2Ohx(3VtP+WD1^+PhQBBWp)S+Cyh@)g3zi~fFizcV2qA!z8(F)h8xF)^@o*Z z7r2+2#e)&-SE)C(@jIJ%-M43w)L1=ThAl1D{?S3@qdl{S?euW`x9H$NUZ@WJSWo(^ zCKZT?Pkxn*Y-fB)F6l8kcd;7Q9VRDO{_2BlyELf_hkB`0QL>8ykG4*)SKUlfcp^D| z95N5Tndj8VB-Y$qieJgZc z+a$q_DE&5iyN%9%1BoEJi*W`Lq3j)M7+-kZTPglWY_aPfUtr8>z^bE7OL=h+O1E^6 zQ(9nMo{lIhWjBGXVA>&6;irvOI3EjjWK&vO+kF7^he9#&3H*U{4g@#&QR-2g*w?O; zgAEEz=ls?=83#;=aTG*^{v`>*`pn;WmsrJD6WY<+;gO_|AI20tR3 z#6ag0&+ zo$$~uT|NtFjX>RZIGaPqcakl&^>Rqht3X_2GX7BJy<}?Apjh7fkKrh*JgkIO7O7%! zc7-L{`n&671Yz`I=4~;Mf3k>wI-sw|PQZ<9Ap5>%?>nbp2F@-s6Rjq8tZ6M^lY)5; z1$>4{0L))O%qG;l-t7QDeXtT7LP?l!IO!>f2t~fq;Fh6wv(8*Uwxy!HAplMP<@B{G zsN-Kc8BhLH2H!2fM*S%&-~PH71mpr3_|%{55Xm`uh6#Vjqh1(RD$sfkbAF^yiM4Gg4;m6VcI$wdo$Gm|@U=!@`LJ z=hD~o7mRUI_i_1t5H4PD%~VpanRRiijQ zylO>8S!hC-LrN|ntY!j^z5RTIfobwiVUz{M1^?%}JZN_hJ8d84)j}st#>QNYu^ViW zM3@bEz?UZRgE)n;_ur}$DR}~x3Mk%s-ZDTVrC}rhP=KUnznWM7=yP&SnyOKI7ap=` zaq&M+jhDk9>bYGrIITx|zF0TLXPw<);r*q(vmV*NaSDW@a?%Q;swfzw9&(Xz(_|1a z`>QN|aRHK@Ku6sneHPDAU!&$Xdm4dKeX46s!wUgFaMX+tEK)CM@#eOA$Uy=f_3(Vj zYf?)i5g&mXG`mH^M8qw1dF1gbR*ZV$G8%I9duSR3M#NFERc)io(@!aO1|E68MogPllz28xYPV-F%%^AEoK?s*vvLzz*CC4n5 z*gGh;4i)E&SvD43|KwXMB>io?5z)5__;De51k_|#ue1}?HG|4d#9Gw3)9RLDA{lA5#o+6sEtJ+@AY6d8*S(>i z$SXuFmMat?a(>s5_Afv6n99CEKKUA3kIM@FN;KBScpuM^r3c;JTQSmS=Pt2V{0{* zUf$H|8YTlc6-G+w>>mxiCpk23Nb1w`BY|0FcpO-ZhMabL$Z^y?QkW~~ShK{^q?`xK z4p9A4MS3?&g`SP^*t^Hn|#d5k#x~=>CEvw;atRjN6i3<*^=~kDrKB< zs(w+UlL`@U&v?n4;85KH1p>X{ubt+>hpMh>VXI#a?@^4$o5ciiD5#yCQnr8ELhWaB_>AS+XTD~^nh9_O_k#+9^IIM^jf{IK>RC`#qE|0nX47!I-b(l&& z&Ye9T8rlHV^PBXCS}~>@Jt^3VGdv|Mn9u{WuFUC0G5v(3D$31@17U5n&M(s4wr&gB zqgzz<&(VwRp|QV2yq_D`Y>oW&Cz)N&JLKwsRxlQhlE^Nbuqz=fNCg0u2>qkJQe~E~ zNjDgqEQ0&dm7e})KoESktQ_^+Wiaz(JTzCq^&i^tA`MUDDqlO+nU47rn(W#?2xX`A zY}7(+i;!wLQSV+qM~#sr*=y8q?>OHF07{R#MJ7Lf)GzCIZqb>N(9+v`I zuAXql9%ygDrs?M85GczHvo;3;X|l%FcmTy|u*-}l?c3>5Iw)((8#Q9??qe2!(9U}kw?pq`vDPVHB2S?X-CLocDGRu|j=Zg>*ZY5^8G@#%-vaSVhJHB4x)4xWis3AB~I-7UQ#jbC$c^1*V` zRMfu`QkXK(fMR**kgI`e2*3aqm0L3xmgj)~3fqcjS_eGX2;QIZ16w=e2zj-9{CcB{ z+$EaO4r`Ni;pD8d4aF7+R`5YyWHZ}adeZx$Cp zAqM&wbvS#q$W}{3bfcffiF?uMgBT?kHY3G8O|T=md0v{}bHRxVU|0#`^8XVSTO5_A z%Ur1XgIQ>1c82$w^m?H#GHHu-?RhpAvjR%I>pLc4cybJFBP4-K%u129p%8~|VIZHF z#TQ%Av)#SYd{BAzQ_of;HLgom_p~?ZK7OrD15|XlJv|w|GOO2Sw<{H z!Fr1ml?7VIxF~TvM>)^Yyn)`wr^M|bN9R9Pw@Ki^ok=++2svA_J2mJF&_~W%T#K=z zvyZJfdrv64L0(uD82?iJ7JyS_koZo>Cp_|YZSCG1$vg&Y4UB0t`~NX;+6-&s)7eg; z?a?3`p-zzk!grm}c%gY6{Q_Owl9i_xlWT;DV*IsIZiDcv-^FBO9XzD#ltqZu{(|Yi zMsqq^p3qgwLS^aZ81xAm@4rs+gG%@}+~pO@FJX%Az8^6N{gri)fd$#Nzx* zMy?@IB#vQf=EgaVOlGMg4h~88u($z#f)c4kVsQTBBxxR z{Fp)&T85&^|9e7Ba9K=$n!n~1F;PSG9G?{(6?HZ$OGBpMt=&8d7yZ2KE}e62yjY=+ z5R-%4Lck0Qps+$$c^6$rTiK%ou*Zeg`_c>mQsYt43!l!v_G{|>_;QU88PMT|_tmD( zVi$|F#D_0sl`5-lBW}U?a8ISy^hkEi_PW_4mG=+r1fk|w^uFR<>>q-NQpFw~DQf5YC3CQRZ&6|cny*?Fja4gak{x$|=P5BM5u77W<+=glo4%MD`NW+2kCVGz`+HgxQj5*V`N$BC%3KXo)YBYSzxYxYTu z89!nA~6q;%xl0MCi8!Ke!&WGwF&MhD_ zkDR~+sDCgwCYa=;@aB!478f|%6(zr2qZ)PH@C3pR2uNeRfH7uJYgU z6zz@44aa%P**E~MkqDX5AnA1$O}TQ?%S0K1!FaLhi{%c8=#NG@b;_Y09r=&1@m+iK zpEf&q;$EL$a_bE{w)Nz3dw3#Y@Ie2)L>2$XXGh$1AB3QNKqmG3V7lAus6A|{3C^{> z{X*YeBKVdK^s#_g5>y82j3B3?x7Y0C0gK|#FbF`8)-;Hl6V`}93xZU!GGWVD#8z2J z#NseQiPUDJum~Ge1`2n%0;S9u>;uiwR-b@09`x}w>aHuf%C?G_pTyXlH4L%8kwMFO zkHXsI5aS=z4|Z*I(PA`k@Caf8YBpf%?@`(h_A55Jp&yX^6)BK*bF|fVs5{1A>QB(t z=o-^^#ePGclQd}&-Vy4unDJ;gJ7AI7crlGq`3BeO>dr6UANlCdw?MT7by{7N2a|%R z?wuZkp*;>QzvI66B@Y-IDhELw=dodiyMl2MC?tw z?`6D52EhyCLeNzH?hM@6fStIE`Ko@H$pVzb!Lf%dsy%pht(*E_zAOiaW|OiL#b7|D zk){!SqJ5b_<46?4koW_DHsPBCml?)uf7>~012QNAKkGo66dB!c{NePAi^8?^=&(8Yw5ia#fhSXeW-U^JAw89Z!xk8KN_~XB$gom)IGLSdoz=7GeJQ z9gt68wk#2sxAIk;4J(^j=D&SCm6T+UdeQ{^Pbf?|h5$T?^ZavWulvJDalB1GOd3=| za?tZSfpj<3o&|2BsmvHH{Ii4DIR_^_e}rK)G;UaG(TKcM^HG)EmVbesx*+|>uDMlm$zrSs zk%gp5J?Ih#mT8R`kM!Cffbn0Hmu*2TZ%P=K4qeQ=4BkXvnjd@kLD{n@rIl0<9HMdm z={j;;U9XtC`U73t$YctxP@8x-gRk*E%=A`59d0=jU@}hH%{D&r^T2OkVQzzqGribW`YS-uF^VKISNu}Pjv zMF{SavrdL-q^=gWZ!`F%fSBscm8__+W1`HbRzmTvt;}y|vm|XKiO>B=q z#^BX;i5JE(m7y@i;nmL`EDL;81G^Su+N?{zU1g;5u;6!J&B}X+w+Qs-_fV^XyA`yt zs+?U@K}`g+LFI@-b`96xW&9OeJ(MUXV4~~dih82ewIAZb%+&!8WXi#fkCP{x-D{Vp z{cowu@zBRp9RFL9Q!s_Bx5LJb=~z>)Ph)InT@p#WG}5znvl*mYRE*Loup^%;l2^mt zT7?YNnMLHxz2_PPk&41)(o&%;W3wPKg~KV|^8m`3XB5G)tU#QNX%1?zvp<$emG2l{ zpzlr{-we0@Addx<2nE*BM<*LXVZz4(4XOu{g(cxov+)cTvd2@xa2`rSYibRB>HD`j z%}V_*+V{BOy$elOD$HD#i_}TC4q%g(`s~iHO?X7t^+3V)16?@r28>AIBqg1!|CU$QPiaKLcFB~hHETA6R==?PZXuCKTt^*r#Lb2}Nue-PTq{0`NZEj+7Usv9 zVf>O>lz1tAn|OW8%V@58_BDwWbxA82qt3e243si0=QO7|B#w>?{3F7>;%5tSkt>Qy z=x=I{_j8y)7m%DQ>j73mkNzO2#|Bo5a~YMjgk5rX z$LZoD1=nK)-<^8^`cpJH6E=>-Mcg5V{F7Nof4@F1`Dy=#7c>yk7uIy6y$xh!mZfd|%e6*OoujMClU;f=p4OiBFDF$0(aM8PSR?eGRjw^@Y` z_l}piqTU}T9Oj8}^Wh>UPCW48I#C=*$PXwpvK_Ap>;CsTx-#yi)>Or%_A0+=0hK=& z3Z$4`cc}h}G6Vo5|AzSs7a99g;%lp`(q$m8jvVpAB*8^s&*MPRm14zg&`S`T&*2m~$h`WsR;%Q&M6)=(^QZ#VR5jyB1MblfH%?AW>f!t(%$f zIO+D45(OC7a`y<{X?Q;z@%kT4p1{t-{A4&;{5-`wY^B&*0`m|ED*JVF&Y+6U6+ke z8cjJr_@@Xk%S{@|Kt6VK&FLX<5YocF$<|^P9naqrcnS(U^jwK}xX>V^h~pnZ{))78 z;05->KiIyXWAkF6&7lYIGU|?_DHz()x7(*;FlSkG(->tVixG>&Sfx}V3=)hO-`JrspE{Q+I2yrl(mkN%zW*fgLAa_2XLO*EY^B+A@mp=FtKn(!y{MaoJ4X0i9Q&Dx19 zn}(V?q2wJBtf6lUy3UAPY|*2`VXq#!$cuYKI+Ad0z=%~emwNk(lHG8QV)x!k zkqwS!6&;=FPK?VH5Z1@#YowSK4kD3sKV}J$^fp6B(wWkZW@z{{Zjk^#iwtl-WE3Mq z|1?EQEn_yR#g5`a6R-A34`@^^_i~7OPwe8^f?zp3tLZ#u9TS}G0(9~y#w~Ho1t>#W zkNX{skP^a_D;`Vp7}i&(lQ$Q&sk=oRdCT>=Ypw7^-vqV}C`dk}Opq(*hfnx*{y-FwiITlmcE2WM0(v z`pi`#YR<0sW;AVwDP0wOsuL#IFb7urWJ=#``bZ~`-Jco^Q)vL`wtWF~*w(l&153EC z9@Eij8w5bKui^!WtO!49I-EDjq%S+mLr>p_&mdwhb)$ZzP(L-Nv5=uvJ^zZ~%=bRA z$Lc%?^o4p=(8kO!*rgdwwj`Z0k&wKN#ahikul-#HTQ<@_f7gW~ol@WlM1e0HdWM!hMNI8d*+3J??O4rg+Iq#beT3 z=!#tN0He9e{9PyTOF@0%T+7F32vx_)7VmQfd9R&2DXA^p>eb2UI~^maDDXkf-Gnxi z;QH7U1ES@yB%avsHcFoMbEsa^qat z@1a&zQxqGkRV^ETkDuawdvwdKAAvkq)ktVZX-=rFaylL9wpm%lo0{wp>)1&s9-WFV z2QUbS;j-Yr7UUvln;Z~2Jb@RzghtyU-yJ##GY$C#ab_3Rel+S9)pK4G;u%A7CD}3z zM)AVo+*uckPWJAz<_W)-=Te)kjw!GIuCx>XsWe3!z~7xJvhjD=h@<@EG(#UQ1*XC$ zfXt~7V%3uY_?RpFk>UymkiGb~bJSe&1XM)d_L8BSTBlJ6l23A?s{jl9kqDnbPQ;9; zWDZv{l4b@SnNd#E4CnDaD?fuMX=`L*A_|5KL!T_6jB<{s3c5L!Y;^_z+hs%j+xFm0 z-mK@<+$^XC+hg^8;r3!vvOMMVxhjPC&;!vMUScGAu==+(Si2i1NJYePX=kR_zgG)k zxl+YX(A(DUX}a38N!V%I#F+wp3b=E~AEAC*lOv}LG5!^ns`4>d>#k!Ok@E`ToRV%X zxFOBKHvQP<22+zKaox?%LT!I9BPgP&@C~@I*xEAt0Ye;D*|bj5H;$Ig+Buy4LIug@ z`O;db&;?|pOb<~BE^4F!Ttq)h$wY6ROU2tvars?w&2xzy5*M&Bh~% z4;a+s{#k=eXB)JA?6xDZvx*Ai$dcR~ME(Cx#h=%3zTM3FfURFALtOOpOp$ z)~PFGKlRm`Jq+@76PxjOcc z)vz%NAUY8yAU6fasud%ynT?Qfdp+l~H`Q^9zhOqZX2Q<`@1MtW0#Fwg`l!EMpab!j zftPH4QFJ^hs2oss|6(|jonv!-lt+(1h+zhIGPE(VUoXne%y7B2QEo)_<$jdooZgDd z=Z^eN+WXb2`>MHGP5w7>H-}Bh3TE;9($y#{L>QR5XG%ZVC{>}Ea9(@6MJLgW>Wb(7 zJ%1YGIkl7DLkxVfmt^8rW{KFVQiQeXc}`j}`QE`s2cp!m+C0Xe&Au_xl$p0n6*xv##$gMxE?_wz_`01poXB+XWv-}vWHsD?zsJaKz zQ1qa+GM@Dsm&)l^jB*yl_<;}6jr%43|IRd-1dQ1427g6L57j^Ttq=xM%+!~ytV2x{ zoZVI_$WmuVIgj&Rgsi?#X%1#oYfGjQ4kd$Y3K*zPhK|L>$b`FW7_B=!_VaSgkvumD(2$&T^%q}CAtMh(hT}{ZjZpTEy5LOEibS zi54;0S6+wGy#EY6>fbvZYYj!yeyB^oVF=|Ew2m{cg}8mF{bQ*QX?EKsb=*us>ih_S ztCgYZ2(1bY4(canC~xpi*B*nQQ;i8XwYP`w<4@_3&bf}*Eqd^|QR2K^1_YYVHVQJG zu>5{VADKr!B4|bZb{g)IH^<6Zm7uPG~4mm2qGF3f&AhfK=Jzn8?GKI!SdR*FyvY2 zZ6?cZ_d8d=6jJct1H!oSjlfFMu)!p^PGTK5j;ZPYRe1u*3+*7LRTGBR(2G5pPv*n- zu3YEO^9o`cX#I_3Sq?z4XbOEK{=s^enbIgBH_MbZK3rMWb!~JPx78aPB~kTWMDE&J*AA-L@{FuIUF~SmLbpfk*U>g!7jnEZbp3 ztu9ddGYk-nPse53tL2~%X$Ak53a(yQLNs&+28Vb`=l+ns=ql3rI1cDP&3#XSkemsO zCeVXf1jC7#IW&0b>zFBt-zjiHvvqqk*g5<*@T{F*uBp>h^); z)R&E1NkVVjB`XUky_DTHuW2JCA(UT`Z<^>vOw^}^in2vbo zGoDZHYs-+YA{!b&U!RvQL@nmlo~*1ytfg6t@F?$CuhUc7*bCWuo${8-KC`5S)S{pC z{G@X<47I1T4TUY4>~eL9V4pNq(D0djdfxh#l|7nMfEkS>BTTb-$cUwHI?i1w7bMBk zMQaa9Ed&sC&#CrmK|AG8-q<=w_-{gy=PuftfuOXX-Rh2PjfFIjm@1j-7cI5p+y_^+ zJwW6BPLc}3EL3X<14=MjUt#d(Y`yHSO>~ef28+ADh+yXmTCgF!6BzbSm%igz3-^D` zE2M}a^tVZ8lTurWhh?U{nEr(R6;lY0XF&qEo;8+GhDJ`t##+Z99~uKAQNe82FJMH7?MKZ0k%K0dIoN#PU^TD zV^yv+CdWq8M1PXU+RNTJ-?TQnzT$4@!$ZZPM;{)FvFN=|RY}ciLo7Y58p<6%LQ{ejT>wMg}Kdh@N<&On& z#w_-Qg6JR@2?i>8x&j@QYXrS#po7I_%&vT1Oco~(`};^Qx}Fx)F;sDWBsnEDUA4R$ z2G~;i&mt}xl~{6LWZbsLgxx=)SKRB^h_ftLlSL&aZWFQPnJBeVJh;E$GX^4B1n#9t zW{x?!1#IknyK)Fb33sMg$`1C}Ni0v}P3f9PNP&8@)^Pr3XYntn+}%vAw- z%QlrA`u4JfL0qY#x1s#|;C&=tx{CLs27KCNEwHSse6)EoF?I8-aW@xudNoY;X0IY7w{at{eRNs1?}*O` zE#xA?H&*M0&<2hDMwnPf!JLKXk_Hf4Y)lZqrpZ*!q5ZA^+n*ZF%*<$P2 zJ>3u2;(FJUuwHf3B@KyJugWp;VGbXIHk8`Ye71WMw+EHE*^9CSOl!jg3im@b2km^` z*!S>7MsYG`vaL}OBrA2jR5Ax+8MNs>DM-M6%kJ$A?NFSJ;lo7i96Ig0MY@i)e1h-m z6inI6=I6M&H5As_)5~FsJ+!BlZVoJT&9X>h4}yell%*q^8Yn%6a3F!mfVbA^N?{jv zM-~Z^yF%l326dn;frkSOEt$YPq_kZ#EHt7dg`O>EXvun{LkU;sFs;)CMQt>Cn7PBt zot(;yL@LBMOgHT=Ti&&cKUVt*zZ{NU*8}ja?|wybUrkr{^*muJ;R5&UjZ;iq5uI^> zHrji=TR2KB+rsWmSu(`-m_l>>0yW^e4*#Se^zUf=!M@*unxhceO`o6O}bQ@xE0tVAR@b-LGZ~*yI^Hv#ha_g^~qp<8>9u ze|=;U4*{cG6|e02#5D-s)I7)8V6M@~A=$GOLhMRPBT!(C)_&5GXK4W)UhCqA4_^d` zN=Am7`_#^v)_ux>%>HpMD}pMw%V@>T&X)#pD3dsr^v-r9vZt#P)=Q21tY>7MkfapU z9GDNOs~)Zi@NTiVS>*oD$m6-`-2|uhO6a();Jf)U@^@$P*a7~imzX~HMR{|B{%4io zD_pN!N<+&7-?tejQp^)Rwwu0t@S=_GgO%38%>#f7%WwL|;l*5NyN{jxN9%U)_NmjW zekWt^8fJW0f!Mm~w4Y|>E|fY9J+7hN&3>u%8T%cV^x<5)6(|!_bdv@&P*@Aku;tyh zXJIi|QoOBs1Oc;%iK(LmDdL0PJVZsF#YW~B=C&B3QgLWr)1U8i*$q?bXVT|aipm1g zsQ}_lLB1=v{?PCob-htArF3HHF4N!iT8EWWHEBwZiI=#|@~*Xi$%%nX3sNPLzCkbPyNx4vTW1 zqZ>s0b!J*f1&7@X!#jTQMZY2oaM;*wV{`cN;kR*?-1K#Ers2^6;gV%Wc3ecB${YT) z1Ut(y5>j24MJIKM1JWgU&I=U@IuSR6HYc97I<=xNoykp{wD4Dpz|Y-D*hHIe;dxaQ zTl)MJU_ass;UisgSonLeT8jLQV`n)BNmj5yv~Nc##H27!ZpIvLUeS4D#?LDF5S87c znZap{J)RWakmojJ#ZoVKuHg-7r*$zBq@lGCx3FF3}IU#h;K75+cPKAhxfQfR>EmYJagP01RdBlhy*Z^xcWoeSW$ z8W$9kiFGDqa8Msen2Z-@`xa{CG^udG2xgdCByC^%rp3?RUh0V*O92EI@GaKyb(T$XeyBbm!$mBx%e* zUOt2^r6Ix)`_81k3`r&qjM(@o)DHn3XSbksr_Ge+5azFlDa2bX=Eyo*mxI#D>A_; z?`9eRsn7ww-v${p;DFSHKV88(p&-g$qi#fNy)(e9WdK26hk9`oz-tFbV)Va4oPYzD zGe_?@lJ9JCki%TWlA1A!-s}u=&hel~4J%U0qS+$Ol_}@!+l`*De{I%FCbR9?+c~eo zW=wvCID>CF5`wE8zyosQUIxcDW&GcR7`8T$#LfP%>9w|L0$L!1LdLoRP#G$FRPvEj zH*Hdror#bg?Vp2tWMY&UmnL7@>!4F?l)WnVDo5i2l`*<^JVtOOFzsU(?Zp)Y@4><2 z@^#gAh-Ej=&TI#`aU-3yrw46wk>zcEdgT+H7y!*AQwOGw{qQm{ujJ^3X54vroj-S1C;&7i^hf6rWDs6WBV1Y0_R1Zt8E~qu%6?p- zUEMjo>=72VJirP^C(Chti!$_vtom;J?s79^l@zg$2F?qOmCSbTIS;CEDdnvzKCj6@ z_;94f=ZoV1?Okau#jxL{w5DBT*nZE*!S&n2QWPLiQU_bZDy?KmSF+L(VSrV4D%DK( z%i0a{>ejS>R)?a51(7{(^`?E_DKk_>VhxAXC*zdlCbFo4n@oSw;7@bXjoTMAV&w13 zf$bW*!UdOPS{12`Mj8xc+cXs1my0`*aA-1tJv7V2= z6j72ogUuUHN0?p0r!POf0$oWt+fP?Yta)X3GUVsw=bnQt!L)`VAdq7N86=zBjMh?Ouzj==eB;}_Mx1+o^zyBGVE+cMOCVk+;8We9fgqP z5SHCCxni)Y2_J7FW}j$MacRM|Gcb~7jSupiRr##CdD*|r<7LQf7Xgfw1J3?|$K!gt5i_le)e``-vm5Pe zBr9UGwEFDw)Cz}36$REGv(DWZ9#1NXS8HE(3|Kdg5jih`s(?_Hz*`;k4_lP{b7u~*e^YHyZB(P*g{rn(dXWq6KPozkPXS@=2V06 zqCC_*j^>4?EoRB=D~Rbx4{Zut1TmCk`&#fdaJOhhQ9@@d1b_)^_o%*Da*AmuB9ftPYPJn0S=k#6}Y^^U}@QobS-ufifm{eCVz;D zmK;hJJe(&1TFBT5SW7G#sSh##RWP{Q9}LZ>#9zE|mOj6@b#QtQMsc<{dG4*|7frx!= zyMNw=z`6{`d~;rf#a|3a;LXHVL|^gUE7W-P4A<5gwNmjCZWc(wVr zcAJvse_Itno-9)$sFY#nQ-L0Ks0pHzWNH9MR>#?n&_zC1z}FKw0!69I-km+RE!?~L zm**1HkPz^t=lrumjr|{Xn2o=6X1Vz-Yt<0yO^3QRqD2AaI+(WFFgETnqW-$*|7a$z zf&6ltA8m0=vGVA^A?fRdr`nnr%I~LWT<^&3MX|{AL-@9gU{-=?O*V!^b9a2X^!Ae) z%7JiarR6Pss&XcI`w|>!gs_lfbf@PCc$S;aC%y;Eo8SHP?(XNqcfcT%4-Y@quuxI8&V>if6v0`2gVZrc?T##zolT=)=I zu4~t~GkbKc5C(=h{|rO8T>3@*@33|z`4LWBZAKGA%t&V4EA@{kYH?OusA2Hs$V5Ks z?D$*kQcS0wgmIDZV5!M0okokeJoHg_$Ey|KdBnAU-zC%r1!UrqKUMHL>%1bsrvlV* z=nqaQ#KZVy+PTa4PnHc3!wz z_Y4Z~Rs&yqeppj+AkB^o90faHWQZ8(RPWP078?AD3E-xIp9Rr%*T?KoRelEka3_S* z!JrI7>(vrqcVYt;g)vbIOm&yTsA!XD&PYc6^5JHw6E)e#j==Buw1Uk!zGG{Zr0?`B z6rQ+2zklC#1llGB{(7bljrroy9#I-8Bb zO9Rhs9F%AAz-oHOjc*&yd79#XP<1}O870ZQ7vZphkM6w>Y%Yhp#+FlPi?0^K16cm>0ghUD4^C~sP`>#4UX2hPviZo_dd&MIh>fbN8HzWB zK79zl(u2fXZ{A#i_bpX!*cOB=^^0%Vd>clv0F~-ExgZl%cN0mhXid&v;-9>jOb<2k zatu6L#_(ye8?=q(O_&&Dd84vHjRe^D!$Hcsm-A7z`eEnOc|$+2BKEhz!Og*wor5t@ zlZTN6B}2Yc_H%d$#~0{7wRH+TnDkB`{R0H4L7ZF;=YQK#HAmPcoBxujI_-O7OYi;* zKB1$31qig?_pC&$^#{ZzyGIa^n!lzX=kBsGJJd!zii@f%Rma&*#>ziO$dA=;?i0j7 z{*qw&Uh$Z?=OUu2i0jBgTUTLWSmppjDR}ZSDaB}dLi1;wt57~jYceFsX`NO z)tvNUC0kbh4hc&ViULBbea!JW59OeqaRBHGp6XTmin51^g4WstS@gs}eYm8(fnf4Y zd2a$~<0zKk5o|<#su|@!S*B1ayKFjjO0>G@^P&FzW9hA)wHAvQYadm+wuRvpY}yHf zATyzhr&jC7DJF)5zGEP+$)PKP+Y8<6k6No!%7hv`e@C1qX0%CHLVG!mXw=C8_(mzY z+^yZ&u%M?KM~DLM2x@1ZjEsL^N-pna%hk2hYn-25no-N7H@gU|=PEJ`ux zaUSy{AT;t#zCvNKjKIxVLKhJ=!ovmZD}P8tx>jmt3SiIs*%=5fP28i2uuj5IAu_NC zUa&&7SRp%B)k2s9>}p{1hIfbe?9gH%yML+@(xbhs0OslRF=Jy9r;v^#L*op(-eTdu z#rJF62xf;*6{Qc%wR}6qr%q?8+w2bGs$frg{*M$;2)yRh?CXlKqC-TMaFecpNJu{E znR@lgC;-qQtpf$k3)1V2DcK!&2E0@B;;d|;c7$Qay~sYjrjYR-dZ;%4+NX_)is&Q` zIw5U1%sr7op5Y|L(9gu0P(da zN-Dq<@)puxx>83r&@BmHBj@65v5XT@Bo}qO76QRd_^EZI^JX`LyEc~#22~K!x!mDg zH;qThbBQNs3qZFYuNMGgMYgf7qYZl<^kd)xM8Yg~hw-h^xOS6iE?^)% zGUQRgyP_UiyjY|~hcqrTz&{RoVYwpY@68nSSEMw}_kK_-D@~Sg>@Dizi;MS&+-`DZ zcw2>NlGJkp7-_-pD}4WpByiO5No2>^=^H>8`r|bl4Gvdf;dCkW@`4dVcqgDFlI-0u z+Fa*V@Sl5GlmMh*>Cf`V_VP$m;5@+vBezPQKuAd)676|gcymNF!Z|n+g}pyB_VV6h zgkwLj9#_O?#e29T5_gC3DaS9RzQ9t-*E$W5_dgJq{t*kj>>g;3b=?%Px2f~v-XbWB-}6W9Rz)z5~2F- z3Bb8ETgsA;l@0{!eQggIUza`+;qJ@9K5YtPMc*Y+GiD<6ojb`LTtigV4z#YYwI`YP zh>j8N9*Z^i(2^S-*6t+b!au)jAX}AQ0-idPp?_DUvM5dfpBU*Zscug1?;kMLw-BN; z0=^40j0qHn%8)A?Na0i-uz3i$Z2UdOBEot>1lCI;lYxM ze5Y=I>|1J}!jW*dTI{s^v#oO%g3IG)BO9w&>eX1eXh10p?W;*nL58z~KU3nMC%n9H z0e%EvEGXuwhGiuwcqCLJ)lszIPDCPJRh}pPT2TiCwv~y!N$_X>y#E`{ zVI`KVXqbV%k1L!8#86!nLsV0ci}V%${`K7oR%@^b;RU{>N};Jha-1s#2z8u(2^upe zWOJRC7pu5(mt+w^G=(!8PP9Y~FI*_45QOjS1iELf?9*Wy3^YuH*dlE?}8eh5| z61_dT2&&gk*p&+;m_U=*Jluf-3=xDFyV)`OU9q5pB3kSH${wLWEu;2NfhQp}t?6mQ z|1~Q%{Q2eIA#r59~7DEbq!{V}B`9Pl+ z#{WF*ci}=Vm2c`VE7GbF02B;(1izYKbhjtWSx?Hk*^FMEns-wZYPIWeMk;!_!r?N%2e2a;f4umbor-Z^Kh%J&hAEgdQ&t-{ zr4B;P7=i5V`$o9^C#N(N zdIz)EJ;~i}US!@>?MQ2>u9E4W_RSsc%t}g1h;g>qTcZv)cx<3m>CN0ZIg!KgkzE-F znve^@19pK$tqO^7arnxqY9=VBiC<(rx=nK&(!Wy91mMB^wN@U+^(f(~BE#f|pbPF4 z%C!7ubGpMnnVJNLDgvrl0Dut!A;uvkbFP`7H-_J-D8JXwK{m-6i}V>7$X$g~DrrWA zqeLJC_YX_G?u_cCLnaqs{>=nOc!%tFNw7-e=4gzKdu-sfY#8*Jf21fZj$gmB_> zU+R_q0FRhoZzV2Xee+jZW{eK1zq-$iO!vdCIleKSn+tigLN42a#?iAhd^@{TKcgs~ zbf9`oi0H)Av-f`yp_IjM^43rfx=EI_e}2S$SmKb7Pu|MGQy3{(QE36!{xnJyZ7$uP z{dfg5!#HLn_TQ~#%cO2G#AOyj#E+=@ezxj6Up$Nc5P^{td{D*5%ppDRi78!ycPv3+4{tlTdl@#+6OxM#3R$gr12;Sy+G;Q z^rro_w5=s?4LYU#7QR$093sW8_)ot%XrIB@fE~zBbT|JP<-`L}de+jh!9fCpIO1Rw zH;Io>WHR1h#FgApSnkU;+l{dXU}PHLtjbx98L-inx}=LEL3Q;ZOMC+ z4${V%E^to3KwHS+B3dTXvid75>6M6C-F4)r^T=QA@i&m0eA1oV<%bnwtNc*}0~p$y zzMdC;GrT3UlxQy-I}Xm$h+?a^(>3vrXFb}`#}Ff;;Kez?$PQbLVG6R3`DDO#Wd8JH z=lHU!y%20nQ?74hqmR{GnNrG%Ity$tcYi#hp&lHJp|a7_*kleXF-Uwo#EdP>EL=NU zf)@*ABoZu~4axB$b_kj};NDIrwb68VoTMW^C_th8P}>{NhP|P4e5`1yw`Rdhilw=$ z^LJt@FYuu|E>_!-m%vDim0oE=? z;J0?-88Z>|I)}F9;eXULv}W#uoUij=B8&Nlx7?zp3U%#fo%Bbh{1W6+0Da?ON)}zo zRE0m~(#De6d=FaA7~ee=`Y@lE5p5#8{$i4(@$xG8*!@PgQ>|yX-Qx(33b^!>(5APj zX-{C#q}xPxF*r|V2N3BVWT*A@!TmbSCxeV;!*0RKM#z+a05o0a#NvhkNU@dlUwmYmX= z6^u!HkvnfVmE5QBGtUg8lPUJZ*+1x>Al*B4N8rymWt(ZqhT`$r06v6)Y zCf_7e89#%@*m4>1S^)Ntry}J!{M0O$&ig{0^w!8&%_q4-@g@Zze@b{#T0`ZY*l6d( zg&qchF5%DD`D;2~)G36-(P(mqpO?ycp&+%>WeW8z$p=E*9ZP@rWzb6BlnR${z%^!N zN58YRYvmFpkKgI-e4Y)$GOE#yu}UBEIPkPu(NqQrxh1a9rrc=<8XYa$h%J>r3FinV zuq#CXoQ4D(X?N}jZG#~+Lhx$E%3`6sbtO|(;k2C(9GaMFgL7@D>pW2g!e3EmEuQ1) zo4-LP>RXqWMIu%?m)}p^Zsi!gL+OiCMzo37@E~Z*A4<{)BPU{3>v|NL!<^mA; zwT(aT87`!m9o8FAkx(_WO(=8RwoQ6e!5m+wg2VhwT_w8kWT%~2YCq*HrJ-45Z`TP$NeYCMyMNLL|NOEhPU&StE?;@(%NVm`Lu5spQ3D<NL6!4C+FNu7ui0B>_piApE^2H~VKeNO@gZ_)VV{DE^!LIKqSB{=zur0up)a zKb+N=5jN&RO1`QBP)+QgIFz~w^=adLUOBlnPTln%jY+frYUl*>El-h1Qb=EFrj=ag z%QHe=BNUw+h`PM$jFwmTYs1j;4aLb&jr<>A;RTOImx{B(r>So#rlzg#Chdm#HqfqO z2mJDLo6_3}*_A(Dg<)_|S*<2Em>+j9G;VMJYj;$WOWNBb7(^g_cjnincyh{%v2M73 zhXkr87_9xKG81r(m)8gNlK|Qs)8ykpg(j-SG*@fpa9aorg~e+D6HW(WY2Mu+jFQ=> zFbibZpX8tTOe2atVvmiZA#AP-zsquw6HKa=lDdq z<`?JtX&z;WZsBO^oZI-PRs4YBK%^lcbK8VB>~6tGth*Oz@_!uZk9K`TVYUT)45QEk zN7QSN9A1}Rq2e8O-&8#&_%#GIOeuOS9Htsn-gu16y0<3O^>zJWR=w=ZbMrokdsD)_ z>Q>S&OiKg(L4xF(siOCt!RwUC)0n0rH2F$+!<@k~tW6CRWgA(^0wc_c3dnfR+LU-YX-PVS4QJ!0|Ao2TjaL-JFA@s& zhgOA?@VLg3?RA5M(5BsM>O?b6vAY3yhZJoch2j2kD6AIq5BXWKrSQ4it9pBX%>`E; z>g5yuZD3K_4RHDUaiJ67ZSpkva(4H`$o5^>inaV?p}z#vu-^dpWiw&)5%vV%`1jYT zRicc5w%}hAx-0a`+AP2Fq>;gdd<+U+HfR+=e3{QQxWxVddz+qjsN_EE-j7@6)nqi97hdEuYVGCt46m~1vv`z+oz;pHTk-g=*0h389i z-~GbVo+6s@+sWn5L^KDTR|g2WRG$>mG3sB7sF6_|{8evarV2t#Hv`U}F0=+Ihb1-g z4wl(*mlQrlx>BYMY4cWb(cwY*elDFbGx<#wtsUArhKE~aE*tF^_Y(_m01|c)^)kw$ ztjC%NS<^%+nR8W#F)DtgIe_!POJ}`FZds_x%xO&r8s=^BpdU2MC>Kn3Q>wOO~57r8XkM25VnN8{M%QRldXF9-Chj0b03Wr!TXp;WC?n>)iJ z|JFr;`yP7eTh2Np+_!n$9jA;vLX6+GJnAml?FFDOM${P;>KaNw2H#Hr^*-m82}gAE z%ndo4a^6slQTfYaBAeE-V_P0fQHZPTO$Uyyyf6sMMmGpqcm2JZz|n8OUdr?p`T&%_ zAvxeC?nxog?CTcEb&`}L(6PTUOUW?H25E|Mt5Yf0THO^WlG{<0)*omM3o#X^xipW_ z1IJ4H+5gJQ9p#-;psf~-C?7E^(cKQ4I0Ax``bEO_{4Bl&-SAjGA4>;AeQ*Gqml}Qq zJyT%GFUPjq_?^aoSg{6<(fMpP>5eR!ybyjrZ}SKKTGR0Jx+yWCEWtI6&`GhY>cvp{ zxjQx&PnOeQpY){h6G&nzRNdVq0-RVXfZg~lyJDd%BHJfh`cTnw)o(D`TitUg4w#UL zC!dsC$RZ14;SD7CW}f>MjWQ(KFkvpz6=(NHL<%spz)OE`Y%r%6wfqi(r-> zgFgMtWNzE8Jp*vVa-1b*ouUdIdsF4*mV)yT7bh?~k9SVVXwsu%fL;&S9IHkGQ9 z>%?3qhR()g2)?Qx(Xz-*4U~=QP;c*|P|~y>!bzc6j_=~9_dx}*E5R#om_v(wrcC1=h-^Zo);TLh%WGE!Gnv|!Zmg(lDijWd;8||0p zPXsc^RPeMjDHWFxVoQ6{oA*Uhg4Cbizdbf0F5I$BPX`HOX?>WpLSZ1oY4<<$>{$9l zLMwTb%-^0P?uHaLSP+|LpfvWo3|?F$c8M?r^eFd>keZbmV@i-#xs|z4MMU-Wb|h~p zMtf|)5Ngini~I7N4VXdze*8j2)A%D>$8OS#jGNsQD|wrW|2XhZGB9_jz=u;HP7*{X zaJ7+O7;0~+Nyy9-QN>%m}rWL*-p8`DpE+jWn*HB7}^-L)(N>K zQv0wRP}fRLGDE@(jX$!2a3gm98rZ|VOb0elDXtmpr5x#OO9>p2(h$oR;tWxzesUYx zl6HbqZk)^WS*Xfb4ty6#scf07e7#5der%GJvGFh4r=yXGzn&F-8p?p5X2X>+Va*}z zInjiD9L?^Z+3YEzns=8ffX-e)nT80shNqNygdBQ)?uVkZ8c{RRS5SQy$IxOp3HAsF zvMgJh5SwOlLlBU8cuhcsTn|gr=g=QAslDZB;;p{?t5u-oB&7IGwtw>$vwg?WdaA3a zWL8g3h$L`Aj+TcdOPuqo`ab#oV8-tD#h&|`Ze7vpA$lYiS$77(zH`6i73$9Xb+??L zVwNomfW&+AWZbK6o5@w+5KFrmNYrX|+6Hy!C^t^W9UzpzUL-QT2&y_YjnY3MK#Y94 z+3I8SkZBAqQEaf{fE$#V(gFHPi&kOX1P_`7+aLno*nI~G5{Iv0&8TfmhFexjw!$@- zZh#^YZ%lluGjbYAoCuEiIwZ|lwM5{;ujdEC)aB9RN*QGN$clIlUnnAKy)exmK?7{c z4xtHmKW%4Lx^)ft{yJuE_`_!A(+Jm=jnuM!u4KSks4W1{CsbrB|Zy#zV&_T6-V zxDP>j@d}qY$06Z1cYx5>J8p|Vd1g}l8%h9Xq&JbZo8-_pz>8e&r;iZGlzCg+m>=Fh z*J5G)ibxnOj4wY5{8uJTudr~LPoQaNRZbLMT9Yo5lFRT=CEj^I;0k8@i#N}Lh%&Ey zfEhcTkD%aiV$%EYD@7HM#H9B)1^<)s_!}3}`oODCF|cUF-;Vt`XjzITb%w$U>ol^>MlsSTM}4Hy zyH4s0S(u?ha5a+vSLoBE2#qG(=72rH@N1Yas5*geI>kPtlg@POSuFZRyVKrm#I1Kf z$&{2gBsPCxI=38@e=Ef{(S{3jWbtwGb;fP%W(T7>Flj8^gN!%%zPNymo{Uv;$c^Qy zwNNOyZbgnxohR;1m8MOJ(|U7qhKpn8!gcPSY+=AKxT2kRxsHTd_+ikk{xX=?tM*-S3PcJL?^FC#3BjGqaUfEd`hh!%R`;y4m~GS+QFoGgtlg3akCr-M8F|Rr z92BQV`-VS&fnG|(y{B5y07S#iVLg}}4P=E~GeIb< zkn|6mY>9ph6;uM$e`tLAqR%Z0eUFYZL8(`_GVsS9 z0y30K%ThdJ6sXr)K$xL+KQX1(lnl9z*-B)7c1FEN?wKjdDTA-_KqFg6>{I}^3u3N| zcAQJPUvRZds&d48*QyFy8VDL)cp?x4M+ej%?=+f!3xI1Ke81kFm`JfVrxn4j($Hij zM(DcGb@C9R5#2bkWx($3_^^qjE<8Fj*2tj2UNa3{tgo{MU%XYN5PJka+uKM^0xu4z zA&b;^M^rBxyw8%?Z4+=fnSv&pX zhb3XJ>Ks8ys)W$xnQ!(Qb5rrdzgRL%q2#;aJJDv5w75$?-NPss;SwVl2e@KPz~)i?DbqM< z;Xa~>H!C}<`V+rsII)ym3ZWOtlp;JhAL3*?wBWOq_%AYT>E$d@wz3uu>$Yiz^_ z9F~xuTy?b`!RT@%2F_BY08C7R&68`PV{k>Wn6SN}RN|=x(lyMmcJ671HZ6VSx+X~R z)RK!OY`Sh#YR1z_1>%j#&E0}i8f#9h1P}!4Lv;w{5~N!_t4k3-pnpuQr(+E4M5Sa! z)#RMES<>wfp1#S8B#Lj2Ra-j1-M-bNGNlOSmv?PA%On~f)OoX1%D5{ME@)>AO&7^T zR5jv_FJP{QxA&rw9`bSCOJQ#Xj!(w-K9=rWm-u`Uc8*=(pjP~5fo~9uC<&0Oe}JX& zN}vQiqZ)G_Eb`d`eegGPOR!SB2rVqyMdS|PEO*@l*Tr?-~p281m zp=s(lg;V99I4|TAghUP4q2W*IIP16ntx2X25oKL1%xv>ZJUU@+bb8+3WwaV(r70;X zUGQ1xv4U7AfGrmPdATUrlUn(FpL2n(MAYgm{*l$8i0U#xrHmmuiyV==iRNB#fW5#A zBpF=qZ^B+eImA@b@yUfL4L`Z}*F6DNrk9o)T2NjEC|qgGV$LOSfOSdH6ASD}waDQK zfqbTCiJf`us`NN|@jatHRaI&cbq=&LHDZL%7tL!0p=w6AaG$SaC~53C5eQX6t`}zl ztF&w^F^s4AwwG8Ao_yl;s`4?zLkB`y4=dJqy~A1fDjDbR(?7u^*UCN@a9Po%B`yz% zH#RN1LJzKaZqZrXX?XO(RZaoeQfxtIR<-@SsNuV>&JJ`DMpx>RTa?Vl?&U{Bfv0fd zFIz||ZT2={U*gVY!hGn86YdxT4OLf{HBc74F}iFZSFOl^5_ppqYR*u^`C-&GA^DMN zGV3YvD>1V??b=)iMB}4AKrq;K2K@Pu)#|_ZpuU_f0UX;qfET|IEs{VqaG>|M;@kdT z`)(GcCqCFcE9&%`+DY^OYdpZm z7p%DD8Acr*GXsfwoo;~(9jaQz7U_U^c@)B@WF~vXq}MfUziV?RAK(|B@@2U|bibjE zq_Z|au*X+)Oz;pZb(aGtbhzs;YFo8?u>^jaOwdRpdPD=OJk>w*^!MVOu=p@3MR5ll z{c;iq>C6j1caPUc5JrRLB3!q|Lva2NwX$V&!yAGYYA--EEd%qk*>n%0A}(h%g<}92pkS@CHHeP2-x22J77LW|3yB=Jgg{c* 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 G!qM1Mzzwbd literal 0 HcmV?d00001 diff --git a/MikroGig/20260604/20260604222029-Config.rsc b/MikroGig/20260604/20260604222029-Config.rsc new file mode 100644 index 0000000..7a73667 --- /dev/null +++ b/MikroGig/20260604/20260604222029-Config.rsc @@ -0,0 +1,2667 @@ +# 2026-06-04 22:20:30 by RouterOS 7.21.4 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-LAN +/interface wireless +# managed by CAPsMAN +# channel: 2442/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados wps-mode=disabled +# managed by CAPsMAN +# channel: 5240/20-eeeC/ac/P(20dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] country=belarus disabled=no mode=ap-bridge \ + ssid=vados5g wps-mode=disabled +/interface list +add name=WAN +add name=LAN +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/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 +/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 +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface list member +add interface=ether1 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 +/ip dns +set servers=10.30.30.81 +/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 disabled=no dst-address=0.0.0.0/0 gateway=10.30.30.81 +/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 +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Moscow +/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 package update +set channel=long-term +/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 +/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/670/7de640a1\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 01.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" +/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/20260604/20260604222029-Diff-Config.rsc b/MikroGig/history/20260604/20260604222029-Diff-Config.rsc new file mode 100644 index 0000000..f784b9a --- /dev/null +++ b/MikroGig/history/20260604/20260604222029-Diff-Config.rsc @@ -0,0 +1,4 @@ +14c14 +< # channel: 5240/20-eeeC/ac/P(20dBm), SSID: vados5g, local forwarding +--- +> # channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding -- 2.52.0