From a7b219b41537b11cb2c0a43ac88e532c8acc5411 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 3 May 2026 18:40:18 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 03 18:40:18. --- .../20260503/20260503184001-Binary.backup | Bin 0 -> 222550 bytes .../20260503/20260503184001-Config.rsc | 4091 +++++++++++++++++ .../20260503/20260503184001-Diff-Config.rsc | 20 + 3 files changed, 4111 insertions(+) create mode 100644 MikroMaster/20260503/20260503184001-Binary.backup create mode 100644 MikroMaster/20260503/20260503184001-Config.rsc create mode 100644 MikroMaster/history/20260503/20260503184001-Diff-Config.rsc diff --git a/MikroMaster/20260503/20260503184001-Binary.backup b/MikroMaster/20260503/20260503184001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..daab81595a0a7c64bc5fac0a85238753af660458 GIT binary patch literal 222550 zcmV+aKLEh*sF8D4Wdi_XftZvSI4yz@ey-Y0MZdfN000O80004Z`T(2&Lm%iEil9XB zZ2q?}BZWTbD$C)JQ^SLBAi?fI+$Rx&HvSlt!@ZN^E4s&Yw#P0|bU($X4!i|)TugnP ziKlqi;Q-`rZVCEdrRze%dD~lfx&+FAaarKU>({3Bv zyT!PH%n$ztpx&gR{JTMGC-2U$d8NJ5iBSJJbufgG0*yzUbwjRGLG7~mce+?V{)u>3 z$RDlPmtJO6XOdykkoksYIZu25HI8Z6`YaGt{H#`wMo=BV5O@I zxklbQDMdzwRD}Rg%N zMarP1?Iwd;&;p<2jyd*(8BEtWJ8kvU4T!W$d3}?LiN-n_Rb#?4Gb{Vbc((GE41ORr zSMXFY=8W?)Tu#42EV0CmNoY_=0RDOJo*$Sg;oiq@-|sQ8{yIjSxX44=+D8N%t6gV6 zzJr?92ft+HSXgV7+Tm1dSbko-^%q?q9WHjNWJH{kqJWyK{9#W`ws8}V=K@A%ISj0& zJ42X8rVqu}gwo4gVMj zQ}ZBdHId4?sVydl=)S%Oy#6O(4%++_&35||)IC`Tg-^#A5(6JM`a!}3JS=-7?{mpC z@P1l)>4+LoJa837uRbZOCXfD-_+`ElGgGnZh|Y;L_;#2ZcdIUF z0abxmdAYcrn~c?fN2M}y$wkPgP^wLuroBpe7T@)2X9qrq-(M-sDEntYtryAAunxc(_nAKX@KVcx zlqzB5c!P9d3r^;d(5Z4IFd*SAd9~5#w4(z&F1n%U4Y5Jvcj!+F>z?|vzw|`@AoCdA$yw|T`(f@(lqkPaKC0@r_dqa&5rOfn@<7h%W z@fF&JDuZ5X1@2Jz39=O7bOWk&q*=*DNBhbVhKpviRHfX#TExHqH-$(?3CSWhLLLBcE4v6?WFsF`DdD9b7!Dq{G8wuAD=HGRFlc8wCo?U@HdxH ze&|RYDXJ3B4rWA~+7(OnoSi1hywT;-AQ2tjYYc(W880D^;Z#X^ z(U@VohP=-0AQjN{v3+m+0kUD_<(VEP3OT)IYj2k0~kb{+`3PT4#u+VCnsACMl$dZ;Y z4UAl_#8jbvu;&AN*qAp7AK_--4?}-f=RNqbO)pbowkBzru`BQ@Aqr*pW2`=7h*4&t zSA{ZWjb8mjolik|J#=C@GjQzK{X87-$sLpjRy%TJ*2dVv(2->;XHDcsy%zHEJ*z(f zvah=AW(E%(*|0WI1xtT|zi+8W{Ksje<1N4?N4R<8rkwA)alF2!qu@iK=M+%&`CNDA zRN79Z2*O2F<)92(Dbld0=-CE<y>Ty#I*BAiPCFeJoO~$NQ%%_xI*9sm%WmQ+?t>lvIjj^6vA zv9nZGvwY8<43t##p{aNM6@U1lGhfI+?!7FS4T}0{%7v0c!f!!CG4-1QYN-674@uT0 zuTBjS`t+&|-oXOnw>z*%PlZPM_D&dxJP0c1Z8V+ce&YX4RL2jbr%vD& z0d3;{`)O;_5PQN>x4t4wgdspRS{aKx$=Rn?5G<1ZFkMB8tnVXi6`Nk*KDyghdJGbh z9M~*w1z&P(06gg89a036!8bxPxFzv`+2*+NT&j5j@FkT_PA%~)(x$XEV$hzReWZym z!&B)T4WnUo1pjcz?8W(&Eb1GdU_6UgQM9gx@Fqa0JOFAfFWj<-NEK0j$Xygv2YPk4 zm7?%=1{DJ384mHLjep~xqC{X;pww!8&%SAsg#xbMotUIl93E2N$!((~Fw5fgyXz$F zf`1LVGljaVZPF0z=mPKZ#((3M<>l66siMA$Qzl8JQ& zfsIzGv3(T+)!Q9{Vq_IMV3E>(2cS))uNo%dBT(eR5qya`X1HOL6*>zD66mNPEM_Ld z<#F?94xpP6{H%$WkMCNJEKOaC5ZLT2uoR0jO-gnk=U=Pufelb_{RP^VV@6T1=R?ub z*YsHtja)C)2LgoJQl?>>WHxpsilX6VQJ5ODXRavenDdg2e)bNZT}^^~*oA^;O!X`| z9NTXKKUGT`LeaLk1C=v_m6n8S=Q^b(b<&p@=YS12aP@9s#yUBE_v=`uW}0Zv02~Wo z-1HMlPPb7Qi7dIueh8csT%cp_gR6qZ8G0)2ePQh3eSumm7Yg3!9D2^mLQEK>AL~V3 zblKM)%C0e{b5}wO%i{WTf5|>NH>T+?N{cnz|0EU~=pfC~05mJEqyx!MToV^%o~OI+e)CwC}pzQt%{-rK4kNo+=$BuK8D@j^6WUTQ&fF0R6`{O z<}y6-TCarU8BmCbf0qeNw5kj5SRx}vIFmOh4uVN4$^otn-2WJY`tT;I2L6-KGzNzQfHqjtJmVhip$M<@BsMs5YnjRo1m3Go5|CE1nm@yv=^J zSRp`441_}pu1^_7ZdD(yErC(FxlyosRueu1<{#lmkqJoL@5?5Dpcz0%X-wzWES%Y1 z4721!NN5`J=J!j=HRl5Ls@k%Gv4Wg=a#5;y5==b_sj@XMhCi@mb4u~VPcgD?P4k-l z^5hIRO$8XoS+()Z4%l;V@Fx|Ej~=lVBX2`MLDnK1oy;+u-{HI!)4`&0pjz-8N?ah ztOLhtLNX=5rU;w8|6--2sSvCAFDxt4`CJ^O&A(x>4rP1pM3120lLjpPbL7$s7d16r zOb(DxQ>Fpq`PI9e8r~@`FT9797_&Tv5iHX96_T{0cauLYoY^gmx0JEtn{LTCl8lB& zuLMltPBK4r!9*QPhqcWt-1{awoS6|Fz3N0uwioU z-FB$$W+{FDi1Rc68COhOq#ay&h-`1A0g~upH-Pd{!|+|=Y>yXDPHSJaXx=DUy}_9^ zx22odUbWs)_vcw7kmRDMmKT0~$6DqNVe1#%yOA>&NJbJv0lkW^4F3coh26|Rgbd$@ z?a0*a{97@{%Sg6q@M@}wr<_%|RCuc@KF;R+`Z0MiTi7{7QG-Sk(YL*vHLQ0bP^y6y z_2ktdU$id4McGHN&+;`kHO!4YT0J!`_wj^xMz>(buQ|36-r#hw@g5Xp-LF%ARui3hTEbNIF{qN8% zqbVJ6BTXto>tyCW#73BsLMIb$k)_bb)YodmBx%Q$_1|cLif(OoPuhA^L06=53)nTXzcZI?LW#M|@ZdJh?!mQJ z&F#W++?@i*IdS))rC$do*Ag2lRT-Gf%>jZF5i@>7RO?8GP~+@kR>>^wwRx2q5dpU`TF5SO^Bx710M~lD9rMdOIXL${PZB{-^9;;Qhq#a4 z)SA4)TcgsI8_naG`u|`CdEN%KYADu$_3Al0U{=u(-X#pB(z9GO@*K41^&roF{YDoU za?f#ikf4F*wvc8@Nhi1C9nLU$&`eKERk&Vj7=dk>2Yhal-SP;P-%Ht|r>cdPhIz+< z93C@oAm2@zcH9D{ksCb0C{30*c%R%eL8`NfHbcz8pDdKI#Ylgi0k&?= z2QvU0nunj^@_y$YW+SXFb)0NvAI0&g4Y?5x^!CZ~2Z=YZ2h}PaPu^tnB+2UB&~`I& z_pdUyPh^4@(;C7n_BLELoNl%TVeNj{*=w5U?v}(^+B6N}P&BD_OV)K5MdP1WSZFg! zdgkwOUcDD1#rpAx5G5Io!)0&=*sFNEA=p;J6V56D2}~T|-&MJ&Z;{O#9bmA!(czh7 z1MCC=(F!hTq2VjY^D9U%OOI5K^b%xcT!(3st#cKmY|i`Ez6^*?hDU`SFz>kJD0%z1 zKpFD0M*#h+l;QgFcbdx}+nnI@aO|D9g_c$E$hP=W6>#Rns5?K2d-0Rr8(%F^4XEC% z@NNtPI7|$MSQ;n<7KURgkBQ9KxKbizZ<*0?xYMV!I#O)k$fZ?$>BZcx<0G`jvvVlt zA9~E|UH@2CQ0Q zDcW+P*U&6;a5gOqtHrz{6P*4Pth5kH>B)xuRzriy=;cU2d`&4j(h}0#qj&nkvT&g9 z?4C$)Xhzg~F6L|u8S9oc_t|qTAUXA#OL8o-RSk<35n!`eMX|qjq<7Z<{@JduULXLe zva(_46?uxa1sV>&-?D~bUa*J-7ncV^wt=hYxp#9_9lY@!iEF>5=jw&rs)0|Ad#UTq zsWY&Gm z$I39SD{jUg)L0HfPJ!=k({E|FZ(Wk^nRxZ2Jc4kGa{_)tHv|>Ce5v%GOhy;M46NM{c#L`1W?{=V6;6bQCH=;nIG71yr7M@tmZk(*UFhI0iAg;V#0Ox-+@g{W2l%Mm`SSl# z%)h4mcsXEC0*oo;RxJCgwMmJ z+38U(xZ6=MZ=QT3+ebIIQkUwe_g_Z zJseMHG!vgs)=&mJQ^S_z?x43vWgU5zMTh?p@S&l0P^~e#PIPGIr=*4HqFy7!8?xEN z-Mhk7Gl=n$?KfLO_?&Q(5{J|-O%yavg^rK~QXP^Rco@laRV(6x?p-P7(!_k^EnN6F zc1}F@P%6=`B580)ri#Vwna5Me_hn)-xdfgAaR2<2%m~$MAkWXOmau#n*7HUj# z;@TAhC-%Q4g*Ph<63&7INY(7jgCoBD$)D4h%JA{hocx&w6nX1}R)3=#gQwy!C;eLZ zzuEiDj(Jm{DFf@jP*AK#q+J`G583E|`*pu+@xI7@i;*|cF^A`Mh8 zKC;A88m9NK#}Z;1ak4J-Wd@};(jt%`)ZnuK4Tz+gL)Lj~$KV0Sl_>d>MqYXZMVUS^ zL8_#DWcN>2o+}I7*FlHcfez{2?u5VR$gOHNmHzt(h3VNw#&eO0e~qjijel4>JL}FJ z+T^&n7>d5Dh~2e=v_cHKDs^A1zJ_J;HSo(tMf(1lQT`UMqXGaTFb?b?BSANl2{UXJ z2)p2TW#^I3tGVtZD}MK75dWBiT={tvdSF#XR`r$kJfoYjMQb5*699cn)~7~;7tcy(P}15 zX0$khfB?9%u9iWclsSLam0EZhX1pRf;V^>APZu6zoj!cE$lH!^gWiiASuP*t&S3w~ zRIFj4Grjft!2JUIPky1$j#i)o39{c1r7HWvu-`^Wy%Bgy59dtc`%WF|hWqPMtfV3r z7fwcl^!0Q~fwVrTv1ceneV~H@vovsU@mlUPea3(b4a;>p#!=404kTI$Ou&9L<9+NZ zOnNeu2)<12H$AI%tlZL#dl(0?wA}6vj>=4F8Vn^^_@Z~XH{jz*DGYdPh%z?8=TMJY zf@aey71B!LXCHp%P&xs|$!|AoQqAl7vA+{kva-aR7KH`?Q#IiKV&1#GOJsgD@3k+{ z{#k{4WR0S14GSICes!sWmh3HHAhBoGW&I*aj#rS=eC3pfs{`HT=^EN~AKyATQ(bRZ zapWaNj<6BfB2RqD%T@TVR@w^NqjCBQN&K}^qO4NI=RUQ+AXw(xi;R6GT5KjD?U1d`8qA0zMWQArhSTypV3MHpyrWxHs z%`Te#TXnq{1|}q-@5;|1{p9#1NM}|SAnH|l5urdZ4If*Yc zJ-$KlrCtGWddzk<|5h3*JdFn0e^t#dORy-zsDM~3gBi=UOp1;Fv#NwqLc(8GmTAU9;r$)4;6((U9_rpu|1_iBAcn09M%|& zR19S6y*&n3tfMiO53RqrNWb-mowC1JQO{&$Q_cu+;9BPZO|Qrsf==O`O1DZA^^!JZ3c5yFgvB zS9}xfJ;(_h8L+{l){3jB-?cUSG%>H3g7_nTT?L{0%v8^mju?kx)=-Oxl4eX^_W54A zI$z-CQm^3m^*QwSymmH!VwbfrdXo4bvC`{fe@=XG>io>?doi2kh>Ns5=G$X%iPH!E zdl!;g_N?!^{wVz5R=e0(>w%bpJ~peMmqM5!w$v4gwtZJc79D?>C;*Y6!*aA^Spxnp zw2cJ-n~o?yIt-fPX{x9#8Wo;0=dY1KR8Ux@8GtE+tY~{+C%uUtlEFdi;u-A&JoOCv`{Zy(=IM*=#Nuc3cxdkKQX4S3$;o;U)nLgFoX}!um<>ooO zEq*m=@BwF6%nki99v=?f!R#%CU2b>Y{v_#VcC@o72=e2Rj!ui(k7-4N8$_$aAqzIt zwiPfn=QYFzEwr9#ohPnF>B5ola5I?^T?{0N9!;udWqa6>gO*$+MY2D!Kap63WWI^7 zfPZdANj=W4-lM+M9g=RlZ>^%Vx+xIe{N6PW`;CH=4XnG+qGxaO$U1aE@;rH zK2}v)6|qWlgIEMDD5c!x)x?17K}Qe6Mp;rd#(oYP6Ob6L-mmy1?WK0e$g^pwUG7>4 zxi@ZWhRZ&w6Q#n(;c@I+-M0Y(SRyxf$*K9){&kEYk;uyF_=oKoZq-}E`ne1?188Nt zZC%<4`m$w7)9%FdLxUbS%`d23mrB z<1h>=)Cz?Iqz;L5kmloU<^F;zD$tRVqg(pjEcrtbAxNp8$NW;imF|upo2knXA}(dl zNORtZ9yDCz%G4aJqw#=Xq&6R3?!ED8v^3%+!x(lrxW`uQY=F4MnMtXm5B!mY3{_W_ zpN9P!^||CYJ}nJYNCZn8*L_7HOm9)z4M9IY>WB8Kjtj0Wrn|%cG;I(I!&LLv%Y?vq z!5~z6b+@^2QnoJgL$=0`Tw_L}0B@$WWq|!tMOpcmUG$q;@@ z?-}Q5f}n~H@m7w9$#M$s>%i4HPf1&9ka@RG4EZ-s`ySUGHfP-`@($);^AXE2)s)Tc z_l6sLNUd5dZeQ;Pb%NTQ>@6`eFY>XViQGFCd7(aH@mN~p#mgSwGy>_4<%fyP_;a^G z%Uo1B<^_314+UcMq^rwh5h6V&ewg*0%DWcU1E!;~ruoy9>P_!!OP4|ouwTD25kVqd zwyK;5rE~in=|s82FT7_lL#B;FE=FaEe=Rb|)Op0sUd82N0Lu4RY(4k+7l9Bjc>u_w z4%IZdj}vmCGun6~2h-A%BcYM-w31ItJ0RdZS!Ak9Sgh`VAn_UY4^}KiyGZ>~5cj&! z;Af2IW*%gp_q?udObz$j;xc@MC z1S#zX$m&M|?)o_+1Z6g-hE;Wq3@}i!@Bc090-+pX%>T*B`0w-+JBB)+dl+64UM8_` zWsn63pi%F~n*b-^91zzUJGgPwu2Z+|*Xj+AkC)BpCcqgZ12*GE5XbW&RWPXBFD>SU zw3H4ln-2ir2c|<_t&u+PSlRvQ5tf=Qi<&x-qYRu98pNM>kvaD_Nk&zR{pig zl-x#LfPCq2~LVF!WW0I1Kp%$@cV|@OHMEO z;Y2^auG|KI+V-liO&o-n>4l&d)*k#dE`60Qfco2F7CLw$iGJW>J*rSKJ!N;+%MQB3 zCSA?r{UF1Gipw{Ez&fwVa9)u%cQkccu0xv(eI$i>(jv9hiU~ zVJm#{r1dnFHED|u%L`R3A-w+{+AJ6uVL*`$js&t$b;LnM+|5u;D`xQP%?M5UQ$j_n)@${nX6TKx=EL;e7#&&D@w zEX|4d_e#6-5;Av{2qWZ7-$hV7ddj@#h}euc84a5 zr%G7!2lh5$RDz=1B_J|Z%2KEJHk^cfgy})R#=y2w8^ThGUh50>lQh6jQpbxmNjWj^ zd(#Vs{oE4GNP3_+^f;#Y%SEVy9yyZmq4;B^+3N7bogL#Tv4ei3nHuI^NTmtL6hTG> zJrsr3D|Iu}f5R;vJwmQpl;kgX2<5n|xt=9D*mpm6{Ee|d@I4uV7WqXzec8!N zyV7)3g@#JVt~FM=`O$D`WAUkcopg9tvti~6XKydWbD7bGa_OE5HUOrn)cqtnO!FR~5 z-7oYyd}U0S4?;tkmDZIboNGj zui{(h80OsI-I8R?;&6wE`Iy^4O$8^g#+#vrftSa};n zhmGD6K+_s%*FiKoggP2M)Nji<%q`_#C#{j{T_*0Y@5yfy0yP2ZxS|>jHWmrkdPyva znJ}H7Z8L6RL}~yyU-}@~lq>ZA%F>gXs9smbSe`sKM`t>n3>I3I;{1W2M>vR25b)NQ zw^a3=K~Y%GMd&#ZvS$OyU&;V*B{UVO6wi#S(YsRu8R%V!Sd!VC11vkZEHHW48W$^X z$)FsC0DGoHfL`myoz~08+H{fnJ8LwZ*-jI+dQRntD&z54bN^y=)%8neth@jW0c>lI zc1@8GZ)=fH!n#)#88W2^gn{#|{)v4s5(nHAeLa=JFTHwE>u{cb)&J#R`1@&3QBoCn z2XrGQ!N`QdTA*h1JwDNVk*y^TQJ|TtXi)8s?Bd_Y)lyW(AZyPyAFq>)zwFWx7YOlg zk~CT>JBR@YH<+J*o-SB^te-pMVSpXNr!r(qtZ0rRpb&H+nvJq?B0L9ur7{ZiJDAlX z#AWOED$@VQI6TR%xFB&)?)Wg`#k?-Uu)Tkljh}(pR31ufB?yiaZ?=eNAM>JNAgUxsgR8@7Nhp2CB0O2p^ zJPc$`hG6JzyGZh+Cn4oF?!4e;>}Ss#@4e4H-YhB$yiuMwM4`6QdPTGLGp_o7&xqyB zY}R|&zASCjj^iTL>@SKlu<6O(O@wgPlM)dyf{?S5^v(uy4$aEM_E-q6cL(c0!f>rj zQQtYg?vE!?9*t54h`B-W=NN`TSEP1qlL+ak-VMgmn})6-aL(dBTpISAfWq{(q{#)5 zsh*X6AE%;4Uw6G4&-jiD!Zs0`=r)qTIto`nYEiPx>)J7M$BqF6nVz*v-%L2>_HLEI4%{JT2&DR&^Ld9{}+T zi&+URw4664%)|tUXZ!^Bq|aX3vj~dkS}7o8&!xx~f~afWR1gO)3)$w(?F)BhZB!Vc1wwMNZD;jn=iMsNT0(ApuRCNoAYlV~C1@(yeOjOO#Zf56rjFzB*I zZYq}nKp7_f@YJ7LAHn|CsX0_@lBuZhjJ~VsXfJr{QBOoc6aV6wTdB>nWXk2wHlA7f zFH#$lC1A8dK!D_UMZ<19e?RYgDAZ7Qhxy#JWRyn&%E2v7zu@%^(j;a-W!YyoC_#fx}_cWNqKYg{A zyA)M0lecwRDugmWipbU*yK~aO`!vD%4Mg~)kuvfc3@qaDk##tuh+jPhhfhQ3p-wT3 zv|JL+B!m?A!N6Op@72BD78Z!A(B*L-$)FlR)=?0^{UY#HAK*m>p}n@C75pPnvbp%z zT*IkR*eFBV;uPR_9E{v>bh{JtiLV5Wvy>T0CQt$gyTg9m?DS3*gUSL!A9}EzA}Y;u zvBvWN!28o&olYaM#co@yeL9X@ksT?m{x^Y^*eO&^j7+{AT1iN+IuPFyk|M}br`+5THXv_k$7n_;Zsq-s;ap)DD6NvlDacAm0b}=|Ci3EC>OQCNjckb?Vjw|pp0BuDz`FXf)j*_WGAL_n$ z@jw|sFE8DcWiUwqWL0R^P?k*vne}rRhWhbA!%8ysBW4H15n+LWB*Efe+9nb8XeBzK zd#&*iTfiWPoU zZh^-?ds`Kk6$qHdKSd3NBDs=@)?|C59-vl~{)?M!ZtGBEJN3|wbab@!qTrAZ^Z-dh zlLmU7RQcwV=I{_F$Q$M4HP%BO1l+^Lo34Y9dEw0O! zBwRb?QZr60YcNq*C;M*0TQU*}x{4$Y!k@~ioVKdQG->p{fwgAae+Y|`lED9x6Ta;G zKdYS=%=?z=ezVSZCTf2sdcu>lvQLYmF~o9c+xjV6>5~_M!D&K#NKk=SmUV{)Q$c4KD0PVLA`Ip zwoSZ@MhTubS}F+|-t*CGE4b%zqEq_lT+h7!5DPu8hCIYIApVK5!}v)_wJ0xELg8W- zYD%=-NybDYk@l*^vQL&*i6;H09}+;Y zPXQEvq|WB?+quYY)TFRk14}ONlTd^Era~=DRsb1#&RqCwUGr%Q%|zg46-f2zg(MOt&&;bImn@Pgp_ zzv`|PvC`w0`c;L3u7Il+R;wGdMxVg3JOZQKo1mH*54guN|A_@RH& z*R(NGhE!1m&P*vkri1yRk-nfT0|@pKeM0B5@Et80@83|bbw#gJd|he)!>C%r1pZR% zAq=xEs8eAmd(U^RIO>R4*fp^u)(96yW+4PThL(}>4Dx~(`U5+3@sUwPF4Yeo);=Pv z&@TpD3fp+;CJDlGtAjAe%g&_(Jm4qTF_>c)?kn*2zk zEHuka9<6vGXmF(ITX=z#CcS-Ip)IOjnRVW&6zHnuYsaYeXVK7B6Nlh1kdg53qpUjV zP|tshkzkqZiQ|9;2P*fo64Vb2@gN~Q z-i}{GqoUT2hz^s4VJ_CS{&ByL-Tot>DEzObyC7X`%h;3V}h&=ts zvD}iviW7JkaW1Xa7lH8qgBf;^Y!|Tv<3b4Zv{l38NXrwV4_?`A^bc8a}tJHr-NzsDg{G=31QV z>_TyB(9|0=Lt65$S`0Jv7Qm3k(FPT$+X|5>wZ(+E*4SjPZdm7jly#JqkmRfbtRLK! zPXAlz!#_ix40Thz{BW@*);ovRThTU7_>L|rWD`WSf2Ol^X zLRF@rq4qwO^y-%VkyCIB6zwy?FQ=(8{r2w8OD z7Q)r86@%{z-{)X)OmMI>xTgd?ngFAn`q+bZTz-3y%((v84BO}(vayOQHO=7;-{9l0 zEL2wHd+B4tx)MCjr$XEGcGRGrgn#UeAE%V|qS)HPii6Rz5x!5hA33)hGE1AVlhX88 zHq4MlqNNrAm6T~s#L-brciFeolh*-B->MweE@&W%^D*Vx+KFkjr2dFcb`f^;MG8xy zkPRl>;591=8dvFSZfn9(JnLM2aq;jr*U@p%BtF|=)N4-k`1_f~WuB-!#Tg#lRjO;F zUyoaok|Qi16qYUh`wKh!tRf!C>b6#IBjv=%iG%O^Y2D39q|lMW+d&ZLb>Svg5aR1! zVuejEiv40E(-pY$0MR`9hTZmEmCAg&L$Yh1yrkkb>Enjkl4c~Q<}$OzoG^M>!#*fdyfezvRF25KqqiU_G#lr+>9^JX*|`;lh+8LG-ps z8QUIZgv1%i%x%^jed&{UM&imkMBzCM(-+as6;limFw!M-Xy<>(K1duJ(q#yIf}l@%L)!V5fr0X};yP2dCu@P@1rp zLoz7LuMm#TNZFX(GVZLlAz(B4grhCu4WE}7LOV685w_2}^HD=0>L2x(rvO#To`IR# z+AVfsA7|$&FNYPR=>wK(4n!E!9KvlOZ}!;fIHyVBOV0bYT{R2w-#Q*3r|y!WZ@)^5 zjS+jO$8rbLx|?5VG`hE5^jfmklJ5f=aSo2?5<{FLGD5&H&y%55paRHfx4wn(2~v;o zI_y|%*1un+c=_dDJ!j6ItE73|W{ZG)sKBn|j7A58csZrLDRwGb=>X3hG%<5fe~M}$ zY_Pzc5-63l;Y)5djjR`-7K!juNH zbQ>oEN?~hpP;?{3yEB0)Py^_R%EG^1f+$T&(6oRdT3+UcSV|c$UpFEXlJEn9gaaTn zNn{=`>m~(>+W9ME2o_<|vkJcar5A7c5#hYR7ZfMmAMC#ITDCO85{o5_>tw*np7slb zbV0S0;(y=tYo|T1od2cd2&k6Q7g2pQu4pi>P*2DCT@zP}Me4})M0>!Z!EH0Zx+)%$ z*zG;f*Zi@cPHlcsgm-|>l5a>DMpWVE7G1(R$?}3oY|JMN%dp-Nx`PKJL8;$x4Uf$n z$plC~4nMTrn|f{9nSU+@5KnnhFjaSZ#FG;mtWlQ-nOb;l9$NNg>OW}4(-&lhgsh4G zyov%w`l>Mxv-CQSUpasmv2CY69Jy||!zjtlXbL}HH2YwbMsyw%uxLf-k*XEUTSx9w zfY)4Fp(p&0YfA`j>UuqzX}LI&@x!%B< z*QCYoIil`Vgd`3mXQU|Y0(;SLuZqNQr_k*CK(kzpk}%XFw`^cotoE`%RNoF4H}CCP z*saOpgm}Q_`^5m(0*WL>a;}e|dQ9f7E~aSNBrl|x@jfj zDn&Z>9S!tF=1ghniTND+!%fD+Dc8BCRm<#mt`Z)8sdW(tU`XFUzR;pR zKXF41)daMu)xptw?r_87dJuds@S)IXLH}n9)jJ5smZFHY?N87LrVryT>hO3-59Gth z^x~<|mZvL(I=y8l7p}YGlR~iktWT>9&Ewlw;dSh{5u3ouR69me@jj zz?SRj6pSp(7MNZKzG7|C5&f+f=2p7W6!j{6tq5w^@op@UJXvzTKQG(Vp;fzdU~vya zmuP$MZs{?P#7^@)mU3K1wzdkUz(PcLqYo?n6>navDa0oO-g;bwe)gVJKT6jHtz&FD z5XW)o$*bbbJWQN6pp|?dLQ(o8h?}1FH?I#g#PMshCPA?@KdYNzttm>LOtHNsYS*zc zzv}GoQz0866B6On*ug3p0QW zdx-;TtWmprPTai&u)37%wSG_lh*;7R4{jaup<_ZAp@V_I>QxHjt|> zw*A9Y%i=Ei)C_$9KXme!Pmj-if_UydlO*fQ)D$dvQh+$Ey0wKu_^ z`M$J9A3kaqnK48&4~(62+~_b7Qx*p?KUZdAK}@vC#}5sAxQHa3r_todMJQ<^V@1kdKiK-c;KWh#B`XymqvG%|UL@)$Yps2~| zYm4{nN`;~zwU>6)=Ij>;IxRV_m0bV51>9^?_kyiXmb~dM5_!PXgy-K56Z#V06V7oT zTPT}&Q(NTxaV|*{Ar_DAlabo&1>zc7byZkanl$S)evU_!N-cXBFBZ1i6Z{6wTYA}T z6FVDVT|8{!OE1d#0Pu4@HNZX6jUBQSXV|RrN|inS-zp}mgIC^D7zxfnXj@eDOhtTH(ZJAvf+3aX#h!E7I@3>$>UR>Vz*BS^us zj*P5;6goCAj!VAQvI6xRSnncV`>@GWp6Be;8K0_oGicD>n*Go$LdVLgit)lqwyEpI zuctHmy3f>=I8zrr;LTk+)ScXjdwmY3qc``0uVV3&+VA;=HVKgt#rr51;mMQ)e1QdO z!SoykMSA#y)h_`5KLEhnpL|0Y5wDf%2n`*dB<>`Za$)H2vY5g8`HAzqKDV^mqXc&# zQXh?DrHN-us8F?G$@&yHF>Y@wyOnZ+)VB|b9riiadaH7UaZ~4M(F>6|Pq^Z0Tm}2K z`va<_Vb3);y9lj|p^5hcD<*2^-BM3Id|$>Q<`=pL`jt?g>}uRRdfcMPre5X#kD|}@ZQOQ#*zuX~z8H{VMsaV(Y%#6`<=GzrJD@Btj-`_NtF*2PXmyOvjvn{IwsG7t zH$}8biu(Hi_T!twy_K5Z8tq$ITw4*s=KuBY)VVy3+Ju|3z&QL0AqsYDv0fV`$*qv$ z@+DBz)Ejd|i6I=YOyqWY)9}cvY`oMQVA|bCFK>4 zE1kMY)`_Heg@sO2d1xBu`zpU1eZ0Re188!oQ%GfHF?~9EjH&^G)Vnjp#;poU9<3#) zzQ_Bait2ySNJ)MU>(tHox(%7kaE0C3`Vg)+Waq-qA#0`sWR!9aH0H6d``H$@X=*$S z7VCyQJu+2v3)5pE<*kSZpw)~X|9Fd>F{f>nB1g_B0_|dq6(HaU`_7BSq^es+vk75r z$ok|}>29z?V7mC%sGqKIJp~CM0{MiA`YxE&Myx0;vAa?(zGkK&ZT8<}K;X$YHsr6r zu?xDVhy^nSv}i6BIT~T`H{FXRdh5Y^1fITiq0dtXP}G{C1;`M8DAghzPcSM3ldTzT)1N_XN*oK;nK-FN_kLR|S+6#w>CJ%+yYz{iiB( zZ7^`m$i)>?Eij@aDq>K&_WyQ=yu;c%C5d5&+(=5NXz~D%x?fA%s1mNy`k>zH*yBLE zOi`0S!Z3-SmO$$nW=A^!AyTf^vcDeILRiI4vv`;VPO%1fv?OUwaU|!S4|(FUEC^#= zxME0KE4)qf-jX^`1ueJ*efx_8?3vgae40q(X#Ol{}%wl}1+SjOO;*^vsAkIn>4 zZa>mU5^DW%HtVLPwp~;qY*{BJq1IOTc`Xhf(bpB!Z{(%Kt9B0#!BXNOzML{xi z@V)(`!k~R9aIQySx7Se7vVD1%BhStqYA_%3V+7T*+t~C2a}g*h4bp&FZBIo@H7%H% zzW3POv|82YY_2y+7k2%6)3+eHCj8LdNRl+5OVTAXf$<82t|ZA_UXQRw{S{HtJ|axF z4#NBg`6?m4KPDh)&q>Vp|1|llRKgPd)1ju5G~IXG{j5=*u@4y^HDWzUYd2j#mJnRZ zQEq`8-RNw^Tlj2{$`e#lsHpJ){I<8^M=u*{; z|Lpr*LXMs{>%&YdTqhLLeWw4&clfBGWLASGcjZ7En5)0C+VaX*21FFOrdOF`)WO-N z!(11Y$8X@~Wv(DI;+hq?O8=FS2KPzAaG2N<{fEy=jMK-%v)O zAet6%Yo2Ke!W90pi+-)}{^b&iOayl>8f~E7Mbo*T_2h`KNs07DIZI`yqP{XOVmT81 z4j(2uDQ0*>|FYR4+il2L8HnGkT98kQeqCmbz_}*6@ch|LZIs`m%Nm4ID_#u7$_W>e z+E@DgEg$aFT}!2ExXoc1A2cOhO;;GNhpG17Y_}QuZoUg1>{s@nt`O7em5fo=-?bMF zK)~9i`Zohcmw^>Cp2cps;-dLO!!3K5 zl+pe4%}Clt#!aA|@op&O)!X2^4Rh)&FvyKZ$VtivYQ}_`Dgk*k10O8?F~&m2**(Af zkg0s261zJAsbWS3Fl8pd%qs!hfqa!y`;Tkxx;D9WC#0sXXd#k|fR}=c=zb4_s?K{v zFPE?VqOu&3DuKjm*Lkj^Vk5Kkb0)}Vj!~x6k>s|Ii4@Hn(8CFOSN>e))r4KK<#u*p zCiuuCmo-N`jd4p#rOV($*cfD#uJe1hUh>*4%GfoP)*SX%8}rLUe;=lLgQF&FVeO-1 zT(=)A%|6nv9uJI_uDZ4AoRb@Igee_9LHk5+An8hH7bx}Ub^m-Dg?V4^p+`?aGl5`r zbU28fPNz_U;}AOOz^LL^SjQm;Y9R?&5@HD3qe3>3P%L_un5AuYRaQWZH8Y-9Dw}!A z{aE3{Ik0)e;sWC`7QRV<&8Q9`-P^2>Edu0${rs~cF=aXP;Isn3Un-I`ygj#^U-lWRqTQQat@Ke2E&2t^x7Q(U_!B^S7 zla_Jh>Ay4yS;bW&cZsjLBENtd_RfDeO;Yuz&iBE*Tzb}vEc|HDZA&!6_eX3dj8T(f zmln9U9ks@sH5Q;|3IaS~u7HL?rQ#U**97D7i2RP()w1~?dk!J)eb{_VJE0JEi{+x~oD!<|68l@cv0k?kf!gZRFT1$Pw6c3S&xL!2a=1j`a0x-w8p zm7*<3LIcf8j{ror4Y9lzMMN_}l+<&Y+BT@0?k-bmStfM59 zXEntf;G3Mh#X5!i5Uuiy$757pX~LL)5od$-V$nb$m- z5zxo7BLO|X^U@gdiQM}>X{1lg%9hd{-MxA$DUWBS10~UpzMQ>``N^Xpov$80E;SN^ zFW_+0!(D6lM*4oLJJA73J6A?hfPoAGBPBQmt-cQ#7T~(&6%yk<#m5N04n*#Sc5FRT z|0rphm`@yfTY$)L^(OPz=Zz<_m4!(D^w2VWDuA+DcK4jDn*0%#Hp6l(_gfIufW!))9>Fi50N>IYVL@e|Oe z{rm)aDc)c}h%r*a*k+cNbN+wRuoX4v9F0%qzImaEeblY5?_JRKqxs2;0W2-fE&@(k zgo%=)Sz|lc0$|U^#ly1Jkp=LSK>=E*@6%9Pv)*p$H>>=SqMbtYE?fa~`Bdd5sA<4} zI4S_u=h`oiS?q18E&B=LRL@kz>7U${alM$;ErizuKq{zfwJWMiFRqFgLv*@lHB@ht zixuL}1sHc)8dY&D#MLK-4Qe+DevJ+4AO>2AHt_k${BHBlG}Rw<_CyCK*gaUEg84o)B)yRu;LTbX?+x}~Qt_N;m!H)Qw@ zPlc}=0=Tjd)diyOL7QHkCwKL%mY}(^3ylqTRLmH7Lh)mCouV|`e+0+=7ipNsXZxKrmf=1ozgf;P z3BoyxWOY!SVK#hR;D^v}b@Jy^gRNtY@{>frOAsr_t$FOB30f`!rjF^!Dau>X0ySsb z%h7~^=d?>ub^szrz50`$Zoh7^@YoL$`;Gu>3qe>%1*fwP8^FJ-=ff}F^ToWEtg}== zM>)1nB_a3!;qM(elazw%_hSHP;j*%y+5BMIwIGsb4W#|TxKT})potl=c$Ob&Ecb6mK~ze#+f#-4eN|$R zjK-i&v`DIDX9_Efpw>L;80$B!iSuqN30XVG8f4yLWBNA|0P&bX%=VrNg>l~P>m$RD zVz5IQV0_VF;${GpKu5+5>i?) zQ|FCHM*b^`Dg=GF_J%u4^BO$>t1P|;`E(5gm=Pi&W=88Db)(WZoYIAYNw4}!ob_|{ zZ2#GNtNS7i=&}ydqdGGGGORVKrP#wxCy=Q~4tch4#5^g*(&CYcwhZpVobB_?YlF*s z_GPYl0{{`;(t}k_v;LnKQ9DA{@-YH$jizM!x|67a`KpTzge$3_Wf9l+{N>srmskTO zaF7o}+$g}5r-3p^?l*tulgIea0AiI85!jtNmz#Mn3ztR=#k45L9lMMuz z@~Z8&8H&+V)L1Y~Wtoz2OGaI1j-^->Wvln7BPYPTwTRH$4Gdr^P80&d>$`)`x{R{P zwAoro^8rnF#LQTG&47^9mBLVz8pP*; z92TArt==d^R!6i>Yq4X`0toi@9Mp&P%{kFhkud(dY=ezMRP8PUf3n`i8QRam&9ll; zHghH;nIx>k!MlI8Ef{Bn0k#8Crrp-uG^o(raG-OK0R@AXFXrDGYt>>5RIA)nKQrT* zB=4Q!$1SF;et|M!3W!!tsL2KaU|fKIDAft}N@79nnJkoKq-zJ@yJO5*GfOANGGB0O zs9vvvebm>UQO1w(3r#=tlcMJc>%e1u!TbIgi<@=gKOcSF&F`&ALBSj=O2b=1ldXR* z)1o~!UYn4Lm#c->CU+46^YN{8)s1$)4Ugs^qp6lZygqb0?rVDFhY?Qu)v zvs4V!?r3f#d8f{Y>+au@#tnyxKM%$|SzPm)7nq&;q5~OoUYUao^29J7cY?_e8)GZ0 z0F!!rcx+##w;Y37<^?LiiH@}Yf~KwmN~JzP)Ra1*>w((Pm6M+~fIfcc%G-NFh^DF) zu#I(KEzdhACIjV0FW7dD@bHT{>Qcn03w7H-L8wR*^L`#Yz8+P%W31iY)&~0F83B)8 zmsYfQFRtBQV6rBfAWItquux$B>6nCaL+c{#}(mGcRoO7*1x1X9Y06PQwF>LNLumx}(PLe3*u_U4}O#A&=xY={adx`md_5fd!sr$AT zHA<;mo{ov7Av6f2wGCk7ohe7xA~coYky`t+9ZRv?A6k{z6I9is;+8P1KBIxZe0C>b zBUjas*MMi{H!J}}?=|1=6J;2#&^00P$+i9iq6h84dVHS$#B;f zNBRvn;M9Z>)k@QAB3(Gvj9szP5-#WFC0L81&GoP$1 z#3E|py>Kj5t81QnqJ?}9|$5*36&W$#@`pxLal1@YrnQzU!WsaaFya=*|R7L@-4i$HN))w1IbWW?|1-suj>G9JBl?_dnT1uVZC1)4EEv+CbWD;skJG|$9 z-X_-27sVhpaW9)^mT*N{Z>9Y@M&|y2_;52T8uyTS@+SdRN@c~z$=z11H68z_Rh)62 z5kBxHn@d71IcvhpG8FF!zeTV>hKs7>J4H?0qLYV#G!LxJy90-L&%W5kywWSNX89Q0 zh*s8y6$Fc1s{H(-m$Sv^>N#$Ax}f5<$4Vw^IJr~EoZnHylXR3+Hlk-1T|VS!8R(Qa zJw;>VZ1iNe@fvwe$QmW1^^zuFFgsiKbT$>x|8AGJ5!lQ+>; zPnYa;%WBvaYXb#hz17XM;X^GZKt~uj^|NVz3Kh7#Y2IUGHuV}?9gxKiGuc}jB^wE< zCyiOwQE;n4%pxALNs{O^`vIh>NVp=0!*C5HEl$OT!^u9=tQ9z#*_i9J()F&5cKd z1K6~wewCY%uUj})o`m14<;-)pob{?olZ=J+_YlqYFk@=1xGctY{D4!6$*xl+NKE%@ z`&SJ*P;_Y=L81W#|K++BbLC1eA6n)v1Q)P;H2%gw6QS*?!l@pqxe-U_cKdp?wQyz~ zEjHTNuiD&pF38`2#ouApb)IA)@Mm(v+?yO*)!4a)^*_l<4fEp)=9=IY$Z_?@+~ed< zi})0*iTZBFURs+Wf>zbtHD;w--yisN;zUVjA$oVkj8}7z>MO+9%4cFFe;xTSAf93olO&YB1shrjHfC3<+U+IvNwqnjId0wC)UxD(4l z3qMGrT*89TQ(JVm&*I$Tr?cawAsPe(uscl%v+v?f9kx3f;0&3h8XTJ-XU#H0X9Z=Q zgOWYiZId_W@hEZuHbSTmg)7XE-fb@dii^Xt451ZDkT9$2+I_yH~wMBI?F2 zVhs*fRXOu9o*C0-Y`*Ww{Qeq4ibQwx zBniw-%<9dcF!RjEu``2ZraF$|o;cc`!RJ_$q=HRQ*1`z!%)O*uuhIri^ zqs90(5>TDm*e40+l6qPcs7+`E3R}RZR1?~w5~GvkKsU4(m4c%sYHRmX(EmK~So;Aa zFkf!2;)bk-fLOz^%fGW$ttitR_Dr=(3@|fVX4emOLTmt|m(IOplJ=WHo&ntkNftSN z_JJ3lcT%E!Y*c$mUqnohmj6Ug#$^3*5IhJg-ci8@FB)JztU;|?`f|PWhzLoKEO`&s zU(3*l)14eavf}cYL>5(eUO})o)TD@LE3qDa@9+?e2Exhm8$q`XAkjKR>1pOitiu+V zSmC!H=g79#E(0vu9Y@+DhMG2Wc~RbB1|(sD*TGCLU9~v1*>C7kzK*zfY;3llqo^nK zP$jfbOU>~Z)+RK;#;ZXPH#;JN68Yr`MnQ_|Y2XtjN>s17|Btn%bHu(sC4*scXrfy( z%B5QXD@VJ|O-+7C{-#jlrTW(a%0HxLM!7wKl;Yh3evoFq zaak0zF_4-##l*9NQbxy$m&lpt5%pldLe_-==NdeNYak%RRr_gxCoQ8768m6+?3{(l z-FS>7pdjBI=WIS3Km!gj%*`*^6g2)j1BY5Rd}nRJa`Mdc+&)ll*6V2%!%UYB^$PPLsR0{)Hw~@e55sh@`we}5o-)41BFpD>ZTJOrN(|E3 zqD)no?J2H;Guf{5N*HR?;rKl6=X#Kii*htNDcC+PP0wgR`%{d$<5D+ED2WC}jh7<0 zly@J(VPOac-+GE?w}WJ`67EwFLt%r)GMY?oRVh@60xl`Bn_+1#wzdAK^)7vxeJUQ> z*@A=i=L>$tJHIgWo^)Y@|8Q`Ux&2*O(H)pIh{5$+S7LppYowBI_jCdW}Of*-E)Zak?is)lO9u zv3#h4tgVzuM|RtAzW;mb`q*NqM1C8DjJFB2&-5T6M?GJd$hEtoqQKGFI4|3;7&cy6 z81;eXO%j1INH@VSfnkTWmQ(4;FI}7-j2c0+gC*FziZ~rPgjwaM0c&fy!S0w}x z0~h)z8s`+ljC08a%X3~tiIW@_KXHsGSJ#I`T)rO~<-(l|*lwgJk@+OMW8p5uFj$^W zWHB3iFg#7)KOu;^DI+6LZ53udN2xdjTIv&g6z!~h+?&%uoV>h7w(6{8L6DKV$mgIy zQ}}GF3k?<<#Z$@&^I9FCzRll(u-hh&hX$3QFWM(x1Kp}lX4 znakq3or(T(7?=o7U=K9rCL1(a#;W68Y<;(4-g?z(fBu?c0MnN$%I)Q=k`)1xOQ$%j zoV%J?4I_5##t841k@<5OleWJH5d;2UYBI4*3;N`I zdVyTq&FHfbA&~wiJf{AX1;!0{H=etYK^=%CcZ)6G3PZlrywK6Zvs#7*pi0cfk8FxwN@k$l*c1@0Jwx8{k=uHyPq zQpijPoG$}yFJmW)6E{%=|NT598ZURl`g-XEiFB4FukQZU5jtl}zGz*OSBa%S8Lz*m z*HkAncj$MJOF5fWBoB$SZVUF^lQx>o4{_Oh4dfGvz{m+k$yXh4@F9aUVH)%;)XtAf z*f3&o`q(4-8$I}WjB1-gzK_LS6`iK`-ihq zL#m&gK)vrUm0)AR(@qj6K}Xi(!N^ve42`gxBgmqlF`6gbeIyWUHq;$W*bpGVmjY=< zXzI8fQ0Ozfu6;Y>|Ym}xWxpQ2f?yL?ygpFgM4cHXIqoah|Euf?*pLq!A@U`3n z9I%UB2ynwvU7|{zfuAUNoHK_jjW9;>`Qv|`WBU{_dNZM_x%9;rfvMPsUw+Y4%-ct1 zjPuy9QI3)!VEgQ>zl3f{h;Fm%{S9MOHrd^{WdKz`^EVH~alk+HjI2cNZ!DX*mF3Uq(;xVShm!*1!nI&)x;k0NzTqjK_pZUeNvbjncpAeZ3FiH>NRbN?O*88kq7no$ zqQi2e!I&AogfYGR;^nJUSag-GB#Mv7%wQA|(Co@e&XUrn9oDotM<}#r`H(!5-sk(l z;@!0wkDcpI9Sssi|=3!D#0}V#|>V64b1qG!&LWBJY-c; ziNN4>@i%qocpWUN{LhR)1qKcy=kqsNs%C)nGh}4tT!N8io`6qr{t)!*?2fWEeJ15d zkI7rMtjqW)iT!$u$HwM<5sdAB5pv5g!Uvc)Tae|zlKH@i|8%St4pUU?oY~Kt^5wNK zCA`2_Sqj%rXdv>M3`=(}HcC_10GKz&I`R_m3@Psmr_(Ru3%lKjfz4(ut8gg*q8sU8 zhNo)>E5TG!N3pL!6VUd)`qx7uJGyyPlqd^%%z!%i*?s@ zcvu*wVS9h7Taqj+QAsxRQ`Z>5FzpqBlpMF=zmgBJBc7D!BPpnE5K8@pySgbgZ_S_*HRdiG!2i%?xZ3F3* zbmdQ)dokfo;cu%@ zmHbRk`HeejVULickS7yYq@75UG|EdV!4%M3TzyuV{!!N{fK!D6sp<@tcB-u5Stk~Yap1Z2opp;Gs=MO6ZmglQN|G#nh z0bE{`OM^C`yQH;#RbbD+_OUx>>M%+D)ffUhS&V(Z4i)+V;~5)zRzVGS(^y=GZH}u_ z3Znc$k;OYi{Fj-#CU)8D1?8w$P3ijwEx07BFso3$GnW6PBJ_Aq|)=Erpa7 zCGz%)J5lMWPxcP%OMB_-{VLsGK(0brHg;I_F2;OB3$xIS-Y@M)$ZX!<$|du+>^y!P1m)N8({I}ovTJe2e!Leb(4 zy!%bD?mLQyi0_uUyQE6UmkiCN$UNMd-6EbCcI}669W_zuETwlw08PoMV}C!sYava$ z-m62>L?gZ*@{$+64AjIs(R8*42}#*u2+ZwRZ@#}Z^;dcv!J=2V-dBoi?qdUqu^`cg zy5GbU5Q~c#;h&3C4uFK(Lc=|)c!Q69Ai;dv>&%1!wP)3#56}GNn-Umd9KK~!(U~G0 z(~sv3RlC?uSjn^<VkjnX1fE1t- zC3}6+?`#W{qZR-S#SA_Kxyr#MDZHo(5tkwIQY6xJWQLtX$2w<6cS4bRMay1c@^PRH zs7iguvX64bPD|zoAq_ExU7Y`qJUPlCV)&~McsoKe_F63*5oeQME14hSMnT-MWqvQy zbN?Dt**8Ri>gOhOtK%`Qwp^IqEBR9~0rC+-^wEys!Bjz1=v2NY%=BvTmgsZp=rdkK z{OG3pvc2u^H$Xig>q#f=+7R5UVz0wb$h?s@J$>C!qdK2)xcX69hdk&U#bah<^Ny52Bmq zfcOwp45}=z3yR8NUWFG;aCXH!w?-M&;YvdED{NsZRzFa`6JTr*!hq3uB(Ns|I`hmph*kf0#-Bz>rZWaa*h!@zakST_2aWmoAO0Jnj0)E^<^ricQGGA zEubG;yR}liyW$ztiLAV=oASCs)h9TH9u+0LSA{pf3DvhdQz!k%nJTqTTNI;N;*=7u zt>W+X27N7J-ND7L)uITO1;S*Tw9A|FCc*xu;$cx|&G{+gTD10R{ZTvrs zy>EJ*Y@EaUV(Hgf zq_1TpV57EqW|$g|RUYnTj2o=pvC;Ae-}hA%>j|k(;pfSd%bJzOgMK*4?o?JGLzAz(%_No{sA|6NF|pQ4$m3ZE$Zmy!<`-_UEfNv zg+|)(AGnx`RU*CC!2Bes0f*s6Po_i)za^FGUJz0>fh(BYrJ$8DoB*O1}UDyz?{+- zU;;(ABA@b7GecLXLUcC2_ZdW^Jy5`3T>x&NCm?Y<4wc%lJ~P`@uvL4oH6#y>o5`2~dJyf&#w^59NgSciIzh#)|z=NiFP7!c{rVVN( z5&^{RXNlzRM_Ou%*dE|u$nhng+xsZ&VZ$wDhc}PjW?Y^m9C&D{Aq>%;8@G?Or`o6fax9UZ03m*c4uJMDIDD#s2k@?2MmOqGMxq zYup28F(lMc&SR$Wl+!)`8NqG!Y#2xBMbKwHHz{XsaNv_qk|AFJQB9jMvwfe=v}5t% z|7L6papvNhx7p?{m=oTmLO+os8D)nmlhClT{I=skGzd+%+sC&4$VCr2pehuHjLjA= zDM#g*=^|kati~0=9`*xlXh@@^$0$^&RSgktSOOf5#d_&&x*mIfd7eX&4S0hShr3hX ztBnY$lHPPj?{1!Ad!Pl{L@3)CVpLjI%sqBpcV6~Dg>D_C_qqfK$pU9=n@1VYlrjv* zz!`U`A71vNd)XIgB6=5bVHgsLY{3nmExUm$dcp}XKAuVU30MRn)PY>C)v+? z6(MW$xNUQMyD=g7T9!HeO97igfUdstDl0qk(!0 zpB3|k79p&z?p{{$25h~2=bZyRo<@mcw_*x~VHe8UOSR0xGXyC;Qz&8QR4hgVhV5==i^geOnPxJKr#x+jEW||+kC|&n zJL#8erCdXSP|C)f`;4Aj|FCB=5`$~3+;<07Uis$;B%XLmNB`kgph9S~%}rS*MuXdb`Pj{tQ{vZF2^X;8ZK=l@LOx`&;Y`a%R@N>r+$8rI zCmR(p*eQqHO9h8a1 z&l#avrR}~)34T-vS}hRl`BQ=fHiSD5vtSo^`h|~4(xH#v%l180^f)SudFj|9@x0T{ z{;q%Y*=9lM`-RK+H+IY0$lM|n&a1D+XX%}E1ztyZnQQ)%Z2}nq0-S8_e_naO^~mMG zBQUf3gA2>x+2-vKZNufh@wyFss&JTvsCWaNLZhrUPfp4BRhj(xcZ_3x&;D#@kd;Yp z#^bmlp1xGNSiJeoK-JbUB{tTA(?=LpHD37|`XI*_9uzbhgK-0WICCyZFa-yHDaOa} zHY}Y#j%&SSIIy<>VW6zhhf=s5!w&U=jSol;{)K10iUt$SUO6T8n%cP##_Senu47=D zauEFZ`KLg0T&0PpeGVAf+`e}y`8bT5VxShcS?ORO-Pg-)N5zEgo&)_2Fn?;auZdQtK#3{M) zTZcgQ1Z)+YX()pAr`!~{$Rv!ANI|l5a^QJzZD{tZ1<< z7o3p`GKa~|pZr~|a6knJWt=euN7Yk$_3?VR00qjNGMoiBq+gYnc+9vh(6aQ#i7Jo1 z>7HbuOnXr#r!)$H5HSb1ga)k@A^oqmxUs=|aL(-9uqqblls5K#i+Y{Tq-+PeO+vCA zzszef4L&kjWwAJ7r#ZH1j!_}q8|rBfYUxV$pBy8^jxbyE(t`pX4QkR`ddyGLJO&$; zI`gY*g3HU(AGiji3#b_XVt~YIisl&_sTiUZr0x_~!LJ!M2lyeig%6Nx5#`J#l1l@f z6;$h;51{t69^IZ~--QW@WJrC+D*gDg{SnXiJlp1x*Z?Q-$Uh{{8w`$ArV9J0aOCug zzuU|+oNEJkW|(7xfQzjG43U0L0AfZ1N z{)0nz2O(0AB{?qM%8+~4PT_=lc^a!aTM7U$6-UKjF{K?tTc+h1^L#8UA-G@w9hM7T zIIgJ{h>Z;<0ivD2)q9;vcwNKSMiB6KulAXEyV)xRD!DawRU>WYh}>R`tw(&R}6dSZG`4I@ly zj!{K;g{Ei5CXp#fCfYOv*nppsFkNYS?7-ZwHs}&obAgOnFvNM~#WtY#{_>^;Zp2(m zkHhYrp96(^lDYADiGH|_dKl^Am9nCXpf(BF>ua_wkvI?L>ex#&tL~+x=v_K03Gg;j zb_JMIMnmVg%zlL;TODYEJVz9rw3LUNO}NaEo;e956N+M5(cdoXAi^6xKi&}$;h%e>-lOp7fCI=-Bu*EIzbYgOtv$JxEGO1@xh~e ze4n9~kYMGrG|>f_+Ia;R9EE7IgR&8j<6X78vcXC(ES&X2dPb;b@6nyVI|}fQUDrTR z5n|6~B0@`+)Q637r6OF3I=}&bLQ8lmt?>ck(H=(E0;BZi6J}TD`Nve7;#E(!f;B`i zk8-vd`>73zItgiWE6{p3NY&pc4JkQHv@lfCJMgjCQQp_B?Q_*4en z*GCao_UYX#T2NrdpqRRyahplE6lla(9Yo=JT};j%;q-~c{#-E#+r9+Ui@UyM_C#+@ zS_8gw1LfS_S5LXp)yS9{rVQ{cp*C#LZd~k%*EvE}w=Ydf{zt?*lf;6Q{z={c zb|a2tMo~aY6f7q!p!m>_RN(84LMQsVxgT4-J^8+#a7A;4jp>as9lp4=LbyQyyUlSK z`mCAYD{?-Ns@uE9k}B2z3=jsWoF{kF!oq-)j?91dF33#-N?N4lM1bu*`X9e#ey%`q z#`h^^TSr(|uKX{b*n&qL3Ky--XD#88e*lV22w*CE!iqlvFC4x7i@1@lq-fI#sg{nV zVk5f^VQ-n|7{wYA3^1dut<$v^73VN#Ir{hzVYV%o)%-Hi?7?ZG z0AZrb^$YY$S=3{i%fNJld#hqf5D3&uZ%Efq?`j(n)8gZ$A6jIiQagO~!5*VhB>u}g zzNUO%!5N3Md600xgD?%!`rr+;<|I>@VYsjo}C+tg}m!b1mn@kzBYUVA+gl2kobUAd<|`~s`h1t<95KY%IHIA z&+0`$?Z{LY_#muP*2IW|?&LDu`s&>d@{h8cUko3P&p3$t+=iE%3ZfRz@-zV8pi9r0 z@24?qMh38h?biEO5`?P6_s!|kUjoyzf$O2p-DA>ChANV%z2YpZNp4}&nz#sg4M@1T z0Tc?b2}b-tl4$)VAXs${71$~d+4wNM(S?Fi72H6XP`M|h>s90MvlynxpS&*VaH;vk ztfelezY4`pPlH|nC6q7UBn!k$?ai?kFj{`rkM?z5eQ93tsa|{^4<`jxz5esxT_4$HJym{$d#!!;wFN->~U@nkzs^o!av1l2g)Bp%CYnSn}o)RuNCI z$-bU_24!5pT<-ctiFQP0r3N8ilfxb4Ynh6ZySe;ojKfWEk49qVz+b6HA4{2d=|$$1 zxU$&-o=SR5FvtQkCz`}e+|&i1%} z6oWUp+zl`x6cI$Blm~O&BSx1K!bp|@h%W+{r^Jbrf}7T`!^F5p18H5ob{+Pi@f&hn+e_>?FZp-=W1uVJ-*hc#Iv_MSSp52tU6 zS&s~{y4rF3?4y-lQx+9Qd!!z;;%zRk)F+-TF410#dwCjFJbeTHFGKx|4XVmnhW^?O zT(qUl-KjbCvB%aP$NP>Kz*4>@p1r8+-+xk z=omU!R4A`EuYlq$Y}#4|d#|i!Nz*f_x#lmFXmZcCVV9D8y#lkC=Y6_+J0e|}B37^W zd=zn;{|Hn+4Z|P7`QO@2k?Bx|?i~4^h(q=T1d-sIw~%BwXZIDR+;Xo}%f1Y_}3{tj^;)-g}LoyA|9lq*zrAdJI0 zR4mV6E0-mS{%#67cfMJ$>vTalclS`6XPUAgX}0tmpqv=f9#Okqy?7h^IT&kdiix1( zRESlXfo_NjY&V7hC~{}=f(<5}hye0{jCni7ihvfwX5P$Cp|{07hx1QNcuGDD0>y~q zs}h*E+4>-B)~et;sS`!lm?y)*O^KIrEqX4tGw=|NK>(YZi74IRD4)@BGv}mfc;koW z?w04&uzWpx6b&Pv`mS=+L^Q~U|KBpN7@FVbq<#Hjr2!S^2otWOHO}0gA{{Lh^0p|u zs|y$;H4HeEdkBN-ywsg#ZF+Bih{Z~BfIKy^(v^zHjWYKIha&8+@lLA3sj%jsGNPz4 zm!Q*z94#&Y);4ggUg&@*B71F51&5fF;fn$WCP@dLM#8l)4RIgv2XZq)oGEdQYB#%6 z@lpGD7j*mL{iExyf_D~CpB8YRM{WHsBcxo;cQrNc0p>zXJxyAaM=iPLvVPwikEOFT@mPwYe^>KuS z5x3(botq7S!J+<`fu{yi4+A!4lxqhtNaKI8?<428>Oz*6ju=v8)q_SEWqNZr@5Scv z0FXlT=dF`of~b_hYB+H}&o2Im}EKt}Fq^*b0S%f02FpPb~mTQlwgG#oozwG#70 zxqL#a=9a+4=N($KqtQLdcevXAJ(oLK3IVh>pkw?+Nv&xmJ5 z`*g*tNmm@STWc&RL+~=uoib!W%|aU+H6^P*f(c^&Ivm#AeT-ACnxV(jjW|9Q*qNFV zm-IS`ZR<$wImjslLhBr9LrI03=12JW(H4tkG1_zujjR@iAiP?T@=|kzq42^P0W!%J zr#;Mb|7X*+qlwuln=(nHRs}{5Jg|ZLTOvF=Dpy<>CE)4{-`^q$VAFxBSpwLeJ8FLq zm98dR!Ju!H$QE3P*swz8dG&0@V8HJP{Mg|00*#wp0<-;!)}OM1fS#6YT-aY14gx@mPs-7pV@V>~5ZevhzuK?n{En`vj%m}Z~tXwt6eJj*}gxZH-? z5lMhWZJCiMz;8GT!bhOUS7ZSHKLEgm!Jt859PipM4qR0aVm;e?T^QIaB-`S5~XjZUzC@+Ymeu)0_E3-`@)#> zgi!r#^OI^ZBG24D+@vPECj?&t(N_uija=f5YOlqv_oPq1dZjkQbWn%2)Wi=$4$Rjk z^1WdJB*Rll&E<;%`a+L29-3H;)ouyi71}UnKyoE4lzsVz?KDhLi+W^zQ&0xi=xGTk z*N0{1*VY==E)Rj9L`BOCh}?^OvF_1F002#W zK}6!-emiQ%7pHewz^q?Cj@Dhi$KjGDFo!JnS{s|jqaQ(^oPZh=tIzrwH;F=_)y4zH zXb&@DMVRtkf+}RpFG_qo`pu5FC3Yn>7t`^|4&(1TMVzBebZRPc4}S3UEu3E3_MS|1 z)>rX(H?0Ny1JlD2V!4=f7=Q|8UnK-ZBK}u5{|V8-ct3&XD-!e+sc663vI`3u9Kj3` zJ?Vn3OVrbVs$ptmlcL2*6{HB$(4q1T63gE9%G1?R&F73-X^W@&$4agJz_@(4T8C=% zC5`q{8s>ApJKQD1CFuB_x^oK2(mU=mKpBEtLAZYI5{~#rb_HfM^gsHp#j4@%O2>1~ zl_P*L;@evH@a6CUz~FT&72;5QkGX*+7;t`ytRdpEM`}b39X{~gx7`~$uho-p8=Y77 z0h?mOL?WImBMmsm4H`Annccz%d7DyNE9(&g=T4dDyjo647OWg_{6~l^S9Dnap+o3X zRot51^nTK)akLO$4Pr?E$)u7Z7s(T>q}_|9$4)VT*okQNs84p$WHMtnc4sVc0u*Ic~L?S_FN#t@v*fZ46^}@rm*k zhbXu36ERSHj8Olm)0Bw-l_Na({yp|-r)K+_KXlX4JfD0@>GnQ|kJTZhpX&4@B|pryl4Cfu}3EiAyj zVy~aGM^k)c{PrX<*un=OduF{o%?_a!r4{t2*7ftGIC&O*iQNWIt4)Q?QGHkh-yCLF zbQh%-7#_? z*0kVXz>6W9vM)Lq<5#$){0H|vR}-_!o<@?~>thH{5LnM>EA>#nA%{L6@>6Q}*H47c zLSFR@jLl(dF^e!32~E3&`1~n(ZYoZ z-G5hK5kLjh+pdsljL^PFAAhpjfErj__v+GykVQLujLYggO&P@hydMynIcSk^ehipG zX*VNvrqS*Ym>1bxQ5g$%^EtYz|0A*$V*LR+eQa^lUz)S!5UtJt0}n%RKXf?>Ts1+z`!1Wksx|;vZdsH2A)?q%fQk`i~$3>M97IljX9E=QwDa^h%usX&evrl zA%A}B@ch+(xN5(;Ih*~=wAZOHbAE^rx_SbI_y}Rfj#IK+p;YAi%(qIWj6}fL z_7@hqb3uqK3UWo@sB0Vr-$?hB^SkSg!^W#KNcw)OrZB$LP@W zl`Mv8sWa;9^7Rsz<3}Kw?j(Ou=-IZlTKBzr*Yw~+^YyY69Vw757aaalCk`hNq)cyzW(Hzh}-l%2QBw4_UyT-q=Ov+yd|0ViAEeiJ|@OTBX zNfaYhWSeMPcG5ygUn}AS}!Z>l2PUOyKXV|^sp~9z^9#c=8fucW7{dHIGCm9=0f+9+%)~8(e>YAkYww=27&?_ zjbhPcxSLd}`RDeM6>zK5qr9C&{x#)>g99%V?B3mq0;!B~?@ z$D{8|CDaj;B&yrOW!2$tgRwoCl}gxp)k-sbo6<7^^!=ssY5|Mbu_u-nAMTC2bsf6x znl2m!bL|!>{UfbUA(HxHsd8N&8n}jZNo*v9SiL=K8t%@GqD-mM=A-1~w1YCdN`_;E zi=SdF;o-DHzzzoVx-iIH= zaXU$qpB!g>f$#(p{~DwC!EnGD~65Kaj!3` z$IGzjIf&d>W<6_0a&4LvnHben!A%>XiDZx7?#0ZG{QGP7mG=+$5nUIPcbVHNjUHN8 zTOrw^<~yZDSGEJoD`N3a?w`Ns$MnQV%(Rlj7kksWPE=NhBNJYg$}b{HZ9lYgui?HC zh=lPP`lv;)G&^wu9t^N+&e>Y-l0_k5cT7;17?+;IDp?tLJRDyGm2l|B68?Cw3=895 zD3S=#{7r~u4S@XuLV=I5RA3+-u)9*qxHNKv;-^|=q0$*&n!Xh{_EoM!<}hEpo5216#4bciAn9w>PT(4awhQ@7+s zSDo$h&i2hoaIMoxWEfAD7alpcGii1|wucJOGa(f=-_R}r2GR_2k2x3|Xdr}2TWeo8 zH!#T{$;lJb<;CwNJ0Tr-&z;CKv)8nD7~EU-hM>IQ1HO7V5&`D(OnA%Jl}=a-F&&#f zWD@uqIW3T4vTWb?`-sC09S!QF&wsJA%l*J&H_lp__;}luN+~%(j1~y+k7TBEdnz-0+%Jd~!dt1R{g zt|(`)hwR39(o^e+53#0fh+9v|AE^VAv8Ypqh8oy~ctg+H%CvvtT?|DARUu%^+CQrd zM+(=oTaWkqMUg~wGKgf$7f!bfI|>bgB=?R~{=h*Eu5TaW-tC{|e&orVndlft-4Hf) zUodSAg!O&{t7HhjK5ZWaDIA@Vxv;{T=x!cq1AD{x;Pmg+C$f=Nf1j)Pe@sJ;C`p}3v#!g!6lz%<%!%vMI!z7G>eDv=ZpULrA+!8l39qcYqlH=5#wbo@VDYkA zn#zh@DXAmjEakY`AIbmbof+L~_4aF%3r7l=^unjaSI}F5uL{i4-&^ghxYrDHCUVRv zsnJ)ET_#vju%SWX-S;7t8B_m`TK`Mjfw!Cn_>4G9QJdIIlbtz0EDa#6q1@dr{lU6gRW! z_kf9C5KUJ89Ki@)n%uz3#i${Y7baQy+FNM%vz};wxfdEug*S;uR|Q#xu24@$6ehf1 z37ED$I9j6kG+j#PI{o=Jys7I{w7J!d$~_wB^z(F|@}=G$T>_vj#{M5%khWuB{AW!; z`CrtQ+Dt=yGRH+x6Y=(<--ibE-=UDPCp3#SsM2p5c)IRI%8N51O4)yj4tWnNawu`w zy{I5;LEyH}{8oSP;L60Yj(rZ#4`vAs(hMmN#i6Y~osotgK2b=SD7uLmN0N>vJISC$ z?v!JR#aPrvHK;C$D`?x_mQpXjPl$6H_t%{LSqZ$pk|%b1W`ac1GvbBw0yW$SIc(b6 zPun!2mn(w_XDRVxDolKSIa^giYHE|CAp-)ptW|!I;E$LKGa@_uJ&u+47YDZmIMiWl z=?-agaifHP3Ufs@*{1O(55$T&O&bjtyC-pi1crMwt3bGN4#Lcf4a55HB0`M4_8n*5 z1w#xBRB{r#r=jyGE}h$H!+PPHQ+k&L7FBToqU8rUa2u-~&luoeLBf=yw~}VJbhb@E z<)ZW}8m%wB`yG=(H$FYGX%*lQU`zvS^MB8*_cWOSgPVD};;6bmsbjf0UJ%r9Xz-{X%2Ecl0%q*`lISRrC z+@}ARjs*zk4^^g=Kfux|>G8>*wb9?<)T)JVeJOErhWBal{mI&GWS)7oJ?(n@v>1Fq zrZZ!6C!Miug2nGL}YlzR{8e1q4Yx;YfH~`?VX;y$J|In?V;xp6O}AGG7^;3 zcA^n^95i;``1VtUBS}zWG%QnXOar=ZyWn7Ne(GwC{IoIiiXwAn>EZ$RK_e182fbqq zOO<^><-8DN{4p46*^z>uv`9HLRmZ_Y?L8gmcw2~(1CK-P3KcNIuTQ{OZb zf^7pl${`tWR64IC`92Yd>?w~r*^>F(>l(lsT3|>WaZt}Am9|E7SUyTc`D&_#1Ep^`1O+7)I!Fh3Wo(x5MQ|- zuR+oNnPXyuR?3oJM=KJNtH)9xvOH4r((E!$wIn*!t*`y?#GVVW^jr!;+vlf?!Y^|I zkX}BlN{&?h6v?UbpdQAxCLxv9cv?x#w%So!`+*&LGT2SjtTnq5_1qfMk$U=LHe%wE z8eUGXyZXim<4=DKp34>%2gfK#?Jo9be?u!&Ud)i1wl^7~k|v(jOgTUN$D2B%^V8AZ zCO%E#ieXl!aRRH4Is3-Fx*)+$x7?~2k*8x`geTDLF|0zCrZGDJJ~5jH18g9q1WBUP zc!cbtaL~UH+}=n5YnBvA{S< z*=>=9celJ+2!w)T8XZ|xqHq%}=GyiVM0?Lq8D6EO2o{rv$nHjYV&^F!a^S6_O4i3Y zRH`?!ERZVgg>Ra)TK3j}R842;!ClLJRg&m|Ka#rm15*`Q7jqkGjQE!p0-P0zF3Ct4 zaqlV7t)1CY+#ndwM$ma4x&J9D67KYFl9Ah}`t`>__hp1E$GyIIn$eDC@t!b0(5csL zzk)SU?(+c(=HKgwa6KT0-)4#D4 z01@+703ja`JJvb;Eod~MUwSo5@?#V9`0f>m6xT}-aYhUb80psp#0x)CEyKQI@7A!!5v%?0`;pt^;<@;Lu|&9v z_bngP3Nk2;6_0aqWHD01^Q}8g69rQ(HP|@koQQ^s_E-KPTG9T6xQvSLM^bR|BxA{i zUZGnj*t<H-q5TD@(Ey8g$a8el{W>z_R;+ z?ro9t>9!vbZgZ&ua;#r8RVm4BybJJYH0drerOvBa7=#w1`X$VBW+{%~`;q81HR^Nc zPf&{9l=E&He_fz~J)1PTbL8nBo^S%Mr;p5Uje8y?mQo?L)-=d2Dy7O#<@E>~7AsN-eup`;Tz1 z^?3K8M%Ph^<&-oTfX36#ZG-A_yEcv64F9p?&}dgdM#s*?~d*0U$e%n|d%&ExZn|TqP-jPcvy&*d&r@QIY!4PQqM-N&+ z3w6QzJb6A~3K`mS!_iGjA^Zts%y1BW3=P$l@xpsvd34IcYVQtGeM|n-p6S&mV*j`W zq-f29^g3BdZA8r*U$!?0`a8bGHC2YbMQ_8`+zkZ__yxhd721BqP~XqhzzUi;oDXkF z3G1S2E;%zpid%Q%6DO;Y<~52q@JKhi`#^C&=Zt^9G=OYgVaI-y>ShSJ(aqdxm+<7U zqRC2XY|WD2VO3{celK=hKicVd`c|(0GrDS@UiKr!y06o*?sEi72_iph{oIqi$JwLW znt)_Ent%E(Hy9cp!wu!D#+oX#)7K9QZ{(H+Bn*?R^GGA{Bfg7V#1;Sq<#0BIc?H3f z;^OCkFfP3>fnUHx=3%wZ6j|useie}-OKOcZol9mrM!yMHK^k@hmI3tASy@afY!AgF zBds?0*%z<*rhk^Hsv*JUGg!Tfx1nY|}^TJ&POtPE%*2kts#(L-fBNGD+I?e;e z3Rd8u&T2p6zGekhfe^RR4^o%%Oj9xj2Yq(c+<+-#k;;sf7SvpPmVMInu)HNr&?cOg z*gtDS3ZgBp@iY*rk)r;!lpfkA;n6#u7{f{Y{tDWu5P&uN85oU5L53Q}eKXl|Ia;Wt zF3mR$k9TSScZ@0mC!?!2ZZ&)RqnV{(@ihH3L`6EjGiw(i8ooh~$+y&cPnF>#n1E-9 z*dOv^(vVl$qYFOZZ#Fkm+`|a5`N*PsI(bzhr;f^qlD6c_ZiIO9!Brt-pBOkc!#Peu zy72PJN?ik=IV&HY2{1CN~FFw^j5D~xLq*!{g*%a4@dbprOt{jsn8{hMz z_+%0ih@0u_blXJbFIc4#ys>c=)a=fekoGk970sQR@0xetXzAYhVBG)sK(?=B)0rza z&W?ew&g!ulZ96;v2L*mgVrpVqf8g7-9RGDD&kcoDz<>>$KiD4#1tW2q-r>`W%*|GD zq_A|0B%nTO7O$-bNQEwPO^tQz?t_a9ioM3d>(`}PT_drGGKNK^EHA4PxWc{JYW<4= zy!eXq+%fOvv@`Q2-acq!ZhtD}FX|qrecvfj3j++MuyAH|{vfFgLT%X9}e|8-o zA5oQU^fH4qftqDcv(|%3ElZV4;>mh`<&={9(i-z#tocb9N*`}Y1Kw6WlX-Yx<;E1ztI5_z8KRU%*U)l0o0nALV4kk zZFJbjrqm``BU37@;D+7^sJqm|O^FYBE z%>j?h*@Q0N3%{03m{f=2%sUV1)ybuUi}i(y5w$I5-5?81<%95Z^s|rZClLG9=L543dR&1RA#I zSh_y)U^%*zMFmq2Q!z3ivM0KsnQ>-9f&g21K$f+WVo1?28EMigavARrh_ubpJG)P{ znhDh?zRpJCca)>*UefGXciweq=EU1|O>wgYNzb^{jBb$h4av1mbFYVc5sw2I6eEn!V$xH~3lWf4p-%^dCOHg>Zt8}=hUYwD@3L0dy|wlc7P{vGdAO=Apvv_S3oR0ixxwG>J0VKA zlhC0$GrqLJ$Ojlw-bU?3VUPu|8i4F23llUTM!OF-&&UtJ=b{^1_Ki`JkjDl#R7KBz zP^WBaeZjq%tLBjo!M;rZaxZaRSbx;Rs`5Q?xW;oN&VawiV^G#jdG0gEg0Jyfe)iyf z+hF<2p=9oG#qsDPw3t`OrtRhgp65Mb5Xc?SvE@7R#IO(TcTQtJ4{8eSgAiaE$qoy7 ztbk5gku-{fpUV3{<;TK_kSOt$Z!#TR*~GUke!dp?z;N`x&s6Lh ze2?a__(rH0%BB9qO(iYW6G3b)DgHbm_bY(Hqz&2%5OT3_11LL;$E`ec32rb=&?|DYCy6;{NId+{@gB#abP64!JYu zbOn=l_#U?h;Rh@_#LEQ(pzRQMBvBadmyCz<>8zwxIEAd`2jjV1Z#vma&EiPVlFvy( z0gv&@9pFZ8xJL(RFfN_=BFgxOkjh77dHcIKMTg^^`K3YWcrtH?$cS?|`Op^h^Be3r z5FE{`Y6oJXdix5S;JMiBBAf&!l86HeQ)1|HN|aV#vR4ufoa9o-I``XclrA$N=Q#V+ z5!}|)h}&PJaf_|k@6TCV&$^61XY&bw?tzRJZ7hih{BTK-GZO1(kP*J=DH6jd1O8xh{hj)R9;+XP2-YfSrE#nhFc!L zodrLxvcnB!mEek!T!GFU)iXD}i8zLnv`05|_^b$^N7CzN1v6rEe}a z^UGQRpKf1F&X8gcdc}MlYEtkPGOc)RUaWTHl?*@v|Gp+gI zmLHYhL3F?o#`%3Jy5k&$3`hn#yk$x-Y%)I)2Aq%?i}r|)0B1WmPSx>MfgfI1#D*|h zZF2hPP^fW`S+x$(l-ib(NE!t*N&WgCxLUzj`#vzF?} zBIuIlc9)$TRu_~aNvk_sh}CLaphlSz0UzwX5kPyAV)ec->gX$Z6Pp{ELX-g#9klMp zb%D}J3FP`zoJcTml*Fx+Jl?9aV+65#f_|P?9bV-a^*#?>({+}mcF@73I=WsJB)hl8 zt3_}6i9d)L2vDj5xHDLT3>frzb8YTn(xaMHYv|UF`pe^aF|)!@d(W8J3TDnDau0o+RjNH&d*kgDK$Ug z)JC@bRzCCNSQd5s{9_>qItjg$@)@-xHSfaRI;Xc!+Tm}(^Y$;BA)yZ|#IHo1$59KIne@>s5d5gcSvd0>p zpZWE<9%V2ShDEGFw@DMf1KJU0yiO&cSRPwmycRK90aBS+db%|)PLC%8q%o8y-OiM9 z@phU3~|Zke@EKyu$J>DZcTW{ zc<+UP{LV{4tZ$6Bg1!ka+{eonz=f91x9%SdyDv@N)SV}(#{L0?Oyxm= zoFrfltNtP2;ZQE%i91wlXyRglPV&7&0RS7NS2(xvFB^B`>U! z11WGQ>KtZNTw)aAxEc189_b{C`c}?eUjm)O8b=p08d~+7ArMlsN@Sjcq=#5n3oZZs=k@&oQXb)6X8CgXEYg z{0yml;#yqeI@xiwx&(hR?Zf4{0%(93T(r4PtL7v|r^ z35LUu7hGTUH#^orjYM!5A6dk8qhr2RJWO+bex!-^a<)_cchZ5v^%t7Xme3lF_+ax$ zr6u~TQXCRQBT(t$UABx7G&YxP-s!Qg_i>Uy*#Xkd!*V-vmk#4VeXV=QqUScTd-lV* zt-U=GpqFrTQl;d)XDA!0WhD*hsf(V?=~%v{LPAfTbRipAL{|2gMunM^_UHQLPE+I4 zNUHgTAcb*K1`@2v-l-qbPZhJ3I0z!U6}eS7a`f3IGZlwXS29rJ`Usk(!owRm%PmVF z8jb`eI4~-=!g6JC4wIfP*>&8A9!X=uoqsm1i z&KE_7e$2#zINqGsNI*fxq*FUVR)$ihGTgV2lDq+&-z}(B90{RV_bWtNvO6fcL5!Ae z^P^+Bo&po!`m799a*4r|At`Rv!Fb?OpDgO=! z@GI7=Xs8;}Bc48}EKK2(_~~ZFfbu!mt6c;yHRPSF;X5eDiY3AsU58}RcE{&UqSMvY zk&Up-_60ot5rjLr3ibqtk116=D|W8tLer(e-u$^<(*!7EGZ3iZt~o;EM|Pk2JS8@c z2c$PonD%yaAX_hnXDeV1=aNCh0sIjiLeXhS3U+r$-kcH>0A-@B;RbT_O=TB3__LU5 zigAoFElL4kuubU3Xq(0rbCp1SYvjeT>))|G*v*2}JE-Ob+yG>rC?AreY&o5_UawUX z`G;h2g@TK-B*V%Sf&U_9#Vx|{zL!B~DJbv?y`m?m+_mTFn*t^M27H*S1vxKoIGIHZ z!5evMZJP@*J54q`A#R(XP>~2C+Ss!2kZi`{C#=*n(jOV=_nmkeavpIghMSrRzF?^s#Ku1MC6Vc;G+hkwisZmGwUOHq`TOtx&Yy20}CsSySE^ERhcp zy6+qY)qdcrefFy;Lm96yZ=xF^7PJ?3h2|t$fbpq`gGbwIa>az^JTHB@1(^yjte7-P zxDx86jWl4u_ju?y3JPcL;4od}1`a*qlf0T4WU`z=1D=q1C;G-I$QgMLK%^1tZ;7cR z&%*%1bUFqVT`V4(6TZkA1#oLHIGUp;8Eu5fcr!y|Sq);|UELdq9u}dK5hYLmKeH~y zGEhu+B_So{wD$2E^I*?YsQt+Dz)N)Z`l>Q?QUbZAZ(_A+hvI^T84!#7i`}@#GUe`9 zsAGFu9RNB!N3}|E;9s*4{B{*@jKLC;qbUK)BhPC+IY4%5Ru6~Vc@|)1{Rz%N`=`N{ zE19-fHd(@2(~{};yXHB7s9t2{4!uV#sVkBv?sFLO3Y2EaPZfGSJT;b*Lh^0LvvqJY zS>txQZ3QtuA zOISA@m3nJJ4_Dhe13B0))yiO-`1LmbW~~Q;!6_cuv|DuZe|m~L1TnqHZ|&)khbODQ zjhJ^U16$HxU!im~UWXW(k%qyu8*kPuX$Ml3&JUy%lU*6q2nV8@Vl*^A-T zdt$fCUU%#g&|(2~=gz{-I7JX;Kbc{r?;pd*BVK*M{-R$fmg~aCu>{MJCiWxTfhmQR zluC@0XL7Xn=Uw8zTFPPkK;Aqs*vM8ci-+HniZ3PP7p-Cj1}45 zZ3H(%@;5@68=Z{>fOe~{xX}F!`Hv5Q;Y=<-nxprQ@MF7*;1T!xKy}LocEU zf19lNq0i2C#9Os^9aT9sB(;-xF@$Fsnny zRgvzBdhOM#w@kvtK^tzK&4}Y%`Rr{WYB`tl{bG6xT1Z{X7(h|E0xnWrc)G8$;V8m7ZTC0E^ zJAXY9;dH2*;rfa#x)=Z0$8%C!OaR($gkoug2IK9uW85i?CQm1^#HRY1kSPZO3kE|K z39uz**D+*#hD(V5iLP)k72Zo)gChmj_S)BZqmuL(lf4qMj<2LpqWBSuMXyk)oY85a zJ>oBiMR463P16MZOC+994)Wops>qi#E(|avHH1I*IWRFjKr6DzrvK@Uu}qmHvFx46 z_}|H2xF|vD*7oD1PYyA|Gx45BYm-j8t5Bb3)K`0)JBJ+hGkV7WC+FgjGF^Io$&F@OhGa)i`RYd|~Y)dsV&48lDrw-KTF;YoX} z2dt)vceInpXC1O+Lpr}%*jwP*n*Jntk_>sx7gduB-7jiyENI$22kCmG>B&+C+lEED zzyms<*4wg;dN%KbF=Za@=Bo`KNy_%QG`s2l+ExF2k-E>?_zv|Y);YAjI;W*k+e&zt zY*4{4ZYAvnyH>Nk=DvEB838w#K1Ms8?WOJXBi}By(g74koK}_-5!t) zu{hS*cBI`zse-N++L1^IMK{`Lsdz*FNnfp&4zy(M+Rv>*XND18a|D+xM&H2SfMu9| zSzuDwwh^R$^;Q@awj%Jgqco+D20%m3Uz`yQTLyx^z!X^9f<`eJ*Z#6eaqh_)Zrwv2 zvWY|2mO%L-gP^Zz=pdBQ6|TiHC(IP>IcRim;w!A$;p5HRtz5?I0KeJ{N$a%MaGmNF zat`Bbk7D?9M#>m00s^pWb6cdPGqA!}k1qZfj=pz<>PIF{6e;*V={dzMgchFa^XzAY z;yeK-9g3K(Eps%XWqz#9P?nAC=>Il>jKM~B<*!z17yc;gO?L_f#@W%#s2M9rsontK z$JBE=Z=I~kCgA0RD0XwsbbZ4N7a-S1Ow~{7xNyT6v1;WK`fQ=KID>8NfqpH7#Y!R2 zvG+}Bd4LMH`rZ~j=akipIbL}<#0rvX?|y)%lw$3XC*48l!b&W60CmP*7q+ucCgA;jW+b34)b1>Xjg3?*cpr77L1ew3|SV|8}5J zKd{c}tb|#9&UQ#pL$WyFi`dx)iOeD=)}<92TU5A4VKy3wk{Ug-1}TUpF*L$gJwW02Yo?`P7zy^hF_OglH4{P{K(5_lM|?nYk5 z3H4`)6bZod;{UQna4|$eNnzW=ejb;3G3X92k;8~9S-_75BV}ea`KO`FW1A^o6RHJs zA?q4Axnumr-Cp(3tdA!g1eM@|{bx%seY*>wcCbc;wP}knPYT&RezMd3etIS73DmB3 z!2=j-JnmY#Z@vF6#?oU|mG^L*YM!eOnr0Txi!)leS$BT&C}HsN<`)2V8wE7)V#&+o z7nNcko=bw<));xNjpwn{?J1%o-UIk^Y5FKG+)?PZxiKL7EmD>4OhbZ1e@$KUhlv{4 z9%_48b|LLNzBWICOdq}e^Wi_Agz2g?D!%21M0?ASH3UPTqyn^$G$g>#N$^RWQ-Uv1 zY9L|0*ok5|7!FYkUFfuj7`q@QuOXq{AhjH5(}h;9#EDzt(j(#Fa^R2Cs$)XXW+>4| z+4(8M!i!h-TtraI^&tX7Wzj*Yr;C)(f?-Y;1r`vdPT;gf*v7!WCumCn^y%2Ts+_YC z^B|C7X5x{*Nsma9qdo{Dg)cDN&$1)j(={G(F2s<$mQ(Hv`Q`LqE*h>4j(G`&Iw~J)hKg{-yI@=~Uog zW&abVaF#c1;4`Y^j)LFkHW<82{_|?z_o6hpIGHs*hDu><3k@179-I6>#22j0)4#R% z6V$tjkH|8={o8=Zi7pVzcMYCmFPuSd4!wpNbpGJbCN--#oS_2zJ#X{pH90ynF-yAT ziqw}v0er$~sz6(ke>|n~G5!C92c|l_%j+k1_|SA?rIb-K(k(9c=V6Pj$9NgC3ydiB zAwA3IYeHrvlE8ppn$t9xZg<+J*aH;{uUP-C{ER1^L3)u(n`=^+7S@XYfzqU`2efcz z@=qPE5@)GKJT&mO&G2O`{qu%S!}AA|LVepuB+`WfhDA{`)S)|HdAcq=AFuEFx?(yX z_fAjP%s@crKwu^0Vc0|TcOJ6=ScDBOT?7@GvGX9{nyORUbEUy6f9ay&FNMYgn^ zqtk5@cs~^Hi7jrG<>RGg{X=WT8TtuSmiBEUmJ%9@^BAN8@Weu)oYb}@2+aAEUHD&; zu)%btkLOa>V2eOOb-rMLYm>X#O`!tfU|SEFKs}TAdhJ|%(ps4*s4nu8PbP|s#Ysd= zkRxPfeH4ol7T{e6*kn3=DSV~ak}AH8Yr0w%`e%!Dip6DEii7c+jGdA;V+Xa?Z47CL zbTwyM9~fZ)Aq?nn>xK59YnB*yv>o>GlU7muwY^A?;bDZLu6+qkC5p(hPemjVc`5uE zK{xAfOn#GE2Dc=mGZLd{0;c~~n1bGA1zH&)rm$a`RI7K3=Sqit87{;=cvMRTI5r?~ zi+)am6LcKqM9jc#eYyZTU`ez9mJgQJMem=pjT%-sh_$-50>AfuO=1)E&nw8C4FCnr zD6dCjeB{%u`aPJx+m(OU-BFetc6X|>2j`Lzds6bnwZW|t`}KQg{OxMIVMH-!xr>5m zChHP~%5Lsyo| z6bIFOaUmcHGTCCB<~NC2Eeg3o@OQD!JDR_u|b-xPBg(jvA_{@k>L@ zUn){)`^*wVwxcl3gMic66}>4 z*0x~94y-1Pq6&!JEf)7}uv#Yb?K=IS2(WKqTxa7W2Y>YO*&>b~4PgY9OM*%#;jqER zpSSd`vJ|R#mT;iZJa8_GBFNw`@LQHz&GLQg{oNdJ=lk52Yz^7kcbUfpmvd3!)8pwC zY*yxUsi%s$jd)~fE}xss)^yyBf8i%@sX|w;eY-;4$6s-~wt{Ga!`tG&QWW537#{srLLQSq}A~nV|#L?2Fx>YN&>HbGJDOZ>h*mu|8Qq6(~$!g5bYj0PFX&{l<0* zB8Xet)3enYeM{+ou+FEp8LGRj>NSclN86do-_s6EDnvMTs6!7J#xPPLCR#OrpW^cuK&G$-)Wy)B|0AtE*^7g$ug(ozR@kY?p0VAJ;zuuCs$JwRb=B&P+-AK;OgeT5VhZCD+3~F8-q0N^i z*L?)f^FU9Zj{@A*cJqThcM&&kdbwsAk$q8B!%HGLwfzu=`Jkh%BJU{ zoQu1W|IYv}H+Nz39uqAiQe*+JBBtSK>aB55d@Wt?Av<+6?<&x@5-0>9-s!ti=Eq8{ zTHN!xpOt_sR@a3pxSJ7J2wvJ+`5(UhBIPlk1Aq*FCRmkE9EN0E!3gK}ZNO!wDsM-# zwN(U~b^%FfG~<%(G4G;K>0Sl35-Re2jh774C>_c6A0C)x;);i=*<(-d?6w#X=2S!9TIg5sNT zEUr% z-+e)hP2!P!Lf=XLL^5zT@<(>p_>}-(y+Xj(dpgUoB?g>_xbI%ak;^C&F6A-Gbr$!l z124|@*gtfj$`tYKQfXF^BEs;4wg+l?Z^xfMJff<=JyZm&bF23gonZ5Dih6e2EyyEe_B z2)$9g*rFf(h7c_(^6Wxqr3!%OKAODuGLL&$2k8wO!QW}mm4Oae>?bFIeoCz|CLMlh zi=l$#ef+XX3``}o9gxZ-(6?w8v;P{Kq+<8;`iDXAAAp0=nX?IrxcU7smoTV+mm^!k z{+>dF*wI=@Cd4fvGLxz%gwBI&Xu9(Bz5y|zmuT@4D?wK0{x@xYcVi(b8fOMCz6U-X zy=Wv$yF?@>f&JoC{qyvte9H(Lvt2ZbG=-QJ6n-cLTuJ-Z% z9QLf`XDIn0#G7oX5xbGpmQ_r%?7PxCgR$7?+FoOe&UxXto+!dTZ=XR-*i1o!pNEyV zTM8gmY42=QM;UIUzMohHi(I9j_{m_UkI#+v>u|PtX!O_`XC@PMQ|<=OS1h^^!@0=) zX9#)OSou~{Q;%Z>eyoq&@!30imb-;{{rq06d)18QGvu_K#eIzeG%7)(W8p3h#=#js z+}B|Nwr5IUMH_J&65ti>7T-?6f!1n`p3KMjjR2|3R465qp_BYq#!KlLPG>}br(TAncfl{)GQ`xOBHKLEht^r9mh`xCf*25`nMlR^ z)qR$g!K+SO_GzaVXzhNf<$tO@z~W1;=Cef3IEE_Tu3+1q9EB=in@*n-f;u$VyTt!_C2gF_A2V`8}W>iWw-6B7c8O0A_byME7%;r}_8LD2y=I+&yggQV$?l*%aHh#8 zzF``SRXPDXcT5p&Y{9O{WsDM{AX}NdgRct3!Lu50-j{j~{{4^|^1%V(&$v_%E#nTU1|^kY!}JF}aR)yy8}y3|UKehK&@ zDHz2B{au{L(edTVGF)+Bpeze1PSt^L38h)KbKL9X;8#DdjJSm9KZNxt#O<0wEg`cY zwi+Wq4c9DmbZMn-fbPm9XKG+`f@5M^X^6GWd_&8CyFqyNiC@$4S~dh~v{Y}gH;>?1 zb4pMv)z)bBpbi^byvkZUT3k>-)vObw^*pvf^{O>_L9Hf#tq|4#pq$Hw>8aeJ2KxAf z9{XuX8mL#T=A!7`e9}1jmh)<;CobA`ypXcwx<}p+XA6QxoLrEVDYV4guUIkZ>(5YnY>&5rSCSfzPW{(U7+Sbcz}Cp9$AWW z#RU@yi3lv}a)A&Hu+-fcz2sNa;<8Rz(jn7&_BG@MDdbHCgq2Vu;P36K-~?tJ9eVyl zj=W7zB$<$G=!Kf2gGt4o+A3*ymHGIy3d$>XtY3~rza8Rn*GhduXlub))}NLrGh9gY z`J?>SC8xGp6IUlgc1Qb9%{wUw_h-*!^|!xsjU-{}C1*dU!>>OJO7YUab*5Q7oZ(@S zi|dRZ=O+ZoEG|4bSe$l>YiAjN1Ea3c-sAZ3O5-^5^^X;>23n)yODjCBy6s)7XqjRv z+*#|He)%sS(p+)h@07v5m1_3-dkvUCDg5#H+^ksw4h=Ue1ft7!8df{C!2ZgZstq=PfZv6zMe^8o+=4?a}wUE{eI#4P!cfz>Kv!728pPMPI~fd{PUWg`Jq!KR;*lNb9&t@Nr6 zOjaaY{=Vg##4c-~zKZU0)vr${sjfQ-OOB|%EDfn}ll2~y3JKkj`-s@_llm*TH?^>=l6knG>}#NzfAw zJ)kzI=zq`$6c~iIUFA6Lb6ZoX$tQhY1SW4k=o*@qlE=GC93M7NnCZipBy8fxhO|xQ zZrgMj`qeH$rvByv+gXDuRc9-n_kd~3AHIJhCB;yaRum=wac3-}BT(Q@UpYg1{Rv_^ z4RutrQFjahT&^OzesT-O;yPE{ix)D12_x*r+-)4U|1Pec#^ZDy7rV_ggVZY? z0*}v$EH}^F#YTulkJ|^NVm-0MWc2SJS;9N`Dkm^-i4pHd9R%`unR$D`Kya}cpVV_Q z3|@1KL^o;_ZL_SBm4A{dg9$jlS=)w?&>P92Sb9-Iumq?xTQ>@>73Zc4XSfHfo7w9) z{o;EedA`?iIG-Ko*FQ3u4mzNrEdUM;X7TmeMya^T!nF*%9b|#nWCZ>{)8vBr@FL#K zQB}+G;?l#~K!vR@DAw5-V-<94&{}(vW|p?W%z^6zPM;hF5<2pu@B=xLmGg2pMQqB1 zG`WWAb@Jnv>b9vi0RKe?x+CZj0Pc%GY$iuuFd8F=wjr z0-)(SjDDd<(>RT%xDVUq5fDjb^5xVaUF%xIb~#t5p+g4Bv98E9)l~NT(_TBUa_s4y zB#rLG^0c~ctxa=SwscYfyMRQTGl3Hp952d&q~@6cb44x5M~zkiR#rTRgW|4nd3J$^ z;4agOc8DZJ1f$CisAz-`}(64wiT-)|MIh8UAP&5VEaeG52F?{nVjxry;1mP`nxET zcoaw(N*_22FK1!!oAuys3}0VIUhnsELyYHEyB8@N88zSHUl2umq-*~@KXwxyi)K&v zrfY(nfZHR8o`KGMvgy<6(U2!eIZlDodQG6KFN#wnY6;WOgIZKGSc9AZM@I zuF_6y^)BWk=k10Qhz}J?cx4`XSxunYxOdK@NYvf*V*2mAC-+<$_{|hEdf|B;XXahi zH%DRLeQ99g@ihb*#rpkj+;<{l4+BLe`wn|-YiDy+itwDk zSw?aVn&LJvy6?h}ipsMo1TC+tJ~XEPgGKoAXk+An?*mA<(kEom!M=8whb{1u-~j-Y z5owv5PU&!Q4c%Sd3Xb~(|EdYJ=SsBqB?TKs!V^*=5Y@?b;POF7BcH#ZskvbHE+WiC z*zst~*zRO)(YqwAT10`)f7t~Fwmtis5#B9_DOmqH?aXBz<-$}w|1ty7+RO|K@b}-# ztIUY+_y@BVet|YyT747{_4if3YIfm~i~G_Ii&5SgKdLm{98DDyY_$CWJ)gEJsq%K) z*5*4V1JjGX2-Nj38A-{H5n4v^Za0tdWVB{>s0vL55OMua=iAp*pfgQMlxpUY*PV&+ zLR_RFrfNH`$pk`IwtM=&IqP=szEkayhKJ3nEOuWrgAQw=!oo9Cw51?+*u~Gdyv6`k ze4L{#VQSi<1*U{QLw^Zejnq+eLA1o7fp&HysQLV}U>Ce&r)-B1;@dctqc-|?#VnjG z)R+DU3RQrNZ+)5{h>Xe?=6*<-zA5GO01Cej7{ujAU3<6YkDD|Fdh5%CJ3$=h=PrcW zCO79($F5S@NwW`YhB5o#i?AjaZd3fw-^0i99Vg5RKDMx)&AJ1VpP$KQ@RLrrFJKq) z?(eX(fzLz}L?3>Bvuon#8$>x#LeAmRKBE`{>F15wk#9bMWJ0g(KPzJ>px(X(2^(_A?G38 zu534&2eU__6n>tgcb|6s6jvkdOxYT0-35)RyN|^M<0hxDOMg~96K9Vy4O92yBxLFUNmO! zPT*wj2=5)c^6VU8Ix!^y`BNnm+F$G=nis)R^8kATB_F6|~Uh?#pQ_jUkXNbU(?76irWY zVSGx2mPdCqN=%c^Qln79| zNPQ;~nkFAM`RgL(>@;@3vCyu$+Ha_7`o>+fwgg=4lfuDlM&*PzEW^LPEhn*8rePKc z`hzFhKFePD&x<)-@>*S}7uf6EIg2C(G@j0rx-aUZ$bX~QeTQ24a2@d%CYwwGZ#oNL z1@j`muK13t6{;yi|Diw3NeP2`#cv{u-0AfnVxHn`h#B`#SCg(GI5q!h4pP?!cJDpo z#aErji%YQK4u({83Jhv?Zj)vk6&S=P^cq!4V{rD$Ek`c=K+G=eCrJpa+0bA*s7!JF zxbmFJRrxPgSfof(p!tt`TjMzRu7|cy%qp@rQjF3&`#?N3vOz4?>(EG44O)4H$#;u|4rBCRT;&Qk_ zjQyr-*Gq1{EISR|_I_kF&WlexVNUQ216*R-5)$GZ>Y(!Q5uh{e;d$kioOQQD5lI>U zlk_;TC~>@*yOW7e*>D4mtH8;P0t}rAih3WVa0B~@!rH|2ICWrYovYyvGkiHX}!Bp7q0}7C-9w(z)DuNpYlQYRpoerEHQIFC8 zyIim>uvcyp%~QDa4PUH~^`;l#Fi+dpx4F0WLD(w3A+7f6>K-eT3y= z5l>I7c*v~ew)5&|oN6k?le~9tKj}Z}gMTdeNFIUi4fAg)=bq!2?& zU|#6quU-MFr5fpf6k9BFt@;=IVPWDChgBX~BY3Em@TBiHC1kr5fz6MMwRKI(%VekLJx9Y!jt9HTaAEv3bgIIL8DQGE0qy1{Jl1#+2h)n^ zwZe*H%3`m>$v_O0ODW%S#gh}uqT0HH?_m+esaTj1=cX_GCaL8I$fw^5T@@iq@o@BR zH}{A(Sm{)K?X_=ADHL}@cyds(SEwRk>O&uArKqQ$0W7 z_dS}5c#4&rBnj|@+lU?MSoeuoD+Y9uNEGP#DpKds!WFh{%9Tgy8EL%=v zSzr#OIvb)ne^BHxBomMmaLe^>xP;PYK2xMwQpG4NfFN_oe z=Wiw^X;~q+KBaCs_YK6#wH}8ppPq`*Img_nNu?sl@q5fo5*VLC^jk|^Q?Qq;EaZ_D zg}+LeieGC$UTbg_=!T>>wQe z44LAsb-lmr#7ZIy&k+y8GrZ|GJgzcr*H`DGbrg&mb+>0}sPQE9Kd{M~ckp*pFO_%C z_bcuJn4_^kKD>N+$L@UD=Lm^3!5{HjBq^dKE5u6rSw1I22pWuyFU-a^+Sj!34euT# zx0nQ#sdQ|yP)jr>9~>$MD)vv+`l+w@V$KFnc33DXONVx6*JfK+%EtG)->dbfa+f*J zldT&#Ap!7R zbg|%l3pH_g<#~n{g&emBD`@npVBC4_0mvbj_giD%{v2t)V723gg{Jn=l^4uaL#ZLg z(!6)@6a%kb6ey>j0I~Os0jTFU#Q&4}kJKVKhgz{d25=4n>B%rtSdrAm-0W$zxvVUw zT=!y4*K^o&gpbGWrM5q3|6*bJ1x>^YP)Pf$x5_hiQa=Wd$_aY(Gjn1a+xb$YLSs@9 z_b+K|(FrPrvvG*d&RNtDxyRFWm#j6Xp=m6=0R|aD@;M93&!lSjCJq7GVW*Ir+!*97 ztOQ{EO|CS%k!ja1iRHFcaaM2cJ23qs7wr)yaYV4fbijJ=NDcD^fcO)YV9RZ_oAHZB zr56^53eba%u#iW{PD_!F?FYR7H~zF3mZ-!si8@1TgmCFcFRD=Hm?^YfvDd> zRlLA%QLWs>+M6C-YDh4ilfs-t*;7idZ3PEYg$QEDio~rw;i8qmTb8S}5%J*hv=cU2 zxkVpzS1Zi~#S1GTl%Rz>yl+Y#%;!Gz(I9dU;l@+ZgZn`-5Bnq+8JckYhM3XUY`9`j z|Cqk^v}iWVWf@3+TcGC-D`+>@ZhLzPLZsqgc{wf{-mU4Ca0~F1%Mu)PV=ucKXnGL! z5oU)ogZ4S-&6=blDDvZj4L4r`|gF#bby_er<=*U&u3Tc*9j6 zS>`|z^%OBi@rp-GaVCjWe4`-s-!?D?}=_cD}acv9fY&mNpb^@j{ZB?e5m*qUur3F3tf zg2(y-)}M9^{dYieaq1`9&Ws9?*wPq8sB+LDY_(Wq9Cnd0lHa83yI}0GFwww~+$I2H zus;zu{$;cSQgbC)!-E7On#eNB3?u--{}4;(fV4#3F4O`;?h`e1VBl6YCbNlTL3$La z5=CoIlgR%7H4(OK4nmN+ibincy%lYA#I0Z>s)Eizn!xmF$x7fs0>H(jQY-GYH^+Fp z2sj?7=<;n|wM9l<5o^)mml&K!|A(S;M(h7pFt_~un1p>oC!>_@ux`zyYw%1b+ zrRH^(6%Q0u&1r3Ycvz1^iGaN^3UXj;kkF@(!<9v14MpYZ+EODI7Mvr}3#A^AXxlLs zUZIr1vLlQKo?p#~C<>kEa=tW{fQpEQwAf_QyJ5=6BUW2IlD=yHSgDp#wie?$tCzvH z*&*R_QL4yo){8)rh1vb2NVox4i2k7z|!r zW7ErXUIvssiqE8OhtyBT6v!>Kac{W78|FaSp4zVgD^ijky+K8;v*pNkWSndyxWf1{ zsx^>;8ek>$_T6?n3lt>ijy{pSAUbO@u$U)`+D5B|MF5H%d^^hD;$qR>2%uq6Xz)}o z#$hgTTI}(hl<(-!p6@+bmukzJcb*k!|MAoS}w}f}O)sd@ZmU+gtPTC;h4$=0g zFlRHxxh1wEPS7$(cfCh6l%a=ki!vaNmumU8%uA9l+&GyHT^?}>-gnL#?nP1YvX7aw zi##3ax+rksQag)6&{L+a8M(()_9mSboL;BqLY&7~mk=`B3x2U5e{#;-8}cFb6}qa^ zy@D&L>FcQI90T*niThCngh~>T(OH}iFj9e4zlrG$sidmlUCo}ZrP4NKbQ+!EwHj)a zNtd58kFEXZl}5~&)K}2mLjGk<5D10q%)*54=~0JL9KgsoWc-wBuM=T>SIY>B;EZICjySQ-1aQh4tuHz4&@)?vi(Kh+p9BNIJ^2R6YT7Xf!oFQM2@cm)z z7cE#$ld!`N!Y?lh1a=o^vy0}7Rps7EM5Gn@WvItRPR5i=S4$o-rY;+VpzPV_nhTj( zXpuCs$qdQkss~dVzagu^kP4Sc#5EG4xx1;G9=4fIO@d8`4GoF-?~3f|eoY(|nsNaj2NipxsY z%sqtxqu=8>tQ&R4^X<>aB*E!}qrEzj9{8V^Ac=lW zaT^eK`f-fYi#?ax)3&n`j5IME-}B;XW=8i-$pSb;9Q1yz!^TxWEw%a-tuEH!}UzTo{ihIu+?B`#^cIEm+?rY z5b-hjhAU?(2#9K%v%=3(a+@ok+d)IC03}f_SVx2 zeQ8u`IHZtmN|9aWI5L}+t8Mj1EnkoNN>u^%8Oj|Zsi5#n#aTJQOX=m~weMnK2+|%#iY3)IcHN<_?h(PLmz^CRl z({;lzL4nasG}pQ*h^l8YlodKkd-cnZTP{=rnQ$}T)K(X>DT|xkH>r%|+R^v$Imdj_ z2HcMtmGK3Ld7*bGk~VR{+vWG)wFUycd%Nr$&Z?B9*(h*b$qJ$eIw`kqcl|bO=RZL#Hl?4r7+;rl3-wMjA47n2c%`bh*k3)L z@VP&u<(s8dTpiB391)!v&FR9V^U6 z(J`^Vy02B~?Mv}n7zZ#bu_?QSiA33X|ImjisOC&PVOt`WB@-c>m?-mD1}%3VmU)X(M!% zH?FkV4xwICC^pkxI~;`R2lVB+dPUqGFkZ-E^{h}eF+~+7^)o9!_IYI8=)~9-eSn_| z4^Sfl^R(n>QZT#E&)bRI;w&pXLydY71wV!VoEUENnGkGPjSC#~Rg+W*=y?x?;RzDy zJIuy*^L#2il`L-$_;9(UphfR0hB(6G3^ChPuuTg@Wz)w+fe%}fo8cQ!`Zqv^z;RbG zvDJBWq*Yojb0!%j=_J0l#yjdN7BC{Bw50?#bY7_&0{ub=2bCbV z7{A6Dti~)#l%WOL&zZyzx1w-EB-Ef#M~+&#H#!?h^!@1^A3gqfz<$!MSRwe4LR+qf ze5Oy%flj85#&98HXORf>kjf3MynJQ?45$o`tTUKbuZ})m@%syk%KmLy(RmL$gyKSl z5&js|Em8$u=ejR$$_q#g1+)Sn*}j!^KA5v{2a{MNNL6cvRTeFkM9?ZaWx(ZgDzM3n z)j}LbM8##%KEN6vrk@Zv*;h>SN%fRam56Cz5U8S3-AT8gC{#g}IqQP8@nMX;XoFhT z{Ta4Fz6^lA5|W8=yfbv3=g%LUhb~<_K~a7BGQz@G2%}pB>+D$S3 z^(}EsIV#sX7M7B3ON77H7_?r$5ih(LROU)_K3?#7^!tKx{m_zp**ic}Ze7{^r!KDz zpws)S;{@~41YNuzfi6FSA1pjl&$P9|=EXJoy3%$D=AQL~W4uqq^=Bc-rykI0zThtI zkPONg8OtxDJB6jPk-C+}V0bd;UeSl&9xXcsrwe=KRBE;~AbZfp(YrOkzs8?&-@Kp; zu?bH^bq*q<*2>jfaL5NRpI-53f0;F~WN<0X}SLZ^7Mg+UWoMTWthKg_5>E(6*>RVFLXpi?g9B;U0^;!}3<>yBkhs5X- z$EIoe+cT-VnNrf2M0~`Xsrc-P&#I>eIGNxnRPj;c{BH`oNpW z+w4Gb!*Fc)CGuex^givL*qPUy1T71`wYVtPAw2$xj7K6_u4+H#B(nVDIpi+fg3or) zzMO;pjmJTvz#-)+b|ZC&W(1Y+f1gLs)%mBNra6gKh*q@RkVDbx*dMC-S2Oc;xDy1( zi-ptzwJ9~`5MsGmD-t60O7q!~HS=#a%FN{bpI9!Zaxu9u$K7kyY99QkqzG-=Cz{N{ zx%!@s-z>F-P(0ciN{c%j^}ttK`|bS5c|_JPGy|@tY$`Cu97DSU8|f+~6gVqA{a~X; zC!0p0-{zbllRi*UMMYFv1Jmg~_VY&N&B8;^^!s_lR%(}m=OSuepjWcQIPw2$7UqRI z?q_N&E0qb)bh0$+SpudQu}mw}Y9{q)>%`eZ)snwS>;Dc0-RsJjl$c@5Vhl$C_#(g_ zv6CxU@&q(XQb@s&<5;_RjH|x~qs_-Y#occ>sS1)^t!!epi^4{c?JyYk?Qo&}Dm&Zh z$-|tX4wmV9vfFtvPlm_I)J~W7=ybMabD{9E(JtshY97Hiv_)44z%wpzU7&j#y7%=|j?a zblL`1Ck>H?i&2Ibv=;HrQ+K2mkOG)x;KViPjg(Pc=<)8~o&nC?%#geyvv+COg*3{0 zuBWzzt0!DQLBGhkZ)ikquB~5x`f;yppFu#g?6)WJQOYIL@Cd7gq8Cq>&+mNk>V0j& zcdpCG10c58WnFOPVf{{I+-0`szpgSs1<@|1BOo}Bt<*Hzay0fU99pBMsgvdSID_=e zMUl0;)LPckT^|z73n{|04(K<-GRd|l>l2rgmpDDowH^4Sfv`iD&R^O6x!_<9W_Rx(6O0N2-+d}IZhE?f z*ho%X8A;f@ZJ^3XVUH2l!{0lRI(AT(d50+z6>nQ9mwsxr_-k|3w*j5v{jA|cSxM`Y zOk-5&5#CHs2@QG&W0=FdvCC>8V&dRAk%Vx5ocm%m`S}VEJ~1ZyIbb!b1y}c{+SA2z zI=0x&+`0d;f_XZ=CF=EqvH)NB?qN^x%C19W(yh637($eNO}gVTr_lA-N#p)-fuA_8 zdJY!aA(Mm4?iT`66N@7Pv^7(mlO(|T#rLwMGirI>?^9)AV3}n#GNqWvb0|oH<<{kh zi#;(SI!@RQt!zgs|1e*H_zj?48GXrO)uWv&f!>7U$wtev9}}XU0$O9pOZfn&q5sdy~519kqJ} zScP^4b2YO)tGxI=ePg?D2RU!S8L;5H*R(dyMudLe0Jj#1O(+t(rUY`Nn7j>Yj3nIX zaw@Lsk0LU*SXkPmr#RF4u+fy=!tP{UJ2&N*c%=omvqR0Mr?b)!Mk>>1-gu;QtRM??8EL z6u0gw>omj!uqmkU*8e4H%gstZzA2#%DtXWf6WghRxfcxc7c!aBgjw4z$`!-8p9F{R zkHOi4n7+414C-a0YbtSA05-(6+`d#<^|<0 zG{2ya`DOTnPr&d>sIc~-{t(JZD8#x{y_W78(JQ}j^@ZqUQfQi_PJ`9243o#lQ-%v5 zBkX`{V3XM-A~8a$K1lLHLsv`5QRV|xn4@Z)9(A-$xS(lA7&v%wyNudt^lQcb_Mhc~ z(4B6xB+9+$hSLrAUoM!<`f8G9s@^=!%9*e=LfH7D8q_ITA;+Feun@i6F(#O^5Dv?8fYL?30Z9v76Fvip@;kZJq$8jMa(6-onZGQ)L zMuHPuSpn02!I8!!L9_v;yK~vM?#eO_yE1ZAL>p`cVmJlC3Kri9+fTj;RiE}l5M$iR z8~XQ5RC0&hM+SoOt~!AgETVYSOqWjT-ZpREFBcBJMS-392Dt6p!xICL+GhncOmGN) z&8Ce$*@MyH3T0@RzhlvLqpu}Nkfhp%QgI9lteT5_rb72{g2CT?g+cafWIgP4f*F#5CEFBHSsfAjx|MX|#5A`r$|M6s0uJD zr)$5Z9u6xqp58K89{rhK_ZGy$;tQ;hy>qdvZ`Cb`k(LDgeD1e1Q}~k)d(EAAZ%ChU zYjdNTg4_IUhGF&WMThLGstPr1Y55RTS@Pf2RGs%L;pQgPAd-F2sCHQ4%h%RMu(rVW zp5?HyxzKQwvJ*H21~=onHWf?p+V-59TJZyn82a+{JM9dR&S`n)LwiX1_<=)AowlZuacwr_p0R#|g zX)5ctVek~>DJf+iqN(tawkUQ{rJFb%fPs^HN1SIV-QfI`@2>;HyTJz--j!;NYTtvA$ClHBg0nMmG<(d_w&RX^=;3R z!n^|x%Yo1eF}cGv6s6s^1odq}!2I3XAv!0xbG>S9w*R!9g;A}NO!=hlsH>AmR*gKw zz0exf;-rFWBp*}Nz`d6bFB5aHRvPp_y^fh5ZKt%Ta$SPG8iwSrPQR7&kM=b?C)6!| z&5o27&l)t+v0>wmC3R1CeO75EG8Y&j3it-x^vrQT_^I930{78CO|J3)EHhhZo!>V{ zqts#LT{7RWWR2luXL7_#v;O%~88j{3kbuSgL$3_I}X9qSVbe zZnF}x_F{glXX__mG>HGe_mANND`P$7aLKPn0==i_R)-|3Xe9x&BXg9 zvDPJPU&0^uxHwGM#^2-Ebupjl!{ueiO9dg#$rog|w@b-Evf-sc_0js&l(^}y`G9fxr3;+?Fd7}#!KS1N zUkD?I|DI}d;bVp3&j8N9+`*#~?%p}KT1Xb`s!xE(H6n+WAd*ZyrsPCnuc&xD3q=5k zcOxq~47dJ#PRoZ-t8QnWadoLEpLHv3@8g1iHaCT-eH9!bkFQmjoy9zr4m0niK<{Zb z{{X!?MRb?XLqB_Fog19?F=IQn$x9dTaxq@M;nQ-#&0#z+prm1%n`o=<5*3+u^D9YO z6-8lKxQxDw&o3uIDw8nqEqCpOa+#_9M~IsRJD8s#vjb|e+=C*@A{`ZtQj-Grg~#_h z21Ma#Y2g_i!#!{3SSlr)@2xg@n8$zU5?OeqHt`5C#dGf zKB!Yywp>!$usqb>eI*Pf=Bcrv=^X8t$)-1Co`u6DY|;P~DvGM}q@Ap9256Wr*!0S* z;R!MBzTA|RByIgeU+@i|47qS3lFx0;*I2?uV;T42HP)u9sC@Ys&YWQq<}WV;hP%RH zwRXJ`!!C1bwGjS_T@$(FPNr5==>=PWw$$!eExF-~Z{|VUR>i5&pwF;#@cf6E5)S0i z6`4?UCF=N|4pl_?yPy+%*=(XShe^302pEQ6_KFWF>%F(v%f+gF*FW>F|A8Qq;8pJG zm(PQ3b{dAAyWH#IUry*N{gmyG05~C4;_JodTA03b8IkDsw01!z&X$y>JC=`lreK-$ z5}R;qXzK2>yWU&-sJCdL(2^h2*YtskNbeNNd>?*EBQs6Nox%yfW-em|_&-+=EgjUj z|4oot6VQu2OaF5GXPPhz11`KnCc*&Uwk^W7SGR&mF0jRhQT631CEkTSI~uqq=A>Z( z2iyU~n-FJBU#zUk1+%XCGx&gI_OBp0;QrK&Jd5&Z|!-YK2L9atNu^RI7)D zg22pK!CPU(n+r(INZNI2HQ{|2PWdtYhNfodB`9`wZ~&%$%2{md=}Y{V&Wr~^qJ&*@ zxNU&NmtiqER7l4ww~pebumBO-l>nS4ZWm4cZ0L&o@@Hdy+l*3UQ}+7ZrOWT?+|qqI zfZs^=%QvpIJ^(9ooO#v{{$i4zZO<F)*b2c_2#A3;l1bzK-kTuGOUvGcBL<(n4#4)Dru9~!j9bE@Ki8@k z=d8!AY+=SrKucb&=*;IK-*qO9^RZ>r2c$UdxfnP5Ye0j}c^UK29oI`I?ZmOFHY1Q_ zE@5~f63Mk=zR|7(lW_BJQ5l$Yjw@vIH~EuT&=$X?vuM2UywE_fx`u00U~+z zY~&;+PjAWs>HKJZ=0RQv7}mFh{ADn%DaER{#iHM|3=J}VXTxWTVYodOua}iSSv6oZ z{$|X|2!QWhPK6b+CBp}y07>II%x%Ku9wGeB!8k;v{Clk~NNgVeEof)4Qt-+>cpSdO4pXtHAER}sX{vmJ zgv1D*EFNi&&T34?RB}LIh+>)c0(5qI3ip9Jfw@U_)RT6M`RVe(6gJ~!BgK7-1;bN$Ct4pY?7R&rnOJC+vH)HR2i|91%yyk`5f=mb{H+=q~ww~|* z-I+8zIQJ&0jcmMq2bsEevP6ayxVBaQ`ovyW&HCKk@8T*p^1_?``yK+bl$?kv0J(#u z=9Y*|q%O?w3eQ&4YUTf6_sc=zSP9`^9w4#FZ1}u-X_<67yGo1k@j5~)o`Cs z&;{--7263=)n?Kg!cAUV8Lq#j#rW!sK zY5;m;x+$0JXe5`jacRg3o3}F;GoV+2YXUGLU2t782ASq3Zk+&6$Oi%efsAqQb;Eip z$PoKSsPhH`K({kJEDjy|R2v@IA~K)BxED*}p-)EqaBP*G>t56n zhZ5(Q!4e+4Aj`%9mxl5xlHrjnOkkEcErOkALc7LB#sjiRzG4J_{um)&OxH3)NZy(0 zK2-*L+LnK+zrSWr4GmAmEvGK2ftOO(E#W@OWVL#&c}r33DJv#_;q7p7dA%N|zakk@ zB49*QI&*F0_a?&3?V`rVlNZ$t77<>OrBpAB1j4)Y#}|w=A2~iAoa#~48J==7I#2b( z`zW7e&qCvL%{lQ@qNdwbC6@fTu~rck*D|Kg>8&;**_C$iz#~m@C+k|kYEtM)hj=bS zMUf^}+z(hM?e1kGXfsG#yqgbiB!+(72F;;|Ijg8Eb$%~y^pd_N@k?%0MmO2F!$H83 zi3^xbK7}C6t@*mb7C3c==aRYv9ifg=w0=VA{-0~!OJ$c;H)KcNf|t+Ej3JLSzZK*& zWrN&)JVBa%%deFt$#!=bKp>4iO%7#MS|8SKaw8*V#7;*6nb*k#r`n?km^VI;tg3T$ z)u;JFac4CmoOq3{O}7|Kf-SQtCS5z9hcCJkFnIbNN4AS^e3BHRC8k~+_PwN+I2iR5 zRiERbD4*dL88E6Iv&a20I&e-f9(_g&r^hTY86`ie5m$uiYLxUZ zmIM4e`kDl^3{0ypA_I;r#{x^>vFAV}nI_I3UaVuuXxwvg55##QXGh1P-UWj29E*-C zPruAGlbA8o1je+aR@KMyU0B=JD7c~Vr2UqkDiGG^^l0w^O*41c232bSL~Y%UB^Nm} z@emT|xus?yIYtEwQP5+ob?0n#Xwvo{Zc;j!t&?!KoZuLpw;)LX>xzdhNzpET8n(U8 z__+Bb-+S8uQtzTif~X;9b&86oxHncc&Z)clj4m#V*cQlDU1Pa%=0BTu3B$li315tc z{}koBtxuU}?8AN}FsjB9$vC2+?Iy38(>C`NZX1Exxz$5)vXySsKOe0JQygh=oWI!0fP~_!k*!!Fm#KEdw3a)30cwlZlkv%Q!IGr z=WDvi`|7^yY_313bHW`sqb7VKO{$<_eSb8P+y64l$2|14IJT_5N#R|QvZ;6L-lNZE z)O9h-41l@#QUuCz(EAl-wWH4>F*h72Qzu*1Hz-y9U%Pl@1FQ(#sS0}-?dG&<3!CJp z=9AF%y`qD-k6Rrds0WG*+~<=JP8%G*WzmQSu3#KJNpz0L#!nX>k3WvX=$-&;T5`Q2 zSsJG2sP6{7nDSpVjmU4c8_hF19S!u>RAg~g^wTx~rW^3X>HAtBfr{zQoZ&@B5#pkdTBQao+AK#WWD??@-mTq!_vk`WO zY?4;X5iS>XVL4pTjqjZdW?2VcesIZ~9HZ7o7W}65|>{+Hw(i9+U*RAdj2os}( zpi1I$f}4rUNlO-8+h0N;hBU-TW}-4s2+un1m`c#a?y`T%E+b@;E~o;c%+&0z?SrG( zJH9v@A80da&Iw+hYs+SE!HD%FnCc7PampcjC2d>Ld{hAcKLEhbr)ZW@OK?>34#P24 zrlFu+M81z&M)bpH#Ky609*{xb(M?)r*#OLCYi^uw9>m7Z&vhjwAGZILFi<|semr!F z=*RGCDj~HZ1zT*Yt4H#aK;Z1LI_*#yXC-ay!8Po(=-0@3Du>Qoq~efp4V+bICAUiA z^(fA@Mw=r1M9arg&r%tEiZ^Wuq~i{!*)+>h7-b-StYvpSvk z2PrTfci1!b5(Auos*D5@D%8@KO;w^AYK?RW0_!R+leqs^uiJEZ{LtSGc6%+8SpwN3 zM+gi_6W%_tuqxf}$sBD1TqG(pO>qki#T{bN8BIT~%3czF3UWn$1UaNOmcpr-1pQ9IwAs4j z1DuuM+M+uc#xJP?3=iNss+4TuWphGk`&(P>fc!{vE$ux!%~V$-v@P3Y2|kL~8AF7A zv_U4RMf;!9Hd|px7JPxW+m;sA-zE?RY!IVG51OU2dvT;g$tRFm{yFxJ_0Ed~ue>zm zYAI=K`;Jd}8t~z&>cq)V z;+3ybt_>k=O!1P8T7u>di@XCjvA5j9yk7xnDeZ>ey6KTB?p^ z=aSo$^0Pgq{0auu8AI|GBD}gD?r|#o%&!-QW5x(GWEQ)B{R} zY;wobtdFejR-yxjzVA*x+vQ#m9w=peaYvy{q*1Ij#s{F=8~N{N0=cTHsQHSl)D{L` z-*|T$NoJ=xl3C(MQ$%{9g{<*Yf=zd_rBerqGI%k1{8crY2d-u2Y~`n>T1e=G%1Z5R%M(|Q$xAU!{HKww{uzue1+Hip684YXWyC!_{4`R&Tew5ML52^ZW++^jFaII#5r_mQXQ*<}l>|U`?}?Fo;x(Pae(F z>g)YCCX|St<2F5;IG&E#bQ2{WW=c>BHrvlA9GKP7_M0CIK$KU`(@}gRhVZdE_6~OW z>0^<6d+|h)F;aVA8a^bWYc$Jo zukg{JNu0MVFoUK(Yt?Ng7Tq@~rjHmElf{#IJA4+?1p_Auv*IL@vy)r3JQfGVcp3!g z7hb&o(l3!$NTvTL1p`-5pPL;o?ttTQIPr zBPn%3KieTd65uFBc}xZH^b-$|DA;;i4Oo(y{BMw%H+y)rW6%uK8x)oxoYZz<;6BOY zEGSKE)ttkf0%kFRcze+^WKd+i-B$K1uB3VIGU zpl-xsxHB`|aITZ%yh6fwCc$GUPeI4={|2z`-;AnM1l$h^GY_V^rN-qZzx2VB^D*JE zo+P*IK!7-O_jG9#=B>8Jbn>e!WcLFQ|AC%Pe1e7U5m)nlu5YiS>5|bNF4J526gAf2 zf>^+N1x>vGY0mH_!nbY)&8b84zmTh`2u7CNxr?fgXf9KB694*H8{Z!xr@KR!O|+S1gVPG?b(n;2{GU`1OXF z$okCEY_7d!e(Iv+YHA z8m3~VQyyc(UwAc)AIUyh&G5fQ7EDk=M`~l&Z!h#}tBHQFoU|$hm#VFJG0GsUrxx7* z?Jc$%6YXx-mfehxcW(I->~agw)z>$*#|$zDp!2OcfTH(vycuh-+uOr5%GAik5r6TE zU1d+uA$v(soJXnLvfscb4B&_K4?y@|pP{;%I|+8a7-v`J?#7cqC|gT@Stlj$+L65M zHe*{O9JUHIhP%u@@EY?}`uCmZTBu+4^?cItxT09MeE?bY3Hza9V+2SSMU?`TA<)Ym zNSuD5MkJ>9gR3rq>+W&*m0xt^RP1<({Na1W5ZQH<7GJ>Mt#^{ zl~Va))#BF&-<0qo7OKAVQXN%RP9S-Qv<(-pv3SFKr55&(cN>*TRO4~WOokjd3k>@f zp%nBtcaTY^HZ`#w^IM+1iwFHN5Fm#ex@OpjZ*qsHw-nm{1<~~7L(TQC z5*On)8MVww%VUw;=mCg914t<+xqjve9HeW6)lAT zz?@mSnj`tAeO{yh*eAFk=Xj#8-0@}WuaVKdvC8+}o6&@Gwn_#z$#XDzdx;!elKmOl z=bRWJelguzJIqf|UHsFG3D{m}2E79t1ORJ^z!Cek@5L_e(Zicvlw4Ch9>oE@KH2J= z;nriqoK@5PX>3h3JhLf4^9(IL%k%t>HoCnK5g{n&m+oRmm53mT=GRb92X;9UtLH@; z+?!!eRD{pihl@|GIrIVOAx~)@jDI+>0FFBE#qmk4AJP<;5l@B)MY!<%*s7T*mnbc7JG-OngJ+?kK&W zJIgZ*877QO#wWZu6_$7oJ+TeDs(pq?R;V_XM)W>W(9|;;GdG`#gGUFiL58m6Z?(6J z0tD&TNwlBM%n3v(--EBn2RJLHuLS*zOkKGL)>-g4xcgV#I<^` z*eKGauSfV7S4?h>79!1_%6-nSNZ#THAlXi8W=1;XxAph83WwtnNFPI?lO!sNQ~M(| zFzKy<_5?pJ0iCE;1qnjz5M^X#^^lERunu?4!Rca~I^{a#b>GOxUjm-7kf*RWz*E;` zhwc}$RfsKkZyyhrEHg&jPv2b>OhuuBeeAJktigi{>o1mAYDh8_^gg=e4#d57>4{=U zP(n`nSCD4B@%coEWlmp+T6oP`rkW~yJkL(?1TuusqM|tYdV*nUq5M;KI1IujO~3rW zAIOGd`u<)*l>M+m0T{o*%(jD%I!$4zl+tv4d74F}td!3-OP|1}c=Ru-!|0&pw~(tZ z<=b)osiGh2jR`*1z$+gLzv78IZ(EDo!-G~!~k(H7nk9IffM8}QQL z_VB$7iAO4i$7v%%!E{Hp%{yWdO*C|jp!r6#k$XJs zdQakVdI#%ASJG?a=Oa!XLk2ffQsf(bUU zA(k{KTZstgQPa@i$mzs0{R_v{)cWZBUd9{71{V{)c`)o96No+htGrP^XuV(P6t|%W zF-AVh{EoPw-K09cnCf;B@P~>dp5}k+$By1kEx7*$lfUnLn%6$R{St+&R>)2#SuTpq z4$qF>?I*A}zy291f}Pq^`@c*i$;uO&y3v(*B#g-ZoYuQY3l*WYZ=$?^+W8Ib0a>io z6SE-Bk;RdP`P*k^$p)sUC>Cp>!zRo;=}Mw=Kb^#08MgqO19V4a7d^SrW?_aDJUnJJ z2PhVQKn`bqU?-2^W??Nj`D+Sr_+?ud28}dmgpGJoOa`vg36L}_;-_EskeZ%r6Ud)x z{IT5L0@4*E@Jcd-5bsq=&5;zjOKO(6E2oni|ZgZ!`u)3Ot`jYy)?*U7EhLjo(F)-?&n%cv*+yj?9 zh z7tUO8Vs?+$>#^&Pu-5kRfr_ar$1sur?Mv04b@g;B36Aq`lphL*Ab?dadKf@-q7cWPF}|!Kl$|xJyk9FsF*=4U zH=R?qarR~la=I7@3O}?6nG@G~EsyuUh*3PV-$!5Vd!&r^!=Yp)QULA8li=|72^}#* z$i*)JBs}>k%ds3u(&GfzLi>{T&x+vD9~v|cGXm=3{e$Ghe*uwqTW?6@fxP05|YRI&^TuRW>Hzt&TL@9Z#F^CHlk4^{{6w&{oru#g!zD2;# z33QfmfRmo?X8?*y=V%($rAdMy!Y+Ai;yZ!>X`nNhbOYa9y+I!9y7Np#jtLG9iC0cg zg9_*E!(={fx#6gsd873!stkV%U32XsTkLfTn8MtSXs4m1vwWxM!H{M&vMQok3eYrn zbQw&D>ldk4Xcl6Vl*?YfpffL!-_Id3(*BA!Wl{o&e^g; z>j^T|Lo20X*S^>ki^PTlDCt)SD5m69<$3Qul+D-u87e>gXv(!8u*D!}T#|wzbk`$^ zJl|2ZDVeKEI5zEG{{$6&O(#xl)Y#pB;;Tn+GFabmJ?JvyOa*YkfE%FUd)C|$b4%UT<7u|kZpG-H8mHENb0yLv(qPBWfGESDCyEk*Yk zqMq=AC_HI9$&G)MPn6YUyEwj9-6E>onG>KY23?oPNlaQi>w86bC(w+3oeTlJ?RK=C zNQ=^_qAmjw$^*4*>tL`An3+{uLs9}R6R-~c7W*1!N2Pc3^9b#Lza${idEmZ5=`G7~ z@J7V`DkMWxDOcI&(x%!dtl{PERjsTD;`Lx!Q|qJ;1Q6*c`Eum@kC44B`4F=m@*|+G z(a`RakW#nUyXxP2G#|Bwvu4KPB>^8Ft{|{K>L5n45g9Wbf(SSBWLtT;XIB~xL^9V+ zWc3YjlaqmRe_S+Kzk@GiL)y8K4Da|!h0TglN zaTx$uF$43~Mc*_7@laREx)E3hhTScbuN$X^KZ?C3{JiJ@57vYdwK6aie+%w+$!iDV zXY&MJOqmX_UbQCwi>GY|MKo0E_FNnjZNVV(6IeCU3NE*1D$7qQJ*qA z%$6<<#ZcT(#b%!OV<*S8^JQc~GO8?`$tD~-4f;h)kX~fZ~5EsGS%DDdN|EBG5Fp zTEKC`$;{lMbkrBEQFfQRKhDla=p!zanbinMpBY5R&?GaWL5s>6AFtldWHOFC0 zds#v^L$UkkM1gAc1bw3^vg1Le^L&3gH7(L*EcFL_N5SvnW_6i2`gmQreK4@^1rk2a zN)5BivHvT~#XcAqklc2Uq_Q8dWz_~=~7J(Dx(ulX}9Y?;)fBSialz@FeDUE5;p7(Q^Rnr~`U1!Mws9^SX&b0%Ya{l}%t{WjxcYs8jqs&*xe5==aZ* z&y9~GCXb*6E#(T1NMb^{#S1iL+bj4?YacX9{xgP#79 z3HwZ>s27~t26`d^7&fklh`0UvMGV0CH8xDG5GdSmqgw(g8?rfx#3^caPFLh})Ay&-8UpiW#xe%3CT8v^UP39M~LDNlpM zGnOy#o#>@Gnw)W?l>bBZrE)Z8?vjkgb(B8^oD3@oJ$HB1a9E zOSuRH_4z+fR=fJy4RrueEdH(AeVDr}(5m9Woq7Sn$O%X|V@QK8UXJ@eUMfd{_|b&= zg_ri|vNm?H2xT~%D0XzFL>SBp+30Q{-4iQTx&kv8miJ9wj}@3tqHFrqA;-UlaAP%# zYtiDae@AWL_boW%@TNdH5|!-;6Yej8u#&&%Q1QrwQQ$@dC8c15gX7RHE7jSA5(UEuKSc(H%usiP5XAZ(;u@nDwIlHl1% zH^UyQnat}|3X+SI==6)rgpT0=?}4VUBP*Md(r5O$Uo_?56*-E@emh@WdfVIqU8fu^ z6UNH34regep$3DoISa^&D!M7-M^#G^&#agfJnTcGa{#Xtwh?uq`_dJxKhX$#^ig;9sy~*SXDKIo_x3CF)Oo97C;!W@4s*$$}jULMd-rEn1^P; zJ=RZ{W?3W|hq5O;PVA&xIi(75z36zOD|q@D+>;U9&n@>PuAp&uppGEz8l2SjZEr5D4SVbn{Sf9M8j8R<>;J41TQ-3} zyifpl{%|QuNBSrbvJfyxd?Zso(j+2wKvN|siZJu zk6gr4LapdQ0_Y+JuGWPj8T3WeN&Je;Nr{02TRy(^;LIKi!=cJH1ftL_SZFLukjZ`z znP0r=E59H7DYg4Tx_?mVz``l^xH=Zj*rpXLaLfVM@D#8ZyqD%Fo@#}|*LOaW_r4dl zS*N5a8#V)uHGbp*Q5Yc%EbZcE-aSBEW6rO(hR5^_fc6THIlstHfKTM!@#JPr*9SE^ z)XTdQntu+>@*-i5c+ft0g>N#T>(AWn9SPL1Z3HF5gyqD#WqQJ@oPL8P{1}qvJ#7n>xBA0|Ma9`aZ8GK~L;^>beV=PyC7w2Db2LrVAdrFe&qgO9=JUgQw}4 z4caczTJnFKkM|1W`u!%$+>hm2?}&G?mIT^j_S>-te(|!^X9-}ddWHD)#X#%vmCa26 zaK~pO0#PUFX8}|{a~Nzk`V$I9nHKPm+muDdd&kr*zMW(f!s?u%T{QMBG%wB~TwCu} z`Ea-ba=2SqzY!QIG+I|dk?M$CvXnY+yE$7dA$aiNEz-Ke&p7jSnJ|+*6^<1VdPZOI z4A6LXMLBF_M{KN79myGaFf2VGtq1wJ48s4^YDoxhgfGtNZYX1NYzYZc?Om4oA3{6) z#!Y{NQ2v<5`6qx%fR$t_<$?W+E+LG{D~9EWG{41h*m)S6cfxhiUD8F4Dv!2SPplXt zxqO~0rhG&uqdnu1<96i|re5~z@W@HU?D9B3V~UaC{49+&=%ZK9D>1Nl=Ac|)9+dQ0 zYw3H?u1Mu6s?X7{Kg!t0^XN|^rzH4j-A5IXs8v5B;h0Uqut*&cU2OGsd;)o8{Kq=L~K%z_k0!rVidBt{o);zZVX7xs)VrX8BqG z72UL6s;DQ@LpS4`JRY7r)pYGBLNbr>dqLW727lOHpgk|7Z;{xpx)?C&tVvxbZ?Z=9 zHE%(erX^%+d|93(ZA^(*&MmxVqJxwh?t0PHZtrqSuZQOEXald!ZHjYe_sxA*XDMC% z$t-9!!do_1e74kHb@4kk<(FtO*LY^O!4>-r*w&0GI}W?M%pM0*#O z@+XG2V!0YVk2vcRtaDD6VqfxBL5Vj_)R6PCH+T^Kvc#f)vZtx-5^!zhomZ=DyMFUZ zeFEHE&LFt;dn; zjc~UNoi24G!h$ySWM9F*iVskor+4U3bTPXs8g``4Pv3gLANwEg1q;Lj>l|;gJUByW zhys(dhj-%L>nRh6QWbPA_L<&{jmn=E8 zGqo$KeU+QJT{1l2uOG?{61;Hc{Icf{AAggr-3O)fV9wyDJj0xVpmFLq^fVXNx@d>C zwioS7Y*62d?5l-Q{2)(~e3>bn$A>p%GLdN7!m8zZLv)nw;Qnx#OT`!q-{u$jj*fJT zr8?eCb@Bz}BZ$?n-9Ctj8DR4j`IcZrjM@@(Pk*<0aBb-wx4xbJHx0UG8b$s!y0vaheKvZlZE-Ce-XTn!WlpQ_Hy+Ngy$7p{^MEX4?D@&c~+SQ zNh+u!(W2ok6Frf!Z$<&a22#HDNjnxHcZ}-BwV1)UkR;w1N4&!3`%D!#x1=`+Q@2)X zDC-;6WbGWa71O>yfdSNsiT((8AKdKh1enf$6R1;b0^Nnttlr=~U;> z3Pb@r$+-0Qhpi`NlQ7~Lvz8}l+hO{29}jyl`SG+*ENkn88$RW7q&W%1Ml$9DlXAyp z)+TL&W!w-+iaqG|S-Zr>*=cxyjYOECVSH_N{buV(FtNyjEn{?x9U5lD_89v*tcNGZ zQuF_qYK)R_jBGdfbSLqV=NUG?pw~qH8apcEl;}peW1yfm0A914xO^sUQ?SVy+}9<-@X%tmnJVyoo^9#J*yq6JrSAB3CF5!90T3WWEn+K?>=i<0|rZhYd$W>)ST3`mm+o)UOPpfybN5PbWyD`O&mB)d@Vx j@qwtPdL;dQQZ;UA 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�pzLXOM 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 z

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 S!$^Id1B{!TDZ3?;tQ&BpAhK*$Se1DY1YbWMQp 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 z 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

W z+N&PP2q-;V8$7f?w-`^UmMztHa`=}-yJ zGkZY*-|ZqJIES;RR%Ot*)4@A1@6`h*Jl=ZL$qc^zal*vYl3Wj~OZNIfy8C%5nZ>k9> zgp7nj$yqAMvjoL7>_MsYw1mDlh8S2u^2Ch-kEW=DZCj7M@CwM$AocagGwq;nBRaFVbf_3AFriD0r0xRswpg+n);8fw%6XI6*Fh9qK zK^{qOn?gBciC8>0U30g+NELv>-L~iOphNcw1S89G<;2#MV8yIeQ7cu`@0 z>r?vDO72>5vE@9k4*5bFVf!-077GaKN+HRg`W4ljZQD=94Gd@M4@kfp3fSJO71rMw zF=_gtY=j?-AhV_;5Dz{0V#U`C)O5L?ubB4MCPQPB-K|W&5)ix?je~C+Ujl{Q^^Rp- zh_?@nvFU>D#P|-_g!2hOqkC?}a1E`!!}uXZD0}W7k@a!1TRkk4+;Yst%XP%jcYYba zTGRpMWS~5%(&$FxIu4V!MKE7UT}l;$u#WeJ5jPMJX5e<9Uae*I`1E z%U8zUlQD)ei~Ogs4MWBS$9V>u(DSQNH|^#tAv zi+bub<8jUA^ez@a)r(aDFX%?VS>`pv-7m7MSzPehOAqy2Vq&XJgaUJNV96G z#CNO%lfviIBwA6xWR;+yUZ{X$BYhh(pTjPhNzq=D?vUupHR`g7S*dt{J;@Ds3CGtl z#JaeVIsni5#T!Qf$@(!({K*@{p+TqsxTBU;a%yR?>eR?pN)9Vr1qn;=@U4MaVQ z%)0Mg1T5*oXl1d{Z5wuqa6I&?Uo+=K{d9g^D|1n20td=~gt2NiIQGBzTO19y%0>V~ z`dhKp#<^O5;@Z%651@(=5w=4Fav5CD3>~fTz%tQ7p~Zo`wykT}(-b?C9XC5KWZj7# zc2{`XkO-7m)o|!AgLwi4^$cdeu*G$O9lIS&+vGF1P+)R%&M1~@Bxu_t9?Q=F%Q_4J zg1YX{G#-9~H#AzdhTW6q=lh^i4WfK6I6XkWUDvG@UJWA8i=;Wr^F}XvBZxjdabWJk z^S{ULw48#7tt!Mfsesy3>Oyo`q0-|Vd67)}pS3LGQdamNDYzOZpl`Ey|J6&c$eb<< z?Ms}cxz3Q#vn}9$(hJZzoP;Afg$W1f)j3-L{G#clB(k2#(~5+z0JhFGfqS8Z5W2k9 z<2Kv#^ZWC^D*nY9ad{+sM04}SN%*3a^&{8{)obpg;KXs#zy zgyDnA+y zn2rL~`_HMkO2U6V*!j1aBEx61u&2SfEIkUM#~AzrPgOjr?Bs zC)!0`TR)Fm1>0wQkFIG(LHbJ(-!Frkd3<@L1dTY;@|QJBKN^8p;sZ`q)7;%*ncL)X zR7+SpK3_t{Zd7Dv!Gxmp>dmP~Kr3*LKBt)NHV}f^4%cCsi5PJIhIi`D__E;x3c8`A zcmx%$USdxSJ8KFy$)DN~-9erjnSYxIBNNV8IC$g$ldskG$zUwh+J-C70V6cWu#<2t zpr0jp%ZjW)`xLn1Ju8_SZRVT-(M3Y@N+B|)KkZ235Xi?fLY800*J2;~r^#_l$m9fZ@VJEwL#*-dOrMor17eQYddRnWB1WALD5 zI*>vT*AV@W83rYbIAGrf&HsDDvU#+E9H3T~Wnc&+$M@%KR>{ngFqQ8QXmVn^*3Vj? zRt^~$X^M*+!%+#q)$`c6l+(%ap3%e(zS!;Yb7mrlpQX z9j89Embsgq20;-=$XVW)2(C$UBDD)M_t6xH;35d7MLgRC46CQu(O6+b@?|qAKKc1s z%7sN&m%X){T>mmIQ8z9-uMnFnx@_37YjEZ4dLl&31 zy=UTQFzo%fN+T%sK;;%`U3tj=+y{gApthnAoo*C4nzW})HVR?ID{+y4bZ;mKJuso$ zXeZ*1f`llpF?z_~57x#0q5wS8yWiJpRTw?a81ARpQxse`2(Gi7rV@hZkTR)t13#?G zDBg$@po7D?zHx%m>MXtiW9E{;^w#J4^-JOc_L*dvh#F|W_#l6Jt&rP9+Sc*lnN{WT z>XYF&G8|D)>dZQyELCbBW?Z@q5q77)mHLUQiYBWTcJTqo^Ff7B&IFW^n$lOIZ-^!Q zP09zW{@bI#^T5`Qd2Q6EzU`U#l1T0v?O#Ebd|=i5#$9r*$Xwj5#xw@Bw0v`8j|TUJ zvIYc{3u8++>Ai4znm?!q`bG2#LL&N4bWzlf@8G?N%gYn0=CI_l)1}@7w<`^Yk0S=a z)l)vO+9Z;(pP+#(jl(bS^>)j)WTDWoCSE^#uEALWl)=keZno@UMN5ArX_WrwhcFsQ zoJB%dSAq`uFFhmcI9lb? zDAyF`4+`df88_6noY$*#?+2fjfRDv`X2lZ_vg3n&^S|CE%M#6?jho6kLo=GP-4-W&fWM_ld)*! z3|q+LH9)!+IgKo1;%~|KO4iB|yB@~D&TP=NE8!hBxiR8BbXtjj@3}lC{j3yz5SkNH zaApq*f@|7ZB z2fw)j6jR}83T`rUpVs}>%Ky*zTr3$J>oV4USv*awzOWBpCNG4 z8Y~ua0m?lKu1rQXjkDNpcdTPCRHOhDQM)dwB-7rchW4AW^o%7^YjdU#iZ>4~EWYT% z*?Dfkn*l(E##>cn>aBdUNJ9Qf=}$aypbka61imwM)^!T>doK-i;*D&PcfxY+PL`D% zA+-Nc46)8o@X9~aPQ$kzx{jeB2XamYiofbQUQLR#mt{ZfOBj4k!>nJRV`ck4&1tVW z-8sSobPE9Lmq26cDB~WY#_N33B1j3eD*R!$JG`hCvapz5{&4X-bLR#m!0^3l%z!Bw z+;{@=aQ#wGshDF`nkEoR85qLUM|3N=g2k@dY`4_qV_Q=Cv~C9Ms~eQjE$o7 z!D&;B**5NPx(|I<8UXd#JRryqHasF+;OUMi$Wl1@lAcW4X*R<8w5w_~ET>nWWgWa= zo{ZQW>nB$=u_!rWno->Pp)ofDzQlEkN74+A)zx!Xe`=#)17kfRl~HEkGJY&+=!!jI zKN)Pe1+Cs2JIz7u#WvR17i#Im8k4NPe85w<$7u#t+fc9cU{R)RIR>V=Nx}4sX12Im z)x`H(&iuAbK7&v9KN2n?7+|4qTQdBA*xzqSc_nh3@2nygP zqWG-PW#J4~Z(C<7+S5|yo9TT(6!%7l#Gcy`j<~f}w>YyMX+l|tCy$tZxJ4iP47zA! zg`5Fq4_mW?2nBC8`9;g=OsBb6EaMpw2ixv$F34EFA!+S(FXB>xNxhlPWgsel|D^^! zyPh2wS)j6{srpFe=frbx+2)w2Lt~YMeYGq5H*G#m5n$e`M@Dn|2<}MEYXz}cYu%ay+&7=u$v@~J%7Jw& z@J3lAd6jFoZL=oO83Wa({)73$P}B+}6%V`G%P>kcXWUm`fir(HqJ?(3=Bqhf#kmEM^%3Ah(%GC9Kcss=&dryS1S`6EXa-1j%P@cB;A zPwE?o3BX{eP*b<6xyWnCAyt3k-1yF(pTre_3o@sw$4oWklpgzcbYrAOsA;^1o|Iu| ztk=UWcCFtc{dXb`d8&=VN?S?|oJ8yHPNbED`PsJ2y2EixC7(T)CeV`g6J8s5U4LS6s&v(!bwUfE*gyq_)afq^elYkx`tgVuPVKxn)m7LFF%!5=TsGtlEO<^ z&2E=WmxN!(rZ_70m=B+s`Q>ea9{5l)_!D`2EDY}=^^a)OH*5OZf`-^gq~W1iRdOfrSp(uqK7ee1t@)R?yx1gy^83us9^7C zc;LRnL{UeV%qi@=3kh&Q!b8oKsP&{jt19-RzAE-2#Zwz1sJ7zXn6f2G`i}A}lSM)X zZzRJ-u{lW2l9u-lwZ$ej*p9ohXHdAK>)E*~R}w4tppTZElX%qY#rSKgaN{|+v+Ncj zTdPgRpxTZUPfvnLovbv%IX3i9vlqc@7V)ps!cHO3TP0X;H>a%OXX-Lt=rs#fIyo%< zVII|m)vh@zB#$uFS0@yPSJYD528N3ZNkC{6KP4X$mpT-A!t)|GO8n1i@(72G94Y;4 z+9PzOQlZj0+i$I0~v<#a55TLz9XG?vw`;zy!l&5J@)1SX3|Cco9W+k%z5e@tW z4nyTZVeF(Wrv8WCJ=|8kW)$FoVDj;53q7O_By7K#c{Cu^ zO*8dmVN^316jpWi0F-v{(zg>rA}X+6)NIc$Pxi+t$zQP5yM{?>t1usywBR^eDyHJPKblsOzRQ7@LTNMCv6M)UAj5*>(y)!m_i9ejE; z1KlzuD_IVGVaXfKB7^zrtb!K>T3lhX%3l({V(i*5Fx3B_hbi`BjZZHEUpvESmb(Fq#$dMw^C&)hQ7 z(aCSQmtzpSFnr*$eCyfve%n1wR+cU|=4uvThyVB?p-?oaPBH_6EA8^t zs{;pu!#WUmP3kmAs;27OP_5E9C<-^Z4#HIH)ln*};xwUs6;4bPIf zkJ45zL~W}gI*tB3AV%q``9{ZyE)7V3Muep%wzDTCMj_H>(8JC6-phD~nTAL|9kq;aq74;-=X-pT`l)Z;#N|J)6L;n@&;f8l z2(&M~bzVKjN zagCaC{XM0p0ky~fQmYXo7;Tqms?hd9fv6;%A5Nym_`VOWu2u-hK;zV!DU$2!ctvIi za{Z@xf-!XkNPEFSKfY6~W6q@meZ0szI2sEGO4MOZEEVCTU)A|OiOlkI*qZ&**}Xom zV~F+}AKb<>8Ot0}D0A<8_-C@0P4ic}c0MZy*aS$R91)EFjt>XRq6kpZG5Ixv+MbgJ zuYrsen4#_GynYPJmW(7(k=jC|8|Jxzsb0mzb*RjNnF@GlwiZDe9F=t6%Q@dCg&NP~kUrno2 zbnH(v%wL+*17YK*{=9Xa<2=FyDO|mlVg!TU0muSABuM!Hg|wEcLeh;}TOxJhc%o~S zu-hOqj+q!&`#xMabi+q#8(bSFzu`ccO5GF)-}k4{+I9rW+!{ub)(bp3ppZpgF8PA* zF_R>gBlOp$c}Zl8HwwFj90OZ$?m`l3h-QY-8-oCIrvcJ%%)J&$S$QlSh%$dP98J&dNn51n59{+|Q?_eoH ze_bWnMDjkdoE3+rewE%(cn=s9-qVpvA8quU3!sXfgwLn}|7n%7bI@yZyEKfWbOso3 zp8}Bm6n_PVcO&`gW1utLb8UN3LD^v#0_^CBIldK4^(%I#qs=wO`)(|-*8HQR*|Swe zHd>XrD^AQv2N@UlhOV zl}qkfFn)xxx--}9SdAipbv+E)zl=Bt=pcL*cglCJ(gib2pQ5oI^ zu(@Ae&~nuSIE{|Z)_JT6HO$EVqXgxQ%w zZn=Xkg%|dIp^T7Xw}L#2F`iU053G*7H}*D?>r@-VDJx|i+@N;Uey6ZYV`0wj4s+{6 zI*;a;luiueW8r@>TBg_A(17ZnOb$jy^w_|1AkCVu#@S;T$rq!fVI-!lGN}$veC>UMD2emmrO67gp5c8Byd_f^qZHz<7!8!KQr+-hXHLI0; za|dqtN)7e9&Agr|{IZ?=%xieIEW{Q&x)~si`Xy<~0g0T{=&&NBVQ{1MrSTH8*F71L z?&|+6G4;t(rT>4Gm#&6go8QLatt64DzeP{;$7#;XtFqi%-_D`!%7!6JDH?SDPl?YE z+Vsko-%i!Cjz@jnG~tN3-0g%9?kLTIGQTczvcDh>7hP7Wx>1Uvbl9pE%h1|Y?y2k{ zoc6?%0Pa`DCn4zC7SQC-D*S@7J*|yI!k49{xF@w=PG$?;*1Ec1uearqrSaSTu#r2o zSrNGF)*w?p{@SKCpn@s%+9oo9^5dHoFWCX*CBn}gNfA*aYrciWt>IVKz=?7VYh;W4 z<&w3c{8W;>IWFuzf+1wi`ufP*m}aL*ocE=5%TQo=-~-tVm>Sex$#$>sQ&%OmKpL*K z_=^kvs)V_yXdeVFjq4nBP7be92T4>DrFibeU;X=X8yae^;6*r|<$mrlnoef2F*|H_ zOQdLqT%K~>`ye9NFowg1d5+-ZG_#x!MnoXF{B;_B8Z-Z|jH&KWl9>dBccnxHn?X#J znt^I4AM3b~VQyDj)TUTt2U42a37!>`P`AAs15x8qW?g!&H-6VYX@d3Gi}}5RZx!16 za!8DGFn+La&04+$7$Vk`D;MF#U*szWUA(9~V28gKyeB&;>Ev_x`7Xt>DFA(UNitLP zl%A&b7Z3SyC{c_}qH7B8|S|_A+&9d^L&``@=T`s7P z)pW7p15dQA%!iGeJTKZM`Gg5~ap>_eULLLk=32KMTLSc2W-AH*_6q$6VydTB9)o z#+uI|U?HpVIJYSIk^J*uHOarCb=!*@%Pgzrh2URa3Bu&j17kNI|FkJ3(13)Efqaic zaCAqMpcfU<325d{%K8!hVKf~DCYFz1Vcl6}TKgPQ<@qj|^Fb@Tg?{zdykC?!6M#^O z&s1V-t$QI@7&KzV!`k7pp|N91%38K$GJrMdi9u;@T;vZy+d(IoPnH=2`;>f>C$=NG z{X(eqmJnuyT=ZJEyJ3)@twuOm`AxpPnrg|*^m%#L%>(BzkZ$e2lCU1eo5P3Es1u`0 z&0t^T>XVM5k^?wm4B)TFKo8Rzq}moUiyUA9ciRfj*EnRN@5E>eF_II;zYN4(T3lXy z1tuPT+1(mIxOzk}WjU`Dl)FZEv)hZr^c6YgwcF1{ubJ${y+cU*RK$z^d92rRE|w|jmItE(bgQrr zWP6)K!0nM6dIBJR=S_62Tg^g~ZKn9!nFQ0(+@zAt^FC>m_~{=Dq*#A}Hnv54)pi-X zBX7yO#tHwYanTFw*=E;H!0c2+5FmTdDm~6dfCwDOJ))SN>=IEWozHLdI5J5a9G#G! zl`e?F{RotaEIa1d>W^|g%1G{u6)Vae3W#O1UDg~Q^Qd(3uzmqgx%X=FXl8O)m^9~M zd$O6yhlciZ(HPx@TOA=%5n1`HB=A&-)!X8k7SJLlA%p#5rj=^PO;aZXG zHz1;LT=!~lKf=jq$~OFpV%J%*QF@TKhRlw%;G47DVA3NT7TpsBj_7aJiYP8YG<%_T zeM8<>?wxBe&R7}oFhdp3*`hYR6`t%ojNOOFSuyer*>#fi+x^69l8zRNrgT!m!Ol`8 zporTnj} zXv5Lr;Xw6ins+!uR9crNG%5{O9*Ex+^fZDIfPoW?xh~I}H-go*Rf&>dbs6$yGs-5Dyf_~;SQYh z=k{}efL9p7i~C7hHk96NvvmY1H@pz5W=hsx6>raVuEhRTK{YJ&x5+^aHM(*rkYu^+ z8UYVFeH}Ze6RD49hGZ^%a@v3^YtzF^@zqN-l&bRc+~?!1HxTt{eJBg}$rR6^_)*FW zh4}#^36d5Orik`G%i9aVZLCODptaPBwo|ILfm89ESpa<6g;xd~VL+O%lX-aB&@y-X z-9bH59b?RYewVg2aWUyliCiuiIH>AOLC>0M-2}?2T!3t9K+!1S%OvORcvc zl=e`A&iyl&?R8ZSm|b23YV5|Xe&xP9Q#nK3L&bSuyioxFWl8o=jfr3hUL}~&GL5!V zm&HpFi;rklZ@g26+eEIRLD>Br4%>kuh#@s}ND~v|o*)d%>;#P$+uhGV;ip-krA~z)<{)oA#TS$QjhV(TKEDYM-b3w7nuoV3R^Ie*k`xkweX6kzZ z?#8P9Z#kNbMTxIVK4e)ONPk0(qY6ZrP1jKPecFC_v@+L?8c>gh!ZMSAvEoWA*W&R)MWygki+y*5j~RY)-UQbG$o{vVfgU} z<4)7I5Bv3s0uj8BZe~fZnP6u+W57$*WdVKVOc1LEZ^xBb5&UuPhTo@d!=CK8QkMdV-D%5|L355pf;VxpaHVFcB3%--E{;bA_Q zMFkzJT@!@BOtxyWJUbOji=YhLcU&15G z`X@F<`_O-u&W*g{y{=%!UW)G49<7Db< z-LJ`HMT=urutvi|{CU(TRi%$OG?m?NMpUzV@oDO2Gt5MM8DhBrSgx$h4;n?;VZY!_ zo=`Vx$E^`3&(^MeI_C^C?EJrU>;5u*o+h$!C)ih`CkS);BXFQ3O*Kt>aMD3In7qF+ zc9;p;N^{nE8@wMPc;wpWb`NIbT<^1KDL{mu#V)Ksv*&Dqo_1AYAp~=r;>~GfHkkGj z)xPxYNgJ4)ZvLSvf2k8ziya;4a3?@?rFisCp#1biT4*oFA6HNo0zYxp&BCk_6%KIq zso6=uqN@Dczq06V=@dVN$P)4O04%oZ%RoiMcCE8uP8l52w7y+W`7-*wwZ9*4SHqUP zHS9695X{8^DW~Vh<9;H^T&0U#ds2(-jPoGIpK}}yEslQv*F0Z*!{bAeW`ydE$SwJQ zcvk&OBs&}$tiQq9pU=)zQi-sFu?k&dA4`o2XL2H0fx~5TTvCJ6onYoFGYIKq0Y||- z_sk!zD%rIk=NO3)QFoL-rNTVe3g2(L6Hlg||EQk5cI}hr)OTyqBx7E(Io16iSok)5 zs9`nRPGo*15j#4((l#TEL?^^%N1D2n1XQ^hC9#(Fb;Zo#k9;&w{xvc^j?Mk=w>Am( zLSCvmA=Lu4kR!h+fAWKJh{zOvyGDR>GUI8RsR@{}%3LfZuEc8G#?5j@7FPUBU0<;s zlm}rEu801{7UJuV50{M3aC2>NmPN=5>p$rP&X$Fx2eeH^2h-n%%7B@F%!hZ^FRj01 za&W9iLue6}%AFjcu+*6aQQeunoKaMTYIOh_{!Vz~kRze}k%#suPatVc4V!@p5bAMg zsP4H5i9)&oL0y^u8#7B|))8-_CL+dB)=?V6sXP#9Lt8~qFwG}2UCVlf{hGGSX9xTQ zjZ%qJ{pal2VUjKGRFiaMsFkpY!wQd4T?-Dfp(~=ojbb;P@6;uxvj&KK-(HGleUi7k zgHb;e4@Q@sYENZ>*U6#wS-AkY?VBFw3e%ezb9jtxh;oP#G@>bO>dNX7lv#nx?cfD%{FcgaFr%o|18pVo zV^I5o6QnrwGwhXlYz!(NEQ6SGno^8vIP==I)Q@o0ai%wty?U`uQY4ihx#F*d%l+&@ z$%$R3to!vNSkKQ!{qygS+IZa#?h4}FJ;CrP=wB$&1y9Q|Ti5j7?)RMpsI{|e|M(}J zF!-{JWmSVQFld+q!5TIbw1l*49ngSIlLr0QjF+O|Gw!!h`eAU>WsWHsBx05;*L#U1 z4W35t_NF~f>>nX_uNep`Kz*i@N`h0$pbS_37Mz#ePTLPt4 zW`i#Xe;Vs7$+f;JB?Y+!p}8b!Q|&~P-CJsxM$SIRp5}6h?bCQ5oOR z{Nh&9suHy+pYiaDqt8Nmv!AiYW#TC1$3x;qE6-U|Og3}?ZWBnivJWt0UaCpBDffq^ zyBbpROsmuPEG%zCJQUaQhIpqo;W2QA9&K-Z{2-{fUrzvMmu(Nb(hsoEMpjPi zdZ$t>@cPa)GJHs#rSLM>tjhOq6)aAa`aYFgThLh|#CQFU^QPjXG}cYJBri9h>qV-I zsPSXG!|>qq?;iHZty#FW-pQM>8`h=bD1d#27*`{vfD7m1d*F9@jd=I-D#rgKOH<8R zo3;p5hG}MIUNNvDXv4B`E@bvAG7?|eFEA#PZoM(F#Bv#crHYQTb;fIH{o(8H)6H? z1L@bETV!=qDw+E3oe6f#<^7I^r3mQn(SXEa!26Ac8 zLk@A1TOz_IjwrJ58GnSqutTiQF*=HUdVX7;Tr~M6-+pQ-44hGFpjeQpVX3|SP{&l6 z+PZPussVnjw_r@m$%>PC6?33m(THBB6!P$djqMMWZ0u2C5(}ii8k{ySZT3k&Yv}aS zgcL3zOOT3TzHL4Y%t^?jh=q|Vuth&q~~NmzEdm{TkZQ@p)PQa>Or`Gf0Oc; zIL8{akBYJMa|(JBNB<$-ejicMbt=!9w;EDlu(g|0mK7#FCe!lx(%0i+pWS?VQnhrp zW#91l3#xVCQgX3pE-*hnTM|o|?FGtL8y=7H+Q3t3>Ow99rmh~#04IubMmWQ71T1r5 ze)XNjH%&?=`_+z{!OtfnX$^`(1~h-_UL}W9F-|r1LsM8cH@U8kUJb8&mEpCAIFPVk zqr%4__y?@}q$0mAasH^b_H|pSxN|z0^kX@s_@^4Dq}gI;oWHX^TJx|I%SvZhuVV7j z4Xx;H2XL^Dnvf}9)EV6(ksy)%ucW;MIt3t}S|;!59m1Bzh(4G{n5!w2JsaZqB2ov2 z8b(&vz{JSkRaWi#xr-wdL zNAgg3DW8%v^H9{x*#$9QSnoqJJ@$}kT#LH}yfUebfFI<36@ruYTfO+n!4saU!zm9u z-MVms9uPn|%v4;npqOqNv<9*(ustvnR8-N@2G*Zw5I_j{Xl@3z14&Dtpr)D3_g(e< z2nle~fUjQ{l6?CMDJj4c+1qYE#2C&jGgsr6M8? zb(O4ze>I+mX#12EW<6HHA4r$Whm(i?4~bb_J8LjYGykkV%q=fC)^a&JVPi*jhvNKH zgvORHzZkr z7!h3Z3HXTQGa#9yR4dAY7kGAQF<^;ZhQKr@>fK8hN=0T3B_nT&NfXslp*qxgC)H5< z^pAqML@&Cu8|ur}Sh%3aWnI&(D+WVS+}_zSS_{ts+9-! zzt@}r+qe4S@S#^hA3G6#zksfkmEAga^Fz?Zv-H|Bg#-5?MV(h6Js$z(>eT=?;E1gU(m(2WEIZtz#0w5r$}l`i zBsBXrvx;S};aWtS3yICAY3-tf+ljGW2EVfbB`RDubr| zc}LLMK8Nig5N#+bDf+%tukFQk`{|q;e43WdR~kj&iiNVEYB+dvx05YL0tkODm56@ zqcA#=-xa|UekO1d6EyZ{T)lr}&r{m0`g8Cfu3H`VOg#}B5wdj7d&-r~-^D1E1DRO( z#evo$!oGsa>Tz_rVt8Jy$Yqn??p#$j2faDKR}!5v{3l?a?_zYAWi(xev<) z8bTWHmj`jHc`jr`T&+8r&&A#gJ>O8%bd&&QKJlU@(9PW5EBD!nKyFc6A^sF#j`ELn z-jF4(QcE=J;{a3`_4+O_@pwsu4Sh$w-TqM5G)S4L8>%7|Yy|_zwp$}kJUO^~^Lzw6 z3cXFHbQ~n7r|Bw77G_0Kr^Jg{= zsw8?s;B@HG>S{9ab3y%dt>DQ0Tn3(OWL`@QGwbSJ1t>r~5uYCL_|B+SrAJE-#L2dd zO#{z`l|;pv#+g^ls~#W-z@hh;{ng~yM8lVFK2B?;HfeJjlurBI-O&T5E;Z8QFZQR| ziJyLR6-MHYILulk409}KSV-~l$HBV9{pnh09Uk}iurA1a8c|LQn2#Y$g8PC7`e_!& zln&4ZsTYP2?D$i-&N?800>ea>TDGAw9g$q zBtkA*)U<=W;sQzN)U4hXl$mVQ{dv=2pFpS*WU0*XFVhzi4RpQAz=BghhvTw^T^$RZ z*>Fp&E6WPh^!Vb`ri999l2$ovncxrac1ns%N?pe^mIB-RdVeDr{P$``ykRzs3Y|BVeBBnyHOhrT;XTN4}!9`X$habCCL9;#%!wQjR!ix%#^X%{<`|NK>Ey}X)AP=H^eV_qBY zdg>I;b)4LYBd1b~*^FO5)kBHR?K`_xaLHATks^A>LZur8rf)}74Co)%x3hma>uqZ> z!ywOEs-lredrSe7zY%rF`O9iPtcom+aLoYgTx&041=MHhyjZ-q9M1u*++Igrfiwo6 zt&*F4s>HCME!X!&cua#w6359f*Lq+HdHLDdC=Rmj{LX1KkGO~I`1SITh@A{nBkn3u zzVzJCsSSV_!bsDZ9n&ln?a_}C0Y@G8;6?8L8^=C^dbtG}f~5(3t4Qdxx{q~2H6TpP z5vPM7gDJDHY$pZxXV7cA17}>PbI-%o4uHm#c>)p!kXErNVGaNwO)po~oO$DNOe<6} zLiB`ru?cY5+*-4V2rRiEuWr)cRM^A%>N5$8tMmzzt}#aNt^ZR)#3o~o%w+xU_A##1x@4ch_U_GY1c3=brCQ79rQR7uSml+)VhEpYbnW>^MQvv>ijA=e}1Lr zeL%B@n#{Q=Rg3x*V_b;On!O}|#TEsLpGi z*I^K-g_El<4BQnPhLj_vh3-bf*#O)~*s|Xq8J$}4-Lod;vZseX5A7QJ3dW$qtB+8`~q_g4$%Q204f*FRtl$MrlqE}Q}@pYXKo^EUSmB_J-8F< zeH97R@$iOojmrWGeUdUQAmSo6Pa1AB;naKf{l7*FV)-$DY)jSy>aSreL1C? zM}uBfY*I%xJ>Y8>CMdWRyFccMMrBx1@-n{=Y&Q+{x7BpSVJwd;q8u6iY%0=cw5lUE z_ADO7K~lky1Y7Z$jL}LYsmd{F zW-Vgp9MM~P^qbLUo;WN3k>4T%ne?Wr-MU5Shy%n-0?qA^mZ0Ty`yLrP7yVy4sa4A2 z6v5%P72sLMJS&?x3-jE@)_RFhX4|DPSf%mpSMP0Je~GWz@lDC44D)Gd=5{;S- z#1IOahDADqf>Lfb|9~3C3E=CMV`fo{#x55!_YGyUR3Ds&4u^n@H9E`yW#t)*Hb(L4 zFb`1+t-^expH8GfhWuSZpa)&vd=CydfLknB01w)Z`OTxOBI2t;1M6%KdjTJJmVZYvT9>2tx~G6Tkz5A*oXs z*Lr@dy)V3xC>b`mX`^6gOiY>e5pxd%mlwt<`B6%N7Qsh}7K84MhqDjIb%bgiERko0 zTp@AK$o12b{POEQYrrtJ<>N&w5?`(J<4|~x=q{bC(2h;R7m53n?y0hm5`WdJ(g}t) zXq#!@1ckN;d7j7%@`6puN}{8i*PE*hfC!yLFjo*O ze@Al1!_|F=5|f78h!xpjg4AObE@6i5 zmz+5hsOpMm-b9ru{0B5>3W$N`-azgqlgy()Y$&v7Exb;@lt|m14Hm!LJg-;=#Clr@ zHHA;PEZg+a^NZ8bm@p3*lW~be#f7XvS`NE7a@(kTB@YH9$4A#NU=?`6r(L#!4+99` zI?j~Mbel-Am@{lQZMX4mc7acr!(dqpd!Q2@9u1lr!Iz%@OIfQfD3GQu<@NIwq?vd_ z3GsW$Ch+nd+tKD|%}3BZI4A=4>w`Q|gJyw~Yb1#)HH#$RJt4X;kRIV~M@k{)hbY#v z37&aL979|`K4P#;WfD%3R4#4sMw%#rT*gPYq^`_NPeP=XCFPL-2Ob5~mO?KxurGII zJ;L_6tX*3v&?0HHJSADbi&tw4fN#BxPYK^*D7`JTFFZgd_MX|?&b z9AQhdDrVK>6Q?DX$SK40Luz^oEdJk(=cjpo?znb!KXg@SzrDhiv%L#S?982|9x4#m zapl#?x7~|LXvpU5$Z>inG8N!wONhrIGSsA-mL9^}q z2mOnYz}4uZt<~tTlDGUh?H@pa$pKc%C14}Rh@L3b?b=TPXY}PId2T+Y?yHL~1N1Rp zYSxu2BTHJ^4PnRrla3-tytAXC`4-{NKWag)jHBqm|9QE%S7AHPuo@H0{US}sqRSEa zN^lyY=Iy42YNR<`ur^CqW9{Q?>|L%c!bQF!cO$Fg2p;=G&y09jW|4&iXm~%VTG+^1 z(vXr7z2z=G=-dVdOw;G~TcMa)(0G}($!cL$4`J>V@|f)PWl&6}>)caR9I!05uF->j zXJzfj?c^rt%_|5U=&EwrOM0Q$gSxxm*9GpXA9HqbqCsOfh7*+J@|9veRaa$#)|h>T z9~%6u8(aGvk!{w5s-i53ax{f6*l(qJ1PM0@XSjDWl974-UmD;Yr?HryYL17*dGEPo zRd9f+3`|UHkJTkSYV55!$&O*$aje)1|8wIa4U==$T*|H^s&QU@8VzD2Nd32K4jB~S zgdTx+*!JTr9RP4H_kdPdmvJAo^Zqi89#IaL_qyfUB3tv5i?JqN(^m#2-~z+X;V!WP z%^>n|6lwZng_ZR#NpE%HIi>con=AprlYx|r#UPXYne6W{2)qdB=4i*nrKYauh`32$ zmYmaM>_Fk05_uGrn3tVpxFH}PM zIHC}m1QDWXXC!F4?vf1Su`z_vdl3z+&P>iHhV~}BSp1xXG%Uh-W`pm`#cged=w)^R8xsVrBUEf$R!#jt&wHq zy0ddaSaNHLqP!aD|5*)HD3p`p8>?*uWJ`pu*8SKW!~`7JM@JwR8i=0idN+D0L+Lo{ zY&jVoAW=ez9vWq(;TJDKX0y~BWZ>KF375xtgSEI0{LINpe({^&yO(N9({VkK5S@8x zvK|<~k4#TUnoa%%c)^+T+xGO%1FA=fCstP#aVI%w#bCzCpWsY^xsVzWY=?;1RjpKRhD#qW@SZ84@37A)1{hc(~p;& z8Nom74TSwP!P>hw#Ww+x8+pK8xjpO}bg)rdEbGxGY5U7j->iVX6GB5KDAL%=V(p6~ z=Si+xWf`SDwa;~B&eXSInH8jEsz`6So@*KTcb_KT`PH>R>D7{BIEvljD(g2zjXDPz zo;47AOev;)>aOi>Vv2dn-MnfS8`Q}*u+n;yML8AgK;#;I; zKY@LDKCnpeoCVi^kVr?yp;1ane+>mX;`i{~XGw;JTsTL9o?z$CAnkVQp%9WWW@i_u zSE!K4LX5?2C{WJ`%L_;~B`zqv!I}K6361CYW&^V3$Lh(lu0Q1)%zZ zURbXQ>mGcP7{Fa)O$IO6T-9ANAe(PeogdD4P|JvuolD!l%faw%qzF}O!SzdDvp77h?6P`jvJ9?)gGH3o=oq;8+ z3|g^X*^C*TWJ(49k4I+5UNwuQ^uF^GbiAyh9Nf|H42`))9Q*bJ+l_xSjVFy+`1A&wz|eM zWTg)M(yI42KomOvddBJiejIDr_nz;p_c=kJR@cYd4y99bwkUogt6p?4t@Z@E=ZLQl zt_=Q*Y_s~M-9D^w-<@1_X&AZGx*g=7%wi5i<%TTJGRDEYnp5pG+uBrr*H7ZO<%rNR}p~=x|z+lgpzZXZ)Bev#Hv6_!74nf z?#DCHv5Uh)x6Jg*^oxXNba0q4A^$fU@RQNzho|)?y2aLFw};XR-4|16dE#su6;h<; zPKJvu+Nad4CiN(aP?8Qyyfn2jcv~d>=FpM!XpaQ5kyOf?e`X%k@Y(H7Z{=n*A}44< z0?7Iakv1lmU;B%5D@Fq{WYt$bhpIx1p(rSFZ4b{{YBH<$^dk=9!dn{;|K<&~(jDlH zN^@^I&%jQUpHZq}r^iIb`72zSHe1L-m^;na5vPSuJ6q_&b8thy-Lv4-EshP^$kSSa z7=hAMB>|QW+Ri?JVJSnk_Iu0&;N=G8I~}z(nsD<&came`=B1y`aXnkcoKyiJSI;tQ z=nK20rf(iNcYMp@VPSVk!Rmd=T!e042f3Y5M4yb@IRm~jUegW?a5oEw&vfCfK^2U} zs+%?$rtP3^dSdXD;SE##-hr#t55oAuZ-d!^Fg$#@7H-R5ONzeaBBPYS1-=(*ji2!zI6LNak;d|vYCj6&m6>tw}48yKTaz470K``1uge7EUhg=lW z9)tUlP%Y;jjN_x@>pUq-U>yfUxC{XyM&7GDBC42Kb~&#^XC3oDoDjTz8!oo|u*guY zt%X)B$qy&V0tCMA>XUXbXIk4Q6!|nBJ%l?*h4KkU*-wPgnDcrPI|KyFJ?)AvNfvvrrdPkyp0v(=nf>Fg)tR`wk(Wa4le1QSPNT%SX&{TNUR;h!lD!C*-%!_5T z_4JDWjs{1GQ!NJoLQ#gmU}oPQ9jS+OidhCPRp*eWdQ<^px(oA*DLmU>cgDQ+3%ywt z6zd%(b)g8?<^I`ei2IDbup+qQ;Vmj3Ihnab>GUUz{r+4{=xLbrK5pi1d=r_ z$3=NYz>yg~8{ct?QlwsH$@G06DvJC0VN^Ge@c2Du?5RGeW(+avt)|D^+*%0zp39hB z=C%%t1D1alI6IupC<1Y^eMqYd%4t&3A#%&t+J1=Y=rF7c8Ha?K@-KaUzyiJZo+O>R z@w+@zDetQh6*!8xPgm60Ls(==*tm>Ft7aK(g^t{RPWqW!W0UDcZw0G&v2)MS2M_gi z-u0&|Alg#KYArEIrVg~Bl0LyYh}9Xn2DLTsrq9$!s}T9H@@l zPcVF^swmY8sF*;@^s)4w{egQ|%L*t%*-x!UM>H-_JK)bhg^b_3RhoRO8oc(Ad*I?Z z2bWPO!+Xt;CaU}H;A|suo#u7kKFg14r3c>iTV2>{e=8cy8QNf0&ex&3h9y84h(>YSFK&v2^|kCiezxNz$Lc~ zktMGg^%LIp9e%?qj-BP>1`Va|Za@{9IQ!xG(R;(daAfQ?8@n5J9v+-%P@$TOKV4CO zp0N!niucx!FZsj@2j7GDeP^!WWP{w(!JQTh;e^3Uz1Zz+gqg@$+M_&D=popjwq*5v zptX-TTs5u>!W)KwVkPx8r|zXh4J1qDXI2*&rsLK zYRC515GEOfTy+y zM5J;FLGvf7=rMVA>t+$&+oBAKP>BW2LqQF{w%yoL( z$kY&wLrrT|IEMo5T!GIJ+rGS?&;3ce`DMBUDhV%&JFF5cRJxpoWIOZ5 znRu-(7>3R*p#Bp@;TnF1-Z%24;SIs|B8;JxNlHLR$5@HQ$?D^49I);se1`vR#tRdQc2^(r||=llJrwn$&;88 zhcE3`_9}upZF;P7vV4p)r`M#^&$fQ;45VdkgG+kT0)sqTkickUm}_S#*wsHmrYB?r zpId^OWP7T~T2)z=g5tF-+GznD&>y{w!T>UH8cN86KGp>kpa6O=-J-e~IwEj9n?6S~ z<&#EUL|*@96%ppLH;5Y(d}HXRO6H~ z8dt7G8zSU5%T|Uh?UlW^IQZ{&Xpc<^R@zyr)!)9>Z&B$PIiq4RG*)k%M_BgCbo+XY zMh;`#t8xVs++389 z*05BHb*Js7xcQ*$F}SOK@rp%VQxX6cL2~q!V~8hiVNsaLEx`j%OZomn^Ze3P7xkfD zz%?&u>$s5~v^uaBL*rQeN0Q^IxMgPrt#Ci)J4Jqp1J!Qsfk(!-hR#M;!H=dgAKK6S z(n+u+SghTa0C?2k8goIGLpuP%4ZGzLWix52=ZKI89$M9ny~5K)j~*nq44f{MVl(ca zo_zd_*h5a2hLW}lPV1T}zUh=EzwG~KFkm~->N(2!9m&uqxD_Z3ABeV)X(5@kl{fx$ zCvT4b%TI{$KN5w{4zYzD5^EojU}uOR^YSC>F^u>cSe*I#S3t8B@dA%Z3c09KeI5U){P0AGe#xvz#*e8$Z68*~=yK z@$J&6vY54J7zs=>=|yXZEBwUp9=extNU}r*!VnDd6GT*0wx|N_Hz;_yZrR+;JBF-0Q{d z38z!V-1c!+g+Y%Se>>Vc`Ze5hqB`pUNI!UQD zMFGpzh&(&z5zvPu!gaSCBXV6}Daim- zTpZOzLPH2B@nZI@TM%Fu_+|M{Fvtt;nT`-gdtNb!fT!|~@_V1w#4^teZiddZa))Vn zd(hI-ZF8kl;&@}{T1BcCA-yu^dhe#d^bNuu0H!&BbsOin|stQdCH}B~;n(shQ&%x@+WG7@I^kpwef4|mZ zoWgLzu8u;f)=Z;c?V@_3`L)L^Uw!e^hIhqg^^|YEUsr&BPB)B*(Z4N~e5SF^gDyd9 zE$q@yrKOS81+gx0v$n-WBN=IWtqO$RJL2)LAsM$h8pb@t0?|_WjTV&Olb#q@7kY?-MBAU$B_Q!O7p}=S(}Rcr zfk&$76C*eYPZvs6UGyek5HmM@FCjJz0VA!Z{Y`4T)fk>y;{{3$I zIcTBNz3}J%(iWAAq0rRi!7r+f^XRG`YrvY_Q~Nzwm=O2m=M@E0-%KO@381=h4+EK7 zaCfC(6XCG*;d*bf%9S`1E^PK$o7Frv7jPi`ySR{fGpGr?^zt!km=V0ry=b z4f-Q;;E$939=e~mbkS=ZTJ#cmTVz3L#8&&%!IFugFAM*?2m(_)kiKd)v!spp7_!iVw_^J}9fd+K{U)>39HDyZ74Ip>a91gvckqyBephB6sT)X3GN zgzaS@kerz>cjNk;Ku~=NI1%%@Q&VBj65hVCYi8d<>X(*?ZkC6m5yzp^BIZo(XZ(Kp zS?Ef~BS@}3P%ZSyD~`_vr*cRbz1a`iGd;+WFHNUGGca9QqAK%E;zKOQrT-=(V!Hr2 zNd^Sl7wr|*lReR@9fVgXgI9L*4z8G5RNsytX_6kGCs>J@s1ak}^rpRE2o67t3&7P} z17bT`Tp&8ZW7+qws6hOO0IA>jMhY6zz;K1}0_V4z_+r~|&{1SWBkzsQR$pE+9ql|B z-ljRtbK7X+H-US@)nq)&Pz$NAQOSS+@L!dKtD1}@06s#`cu})R zG{HfyA&h=HwP{z1OWH}87Bb79LJ_MD&#4Ts-iITG`U z6&;06(ahXWj`&S|!y_$~6rskS5fQq{Yet`gFabJSgF+c7+>hu>q0;jw%yOedCBwc( z!i4XcC|w$HpMnJ;KBo3c0HG9P^_?AzTYhU{X%32;MSQ58`&=VM)Ay7T>i>(T*pI?B z0844(f(EO;BkW;pU&8b#Tn%HT%B50$52WM<5x9^24AW@S@3nND9v5f`+ZffG759i7 z`@YWK{>E%!mEUxR?_RwRLoqxqXT{}gR{68POQ0)MK1%8;Rf807uLZ0P#=Cl>xStz@ z`t+u_$v-M;6K`6~!NQZXMr%Jo#99?3nL`{w7UyeUi{(yQ@@L43FAgH^-~s%M03-a@ z@Qw8f7Vn@=VS zR1j*h5sueo8&xIE<~ra#b7|vOc1%yEy|}%vbHNs1`vn}DAgZ#b+lmf`A0tG%38+Z% zb;3+Ym1^qK0$!j>afjen?LDoLGGe<2WfPoqVEMEs4#enLu7n<}H>(kvh}&bdMc&vV)ymt7dzxE(FCmQG zbZ&TJB?h=~zBxhp4kWlTLQxoLIJ6-#NxGM^Y0x?(IWmY+>5VM2Ue1G5iCCfk>t+nj zPxNKtI^3sOm|>sHf&;;B-v$pYPy%&1Ts~j1JPqg&4O{IY0wnu5>ksC*HRWs_x#^Vg z$s(1tazFujACw1@ZMs;!yR&N|mgD6yP_1#E*Zb&M2E(mOmAoI;aZWRve1nyfTEy%L zg+*sF8grEcj4IKCYHw=$A2N0fi+!|Vp5`NQanfCCCA)7dRxYK8VV4rZ^m6A%WP|! zxJkoM-R&f075xe*`nrB#4ooSeUwo&R^`dme-!-Nsu6Y*1^i$vqMa0|I5pdSD<%mL` zBHcY3{fEs;=6_FRyWE{Uh9hoe-Yz!1ui-0*n}9(kKM8BBx_O`1Npmh3G5! zT%AdM#C(yjp)h%U&DikuX{+0a*ePC2uy9Gd9<7+e$9!lhKKey-IHDNonsM`SNB(zL zgf9fP;hCSQ^@;Ezf!@ySdmU1-+;t!9aux9sCnVOhwRU^grkd+2i zT7H}gNuGD{-nSWU%bjA%+@)h{_I*VcTM9v>7pt53uppy8jIv3Z?_!03#GNpyVgP@z zE$~|DQzVvEUt)S>joJyVNL{T=C0h5QPLH(I2vslRtDsHnn{o}B2tY6}i>5j>XM7G= z-ei4W^V`a6Jv?z-hf#R)Q|Yx8wil$PhMG#*XQY%3XAke-K6uzEwd9pO+e;LJ4r!)1 z&YOokA{jI}G|k%UtCV`#LajG{148*yH7uZu?Cm0wWpI6#6i6fGbDtcsGMWMu4eR&Y zzQWV_YpCBSXc6SEx+<KQEsflh(Bzlrp@)P2KFt ze)Q;^zTxH9lc4VIb@82k_KCmXkbQgV3(Di?D8L6UFjEA+3j;xrRu2MdmbCRMs8^AG zwUar>;L9@(z-c@WtlRN{9FjakHKldg1ARict(G1SU&An4nu5&+FH2`cOp#G^ew|S& z{VBPj$LS!5mJ$-y8?tJCX+(JVpY&3?QZtrwZYRS8ntBc>FK;4d*r$6gY3jTI+PE4t*l5q0;4N2+|2!VPO7#d_ zGwd<3?qUDy=XF)8xoflA(QW_W<@S67t#;-Kc=MX|kXf6C3c8qyC;tY>Xtu>p+Se`( zh2u{yQ1AcVDIPE8;P@bL27FLTw)={`9(l`KPO9}?YaYbnfwk0~T6Z2CT~0>uS&gY5 z3r;v{Nyw6`WUPK4=wk5@0U;k8 z|K87}BWzC>zfhWKirQcFno$eHNB)_BT>VDxFSld5Y_+3H<+Z&e#&7mo_ATw_`6$HQ z0nQkFhD<8gv7#|uoqnRQGFwj4_JYb(V4XUpPa3A5+oT1jHN+9m2PKoQ?Oz928{16n zx#VU-pR!?ja*bmERfVinaE0+}cL79TMIGv)GuZlk>$9mJB2g{dGsJ+G$TE?+j1#`^ z5xTX^4c39gmC%}fSod=2xtn}_o>Wrh&~%C1nPv2cBNdDW9M}RylAX+PXX6I zbZD7pr?&k87b_(EINiJWeIduWw#S%flUdoKUiUVcq_f0cl060It5BOP8ri%pkUM&< zIfC~fNitOy4}6pRyps3D@=x+(;s{}{cr00%aH6}{iNuINvUs0-`!D6tu!&R;TOk`R z(Z&rlUOl+3C6`CbK1$YIOOMoo1v550SqvoN0%KGj+6^Psh*qicrZrqutwAl2GHj|| zg!`foYmp6&^VsZImDP$)B;L$%AVqcaTZoC=R2TfoQ?^}c1)g<2SWgx~j}xc>Ur%z! zB{Ae%t)9K?m>oR;=;mm!a>&qynOnu-J{OkkU!DJJNY6YB#L48 z&Zcq^dXU3+JOE6Ux4U&`~~f>lB_UWU~r0B zo9x}MqjjgY<(f`(hjInIJnt18Sg*LPlj*x3WzXzhy7X6i87N!Qc*c;rCiNO@k*j`e zh(iMX@u(JFq}Q~g(!0Vjv`S09Q&#fX5e-SubOKgWeq-+~vyR#WRh`eR{*tlx=)5*u z3$}Zb!ee<*!RmCz0>Y*-1!rb5kvh+ymhJbf=vwENNL&+kU3!wj!4Vei)rNLgg$EYd1C#)JhzZ6H> z5TP=b!QG5wQh;=)3#F#1i4Gw$Xd?T`)qqY|BfWSHQ88{ENU(LYvCtk9Z4S71%u^8E zv`iz+kpi9(LeJ)pwP@FT9i-BM>;GRA=!f4wXe{59+<836Mf|;0STujw)U^SxL_bm* z^5+#SOw)QUI!zyKtnt>?ezQQVtJz{><9y>%G*2t0g8&j*bqvO{SG^W+dTV7sjU_^I8V1Oji6wsR%C zVTcuzRJCDxo>2^PqaL-_zDV^b166kP(sW{ttof9i6zxh2s+B%tVjkk)^-BeQC$ARs znjwMjG5)GI8KYmjX-!9dCB=_!%jrQkLEpA0W+4*}JfnQzcuHK&P%TIAIQih|Ye3d= z%z5ax7ox=J1^-@SCyHqK#l+;tWAfjxEE*| zj7&6mc@e6@T-~Hi-HNjcp5Zte83Yh&f+jqAamOmd+oO5-8|26}BA5MbAqnvwDfTdH z;9~41c%>-;a~$z1pmM0xUfkDx#Mo<~ot>2|;-NyCS{R53rqV?85sFWx!sOQ0KI=5+ z$PlRYux*+GPTJHWsk=B%D<3+*Q9t6aDCuUV2Hn+R2>{VXA2t)A4?g$kehVX+;#WJa z-dU`>YxPncl+%G0Bl1mO79W}KpO?0vZ0O-;0Xg*`!#<~1_Vw>o*v=#1DHco9eP;!U zN=EPFw4fK$ymxTT^HKLXnenk96g-2Xb=38=8r}VxvJ;G1HQ3$To4IILJiPp~FUQ8m z;*f0$z&>1#S*Uar+Kq419rMr)H^pLmzvxurscsiS6J zGAunLCtbcL-FV_?r#90E-%?3<(RH@U24tk|lVuUC*<>Sx5Z^NDX{BubM%8 z3Vb+HgdQMsm^@m7hkcjc7ypt=FbW1!jR|;+a^xiktOu~HKi8J*#WbnF#(r!oKg|(3 zAAjQRBovPkr5W!x##KwYquH%C0L0aFKB$AJ;~vE)O{aS;GER8h<>9N&gUyU_z|P_0 zmb!-_ya*P^oTQ#wngehQR1Gu1r`>nnOYR}8>l{NPOTF7?X!hCGlq)gmH3lA#L+ZvA zmT+d?eR-dcPlUZ3 zyma$A#SS>!aK8vPyFl5&WKfa)vZ|0qzYB`+j!f5L9Fq+^s!#fngMXIs2RPSdl*)L;YbgP!( z@F)(q*(_KxHX8-Lf#6obq%xagfewYcfiSmz8_{S;c3?zWmv{99iRdEKM{=EuD!R8D z`tYI${Y|gHv}c~McRM9G;DdK>WXuzQs1;+cIAPE!Kom2`_WHTMj>>SZ=>QF( z`!a%`-Wc}QL{^@B3da4@*J#w7om*F$Xt2{Qz8Xi-24UXsGvcDkUr_iH2aih}4@$s2w3`*u4Du#C}oR_+(3OPDO^WZUv;8dg8Wr4&xt zJp3;0vm81T2@;GjZ04_pDpAqZgB9TFenkN1A_;ZxoygqwsM|~jC1@zhOP3r|PP{YG zSogtxrwHSA^r2w?nT;a{-9PfBtLg!a)OMEwU)}!VXC>nTWTfFgAkz-0A>6vkN0EKC zIC^UI!^X#WPDG98%S})c`HHZz}Zyq8q93tJU`Z9Sn!y!&1p2L!p8v zS|dT;Y-7dD{38HN+N-S{o-&%w{u&P(?#B9*?BGa2;gnqD(dk0iuwl>3jpGeE%km=^ zh*H1um-R{4is$_9{fIQr+>$x3w6^Z#4X-F@X&)VTF%o<4I&n8h`#O6>fN9SwWCSgT z5Kx>|ob^7sxqM+4Klo$Fzv86GBoK-^VIc7fDK{w246xg-f6IVDItX;pK%RMt zL^nvWsHUfxjj|u{i2UQtylp01QHxQkQzJPgpN!*cKPWiDDD)29?rzVW zuED^g{SJrbQBubsC(FvKl3+o4U%1>?kOw(5h8@#{4J)I#v2?>j^0wx11OQxAoOM*y z?kN1ooK!w}D^X>EZ4~`5*6MhW2#$2gc$Rl~Erx=;9XxwySFn*jQJzkky&VZ?!>s0k zbZ6%p&G;C+Wm_#Miyk+$t?J1;LxsL=8&Wsy|0!sr{qW42QIOaYp-nlP(qAEL&Pi=U zPlW8hCV{LHj1($?$);<-Vp)tk49;FTXD>*;>FB$&a8o(T75GKl>{8>ll?7&Uk5)7H(dmf%Gp}3^{d2qu+4whDY2C`0{LSeC8LK*y}) zH6&BIu#`h#%mL6VY~*S4jFF|ln))k@6wIBgg=E8Z8TznC*-I&cqAc?cfi^aGo1D$Mv zs>Yn@m){d$ZEk{4f8wOCk)+$Ae`^IB!dFPD1lr~-s3M(IDZQoE8q|SVq^6ld-Le;8 z_6*<$veL_Qa#v})tO4L3Uai8jl(x0Kweia)IQH0LS6U}nP}blR{3V)LQIC>-44hS$ zR(8nEOz5I2ir>$` zKf(cHC7jy-!VBb)ES7LqDZSDfm_5LC_R6~_S30%P~ zk(}raUkIVu(y2x|Mmz3#9k%3n2~Gr1zWT-477opW<$ zH`z}mVuh@=zQ!6xqw*%v6Ssu<)HtNz#%ez{ShZTsYt|rFhEB;^UbG8rC9~Y8cEFPc z%@nYetbIV3zzuus27rnI%dWO4s_B~1Yo>`^VRQw@lY@2)*?x#Se}!lM4IkH(ik3?+X%tP)?JRl)QAXFNHB?>rn(LWt7!y zcFlX8Mf>QX7Rf}9$c`Rr?H`E|KYp{C5HS$!XUEPEVhhQ=$=4ec-XAN#?nodJJ|S`> zz~|)>yGPM!u5pD52Nyrd++W#9s^S{!n{xNEA^}1rR!y5Wjer%sj4bkkut4C1>q{tS zfq!ppKSyXJ!GKaj4@JTC2wdg?N919!aECC*p{8b8W=ldOCYN)M? zh0y7*0`&0wvX5iBMLmoDBg;-d3`=0%<1)j4zHXyhp+UkGW(4Lw~7_^Mr5Vl}|Tx21mvT;J4Y@c=gBj=v#WHf?LhT5Pe0 zwkfP5og&r z)|}~e`&RG5o}i~k)$E%z0D2R^~a zf*MJJMdjS{4mK_Y`vs3&q4WR?QYg7XYN%t$nr%t07)-Q_ztt!=7_g#{>tSU8$`hBf zMm4NC2=mp16SpZF(kkCX-yxvRJM@=B5IMds z(|WKBtqg|IEL@~9KH;+T^Tu;&`=XmsX~=k0?!7@|lfY!pA;>0yOYn0HicfaI)Sl12 zU1O?@uK$=d@000TCp1B{#{9gVdaet>c#2_k4PAgw+cJ@5i_#Wd25{CEJjxI!O&${5dT6Uksv8HO9E(v`abwW-WpBn;y4jcsYY5M1 zsyB!KZ6wRyxaV;wiAM!7Ri0rZs$dO#iqM9d#{LI!ci2X^Bsh7D+LvA^LhuuisI+iB zRA$ra<4*Z;Y=Rs~r$$PqIT|r{bNR=^SGY#BL&~WBm`S4N)2{dmXV+?TIdf%DA<7`3!by8X<^=Nx%F2 z>xOq8Z#-J6xFA>e)%U?8-PPoAgyr?#QABvaKJx*H;0Yi~EyR=YrRV)m(8Bgnep5Pe{9a`cn}jNt#S6sb$!! zR3`6WnfiqboC>PyK&Opvici!fHGRyUV`RLXG38i`zR`m|-^eh3u&#|Rfz^dM*5UYZ zWQ-8ZF~aYw4f$V|i8V>8e_W_^anod&F4Hb*0Bam?hh6hDZ+$6K6by!YwiAfjHTqlf z-gF}$pzFS1FOGVRpuKnz-qza2Z%qkOUvS(I-E$CPr};ySeC$NYid$ibyJcKtjWR_tI(N zX2z8GmLLbno#uVpS=6rRXXB_J({GB(3|9I>wiIq};|vvYOD%>DRwNcTT^J`OA3aiN z_FLB@lV2i=79h7e5MhO+D8VALjT#Oo-a2Eh{2Bz9lp#t%{TCk(A|&IjSERz z+O_iJvUOeWF0d{fRcEuJ?!#iM9EIlIVs^?#c95_@;}=v<8er^uvaSdT9NQ2t3CO~^ z?0tNoo1Y7*N$grbe7Z_x2%x@lXFJ<(x5d9%hl)p{O#_e!FWHtl z7$wWt6Ab!A((u}UnohYq57a=praq%PClLlRWMXCv3t=qNMG>$VyG}+n;0;Ue&A?xm z-wa_C-q0XfA~Pwt>_$+iEH$&LONV1!irIb*0>hK}3WVc%Yh> z4=vl+@1dC&E3&9VP6f0Up~_6dX0lbsii4JeWI}*=sOL4zzB%7Img+3nQfm*hkO8(R zuB!a(1u{Lr(-Bj@cr>24q;r%0d(jG^FCq1Sam}}$)r+}PV}^c7Z~F@We%9{Zep6%0 zBmPlE5TmfbmS1|V&32zpHSR_N!40(lg@d@6J#;!XB}J=JF2VGAxlFiJ3PU(i=Ac^X zT>t)o)Vg6IuWR59y2(T>IMJSAstNazQ8oxgj=HB!X2Eww@d6~LVUt5CBla+9QOwPF zW=ZRCX+R`*ay<(8L?-`Oih)8WVg{HbyIxf--sFA_h@|0gzXV8&*efW}P&Eq79fZ>v zXW=AoKE}Nmc;^5LYfqO;8fjLV=Q8RL>_#`^o9DvoPTCA<5mvD)35k$LIcPoiVQJDI zULGZ4-qALEO~vB!LLj`hbi^#Oe6OAVAkuBhY_3MR1FI?3n{c-~RIwFmbCOP)3oX83 zxuW=Nx19x0XZSsJ; z*l1TJ>r8~r<+fV6#7E-Z>xMy`;U7I3-&j&a<2!_N*c0jYbEL&4`gVsYCksUtyc!yo z=@C&C;n=C@f*`Gxg@UTYs=ZWtA5#p}7Jpp2T`KmU!`Ykb9D89WoSDo(+NjRW=C8(w zm+UdwJMQjWKj1#unFbs_JxJe{t;oB;eupv2$j`;=rXqoiv}u~3aw{sJD?XCN=$Z9vt>FBTm;++9<+PXbN)(Ny(3pVLb&xM+UB7y zgf~;pV4X5b=7R2^iqp?pSmV`jbTtfl5{0doyJuX2DgC1$aA@9U8AyhIum}A12GJP%4bE z$dld&TbJFO6Ka1nnyYoC!n+sT(7@2}qkxnwKF({_eLCu%J!pr!qz z_IT8nsna}E+;ClWhUfch{^}5CEA5a>7o4qhhB`aZvCo>zckOLJ$QhI*l@@&uqwq9E za-AQ!3FChU&Zq?S*tHF3JEwSZxh7+7h|W+<<)|%xQS=hq-;I)8G?>8TkSYIOxwVW# ze6~v<8ss#PVm;{l8un6PyvUmQ=1J>;+SX7WV=YCnp7zhaP&l}okrhd1*`ZDJI}!rt zlRkV-UcFJ`JOvR$$$eRr;6yyLMu{yz?}7 z%k9q^)+(Fk4twr1y%MY2mF8%f5E8P1?|Oyjh)o~q@bA9Ocom1JpDjpD*1!KDn7Q;w zs$?3i4>O|hIYj4ezvmiP?;6rRndQFa;wd-)70*olua!^M#4a57TFo8v?AnOepD@|y5+k_mA zmqvG!=!;g-4l4%({&QgE0`td8~DGZgEJ8$xi zsEm_#EkNr4u0dubh_jgogo`1KF({NdfD1N$a>4Pkb>PJYVQ#A0$9T&o!S}UfNo0JB5C#j{npzm!-lA8 zc5ep7Ww7)RW|TgEdJk=PDKiDQJ<~4o*5V)sg10k+IG*~*)U}#|#(3mzkYpn$p$MKy zeFX#>&?JO-wJEX~WTjvxgcy_u^sn6MK4| zbXUOu$}ATb0UO|Xvt+c12g_TGw*|lZ=>aE$8*`IJ0-m0u8^Hldil5v%VD*u+#;nE1 z*}s)+Up?YEj6-6Rx`7kPFe9QrViPlS@4BQAiR8?OZf>VIaZCZG-HRoLzVF=+H4OOG znMNTW_dnXa;dp1!Ffl7lp!7!>;EZ3JbIL`Z{{#u>O^fUp=j@u2 zww1Sv_@KaRgwRt4@+Ofk{q1BT@F_Lja#IslnbTwzJQf&{%?ac7Bz@5hvdHx zJ75sL#(^{QZ|V&GMoJ0x&a&GXq_Y>@?3B|Bp)fRclrwLP^V541W{v$6ko}vBRbt5A zVew_5$0Y23IQOoTmarDrh)aywI&N^wtR$W-s`-4+(3!Y_Tr8QDXLStzdzzsAprfx7 z6-_Q4$0}eL4`j=z$@dYyFpW_r{VHv;wmoyZmNE36aVD7#`xlk#QTte;)GfpG1>&7Y z86madPR=-C{l~c+(RxhU@ee4@y~`hYn^`7wE!(`k7b zO1_bqO4^^kU^MEQUJ`Q;CIwxl*=fFuD|e0c|Bz>4MA$Z(kN-4z}XPVhq&BBy3KB{41!TzW>6_|;rl?n zDC9|k{tC%DTFZ|cZ7W|%(U_<#%5}7=E%lYkqd zy)&KTu_6wq2ti0KkUEB9H(M_A&g)X(iFS`;x^91o1@axl2JVT2t{c>|YACbZCaG z6Fw~-oj(gVRfER9W&VFiQ=OqMsj)0N|=R5S1a)dvr zsho|w(Eiw3WPc>ds;RQGr%?*fYJtg#Aw|Lp(6ZivxvdzY+zH$dNioeM%B!{_vinhH z`g>_}^GTX>65lBhhXf3J*0NcbYW3Kric;a0pg!ut1D^#_;>?5$yjdlolz*5VdsU2( zsPeBOg%Ge;2p_h2hcn50y)K1@KwJ_X3qT(?odK(`&p=JsH8XA5GrEXTbnJ%wt86so z>vfw!^iBAI^4dV0{>Ev*T@)=B13>N6oHk|DV)Aiz3$37fI zK`D_QKn_Nd3)a9v8XD&UgejOjo&ByP#7wG4=!GM!ln`|o57U2ujjTOPLyh}!8@q_E zX+M4YHKo$qeds{1Hhk)R|InKWSbZE0vgM&nr);NA2if`>4oIay)&j?_*+DhQjU%E- zpR4L52a*6LuSQQG#{GBPBfb`v08Um|_(EQbYhw26kg2+B-u6jqgb^1S&a(w?*|%Po ze~#lzf=tOsI3@$I6hCDv$tY+6<%xs|Uh+7|#5ou8^jAgFD3 z`^@#5;hx5G8LTh)`G8~j^Y6}aZ8cG8y8}nsdRY1!A)FBL>|`j2 zY#i%07E`13!%-6L`!&=;e)Rj-^h*tnWVWG8K?nN=9cQ|Hl)HqJ@tSY{5teP0fW$MSKwU(^cT~!NBkcL z3**?^Now(_sr#3%=P+Q!mlAYOT(h_wPaQs>Ak6KEtj|-_tX%Bb`Uq?X=9hc`=c`RX z9yLJfb&aWS*BMOIh9cw$&%_VAL#-$Q2Qga8Pao<2lArr)`;Y8c=#;k;V`#@{dEs)@oToSLQWTUBeG z@=iB%PUymO&y+VlV5+?H5ex9edR~PTMqEd?J-LjT=hBT+wW}wtNMH7hnHTo2T(%*# zFd>`XF$LI(W-jFnFn+Xj^LkFp+HWnqa9M*yBJiQ|e%xaNeeepY8GNYI%OisiV>jDo zAY19ljbjrSOmp90Xp*fp$&PSzRzV@E#{u@_LswBouC#emE$1F|5@g_zFi2kf6`qrl zjhNmrB5hlyb0=o5b3Qxmymp@MyHLpcCeQfk_wsgL`|LFT!?)?$L^5Uc;`+Q;0O8jq zx0t)H`;&DFnB&Th*BmHB<5Wx2O5m{ATH;aSWWN7pt+~xX_dfAc!&?{M2UiNl;IUJJW_9+G^WQ}TKfseul8 zC@fDO8UAlmb0(42+%rzH4k_>!bAdEOL6{oZk~d2wkNGT3OQ!_P^F2Pj^epRc@}6(8 zL7&#y*_CRUffSnLC^&P4=bI(HTxIKmSCxt;vhB^Dc8xx8q6_6>yq00ia06B$KAu>aALVt;-Sj&IkfH%u<*)w9@0`D@NWPnYvSd;F z_;#5U#G)Y(Ye_%ES|mdr~U1$|*4hoB`%j$sfD&9jmU?;2}M=14$Xc zpLStP8aDE`wHre72nc_%t^H$pwVp#m2`x%sISz!rx!rcEJ+;Nnpmf(53rRu#{uYXkOrXWn z#=0U@R}0w%{54SRs@n=RKjGJ6R-~iO7+iQhsJ1()ph2*Mr*+BnJ8A$(MN<#wLUhPh z9+4aa=JOpaFRIH-20efQaaL%gVK|c9i2fEQDS(=I3F>gbT(W76$ej163!0@fT5h5K z>VsX;=U<QeiEJr3b)n5t3>>jql<4FN5KA7#1&*-% zwa8wfj#b&Jsx6-+NABteH|WMfmfb$GI<>|AtIe-e4;p} z!DXQ*scb>Zrb&dLtw;-`!{bC&W1Y0X`bL$lP4MDe9l@6lMpaZ!BAV2Dl zCZciB>h&yRy0eadq8$ioG8t4x-CZ`(&&jQ+jA{Qk2<&dQ7BsbSFT?I*&H%Glt4uBRC~tRz zEkDZ&z6&};r7=pF(0~u+d{Z}+|MVz9e65oByQHNac+g_43K+N6i940{WuS~y2PGQE zLY{1NY#R5Ed{SH~y$bSOnd>Gw=iT8tvEkztGr>+~OuFriAJougt3Mx9i zW7)1YFmmhKTEM7vE(sVvFH!3IF;=3qWawG{fG}p>~b2Htj9XT@k?JBMSLD~VYjl`wI zc?gwnI@^_d>$|4aA*JXw3a?i+@xjNTAcf-huaNtfudH z#L99!cVx}S1U`vF=e+&&mRnF|ITe;RGJ~LJjxgUKU^5~DFUxATIdGSyoL%0U zA3Sepz4DcN^y;VTAmH^uR9|Ac!AceVI4UC{>OdmmHGRvHv2k}^Jn6C>u1?WB7+Ynr zCT)8Xx?KPZ!cZ#760e#oO@f*yJ=k`pgppVnw9Sx7lAHJ~JQ)&C3$OQ*UH!2$u~QIF zxCoGyvXL7%-A9={2uZmRQ*q2;tF)kCD&jm;fhetJ2N7=D-NW`|0N8Nuh7bMSOXQD` z58d*#!`SnbNGlbl@W>jygZ>K3jFc{5MnhUSTVO-cF2nk==b0_siQ-}Y*87aUxA;HB zmp~v<*P)<@J^B_1;xE};d%^8El)8?HI3h7P%7!mnn~AZWyVR)4xI5MiQ$4zVHBcS&t5fap$@V`eVhq~S5k6f zz>&VTQIfM+uUGSEPyA^=BO^O|(6YK~(!G0lsTe3f7mhC&lo`Z%x0vx+4(LbOq2a=( zqQrY+4U6srJ(1B^G|ltnG6=Utgf35s0rAUE=I%wcm~?_d)+h8Z0PDNN%p--yE`(2> zPoWFA(6_F+e)*s%g+zr02Gj@`HgJ5+JH_4vPL}X$`hsPFi(zXiEt5#6N`&;Ua`RSJ zmm<#MbzTFBi-lcZ0;zQC&r1Snw@ZUL+v*mT9k4Do^EcXyzGiDRwu3fbMcrVJ79Pb_ z2OLnt1Mlb=Fe4T${feohu)v&1+jW;%tiIRK-M$E~R!dNfoLnw#g+=V@a-deBYdbyj zRFJzs_6U*+J5fQU7bka*ZH8zm(A+9K9m6m-cYp zrLUK#ytD)H0#pUWFa5d;WgxwZ@+|vRK*OgY(B|d-51A=73BlhNhtDv3_RE_|d9j+2 zlrPCN7uyl^pv1$IZ@+93=NSs2ka3lS#tc}U?1gp*HSejs^CpL$GgBv@k2P(gBUQdJ z9-fS?L}herE8LpM*_hlt-uR8i1FbNXwE5m+O@#>w_E>oN3i37p&PTAxSHS&%|AVth z;G&1GNfCx;OPMB6YJ--=y;355^*`8e2s{ks36EO~YMYI*w>T9n)iN`co`amXV zUEf&+$u;t65&_kamt4A+crOIa+u+B71maIF&sTN*Y+gUIE_M;$<^YsoixB|2~ z9Z@hYvJpg`r&|U9t))pgF#Qoo@+8F}nT-jw-uN=parOd}dC@uyc9T5)0p5SZo(Whq zQ@-L}zdX?TU+OF7o(Vk0jlJRGj}f~bv*l)Ye$Id1m@?uw^$iL-T>Y**5?FdYKNYVx2@w*T~7R^1%O1UF#{>j_KeT&uk@#gr| z8)f;r3Zp&!@wJkk7+kMsg+WGy^O!h^2HC-7D(t87ULd9((u!oXLFD<>rZ^@F8toY) zh^|(O2<#&%FolL|%fKjHRJunWsL3D--C1MSa^VKi&}lxoj=0pbN?0~_b=^LF)d+Qe N3bRiU4?c(zAzzhd_KE-i literal 0 HcmV?d00001 diff --git a/MikroMaster/20260503/20260503184001-Config.rsc b/MikroMaster/20260503/20260503184001-Config.rsc new file mode 100644 index 0000000..2d75da6 --- /dev/null +++ b/MikroMaster/20260503/20260503184001-Config.rsc @@ -0,0 +1,4091 @@ +# 2026-05-03 18:40:02 by RouterOS 7.22.1 +# software id = A8L5-07YF +# +# model = RB952Ui-5ac2nD +# serial number = D3D50CEDCD38 +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an ssid=vados5g +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + 48:8F:5A:8E:1A:C2 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +set [ find default-name=ether5 ] poe-out=off +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/disk +add slot=tmpfs tmpfs-max-size=22369621 type=tmpfs +/interface list +add name=WAN +add name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.83-10.30.30.254 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + /tool/fetch mode=https url=(\$GlobalScriptsUrl . #\".bak/mikro_bak_rsa@10.\ + 30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \n#:local Script AM-setup\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$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 \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/368/b69ddb1c\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 09:35:02 01.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\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 GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\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 ExitError;\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 Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\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 LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$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 \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$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\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\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\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\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\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: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: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# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\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# check and download required certificate\r\ + \n# Usage: \$CertificateAvailable \"Common Name\" \"intended use for certi\ + ficate (e.g. \"fetch\", \"tls\", \"all\", \"undefined\")\"\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# download and import certificate\r\ + \n# Usage: \$CertificateDownload \"Common Name\"\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 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 http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$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 warning (\$0 . \" Failed downloading certificate with CommonN\ + ame '\" . \$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# name a certificate by its common-name\r\ + \n# Usage: \$CertificateNameByCN \"Common Name\"\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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\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 (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\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 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 GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \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 MiniDateTimeStamp do={\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 :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\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={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {: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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\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 :global LogPrint;\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 \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint 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 \$LogPrint 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 \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint 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 \$LogPrint 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 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 [ :len\ + \_\$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 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 LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint 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 \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 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: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: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 LogPrint;\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 \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\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 \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', 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: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: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:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\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 \$LogPrint 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: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: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: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:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\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:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\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 #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\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 :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\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 \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\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 ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\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 \"Setup Global Environment for scripts\";\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#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\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# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\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} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-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/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"GTS-Root-R1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ + );\r\ + \n:set CertName \"ISRG-Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ + );\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5200/20-eCee/ac/P(21dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +/ip firewall filter +add action=accept chain=input protocol=icmp +add action=accept chain=input connection-state=established +add action=accept chain=input connection-state=related +add action=drop chain=input in-interface-list=!LAN +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=masquerade chain=srcnat out-interface-list=WAN +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=yes dst-address=0.0.0.0/0 gateway=10.30.30.81 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Windows Update script" disabled=yes interval=2d5m name=\ + WU-script-run-schedule on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" disabled=yes interval=1d name="DNS Cache Flush" \ + on-event=DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" disabled=yes name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Scheduler for Amster-Backup-UpdateEmail" disabled=yes interval=\ + 1w name=Amster-Backup-UpdateEmail on-event=\ + "/system/script { run Amster-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-02-13 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260503/20260503184001-Diff-Config.rsc b/MikroMaster/history/20260503/20260503184001-Diff-Config.rsc new file mode 100644 index 0000000..4c5b4f7 --- /dev/null +++ b/MikroMaster/history/20260503/20260503184001-Diff-Config.rsc @@ -0,0 +1,20 @@ +2721c2721 +< \n:global GlobalScriptsUrl;\r\ +--- +> \n#:global AmScriptsUrl;\r\ +2723,2729c2723,2725 +< \n:local CertName \"GTS-Root-R1.pem\";\r\ +< \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ +< );\r\ +< \n:set CertName \"ISRG-Root-YE.pem\";\r\ +< \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/\" . \$CertName\ +< );\r\ +< \n\r\ +--- +> \n#:local CertName \"GTS-Root-R1.pem\";\r\ +> \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ +> \r\ +2739a2736,2738 +> \n#:set CertName \"ISRG-Root-X1.pem\";\r\ +> \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ +> \r\ -- 2.52.0