From 8805587576b6c586ded88e62a687464c08957638 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 29 Mar 2020 19:00:46 -0400 Subject: [PATCH 001/189] add gitlab link to $info command --- r0b3bot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 40ac5ff..40bd1c8 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -511,6 +511,8 @@ async def info(ctx): # give users a link to invite thsi bot to their server embed.add_field(name="Invite", value="[Invite link](https://discordapp.com/api/oauth2/authorize?client_id=416312716677087233&permissions=51264&scope=bot)") + # Gitlab link to source + embed.add_field(name="Source Code:", value="[R0b3Bot on Gitlab](https://gitlab.rickelobe.com/Bots/r0b3BOT)", inline=False) await ctx.send(embed=embed) bot.remove_command('help') -- 2.39.5 From 6d1b82d3c3af14090f35fa66cfbc850dace773e2 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 30 Mar 2020 12:38:22 -0400 Subject: [PATCH 002/189] added uptime to $info command --- r0b3bot.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 40bd1c8..999d857 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -511,6 +511,20 @@ async def info(ctx): # give users a link to invite thsi bot to their server embed.add_field(name="Invite", value="[Invite link](https://discordapp.com/api/oauth2/authorize?client_id=416312716677087233&permissions=51264&scope=bot)") + # Bot Uptime + second = time.time() - start_time + minute, second = divmod(second, 60) + hour, minute = divmod(minute, 60) + day, hour = divmod(hour, 24) + week, day = divmod(day, 7) + week = int(week) + day = int(day) + hour = int(hour) + minute = int(minute) + second = int(second) + embed.add_field(name="Uptime [WW:DD:HH:MM:SS]:", value=f"{week:02d}:{day:02d}:{hour:02d}:{minute:02d}:{second:02d}", inline=False) + + # Gitlab link to source embed.add_field(name="Source Code:", value="[R0b3Bot on Gitlab](https://gitlab.rickelobe.com/Bots/r0b3BOT)", inline=False) await ctx.send(embed=embed) -- 2.39.5 From c0d817fb69bdfa5292b5e56e7dd20bd651ffb3e8 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 30 Mar 2020 21:01:26 -0400 Subject: [PATCH 003/189] Added yaw command --- r0b3bot.py | 5 +++++ sounds/yaw.mp3 | Bin 0 -> 52035 bytes 2 files changed, 5 insertions(+) create mode 100644 sounds/yaw.mp3 diff --git a/r0b3bot.py b/r0b3bot.py index 999d857..2617c1d 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -200,6 +200,11 @@ async def aww(ctx, member : discord.Member="NONE"): async def eia(ctx, member : discord.Member="NONE"): await play_sound(ctx, member, "./sounds/awesome.mp3", "$eia", 11) +@bot.command() +@commands.cooldown(rate=1, per=10.0, type=commands.BucketType.user) +async def yaw(ctx, member : discord.Member="NONE"): + await play_sound(ctx, member, "./sounds/yaw.mp3", "$yaw", 6) + @bot.command() @commands.cooldown(rate=1, per=10.0, type=commands.BucketType.user) async def rs(ctx, member : discord.Member="NONE"): diff --git a/sounds/yaw.mp3 b/sounds/yaw.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..cc6f08ae0dcf5034fc7e46371dbde4d8790d16c4 GIT binary patch literal 52035 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 VCvjhh=i Date: Mon, 30 Mar 2020 21:24:09 -0400 Subject: [PATCH 004/189] added $heavy command --- r0b3bot.py | 5 +++++ sounds/heavy.mp3 | Bin 0 -> 184946 bytes 2 files changed, 5 insertions(+) create mode 100644 sounds/heavy.mp3 diff --git a/r0b3bot.py b/r0b3bot.py index 2617c1d..4fdcb65 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -205,6 +205,11 @@ async def eia(ctx, member : discord.Member="NONE"): async def yaw(ctx, member : discord.Member="NONE"): await play_sound(ctx, member, "./sounds/yaw.mp3", "$yaw", 6) +@bot.command() +@commands.cooldown(rate=1, per=10.0, type=commands.BucketType.user) +async def heavy(ctx, member : discord.Member="NONE"): + await play_sound(ctx, member, "./sounds/heavy.mp3", "$heavy", 6) + @bot.command() @commands.cooldown(rate=1, per=10.0, type=commands.BucketType.user) async def rs(ctx, member : discord.Member="NONE"): diff --git a/sounds/heavy.mp3 b/sounds/heavy.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..00d1eb6452d800cdac6b3ad7cc7c72fd3fd74810 GIT binary patch literal 184946 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%0Aq0w)^)Pi1mbFwynZZukkPj$@|7G8Msw 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

-L^5#Xq^?iobjon$T9WK*t0HoaG`GFSUl&)GZ7&^WRbm1Tgf}gSnYp`7d(%BhL;Vh65 z^+;ZT2_BLvfdz`Py%zn4TnF%`>@{O9zudlg^#;gzyB@HszSO>L4U3(nauoflNw|XK zofEvcoQR5wQtgW1&1Iz(iE;jPQ&7WfH=3MyWE+EN^A5gO=WDR_yxJ>apV9E)QDPU+ z)#;T_fTG4wo2C0XC$(ciY#XlARWf>>>28L>1D~I0s+o@PSr$;D=HvS;QJ*cr(i-i5 zjm&;AJpZ^G-L0ZHOMF=X0Oq$b9;m?(XAV|s(uRH*j;6^2gF8rJ4p0NTn(`TNcR4J1 zd;nZ6Mjir_19->~Iv*?3L4X8Qd_pbah$Gbz0D|}5fmMue0jri=yV<+9`f_+_@oNrj zQe@vfEs67JvK@vS06(;00sgV8Q;cj=&9xME<#FAui`o2+yK!lW^U%ZyS=KHRpF z-G<1V#~P1j^8;0%yVZ=*Yg;{UH7m>Ch<1~{ak!9f>Q>#hFBRTQjNPB!UN;r^_HfUkPl)4XO^U`wZraP1F?2J@j z=}4Ip&K3#PeX^HEHd_A5%{fj0Adx9E&I$?a{S3$J_oNOT+e&vBDY-fLf;6?3olhxX zWvkW0usu;272RTKT!>z0(n)z9Fq}s1Wh`|rLo&gD$vH07h$S;zRV6VW(cE2vhN1ys zkP@eDv_8Xt3+ZYfC&}WDe zAwnNbZF*Ts{Lndo*;E};O{o=`H`B#KsPtsc&fg=`b;n-Bu#H9T#voYfQW8+g;3g?p zP^h@`nf3po+}oteEd)ZO-pbZrK{2df^^ZYY%^r9@is-boaO$-ntrG&5)ugbU9MuzwlQ2erX@M^(c3y`G87s`(;B zO$NOxw1wz8I-xINSZ)@{>_^ZOTFC&ZS>`fOTi)1;Ww_JDGC4j(SW+a{8%moLm`^EQP{79m#q_zDb6bY}M3v4^!7itW)U_3nri^ zl~O^e7^vU}po~MsBv#J+*-AYXWKUt(C-cW#k(lZwSw6NSVO@6F zt**A+s5SfS<@0x;eb4v5IZlwhi@(g$Tb6za=s&u;LRY?V<}# zz=9N>>R|@G)@&vVE)6*+-2gMyhnNJRNDVTC9QHMX?~?pIfTlL%2|sUHQ+W^s(!I96 z(b{kSFUozT)I+Lu)IOM-a8CPH*#~>N}eDHLE@xK7P7zAF%&IOddTCr}f0f)Rv;=YcsNHDG?$sv26YEdUS zWQsAG+|;=`nxBv<3lP={_H3173H7(iIu_QT<_?&PX!tiMCZX6cfvX}Rrf(Q)J^;~4 zklZ+N5RqG=08Ro)BM)4Gd_`UWA}=9;oOEo2To(zui1+Cwrqis-z%rU2+0p&oy~#^F zWCD^P#*uxL z9E1U%>_o|fQq;yG+#ZSu6rgedd4w)=uLz`$A)-NJkOHsQKu|xmP!{My6+V`f(|=7x zu}qsACoU8S6WoW^G&B&C1Tsx|MpzbHad9%mTN+FhO8dGf8Y@sN$_W-s7f&ih)&HpD1>di>t9`}~VCvNwUM^e@NizI9Y%Za@* z!HuE`b;HJ;QbJb##Oy=`@HCkVaG$XjrG^;JQ8o#15#w1$G7=9Z!9(I&P!KIs(KHTx z3%3D5MEm*ksDWh^jk_haw}0ZOq(NTUKwjD}VLGZsrb;e#hzqk6xY&9hssV5V)UXQ_ zy;gaC5P9sjb{Oio<{4S#4leqm33P;6tN;A%4XS>E7m^W)l{yQ@brjd__+*s_$ML2p z8Jr1Dwy4fEh!f_4+zZ`UyzS&TGqNkc8uZ=Zy!u&(euIPAlQ}+N1pEy z?>wk>9mA3JhHY-+FYJhdH2YDslHA+cgU_l;&MlkS4?-x>l~Q9<$ZYc+sk}Q=zb@>? zU*MV2JbFJB{9Sc7$Y*)0fd>pqRXt%Q!z$J!?-EW2PIuXX+vdMBy2tRHX(Wt zb>OSKEuMA3hC=M)hG9N+Xt@e7Fy=nKd}`KZBGhDin%25wvV|Q1K59$93GcY)qJWs3 zG1#@@5tat6Fj^?3P>=W`c%-%1Z-03Fq*@efYAU=&r@Lnqzmo&tbsbb;t0yVIY(KTA zq1{`*TkE~H;=e_C z9y|<>f)^`$`gh;ip8xij-P7sr2 zbguq8z$anaf#@c_mbQsEsLa0>tg+0eCJm6yxXnZmyK;c3jQ^02EVu$?U5G?Ev{8Zo zPdEv-Eh^sf2Jk#+0ATXbhs8ok!^!tM1+P%X3l6F?1IsDUB2r^ZL&*`NPD1O}jd}a} zDPp1Ev^tPavDFaaO(1!AI%b5K1@dR0!{s8)t{sGgOENmi>-HRJq9B?455GcN2dcDE z9C3&>Qx|LKa&PO<`=`@>U5OKhzAJQF<8v3A-RAG=eHeW8=1JD)s`t)%wpB4z8j0He z+Mo7jS2p$^z5P?|yk8RcC~x_JlJ(;^!sW5z$79!>HMD+lX6L;~#=AGcPDjR>k?ST< z*o45TelPiO?x3IhXN`u+hFpJq!93Auw-VOCntAoy>4-qWMI&{A@QGW8T}SYDXR#E- zfWiiUGG2~g(_x}w2eZ}$kf$IU!KfEBgap=D=wqt*UBFnkF^jv1%yy55OBb(Z{K~An z5WAn7@VeP+KqUl(mXsNvKfYDa;Ns#0Mr)nLO{iqj>0CU4u7^k_9}DL1jLwsLau~h} z1aTK0Yo$OomBBm_YdsJ{xC0G$i9py5c*!(CdUxtxdmH)vdV8i_TV^HfN&9liKjaRR zYCjfgseMrFZ*1QlnebbN@2AIp6)o!My8q5o_+5S$m;IqO{kaxNmh7_9@yrwY7uWTS)6eS05{o;61E{*v8NUD_2lX4V(y^Fpk|~9Gs>l`h zces107a(dwVfSx$xx~bO%a2vR^ZnZwdQ593rc6hG<1_*aw`9Z1%5h#q4?E9=R?L}$ ze4yzpvbO70p`+6k{Xo3|V)O9y3PA*m5Y=k}B{7mdzJXSNBy$B=qO`1VYGC4odk2=G zrh*~PCZPHkL^O%dtQlq*zD+b!##n3fVayt6Q`)$*^nxc7T%klE4b1Y>>IjgswjDUh zt`@&#Mk*Pr1LUmDFle3;`~)TAsI1xEnL-I*>RFc`ur87O?htfa1#Y2YjE(;2!v;^j zoTkm?(uMftH_sg-X;WGw(k^|!z0o9g#q@T zoM-K_piuLdG|_>@D`w_T0~TdwJY7##lq`+Cf;+R<{@gZ9H(>pG=U2J!mi$_2gR}=( z-a?n~>-q5*pWFSqey`G>7U(VAyE^c8`OwYqNAT)nL`-;}gb5gM(7+gbkze|Wb6!W| zb>hed5Bq$-uQW7?0XoHM#z3$mdU;7cS!MDmko$9M7w0p1Du6mXFk|d3ad1{E`E7p- z__bYQQe@Hkbr=!|ly*hQBtc{mD0lMo0H6>qeVr1%QM#)@Q%jUm%t*^OVS#i_sv!U_MgSPvSMf+@6f>? z3t7CG(P6pbCF5gTFynLo@u#9!;p4`uDmyU^>;?dy1=R}RVPjZ{!0D9ydM1)J422v1fJ%Nw1!VhJ}+rbFM zX2vGfj3pL0G0)hX+a<}ElX;ldt(1F+azp^?{-6OPb#BRFP_A-+;M?~eERbHTxe49N zdtfn}Oh~~61iJ4S<${4C_{4u%E(eMws55U@) zn_9O+l=`1^Y#Xooe$SRufBJE?SAKJ<`uqfQSX@5X^n_wO>0NU-^%2^!`%BU0Y$!y6xBnfDizHpU@_1d3J8e zv*?lsxdzX$qI|i0wS)Ssd;o2qH)bY+HzW{aNkDs8j1RdixXFIncveiCEQ40apDEBE zsHf8vcs_l(v*}|Tcear?*3}ir-4!*n08l@x3$G!Dw9YSvt2ElVvfsCllV#)VC|byP zuyHR{sar(EPz7@3zrs%ih~PJ2!n0xv2LZMQ565mT7{vOiY!@EY=A7wJEo_xb@E8In z7I!7|zFH)&nTV1HiZ4kD93~dT`sFM;~S;6V`V=G}Kh`l=8e&)F zde~X)FLmcum+SM|AoYw(?tWLo{Z(~;TzY+rmU%=!I~?CbDT4M-`DnGOS|(_1Ijeou z7j^7U}ohtuCKIOYsp0&C%qTF+O_eKbjo)BUEDY}-t;4kZ}k4c^=i3-hG zeqgjS{&pq_%Hvq50}}V&fSk>@ftc{KySTXu5T_9iSO*5WO-Zf*6}e^R2NkO9H+6m# zH;ib8E8yUS0XA2990twKFEEY7JWj$bYpAeFB87=mxdwy*r8Y2PpVysjp7&hnPY?px#8 z-4c$c+!I|Wy*npEWxKlWZa)kWezxb`_AEU2FhwjrEWK>ySt#*7^jOOwIDg#Yl;NqO zi{*V6g+&D4El-KP|9a}l`EjX}&yS9(+k&xVbL)Gjth3)9doKfv2lQ_+K7N~D&VH@u zC5FjCWAJ(yQAtc{hNf>;GSe5sGy^epjuS0Y2&<;a#0Gyi4hfkMB=_I%qu_g{uAeRi zC!GVR2u2L0-R6^#KH<7>Fk_*wF&EnH<_{bBIQr&&zS-_NQLB1J!`E2HN`H~V#Q%xld`hYd zD^cRUUxbho6Qw5zq3kiVv+Wq-kR>boRGBP8X>?8`YxKavj|HuuIa)r1lfCB9lL<@5wD& zC(dqF>K|U%p}S1N@qTO+??Ev3B!UmkpL~*)XM-&w59@y{*b8XKP`Q#=(N!86@FW1X z4*QN%`W1weeuy!CG^rd_{)*w=tWA;WF+Swwu?YP3<^6_z+!GuQ{qT3^}d&BpTqP3EpP*c#S7GCm7C4AUKG7e z26RQx8QION8IQ&(1G!xv#%sMdZ-(7U<0EnQd<{_xzOsRVK`W=`QrI(8H0?6o3trWy z)MD+&){E_yt`NRHw(3P`zOBQI52zp)1%OR%Nskkh>xJzfzVcKs@UT72zXg8w;=h%~ zdzmZRSwF6wpV)iw;ll^DQ^U*)%QpYn={MW{DQHteAj!DoV^# z%mt$3qva+Z*!RsSmRyTiX(Eu<5~NuiH=`apW>*p7JT=56oxUc-IyBMoYHYrjwr0~3 zKX6dZDwX}d-?))cyIV%xS*F0&;SGCxr++WAWd~Klv&f=Z2XJz`g?6OZaBI;+zQlgr zrsB&0o62bgI0k=CGc_9X-RVT%v~KiojRr4lE3X_B4v=Kb^Gq%c|Gk-|(D2-5qQ{}{ zO(uakSK4dH&;uY}`#=X{RD37ptZD-ME!Nb+HZ2kz&&URuqgwfRvwh)!g1DpSHr~%V)eIkJ5U1#TdrieUFwZnL$0-)*-_I#GQVUGtB+6_w|qv%J;-V z8SCG%4J+|p+1F0le)&-zc2)bWXKle?u<3`#m!mZEG7$Tam91#ZtxqpzyCyfn^UgfH z(h|LqmI^%mHy_Xw#p}$+4&ys^FjSKBnHD^hxoH=AM@}Dwm=CKC%1@zN6GXunU!ZX| z)W6!jG}0u%gqWR5e|k(OQFNfx$WuilMzwb)A`54ktw#n#t!4JTAchLvD*@2TRdV`(Qi3 z-nwo4GOz(7Z`GVM$;_p{>q-$1WJ_=5hx(0jh=Ku7I25KWNs;4_F_@mDYZCjDG9g-W zumY)zr=Gq(u3D~SWR*1aZt0$BagblW<~h5-#eREPS_c=^-!r@B!X6;w^Q16CY3}cD zL+#D5QS|k^K~r_xs%d8#!-HH!nb)`cq>ZVH=Pd4>R=*dk_^Nl}_QId(udDJ>7c}SJ z4;6{M$n4!>x?T^olM<@CD4SQ}-%#1q;hdL&IxKDuH*Tr8`9%p}vNp_?s12;v#1oD7 zb512Z)likth)xnPBl6O_j1bbw3gjpuPOoCO$& zL?x7UjDN4ctqzE(tI0~3qi3o_OmmL&BbOJu?FM@zh-MZ#2m*D3GH6RB^#@S(eAl;| zseapoaW8#vEUk5|cpwXjR6$1x1h@zz$(!}@T}{DPSm;FEJx0Ww40A#Q(~sY;Hh~b6 zq`@{=PL>81VmX?Q$CkqV{84S;A8AlgczPv;3$>}j1~vzh2SqHw4$9IAg`Ev3VRyA- zFJy&4qz1P@JhRnbuBr~E(NF}C%U@bt@Z`31dweV{%&Jyf^V7Aeucv~qQl_WZ38?41 z4^VuY-DD`|bMbk+>#dLO{sXF|OSW6f53=pR{x&0}Qmv*D2oIDJY&{+4BJ@RrEgk016oLa< z_fhCnp5!H%Xs()%reYnyVizV7`QG>Zci7gM=SOZAh2exY={SmI^OBT1W z?V!$aMF#~_t~i(Y)xel#AX=Eq!kMkr>#Q@h_4S|z0l=EvUPju{;6kau=2Ez5?2Vli zPqvdaLGB$@sdnD>3x$3vd7G;964}M~L8y+|g>i4~`L+r<|E+;DQ9S1}`1hiD+zEW& zeUjS4}vVbIQtOw+>StXx zI__(0@9pM2bqKR5lK)`3cta2LMfQQ!W0hjomAa6mVG}CIY|H!evD8Ea4i2@o^HIdZ z&e&Hsah^s@08cRj#Ng^khOC$cJz}G#FSmP`%orV{?c4UY&^5QC>nh*M4c3rg&}KE? z_fWtru8G}%Uj{RHXqc)QaZu9tt6LXPrNn0{=p+Y9FmoU!$;d#BEZ`~{@=4{|l359J zA}t%NX7|Lc*1&XC#r)6^Q+Wr6HQKII1K?vaJW#mM35DnZ0M2kK0oXO=2tu?eI_B-f z&YV?Ezm^cMKn<17882xnY!uBD0*3T5EX@!_5G+iXWP(D#Z+{jjQM_t}P=Ti^B`JC; z>nd!b$`u(U0Eb}Tv-}gtj0cnN{Fb7O?|H{-@xnjsdkh9zV~i(}?GejYeAgnJmp;hA_wezjm=*{*cwJw;3$K zJomLR*FPhj=1-I5N!aIs)NdI!% z5Qk^sW+-!}RQtd~l0Hv=te9tj38NH9>8<3*{)3iYuUM3{Z4P zi4vtr9q5cFAM^~s*D;*$Bfu7kZqZ}gURMJvwkbJbJ#}%-#7ZiVPu^DDDv}qON(F}y z9dTCc>2;{3+!D6Z#`Pv1p~m}QU$X?8yX@xd1Qu zHkT3T#GafPbhMryMW0sWkKsl&s>Q}8`Jf`+m^4IGXy9J=218z zRc(ckHlyaV3!#`ICy!q52W-FY9X6AO zE`*)_aoicYS6NVX$~SSJEU4(aV4v4Ab9hIsNKJhx4@HOvC1jN9I|yc!Bgh9c0-SlG z69VHmWM**qO2mskyd+RTdh%?PcwjG=R)%5Xa zfEu!iLRKXez$ts>X%=s{EuWBD?ZD@t=GE4gn0ygZGrlAFM*t^DQ`1!8_BiSEm`Z4N z#}B~CNt^pMF}0$MStSd-KYbc6p2fzBTy9Z#>?T~(cI5vhR57BCW?OaoXYtzZ-OO+< zN-f`+>O7-2yUnw66TN;k#L zI1cWBy(XEXiJ2!h$3Ni681q}|@CTRnKjZ?EYHDM3xIS3)t82cQ7=Qd-C-7mAwENfd zXI^VgPhx}p-x%_Q)!rE|da*ONB~W7W=Apoinikv1sgV1Am#_SFzvVw5u|B1_i{vEvQZ1x6ZR@Gk+hjXah~E` zX35ZLP2*-)5*Dv;0X8vm(#&i(guoe^tY*DL*Dj@{3_FKfWwa8a)znm7;E9LAbAlWX zn}s`sx-0~6m;+YcO$}lSQ0{y1hQJ&W47eZZ-PgFk{7Y#au-TP(yVLBW;W;xShewZ~ zcfUwSnRKPT(=*dQ*QdPFG`;zJ34&&pQL&nERZu>gHU?*CF{U35yffXOCPuOjJ=-XD`Q9K@(8)W}+H1z#w z?u}vf8VuZogMzs6RIH{>L@=Dxsh@|C6ETC((A^^;<9cGUu*%d5oEbkhB2|=?pO+=a z9|H1{MJg$LGKW*slpWUg*`RoCM+aYwxTr!Pn22+N3PY(CRD4nkOl%ra1vDz8^dW-S zta&qEo9c|r_AWnSjk8eV%hLu0J1mJUCxCjp>zYnBlOx~+b`H$d{i*qouvIOo`CLKs z#bgKTst22-$o$3X*I)U^IR%O&?ifBB*s~WuCE80gkfvG1_Dz4T@-N)G{doP)%2HKS z;}6ZJ7poQqr&A|yOIWt9Jd zqT%_s;qrWpNC;>sD8qsYQ!@$NG4c7XN2u6_Kq%ncWON&qs83zn0iVGaI>CT~ zWiFak{1g$?7sb&^0yxCSZkT;T2tY(fc^+s}|0s0PaVD_S>JKGNKu3z{(t~rZpS@F? zKE2*EYYgPT#Hp#tSMvB^m(RZ*R}lSdwaogt+3 zC8tReyJ2hp0+B`Bk8`+JLlTE+vMJV@9`0t--*#g;iSF~3Ea7m;Z z>n_3?sjt9&EQv$PevP-o43Y2;xn@e`rE5l$Tei#_wesOFRq#p|%Pqg>xCkzS| zT3}1E^N_qe2mP#$N!%*iOw4OW!y$Va+*c(+e{P_F8Lt z1%{t2@U<&TMpfnNFbOP7mQ<5mw6e!IZ@Ev~Jy+??_8&TGUY-VJd4v5QEd%`5ioEZ? zxHp_|BVqHw``y;8F8h}nODzfUZ*5+r_=h?ybqo)RZ2gY76I^;qJty|zZ$*vD+B@8% zJ_w7g@Sjf;)NCdBzEs63Hf+o^X8hN@VP|f{@%Z`C&+<9zLyRd4@8BVKG#^L0v3)*% z1kM|eXx1Z4d?#C1D>RFM?L4wKqs#%%P%j41WNEk_pAL-O;kmR2i43=LbnmHPFq4XC zld8JrctT2zh0#bUh=zoE;!;e^$+F{lo62Z*mGP>;@rpfvoF@RpT0)i6@;onTgwqy> zX612UrOp+ssOC8A?DCq>T>u1N#d`O+LboF5YYJ2g%}*mJDDnhl7)i@)HGB+3C1FCc zklH4n{}cM*B6{$YXE(Y%uXcF#XMD-<#0f8-m~RS==P<9k4i4MYstT4<`CY6>11p4)iIvXoTf*SQoZ1oAW64!{z$yk zPy=C3#70Fg8C{&qtJExZw(`=VBds)is?~tlo$3H(taEPOhC}bGR^Slc0)S*rmVpFBjpo5Mfen&Y zX00ymx454BA;`beYv5)B|BxGDdA%B|$8~682Dx1ieAM26N}qk*t_w)0`O6jP(o1Gc z`>o>^9gkxa#w~zqSC_|kL68mH5J7kQ$tS%jZ8d z-FR)|jD$)i@T|zMqo4c$T(2YD zS&;B&==az%#+G)-2p7qqV&gutnswdT>K{nb)W)g+ z?c=MU9O-(}zL=KoDK66(nTzfqV9IloW#{56zY~HTzWhj3YQP(EUUm7r@>Hq!c7$j+ z;1>5(0KM&3ljB+i*CGzpVsZ!>DC?JPs?e2S&#e;&v1=OUwTKeh0)SwO|LAp zo>QqQ1elyDTf#<9Pil?!x%3({y9IZ84vYq;@cOvtX_?5{*RT{lz9c?Fj9fKI>r`Hn z8mq7jwxWW~*+!I04_*KYeVeKA1~iPN&3$<{=T*jdExxE4G{5Pej#~p0Iw4W;< zI*UC4cujfE^g4J$cqXZyK~sUx>M-ifIRiv9e=`SIGGDq(PH;tEnb(}I0PHp@qFxbO zDNJlv4WFp_T8HkpC4p#G1V09_-9 zRdEeLXpr@sl_WI~a7hIQ;MFg%J?m?W>_cQgM7Y2aem1YFmM?bK3RLtXR8ncw@9A(G zkTH-h1T9>1Cn3B9Bm`UoD84o#g_hM(sxy%J1cT{{;@T_HdyivKRhPD=ES&GvIxyQm zU4DxpQ_EA*1>Vg$j>&d5aCqB9Ui}apBi`nzTAmiOfpHe0gnv*Af3NG4qspkx5_u>{ z<7jypC?D!Eqg~#fAu{$R<5~x^z3*>SmM^tp{Kup ztM9V1*J~FK+R4UAqB2UEYR076$nwNSb`O5Clf zWE6Tv5*i2|Pp#(QZf*E&(FAQD`wLB zCd0O>sO_EX$A8GZXL$pBc3cUT2S;Fzk=wkOwCm8-7u>d!8DeJxrK1?KKd;vodld9H zZ-6?Qtj;!cks^Q_t=xSZPwA}e~B#Kne@6@Z0?WNA?#{e&40UAT0Gzv6=^6S z5o_0>y>-Dpw${c?TxH{~z!?F`?$(ze#jWMx*ybb8`nBicm9K;=hOL;%Qpf_of<~uQ1cPTmZPL6kMKlJW+653l0|*91jG+wE>K5y>V3tUXvTo z#*>`nWC^$@SEBVsSuPYh{F(^z z1K*SoN{G6+Awf?e+4fdF<3QI-e43|S5e)Ukq73_7_tW@Z)_(ru*GrGxj;MjTg=*TW9-ZYa5VLFra2 zf7rc5$VJ2{{Y<9Sfk`jM2w+!yR$HyN(QY@M`H`-i1#MP1!1+&18{9IUwD*^BO4J;f$l*OLx3dq<92 zwv42h$t@1hcHIPC*kHj#<~PKrFK=-%n(tV$?d|#j&IsKQ(lu&L)iq7dN02FJ+y@+cVh+twihb9@S4}UQw9b6*tjS?*iNCFrz5B2udFFmhE@yYrL8Ph~S>Z*I zL#*&-drA4zT+)rjzez?)zV%gt>6135QkY*Z{&P3yzrf2Pi(?9Y_Pd|!r5Q~0>Zqs6 zwf3i9hh~m+8Z^$bM2N^{Hh&3M_WSa)yx6*|Qv>@e-EgraMLt}b+64;;l55!Q_x&3&N-O0qWDS7X33JR4OgmgJ(L@N* zD~T_&RNV*+VZxlT-n3EJN@R&GM3Kp=7Db(f5rQL)o)$}E()fg2l$)4of&vg_D9#?P zeVr%L5R;%}Tdy0}xv@p8N3ynM$zpf_?Fi_m7?H4^%q#4TXYxu708JnSZCXhWRRT)4 z)5c7f7CGGMxu|uacB|3&Mb1dY!{?*3p2^o2Y@O6kM{T)gd+(!l|a9qEfdvmI^Hn(ze zxQOGqi>je=RmtGQ>HO^0&;K_6rUK|xK)T%lj^f_K3`U|JaC+)-ANO++eKlx!Yb?`22Yf@BgR|9{?5DoA_fZn0^VfsW#!h{HCijyn$r8 z_FNd=Gd~`q{I&lYO-1{gixTtjMH;9rGu+{{qRtmUU)rDs@#2mA0O7N0a(jDj77CN1 z(duEW9(7O5ydK=CIR9>2j*%H)ka)xI`D?Vzmte+~AguGuAKDB5_Q=&E&Q#5p;Y(g` zFTr7iH}AK9%*j<3hf#92s%OOICvjv13e=w_+?z;Tyi<(3eVr!ve}JjN=-hhBcp!b)Fm z&?)y3I6YP*P@c>&4Quj^V$n2TS#XFn@Gb6T1M1<1lC)YPxxiz&h~qOo2DCDbz4464 zsGuBKie=QY^Psm<58I*XE``v?(0ZkF5AqrbU!g`(Feg*F#7K6 zqxY(=Z~82rYrK_znfZv7lvJFTI+p%i#@RC1^uk9uKb6yxxR>HhYc?DAzX4zQO}nl zm;Gncs6Law4~B0a z0dtc*psZs9SU~G_PvnG|RUeH`ogK%m4a6j2K%nRtqrrdZahY)jtKdYZ{sPR%&Y>hpv(&?kk^+)V1PDjZXr!LxPh9~i1H+ggETO_M;hsB(r#Ck)$RJu z5LET9>5E~34{vyMcd z0Da}-Vb>`<(vVX|K{onCuIeLz_aI&9l6we)kJ!hhHzQt5tHfwtkEB#sd1exX*;9G* zR;*WIZT{3%7&H!}BGBzypwXOLwS{*E=NU=79rYr^*X#SYM7tc;mDbL5pl}ZpK^cy5 zk7lGb-_8Ez0Cz3gMQF%xRIcYbJiL=ozXqt>5yUM$pj@~WcT7|W@qHZeW|#j~An4kd zkYY0J?d1o$PleL0W+xYiU{C)%Y2{b=^ES5SYO@$pf=4*AH{};~pdk4(bm!!AVa35A zQ!|((wHHDiF;cukp_aVdz%`NU%N`cfqXbS+uG;uliP58yVKO5Rl947RB{v&c{kf(} zD+F?uYc(Ir#S}1QIQ7XmG8Jm~jfkY6i%k17`NBysTS_~cCDKzI z3;=b2rkZC7_*pc-98kkba9~2+|C8LOs2Zhc4EHDVzPHL=(T`i|?C?fm_CGvqKH5k} zBw_70+Qbp?e$N});XcwEO(`%W%lcaUs!^9uxVYw%BfHUL>j#>FV;eG-oaIkiLnl8y z9v6A=bB?pij5NNJq4TieQDUsVFm{9IT~wfW$YMvM>PYm^|( z^{a%vrGct4Kj3@4ieKA>HwwMY?NVASRR#+F65xDQYVZ`N)amZrNu`ifVZEz83M0mE zYjQ7pefaREnhy9m;81@0qz7T9ry8xv=S-mj{l=M^+eDyo(M_zQVH}G~&iLrcX!hCA zZ+%E;92E076gP+0{M@XzYl`u|gKuDCF)A&FG&+aK8$G5=e)gyzOf@5yLWJlycVq@7 z-9|SEZ_IG=fa3 z43WIWlq+50ovEXqQ}F*J_ZL{JmxkZ_q%hv!R5@^Lk_11L1R(7+>$-9ipP0oAw{(XHx1!z`dDCjs!YD{2BvAY(*;Z$B1U+yjnS^T3Gf&A`zyP$d{ z6NvNitGOG9XV+RfBU#s)S3|+SJ4R-|vm?A4|>VUF}UXJYSgBL%EyoTteB^T?JqK zzVopS&)om?vzLrM$m{XsF+^eJ16i~xO^slqg5TSDY}|Z7mj^G&USFoNtx`mF95d<* zAw&7`a#7jH6*<{WxDy^GN%mH+7#DyszzTbDYjA|So#QRA)Q6BKvEi@a45FiO z{>eg+UT6%gxmEtEt6+-}NwWrnFbEEFEU9qyXRV?|bAw!*DV$b;Zld(@7$BBc(~Ox$ zDbnN+7f^Ikb@~6QuN`1z{7v=7PsZS9${Pa{oBR2!0AT?#AsU3-k5Qy11=Yg%x!*SH z?nP$ASNHVj(+4=S_MgRA>T$tTW!`aSW~@86gEf7QMPaCw?~kCd1>FMH0v zLOha!S7gta*h~?*#ccm&pjnQaVF0*Y3>XtcS4Kdqa&^_+t;DidR>tND3&E^D?Vos<8ubae(_XXV5x~ljwQr4SaEpq02ikQy();%?~ht^-aEp#zjoGttE z3EWbXYsY-ahZ_J`jpHk@&n)WGaS#8UlJ zQXLN~CwZsANI@y5`%ufp^W*Ndb^kiIdaMYZgh=Z zcx$WF7Pi*M<0o+K+0z^UN4SH&6>hUT`6&4pSWS+~Ig_KvrsL6hrPDFjjDlY+i(k zF_i^>$JgZ9DfIWCv4g{pMS4HnpsBhkqGzK4nrKUJUexq^wc_$h|K>^v(JqMT78S{C zD%fLQwIvgcbh$MhNo(AIwZKeao&raH11T0L)*-4*G1t=$dHb7`a-@)SK?kTlhhh;~ z1LQQA*~vHN^t|AZcM%`JBI$Bak;WAVhTw%>!_LPM0_-&S3hm|aT`T9W&Y?6!ijv>W z2aRl<1}6{33aS3`H5Y#R)5^v<{n8c5mQEs@R~_Qe!y8?T0y z2YqKgIH<_qUOc*Jk!9~U#hLkA>%p}j&R-AuzC8YB%jGo|`s3ffSztX<2UiE{XOVdH z+~TW>#!A?qjB6rNTtTWp`h*sSKA~EcCOqFO+vs~6Bo@EIsRbjF@1edx&0xgqW~doM zq4I5hsP;fMxrlL=g*#%I#_r4f4Y(^ZAID<>@1!4(l;V>SW1uM5=wWD2|qZMwf zx$tRnkK=tWxiA0wmy4{pn4zw`qeNu3NH0#f|A<}R-#raHOLFD#Qn-F_PG^$XJYA4< zPOZy*=hirdV>q)`g4g)Nqa)=zlCLxE?xgF*v}+pKD#n;A6g^Yy`OXM(;Hkg?X_;w( z5-B0^-zOUdenoiB&Arip86@adOb`d+QJE8z;yJptN$Uwyfua5Ry-({)-4Ak4e=J9G zlFAhO!e$9EW=nF5!BF9Fnw{==`ibArci>4u*MdnV8Hq~fI^<=bX$+mGSD#Jm)~G(7&{zY)mrS%s`NOy#vmSL@MX+Cj zB)LmA4`BDHyi1xVijpauVfaq`jk3?p^lIVak`-sJK%r9hm{xcJH8mPQ$R`Q1$RS9A zn?A07Gy5J{|0OgJSgNLzamO1gJ+Z~hbo}XZ>chB1Hq3lfs=m#tazecyY!npNW!W#h zdG@8foa4J})tW-+Y&uPIBu7Su-}gyceYaxOoAWBBeHnsMlHKkabH;r}hl4BOCEpSc z8{dj0frH3lKL~}dUjOvuI&k0!ct5N^cEAShIeU(Gb%4`O;l8raky_h%M5 z%YPqINcwI+U;k9l@P`%T=!&AUT7Kjy22qtkz|s|{nMvLY{dAI5s{8k~voK;gPgqdD zpxDNB_Edz2zN;&Nbw;N${il6is0_F(#@|ak(F}N+LkGWXcCuqc5PT~jjiE}Gu4qFe z{E|3|@%pnqZNL-Q4H6|?!f-TrCD%-r)N5nM$+H>C0zca^{pvvqzKlif5#n2HNV! zND@{xJI4;-P>^ZQsu2ssyE$E^M#W$_=5QrCRHA9uSsuL_apO1?e{ZeN$ zyKE79f!k^^bCr9cB=YB9-P#D`l``H(8Me6Y`3if+wGZ4D`fuv}Uk|3k(kN=aQX-BH zA1 zb7T!&yjdHBke<7n#We8^JG5O-Ivzv9^W=6hxV5EO-9vE^g7xQ5>Kv!qYk&?7k}SY{1~UB*5~sXEME1f4@FsS3W=kx%Im^QQr^;+`5Fve z?IWJ~?BNqGRhKE1RG>ngkWF&Hf` z0U(=u#z_^EX$U<{N>rgn1;wtcU@p0J`jht~;hGOKcrC9<4Xc8v@2l}-Mt~UHTMm>g zdfli9*dB4?A|N`iCf1uFuQhJT{hd6($)oz*0!Wtz#tJ3NU@0SxVM_UZ#>3&s+60E+ zh?ZGjUNPj>cdfkl0Cp^B2*9TVQco8CbzQ)C`0q&gKbadep1d zT@Ls8T#??KZ5!!ZU=vGHbHjD982N2KJ=AYCL1qB?-qq=|2QtxOJRu8mZV4yH`*Aql z@8&QuF(d;|S=NM#O6p^%VZA-rjhwXY~y$t%a7Wya#osc<+CEZ zuUB*|o49ApATNh^BNJ|WzFKFdk0aEU+T^Ff1uChupfrH5=-ms(k0fQPCbo`=s@7Tj znC|UWt%C2*@}GehkEE%&fjkSzUKR1yCDr=QvzN+2-`8a{>w6(wX9XmEfFMKe6kgac zJz9X;QX5F&miWG`znXhUxlXas3oh-4rKT3oykekBW?xp3-w!J97<4peldZokc9RlPzPM8Bmj^G?7<)6m^y=P=OD-Vnp@BM2ky zKkqtOZiXDK|8&>!@6odruJjzxWA_+O%+>-qCWesPmJaRD)p90Nsd0|(RtM35Qk>_&!qCZ&2NnJ)20 zCJeDDsC1K&EYlWIg@1!Ic|FZLCiE6sx_9gl3p?$vpEtS8~-6XH=expr4v;~?x$3wq4-Q= z;f!t6MsY6uKm*vtp8E#v@gp@puUb|sgt0%!(eJ(?XyT~{c`x8z@&Sg#M(3no&}HVX^$aK^I*wL^zfP_ zkIJjVl^CJ2A(TItCFV%x!i7T56Pc^U&v!Ls>tX+1-zd(S&+kXSb1;_c70I$#k&L0_ zCQR{ey36e&Sx;5$5w$YaB-@TcvDfcI9*uGoqgnU1`f%Q%cWiaUpS`^}**a&j9?Qqo z__!e}riGO&%dE`8W9OMx{Z+qXF4x!tr)NbUqnN64o1Zm#0WJ&#(&LzX0Q1=PB!~Jc z4S8}vxQA!eH;LmV(?G|xXh5hohzmS%q4ujEr)krK&diqWnfqDe|C1cGrXm-keEi-O zkN4Vo>P~$ZJ^pxVZud?-mt3~>QeI*5*@?wdWVSEzPB*>WTR+2o)X$s^HXUtWSK<-6 zkSTUw<3V{XTkph(-RhYZK{h zY`6nlCHOh&fSQTYAq*JIM5*s38v*7P2kQ=x>g4WOlIDRG>VPsdx^5&woA}6j5FTor zl9NRS1TlWzw!>zLCG=X|W7TaHG3Wiy&gl`h0jC(15%cL ziQR;;^cVX&q0j_|jBy?bAo^B}vP=KO$xMgV%)L zcL%XhExOdcaB)no( z-iOWE{0J^fu!8o9U`omElcR0Ki6OVtD#~8Z% z^GT=l{SzHamtVeR@=~Z&r^Ml|s49k0O7fs()EY&Lx=ei;Xp)-=5X{i)7DDciynRE% z3hzOz81^RYC7^3yx|V6t88QKt=7|&QPSFq4LRG0-Q#t5CHBlUH(HUo1kQhC}0H>q9 zfKMdPJvFztd;%u%dZ}?0KDCr66m1(3RSDCI5_jTtO}=d^z(GAuZF?nY=7^xDmtv`) z7-2XX&q6cgVi@&800?-SUg>K@?mIycJj9B0g-_f(_fyP&lG|sgK$U6!S7^vo{lK-f zIlZ~`AwYNaWq8pr@PXXP+y}Zj#ZF`CHxA)DGdfM#9VfoBSLT-o*WcFNyZWvNciuYc z5>+JJZtZPot(#}Mlc`Lmc>_TwOe{X+k!|S2v-xKS_5b>p9WLVg-Gi&vEk(B6?1JCE zq#T9%&3Dw{6jH}tqlyZ8EB59a0RZ-pc8H>W?!JB~9u9v*QOlj4g6N{+Y#^rcCy`8W z6d(r(<&pPkF27wX7zeqs%?aZeAEo05xj6KA`>vp8AL3THdozy9NmG}z*$9fPU_Pw$ zC>k1{{H6+BRB{on^}dgn)}X=Z#auvF{u_w(XulQyrW*aJCApo+j2G4}yBJ(Lfu zgp*1uhJa!s>%@ETGf2b%9aMy8kwo@`H3548Vrf@wrhMYAzxBZInOt`+`^Fita7$VE z-qSsM1scry!p--Sy1tShn!ZuJIYRl=kkxxO17yvH)4!U{9VArxikH$oUZ?fErsiJT zf^4j*eIL6Ku!)JcS;yH{T}jiPIf)C7__%$>Ed|#-k<4_|o)}Td_p+#NW?Ls*X79+p zten@kWOf4r$Nl{ z902unRWBucG#?LD72_U!8A6n<1XYr=u;f7RI4!(#CI%i?VGp0`fxU3jp0hsYT9CO@ z0caDx@WAg}Z)q5sEB?IT@N>=aaaM2k^HYK}Kl8BMNqz2Ii314OT|DRtD^U>|NqIoC zMphwZr#cn0nCEz@J>}8B%Vv;OY1fn*h~vcl&I$Z~k~>}>*h@46{FGo1TD=M<*7jjt zULJV6U!kSJuQB7Ge>#V|Rh#IXd8_ZkL4GzLHn68s4bpCH`k#HdYtzN6Uht&oJJ+|i zOG3|X|IL~h&F1QAsd%6qLHYQsg%R+XYwYL7-G4(HeOc(xi&+WtMIkmf8E`%GibqOY zIa{sC7wQVD0)WovRuBI&5mu899&I0wuix3N2tbB!b^c6AZm3dvbPQ75>q1qfCQaId z;eQ1!GkXScT6~&kr2$BFf_>kd1Ch`LU|C@s$x?R~8lefRr}{7`~j7ukg7t6=SCw7BVln0Y}sk7{tLSae8q~8U3`4}m^@(+@mQy6M5ATuOGgIJ2C z%VRtN$J|FY)xHcxHH`JDR2uG!_BKwFmrN~LA8a;hS|1D%-E24NtdS<+Wgp#gaeh-IhVj^_me;-zsYDxt@;FAp9phdc8X>A(yaP8BX z@yPX#KhNyX|GfpwqS8w&m*oP8c^<7xr4a=RNM z{OQw^?rWlpvRsYBtV~dbDhF(w@Z+?SaG|AZnqJ;1HW?WPn8Otpj(_|vNcB&T@)*PK zZC=pE^2m5L#}v0Z*)fj9{{2ngc_0hRaA{N^J`nrfMLIrxWmV0lLjqoB?;Uo-AC93q`@% zN1S6GUiaKxDR?IAc5+J;dR)HB3Xw3s=olKhr)ZKCWKab^DwjLfZ?!dF1F^skVxYt_lQ8OD6z{?Y#Z!kgT^R(QChrFLzblPJ0k1 z=BcnC{n_SmKsif<1QW;xiiC)tjWG{_RAd?XC&V1{ur5ms3PC)%tKU<#8Xuriw=(Zj z(?~k#2s>p$@R-aY%N{Zc!nn*AohlEY5lV7XqjGhs0o0&`tmO>7*UfYw)FgIBI1s3B z9ws1WK2`scWRJlpy*QD$z!aFdS)6r=X*zmA_L1yaW${jH&*j~Niekl1KfTm5r1j{D z{#U{^(M>mA-0wL;1l$Vx6|nw|BfDs#N4|m|#Zvp9n>p<`+`_21K9MQy5g0!(k7KaBLitg!%?m=51azh49JSs_Ye*uzRW~PJCwv z5M*S`DOvo3s!zM;DVGFFqq$=s2936fNFHk-xz_q3!2w>E+I zW&k39x8Jk)cQ7!4$?g0#LC12oa!6RdEnwDU{o#pjW#gRb#+E_YN(u0`W78ahP0y!c;~Bf+qROq6xEgIO1fRC07>y&QGB7x=O08A+9@mlwG1D0RL%pS6!2f z_DnT-msRriW<^H&$e5}QRRX@A|7ht#cr*{Iy@K6?&yhw3?wNd#eI=~M3{b>b72`4o zZZ|MkLJrP?j&!@`-&c-vvA_W8)HdX# zIhH#iO{H`HQZ^Ayn=sK$DK@B59RUr&3&kuDSFT(VaN={Yg=L>#q||x?`ouzfI;uxHNV5bS)NAUl_xrb$g-KbCZ!tBsdK0%3_pC@?7y|$5NQ3 zxltgwo-k5*xN;H5wa5A-hASA*C&F7ONjwguawa@RwYUu3?^F`DA!$Z7BrXOvFv@2k ziI^_i?&9;_`q`R8>#Ywnre1G8Ut%-7fEpWsoO$pAU^@Au$~RvisI2UlG6@V!Mh@CX zgGQ{Kt=Znnj=?v|CQ{BOkKU?YyK&igq{#f$I_J!@%O8H^^Pxh-2v#Sk!_~h{$arwE z->&th#Tt(oyKE_ZEHYVEUC~!l$zkjEBkhB5R&dJ&5ud#;epuy^B3TZWfVda@cjrb5 zN)96)Tdtb<9muQ?b%|yey0t78th@}q7e4B1WB=R#+mjENhQeHnTI&yI=kvyiQQCLy zW>orK2_-d#<4)sivqPF<)Prw$Y!EnHB`R?(ls9h$q9_{*&B(RBcVSqRLe{dNIzEHnCRYG}9|l zYbd=v=vh}I_}0)AD5Y(xIP^+#sod%ntwQK*1Af2J6WJuMY=wu7l#M-EpqB5ws6G7s zD?044nVR(ye#n%kD?d{E-!;k9VVsffO9>J?86%K-oT~J1sYHf1o;+^d0oqw zj=<8thtQq+gQXlUiRu_V2R>cE`%GlJ;y~>2R?_!=HAZ(;OtTj;%F}BuGqN2T$IThz z2@ofiG`pJLf+$f&OW42y{08LD0fwh#X@RNH-g0d5!}ndN=~SZl0@992^!#H|ejzYU zcKcoiY-caSu+!}Xefnwd-9)~1JLzomC-($p8m@O=l*(THnZnuTDS6iPXy)f=bnUnt ziWsKAzS$ggQTJ>#RY@M7{RW}TpqNDL5sBUtt#8gJ2l04ku2i23F4l3Cj|FAU$uIB` zl?1XauSZz2d=X6d+*H0f>wqI%2fN#tZW9N;Dz{Zg{CTwI(fAn%x?8 z3=3=CiZ<{(9l!7BVG(-^2Z3<{>{z6$r$<5=G1?ZTaJ`)DkFScKj{C~zHxl4UmRq^XNiH* zgV^G*cE?B2^_S3O=gU;dZ{NSi3}NyzTC4U z<}n=F4W5msRUeN4vq$Is1N^sH-tG+(p4?@5}B7}(!(@f=V8 zXlwDL!p)Ay{oszh~R>da2!FC$VTQ6Bkh+B2h^mBdCGMa71xqBvMAB5%76}=zl zhd{vWVyT)BZK@G?=8(o_GSWZ|x+j2TNjUB_kG0Ax=i73ifRK341v&eXmL&I#LjK%} zIHEA7$1zIG#Ig7~<;GwwN2K=qG7bQdX`_l$rQoWxanBO}d)g~M0w6CN;_ z0?`G;c(CYcU-1HEjHX0!fj_(3nFh%x|4D8YSTaziZ?V2Jpx*9z?8`0p8mqm~ZM*n| z)qkSrZFKRk@_&1f_+F_8eGRMzfop3|epltijh4?QUTiBeF?O0GbgXx)w6~TF!!Dau z%fkeI(b%jUvUPMx*ubM>o9!*G?oj00t zm|;rV^hlZYG~;udy|KauQ#;s59?m(4O0RV0QmwITFX~tPY zTfDR&F9^(-ijU+#!5LasBOI5Sx=f>zRj#qI3P`FqqP17xR=XEc$yWL5E*|y%i6JaR z`sB~k!vd=PRSNxqB=$IZyEGcNp|n+R@gj?9yZQcQ{tLgD^V$c>EnsmtU;UizVQ+M! z*CtZkvO>1CPUdp;@hx=<@162%W`?KCHeQ;!eR;eq<~Pb)qa35mFZZ3V?nKp}v@c)# zK%i{CVbUX~+YaYbpf(L>{^ao{y(8d|@S&p@KFX2wYyqRp(-VkOu7lCl;u@N+5AAzi z3-~U^29*u?9<~o$J!@Z>6n_!TzUYH1o;`nGN#-zj!beXPab7N;+^=g`IsfsLqZ#!f zsGii(s7-Gj>sLhylLAg-0ZGi>9*}T|*kgRmMygX6^44N5XoyE_(UW4!4aORhrlo%K zBfUBEmLZyAbPg|Dx~vw{f}>nYAPkE1CSZ)%Susj$Ki+!v_FROvH^^};k&T(Pj3ZY}pC;kH zH1l&3B_UE+Mxi5X)qny~q+|NiCHd;M^dCW$faaPNJiHVDq>4XcEz_|yHLlG19O*Ei z<0t}Qk3B!?7b|KaNN*WF`V~C3!<%ScKJBCyfBp4LUi;=db5)+$+XM>zjj3AL{K?Ta z)$*rKDfv8}hY2QkfOWFrW%eFfTZ9U=sM160hrw^`&;I-I3J&0yS2Zu|wbd{R)QgYf zX2_bTfqQ7 z2nEwnigH+|gsUaBwz;2?-Z(>`Pw7NyX%qTL)rYIFwUYn1SS{;)XFw%u;GGVYs)=Q} zBwMCfm8O3!H~ArkHSCX34KZw#THuvXO(vhqc@f;D96TI%t|YSest8Cjj{YE8iElH; zPAqiH!BBGaaow!nMlQv^j`N_?C9y2-r(_>{XrhX|?c9o84pFXi)v}<9_j=aqXTMuY zT`TR)Zkm@7{~QPJ_mmpBALUuwKL5fg;ak&o84?N&wQ=@pIZNdQ(&&8>4pE7{tH$h8 z_C594$b;sp6ozV0xgcYay&MZ2PXam)i4E8%fv3h(Ci=m$jjvJF%NOZU#21GNl#lgucZeKy62QV?s#mN&9ar-v;8Dp5aX8r zz$M+AagWb`J2XTvDPq!gtKW}zo&E0YTxqx#!nwaN2v(*ji={`iSvlJ>ojDJ8D-^jI zg%2N|3B2=CkkhvCaazbT;Ab`9omVN^S~OQ->2~`!!}G(Fr+ZZ^Z!`unE;lE>{+S%* zKxG2)`(WscXWSE{(Mu$X)$@2RAn6S-CLt-A6u&z&%Jm9nd9F2%jw&Bd-BA|iHa$&~ zEPh=MBsd16S#nqf30t>0xKu5$K&6G2mM?pioRG!!fnTEi%2++FKs(Soot?)|lTD#$ z!Fa1R9`K>zX;$ZOu0BKU7(Ow5o>kdl#)ULXgB97~Y}tu}H<$!T4&lr8az{ltU0KP; z`jInMoMf*esUTOVR{uhPE@MjZzae*gIL%t7sqFEoKe5$o>+zGYlX6}2-ZH#b?Hv7V zPe%G)GQtH$RZJk3e@IoDPW`}G8kbu$#04FVlR#mB>VLf0U5)X5OQ-L-f*fmR(jh(S zkyi_9u8VGg_}p*QCnxa1R(M&N5r#Bn)GA)#^+?)X(L}L^4=Xnu#I8ClT*&9yf*o7G z^4TocZ0$2ZWo4EG7NnW_6^Yj_cyT_Zv!b(D+N{zgDFilJOmEc|#;+nPBCx~_u!f!! zB=iYS2a2gha+izGObPnj8}%W{9^MDSO&HZj9~Tt0GM%j2zfbYUais>qsBU67cLaZ> zobR((^k;F*geel-z1(94YTrfMoK;7u#yqta>Sdl}zpR_sJep9Ip&!sYp!QwBZtlL* zE*Y|;6zMU#fi9_7QmS*aVVrjK*gct^;Da9!U&~RpEg$rlpXsAyEMRB3IMbpF)X~SHVHlDyeaF4RAG|S4CWegGmG=kRBzR#XB{@2$zg!ivN&bVlW<)j?HckaOX zts(vh-LqFQhj0a%uO*v)$^Yqu<7$+Gi@CSfA63CITdiXK=l8Ed)A+3wBy3xk-h@#q zgBl#|y;8pw{MsV+zGMZ=i1 z>KhduO>D@rSHhVI864kn)E$(9FW1T-R*H14_$E1^lL?j~0J6}rSI)O58TVp_Ek(i; zQjH{N63%F)HoYTFk$J1o1^_~wFusuQA>vx@Sb#;9bgnIu+(e~CZ=6j?Ui$J{?C*ae z_YHU%Rb~3|leS%DD?4Lo*IK5V5NMo?SN ztSR)XrGB%9k8%u$hg7)Y^H2KoljC5|Jkl3xY6^9D7#K%GVK`Lu%VN z;i_cD;v{C$J77xZsnw>VPxfXzM!J;CX7em3<8Dx=kN>=s!?2l)*th<^6ID0lSYdTm zx5&3ufvp&7dcfr2nTh;CtjNLqT4Wq7=5bMvHnr7v+~I@Ysk@tpFIoLjy*c|~qLZnj z?*2R4H;3%>{rKJ1^1D}lW*!u(z$~_?Z!HyumNkM(a}))&JJmD&&@5YZ%Y%Y0gHk^Q z0ZmB&Y!~kne6Ihs>%#VoJ6`E5jtwvwm;uELAf7Nb#a-LEkQ`kQ5lGPrD$1vl=7RMb zg@U%m=9StKbXYxU^i6!Txi1ZUG{mu|`cJeA9(^S=Sw!&KMGbo;xBCWIs_gB=fmHG;b!kccZGUNT-^jUL9gJIv_bKrWp*9+cvReYABq!@ zBK3+5n?hshPvRo*>8p57xC|~Od|PC`3=%eR8*JQ`rRalKR0tlP54En_W6h85*ddG$@d+3h?NM$x?N^phN-T~u?^0Q1?r|sSjaI=nBB2-&^7kb_sl5kL5@83^z}XKf1CS35FFn{ zg{0QD;g^o9Br1UNyw^On zLgZoXEnakb@DT{{{pdC005A7b@;HgYkrY5xY3Obht~`b z@86VNXD&50&K9wxZ+9wQ)Kqjo?P@|~fE*ap`i!eiif<|r5IfiW-P9NUgpD>IYh|=0 zw?7+JOvx?(zNy6q$k_djq{Zl3pp0&a6ME{wUB@*kSpGzgd;LrriU-uh#CWh*x!btkm4bV1ZTa8} zBGwjlM*&DL7tt>ZJEVpv0Kk3dL}ojNMt2_#C&0o~B423n?NcA%wgEU?alCbm%PH?} z6z|aIcLW>)2|`?m=RaoFJ^?9Tmrp_$0wio9ef}NmXf{y8Cs}U}SG3 zTy*y$+Bfg;)dxSGPC1viT#IZSpJriJ?>PU(eqC{bP*)6j&hxHq{T+%l6onGJ=8noH87dnBoDG zQ_oEf0n*SaA?`pzQfiF*5?VVWiz;dcmSi$lj$W4B*N_aAsDU<;MWeL%Zm(qM`o*a%0G>~pX zD9eg|EQ(2EPAz%)5WnifVXuvL%Ou!zwNaOSYiY8QM(x>z;b(+M1b94=Rw2qMP)}R%${-A zf_$BaNhzg^C2}k^AS9ehR4VYV6ZumMoOx{{6|jVd=`JCk*QUyP6|Y=j_o^xvOkTTV z6r;ezdlKO`BHw1?d1jT=m@357dP)N4b0TlpyI_0~#7@Dm-e_@*) zc&7|56)Pb!y7SG&(a6rx;}W6WE0Meo3D|$7f+>dw{4G__4`tNKtqEuKkzHk!!OsS!J^zxctq4eS|)?msV1^W2!=I=&M>{ zCnHIC1&HKA7=xKc1q5O4Z!n~?2*E~Se z#mbzS9?nNvqFQd5@P}tbydUjDP7_7=?KT~iN0<+@P^h zfJNC1G3%S6S-Y2;?_e5F?pV$Pw!2d1obA)IAdUZgto@+o{hV2Su zOxeCJX`~49#*VFbC*kjvTUz*BH@i# z5Y-MKtpt*^&`Iezo2{tmbVm-XkrSpHbSBG}^X2XFXLWL8kqs_iA%ih_eKn+Cx@UM= zSMEKX)xX_VobWMo`e$I`PV0j&%A5a;PWLa|J*$s6P$Mj~TqSM|KPbPLwI|bb&XN6k zzPvul(M)+b(IlnCD$4zdXkc5e`;*#B!`eCZZ&uD;>Ct~17B%nW;$(Pn_|mVNr}6Nl zYazEv>1D4xSi~J7yf21l7qDhgG}`mQ7XABiC}lnmx~Q(Djx+*quFS|AFREDSueuJp z$p8r+5AylK#9*L#s106?9H|8@!-H)pI8{-wK`MWhOp%8GRT+iL>D?Isdz%I5ud{(! z0P8rTFp`gFm?uILqK9$UPsgCqa)l*mCjzmsy9@3Mp__hIUz^wj2f0h;D`@!+j?)c{&u%0Prxv0t45r;?i)L)BUTzS3c{-;kG?N4VP{Qe21RYfOZ zukO`!IrmZ2aPvX+--$V~6@sDZ%@~M=ZfHX@(0y?_dRLT!wUSENoK`ks@qJ(3ekfckGJId0fT>BC<0D{)>OF-HgA6O(P zB_lKFP3RO?;tMzptb#FmlAn)4*!id-Wyqrk84CTXM;krS>@Q#OrB=Ut|H#FW^7jl+ z%AJ|5oksl=FWqb>uZD{q~<4TM5^&f>m z0fiG#_TmQmRoQor&`O{qlazwoS3D=CAzT^hodU!!0RnP@MyIF*5Ib+oHGqxHNO?6b z9!i^ts2~7^N}Mp+u}wrtts%QIDa>@>(Q;u7Upb>v5Iz8AeDE4IBWd+zl@%;zlx^a> z5s?f&7o5I;B8~gVCw}0cl4F_EO`D3JL&xvzwpa1>z3I6Kg&1>g0KKE)q z%|q4RU0;6-01(Aro^Bl-=JfS7E=z3IggDBaqbZ?^+_sD4NF+uFQN9#WlXjCiFG*Ou zlCw0yQ)-|MKV}NoG-fCu7#fPM$XVm&!1JOneMhp`E*K9hNAdul0O^QkT+5~CNDAFh zxxI2lQ`&|&zh&#iLxipJq1tsU%km5N*!()Lu-~xi z81?l3^qnm#8|>o4y|1;9{sc?5o~oJLX}^a;q4-Ise;2e~8+o}X?H*~rbkr|Z1lWXT z(nAbqmQ_Tq3W8BYfah3UKi(Ts`T@(T8MU|)rZXyj+3~V5mP)UZF;GNqMqIQ_ZKe=5 zM7N`>ym~=3Fjc;a5{9Ur!U!03x&V;KC_AXaEj?tRw3-6t48A3jCIm81tnO~@xl39> z42*j$>NLjN?v3i5v?L4xH%ASD&(G*ULC<>)dBl*|dej}j zUiGM_Uqmn47-{020su`_?b-ax*JCdfs<2I*vPXKf zY}9L=*}Cyx(ZkxdhB^%VA#w}+c}Ls^x!HJ`>Xchi=g183MLGv0LC-dZ&(mJ7ZZj|- zZ?O@wQ3WNbBMczn%9Wr6-fSQ%1#0TES>K_P3^7KXPcKWZYD_MRZs+7DIc6sW(^^A5 z;S*_L5IlUF_7&FzMw>WVPUPJ>B7au50KspWe>{=@rs8e= z>8CTgrvozg56E3mf2H*PhWgLtDa9w7!leu7!eBHyZcfHu+ zpB?Se$aAj`JzIHZ@}}NsYB=Y&Zo~TIzjyS?#0y}jZ0b%euwz;WRkFtuVAf0;!33G5 zj*|=sw))neNEfwMu~-dK!X^q$8BDCSYtbONkmK|`l|8Nz@9TMX@VT(7o?F~IU7d*g zpuw2ON8j!aiy}tTykeUygEE_gbqd4A4n>m!kF)@e8ybZn&zfv0@4QyFtqybOJo+@O zT>V3-{2>emoK#(-N%xF!ow!faPIFLpQ&7egDIbF`XcWYGi#bVallkH?>^*7FvXtrD zrSwSUyt)KHXpyMEtZdHOo_0?|J!cMO&Pi`+xRt!KmK6FqHr0N^sX#bp<*d~k#%Ql zai^+}Dd5qoYk#(!VZmH87(-7z$6gn0Kip}2_`2WqLjl?Cp_JFFt?RpP+>pNT`Y-D2 zw}yA0*MBv5FMj@W?0;3NU_lyt<3X?D>mLsq&i#GzuI!nA=k8C&2M0@^o1kxq8@mrW;O#5hdDUyC-x*SNEbk2BksRYg;Vvdo#%GDuSHbj|K8kT0< z{}*yKfSudFViP`cpz-!E2X~19TL2tTsJ7Vi*j5;*pv@N&D+8#3im{y3sATKU6T*Sq zy{ash4J|$wbclqtFTG`OYMS(-6>$@~1Xyz=Jv zqeC;No^^Z(zwpnEL+=~D;`cNh9XhoC?)r^s%%77bR{tEslzv+I-;1AadU)b{(7l`Y z7d-0Mcd()sY`Q>L0DvlFGg<7MDoD`T8r~fiAk^_jPnFP11zE6_L?v=I#i4~ZBpzf{ zmT687Q?eyAnv)JA7Z59|B#=rRYA%xU$hT8xMQ(pqtVvQ!Su1t(aRxQ(J8|awX&@qOdwg`e>`|YKnQ^6!~l9i3bfL5EDbhRksn?b zf!R`?zv=m_>H%YQCoWQIm(u3G=|GU%WHv#9 zK6>}<>O1vTUn2I>>n}XXPCj|~XhGBM*Y3Z4Z|tpjJAC-=-dW1Cgg<^Cub;eynf6=% zMEZT|!pOSd+&}9-*Z=%^uyy{&!*l0&n*Vz-4?ZRwtK87uG5PuT@1MvAe}As8pE|rj zqFVj}Yc^FA?Pa)ft%}4Dg#!7GRkAlw8HgnixgZHZR^SF4<8d&8|24eS0J^9>a0PtG4QDA6qfzrSfKCafr&TrQ3Q(^^9(`&r}TFx7_*r@t*bd$Bh8+ z0Ee_qdjh}wk%YA2f|zBb51S@*ICx^d9Lv#15CXMG6#@kihPjwb>OSjWlbY6_ zq~x0Z??_d8GFPTEeLSJuDSW<-dt}qy6|_^iSZ>iw7# z{~jF9iUe}rcnL_2aoUb%%{&9BDe<9F3OCw>7|^l}Mv7*>je{`dWzdb*Ik|aT(JdAn zfs#_zCbXlVX@y?^l;NdI%{NR(gN1CGQ3`fZ9QFon1n0A~Y`dzg3pvp9%1}imtQ_Tl z5k}sU6pb3Ko-_>c732~LPAU@twVlnE4~fW`=O=2+%vZ;s+*aI^I|Xl0$oDC$ImJ$( zjy#zb{x;7m{rR7MbmHRsfoHylHh(|1kWcs^kOu9XifcUe_1xcY_iruJvWaGU)?K?d zjO#nFs$s+33gzNExWEi$J?kW)pgTFZ!#y4jLzlaut?bl0cB6B2IiMP6IKgYIL1qgD z*U>NpVbxE#Q~OSu$PHCdZb61sDB^5Ata^}v-2jyG`k_8oh00KrCbx5~!Y`EF?75XB zb_+|9Zz5I=RVl;U!pQMpSyi=bFv6IZgo_CPl*SmDgOD=l@akkjQU)|KI~|Tj1v)Eq zg{9q~0@b5I&dfK1S>W6y*DoxV(f=f*ewHx!W%sP4~9?IClqj_IQ*pd2HBKg^5#^p2lQKprmQmN{8JRIA>~L z`Bi{*8i4!u0NGI}=c01P^`bpa)O0(h%B7_;?Yp5Uunpt&I_(&G`TD^_260=#N;QMO z?uIW7J$phZR2#Kha>B#Ut63UMZfglbm8kibLB-G4*S~CBWuUeWP*BR_y&859IflRw zARO{@A&0;0nxD|j0#@0oLivGMhUc#HQgk3FJu?XmmWQ)&Fd7<(m5-;E_vKM-wtkjj zC(S_wkUsR=hN$pbXu6CHZnqH?t8Boa$-Bems-QLpS9ceBe;+dNA|8qs>jsSa(q(oO z!J?C`LvE7-n7<6RW7VSe|AWniZBXP&L>Y}hsCu%!z*>3l_8NL%4;tiUtk{%53}-pW6IB%vc(O1~OUZ;3WW7gL9|+q}UKs0^=E7-i ztN`}hwb1TfGUSK^YCzBtj)*}{2({n=6N<4-4x`kQ!yJET2Mp$AH02pbjisjHI_$yu zJ8Y%||FTcZ2{gh31g5mWNMRC5IXP$%`*Rk$8e|!e;0?)7cxbU0}WoX~SBmCc=RpC0l#hB_YUPbj`A>wC26W#gn?M zdvf1V5XJXTPnbL-ObwF0E=50NK{xi*A>q_C?2`U* zCvNpSEgYTipC0bZ4wUBJmmaJ!OgGqZd*Cd^B&bo35T5lk$apL;;Zos++_hSU^9ye- z+gr=^#O0z7_x>oA-}Ss>N;VA ziW;*KR?iu(NV~pdUQ%ZUV=dZut?r(hrWT6W)R}`Zc?o$*3EAX1HC)b%n{=nHeZz5ro!zP-1RYiC2UPRzh6~j?fXp2>XsNzOhj0x?#Hk_ava{f zDrI(*V$vmlmmf`_rfPNBH-jrkA|{e-xx zFfnX%7GkA%)`&>Nj#&dz+idNIY?-HmCqGSWhDkS8@AAI%$`_*YKP!W+}|fhA|d5rR@7GZO~_7g ze5~xmxpeeW!s+_{kmW6gPQ~NIAJ(mL9=Eq&u zfusT>V+vrtaIUc_Uk+BRsDbUTf}6j5Vw;g977Mjvo7joyynGn_cg%yc;j0=`^dn;x zcv))Ha5*fXUb?aXhd@*&Ew>G*s^l3ugJ* z_0grB)s6WxirV_^=uErIH8VFe?3@;&lp9ah&iIKg4}UoS``e~px9>-cy-e%uQJSA` zoa{1GDRIdZCVT5|q?#)>EM?aG&gjm^Iws{So)piE)T4RtSB)$I##AXzCUrx{MG8&5MOWv@Is1flYBY6i5KTVu2@Bc9(*(9G<7dh4Q80`U9Oj z(8iLdHIdWE1_k$d%n#=)7GzJHz2pKgUfJw#>Wx~<{e?r8sf2(CC+UIw_lpmjMtosn5$ zN%J}j@`z0>MzuHw-aAnrI^2A@`DnK80XgHJIY-ZYbMuS(@HDj07hrfEnIbJ zqYtl=0e3Jmt6lzRs63sdSeryWB6z(S?A|K<*kY~&8Hlx|Lxyl-VodzlV~ahcHp+Q=O^7u~j9Gy(nw-__BbTa^?Puw}RE>i=*aZvaChw3Z*C<;wg39 z7NMyC$+M{NBYl|GxZ;#qxNSD0d{|w#oquba@1w1geKOMAm$S~@))jeBY+kKe#KW>c zS(8SbI&U-*!TEyutaAd9756D+Le1=%n-+KuJ-AaogqW^~RyIF9lS$Tu(}Li3#$gjL z46r715U89zT5Bm4pT+6d@D3F*3cp4et5V@#S{$Z>Ob@tUu-(2$?!)K-dwi^{Z)K17 zhA0>x8m_oKf3xgj^3l$Hb1uF?6?SFHyrh@;vY-xNjP_bg;1Iyiy7_KB+5#hGYZw@6%a{lte)iviGuaDBuw4D>ix;kF@PQ3SRO)?GFk?1$9(L1M3?M` zmIg2ad?Aq=u?2ISPIbR$0NognTh{7=1bF#@WA!zQ#E;4Q3R{IrnhEHKO^oT;srE-Q0fHB^T9W2c|v-t>5_L--WL_ezjKVv`O0y zYuO8o@1OnzGOS(gDaIrs@yh={8yDsA4qF>->@vKIkdAqGY6Pa_)KOeW=5zL-BYaS{broiab8bnk#+fn z2!9K)*^pXg8-gXjyfhwU&&K&g2XdOU?acx&leg(0pV}bcgvnusViEEYNIDPc?qERD zR*#J&S|Az zcW=zyRgv#(|0;ano~6gP{O(Wwuub$iSNHnZ*Rz!~l}`62s+PW*{W%~CzUg=K`)~i& z!9DNeb!c1rZAFxg#RES4qeZF4G;Tt(nb8(P^tFO)A^~$pK(?qnhSd(RJGVmDwzM#r zu7MGx9}ObMFQ2v2E;g_l9D>EOUu-=ShSE-q_vc63Enlq`9vV5 zF#WNQzOb%tEa1i7W&p^6NitH{=f9BKkZnCtX?*lZo|HyhtQaC&OsoCgQh27{$7Hhc zE%wKQoWew>v_gYE}Ry?!BEP8ZJK#F#S5R)=TnTqdvjFRUozPo)-fW-|K9MFt@N|DN3pH1*%0PPu+% zy2?&Y5_B9U@D=J@q&7d2`9yX6)xiz2QRe5Iq`Jc&U0c-xN(L!!1qi)mz{i#DIxSh7_hP!kQFBfuLN& zqG?D!C9GMy^1B<$7pNAAsoOsS z`A~UA)fOpRLHeD50H`s{;qYyW@Y^z=`O@r-T3IWmQ0R1Ci<1&VdCw#_Dw7^XnM}Hv z=Pqbtsal?f@}z)*s8G|*3&u1`ElmP8H>^@ApD5TQOSfBz>P?*PlBKwN9$&a zpn`Y_4}zHf0`nqP3Q!v4}OtqY)1PN=ZpUsi#2&c(~6{bdAVly2V0VQ8sV z`pBZ4KDtd1FzTM%D-PDbmM`knPO`7T1tB#UKgNjq0;MI=SnyzQ=Qg3#e1pU*bX-=H z7fjNEmgUMpqFr2cf=)P7pF50K4aUIGENose5Rb4g?HT|XqFWEei4fY*Ym|@t^a4BB z#G(na&srTKQqE{1gVb2p%7)JOj|T?Hqqp>^N($AqX=l;uxjni`G5lq1h(8AY2Qm5YOc%0W4tho%=^!pSZAB-dbLKZ$#MA|b z|2|V|G~Ylwwr*sHJ9+l`(&bn8&qY5i+~)MU(G=yr+TdHg1NAI2u%>&@`p=V}03TJA zO+6>Zam3My3^#c#K{<9QW(dzAYZIol)6*Bw2_XXc z1_hX05JMoYTir$=05%j=i$zG8m^dYdjLpa{ZF~_`ZCr8;W8Ou;cykv*XZBI*yMa z!j|#*q$asKXPrJH{@Jj7n}o(Xwc&1&nnM>uO4|m0G*4u`U)r|MDlnlmI`wISm&f;2 z@}G}3_fGDKdzQH34PYpn*y^|Z33u#DUTCOv9ndw29-YhT+&t$hh%-S2gG6MHuBQ#k zdjwK{Q{t9uGcwFZl@0MnQFw{hB62I*y*8{fpjiw(cf72yBj63NBa5r;X;Oy3+@eO% zVB5&?!mgg7t>TVcM$+UX&QL&Dw-17Z9`fR+u%_H(3bHLB{aEW^9?1M8t%uD%wjm}A zlRrzc^wir=7J8z!C|_2q_dzuTN|GWc^<}w~QbE}Fa#=YW4wq(Q2v>wUd^JB{!~-5Y zQbbcO3V1oJQzgzaoAB8A0T|d&&l8WBF}miNMv#iVzuPf=Cj>3`1~eaG0(+Q~fyMWK zevkXgTmAh+(Y(-~YVb;^i3eySb#_*&Bs9}@{ND9qb=u%gDyOkYrQ_1-7=jVKpVT-z zC;?x@9RY&R^bUal(3p0l!T0EgT4lBLQsYy(zL#c;7Zs zBD$x$1_73y4JMgSiY+#baVE+pdek2o%%sQ%aO5_VLij?8@8po|&fNvrN3obN&`|&= zPD{P3$0~hd!Am-9mV%^R;lfV2K@l)F-I z_P;2{&}a7#k*|(!&(T`;u)c|a`XyWEMJS=gS{U{EwkF&Y;gxI7ugW?@R^qSC-jNLC z%{AWPQ|j!KtCoVuk~;i(bO${yYEdwe5NIbzE zLA#P_T%A2N9STT!T$&Nr=ZY)nB(ZHyVhe`yyVKal3K!6vV4Hr<06T6w8sc@N>bnFY zqQlkA0qmri`mRMXSg@9(u^AwfEJv5c=PAL}pj2z3-F3iSM%g~f{?p=D^DtPiWOXZu z0RfOucH$CZHG@pED)2@=G_u^>i!K-HzB6AsPg_N&4AfG0AR23Ysl>KrtZPkR%G)Lr zOIOLVd7gYnRRP><>!bmz$`5`4032X&biO*1v?8HPw~t(NjC~2*(el|T?xA|#pm#Iz zhlwM9bKsV1&zKQq(6nbIPH*B~eQBt@_4HhA+12`M$Id)mt&CMVm_qK|G-8u5D!l*v z&x6aa%+}Yy0`#HKuJ->{E<2pRkZpBDXa9v!-Zd5Va*&Mn7D#zSlT$L1w`zzHM28mi z=gva+*pxQZMdmqOpjUHR^t6Zpt8iV@OECl3(PeiD37H+;JMHRjH7up?&z>#s8&W)8 zZdXiTGsc4(=!0l^SJRmqj}s=&6D~)|Snd`FnswHt^H_mzUS+vp^p3oMIj)I$gDOsw zg9~Eva?(o2-e$;h93@&jv`T<;j~#8BQAj4f&Xhe*FAiiaipu{thyDXBs@QJqwz`*b zzUET@(7)zZ)hwKC4-cReCOb!Caz{H>5sF)7ZK)3c-1-*v;Kqf*n^m10HTR%P)j#|8OEHU)Yf_kZ4K8$Ga@ylw{DWh*1CgN!TH(ZP*V+lA1zMJBzyY& zp6T*Y^@%g;0B)5wValreW#=(X##t2E7d_NPv1`nxtCI@=oeC5_e2At>{$AU~@-*4p zBVd&0cG{$GwmV}TSi?U?ebM5_B$~*`C?)JvP~Lus_yr8fRw#i1T&3wZ@fzYIa-#J7 z&CalVp9M`EIfjVr&(2Y2&D7n-!ft5Whx0|~+XDK{_?by~s>v2?}`=P&Jq z!%jbx>2>F0LskHCx+s`ZpBvssGMsu*&3LSDe^>SUxeG1nAV|EUd5B>^?(#zvaGRsAX-$&7btA+Q zgsNO$0zpO8P0%Ef-e&TmI|Yx+;JL^v9Oe7$B_l`SPfc5vpJcb}fH4kfP&x4uv0NWu508lc&}n~*i2sb!MX8je%+UGFE^AU%E?W(Q0l=LjB zeK|e_IVM&F+(X(0yac?&y6b0y1qosTgNUOC&^mjZ#LtZlht53DxI02&WY5jJEc||d z@KwyyeTn)zPWclII^U&C^)9~l^LSfm|8}m-k#DjiGqT7ixZm*21O3{O#E+DTO*3z{ z?EB!d_2IFz8=M^Q_norvfyhr)xnX$0r8Jx2?O$!WJjQ{VLlW;1Ij5Q%sb`gk7 zZC4{QwhEO{005>kRNDq*`HYm_TDY;}_*2GwTem7gQHKy6oLS?tc=Dp60vWQpQR}(e zh$Y-CZgx1Y$YZt#X%9i zmiw5AuKu{EYnyd!|EW6Xb*lq4a0{8X&qa^jul>L-d$J@AIV|0kbH?`3t?8D**`uot zSN{tSF?u{3_`$MoE*rtN?}8p8hBjPbAK%>boX2~XLRTOxqCjl-3*eir>O zJuGN{K0HmuJ8n?a~Fj%e5veUEp0cD4PD2W=B=h^aW%nIfEzTnn;rQHyyDe2=K8OqN7MWe+f>N7tgaPK#%9}WR9 z$a>Omw$d2O?EU(#(j~;^3`Ht>=&6#M(Y9qYcY&b+Dz>~o60~*p^FhAQ&di9{Rbi3jXRF0f7`~q5WH-i5K z$)AL}Ri6hHz!^ql$K$hF1qZiFJE(G(F&id0x)QNE{%2WP0w-vCOp6z3jCjiEYGEvvu`?;^KGSLrvR3ubesU=)`1K0emny*pfO^&m18#XIr%iSdqc zwy_W9p6Vez_}4#&jxMMgKW+=o6wQ=D1~Tb-(;l@OQsoE;H}i>krknz}D=?P#`QGXj z;i|^d>*xNd(ET^`n%Py&^?RRWMse|9G&gPjr`jt^5z>#c{^w!z7m5@6%3z%fpPEU- z_OPPEc$~ic@Y7`Wqq9AMyYN3bi_Rq8H!KgL1GR3IjpEY3*Y#BGc^z?8q`7@D)LN7l zu_(&jD!3x+T6Vf2G{310*%MTbzB3z9{}*!4xeaozIOA2H?t%JX;K$|gIc#lw{@co0 z(aqZctKL)j7fs1QQ@OP)NpgYRRmHPsD9o@9ytcKWBBxabI-(LzP4{{WSdDeazOi!` z$oE4w7>i>3S5AHuOoLH!kwzipt4Oh3jWI8^VNpY05H1bWjmgcY*Es^pcxWs2N2cLl zW=83B1CaV#{LvIrai!?hG2RY7-+}@|4!qzxCh@lcsp4Pe9ni2O8L@c2LZ(L#mZmv5 zCwZX^0j2;*qX)i_W!S{nq%5$qYHxfQ$Zp5CBU60Cjz8^3!sy`3OqN(9a^F&AxBoa%`R#&cZ|UpE?eD&)9y#=C@cG5>{|#GwKvSMST^Vuu z_Vn@C5m5PuRI%Hm2dg$VbU@ zk8Fe^9{2hnzXna_rhMjJy-t5Px@LJY>WW3XD(`lAQ5R!zJ266MNFz>_lx+qe8t{if z3t4V%_sYOEL;FscW&Ik4O`PdrjHXdr7@am7WIxT(WHwZrX)w$7iD_i^UM^Or0Yc3K zzQG)DN?VdLSu8XL5WbR8?82$*7a-`ND1luYyI}r2oR&Lxur(mnBDI&dJGN9n3zz_w zI@19pfd!JKDk&JVUW_ZqgHW?`ui zWnv>$B7Rv1(`>Q>{R@-zU%Hd`nAZCnDBZmuz8f9`%G2*wgXD0OTaAFB*G(j>7n9?(NHEok{1J9K| zyyl6!p}V~cy>9;dsm(RiOnPbjvCHT7Ga0A%y}e|n|JL|w}W&>vqGFO_O3tQ-<$s%j)Ujzb3XTdUH5%npHpYN?e(u+t$K^H-S~*G&2PARbt(+!fcPZz zN!*ybyUO?DDA8BTU5OEk-vmkTY~|raA+umy0xq3x=95O+dv~w7fytqJW}CMOL>_6M zDsl?O(pm>NFq8%isRc;VrgA?|2uF-EKl8xq&tnVwY2Eijh>wE(mjS0u31LGXB{AwTA$Ya0ijuISlQ+&e;hQ@KC-21x@j^0idb1(Sv;9@8BnG<0dbOhTf7>G(+@w~xCD5#(T5fl{VM z&_XE7c?=Os-&5WH&JM-(`GoP4$@vojQd>X&C?tQ^vXW5%uMZbI;1n`%z zHiXKfZ#pl+K^t-yc60;BGJ#{z$JQFX$o`N=tKb-tPR>O{%O9884r#b`bZH?%=W9T{ zHcAV@QRaK9u>Xni{r2!52vNV7P-Cz*K#W~dyWN15m9v_;l@WYqcCVE?l^n`Wi2?B|lZ0Y>)y9XTSVTboPisKw5KJqfMHYM0QiPc>`)h*AQN!(xW z|9kNOkN8wJo7>H|pV*FAx+p%cJsDs}LpVf^S@9`n2S+E0pyxvGOCzvbV=CFU-AmQt z^=F@lAZ!Cyk6H>btu<>#81G`oY9j;+k2 z+09UyCJE9Es##I1>1&Z>OtVB|Ti2Ce4U}UGO|ki%CB?;4%l7$AT{24@&pR$>n>k+| z9nSmpYj$zQztt|qt}5TLU9GB34^6@3K#N0&BF&$WYHB$wpk z(7SN3`-ekGkXQHp=@TuS1sq`G^a=nCBCs+MK=gm ztfN<$0=i-n`9pi6_QShGDBHemm+qj9lzN9Fh6SfWqgrpkY1SNy>NtBjMj3uz4i~^2 zX3tcCp^p^o`(D-J9C~$gRv<8sj1z1)!Icg_xMHLo=;`B`m};W_>w?dkxN1yH{C!~b ztf)d{ckFBAPhWp;|LTrL@CWDn!e5*+Siw%kbqV85!A0Yb71pc9CwU2m&wS5EUE5sp z8TZXSz`u}iwY<(P;QQ$lkNvaUIs^rGP@)(#XXCvE9U-e_?0^p1V&u}(hHaCK&^-cE ziP=?~+8z1|(Wk>xU!Z=!7^s33vUQy$gan=@@cM#5=%8k#MPQXJJongtlGA`x|MA1^ zKZc(x*V4$C*xWRLp}SNNd!|;&YQ|OWI!ZX^Cx#fV8j$=B_>YP>^NEq@`$7`h_5;%5 zdc=uJksZ#l-^XSL5Y8T-r|j7q-Y6!WiB)k~L57ZaqoVAg+BBXTYgjop0IaE~8QhfG zKzKRDoWj$&q9wW9J`yb|Q!!0P6jFlYMxFT_zQ$CWo(d2blGvdP4jzdyY)hbE{4g&)5aINYYf%4%AJ1#zGxzVGT_N4jmy&Fo; z72k<+hyja0;ky&gaZ@?^OURnZfS%@mSw(VkX8cAE@|pO})i%8VUC6IYmx z!=0s>!36rP{E$qrIA`Trc@HH8kB_12K)BR5Zg<90zXE3o=pMK}uftpOQC=;@z3R=gPSJCpo?3ij#J@{hRp5uXbq) z2E5EvxJ?ie&0Yj)6nM5BM$Q}Y;HpbGf3hMl7pnHgFpb!Y1A8qvB9)|iQ7$zU>EME; zk=qSoM+@Mwig+zb4FzD@h_^vh1zCoG1Go$lcA!AlCYGb3(hpQnrPXyPC;J}(R#Wgp zDR6yXXm)`9n}$LSzUUC;QA3j&nN9V!w(d5W%iN`{+wG}JAgTqiO2cYZNQcfWo_-Gh z`s(J|rzpRwv3Kw&JA<43albzMEj|J-cR$I`4At@Jw9`~1azc3l+aKyISzzgOCtC*e zQu<)Mn(`F{J4lpGRY!@k*<@{5RUu2EFGNc!*5yHkoTWsWNNoqb&YEtC38$so9?MHq z4;sL;I8(&y zf{aeMB$<~<#l|FS0z;WXq6GD<_#;MWMIY73dK}4d-!+@BeKo0kN3Di(3%$;T&W76& zJV#B{nHFciaIrmB#%gIzK7nmhoq=E6^ZD2RJh)kQMD5VPx3`9=-~ebyu6bIo-y41_f{S-&2`6KE=1Tj>~?C`?y8ZLfy^B9gBZ`=GLyg`Sf{ft_8$_YVqZE35G>WvO1$Y=%6Wti+cVM#zXE zY}KgFQ1*Etc9b%iT#?p4oq{b%<GueNuuA2u=GH$+)9`kTo$)oP zn?!>%Q<+$8O)3_Pg(Ewq+$yD5%Te|Dvf&cyVQ^OIPElZQouCq8%400_q5k=_H;K%yMbDnD!28A5S%r4ZpZ3J=B zALc4A7OWMO`Wr3${rdXI{8p3atH|-&P54uVaZ%&uxBo4i{d3~)jeUmim-@R%zP-l% zKjpfP9o%~|;q>)aZ+h z2YboEEDB%@@pXJgbw7s56T~UC46>NJbq!INzf2*F>dX6kc;G~uStg|?B{3{jh3lb# z6SO7>Ho^hT&_?rwRd^&jYFGIoJQ83ULr@Tf=#>Wd_=k^|Le?4J261AYPa5CW@7E4> zCzJ?QDGs;k-1Ozdfk#ClN&`L5ZY+h{6?eGpJJIzfB)HS*chi^fS58NF6We>9-VEtH zF}pVI;qmG7!34ctcX{VSHyd})>$Ef+S^E}t^kE$*@vWQnD(cJI2mehb{62mDU`pJL zAlc?a8G=3=xz-aK^5651O%BRUN21?6cgWV*q3dR&Lq1|0Frkai&{nSqVUEjT4)BEmDrj>S=Z1jkM#~O zpwu6Lx$XrZuqIeJdV@ansJMGnG{!y!ah+}K3rr1v+KXf_dE)Wf58zfha@1}OB}+8! zUC>9@i{rx(YMFm<(BMZY#Ig`9g9pQ#$|mulI?+SG|w!{P+Ct zHKi?dTxVSWu2cSk3>Agik~Wd3+3d@|9v!wOVPKhmRiug_7TOi3k%A5#4zdOSqo1+v zySOVxX2dGtL=xWZYK+te96|B@J#jpm2$u?83oNB?*ORxhr{K6Z#8lA4vLcmSv#zz7SL-*^Mg-}2E6vSkU? z;6=f*C&vP6mWoAj41uUrrWfZTL??Y?pDgG$uW$!KFGXO%2eaj^zYmZ_hlQvzQ@;nq zf0uusKuo(VFvK?oA6D^I2It`WL#h1>656=UV(Mb7xwnh@Xregr`)D3?7fX{B=%mTf zvmS&<-~jp*IZBeI$74+@7Fw>;8T}5m0FEJq)%vtgPf0@*!fDk;0bn>t8OLfn5s znPMPuDUQx*5q@{deM@FF&vody7zhF^NgdHCENiQzf8;`TT@ICWVop`3B1BHmjsHxi zg;q;mUaHM@62K}tpZ%$b&u!5?^;qul$Upt*pxX6eVg4vDO3q>=S+_v8=D4JxJmjM(@!-wuu(|HbLd+$D*@j$)wz{+5xgut^l z0@Z6&Yu-??^L=yV!a;w`DKWhlzt0`seD&ehQ1jU3AA4@*lr-B_c5K~Y2>~vdI9afP zt|^d;K&z}dEaOxqn8|Zytls0``s>waUCeXJ9Y1&3{P_3h;+-3HYosQRK<~z#vUu6K zF6zXiTnLjFx!(V1%A|TE5;f>S!HpjU>f5rsgX(IlABC*Knvo}LY$fuEs1U<6afxsT&2CiStgV4L<8APYl;Sf+ zN-dPiXwq!42!*V(yaJEHF3BHnqglS_uM#dd(wIeojAAR9pR;B4!1-ZzOn3C^U`U!z zlC@+UjD>$C&TWSQrzDeL^kOBlmail?{Z6*_Cuns789sukC{UM0iqcdy18fr|(3Ywr z#Y@{rkp60S`}4T$^Ph9xNMF-r?s|c|X#};~IdWdVFxdNV2+VV`^sgkky(f6E%SSPv z_v`IjbJ>=PX&~48?>Sq!z^+@{U+>18Ui)`%!6)p|2to&d6a#R8LAKFSp@h9}5mn z7Op)egh9GRZ2!oIuBU?1BM_N^i1b||Btr0nWYkSymuBcKKUqm;W^#4pkIbAO(&77HH#^9lW)MUkpL6N@NFxj;n&k%Lq0G1Arw*MGt){(k>UJt780nQTtfecx1I6L^ z`TK2e3YmZSHskSoFy#3w&5MyQL*9Lgz1jQg&i8+3zTnq?1?(Hp zGd(jM_kQe^8uZ3mn2(m|9D5#sA*81#RIRA_{S&{{#nrE{HDvfjB*d=W{Bs!UMN7m5 z47&x9BkU*chGXaNq`p+3YH714l^qp=4G8j|{R1k)>R`eDNlp#WdTV50_6&fo*RG50 z<^h3H=*zW1vmBkcP|K*|(e>*`INJ3Ak*%!xSIXf4@FH1Sy@`Kz4z5+AI2Z`dyOM4z zi{cACWjemlK`Q$(?KvaH7*caztPRt zX@^KqIbgUH2HOTxz<4O@9m4+r?)M40KuX^LG?jW6izE4m76zyQ^-#r~2#IR9S-gW{ z9~l5#oxz}n3}KF<2Uz|j@^8yG**sp=mGy)Zcb|=OOO`Zbq-KBp@jQQ{>E9nF0OWIn&a&euU397Z z6S?UjO`n4uVuMB6Xk2BwWNdKgON1%{yNB;5IRTcV?jug1MFfYQR5#`9z%1e!((v-E zK|P|{>~OH98K=ZRoP~)kWCUe2r)i$HEs00dV(=Mu!Nn+ay{?cj49PE+CVcN0sDjwa zTP{njpxL&F{UtSE1`i8J(QvKla9FBhQsT=41JW=+%Sa>*WYaDK@KMTeQo5bZZFyrf zs)NS!N$%GKi%ZMEEnzkoVHjT?F9}5mO2vBeP*s5llwAs!-w7rQj>axIXyV8??tW2x zZ$DXnJG521Pc1jmo(=9eyfC1fT$A9iGXDj)$~!Ul*f7~|$?i{ob#2#hnA+kvy*Lcj z?sPYZwcQENvhBI?@Ef~tEW`iTWp>xqhyVV)7gW&yEq&R_h`blh!7kYaX8aT!e~%d( zBgH?W0&;XH?b+{HLMg~eShtaY{xk5+gQ;@edQz~j~DSAYv$e!^JExl}qodUR;#2+k}rFA{9AYoDkR4>y-mJ>mXd{C}- zp9s!{%Nul<04=ZbLTs4pDe)MO+jn6WuT9eXwajo|gOkUQPZrAlt}NX#vf3jNSL&nr z>(}rR_S^24?;=t6+Rv^XDEy21^rWT-ThjY9?)ksJ-~PPoxwsaS7y_*wZKXaP$l~7F zKh(Dy-Q0X`40+Hu%r&u2wAMwTlxt1H)tjBC(eYQDf_3psD_Sll$1T`J63xsNH;@2Q zg>^5}62XWjcNAYK@S%l~Ds!E!4N=EF@-Vh@Hj2Tew7>^7@sNTEDSq4e9=ege1rG8dQC2s@W66=f44+;TnGWX>xX$LJD!>0i-mt5SGc>zY$--u`l@>0QBKJ*cA|wQq8J zu?wOCbG8nXax2x7VBqj+1C~;tN(exvXQaR^VDc?nqPx)LRE8i$*o#KbU3L*wCaSS# zY?XF!j5K!fNiQ4pq;_AktfH#QybF0!50Nv3f5;Pwq(#!FUNSpr5fv0$XaWbFS?RzQ zkp|4}I2H%e#=8EOj7f%E>8v6g51k%3EeKaJ^vmZJ3QGNc%tN2_Ugdo-(2Ty?aILF zTcLd{S_|1;k|T;j2ZA{EATgln`#>Zuv3qdJTjar18nfTMfgI@&|D=1 z1ig&zewKHjzO}n1$gKSbOBr*$g5dzdga;}E4OhpIWMv~r9<2;159!{ z2&q&s!^A6u(xG~z>ub3<9>abC!jtJ^9@$8NWo^G~0yfBEupz43_QKjD>yYwi>BpR| zwzMA99T+Xkyc1V8KXcgwukEB-XgH!Drf>6m$>PRQEB0VewPjnChL-L7GkYHYn(KNV zr~60t?T_A}w}kev+2G?thR&r2gSFO5XO2x;ezS~Z^+>U1t?#I5PwKt-e5d{{C*z#% z^_#;cqzX&7+x9x6wENc+nXU6`rSc-qZPx)+`#gPvyR91QH`|Qg5|7s2 zYC2sc>Vx}g{Ot7bu&1I`WZbhGU2`8JhYe7-3Z@19xe=n4@ z02=iNUjk(+@?L4s`?TqoIHmm+yjv1|ZUfj?EUXBHo4HOM!Ghoc2qKwA@sPrqPp9OB zNtn26KF{58Hh{`z>c zbh^8GBS6*PNiFPmHnCZM1;ma#!%kHEG1|wcc@RiV1ue}on!h8ajiW3sQpoIvP zV2|qXMb#uS&JIiT=+TjD}K2;0z=EOw{;lk`bW`h%&Qvl~nI+3n@C z`BY5(j4c4QJuV=7*wVIxUw~w=dD3PECVi_&Phz5x?;*_$HCYXP&ArM|1XpQ<2*KS7 zfx*$O%teH#!f=dvUu`y;k}qNfqjF#33g_+%yq;KObM9~kg-3_mx`i_8Y86RAz-w+G zfaSVFh46GNGw_PjON~aa3p;qxaeGuN*yFW=du7FUQ3lSo!AEw@hgBUpuH0G}-jO4g zrs@J=ByK+G&HM4>?QmHA+jquJr=5Jy7bw0v^iC$Kb7h5sUap`=T66tB@Tz?d2rYGh zj+&HR`Wd#aOdCqGsmG5ee9z(UU8!bJiUyw&zX^(%Pcs&21PSTJocJ|QtyAf?H-|$iw+C?m4GeOZyx{i{r&L9qb3R-im_WbVjWKt^C=O#x z%rS$qXh*w}$l_9yU!3cvC2kM_i=i|EQW7j$lHV&Iez9a*`+v9kf_MuvimvffrZCIq zB}71%(>qgQ;)X7bMCZzve8Cm!5887Lf(1Qf4(0J8#qo$$VN?xrw6#)<=5g0A8ECAQ$uNfdNzXevsqSqNms zOz8`4YSet7-~fgHGx+?}FyE=>=WysKx>wJ+nH;HDsx#Ru=dZFHaeRFJ?|QG|+Cwh2T#NbdK>1VN z?2F6K;@&=eGOir(h49~_?^n*w)#{({KK$UvIOoJA!A1$hTZ4nrg{MwSnoADD$oM?E zN^6yx5MBtzQs9t%ifVu&XYCHuMmTI$SZSbTT9-QO0JdHA7{K#N^FJ$}RyEG6S)9u2 zlgo(3neXG0GOB~fQu`VxnE>3w^!y-jeJZtJBV4;lC0{4%^gybAy0dC==snc|3lUih zg=+KDzY!K3$r*S3b2dDi1Gq1hHKGw0aRSn&;jWlJk7~vb{1sK&AHx- z$5(Hg`6WDicOm9W)6Jfrt+*vY5!pXZ5P_>FtLcQ7cjX0JV*O# zh07z(Ju{h{K|JtGpF~ZXKmXeG-z$FmYVr2FHF^Px|D#u;_fh{^Osb54{8CP{h(V78 ziWkle*&?v0F^5DjR<~e>I)F_|N=so&;=IjV(BAZ9uIxzLSOkq8FvxCBk5A1+DI!|n zGL1p9$1MDZwhy~)8dWmjOdQqq6Rtp18ui7KkciBk0I8^w{6$1xr4#aIF2?|JYrFI8 zB<$!Pk^5E+Ln z;8(s3h5KR8>58^KxmQal2}`CKdxRrO7?i6mm>JhfE#)r>PwX&R4Yf~{3h+tS%dP3x zbL1-=ath_$G0aSkO4JpdQoX!JIdq#y4h5Ekh~QKt>TxmM{i5t(T%|TLl&->>F<^u+ zHD=Ac5r8rUPl*PMR1ERc?eZRYf(v)Len)Y4bNxei@vXuK`w=8K=h37C8%G|ub%wJO zh$G_^U0YFehAN{<-&idrmC0DmcpsTIM6(!?;-l3#Q(+igSbA3C z3t)(g?wj%G!*&25v;~~0gZ3X5X-GtQiZVpYvxCF>w&IE8H*LGiT-cKwy!wR8lw{vr zYNM_+=#){}feBEp=6RhCxKhMODyhKPJVt^&Tn{4RDraP*)9g4^8USdT527T8dN4*W zk@_HFa>C+-CXi5{j!43YubJpouruDCB2RbTOmR)-5JfB-nBhL`eKX%Oy!y5 zzK-~?B0^J7A}A#UMYvfOAcTP!U>;#o#L*RfnU;-w(05EHG+gaq7_8IaQm+1K(du#bp#49TUXkl z@)Ygs=VX!HdSVqfcMbnk(^9pYtD#9r3>1Q0@~w zpYQ#5JcM>>r>Sa=gW}OQ*K$qdgBPEKi9e-jApZE4pYoauE9owf#&@S)o_%*`-&{%7 zzD~8b1TEb$#vPwSV?}x|oX)dgV?L)38fTBZGkwE%J$Ntt*@m&h@809x=QG9tfJR#h z-Fg;HtYslWDq$SkQU>Jd8d<72us&y04ROuviIDwzXYJ}C-{&I?#bS@4 z=V^zuW-y^n#fo;R=E2Anutung;nG>-z*oh0M3^fbjjwG#&uSmNUUe$9-*4ZZ$E=s{ zsv>=yVSq;je(kt!`0dBG8NPn@d@RSk>*3mow|mOJobd4**B(6IbW=C_MU=3Yq1QpT z%>1p(l_O6_%+GxYLk_$3C|yl9*1W{~yr=c^kNL^>$49>Pa!z6hP^zU)*vG#hp7>N79SZnOP za%ZQF_|X&NZF6&BaoT4qTAhxZ`cHD-K(%-7k@mmGQu(A;ixYwHVYCt#CeTKrw7O0m)$hXdi`+C%>9DZ zxz(DC_6=EBw5I-kTXp>D0)p0J3o%r_SCIZ*@IXkn~}d&oCnyic{PX%Ed{ciV5@Q)^y~j}7T5b8QcwwA;A-S?Ydr z|LOiccy@p7 z6d)R&;lLVY8~>2t9aOP|xy%=I>E9<*^50NI-O1heSad9j3-Y<7Z5=74?X6QrWb`Ai zlI)-wR2{b$sp4#=WS#C6qh_kYi)7pZ&1{rPDmTykM67hUas8ybkN1jwj z1omN!dIkt&xx)DLf;!vgbg?n~LLV8Xt8l z!HEdMm`6mW+ehVR*8b|y^49Bl^k;8qwg zk1ok+g{HIZs~A{*3E?Jt#_G6>LqZ`n04Px#2GZHxlDTxNz1DmeVp#4w4MgBHj$Ci! z_#;itDZ1Vjj%*=35#nVDTML;Q4s?4N->M#Gz3dd?=XhS*Euk^u8)Gu1t5kMP`uAT8 z;_QR3rbjJ21!+bs#Xd=lZJ{?!^*_mNB(6ryJ0R}tfv%ct^xfX*ky>P1@TJ4_#xGec zJPG;JJbdYG$aGJ;LIlGHLgt^!8E5$F%~y29hYd2uNLMblq3pOXuTzJGpgP&LZugb~ z8>8ocei2On@lRtihv;sc6P<77?|swJhzj3+YOHtc{Y9s)U;MG>8|BEahi`iQQLjxh zbhA43?b7>wHG?}0FDtu$Uwkbh=m-z3vmF#$HLy}z=nt8?YMPBa>59SUt3>Vlh4?J0 zB!r|GKkYJ|Zy=3^_-T*Av?l3uOl$v68~b%zRad726`kRL?kJ@`yo@aZrruhjaC z4qtfvuqG)C566+s_b!dh+E{NXs5uu#s-Ve^7CcpuJr?8LT_0;X8SrgimK43xC_BX0 zRm$ql&OJ@srmq6j#3FrWeqyliDy^7E3)`$rY8r7t3LU>bRO1ZR>C=w{2}XsvR>Kp^sFFen zoCRDQ=QsZ-BY!-icFx{|P;ta9=#UUj=I8AxaLWTfxrBqP$4MdP&c~*+?&`TN7Yt1O zx_NAg6?ExE##y;STX^hag#38v$N5vwG}X?z*7QebLWACTHZ)87Ci)f30)gXx1wQAz z1q`Cyob(o9^QPCMrRJ^m;Is;zEN*}RHQ;#4(eIn_hotqtU%$DPUi;~zPn^5%L;UHq z8FRI!$ki)np=q~L#`Hkvu`!+Hh^GlbPG(l^oPn67an8TB8N*W+T)q~ad2M_cO*XlBgQX8bi)B!~h+pM8p zfb0R$2Wl<$B56djwT6Kp_%kWSP6!_@pvHo8rL|)fQPV`|2XX){GY5#^YmWvMh!$ov z=1IwhN693u?Q%Myf`M-S?w4OI^d+n9O;H92Lvr8FSDp#{sP3;dh52siP$Ye1!@dPy263P&W&@flzH+ih`Ewn$ zq!OUcJJdz{7gf+rf_8H8U?z)b-UMppv{<#Vfe$l+I4LZ^Tl;=EXhmL^WLzLxN(@g_ zg1-pR1{fS1){? zPuOotqtOmzQL@p zx4k9*-Nm5MNr+P_v;ycEtZ9akmPT)Ty68YY9ek@&$V``W)XwyZp$f}vfYn;LnydXQ0;B>3rx2f+J#J#j83)`0+;kfvgHHEMON+L z8HfG1UDobH!4e?A5Drxlg$_{Ew4~b3cS-oer*vMBrE?wIKBt$Wy*#lKHR*N~^5+cn6F3w6P|?K5CEU{ATpv zfjM|gsr?r-{{t0!;{7W7RWjF4Uh1rrdbQ{ASq0wZO!n^B>Y`Kk)F-bR>Fs^I>7YOH zr9Ir&E`}F175*fkL_?Uj>Kt3&`~XEzO@ufz+BbMJV)A>A-aM#pHd~`B#VAqo`L03e z0H=1uU?ES8v#9Iy%U5m{W6&cjV}q z?{40OQWA1E$wcrjWmYsCk+U4;N{q%vy1;d+qBtxa(>)U#| zx3ed;A+m;9mxMdNoAf?C|J3LO<|xT1IQ@T;OMaR7z*>CmE&r)mJ>^ayXPkCwzd`of zzDI6#{JW8&9}L=>RI2(14l-$B^6WgOcKWsjmo`43=!Kzqyp7W&Dxf-z7_Z*MKP`FL zWU_`17(c9r=ph_@t#s}%BJgZ9eN5+@i9~Q~T$Al+^BqE6Wq$r{Orrjw*6cBzH>kEZ zxf)~BS-Dw-CLt#;)3^&6>}I12Zk__;v$w2FQfaI;Ei%`*8Uanp*X#k~$}4tILqV8T z<0s>33aYV5`38X^R!66nmMO)J4mcX!)%jXw;v3QHs)D>wxN+r!lk(ratwH)9r6esz z7;|Zb-k{{5tQR+Zvszys|K@J?h&s$IO@G!MdUb@M`Oo$4)|jWUVI)my`ThQ}*Y?-$ z=5YcrU%z}$JglXEwcVtC;?T#%nqO5r4ro=OPF3%y+zQK`=<$1x&a;xL`_q46ZL%HW z-|QT{(v3;VypIxTuF7nvUom2ek)9~6sHnX$w&|X};Bjas=DNYj6BjBuuF-AwZZVk|V>X(bHTv@{QTfCOH>H|s3J@|*JhJ}u^cYIy1ese2(^qOTfxp40w zW=Uk!q6d8ZUj5zaSRB?UHgbknAP1e;zedP);p&a@4NM8I{l)bJ-(fQznjJP=N*l_O z#ET9{GqWR*E(2+Ct61`~bz1qYugDs(qVp#)SV}RaKR+eV5SpGV>?oNB0Bb9j)r$0z z6iy>ZMo~w)ghUP-CQ0W^`g$`M)`nzWG3H9!*R~e@b4d-B?;{*$dY4o6iX8po3LxXp zzk{A+SbeR*#XJ{Fyvl+#8#exR7@<2o%o3Dxg8bjawR88auOEdz*)|IWO$6zj^4k^3 zO_QDxaj63zkV$^hWA)2;kMO;zIs*M?s^MOzkHuZ5ZJ|YPqk@t0Jr4^#Wm0pUBi-yX zua$;`l~%nuywmBF%(v{BM+-MuGIeVn2jxx;)4WZF6u;DKmSm6(cbTU7^oQPZ`7Kd7 zF0t~!zI;QfxO99`@0!~s`T6Tk*H^tf)!IG(#4&!1>wUbg6^N8Xz@m-9fc``yC+9wD zB(|@YgK!Jl$SXB57kq}7V^4c3sA^W5UBUvvQGv?6uMe3J2buT1umyM`0b*{7aht+rqt}3 z-s?$j^oc6^sb(;rc&WYcNr=J9S<2Ba^rewg6NlcJ5_$}NH@eS!z1?-X#&|=tsC<;` zU2tWrY1RU9#X*EshENL7dw0M0@|%*?>|bS1f1#iBA1pRCp@e^2wucm1Bi4X<$%4qf zI?&QGa|%8!xmdv}jZ}-ZUWI`b51Q2HKUmh;nvXL=jYYHTs6tCEH$b^7$ogADP5~wE zHlUhC=Q;iSoD6SY*KAOyQ<15PqZjT`rnHw#sRiW{He1vtrG+5eKYGr^Ab0h<{Zv=m zq8oxs*;V@VT}>aU)>P%@{<)rWAqrY9BX8_$+&cf0+^fX8V?$(#qdFE8 zN~pt6h8Z8p1ZubjE<9<&9kgtadRpktMyFDcdYUG?2z<`J-tuh6!#`uO3xU8g;ae~ zVg>jzhc0hUwqB3Tpl$Q!)o#YqLjhuIkWJ*#cg}jzgy)@ihpR8W=sCtQy;xNspX@F6 zdE$!Q86R8Sy>G8ncU}2%F8W|GsxzqAbn%vjMr?bLu21isBbPiPZ1Mwz{*R>d@MrV= z{&1Fv2x14Ju{Q~!Mzsl%8qwOD3SxiMs-i2gckQjUS5dP?m%XV~qouV+r&1lde)|3W z3(xC%&hy;oKIeVyIHD+3FoiQA5}!p*nW(}Q)i}8A6qVMId2j>yEHs~^1IY&q#?~=m z8Y=fOXgfMC!NonJlf91O0fb{T9vdXP$D=R-l>bD>BlY5LS^NsJ6oupzdP`Jo_Eaa` zX|`b37`5%P)SuC$n>|zLe=SuLF0P-tcE(F59@Z{D8Gc*zAk$PhKA0!}nt1Gk6)%>5 z$bALAT^iG1_m%Japdyp~_{pO&(gRF^TyzL2vTKmyQH4-w)1&&D8=v84R(DXE84>qp zd@j45XAmx=Yuvf(keyhm$|cxfCLFi)t374HK|#m?qmoY%v-pLb(KdnoT#UH#=qyd=?&^^?7Ej%tb6-w@iWSHJ2tptan_t zT-I4uh;8PDzv~+dF}R z@uq6U*;vtRIbq(DNz3?Y(JJ!KHr}g3#lFcnt96U|wNLtC5w6)E8aNhjd0q*Ul*qdA z&i3%2d8y8!)owayK+*B3J5P)BRt%_2sPx(oCMadn+h@vS{KE-=Frx%7t=sb?OkGYSLdWcgd@qJmr=eJ=XHPoU`%nhQjvO z#&@hvQBycPzxG(AR`%~a z3lrcefg0x_5~;k+sWY+ifP5f?n&#c=9Y|oJbMQ6^Yov&pQrZk5$YB#;#gya5`@SZ| z5J2Q^sSsO=`Aw~ojTz?KP!${@J^@`>@svRUKvIb1mNc&d2oZ*Kx6O}2)amt^`{X_9 z#`sXB`GONXM;fy!m00sM57+^@Rgaa{j@RD0XE*ope7zG)4W zpff*JcFZEqU49jsr0*hgqe=f%M_G&ZLcNa^opLNLUZku!yS7WF{yBZm?al8O4LLtN&$Q-@X8+2Hr$BgB z+>^g;x*4aPgy(B3jPJW~5g2+HGZX~imPVzM-o+dA(g z_)=sC56_U0LS(PBY167|9|kc~qb|iQ=|C5wwDN}xfv~Jl{X!X+S~|m(Q|h`PPcEPf z{;TAD@zyPi8dKG-jC)J#cK^LN1&&nCmBnPVGcC+?HfoP*w^FWa_y`s5eqC6o{3BcQ^E+ct4Y19!qh*B! z0HC5M!2`&3x9RkuZ4Goj49d@+w<-fd!eK;kQ*^C@vB7o;8(oR$X?zSq2m({f7-HYQ z`hB5gUPz1BL2mIt)D>9(`r}FoZ0hxfJYj*nllBIyaEtoecxvTEbFO3Vs5uYpv8?EFVx& zHFC>RUzO{Jz}TOYA*BVhWqoH_>&_W3M4;o7{V`deCScfNFwM9hUF7>d1-#XG!|B=W z3jT{ec2UplU4_$^i`s`*o-Dn1?5#}uRsHw*w@dKftC1dpBbt57Wrk6z$#HodAa7U? z0Q{d!SVgx%3@90Ql3h$m=rc*UfrI(M8spu9>(RR-qQ6 z(nk4H2wnpF<@~*!V$0sj)@+L|+MWRt-kX;4PX+A+S|2?A+`kz0<<9ftR9&>pKjij+ z_pW@?n)GCicGB4;K335nuXrBt-pD7KoINki_@S7*da!Ym=-BXDY zQ)Ks#TdWD~evJ|CO}}3?lzrz&hST))v*kDpz`5~p)xQn+AB0Tpig8;==$sX=_O32E z7nLhS9Y=IL__4yYgQ=fzc(fRdM*u)lB0)`@`PTUi420%DP92V+XrSp3T~wtwAhJ&` zTcKNzG9qQl=O{TXixv!OtO-oM-xMoW(wZUh)VE<*jzvpQHvk`hKr2g|w&Ma05CzBy zFSdVRc@=KlR~q)N!0lA29}Nh{b9Oyue>Dq_sZH?;Mf=VL&IWxZRZ+A{{@_!qd@~eX zQ>5)5q%=}plg~*$Eotc#b^2LJ3s0DNp|(ekZa-`_wYx*8`4i2X`TV^3{ufz3p|lsb z^|-?3a83bG{&K|0cI}bD;Z?~~4h6pfouto)tiG{)Lmg8TjijgXArs*%P zHgSu=u$lzslaOUgtwTvc1hf}GBIxz8_s??{X~S0UJpb|pFF1SNF94%qtQF)IbQC?Z ztuopXDV)}=6kEhKJQ8GB0nhPB({zn|0qCv-ZcRZ`U)&AY@Z3LeP6QGG^@EOv0Q$k~NQcDt%@mk~N?dL}_H zgRxMtk=5l!Gji6n=#E(5Ch?4Ow84cJ4(4*4dD;GFFZ6%$co5QMWjZInUC{PaPT;xa zG2;sQN$O!`mzd54Z_)82gJ>Pgd>ei9)1@zr_JRtjjtw18^$Pj6JWS-LXY^M*C#tS$ z`x#fbgW9hk0D$@OCWRmTnj46IvWP<1Sh;FVlI@3laY7AKp@D^x%vhw+99I@zsw*uL zmpg2T;LJe)DYrio!Tvj%qY1|I=DSyCj`nqf&PWt^^ttt#i4)7P#*Xes7{1E_xn~;~ zTakAR9(`iD_Q_P`YubUi>9`D-5@N?m?7pQ878S>pu$9ij}Fx{x?iVF2_T- zrD2fh0k>$-th~J>PxCJg>TH+OA!y^ghjQCS%=BVcg8uwEL=x}ZX?%}&)9xrj`1qW! z)6in`6~I^OptdDTDWSNg^tlU4hu8`OK4mjim|sR@J+5oRU+|5rvUm2V^&p(#C#k7` zPpsfs7(jhkw8CJl?iK(jj$*K?H@HN#Lk+mnSJmyUbmyls`m5m8|gs$uRo-P)fFQJlP6xjXjc6+#OqlZl? z*=H#u==PRuyuX-*Am-|r!)3-&SdolKsl_lv?rO7DG6lPGE0Ly9%q&Ct0RXWo1nHI%%7 zGPHMV%voR8ZU|JegbNc{HM6AUEBUUx&iTN5D_`Za^GDUETTd<+v)he@;va7`^bBSV z2_6&r3m-G-ZV_;@dnAJ;mCvsP6*De+b(%?fsD}jFvN#`XEX?-=ewV~Q7T?Xb4(VqI z3hGtvY}ED1*GmhZW|_|5KJs~I|0F$cdciIhHh&Ufv+}8ymi@q2@iy)F=x)nWd+-O= z&fj-iRonO4Hpjmj*TXyDVzoz+ta+M?KCJm4Gd=9N?gUDW;2LBu-z)$X-$b(~`2_Mr zl-(?V75(~-AZS`(0$TcY6@@cR*i9Y6;l#O+EK`b{K&SA;CgUG+uNZd+ zW-pu|H`mfuV>jV$P^SE4Sxgd>JzClBRrc`Z`vl;QJDHTHK+ZPu*McOrGlUzO$ z`D-Mn-t)?YIl}})!+*E(735qz?|xV2)}HjsxeM?RhlS&Y!8^~27n~{c#ox80L0xK+ zAz2|7D-A%x&w^w7hkxa|lEdSki=yx|m&#x#xA;nhld$XU0!j8{3?NSi=?Sn)${eac zTVO9G7PxgC0C(W_1x$4yLEu8H-WUit0^)|5<@I#;fMgYs37PusG5~@y@bus{v7WT( z->AUE0!fxTL>2uW-+^j%4@f~qED_8CB(lPwkNYH9v(1#v6`kS<$f90wI_yRy7z6^~ zxug?C+_lO;JtZ(f?m7kA{k_2vvmc1k-_C7t9;k2i<+Txb+5JWpR~Bk zSJkoaYXpIKKLA_?$qZ-4-!{nMhI7S3Phu$QiJvGZOE&t0%bXeTOTh@oSCyKw!*w_k z6nu(FzmVVab$)@ZTmX_{sG(UP-8jpmA0-BVga+|Rl<4V#VqfK_fc*5LIANyo`Y1~< zXdwH<$fth@i(*2uTw3oQh=KsQ0LTR0?L1AajC;%Qa*ORx8P)&gp&tP&!%GPt zeWgkJsyj}vy^y!&jPlni??m_cJG5-%{xMCjmyKwt<3B1TIO4geeS|yqGRjBMY`B>uD1)q~OOVhriqL(#*!Ql9T)&1_Z z@BQ7$ORMxjDuS*EqHo93Q36i|U7iZM;%idI03}#&VkV zQC2@k(!st=MAiE}qXGvFaq*w<}b=$XBRp;CaS=Y4Xea$kRU3#jk?XcLgiecAPDY?K9z8 z@{VJnYM!MAxt}cri(13a9R?r|!DEMT;_O9(S!!%1s?UOhfX~Lx?O&0tf1Kh`%sNt$ zf#RtVm>Nz4GRjN00XbB69})IjaE`oMqRLWO3WAO%`TAmdT15arF%&?w<~}N4;NE<3 zszAn=0J!7IUb&c{E^sZw`?9c9l>}SLOD>6=u0-{ok?l z|9w!^v$Cgo$DnMKb+k#|)#hfty@0$`PW2{xv8;V|Ky1Xv8m?c?vbN7xhBJuwrE+;Q z^&0U>K|YiCz~7Pi;3)$e@>QqH>hgbg2MrpadV zPHyQ&^5vTkb!;N;U6XUv{5f{_w%YGsf0YjZ{=EP9@50SaulAFo2XSrh+|%;-AS^fl zb3f162Y9GJxDbdF*;fatuRH2=9Kw}dIpH>BTaPDaxSJ3l5XF-R3qxRZ@qMXODOi$| z8i-;jW*#Lv9wCk(X=9MoWD3)`yY}7D?YZxIeZhz~Gb$hxaSLmF?|D@(9Ns&+{l1Kfz3KJ}a zTQ`Ew=&<=raHq8SNGxyf@eL8vGP2S21#yG2l0Tw`hYB^qZjuHL+`ETrnLaxviIP46 zpL7$r(z`b;RYqb28wIUswWcpeJX_Bto!xN>OZJc6KB}a2B!5lkO%Lhrzo8Q{*&V8K zvPS2B;D7pcL)|NfX z#`6~4ay>hw*fRj@9~aX@EiVLY1+w==f;dn-WZf@BcXj2!Fo1YuGBRywskDeiMM~%- z%R(2QrqJHLthxZ&a3TbVPRAvq?Pf5?4cR2Fw?O?rRo zXS7JCOwcszN6K*TlwQsK9ISma`3tpJ?U)}b za$8?)x~6aX7PG3f$5wot&(@vNx-?!LrudsG$L))A#v2{4Jod+>2)`A)-+mL0dr|*5 zKvF@QXA5dA=T`5t7OT~HXzXpJk`&7-yR)F^UR^T57WqMHB^A1r3pe=@XF!r}m&liQ$2 zg@{V`>!$-`Fxf*^Rr``PMy6M*zEg&?@#7xU0ebO;k#rbJG?F3yGLL^NMs99DS)KQp zg2(s|8*KK>h?}vn@BlH>Onuz&nv%W?k3bjB{R=^C&q-$cckf!vb8bIMdVQbbac)yw zi<4Gycw5qFdNSdgNaYWw&PO3%)l7WYAM&&dY?l4jp;Sq5bwKkMt5fV#riiVk*CQTX zhzq*Cb{TGz^Y>faHA?}iZy)9|7aJHLOQ3VvXI zA(ET7l2-G6w%GRZ*bm?{Q=K?I?|$1P;rl9~kRA&G2LZ5nqS8q#xT*h$UOf<}!v0CV zpRT%lWx_oT&}We9oD}Hw$mqkeFBV-8Q#@3>NNM<)Lzt>wI*P)uBJ-UTSoL^wjF%m5 z&za8&X*U|VPMIie+9oX{HLUjzpyEVp1r^~TJ0+FKyY!?jE~TZ$ z**@n_6%H9jj(00eV*n|GEJgUc5ctte1SPZF zXfPI%T&gOk&jXN5&CyfmRp}?N7T_V+0xr(ZAVwm;8IsFRJA+~%Hhr-zf(KRk-<4B_ z%;`Yi=URQWL7k3b7$Ou5NMW-r0Wjz@Ya#r?M;EN#X3*9Hr^maDe8y~CEmdvyHmucq zXx4mp@S~^FO!d`Vx>x;vg(=XgC63E|n@EfdC#Q^PfL*LF@$~0(jjJEeB~neO?Oq9> zBNbWunPNZnLT}%)H_fn{GE3z)-g|Oe_P3hfadkyJlk1ZY4_59wd-G?`rJt?e$ERt< z8?6{u7=VQ+mJOowN^ zj;`o8OIw9>JgaFX9JW#<_F1=b)LjDjHna%q)$|ExLyUG}3e=*YmN*mec9+eHh93@o zw@+dLpl=f&IFDQdHL5KZX76;S$}&+QX9Z1;g0g<$vvK#(KGC@Oe;SRFm|jdhUKaQ((? z>V}=;T{nqH!fD~>zhmMeiP+$afHVn|LZH_^1qtYGZvMrQ;7a&Tg>AD$1qxeiySIep zNZ!-Ha*b?oG?;rPW6ZpG{K=Zr9sRh%eM?bxhA$Rl}B zJl24+#_0{>t3=aRd-7G<7RV2x;vcJl&*-06gVy3_GON|wxDq4jiKUgS!XId^%()T- ztS&gRV4b84!-)yz6-2IMP=JMz=vGjYTtiN}Y}!56_?PmeN|CX_wwEu5BQ9Ax7MRS8 zNm=?IZ&DNI>y3U?>%V!(KrbH3nMvh66Ey0n5wbU~^7|xiENc9{ZZ=#%SpOO9((S%b z-+9;1%sq6u^610nZ)Wr67cA^U?;0z=bEb{vd#lDaNX0+2-U6EFHC)Mg+!_+NI1YdN zxCONdIV3dOY*W9ao}0ucW{9G*jT($M0=s5v8%+CmKG?l@6f_)^8Ps{h=j9{$>ep)5 zoEsFCgd2iBYP>BdRM3rV=0R`P0WuuQjV^d_HEnWr!&3xsmSoViQ-c1$Gdx%jBAHB( zqo4xxN^D_7a@#xx?@qm6-YPDIi2bZiaa!+TQ^^}Gu|dy(vo?i#Bd#P{={Dpm8O)nL zD9^fhdjULs*4ao(1(|i>r95u9PyF*2+ev7fX1gBzA9A1Q3M)st?7l2x(`|LN)h%o5 z>zy~FY`8pIAKtUl_PFQJkU``!;@YSwtN8CuciIJKiE@|lEtp$NnIV1C4+*NYC==Xz zowI{u-(0v*ej|1&`EK-XQD@Mej;W!_S$bV{eexD+^Bf2*HS zqFAS1xcOF515T$+bxvtlroR4t-M^D7dx86}o2P(_&&dFhLLO7ssl7X+gRh04%Hw&w z*cw=GDOIpMyTh}oCis@+WVEd5nKhHhb=_z%gdK>DX2h9bGEt<(CRNv@A_SsfEpWJ> zfWtxQ3bHA-9_)GIHPJ4maGX?I{e+!S6tMIR(v}qX-8Ac-zbqfSp)SMP{7^5`G0Ydl z*FB!zES!mm0`xQ?=Ss^sN|rU?T>h9BI9goAhw@p|a?jhwnrXxUL~WsJ!8q`P|DR?F zGvTzgaSvJ8&)0S36S+ zb$g4C{h9(vwkdDnv6zn0;wQ;x?ZBr$92{K~bx{RDB+D6!-WQ`q(>E7(UbH~}Td8tg z&TcNL-<-+6x;C77A5&P}JNMe`9`4fb!@qw|?JR#VM$g(pfgS>ig<^PGG%h8dtS=`Y z9@AIFkWS$mjEw4Q>MoU`d4lN^wlY*^D3CaWwd=`*0jcFLn1&#cJ}PVottpIK)cy63 z003*egNz6O-^E;shDW+1qr6PO5I0!zy{~B6FvueYzztbKTW1{fMMbx%>y{2HIqTN| zmzFP0S`fKho^tPS*2113OFfaqWyP9rV}5)8J3TOJc?ZsZ^kwZ=Qjw_~f6_7ZX~D## zjt3X&ra>drU9XT%sE(y-O32N7HqEnwgBmE&XG4jz@;j3gJjMe3U#%>Tv?x2_p-e`K z7bYL-b8U-jJJeSfQdL?zhv)amEBdNJern!36|_A(|9e?Sz9R}#Zz8u?f7tsLpBdH| z!J%ukI4i(}$o1zf%M(tP;}hpnzS|@pOCVODi0D8%gb}mD*>D#v$`aL>S3Lb4jZT&w zJSX%@Gf$$B#jq+yU}P-{NWVjmgDh`n&AWL;EqD+b{lsY&heScVxT-K#m9EEQk24K) z)5B?KSp*BQV9nh5Rd>qQyI&@$dsC*$mA=5b=frR-DX>a&03?!P+AKCQ1yf>@3Fgi@ ziA_+gw|}{d>ox`gq=2KzwJwQ!y`C8brl4U~f+ro2lz~vA+D}0eVx_Qx;g*o-+?$Z9 zTkqRzLN@|6|sZt^oZ_TXnH`{?!m z<+(Utx%lJuiTBz(A2I35`Q5SuZjN#n6KBgy#PU7nPH52h^J{ZSVc_F%8zY$Gk$3xn#&ihAc5Ei-+Kr{lTh+x}@K9Z2s_wWCZI|6^u@5C#8GMtlqaI)X^Bm&;@(Qqjq_EGNz z6R0G8$fi1xmsLfidr0^&xc85BbN;|ue)m(O@k=Se`p$N-fm#k`<>vJW;99JlCiWk&{ig{HdwxV03l@lg3Zp+djUgC|{`1&)U2@6L4wkwP$7(_33vc zU*Ogi3BDHR)88u|`+lH?0$WayEEDWF4+i22nmA!oTF1|-Xh1T@f-zl2)Tj@(W zXL#Nk-&t}PLq)7~9bCWTkn_k_@Jmju;)3SZUSOs=A(Nr%^rdFsM ztTE95J&qXT!3v6uv`TGLF9a#5-k%SX)PQyD0%s&D`_lPO@(pSwL$hfv&DdHy7YWf5 zmp0T@H`23!ut}m-IdY*Y;n&*(;tdvA_%`_ibD*M%Vy{Sx6lzrEIuLUZDFd>Fu3zl_ z4;U^e?5^-fFGdyx!x4xk<&UXJ|B!nN-kC1dxbRLs`a)}U&xB4##45dX2sb=A`N+*Z zxy0eDY4lRnU?9l|$Io|KEL2ezxDCEnCH(a+ncuff52xlaP4UQO8H0cB-mjOs|dSGU(c`$%im7Dw2 zDLhb5O&@pIhu}b_GU&PtP!hEtO28W-kY}l+?(W{_8N33PnlKj)Y%g;x0Z|_i5L*K?lHGd9NRZcir9E&7(Ikvyz+l3b0=4k7kLzTxZpkiC6)Ja6$a4$UEd9br@*o|2Ay+I-2#v0?DXJzNJ!4y8J}{94oa zWh{qpZ@$lSahjh7X1?jgycWIf2pqDQ`M&K<0Xcr4P@LeJv~<7UrGq`3BIYZgvBnNT z?Kc{*{3!BE&wGbUH-1O1d~~nqfv~6P&=mH2dqVs&qZ2>$5q6_uY3A4L8BY`FDNnm| z9FL-02SltZuZ?N{e&KverE=%wm0kGQ;2ZJq*`q#*P7dug9ih4I31p;M-U~94h^}vP z#V+nshRXw*cAu`6G75-p;0r2VUM2ub`X9Mr=a0 za+$iIWPzqGcAuwR*+Jqi?#X$j@FuiE1Hh%69XZSbJavhzpfOC{QX0J{1H{^g=-KaZ&^eUhEKf~#hn43fMQjb)Y5 zGI$ufVt82shTAUC;Y8HFHrwQF1W+=3HLjFw9D=1Q5gB&abd8tceb@34F5~o+BlEXIGH0-oyKtBzPm#abb z7!rjncD9f6mU%V>Tv3VL1=z=JKHz-6Ae)(V+jl`)Rk?)dy9gbKoR20Td2fyIOBdPIp6 zpw;BG97j<>3eNK%a=YMar!g%hU-|wN?7u4aJu*Y36yU}sn_G&v)m`R{(?dKY_FX=ZqidQ02Z z7_)o6%*toc$V%HBec!`GDsL;$g`tf%w12fdH(&L)?T2rY7u##$Lw>6lHy=Lvwvcjd z#IB?Jb*#`qDtp3w*|F!*3xJ8Kj7|h)rn*n93{ip?Ej^Xw&)Tv@=8g{Jo^ zT<*20n7-syHz$be=cs3Zu-1XPt771!8#IsUvIK4rXGR&hXdAF~J>t+#}X`S|3$$v3Zn^@5gx?>kQ~2bcUf z*Ru0jW&W{7p6{Lf1@CvIjh+A91jdP+zhLyUbMj1!)lI!*!PQGeE=ckGEBCi}Zb>4y z*zl1@MqX^iV>^xgn^zPEKibCb?FmEe__G)1N-LBGMR^_~v@=GAD_VktLeU8$4iDJ| zHv&5b5o$^T_{N-~MITr7VhU~MPM=K?bF5G&%&903UG8P>K7jmY_K#Wa$ zdQwUh;5Xg62MDV*w%88C@xj<}S(8g8Y2U)Urs$OYH-N2ZAk(}l4knd%VuseS6SX(6L{RdT?N962BR+o8kpiCqc+-DMQlZiYvmy2)^xsCg2d{-f zCG-N4lrKz{(g&j}g!R4SFYs^?@IuH#t8Am+PkNZOZjd8n#y+QKe5{wJd=;45#6=;~ zUfA;lOWz%^Y~0b4(Bqi977VNkmgDtfzLvhd`nt=@;tlJ>+eJ2b=!9%KkL>`u_+IAi z+yw-iyiF@)25WYB-QC?bWpw!THMR_;lheode)v!V^ECl$U$-i9eNM z-LNElzVz!PSEbx+=-L!tkP(BguRuk=frS1ZPnOabour9y~$p&UBY`lT7Dl^&oj$F^q9Fg`&`h& zm3jY0$Ffk%zoFo(o2Omgls?RMcFs1lZ7{B53wM&kir1)Lxu+_@imOq;%TRIjGb&4t zc)%~*`)<{cODaij3~?1f?rVbRv#Kp_GQmtPOfzi%tqzY*<+ws6$W?%@s{$UjJYEMt zUMVe=0DmX|uJ7ZqQIP;0MDojE*P|rPsPo{sIG-d$WsURUwK|fqW_Cwvf z4pVU2$=2V0Trl)(F)KQF@J~kSNRNsF29@tK45tF z#!0+=ky#bogC!>G#1zTZ4Pj|gt0>`08s+xxSJt}7c}fhvts3X4c46qwX%n~B-T$h2 zSS;mXwKj(c1G|C5-^velYLslCC{y*a>6bGP^-{~nyf-JvHji)di=B#Ec`Hj2HrVLM zvii)ZH}6T;#6PvTSm(8MFY{&5P{-nvF+00W8?CSpd%XE)2F|oJ)H#0(`*d|bulK_< z#Y}*PXCp3gH+ChWVAtA3G(4+MiZw6~jd2Oqj7cDyvj|KP+*<@PAs*sVU_B@tzzghQ zV(>9T*jU2(u^$6g;-A~LSH$F{Cd|2Nc+Xk-757Vm7z6oqf;g(Z4lP+ zvQT%I7*TMlB3uMTV~5p1WcaG=jJl{!r4s0N<=x1vN( zH_5+N+y1|7C=}nX>>`+ZC{zPE=+1OU_hL^U*;Tvom5 zyKlpb0ht1-@ZLbt8*KV<{j8Dt_I%osAhxWU&RZmTb_YAlUe2hH1Q76%czzt>18Hig zG{U-Ve(4roe@pC!x6AHq_0m9O#HHNnXZdMk-n#|MXM5kii13i)ESyzpi@YS97sAI| zJ@DRKGs!wNB78op{p(d!OdsV&h-5?r@dXmmF06S5GF8^d^(~mjrf$&m{LwQ2<K?l&-4F;DPbI*Xk2O<^>-nZjcp70+K@_BqukCT*! zGZlnq*SP_K1zn*YT5zgV&W_yGFeea2#NtjgD{Bu zBQJvBYKd%}bMTu?FVF;xPs~wwDnhh71tyBpIOx&;%O0=*A;{*%PkR)ASsuG7l-44l z7}^#!k;LQ5oC(RPNiLw6RS1;V1ev7sK)vVz<@Fr~S;xfwO=nR)_JCbBp6}lEcl)|; zTgz{n|3hv+s;a%5;P1;89ne-|IR50gmR&6%P{a!stEy6qo?9H@d7(5i=y7Ex!*DZP z0s{W|LGqvBegpFs6|EcfIT2TkBea zvi46%hhJ^{3Z&SCSM#xqImVixYsfX9v9>UG%eXmRD%KKhM4t}N5A<~k-)>_CKA$8H+iWd zT9ZY+9~dVAb9}T%KpS0+FVGP}P#EG%s~4u$fD9_|VkTWK94Sg&h7Q6F%>bpfVt{%V zz}VTTS2kXPl4g8qdgomurW_%Cx@AX<$OL(+5GM|i$A#}U%z38pbi$RR;!Z`*-gh+o zgL@si|5CfPU;bkbu|MQWdzkof14lW={yC%!-eC7DuCnFfw)O7;N2$Ajuj3Yc_S4So zYPo$Q==Y~JCDi0Cq7NB&cKgP_`e-fqd8coT0{6yt#cxIlk4qDtr7f@2$XPAmR=t&e z!Ri$G$`%=?I-*Zql%ak-{$=@WB;wXBZ!@G_bq%G?QS0 z0vAdHCX;`JTbs48Wd%TCP$ATz?0w+^+>cr5{HSeifibNhc{)G04fqt6MwjTW7`Y&W z<8D$(M;)r*Nvl|aSf~q(l}`*V0fQOv)>u*LX;hDyCgPqyfT7HQzho(2^=5+(K!i`DG?IA(t+d5@jo4_-vFP#q;oGoPs#%qm|g zPtsqCwOlbcce^FJXHuS0@SyL;e6h{tM^;v3o`Xs~rKjViFCDz~BXjQ6EGv#>P3qZP zi@4+Q@Jij0*W2ltH@T);5mq_RI<4nV<=6#n{$7@@`QVvy&yJS+>cJPfrQfAL5&(+2 z_as1@W5@3UH{VjGB&xKtDqSERLxG?K5ktZZGLvP!2@i) zc=IN@vOyHI1}VB1>JFNSGpb$M9SG8W`)MWnTVU3O0hn!!&^(O}Ly<8Vh6mb7k3tT|w8Q&m}z;^(WimOMmtsmU6Y6&Efv>Xo`;mwzS5gO+AG zkAHw=^!ND9VmXuHQmW~B<@pQlZbv9W8~`O`5Q6Vf(M{FuM{o;>@8K8!5nkOH+q#GZZfy z!;=6S;NmF}Lddwhi&k``O_Qzt<_iUT^d^4QzP@VXm;w{3Kh2@@{A>7py!(<6YvTN+ ztDRH6m;0o)s#%SV@*K{np8^8kUjT&qXL)la?$NssISXQv*uU>rdEMc9@#29qR-75? z3p|uZD>w~pdj?;+sdQYo8|rciT^+O3zVh>&&!tnY52|s)hx_Xq)E|xR%SB<}r){ge z6sY6zI9w%j`I!`2#;;d2(87`zq)e9yz%tj6QzEU|2v_S+W{>4Lq_AZ0Tk+`gQ$be4 z@|Z`-^muU=Kr|w1wWtXJXT%iy4~!9X29$yB^QIf+m|#P)>1GktV4E|TRZlAOBhY7T z3c7C00mZ<3m&7=indX#rxpVY`sDZD{vE7#~7xxNge_Qy*G2X!Cc3&s{qgsOVqFZe9 z+V=F_2M19GQ@wf5K3xm2Hie(hsaAT&uLM@JeP0a7YH&Jm=UA5mKw?ww!NJ0D(%rn6 z>P{2h=Sr@MN(MohXffngyeqny@W-z04_V$RcKsW!`qx&Txn*-KYRy9M%a3ncp&OhA zWML!$02uc;)1QJ^MxmoAt~qcNhO1PR!{ww|CnKszDu)4)-*Zc z0*6iy)xiBMthD@-hiy!@y-JMxqRn4pv1Gg3k;}4g|D5Y?{AACR2Lb@lLwSxP)cQU` z7DO`-%Vj*S!`$5sg3)!kX(H@twh-o+J}{jAfPxaq0Rg%tqTvKBEoPu@$>MaIliKJD z6PzSAg|-vRtxuS@zkOyD?jxpE5@Wz0lbge^GAI%eLrO;bt6Vx_qwY2CSD2qkV>uO@ z+&^|7u4pF;Mn!s{-BAaE8)`0zUQG#q#y1-RFFrJsB?vf#_)pMEFaASroPJlJ(?W4g zdE82^R&rS-uqW&J%@C%*@PsET?!j^uc*oFE!;m@~ZaW2n>)K08rZmNfCPk6VDv@ia zl#r7ag7wBwKH{Mi?5zr530& zo)lG~dXP7xto~or>?7xtoFN-{WmICd{_#3Rlq7V0?3cie5E zGiV-Rk<~y1jyUe)(m!Z9EQ^#W0f3rO8^E{(K)iu~jwp+G&m#jJd@a=9Ztjsmq$`D! z2^5NCM>U~N7L0UzCzH7-ERo0)_mJ^&qG+UTRDX$n|CNe&reaXQR*DKQn;>yQmCO24 zS~LWc9|tfhQJOIm6IA0T-iTo~X_FLL4sQ(1p2XHT5-pYR$`^u7FI*dx`0^4k+grhWTw<<4Yq+Le0^ zkAAvZox1+y%ZD?KA5B;AU%s?lLMGbhQbo2deA98e!|R{HklxM_sYz@Qd4th=E~eT z(z5MLOUuf7s;8b_`@Mg{{rMdCdEVE3o#*%9t2sy$;mGi576Itj25|P=0SW+(Q}SWN zCiAe^WKt-T3}g+zVa@p;sstv3Kq^MMJlf-0DLE|7hz|;N31t!x1t@EE654VLaf~|8 zqJd?zP>+1RgSZWVp)qrAYLsc__9mx>fM|rlzNGg=f-0KJlvB}8 zBCB!el^l08f@P#atBiZCVI0F#fp=5!Riv4e3D&)z;ozx3{~ zLho&{3ntrZ9!+{&Uz@)Zn%nFR{GwSi^GjN9ztUh|Ta498hvJzfwt6R|?T?||D-mYT z#r5eo^Uu?+%fy>#xw9xIPzP!&u7D_T^rXJvYbSiXPwdfZ-nhAu9V<~o2gO50EvqZU zwwRTUROTG9!#4-4_}ZiUYDYV})>VIL*>$#EZ}i_A{V9a2F(y*C;|=8 zjm8W0S)JH@Tu$;J@*+tg_m6S8t+|=pAYK^)O>~&W- zm>4;*H7Ox9n>AYcP25JQaiC5LEB!ORB1CZJvaepTROwO4YlDK55pHKbqzz~NyBoe0 zy~01YANKRlQq>)Z{T-z=(pMWPnh)oW`Lq?6v#PA3DlSn)RhPDy5fsQ%-7tI9g^@40 zGR$@Ai3pG^$Q|?#F&_%|$*cNx%jLabSJsyRy8HF6%ZWd`ob>jWuYFe8{3`zRjC_I9 zQ`blIOtpd2DfrP*s0PL$JdKFP5ZsN+wbAr$juH~Du6VtOVH{KyhK?ag8=FFGln<(* zQkq*;9rSh_3kO2Vk3wNJ@Wv$vwfo!OA(8^er$xx+knv*^1bzxl)x%Wd+kl(rN$ZOB zf(`IlA7Ki&A%J9(pd!NfO!wN)s^npL%QsYc8#9kgn692dIJE3+XQ>$$&$SnT9QKZ+ z<=d{Bo&5f_CJ$wL^M9uYo{iY|7W^A|Q^QB=fqe=;%p>UUX|9!5q-yS1VpAz=kDMwj zzRa%y7TP%N0m``0j7rTU*+^pjk;dOG(6@*ez1EuXK6WqqzG+ ze2kR;e{zrSp+ao!THn?f{ zBH}lnEG9ni<^-A0dlIaKfFwv+ZE&R9a? z(`E+~_18t|_u6e5FZd)i+*r?b>Adg|qA(ZIQhL|ZQS;*QOG(M%6k&n!!!Go5<>?}P z3GqBM)|dq;L5jp8rg5Th3xxV{Nmqv z=)-8JU&3y8UAQ?lb{ZvXT(~1)-7-k0u?KL~ccI=&-z~&1-PniKNa&`X@(HFJ^jU_R|F|n9Ie5N2x8C>;Ft5SqBq{h2?L+bDg z$MqzoTFFhf?$-Yy$6n8Rf3U?`Q1bj(5U{U5u%}%m+brcW!q;1RGN1t;E9y|k9UhsN zr#Kf8i)8DP&&eF{U--MiJEeXk_-NQyO7|&Sd66A!WzO?ZhE0<}pYweS!(jiE^#wk| zqS)i-pbIbgpM(am8ZQb#iweVqkhzQpI)QZGLoIcm9+M)5QoH{>FQXo^o~$509D0kp zHQy^jG|uMJIg5^(Ov4Hbu#E@I061r9n{mTSMJ;$^Kv>ab6S(I}8OT`A*0TWlhGhXP zCVFGk(B+$4kYOH0+?i}e!#m}KOhl&*C z<8P|jgsup|u{ac(zGg6Or*%r2l7ES515W^E83?v=hCj7tdaI`~0f&L@LP-oyjA3Q%{hpE~TJ_ zYY|drAyWA;@`YjIk*UpmGEjD5y?8AEosK1Sk9{)E%%lU*!vj({oN-$QXE5a;hr}3G zRyO-l5KUd$>9_8T61-|3X3_8+08plT*{A*L;sYcwG_*iM1j!K&D#SjNE#x}&-H=?S ziMCjD;#T+qaphJ*XMV)YI#Xwn88p0H)(qDnJL@a^gNepaKu`LEwYaCZVxHbKYZdm_ zoqt-gd;QE%@L%M1S?kLm5AM72M(!CYGyAlAcrUtn8Go<7>JfDW&2f!BSZE0Hb~`ZW z9;@{=INq)`M%zdIzK@xmmjk{jdbnZ`vlW2nFKCka5MkwThEi!}dS`t{C{?DhrvD** zNiFe?|F81_(Qv;rO~aj@x4y+b=nT58<94m{lLP#$%TcHc@4FBEuP1*E(cF#|Ue}FZ zV+(*3Sn*SJm=Q{vkXO$%nF-AGAojdZdM=?X7nCqsh$M(G$n{o##=obH|G?8Bg*)8Vxr zKxy_`;$DqU`+y0Zm$tB^3sKHToa%;bmdjUGOc!I^g)nB9PM+M-k@pjk`{JCAvMJ!( z8{kGx=etTPpKwad$$P)`^+g9w$=W5?MZP8DFm|$3(U@Z zdZ-pKD87VefGrRgFaTLP8SgX|uB(lZ5{x5OBhhzUV3XSIr4C z5!o_kyUK046Lw9Zs?mh(%=->>XB^CG#7<7ie_>);I=l)(GjYQrgKUv@4By=+q8zkK3OsTVD7U;@Gd0EnW(;>~zfA=dz? zC>Ey(bK(`m&i>Q|7^f0+!Ppj;V85~&HJL^l4Itr+7l+ztp$+bp!Um{`BWz?KI1^yj z+7Lq;l`8b*Ams9NZ>c*fOjPjd`_N~H1%qXW4l=xz?;M=N_*C7<1ft>~@xb(kJ4H@Bd-krj4JjlBuvzN-8RcWqPcvOdy$f|$X2e<7ec-qC6%j z3*8KSPW+1GrT-cV+S~W8Di=t2h~;NL-K*HKa~AR@--o{!`B#+k^F)%l&Gp`%jgM4! z)#a4YnBN}5{7tL-J0ibFpPkpSJNsLAXTn3;@8u9_Azu&;Dr9|ff+4AN-IP`88wWHC zL?2M122Ko&*A4*82qO$ik_H9}1ELUOx^lW=M;zPx|Yh{_LzAHeWkB+!9nvXaF?EPkUml|D`ec{ z=LE1rbKKKfq3#0%1L##D2Km5OQ%qNS$dw5|h32sxO#$?L&&t)tB`q>=Rl{X}o*0!U zs3p|oSMQBrbVMP$NIH67W9wQEL1JOr;2%iYq1vfGcgy&R7>oVJ@ z!rO#d%>~bveQ4a#VEER5_tmY=Nyi^bjVyHVOtlJJ4U-M8Kbm{yX|V8_ zX96$I9Yvqg=7

|IoeD=>``N5a11YCxM`{e%mi!vWu3en2diWa?gS#n?J28hkzKB=2iStW?fo9h0@#Wq5)rHB6Gz4mbl1~M>I~&IfFiJ2?bViH zd>KQqCku$ByD5215K^;`G6JivC|JxxZOZeDn7n4wNgQ{}S(V@{VPq7;KaqlHG#tMI z&euz^@slJbXpiu*IORU#;jCiqWEC8KEK@XUiyEUVTqSrl>-!=xn9QQP4XO1K2GRge zPf{P)>hbes_Rm^zvX!*1A5oi2H(L=H&rMW)44KN8vN>zbsz2i@HA8t-?Zb~`9d+q-%#&+abxuP3)l7!HOX-)4~i}TcmM!0>+0qMH^VSu zxOOIkow@xVztEz1cnS&(J(V60fY1wtX>??|H8S!%i6!ob3ed)}=?{7(GEX=#lC1c! z*C=BJBWMDv``XV9J{Hl6J;h2zrGaS2vT#bdVX==RX?edTG%|_WWz1n=UU!5mo}BIl zqeIpqUA~3~l6q5-9A+(q?LL+MHcjtbX+hNO3-8XW-T(NQV0|c=AoLyhE!jmv1VYi6 zxc)X&;Ypx;YeAB{rH+6_h3%IPsZf3e)HTChD?NeTJNM@cAG?^kXo+4IL|0xnZXeoA ziLYqq@)@P|98oeKBnCw|h>8UHo8mBSqW%(M4hXHs52x~a1T_+N9;n4=q~8`VZja3U z#8J(<{@$xA_rqyB$X@izt?4+_c9@~k$Rjq(3_#^mLF(WDzIc0F_!~~tsA=9xtteIy zUX)uD_TvCKz$hRM31$IL$w&Yam>V|dK+&QA4BX-!;0((`Hp9!Tm>jq=F#|?E0Bh)| z>qE4LbOA6{-$oy=l~iDh=?)&ti2%@KEr8@8(Xn5(qXLJ=DS%sGN-Zpb%%8ZAa+<&c z-<73I4N!?#f15bz$Ns|kZN14JCOexQ{%=-wU8Z6R?wElvc3E#fjVO-Q`2Mf40@q`g ztqRe#T1F{Dzi+lb3}gLV-nF4uP9nr^+^1KD{*lqwi4iy2^M`aS9@IL3mWXVMI#L06 z>|nZN#e!lalUX;$$74Z_<^_t|!*dW&L}I*2$}nejSdj{}{53Gcz=6V9*w_F+JUB%Z z;H;AK^(q$`C(>{-Z`~8fOq&H)1^Rv-Tck7W4!Q$R$(sr zQUZaugTP&JtlgA#^RYJx%r(fU5Ihs}R0?f8B9Kx=@wc`Ua#A^D`LIh9Px43;tG}4> zt@r!)_hYB(AAQ^YJUZQIVexIn@ZH__$Q+N`m>U;b{7D~-u3zfmKjEXgwCob(!n{TQ zH751o#qfLdpQrlxj{hz)Byn;;n)U(+If@dJ$V-CNCt;Yw#e&e$ObwN;{II#3+7)8# zc<@QcyfXIPIIlcJUQLPszyW-wih%Ib9XVvn6cMp$2}d}fOfbF*PQwb~07Jqo`!}*} zS>l27QUxXe1Og2pmQj6q1PgR6eOd)1Ks?m9oB>gynQ`TfctP1)rkmI}pgh(Wg;3&SPcACE zk@}zBN3|=r$q#Zgo4$4BXNxPHnN1a0goXhCf>UxM-(TFIb6aq3<@Uu{@I!@x<>gO(F{L;{AvVl`NKFej2lSo;J_}K0QH*sMF#+fn4_ln9 zOHp&O4jA7T%AKR3*Ynpw7*&Y-fMUZBmyr!F{yIOMaci&=OEA|(iwi@@X;jKL!r36l zPjl!2Dsm-Kwz^a%{NnTM*W5c@g1;E{%LSz``MZPZSJmU0G|$Il9==Fh4>&$C<3;FEifpS5YN%~NXsf{5QRE!e7d)(_zQ zdFzS9NT*(X)0qX#>m|*veILNDBKLzKrSB?I$=@w}a?2@YEuRwB%BZ$5dWj5F zYDf($83zE-a@L2`b=KilZ8wC;^W*4Ex#tR)e}b=1K(N%MDL6^S%7|kp&E!puxJ*AvR3f*O zsUu~@;;`&&;Q@sKs5pow_r?_}?iJGDyfHAYs6xS5!BF z_6J4k4ryI~lTGlLzbmyzUu#tg)W#^xeXr#D{8xCmJxLLnqwEZLbVNixp&31iZ;aeM zad;+|a3nAh=R9rsb=||qO;EV5?Y~z^{%S2ZTu3d=71Z9uwnw6e4%+bNqs;o}Pt{X; zyox0~y|moECOm-Lh{_CK(o%S@I!5&TdedET>7%4P;)_KD-&JSngIXt&hW-8)MBA<= zr2TROK+$2RhVTg+Y*~aj5eUOI81akq<>Uxfk7tOMSG<8@aLO*YZmA!aZ&xaziDi#X zz;G6vMLtOU0BGUNDc~%m{dJ5bMwEqVWCAk2>!60U)w0E}30C(slFW1uTLU-LalK+n zO*km7<8`?b-bj11mer|N^|%G)WMiFLhZ-975EYts*FpNzwkF$V%JS&hK6ZLHQ$!{v zCP%FLuHJH9$XOdDq`%{i<6I0FD<>({30GV7OKs6IRdi}ok&TRDOzV7xsgD@dV6&2< zz5S?Q`?-!a+@U_+`N%g6yRX=9$aFV!BD$+i(V;)Zj$ss#=iH~tJa)sFUtIsJ;C+!M z<-QBQ{^&)*kM9b;j!vs7oWR?lrOMaCI8tgpj2ac_O%40(8$}YWagyQ($MNeDN``*` zDTVXP-1zQMiW&|W8eTa@Q`LYb3y>9pSz<78WnKAG`7OgD{;JGa;Vkf=an3$S1w1g0 zQNXe&W#w_x@^mJ1sKx@dN3v^01{UtPBCS=AeR+1=|84W-knfj4hrB`H&vv>c*wv--o}^s)}S8@8s)}IrvRmdL9J^0ad@!Nn(nxG zq+9}K(d2RM&q5Kv7P<}NHh0=4&>n3uZn6aR1Lhxw4^||pI<941vYG8r)z17w7ajM^ z(g+Pdl+(Q~9i+s$2oy@a@@ltKDE!#&OXpDM3l({5yQZFJPPuka*?sqYBYjU@{iyNE zNB+#QljZLm06ZFo@3p1rUy!*S>T{=-xcGs*x!=WDa={I7qN_}pXx##$2cD`SMyw`U#KN6z57r=n(2~K)G@MWpS8Q@)18+d8{e#^gF7CFH<%DF9Jnbv2PCq28| z?mx1-va!}wd+yxv&T;@`C};@kCPd>?>lsOnXKN4CL4z59WH8Z~0s)r9v9Xz(XM)MZ zO_r3~eV(%E%O)05v$mj}hRzH(>lI&EgYKyxbz;O$wZMBrguMD+>h$tCb*X`B!iYW^ zvRV!t_6g?=U^@xz_X;$8(jc606n$ynpeAE4D>i<&Ew)`U?bZ-SB_#rTBGG6uM14j} z%F+{|Xd$Kc4l_UH?EChe&)(Z7=;~uGPUb~ZNwWk0(zRcP#$vEe0ySN9L&Wc=21D_;pg!Imlh_oB>37P0G{CEmjG z;Pcm0RV!YlhEkp-hrf8tlm_pdE3Zva{&(3`;nNwj7U>p-9P(|eV`FgFqaq(u&xFtK zJJT%M29w3E-STh&^=Dow{nw(d4pRL`GkJo++Q|#%3EhdgqhzbB}W{EhRD(Q zY=Z59vRK~yb1KwgU+UI|maH^&{c`b+3BQ;w+&5oWK)| z-b6@2_Vy`{xf{!Z;!K3oO_-d0#d%V>S@mq<{5^!2h|_t_on^UZ)9E7n@tx+AyN8c> z>c(!S%j*4lwB8}Xyw}IK7_Xb-;laKzkQf-1++@u|Y|XL-vv9_pZKuX_&_r1MwFyLc(plL@n0xfLMzZH)Z-uFV*dPE{=rlryhk0sn??8Tsdv9 z$)tZNK`Tj-xdt`~om0Qcx)LX6lYwvhJd$p?O8@`2+?M>mR{Sepkyyib_(tvUlnD@J zW15JAdoUYC!@6%MZ|z$~9|2={Rs-|9CERw`0ue9T^H~`)wnqbRTZ`MP|P}(|gA&_PVR+{PJ`2+@n)8 zo7Y!Vw6T@WfutlJLuHf{afMu##g4-&#nQ1O6k3_uXfhJkPO)OjzR3cwkXwUIHNa)9 zP+0L>wM%gN)ali-`zAn6g7mgQn(0dig=7;y8w;{HHHl3~D%iU$^t!~*UHAHm6 z-hDLhsYG_8lNmm_Qcsjd;8LY=XqJ0^pAwqXs%%y(wWUUOGRBKvCuu%iFsA!j9{Zd> zXOtTiKQ{1ARvZwB6c*z)`0 zQCprh#mYNh&rin$j~AsbdzE@;oM|As>*#3RvOBl_&xN~16W1?&Iw=!~xubETrPZ?c zgq-C|<7U-+#Iw51a_O9}fRh4w*~XD?U9=9*DYg#G4ufwJ-+-8V0D@;BjH|Vr#9yd2 zfHTg;;t9vD>1Tlp0m|&8zKY7xvxHkTUrP_vcf24luDl4;w*C~zXjr!v+ed1XI2mTM zA#p@D9A;U~hm|Jb{jMWeJ5^j_*^1LRjsWIs`Xq;qc#X7~0D)oh<`_3s4{ZLRFR;?u zbyv0SdU1ZijVw-v>ABTaT~TbCSHN|ny#KAS{u95gwQI(|@g-g2?;UG@xWRf);RQTj zWnKz3Lbu;Vc0EO?BvgYYw{7^8g=(QGVL4XB){M`u{HCfS!;bLt1QnYe!9Ej;(vo1v zJHM+ctL6R_N(GBs_##+sdNL};|2YU?j+st$PudTjt0&n3M;!I=Hj~xj;aa)T_MLZX zy~L%6?Ynjfmkf0V^IpAtBxk;Rg%*&BrLJXs3oWh4!2MD${umL%8tic4KqE~|H`e!pGCPp{~ zwgT>nE ze6AK1bGdxWGelC?AY(DO?P#SMLGr@3O08e;=_@a8Qc^!BTsA+R_esvxT#sIKQcKx3 zFW>D$?z^vY=g&St(q}7zTdMD-rfx(<>ukk#p6bBcA+#yUy`i(r&&O779`+U|PJX3c zTS8a@cE`$wfRXV>`C*qKP#$27EL1U$U8Z$Kj6=a*L?VTVEn|G3v*VymL&0k}gd2n) z5?5LVpgskE3&Y?Td(&?yESs!!FqKjj;~#u(XcnxSt%pmOONAFh@g8uAHsw1!g7@bfC*IDU#{KWGLUFh$9ZdcPHdEVt$puBDub;3x5~X@uf#6c^BcW}C>^gGoazs!94UYeR|76) z5?(YY@}IWKc7ZOfw~GXs9aRQdU2S;!Jn2*Oe#I&I;Xwr4;&uiBra07HYm9K$Q+YH* zn~6nYj&kWUx5;M86-`*mtIH*lL_1yPSh#fZ(+_mKd$Z7~1LL@3skv2?KuTF6MC){e zaJ|^`py%7G`Uc$(ylzt(8&UMUPkYNU7lW<|ek}3{KJx7OpWihf8!U#O>_5--wNy&3 z>nfHL;W?aOnn|cp!O{ISGJhd4L8_mbrmUm~uPNDsLn3kC)b6%5rY>uXo^JKb9Je_E z9r>+ts-7f|n2~$pF#a0>9JB6Ek(*%8OeAmwu^v;socar~CUx@-nYwOKU zqG`Q{Tz)W?-t#A|?Y%H_os4Xa6$$=lg8MQWyg}n#d6y7>ODR+|BW+?NL`v#KMLLt1 zw;C~`hm@S%*^QCMt{>~&>RG`#gwo6+&>DyAMpoP2Y#kAPG%+P4mJ{smi&Hr?5V3+Z z@u(Mn0sXX0Ypxe_GJH?#;(yWETIa^Q?x42&**)*?bN!3lYW$m*%eMT?ob-_Uf$V#Jv8wcxV^MoL zCtTL#VEYvMHc7?dWp1YqQcX<(=tNV5o>=tOOLW^k1`cYOhzGF)Y0|#OZhOYuFA65r zHy}(R{@oF8(pP*XOPY4wcmLyf9wkx3>ATacnl>9z?J=9Gqt@#%ebTbX=?H3g@3Gmh z_4R&lsr!7%VYfn4u1gAsjqFrtqWU}TBX4;=H1twF(qrQ(cI(@JG3O=jpY8d80{~dm z6$kdz0|rm|j?$C8{6jJJZenFLsX1|;eOg#d4&hjNiJ4F690H}HgBrtP0`<^ z*6asLXt(L&-W?5z$wj=hThKAzFXtd5aqYb9rP&JVjceWn#;tG5E-=lLE;`Kfcf+6b z^|T%JbNBOkZk2hxO#engWpAuk?43bR@1EH?gGaJIyk>W&QEWBGUk_Z{^xOI`B`cQ9 zxTQTmQA4ka-13afp|$3#{D;|o;_%D()!iG14n~qc>RnbZIt_5shJP za=iBYbbv5jqWpiJaUYI$tyBtT;`xw7KC|>jH|5Jmf)x1BV)l)=Y)B)_d)RUT_e7i= z0LoNiPQ4H;_XfHh=(PJDZ+pZZ33<@n)OO?VxZE4|s`Pu?rj;+W!Je(fzW(4^e0OMS z#amk_fu}=qLsm|wUd3eXNThnzSfcP6BxcvP#9XNGb7@xG&UKqlbD1yUEG+9>sRwRfwo4^_8EMqQf z@TJ2ULgZ@23T+OLv+=M~Uw>1{-7%+;r*Q%8@=tuki&#OYvL{0x<=!ssR2JiU!Xx}c zq5{iX@lqN{l_C07>9aY>mnflQowuB%E*=*XM4k^&!MedO?5^)E))+6%iMM(Mi)}oU zYn5(nQ8dBHqMSE3Ovbj7qNAExmz>laHuXIG*Xzwc@HglU=^yM^EVdt6+UH6NJv!!C zP9%Ll8`ro1|JBr@1PH5pHARtTo8ehzP!ux}@oR`m8604g<0^T@tl|M^r-XqdB-S6y z@-t(>Odyc_x?xJjrKvDMm~wq)k;uq}f>qr~dyTcM>KQLrjrUI zs5q@w7;aPrfPmU?N{AeYgE$ez)M6jJ$~pzJv&eoQ_so=D6JBIkR~$$BR$Q61zcAGb z)nH>^999k;fV3mM!;2ES^t2pUsR@avDxcT#dBCxV_DpbP1aPPrSW;L%)q!TlF%BYi z1_u?C!{Rmtz^RNmYbx5oT(kn~6TNyGB-xr$R*~UwSn&$+&%M++^CGAErlTRzp0DLK z{W80!JGK8z$UOW{e_A%!?cNKdoI1q2OA+d^gnzedkk@upzu9UG381uMf5U!73y{M$ zqvU#zyol5bVx(_^g@3_KSOkmXsE0$}&kcS0DKXj$G-g}YJgm%U$xl8ooHu)%Yz&c# zkht^b@l5Z(HrE3H)R3p5UpW9kJk>erTPa*t;k4#=5(URW7Nr|BlaP#_&L)lR)N z6V8)GFpk0j1_3H~EM;skkroh}L~}n%c87A~3;cQlga3n#t>U&tSPr&MKNQ?lRO_@> z{O_>Nd*2!>%nRP&%$32+co;%5KQ5Ohp$g;foK6S4H?D3Kd51vCtjcEjSu;M4E`EwB z{kC+$9yJ~)EBMaF{4a9*ton^*6O@16@NeCE=RWOlJK@N8Lbt3zB8aPg;{xU`PLfuU zLR`90WV4HkT-4X>o}3CRS4_o;p75L9Hs_{*!jqM>ehu*NuS!$o z+WzR>U-YlCiFOP4xOC^HW}IXp@$T^}G!eIkyMI!M+tlX*!hFrh8BOgnhMx?Rp_Kqv zz`{{%BwbdUgdG9_EO5Emr&eHLxe|gnez*(|5QGoR#sF}{v8gxmm3(B4OjX)Y2}XwT z6s)B^I3yuHJGz2HGw7<{l>CMesxZIj#iCIEo+jw&fn<`B5J+2;9+;q}1bC*Hf7)q` z%ot;oSJqgks4K5&0d1b5TOtVLa)li|t(GJPD**z|HD0#@bI|oz5C)Sazm9`3O$ws= z4^~0Mi-`)WgRhc1UM6UE7Fk!AMHu_pr$d20nktpQ;w$X%hp~-1YE|Y!90d=Qe7V+< z5zJ*}&iuHWwrg-$%)<+@rF?Q1t+_R~kGly}n~XensEhP=h!uxFE|Ko3e!()h#|%Em)heN=aZVJB~NP zT3qkj$zcUvmT^1;V97F50Vu_A!WdbW@p0*&xbRUhZyI|FXQwmP?e>NNSdN>(vt}(= z19+VXA!J#+5P3F7S3V&F@v-Yg#c3K z6Dn=m24-0gZ2ANln5Rf!!518Hp z(WQQ7fzWEwZylY^oqghe?v!YCq=I|D(D$j(vtn12)vvk6__r3+DD}K9Z1mYp^k?oJ zqxJRT>sw)*bB-rm1X3$I7E~@>U?dKU@$rJ(R==z@wC56+$bn7{g6A75wW5AJ}BoRXZmJ|5tM zCX#0ZqZqjM77HsJ7&16Y1!7O5m@H=eqd1dXVH6fn`-YgCfMRBA;Y1kun4#N)m33~m z47{b2!^ud1(m)ZQ;;NY&fy6vt^otJ`Ge`lBlTCR`i?wQ`R;sL+%cxp3MkP-@TsvM) z7lbPVa5$9FQ0>0JZ9()z`2!SAZUrL*0r?`ZZ8ZczZKCDsW-)-n=z|1pv@sT?XE&LY%h{hjd03PN6-8VJIZ&m?%#QfKpCx zAqDC)fm*HEWn~sD38qlbHHZR~2bB+?hQplDK%00;kd2vT6$s3zqu@AzyJjgSX(D`% zroUvpGIgj4k+i|e;X=D}x*!EOC_$IuHTZV^DWXhC^g@8XFTn^9z4=<+A*Bje$iUo| z!p>;b;|bJ!b|M#=^+7ItwL320^0z;JWUN_D%XgI3z2DIN^*q@pjBCBKKdhS~ zdNyu(AUgwuD$e6WrH?(j#F{z9cQ48);&Eq_9 z5-Yg9P%O_{EL=MA{&aY>=G}a~qX82IElYkh_r2earPhxj;NqYq8L$=(jgceAB{(_y~={*=wJ{Oj-2VFXkm@O(h@G|B4B{M zIBA5b0|6Q1Fc(dogcAoX%YCzcJrKmegXFggaU*QELL?T9hZUwyp|vg@7+;)BvciEQ zLbIomj8?mVU~PLaXn@vg6EzR`z(~k8rmR7=)8lchysJ+tW`zDC_YP2fubMLBUqF3I zI>^v$`!sm@VD)m7QGB+N8L|Tn{~gt6rLgO_ZxRX)@VtSv3b8*(Mnjj?V>qLcamPwk z8+z{Y2|ZiGCCNtp7?W5(PDnnOtgX9DK7Ud(!E1~;YJH6&wUYoi< z|H%}BrLCPIT2M~L%%AXT`@*TXoc{BuWI@B9`o-!WGlh!LZhl42C#_{ z#%cip=gM)pBA~s6dHZ`|Zu$#Cp2DH3}9Q$4#RN`Z$@I#9~n@V46f2{A2Evtn1 zZ#dcZJV?Ms)J@k{kzln!Uy0ARp&*)X03!-A)wK2-qwO7|La7!F$*p3)qx(>{>&SyV zoy*CxyA*9^S_WZmZfJi|Rn1(jr@mpauO$PzQdES~9wjLGNWyRy9IYo( z$^+=^05x*>>Dd=xdIb;#s^Y<1I+FQ=XWE5OH$v^7Lvj+FPwEqfV@060u;X z*f|3XS8x$m&wB%_?vo^3@=V5-@_j#}P4U`Zo>^*&I&bh7xr4;}17{rnN*;Ck-qzw& ze-Od9gD92u&V{#CeEQp_Nzl2*!!vH3srjNYOC)!3eo2eA9?qMnyGKI5oO36a&q_QO z$9GaSGx#mA;q|~)hk?k4?sk30ou8kcTk4TLN13zpwnPbwPrR0P=?*-;*cp(wptJ3K zarla7WKx~|+mWj>J&R36(RVKfNbCKwdHyeR^Rn-a{S^?(Mp0TDE+r*~QYa*8s9`Og zmmqwFR23$g8*fG-6NKH_1EBIX0BlHLU}X<1#316?apR9wl(o2n5<{G#qV&MPI;4_x zjMb)9>d36kwer;#9ySnM28H|I=GEZEh_i@t`v?{-E5$uu=pHX}5CITVJ`it6k^p@a z3aZdCk!5EhA7V8lX|Cp4XJ{W zy#AR-ycb=E8nRX|lgce~!10UJj5T40kq4ZhrFC_U=sT*pAEr#Q;oWQ97>%9ab`3}Q zz9Db9^ZxQ8K5q6okhs{_hE(>0O(ekvj2^#_ ze{vU_Lulx@%Rm11RK{iDdvX_~EgttKU2%4J6`V2p;4gAJz}ob;RFwah_)p#2<$Vg_ zh0CS>uGl0UzY&W&4*1ammOb!m7Fx;M{K6%KV6c|6kwGvfE+_>Ma9E_mJ~Nd%VitUI0l}SCQx!$mYH<#HBbf< zwF1#^s>e&SPhR0=U$&70y*zi5M0r!GsWsz3B67f_UU0MNjeVXnj{-+zeSr`dTLAle^%I}wZCaV+A&E$RP z-)*`ne7EOffMZ1P)4|#kd)t}+bR1ZJ6PTaH7wKlJa#%1@1i_aGh|9DfONj9CSbt#P zaaaerBScbyHV(#vm(!5sL9+%9&Z;oOgauSG(yU7Y2H;ikO zGK8;6h1K(Zp|obtRvb@;?gm$WGoc`y-q%!vGx7;XBk5IydWp@VL$a7VW}IthDR57j z_MXh8NyMmWaQM_&B}vO?72j=cYUc5+JJ=^axWU;ubt>U&QUJ6rWn-xBPdabJhuMD) zl3hadmwX;2FSr_1|5meo8PKt#052>2O+l+Vtc(&en$S|a@3^xVwwJn@S4@OLZ2$9*vQ|_kuP5SL;Gf< zAk`825F#>EzWB=-C~6x9)&<4fTPtIP`3+NYwTWcCL2)507C_=b2uxWKv|yM)c1sz0 zh%BqZNs|x)!`Rev7B|i`X$xLo7ls^U2ordx0OEjBf4O)j8&V|a05n%H5P|7sw3dUzL?lX8Pbm28_s!U;C10Jxsurq-{OkyL_pAs^BYgSyxm$ z9VLWkUprLekRm+aem3VCb7Onyoymkz)D5rSo{_1G85h!Piac+)Z4|qHKGhY{{mAZq ztF+%~1_fYzK7K^|uxlg}pavCgP;ecqUMr)G_z*H<0utZ0wRH^14J^+=X z&~is<(1#j{E=)U&28h|eWqu`mMgkv-aS|KY4a?vtQ#>!hXlI0%Jo>9Jz?J}~dUil>({ZH}wx%QjdH+xmv|8~C`?A+6-=hQQ&(lrmC zKAitSkfe{UHq`QxhQ_p1#MC897J4pu_MV(*+1+8zx+;e6=~47#Iu}35wHUjaA5m2i zir98LRZwf`(vH;^(?@Wqng50*xU1 z5xr9&d}UGYFBv_wv_dMU9_^P)CSnkm4C}#NIN~BA1`+EqG#p*MOvi&^+%~*mxM4d2 z3`ZDSZ>OhzeB*$i45Fw-FbhAHO}g5FT(Ap(IhG-n0!kC6W^z zl}qev=4!j=5Jr;ee3a0#^bS7r+ytRJxa`Z<;W*{u&ZhmpxMydPz5wz!pww7Jp4gR zI!{?7jRN=va0+UL8H<7DmeUm}0^|~Bd~l{d)OhU+)*9~mzyV1(s|YY?U$+B{gES=I zU%)E;g3fd)zamY2fNLSg^)dv|83*U6se~x;$)f#m^6mfK{R8wkky%|>d>uzzoQPV;Zep7S+s>bxCl-npRiW}kEP$2?1yao@wrsr@AHC94~h zUvG6NA;q<>y0fOIA9p_1d@;ahKZ$(NbEV>|wVt#2*qztcE02}Z+g_mo4urlRKKm|7 znxF~6D{SB=;G#x-{{$zY3I>3y5rIPrJw{UGR-Q#$`(4tfkLp_RVc{d&)vvbn@%u!Au>eh)36k@AghZ_ucQAAWSJf z3GO-bdRXYpz^k;WkD$YP%}-|XW(P9Jcxr0{oS+2(Ivf-ikksVmkm(x`#%XRnEwH_m z3rQ0*;YR9xE@c7A*g)G9%gt|Sd3vz%(rYijac&-amK9*T+D+vE6#6yuSg?RBjFLPD zUEn!2R4U1pQ46}B4B3wtP4aiY%7cLY@BojM5FDFkk9OSzjJLo=ASd%hCFC4H2kWRw z17Va@N7$S}-vEaQ92DhlY(rLYAFKV<9ObOV{zz^!xyH7Rtg}(%yV4`5;MYrV3L4^) zNSN+)zZi|@+T{uR54{(^5PNB*{`o($X}VTzuEjeCt_>&jVB&K zW7GKIC42AhVI4}xU;Of)y0iEGRe8%R>5hC4K|ur%e^x0xGnllLn!;qZYoep{M8yD? zt5%tsXaZVqISQ;~X!>Ou7{$QX%M-iTxi27MA~GCpMTpQ0Jj880gIvQdfaRtLS@grb z;E^OUjdljBk_xD*qYMHC1n^BLoc3g!5wQ$+cnKYgT%LN_IU7jDK{@SN#3oeIyn||7 zw_aNi7K+KepB7Db)h(yXS;)e@V#B(c@!l3zD#Es28RyETR!Y&!V#-Go10;n}YeqLz zx$b4nR^|zx9yeTc4ilCfjWWkHDi5F6bCRk|Z_W4QHMF`XEtQ(ZhX$IVpC9FOTa>1J z(nut7;G2W``9H$tJnp$!#>21IN9zrC6q#pJt@6@Zgt|9Y&P+d4x4GK# z$j305g(rR=T%XJ2D~S&2e^~zS$z2byAUy)$=rn(^lz3MU0GODGtLa!| zBH$oS2HQTJJ!J$P9my7iuRtOe_UnP;*wk_D_t+{ZPyigG033!`*#H~rdbD!YL|ma8 z3X?VkW~9CQsp>_yh#XjA3hM&qSw}!`Zc^b~cqhO}b4*SW(4QgEJD7_}xwjlTIGxHm z4;*jK1=3va%*CT$2A~X#)jgEAFSIGFC7K^%BA?&?XwA zXuxk6wisl>$J}Ftpob9s(;_`=@w!0;^v5vCAlp1q3cwwKDhS47Nmq_aI^aLUUCk{L(((tXYzBt4s^vXEeCL{LN6l4)LGW^wG&tOW zHc;TJW}ru?an(BE=Rf#Amt$3*yl$hjQIM^DH)LSiJZfd^6lnV4`c&WBL*Vj33J#X+`b%H4`bJRFu3$0&e$l=bjpQswcqqIPcDMP!Prlt+@L@Bci7=%>I(wll z#BIdyXKhdN2iyIlFMs!mZ+zW3cKQS{Dir|`&4#e>poS3<2MGl%h+EEJVEj&UAfiO_ z3oDN!YHFHXGA0-pN=FImg;Rx8T@-(YPlQNv8bhUACn85Qc6%8s4OpYkOYsCFzEjVw1Jqg|FY zs^|+ucV5#ftrmky05^KBA^3_IMQyR;Vu}OOTBJ)pgS&|(zI+dz3eID1NA*e%-`>JB zHJ>JJbLJ4?y)P^EtvlMF;oMyE-c)Dn-$$S5JR9%(b^pyHrd;E#F0h705^UJc+ za4)d7kx@R!j?f$o6My!Ohe^wD&n46}+GZSm{p*X@zlZ;-IKSq8ZJhtJdQWkatRl2) zOpVoMz+Xbc^>c^x_mdDvat#bgVnr>_A;gGnD-tu-3_|%tKWDynL=-r}hd)#VGuA8^ zLg@;`^kh`(6}f>LV45?Cn?`i50Ywg1>G*j`S0RBDp)l6SdY>G@E^^n{B^q6(Y_)^2C7^-6bPF#a>Jm z9I4=dFBWZ~Y7+KEmZOKI(MePZWiH+XMijE#!~@ZB=6-oJ4Fg6pFV)8X0coZb1Sf08 z!=rSSbuxiZzuza*`e;=98f2P%u>iNua3)U zRN%Nkv4_z_Cb4NijZ^7YDUBhNIhWq(VtN4xV(*R@I1Z@O?L-mMBt9qv{Z{4NyCW*D z+8S*b8`h(m#i~@Y{iFD=2cotPZriFxvaNo*(NO1|v{XnvmX$LKb9Zz$z8l@E@EvL@ z;HN%rN9vj77K}U>bC~hdEmyj!yKu|%mYJWs9BfC|MZ@*h8IL(3Le~+g+o*k^gGrXm zcYXUagVoNac7?}4M)N}shs*^CMY!~h2iHGLa5hp`sVX5IULC#yfkV4eeIIjt+Za< zWArC3_W@X+JxzWX^pDV*Uc;a8(tr1N%TDzAY|KB{f3-d1c3YSFf_t{*Z%5APiTO8q z$9^>QN!;eVyxzP$upXYB%mwc4pk&O$?{4kEo1cAsagY2ZdjI3Rr5*39)SquUTTU-| z|5MG+$}=Aq$xc*tzFX2rs_T5hVHs=YSq-MNW4%t#p9l9|0}tCY4@^QhnoX(pRF_`sUg85hYZJp)LgY9|gz?L54t?YKIpVHWx=V?3~;lzM}5~?zhCj`08StfIJECT z6rSOa;6{1%4@C9nCvwr|CQ3wlYXT8(EG;HZXD`oUy))DJ(javVfK5g^*NCM|{Y!JN zxy4NoRbH}%5FvU)XQrS_TYgwTQ~t6D3@<8TA*zRH=jWykq`LOci=PUu6pgG3HqT8b zoUnv55MtVJq@IQ<7@GQcrg3=`gd{JUi$XwM^111qW3W(IcY#-&))S~jZJf-A-5-{_5zEzM{q=m_bka5o)4}gQEk6}M}6;L409w`h4 zi$EX_+GJW4xqA>3fXMfZVlw<8-)~!JD57IYG2kJFBs(lMor%EU0f>D@A6wTIN&OCN za0F>0>tg6+8J-pAXUn#ANEb3NMvj2gT`Z;Ow%>@s*>8X(i-hZu9~lVt;M1vd0or(5 zZvg5fI8BnPjTpF1T6P4wAvDAQ()eCAw5@cU0@Muc+ioQ++j9+dISNbfevHK-CnA~4 z48d(1aFH=^>%-%RjPuzOL7y!LlG3P;k7`Dr6x&`kk9&_x_%bvS^LAcEZY?;IP0fOl zT<7$0Z^Bh@a*7wF3A8rbnaau2NK|DyzAP!BV&Tg|PFbbY_Q2!Z-=dVJ3Pd^cyF`Sx zKI~cC1@W!Dx8FalJxv~X@0xCX|M4Y31_(HHCJwkfolDW<29EI<7;vf@V>yvMM5#)a z$_5Ip39$hK$>;Knz-?rsK&6dyi7ie!V($AWTwKI%+cjlh~nZ$ zIz5(V+$07QfvYX%S-7$CfDe)@(H6qFXEHcKPTZIj3=#>Z+0*~O9wM1<(PFL}R*)@p zFjREfJQ}Qn8e^*bxYR5y39J+`eB2{l;&e-|y*H`;(%HC>;rL0nELg);!hev7G((Et z!O>r19z2B1OsXBfAy_v0Zv({#1^(SzHRs|pP@}z+*2RY}YJxnwAM`%Yl9DXe;T9%$ ze{6^eJ_f0CuhO-?YZCL+!NfPNsh+;^j{ZXKxTlzMb;wU!w%rM+)1}48`|sk3|9)=B zGYT4l3L(>k_Q6@u5jGskX*CH5+B8b@X9SZ0C!YkD<6%IUvcmV!sPw4l?Aq!cRPLF=Qa{&4% z=~V1@j?R+|F&yTA$N9txY*U7T`@WYKeXdB#8wGALz-R(H z{5O{LW&Rn9ex_=Sx$O6ipe1n_jiP~+xCm`OMrpPsW}trN#V~Nl0S;FT5!RWC=^$w= z-h$Z4X33^t-4I9#?JN2a&SJmloP3{>+27jw7FqOQ0X!Q`7aDXER?V^tcP&FP)q~Fg z?!=}KOD`sPvvDWw#p0;{_4EI{n_XpuY zo_*)dp|j6V*csdYs+hhpFlVyypQe8P`zwNboQ%KU${cc;-E)~0sxA)^SC&c|#JEA2 zaJ&KWV{_jqQUpzNH4KD_PYq&;2`M9fc>pE@&1h|u5@KEkVpIE>xk!B=l8hL`Y4}0M zsTdmk8-^0pHm@o~=Eh@&sGX&tnqoMSbe9_9B<;c$V&wtq5Gmvp(U~fjQGMCa{D~tf zP9$l#kxxDIOsLJ}ADIG#HdNw7UTbl-5#4sb%P0oFOqc9R>AYR{-+htWkN^3Bh2Pz^ zX@8gVV%_tU5X*1Ns>TT9cq-Ey^x)Omi-yLqE}u@IL_f-O|xF)!_<=`v)Ar5k8Tc z2T+|XfVRe4C&#nLD<(sj05$)ZgN=~?8ocCI7@8sj1|U&X=p~YWOpgA=LsBs--KRW1 zOa*AB+ibmm6maoF&{^|$zn6a7eQr6TeaR$o>W#8hKU9HBSspYKk~RpJq*e8hi}Gba zAcvVJ{_C(-qk$9)CM#L`vJ8Rk40f?mQLF_lQlKda0NR)$W(G`8PSz?Ex26`~m;3t* zq9nWOKmx~$YaQsa`*>d%tS0-Dg=*dBplV``Mf}XZ3xEHS+(*`p(%)7OBP6F@m}@RI zs~hWfY2iaG$rk^79}aBtUZ5BKYa|^Rd(~9LO=fdW@#(qD&U-I{6`GC~etOpZ>M~aF zfQZh7ueHC8xejvEO?RDnKJs5hSpL@6#dw0@%y=CF)wNR8KjXG!^Ov}bv-yXS>(pal zi&Ki>N8~QQw8}0GYEFH9dD(uq;q}hV-cxb$*9<<@R@c02Q#VfCgj=`A5h>)7U0w`Gd?D~$wL$x0=&~S zkca>cf-b}2Ct)cY@@gyE>eYRcKtnkY%H>+a=iIWIthcqhJd;|RlCRXS`bpkdJ=I3^ zS~s+r*bhW(O@CfPyJ$_sHLcatgd4Ywg*8#?@$-k;#J?TCaNS3l_vI}r^MFpXm%bX+ zUElq<7F6W{I?T(~GD8$>5ot#7Lg}wyyYS|c&n_gZ{F52*T?bhjzp^+DV7qtFZ~D@S zmXRN@%$%r+SKb#d1c@nL2sF3^sp#@tZfgB`?dYr9jI`Nlg?o$|&(x&659Cz9aSb#* zMZfRrIM)Y2EveD)y1L{ z=)aE;);F?jucaX_pNWwGKb#+ly}vV+K(Xrx;owqzxc2+(bIXU+Hn%2YJ!F^LGx387 zHig%DRnkJaj&cveXh$UpD_<_O^0q}v-G*O?sLOO;Je$~fLn88zu=INg9OCWYh#BNR7vIHRs zf3NgKXh3nK6})St%mG-WUez9uTmWE~`9p(=WLhZ_If$W*T-Qk^`#LTYgdlFfm$j^y zY>J*2b=jWog0+0A3`w>2=&4JeIWaWLdm_J?hZ$9E_XCPfZFu1E1psLtMxCw6W6zht zut!fpeKSFKWQ%jxE)|pe_Un1!9Hjp&hCt4j@Fe)<;b4ZC5~ef+Q%-G8og;8OFZ}N zM%cp3V@;R#86-SAy)kQgXaARLvcEWqMms1+40(|3u%%4^_+d9Cpn7@+r~tKoOo0dj zXH7&h-M(j+a1-S+6_eBF$NGiD8jrakqB*w7=^E>1`>}yjp;mPw1#(XQ5%CaF;8To#T-c8ef$l z(^C6ACH3id8#7i8I!WqhO1AzAJ)?eEQ|9#57QSSV4tP};W<7g6jbP8nDvw@#zNGAr ztCO?*EqiOsS@wC|UbZ|<+~ZRBm#7cVK6r7oEb}k~y_0)jTxzeLW3m^mlAh#Yo zAqVIO2vCTj`H_ZZLLhbu7LkixPGcqBhgvxvuyM$c3Si8*663FH5#nYF4d<+F zipOrxb2xBPfcm?Z2fkEz7y~l^7~byYdbKVC@IyM`)mow^&uR^dI9dCAg6h0PV>n->!3rc)A^CT`kQzSZ%}t;lO@`}8p-hin@$kVgZ$z{gk$$Vrer zf{)Ix^Wbe~-#yY)a>f3ysNCYCvNF&8=K56AbNRH-CG)~hwayjp7)|@CyL#6&ohuNF z*m~hU@}y=j9KCZb{AksUz}I`_Tj@hXSEOr4imWg=%Qbswr-WEW7HC@h7%S;f}Zv>@tWt=bGLt5_%t|zecehCwFF|jdyNqs}Gti>vE&o71 zJ6#S_Szjj3Ls*4p^tIA`4Kkzd(Qdhu%A4?GKiv;vKjr03fy3vltdrDk-_RII%xY>o z`FmO8DC2g2mbuPy$Gv0^-^8ksj?Au-jrEtBz3q)x2*D#$*S`6imvu>OCg)oyZUjq*xYggTG8GA%= zw8q#zB7ajqtodKfnFr}Y&2b$arLC6fJsPED3u12rc=Z!5H(p3{kdh;Rhkwldx|t@m zmlxEc*6n(AlA50#cDFCq*wqWx(fu)oe%N9lp)5SKEUrU)r#J8OKZfBi{)xEnneL<@s{yQ!xrRJX z?+CFL8#t`=0Pg+jtb&IfzX@s`)o~K;o+=zT_QR~3u_Y`=GMVqk>>}uhVhDCDlpuCY zCXkD=bTX#rK>WaHaP$l|FqHfh_ryMH6+I%HF@9M1*B{9Vpbzn%9mV}V!ac5NY%YU=P%{?$RZF1dTdU)uC)N+pKww%(WI&Hp6}O;T*`(Z4bK{FpTAN2hb>ALVh>VDcv%cd&ksPsRzFXr(}&Lp;w(|vu*fnZfy zp`}IfoQ{?Q0sxQcnZj_Vk~1=d1Rar3s5*=hP_@zTz6PW+2Kfza9b^i^i0=;q49mM- z8L)D%E4dl+T?sX92ake^;XDY`Ixr>Wgn4E2mr{eT&QBOm>Gje=D&d+x0MdT>JqY>$ zARIo#d{EUZnztc&T5G;lR&S)BwG5r^n*szMsOV3+lTaLWG0KXw{F`!lIOY^ZsZGNX z1gUbmafE=ZY*9ThKhj?!F=ySw4-Os)gS(FEWN*g|9<@Iop2u?bAAUkZs3Ox2Wz7zs zK@DRby5l4QK7}@2bPyrbd1**n282>r!IJ3Be9hqbBXd1Qt*zUNN%tZf#< zM0|yGPcdQI(!9ckXflEO7DDabM0uRGunbKXe%wrR-BV$|vEeJD!(qHAW4v(lLf?Dy z(ASA})-0&Fs!iQ@HMi>-gm-RM4dt89E>VxQF8z_*>*S4{Pl7)5&sI&QVSilC@b)R~ zmMg`T!!d5={=O=CmX4__3$wxQS>pNF_{5H=>7d8iR>og$m=?AxBwuV4xolB;{25M0 zTzk~t*(69$bh}r<)HiSf%n`EGtD#4Rv2HJ=C}8(J06dGt-pctmL9hMnFK9pM zl-nC3(}GWM^6n@3v8A=EqAa)w5ZQr<)MZj(o_?6RMnj%~t%I9f9 zZ_^LY?k8>D!C%f{js=TIh67mrqYQ9B4V6ms8>HevKK{s9HH4ZRB!vsWG>{}&$=M=6 z%$V`8;HN7%1xKl}wDf;FNQT4mIk~2>+5>JDVAb6S$r}*yh;)eS$Es0da^3v0hUh3c zhEL{y#@YlPs2|ByCJ4^nZZavK>2#NpSvlXS zmeS=NkSQS@!fy<&`_)deTRZeAyi;@GpB?-Exg2o4<&~XaSKod5j^HkLFKW8AbRn^D z>u_}|RnP7LSB3*)iJ1`83xGe*=A!Y)D%_Y39MW-I=BZAnMT?$)-UD6Ksw|QI(r#Q-+LbwHaQ{?P^zNYF+2D7Z;46Wb z_CT`Dk;mRgw=CV#2|M<_?8!fJS;}J<4w@53Vl!z#Q*<88B4sWFi>krY(#s?bD z$!bcwNSfz0JX|({V4EXvHEH_PImO;TEIzr?lVqxGyy)>}Tc=8@d67Pp95(a4T9*Gj ze5|k`K-O?*Y&%*&n?6pesOF6FS&?@$r^`&=Un++qv(~hgh z__}!5$R6x&77y#v(#ctDaS1vRx2vPDFj?D?(JyZ+PUQSHwMb+>z8n?4=w6E{-1 zXVfP3&!uH7fU4(r>oN7qasvnll?cpbWg`Hf@+19{788`~IdLpM&3DPreprLN{)P>_ zOFGiv&O$v2i^+{qE2o{;RwToTMBMlG1-eU>q(6z%X?;Z>aOj~pF+4V1${eAw!(oBd zvJkx5(K>dhs-%iuNP}_KJ!WUAJeF5tMh=UZn!%-#pU%wLf~tnA=oZkxEzLgO*+Wn% zS^Jn56djc?{W^1Qg#E_eNzse1Dt$-QOO?mZAx@PFoH+zwN1ZtvcF`4E_4iXLA6 zkfg5S-qc$lnsoPRW!jDuL^h|LnFJ|`RPJsqe*A7#1Ejs>k{lw&2df8BEoAHyWM^6rKf@?t`$5B#` zRJNdW!KIDa3tAohVH6p-NxNtkr2z^SvP|ZK0t0xoud;G_h$tv9KZTczAW}M!I6a8J zb+9Bz1}fvIFRF%$AY!9-0ANf?ECrdz!P*n}RxUi8kfCsqjQ*hmpl2!^Z7dr(!N}~; zkpcq?;Bl3RF_DZ~?THJi3&^y-VW9)K|4Kuv(>v8Tfe+CeoZe%SuVsf()wi!#GpnGO z5iJLgmkxxaza|WZeV%u}9;_7WdWKc&AG*8fIHc&U1-qKcb%o zS`wf~0aM_T3S0!#Aq@)!<&;Hd^a9a-h<(aLvQ~{~k)UTe*j8&*HON01&x94Q3{Ik3 z13JTw1ytqHLfwpl>|UT`u5!2<(mJE1CEsOioHAvdC8xQJG_Yu(6|-^pkXS~Ho1imJ zCYY;&qu=cu(XU9i64p2q@<(!eEdKPgwa&)pl#hKHg1B6ds_W}}#^tw20NO@$>6RW= z;(dG0-A|&W-Bv~a&Ha`Qb+z#s(qj8ep3VBpEn0gm3UzB=-YB+K<2T<%swg#j1d{h9EiKJ8|LX z!QVgseY;zc?m6Of`d7C+{X;9nxXd%4!qmJ13>By6&R{LmbL(vj8m=y} z3Yew-pK8(QdX0XpM<`mki-QkbdkSOkTZ&C(C$k-*$siPaAjPh+eg>gOu^_KkUk1lB zqiHsG0=NS zU9z~4#aR;$OB7}Z76TzFIk@FKG&H=FmRU(S>0T4=b?^wSK!?)M)}k_Qo5AEKJ-aWQ zEo$m};)&_j250?Z(E+6VvPqj*-l4q!?+``AssJPXE7q&8; z&t(XuMT)g^=P#W;GPOr;Z*DkQDyJ< zpRY9>Dz|sIX3YgKxfI)ZD+M6{GtL`9Rd&FLg6zlutvE?9yE$PzQY^zrCTWnGVGnl~ z6dF08Xe;(CfDK;qsKqigRYG)}F_wnHmUDwKjlDM3$({!CL4E+qF+YAVgxsAbRCO{p zy*YK2jG-gze3yqxvFDi4GQu7A!ZtyKwu=AFR zYfXS7STtasrMi2hxJvprg5Bm(4;mts-WtyjO=b=+q0w(IA@>EQV^dk`up`8dO~E2A;7_< zes0~N?8U1A4g*Scr+=~fAt8*?CeG*sMU(oS2jca~K;od3>=6i2jt1W%9V2kuWvmiI z@Y4zbTt3qh`pe}rZVdoPbQ4At0p_UiXL4G8*I7j;YGQRVst8)h9>GA|#Hp{pXj4<%v=23W}m-cXK9< za?FaB5BVIk)x9uFFmy#U2bI=-_BnN)>eV>Z7GuvSU!e0;-n}LIbyt@dQh5t+J3b39 ziQ8Y#IufpbA*shQ*6XNqYr~Pqh(6vy|6{7}dufM5taNzP4xC0W@2#olUXb`+cyvq8 z?ORSS)6=#MjDDlOcRVI~Xn;k=Wws?-6@X2H$b-qmSsu13T7%I3HJ_l#O6(sgwUw{q zImpZ60U0SS?p9}D*CGCl9H>K4?S801JR*h`DwMPiPst?$mL~?WP}?;{>Bm)5Tq8VA z7xWLg3Nz(Z#S;aJ$@!_E(KBIuFLq6lg~zB7l+H@QGRdF}z){z&eV5Wns%<&VqV=nEBK3XNUgTGPHI?%!8IIdEXV+cUrhN?8UiazB=RFN%s-9`+584@e%_ zLgHn9thM!j6*1Q52mmBt&baH^A94Oe#ZdxE+LW(IAK!9au^8#!&iYBL|2Y z(PudRs9J<3d0S#nm~-H>Q$)b!)B#J2))aMd{1ptyHySM=sZm8Vitf*sBhPG39KRla z`;1b3ilL7^_3ik9N9|z_#tuJTbu4}`Rxi9CH~-LlHwn{}=hGHibJg|Pdh*7s0;$^{ z%~CCNk74Vl%%TVU(Z&1GSF+OBjN$$PN>R7S{9-hL^OSs41emAu+cVL!!>|91ivVJA zw<+MCicZ<;VdwiwJtn$7yp)XJzx|ZF7GDNb=Y0MR*V_Ajjce8O+th-qDB7dQnongp z&4qM(}3<#qG6j@a+h7!WBd;shDb){0Us)||pPj50M{!dQTYkwr0~I|D&5O{!jK6b$L%dEC^s#Gu7KbNuU5A5N{*x#y}EqnDWvWjVT7Nm zTvQ)k{>aLxJSDo@>zPxrfyUqJV;2hx8uK_?2g49)MpIXgBFEzuJ-5c?ZDP-jU9)Zq zyqOjH@Wd^PT8Ni;Od?ma^kjr(#R>1g@Tbktf;Ce0kDZNA+2mJODsTNNLI|Fz_{z_u zzcm4k=|WRxXt4al%VfG!08h;bzlu-DAE(#?!rY-?GoL~h371zTcwx}BCtQ-%#Rv&- zUq*eEms@8c#DF!*%$iF7YWHtWia0bWIt-R7uU7g%I3p0&BRrj7<&fGFXeJ8{f|Jb=>n&c{0fCg9hwKeTSBC%%JqMg8=`&4$+wUO4o^ zP-*p+-4oA>2c=r2YaMzw8-mZh(%bZUsQ&rk)Nj^jQ#IX7O(uyi<{EvLwMrFo32SBU z_ztI83t*Rlv#(%V=Jfl7CJ!h0_RzRj;`}aC5UwC~oV;r)`c8-VX3es2tR&N+|HCRZ zZN<*|OC?_H=O|0(4e;L7l|8k$FteppYLV%4BA&vDs-8_vlbICY@C}7R;KAJ^QBiNqYb6o55pmZ>cU#_BX53Kru=DtOS?7M{ z2>-Oa@Or>0R%oQ_A=A9Je8|y|1=-jSYaUbfhYnemJi#;QspDh;o&3{4rksWsdN|C? zh$g8R%m_Y1Ho?o-k^KA~#~R?E!^9{zX?bLZ9DSu&!er#878ovpER=6-xb$Gw{b6ah zq)>Ver5})b=fKCt(2qYX8FftG6uQ3V3oaP%q5CZ*$^yd!PJ^5ilhGmTRIWufn1ItR z@GIHxSui(f6&8qN=zoVdE>~yauT_=Ydi{!UNVU)nB9Gll%;NB!?Je}|lZ zzUB3I@Lfi~yYa!G7snnHZET(mH@l+#B7CHUF-Q96b*`!%m264Ot4VAJWR@gsZ5A_nfxHRQ#e@w1oMw0}RW;MgETB+;eg%&lW-i-Ow*(H2R3psUQt$uO8 z^fRzEm{7~6tZ61NLLDPDROw6Fa12JOoV~99pl#PmS$m4+bYo4oKD+m>)Bh5hEdKZ> zD}m%vZuEw32wZM?+#j6gte21KFvf>A)5y=I&J_s(qkeoSoKOskP1)@!D*AZ}wdd&@ zbFF?sM=Tq`dp{rPS#YM?BA-_ zDpY$AEhl2m<^F|F@0=Qn2zmLfvt#N%gr;HDf0yK&Z~as{*>aLjye(B0phr;=w!|nw zl$m*=WQWcuM%;q}2WU!Y=%`)4KDC(OKn}T{nk})i;PuiAK=Hb4l(ac%33|k-me4yHhW=@>jS{A6id?6!9(rssEx*&HFL1*lJ( zQER7NPMx4_*HU@^bn~Yb9{fWWNGwvr?#!(XA^*0DE>qxrovf%E->EO2Uy+!3ong~> zdFC4B!i6=tu2@)CpU;W70=c@_69<0_#{Z0D?VrG*^M5-NAIYJdn%K zHZxTMpgHn>I8qr^r9Y3+)ABJo1DKymB2?EJZVTbLU(*oC>!7>IC1vUmm}m(UY5>)R z!2O@{>_bz!nuD!m4F=JGyYNVu@6m$e?txLQU;cIGLHRQiDdBX3c->0FEkCjemYplp zOn^i1zp+)b`CoVm^iI7#`n%>wF1rTFoOSU4F9AAsn{)To{xaqtliLy6xbRtUu6`JP ze^1c6bokrg_n%sQ_OXfLDUG^M{lh)$x#*|JS6%G_LdwKBmCS^Hy@NEeKJQt=&QROm zw8Ls>Iy{l@@vgPaN9k#j7t>?|q~qcg30@)Qe*16agq{-D9*68jz#2z5Nj8EL_$8qryY{M%OFKYjVu;7UYj<+<$xFVFf?K(~4Yhir!UwnT8K)eD{UttQ<@ce6D^l(t3G+Kem@SPTgmIqE+zddWy5W2 zSo6@?zq0+g*jB72?tS_NQJ1|emzJ;#E_?Tve;17YwxY^3xFzQ_lK|3M$NfV}J>tCp3# z7xxZp1U26yx~K)3E#%ONO`c7%(9e~GGt#pe7=+IpGyrOYR~Z*B@o& zOHz+RqcYz{PdF87IAlS7^oUX1b50phl}w*&3B?d!oqL(#RKI`!&8{rdx_=UOeD2rI zncw~tR$*WM>$JgV*wUXZ2ZoUV6B7k&g21?sSFSO+EBnx_hODAYU@BNF*FW^S zo{8eBAC;;%4;hDt18RUC@|?$opE!`H!t2Rkow80jW{u_qY(sb}3;bA=%H;9Va^-(b zEYBbl*!jYde)mM-WRv~eYBtlF(Z6gWfKz`g~NvUg5Wd3cGB7|%TyD>f7GJ4!N zGePOq-0Q0!8r)9$^`F^(MD_7~k@)6%_PuwF9%0LugQDPbw`DT^I<2@<{{lzSzF8rC z-gT_w+``(vFK-dW*(s6 zlLb91f5*yyxm_QB=KaUPf4%&!nVuKl{&x8fP;*%Kn7P(-6w+*83cg<9PU27 zLRATXHloq02#~wmq*5L_*!h1XorgbLkNdZihzKGLf>1P81VLieY8$aWc4KKgt9h4Xs9?sLvPu1irG<``m{G|?~s<%2M~ zT9E+6ZvwDT7AaY;Qm4vsm&29{hKLwx%t7LAP3zpL3F@8wRVg;ei7<_yfQb24^mCcZ zg~<|JMVgWX%UI*F+P1Atvw<9r2NrzNPXyTStOOTW48tE{FJkh9E>yKTTi>alPf7QE z&}baJ+M`ll+mDFtUwter>!3dJuKpQmqt??kJy-hUqUlP6l@u9g>K8W*cFq4lSrU2O4@xb>;4?;hB zf8d#>mo zd`|cmxwjlU1uyj*_dXeZA?zLj4RvteO%$J6`a6C;+>t^PEw)wdI*6(JDHTK#9kYPs zex9j&mr_Ah>L|CYIGe8D=aNw`FB@W=`88q8{{xr#(sOm;e2wHz0VNJDJDb>78PNiD zn`gc}#I)Thd-7{SURU$=Z|>fsS%dkUpg3%1>(pkXxG)ewL0b)@p5&*!WlsTNGdUyi zMn(ZOc>gHVd5CY-Mr9SYN$i~W+Ayx;q7B6clBtWgb?7)7*iBa zHDT=bHVf$^{D!NvjD}oM4qOU={JC@Jp-eRyQU#DYqlqyTtND>AAiL^al;hqaL)q{y zrDuW@V~;mEPE*v+YsgZDsGwAN0b4JDbv+URgHji8HQI&~kTp}nAjF0SD#z}1t<5iu zT}Eu=skvysOAf&R%|%NY3i?{x*po3Yb2;8KhE&A|2ios{N!7n=O_r&9UYUCFOLS$} zpnB|IxA_J#-x6ImAuXaYce(7|r<^~J?ULr37oPwk*&-jGM-?yf!3nJLBz>Wat-XRX+_hIp$=CGhb`Ra;3_FAsKK|#fjMDG}=IUehd zXP@LxUiGQyJz$Os4g@?wJAU^P8Q~{U!;eDGJoy=H zC6*mPbIU;a4xtDTW4jOM-WFs+cz$FY4}-BEfM?8_ih9|>=uWQou%3^?>OANuC`m?5 zg_lPVavOVe$U_8AaN{8`vxT?b@znA{HUC{MW#e^O4DQ-9eD5eU&H^=1N$d+tK-B(= z++SdAZMmM!WrM*{jcVXaHJu<+NUd~yQU$`5sdOq%Sg}J*>yAj%l26P)LYAl83yV_l z-WNcKX5vtah(HGQ1^0Nxnhs@}Wd-KS&b$C}h2x;ILaDY~}0*g5Xc9Qve(^P$Ny*bV?~AfaQ))%mHQ!=wJ$%?>zMoL9;=8iwAz&v zjA#d~abR*_Jc@YpC?pzwlEozX0ogMzp7_`XhmFb*Ke*+9(43iRlO}frnemg?Gzey) zP$dF;n(pU~mdY61MoOWWvOZ`9VsZZ%F^pSrjF_Ot1+*~eGXzm4etWNt#TiOh%z-k~ zURf<#+r#7FqQjva+A@8WaHyPH8=58qo>s7K7A5r-aKwS}tGF64Rhw$99u$f5`HQ+o zwZQT56M9W@>IG2UfUHH~D|)W8(4s3on|$QeimWkm)=!x=*o&kZVpLYl`kuYnm5pu5 z^|I=Tkv;o*&zJuHB$V*^Tc*Y?H9%im_X5`$q@li7@9`8VC-8U+l1+<8Guy7lmmP|7SGn!C|3vG#eGeoiMMejq3P8z^$)vp-`m#Ovh=af7FE2Z)qn1Tj7Tz%;?pFLtHn6>lZip7 zq0Iw<$vz(k4v>}f(G(zbWVLCXn1;DD%^yEvFx?Y%ZXB$^B_) z&lW^nynHzS^qiEs0TQf&f^N=$T6hML4seY27`G@OPF+qtZ;=C%aq;5WQMJO%o=mr6 z0Tlw7HN~=ydFG4<(A5e%NfGm%ZNJXvtv1Ix-YNhN-Ad z;2WF$TVH;n9#;k4%$MEU8g*e~bp4MTZTs<0i0sMKr+p^$-7ibM5Jh5g1tu|~$$}T)A|61nO?%*WstIH>jBTN8GQ^=r# z_~cTJ^6z+*ZBq1{tRup9vV`lN#@f_4kvgmkoW_zlOSNmX`^Dg{Y)Wt4D`$XqlPyBQ zdz2k6dkvh#f8t2UJYeM4zuN1OiX+qIc16vh9au(kRBljcHRNC9K2R&&W=^a4XD$eK z2O3YE)GeMoQQ*KRn zbR@+ubPN(Q@wK)cdzI<>`U5@;JOsi^ws1)i^1aQ?Yyd2hgP%6H_~iw9GcPvfi|uGWjcJ|UEP-S@=M6d1rw zn})a#iRL_ji=kGB_0f2WQU69cC_QJspX>mN8*m|*@4 z)-m}~$d*zT;aNh-u3Dj~LQ$%KhNy8%!7u^DZ6$iM36Zk zIr6MKQmMX*_{a-)`Wv-@G0!l{XQ+EAfAiz7&k9zizTfk1k>B|p2$6Qfb#{H)2x(T3 zP5VYw`Op*7`XXPt;f%D}bQy=Nfna=T!W8OP7JsshG<2`v?6B|=L0Qs0639g{DTN*p z41FO?7?OkV9oJVjz}qnPxQau8(||Y|%ph_zyt78ZRB$+mYhCH>PsIA?C2tWzmiZm- zEqr*jbPbWrun^1S7gKDy+K;w%Y+9>_e#d;L;7ohX%JrQ)VQ6o5ynu3LiZmV-&Ye^~ z$^`^8RLHT_xTIqxb6`x2Sh|!0>UlG+%cmhHF)4*-EcIXHw&OPcH0w78XATxU+F6)v z(M}lke3)CMhc10mdFUSKLUb$JbtaMoBHudeD;(0BHM;Jjg0H{%cuTYpgDI}KP~TQ! zdxcM+bnHYjaC~ccNLxtSeLcmbb4p=g(?UL6H08_i$NZ#$kDeW;E3`aoEswR_xC<{b z>wf5FEie=6vSNJsVeU`+hfTlTg6}*j@_+18T?%ME+jdve{c}IL8~|nDrSP^DgB$3+ zW{Sb^NohKD8wDx=Yx$#DxI=$XcygjaWD-hN7eX+AB^RWNgQUa2V)y{JFlH%R;U@<1 zjD>X!q=GUl6;g00QC>^voYhDwL3XkM8L!Sg1_R5>n-mWp2}WWA7zj2|78jLQXJ567 zAVUcVqM7D7&zy8{DxMU_h9RWLAiQ}54>TRhb)=T88sPVRlHI06UVrN+Q&8AS|_X^>`#Rj3OoI|P8LG>L(&j@|@Ex^}{rVzkNWNic zyf?Wskm(5IwE_at2!eTi!|Fn?-7g$!(^C)00<93o8ZSK(wg_Lf69D|3ue7Z-2k zjes)EBgK^c#bP$W3-n_8@#M>JTmL~olBgX={7iRbf;b3DYG#xAfHjVTy-BXXcwAm(!V(kGiUJU!M9=Y#!Fl zt#~uJwiGuyc$k*beJUdslOYrr`5ND4bi4h*75^OA<}&{eedg1Umb+nlPgSMd-_^l? zYC7(GQvbZ)-+W#uyk^FI`jL|O`IAbncL;S$B}(N6DO)V7F!oG|$nffYA7P(;A&(bd z;F!|>#K4ugedBM5JO`R5Zoz&0G6fA*9OXYj0o*CZGxh4RSsY2OP=dD(K1Knbq>TT3 z%yAex3O?yz<@&Ti{fVQ-=p5Wn zmNEeZ#-QQFWy97wO|A%h)@q@20Iik@2|UtK$`i?PpdboQ{7C@VbW)AXU)E}Y6@qm0 zMr-J((WDbIIjtI6mJnRFpQHR&4afa%QI6I;;R?rpfK+Fr=ek5i3eg!xD$)^? zP%wUm#jl~Bh5iTQsK!eQ_X>oU*#dxri1}CqmN@GrKqJK+6VlI}kchzh3CdXZgt#bkIv;QE|;F0RA!Nq&o#T)_Zy1{(dGLAbMyJYBKKIxi9km)()p+SI(if*wZ|`LcSv1(*HLggH zmf6bX@x5*Iz`S-(&~726GL&gSldI)ZJMJp%RZeiwVzDhql_C$kqzuX z*a={h8D)&-AX5iVk-{H{_Xm{o)LLl(@wR3Ilo@>Akw>{?AkWNw0JIttphaW@`IWG> zfuhwxY&#EjCP>t}1H?`WG-wi+_cM*G3XS8ZWMV1if@TP_emqbbkRG4Y8ys9tP+Lgi z;ZH)s#51L6v;vL-AliElV`jk1u4AdP-dGBUPuhT6qNuGWhPraopiUjOuF^p%#k6juA=B;r zP?mbC;ZyDh=HZnSo?ODtCZS$i?+?MjsAh>mq*BkFll8dA?U%pqcrC9yQFYCG{iDr0 z@po7R--fEORG@T15%RAS8ui`Yd({_!cirqKw(`X@;2InfFdifPlKxr0Mr{Mc#cYGZl`g!YQZSU9aSPsZ*Hiy_^K~`l9+7-U>}4r*GFl# z;Gqt6#YuY(0I?q?nB(&_y^urIGl9tTb`aoKw?YiBBH@p%CZv5i$#K+YA5-|I2NQ7N zxd?ZFZ9vq+{tXB81LGzmbkpGUzsT)#Z0?Qd!~H)pnvZOQQ)=24QQywW0ps$Ez8yIW z+CF^MUQgI86|IW22y0vZ3WXgDoXD0AhsLNLyz{rpnc(c(qvtex**%m4zoBWHel^N8 zG?qSy^K2J+xoq@czisW=Z6)oW?l^4O{P7kYZ0*YRdv69Snw%!KFS-^qKHu`a^VHAr z=c_Y~L#kXnIEl1!68FD#&0t$LZu&0AaXG-KAP*-4XU56Pl{BmgL?Iz?on$b@=o1$d z20yM1CAx~cw^U2@wr2IwTg>HIiu`4n@z}M}H%C3?7>Oq5BqF6Lau^DAf7hb!C4c}} zpv++LsD5ba988)9G54&Mh4MKN_ilV5$eUZ0nSqGD=dH112x!$IiGEh7KpR)M8 z+dA8%p#Y~#udILWsMgQkAN?>hO2@oxAtRgkg*Z-cd4|g*dx>QM0wJX@UROE$vT9&{ zcymg>2{$@XkfG&3Aaq?8MaiNzfvS@l3nvRYhX&CDZfX0$gGZ1;x>^~SYp4pzfAUSA zwUwBe=J!=tDz52sNd213u>^gv1T;ADz>Qj^X_eYJsf z(7yOs-iIB5I3p&_kKkDXLCL5WBEjj}sP_MES}w+?;znml3e?{CjKe5m0QTL(zqR{# z&G`ujW%1Xpa~hUWBF+Kke05h#U-}!jk%P`iM`3w;7n~m^Bbv{-oh(v~SljcG%}qM3 zwAa}2Wiy<|jjt>J@2xDCI@7c87T3=Wx&4_d- zlUq>Nvx6M~+26~S<+=78b`8NF0P_ak+g!BmO=W-dPFPfG^2_`UC~Lzh2pXWw{Bd5> z{gSe!u|{om-V_8kr?rP+Fy#{XUvAcvfOyL5D&2*PifcNEGlxL)Taeu|R! z5%b_+4$w3v>T+3|Vd}pf{zYySxKr@Ugpd4@A^1pPEx+YqY@AJ_``M!5Z?;MHa)#w3 z5PB;&4sE`I$hl6HozCI29l@}sXh|zcgV{Hop~I&Bw{Q|nZe#Lqu?(AP`3#l`CfRS0-XG3T zl~L7z8Gg%3+|Es4=Eucl8Ir`lXsLdB>-gsv=~}JSvS@H8tNy2$MByzA?z5NKMU}JS zxZTHJUmi^=WM&$;B=*8MGs?4-Kvc^uEeK3y+4`toz?JA0#oBd@In3F*`6{5WOrdeh zu%0s?zauq8!ax}z5pzp-6UL@_*6)2^-t?$^V&Y%i@U-x54X=@(w#_V5#`h!5%;^cw zaOM?u2YU$A`CeeO>@4&hQgK8BdwNx+K#HI!WQW%D32^>m^yV9}^~q~7nXezjVw5LS zM45}O8El@z+KRmb%x$x~=lV1i|FA9gcRocn>tXa)h1}k3T6%E@*W=V@-1JNHa_h<6K{%WqmHI+Q z#!JE`&FN>993f+DyqM$Cb z7nd}o$N?J73TyRFfDuH33)ynhb;Pj=cwB}x|B)6wQqpH$K~l3 zs08GuhXjT~PI=vZ(e7kw&DY1gL*M*4?Iu>KHov5TLce!DQLFG$DN>3VTAgfJzB2g- zUKw2YgI`w5oSB`eKYH8Y!T(Jk7J+LEZ>$>hR~Vz+*uMJi9|=mR0$cz6;#~(W>TFy z)8_MA<+|Kd0U!DekF&YZ@;Q$yK}D;lc)b9R}mszjDFj`OI|nN^=I3tm#NuJt{4vQgp4(i0$OaC|(t!2KPkYCC&)mRwr#R0pyf`QMm08MHj38ABmdEvM_EHRV7SdJ4awj@Ltx$p!K&_D7`K~-dgy3!_#gtFNgruDbU4O=3swT$P4e3z(4GHBl zRXD1Z@-^B~GQ*yeO(=u&CKvVJZA9zt@!u0q#_&3 zO%3n6AFaoS*m^a@`5hfsa+#K*>_B$zJJ|K7neW{)q7W#28wllN- z$H~_t4O17I)LpLM?SO{=xz3gsQ1((|hkR(S*}U?aJwCZPFaUo3cI6|7o#md4z+`p( z?^ZqJsmfnhWapx*9){Rix(}aRz1v;6qdI%}&Rur+0^Zlg+*eY+p9>7O74}Zsg{J2k zR23jFqarn+W8%i><}CkvrD%nAC*rkMwJ#MO0gvIb%iePx8k@Gp>{{1scHu=rlZLUu zUtI`~j-nDs-?WBi+W?{5X@DJ^kfr<0>A~CGJI}&=yV0J5Q!rX;KkA)ii2Tvu_zJT} z<=Bwu?4xHLU+*fGlQ*sxwjVY-&(FkQG9QZO{?hY^{3$r_EYLE9&STu{weAL}wIe7s zt!8TqH0){+c#pOI?#HY>PcjzFoVQ#_olwl3HzE{7T+d(M^mVIWIq!7JK?-h}ZP46( zuFkqsdvKY~&HNj%Jn#)8aqsbsA+F$Zdrt6_60qixvw2QL;NpMnn6q3YK`m>jCFqK0 zwF*GLCjiI;@a{)@lX^qMjet^d2`F*zRSt&H#_(xbA2};VO6G}4ab4V$Ntj`pITGT{~(O9QKI*|jA=)cn>c=ZKJ&<%NiWD=Qe#GHfhUKWZyO}YTU~@j`Q9kCs})zZz)Gk+nmXTd zc6t3(jAP!M(Obu?_nV3dioa*XD( ziQ~_SrPj|&D*B(*d~Dv0QFe9RoW#N+RRZ;0huyA{(zNd$AgAQbmX)^;qtZ@nu&)(c zfs)=B6QF_ztE!Nenzy8CPp#7@!Ak;{lT*1BIWO4h7}TeLq(H8W?8SjaKHJ}@w-#%k zr(KFSzdzn;+E72n>50N5ch(g5Yx!Mrr3ZjLkg_>fWp#3=64LQLOD!@;$TRu9-Kmwq z`Twr<>AmYLy-W-D% z1d`kjoZ_dT2P>bM@65QS>ar(3asv&;@cw$ra9|F}$he}=kkvAglnDrGq9{49(=q+0 zDh&UoT7ReP(HOg5d(Ba@ym(Ni?|Y^B$%&Fi_a<%Flt(f6z!XbLvb2P86d6|PwVW%q zA?TC*udj>46rGI?!86FZe?{&Mb%$_tY_s-pvhCmH!)bhVg6LLs3vuO9bvkx@j#b1F z!LiX?f3aP#U#=4E|HvHs{Gf~MBpS}*-^kRCfk#9v@^3^1bJ;pE z^<~www%jXz*4@p4TQ4$d8rFTkho>1X_Szh=*U$ zWoH|jhpgwdCuc|{mEO26_x8JTF1Kq|)+P$*=EEZi_$z_2>z8PJF)fS!4`$TDI@E?R z5;me;!b*B#=$&oSunL`FT&=<~&v%E4c`o;^(d7fDw|=X3701c>+0UC%wf9jO%<@{B z|L%=g%1p%GvMA>+-0jSsH8GN3Ojvp{Ntb$~LC(1?HCbaN?OqW<%L*n;R=iEw+z@Es zK6Pxj#lJa0Z2aBur>iN?MQqG|nx)mDB#NTFUS{blu7|t{^KbNNU%dGvxbs>`R}q${ zmBmWVOfCHWBQJ@Q*X}JA9C*Zf*FzzaKr9ABk~LaoUPhx1B$4QxT(vNf6Jn)-h9Dn+ z!uIT)K_uD@U?;aPAo}rQe~Si91%jas0!5ie42=n?YjL9^3_0g2=Q(=Pgyliz`=8db z(jED2Ca9J|)%+GyginrPOlQ{YHO|N{mQ?1g;>sD_9>%o-yD29}zfaq4LPI%NKIYRz zp$J5n_}KP!rIO~3;(w9b;n?)w`S0Dr3AZ$u$F1`SNn-E- zfL8IRxj0wA&7%N{#SleitOjJao(mBRdr>9a9dUl+ahKXiU=#kxCMm{Sc3%2&m{0F zhzihoq2f_F(&nT^slBU+A<6k9Pycx@@31=XJ3awLv4v=ImFo+VJXv09xhztv?D)9D zkV%Q7(%6ayrfQDfouKP)B0u4@EFP?0lLMa*8#e!0JC*z~+*b%>;>G*je0Gk>G#N&` z7mSSMl_r-ODTG~+NtTyN)b(Q(?nD@kowDrfsZl>WcjKM6U5jRKQdDD6>I!d_>}Nk^ zXjxCp2ezKC|LLdV&n_QFM&2J_e6e`(qpR@8g^N|^*N;7fmpDJq`k&pW2ZOB{mghz( zq}Ea^Jd3a~2Pa*ia~KgJAb=HAEh!L0nVypbs$)K#<3@l|p#^4aZW9b2*y?bdF0Aj( z?{M)ZYFNL?EA6JXsO!|2c-Xvs^Q1SnOS`BvLNH1|NYlDs*5Y#|xr-cfONSKDi%L7j)y+l115# z+#8d3U95T=46Qd`m{$FZ+$Z3U&;qex>%(O71FX}d(}WG*%yWyurs)N0;-l>YifuEN zg^+Tx#>s_HnWM6y=k)w-vo9QTNxJN zgnzi8GQm&hsU*)N@CDu!m{xmvvp>B1@K7(Yz0_n;%JAE-C$f*zj^9#7B@wnj6e7Sb zO^#}4H5#TAs?5Z)R9JQgECeqH8g^@4zz~7T-)5E8GL?^Dk&5PlKy;>ouSBwdCfxl9 zT6kU<0sWr29!kxT%c|~$k8Umpe5*djn z$4t|OYn1)^GXgN-{7s!)hapLD4*rASaw%}Acf@?Ed<4VxK;fWftxV--wbo`@46%VR*}V$cgR%KO|)xE%#Im1k@NX<>NVS*mfa-p@oa^U3z?;G zI=V7Fa-^-vJFZ6VU*tYhDi>ZGDj!w3r`@|k^`}=~b>Z#slB5P`eOb_4`~Jr{9Gvy1m$g^WD`rweYtxR?_*&1j{il=WR~}TE@sY z_IjS8kMan75hbd)95t8W1o5hCY>}mSg7_UC9&U@jNvE=k{*cS0gkCf>46fJO7TEAc z+}yD1azrk!rWrO#YqnvhzKL3krBaWRz9hK1zIpJqrtS1nd6tz=nj&V@S^XY|nM7cU zrd;49ndr==drEBw{gurHzi|`6pzBxG;zXnTob86$l?m zt_W)y)hH#;)bx|`TA+C?i)0Fuf|&h_C)(Mzp#sM1#wh^v;q$SEZ*$9u<|z#O%Eb{G z#u%?95FgT12h5T$*BAma&rr>d`}B$oAEFw~xa==VPsKl%urQ&;{jP)CzEYk(`_&9? zzEm>c^5}ZdjCA||0SymTXGoSDTq?|y|j*vY2nZs#=X0$X#Y11l;FRxeqW6 zz(#Qj@IqinMJRs~waP}2g%T&{0OyGbt}uWhN2QMxzrP{WoZ^Gg-EE4qb*eZ8;^7j~ z+E;7gw56<$17=|2*+Y~*6Tn?H14U@&=0t66Njz6TfN!TPDHhC@10Mm|pW(vS)lTqik%u_p zruppy*9BB$zVOT6xMty+LF(gnTxMTXfXQy|w(L^9FWsf2-&Rg)J-BpNa4PKrm-{N) zByV;(#zcQ2`MP|~m2sJvDktaYDo%^>_8)&=!?X2lhAHEVJA7G!nmLHYm8wKYBY*h4 zK;Dxcp;vD5XnaeRv^1*t-i`kLz2{T%$1~Z{zg{Pto!3bdO4!pW==<&+wij>2{lW); z1;e!wa1oTNt`A;;8Xv$b8OQK$&!lmZ!EvuCzQbT0o~EHXa1af}Z}!&5hngV7AsQcm z&dgTxb&?~xqQU_7QOS|K_+QlcL@*v=MTw%<0c6k5u2t)~fa0toUg8Z5KCA_4Q>S{v zP~LJm$*JsQ4j&do7CQsB9X!(?rJA;Z-7seNv$7i(Fe$a*+_rke=2->Qf^EtbpNo4r z^oF{Opf{%fs@#vb9f=+NM*okrt_M50Q>Q+vA9vt5eB0CqGK>`j@8TI;(p_M=#F^QI z+iAmlhb^~If%YVw9k|$DL9^PDf5-zF#xECx@buZJyTT=!Wv*L}<;M^A#$D@iJXKdL z6CVAt%E`idgs%D1F<2(^3Hhz%+WVI+MQf6gNFHXvAQ+lVsj8M??vw1|-A#`jpv=Mgw%r z@#AWrtO_{rSbhOT0!qeCcjI<3kp`tz(4 z5BSUA=Ok+@7E zptltF!ckiQn2pAP!C)FROz5N(Bn4Uw;NTQ7!(pR%99w-s8f~P0!9iDDs-Y^IxkVr+ zPc9}IXwah;3wdR(Jpqhz_}X>}8s@U-Aiq1p!$|?$I6vq{C9v@-YqGXQEAbwQF`9CQ zAs77rU#!&&AN3pdJ}`P81^IWM>in5*Rx*CrU!g1OExGTvv|g{mcM+!66Bd8O=t%hD zoOrU?#JDz13sd`RekG#0;Ht3ytj>$u7aJ~z2&rUW^>?XeyE%JoI~Flr6w8_-6*8#p z@w|51UFV`(HhWEkUtHkSeJ4Jop?Sm5xVG_w?^eg$2SX%QY!0gT6c0Ff$`bfoZab)A*wie0MY@T={ zv3Zz}SYUiyHgpzIJZYL}#LHXx(qP!pL+Dbf>|uetk=yxu!4dEC6&_l9eF&BOZV^~> zcd?|pJGdjA!Q_8~NmrAXG77SY$m7vb2sL={pD%e&SLAl+sO}&I>#cU@i3^X(QCVmbGUhf$uI;6jylu@ zA>uhfC|~@n?OHjvEMZ#kh88a>-nf*?#Vy9k$(Qd2rKhJ(gC*p+@Q!x;;prT}ji{k) zNtlH8sH{PkPZ_(kb8sE6&PpUPbbx;L6ZIyT^xTl-7lh&dXXc-#HeZO8<#gZf@N zJ-Fl}Z$O&j@|E1Kl@#{QHJU_l>w<%B(96>@jk(zJoA#L`WQORA!Wji$ba`+Ht;Vu3 z-8Gl)w_e~s5%?`TRL`bqI92GC&w>~K1S(nG%jfi@Ythsfb4>QST zUN^vwz-d&_6`@;tuqBTY`~K9|ii+X6`-9a~LSqp6y%Hzh)!QbTQt(e=L`*CntK(Q=26r z8TQ#(f0T;QrFkr`6B>)*e52^W!@YZkzp=I_83bt?lh7 zZ4Z&zoL^VZI`afP^ZoMX=Jk~A|A2X`*O9F7M7p^jU!Bb9n_zO5g*qTFX$jyb9>cY( zQ;+mcV)f-VH2BpHAK|-{fnFka#guB>K6iZ@0%qC~kShm&N$?A<+Zf{t6#1*W5E}EtOwUOwi zoeVvDMqn!5F9s{Rkl~@MTdM~#uJlpJ&3)_Sy=7{!vT6V5T$A3Z;)M_q*;1Ug;QxKg zy^Slken)E9%9wo9jTJqbcX57yDDe62MxB@-@_)jZD{e1-J3VyL>hWTwrJL%6^2u9XLj>Lv(vv}AW*@^POo`b|83rY^oQ4WMbZQLW6-&3?#^_1X z%#)hS&3Ep(Xx;59Z5j@{pY-*;L-(gQHm9%Zn%AuK)Vj31S*+@Cf&lNkH?L;Y!=E zU*OL*ZG{3x+s1-XfY1lfa{3bACCB1r(eZk)>QuPmysegiGuwi;NmnPrVZ{J= z3ksk@W@aY#RsaEL1k*x9gr$K*(bS}yro88*a~KpS9&ScI7EeU=l9)qAY{7XA$IB2f zwO4SG1^Z(a%Fjl}JC568IKiVSm1f$f&D0EcS`9W}5kHQeWrD*x8qkY`ar0ZcuSbg9 zXnWG@nzJv4Y*#EZ6UDGfGucY7z33NhdR9dBH~fmSllS9qZE@vt9M@j0hb}_ipWF&b1Luw2J8$RRKU<6LERg2@8 zflEbtm=D&$Fb+|fc@Sb+#`d?3#U7=EwZ>dA>12~Av7?DNEZcS1aG1nu^)!gE*U`3E zeXaEFovCo^tUd;^D|X@a#rbKE=a;_1LyE6(=i|TRdLFDO@zmtrFuA5~R5DHAEK-PJ zuF2Q^)IBv4UYYXF_Q%Dp`xbLQc#h0qxnjzFR$qfGoSz48FMh*lJvhDc^5KO6PglaZ zuI=ytbN}(By5r-w#~)8Hgv}PQCFSDc>5>x!(zIDnpjs)DRHb=>!l9rm17d}?c{*@| zCTUItR`0=)5U61ChCUb2s!9JQMuet9~e4y#6i3L@ZAavFmMNJOTr0o_`dW};v)h%TRI$n7U@ zZJV+UKm<=n6O{^7w10w$_-w-7WSaf1|EfQ>Z1I*wz0hknakczF>THU7r~Ipbky{6r z+Rd3NuYCj`cK_dorb5s?^AK@u6?~xHKVi^K#8}=i5pgq*AQC?6Bj3yGeCB?`5a=UpME7}~3 zUjU*{zFaOzIf_nS(EYS1o)4ezD?IK=Iwxio%xKf026!tU9%H zw4wP0)}#}7G-6e+kKV5MBmOWolKfI)fA3f14_~#dtrjNvWVWu#V$fgLN5br#`ddH(ccvIlQ0Lu6oFRuKvarqwwPP&|+lj)F2_LkOZ3 zkEk345P*iDGz219{vp>b3IbNV-&p0&_vix9z3iDJVB;$=&Z|v?95ik zk*&^JjC$_dKIk`Zkab4p>G(0qqwg{9UrYyTUeL0-Mf=!d5^U??{XX8ou8*2X{EWSh?xq@G>Md@92#@w63$oiJDsl3CU%yH>`sS`nQfX>gPF6hoA2_BM_u} zKhemzVZ_}_Eq>Vl)`j_JmvOa}=N{q_qKw;sBN{NON>ofQo9c^G&x|A@wWQSriFld0 zVzViE%86nnOBYcYF+l`}aEx{h3!%my)g zjzx7owF0OZi>ys5S_`4O^||eo0Lh3i;Qx79t1X1cOdjpFYw3;tU*rIleMjIj|6I?~ zwjj+%-3MW<`TdMheP(DvxB=mB&-l+wH)M@R%4b)lR;}sSN#jXJ&Ab=SH!tg^ft!C0 z>y-;^4J3=Zip;zlDL7*!U&x$Ii}F`VROs;+AnpshgqasIddlGy+LziP*tMkL+cq!$ zI%U$d7ra`Y0w;%kd>m}TC7$L=Yv_qvp0aKSSlzgB`p=|VydPkukrp?aEk^~#h081% z$o7>^Z{vxpy*_{l)YbsV$F49Q5Wf`Hi(W$b%FL}Lt0PmfjNd6PqWR<~`8a|N`g1ot7$_~UP@V5~mzy8AN=B?E zZ)UtbFaZP5c>F>0njwuB@10aX2SJUbn13ztGWQ88>$26e^lq}!oek|#{q;=GIN-Bz zyM5`Q{}}U?u_Bs%!c9*i`mf;WA|Jt&p(r}l&;8caWY z_$a(GbnEJ!Z=c|6|9ktedWenYB{3e^Xek&CZL3K-JAXjvtMh)o^;A9H3fS9OCM8Q`e44++iI>jd))Hm+W^o-o6$ocQ z9j$|AF&WG3G{hTma{oo(@$9LtIZ1$PP#Vfx9pu+FX69y#@OhJuB>un6-L9d{#m&LS z6p@Z)KZnKI}NcsJ@)W5hvzO*wxj!YWNNRW3 zq^hsCO*232Ub*tm##vYQFWh>2M%=yUn#HGMj_rTgUS6!1c=mC-(fP=C|Nd=%t@AZs zwBqk7;5s>>!<)n>#{?x$dFL#3@Uqk?Wf><1p8;&Ze(jZ z!ne%mt3%Mwg#t4g6-+`dI<^WONnYT#I9Shk(q~_BgM&;eoAuNUnhcYgMWrG=(yXkM z8REST2}HbDkl8ki!I6_`LZhG1#v{yJ)4#aMsQ4s2a@{S&ksr!zs+mp8Tgq8V}y8Bx38~=mBTip`N!0(rf1$2MUI{tK%m1jw?JxIc@ z>A~_xvC~#MUk=y-N^;K`te@!{MBZ&+K6CK#RxMMREvDeGk%5WfOGE^RK`ZCR%Zz-^GuO_# zCj9*N+C=rf)SNS(Pb_B^Il5fs%61O8$`j%B#B!Sc*0s6MKq?A;#(WQ}`CSmaBHJu( zb=)hVO1|p$^Yin#wp#uA5V!Y=YEk7oMZ4M^I$GCnH+_AZXsA8!(fP&s`f4dy++dPM!&9q~2W&WLaQR`W}5m5-yZtFfM;fx)U#K-CZc E08@`8oB#j- literal 0 HcmV?d00001 -- 2.39.5 From 41c640ca106f6ea9b619e9f5f8c1cfb999df05fe Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 7 Apr 2020 17:12:09 -0400 Subject: [PATCH 005/189] Added statping API key variables --- bot_config.conf.example | 2 +- r0b3bot.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bot_config.conf.example b/bot_config.conf.example index 7d85f35..0619bc2 100644 --- a/bot_config.conf.example +++ b/bot_config.conf.example @@ -13,4 +13,4 @@ hass_url = hass_token = hass_light = octoprint_ip_address = - +statping_api_key = \ No newline at end of file diff --git a/r0b3bot.py b/r0b3bot.py index 4fdcb65..169546c 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -45,8 +45,8 @@ hassHEADERS = { } OCTOPRINT_IP_ADDRESS = config.get('bot-config', 'octoprint_ip_address') - DISCORD_AUTH_TOKEN = config.get('bot-config', 'discord_auth_token') +STATPING_API_KEY = config.get('bot-config', 'statping_api_key') # Printing configuration details to console print(f"HomeAssistant URL: {hassURL}") -- 2.39.5 From 0a7eec666deb127d8d155d490a3dc0492db7c171 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 7 Apr 2020 17:17:12 -0400 Subject: [PATCH 006/189] added comment for statping api key --- .DS_Store | Bin 0 -> 8196 bytes bot_config.conf.example | 1 + 2 files changed, 1 insertion(+) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3fc3828932f33027cad9ca948e0d67b5c7391938 GIT binary patch literal 8196 zcmeHMU2GIp6h7a!!2DR5Vu1nywiGNvg)aYp#ic(;EtST$wEW1j+ZpKSbf)agZYi~< zG58ma8Z|K*f1<`GF!9A0B|aL#s1HhlMvV{p;-k@M;*;mjoh`D^#Q2~R<|g-^d(XLN z=AQ3uPMBJ84GRT7b=k|o%m$Rs~E>W}0cFL%}KSP>%- zBM>7HBM>7HBk+GffX{4Elxfa=X^q<$ff#`s5&`jkNOBc29mz>4!&e74VG6)fqyS;z zKIZ|UPco9}NKQ%_y7Dz;_JGJ0QHlZS&i163&N3azNhzf}LAn#7J0r?a5Z;~rlHqhh zTFSVM5r`4E8UgY6%p{*YDv(>2zhB6WIJO@&HC;lYqH@N}S&E|QN|kbN&yY9T6J&#e z-;&KA5~J>HFqDh>y`JYx^|QJCwl$hDYFa%v$l9)z51nn(;wgvwZP)ZhTfBm6`r&nY zq(N0xMa>wsl>4so7PWEsLK2mspgKO!(*q$ADDRXMHv^O zcLU8Xi}R)OARWKhDnC*rUML0mRVheS({Jjyt5eGubBet7eItSGx&D4D@3YJpvwe=Y zW6*QE^Omq@jOxLxGgxr4fwjwVdhAn{-#_R%g<;np2&|KV&>Zx=e9#&y2W<8gx{P5I zeCr;I9qppk#_qlWRXI~NZ%KVaV`|g(bo<4dXB*X;Rx`K1X!~}~u?}SYLCZC5_juo^ zZ3aUJ880`mkJ(mURjU*2y>52cx;VdfLAAa}UtIE%b1(ZUM!hmn$k`_fb}%OIq1P=_ z731B*CNHDQGsP9n(4y;gw<^jZp>NGw+)A~kuUgFx*8fqm zsHle7=VWu16REatV^wE=QNkH1ciy3>)o2_T^oEBy9$%{U);2{k&L0u?-kbGrsL0?*?Wyo%TGI^Mzi_yFhd5kAM4_*O13QKD>@9G6;r z$Gt0_OQvk}T`h6snv`wdedm8g*{`bvPv_iHGk4z7<+rU_zooflYAefj@2^A(xg*ID zlBPt8a1XC!BJcUaMcQJ$kGW-?yv$_D>=Mt7S%O81V93IxzDzd+edKV3-k=)^X1E-# z(i=6Sg88e4lhkAo1D(vl zKJ;S%2XP1{j^Q|L+!r#ih?5w@LpY6xnTL<#Sv(hV@eQ0QV_rvzb5i1LIrEA=dDrpW zrt+v zh hass_url = -- 2.39.5 From 1c7c7399426813443c55103f6c490ea74f96f10a Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 7 Apr 2020 21:01:19 -0400 Subject: [PATCH 007/189] added statping_server as a config variable --- bot_config.conf.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot_config.conf.example b/bot_config.conf.example index 30482d5..5f767a1 100644 --- a/bot_config.conf.example +++ b/bot_config.conf.example @@ -7,6 +7,7 @@ # hass_token - Long Lived Access Token used to authenticate with the REST API for your Home assistant instance # hass_light - Entity name of the light you want to control # octoprint_ip_address - IP Address of you OctoPrint (or OctoPi) host. Used to get 3D printer stats. +# statping_server - Server hostname of the StatPing instance we will be querying w/ the REST API # statping_api_key - API Key for Statping to query for service status # discord_auth_token = @@ -14,4 +15,5 @@ hass_url = hass_token = hass_light = octoprint_ip_address = +statping_server = statping_api_key = \ No newline at end of file -- 2.39.5 From 4471e5930d4bd26a1d9ea803419b8c943cf9100e Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 21:27:41 -0400 Subject: [PATCH 008/189] Change server to url --- bot_config.conf.example | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bot_config.conf.example b/bot_config.conf.example index 5f767a1..6b64c88 100644 --- a/bot_config.conf.example +++ b/bot_config.conf.example @@ -7,7 +7,7 @@ # hass_token - Long Lived Access Token used to authenticate with the REST API for your Home assistant instance # hass_light - Entity name of the light you want to control # octoprint_ip_address - IP Address of you OctoPrint (or OctoPi) host. Used to get 3D printer stats. -# statping_server - Server hostname of the StatPing instance we will be querying w/ the REST API +# statping_url - Server hostname of the StatPing instance we will be querying w/ the REST API # statping_api_key - API Key for Statping to query for service status # discord_auth_token = @@ -15,5 +15,5 @@ hass_url = hass_token = hass_light = octoprint_ip_address = -statping_server = +statping_url = statping_api_key = \ No newline at end of file -- 2.39.5 From fdbe058c2aff686b59b26a344ea9cfd3ac0f3c42 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:00:04 -0400 Subject: [PATCH 009/189] Adding ability to query statping for service status --- r0b3bot.py | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 169546c..ac13872 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -20,7 +20,7 @@ import asyncio bot = commands.Bot(command_prefix='$', description='A derpy derp of a bot.') #Record the time the bot started -start_time = time.time() +start_time = time.time() config = configparser.RawConfigParser() configFilePath = r'bot_config.conf' @@ -46,13 +46,21 @@ hassHEADERS = { OCTOPRINT_IP_ADDRESS = config.get('bot-config', 'octoprint_ip_address') DISCORD_AUTH_TOKEN = config.get('bot-config', 'discord_auth_token') +STATPING_URL = config.get('bot-config', 'statping_server') STATPING_API_KEY = config.get('bot-config', 'statping_api_key') +statpingURL = STATPING_URL + "/api/services" +statpingHEADERS = { + 'Authorization': f"Bearer {STATPING_API_KEY}" +} # Printing configuration details to console print(f"HomeAssistant URL: {hassURL}") print(f"HomeAssistant URL HEADERS: {hassHEADERS}") print(f"HomeAssistant Light: {HASS_LIGHT}") print(f"OctoPrint IP Address: {OCTOPRINT_IP_ADDRESS}") +print(f"StatPing Server: {STATPING_SERVER}") +print(f"StatPing API Key: {STATPING_API_KEY}") +print(f"StatPing URL Headers: {statpingHEADERS}") # On Ready @bot.event @@ -541,6 +549,29 @@ async def info(ctx): bot.remove_command('help') +@bot.command() +async def spalert(ctx, service = "NONE") +#async def spalert(ctx, cmd = "NONE", arg = "NONE"): + + # if cmd != "NONE": + # if cmd == "add": + # spalert += + if cmd != "NONE": + get_stp_status(ctx, service.lower()) + + +async def get_stp_status(ctx, service): + + spservice_array = requests.get(statpingURL, headers=statpingHEADERS) + + for spservice in spservice_array: + if spservice['name'].lower() == service and spservice['online']: + await ctx.send(f"{spservice['name']} is Online") + else if not spservice['online'] and spservice['name'].lower() == service: + await ctx.send(f"{spservice['name']"} is Offline") + else: + await ctx.send("There was an error") + @bot.command() async def help(ctx): -- 2.39.5 From 993adfc1965627f668c58c7d56e91d79fb85882c Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:03:17 -0400 Subject: [PATCH 010/189] fixed typo --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index ac13872..165fd2b 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -550,7 +550,7 @@ async def info(ctx): bot.remove_command('help') @bot.command() -async def spalert(ctx, service = "NONE") +async def spalert(ctx, service = "NONE"): #async def spalert(ctx, cmd = "NONE", arg = "NONE"): # if cmd != "NONE": @@ -571,7 +571,7 @@ async def get_stp_status(ctx, service): await ctx.send(f"{spservice['name']"} is Offline") else: await ctx.send("There was an error") - + @bot.command() async def help(ctx): -- 2.39.5 From 66ff3375ff0c6536446fdd73b7aad34a4f0876b8 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:04:47 -0400 Subject: [PATCH 011/189] fixed unexpected indent --- r0b3bot.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 165fd2b..33e5ecf 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -564,13 +564,13 @@ async def get_stp_status(ctx, service): spservice_array = requests.get(statpingURL, headers=statpingHEADERS) - for spservice in spservice_array: - if spservice['name'].lower() == service and spservice['online']: - await ctx.send(f"{spservice['name']} is Online") - else if not spservice['online'] and spservice['name'].lower() == service: - await ctx.send(f"{spservice['name']"} is Offline") - else: - await ctx.send("There was an error") + for spservice in spservice_array: + if spservice['name'].lower() == service and spservice['online']: + await ctx.send(f"{spservice['name']} is Online") + else if not spservice['online'] and spservice['name'].lower() == service: + await ctx.send(f"{spservice['name']"} is Offline") + else: + await ctx.send("There was an error") @bot.command() -- 2.39.5 From 89235209e141243dcd12173706b0cca3df233cc8 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:06:16 -0400 Subject: [PATCH 012/189] fixed yet another syntax error else if to elif --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 33e5ecf..ca3d3c8 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -567,7 +567,7 @@ async def get_stp_status(ctx, service): for spservice in spservice_array: if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") - else if not spservice['online'] and spservice['name'].lower() == service: + elif not spservice['online'] and spservice['name'].lower() == service: await ctx.send(f"{spservice['name']"} is Offline") else: await ctx.send("There was an error") -- 2.39.5 From 991e0f2429a92f80bb34538282d4576cbc2d0e2c Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:07:26 -0400 Subject: [PATCH 013/189] ugh this is shameful, another syntax issue --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index ca3d3c8..77c1797 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -568,7 +568,7 @@ async def get_stp_status(ctx, service): if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") elif not spservice['online'] and spservice['name'].lower() == service: - await ctx.send(f"{spservice['name']"} is Offline") + await ctx.send(f"{spservice['name']} is Offline") else: await ctx.send("There was an error") -- 2.39.5 From 56685916f06c3a653bb774089169bfdf2895df08 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:08:25 -0400 Subject: [PATCH 014/189] fixed typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 77c1797..4857b6a 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -46,7 +46,7 @@ hassHEADERS = { OCTOPRINT_IP_ADDRESS = config.get('bot-config', 'octoprint_ip_address') DISCORD_AUTH_TOKEN = config.get('bot-config', 'discord_auth_token') -STATPING_URL = config.get('bot-config', 'statping_server') +STATPING_URL = config.get('bot-config', 'statping_url') STATPING_API_KEY = config.get('bot-config', 'statping_api_key') statpingURL = STATPING_URL + "/api/services" statpingHEADERS = { -- 2.39.5 From 9f8864683d5c15c18fb2b5657ca8a0c491e89979 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:09:57 -0400 Subject: [PATCH 015/189] fixed incorrect variable call --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 4857b6a..305e1e5 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -58,7 +58,7 @@ print(f"HomeAssistant URL: {hassURL}") print(f"HomeAssistant URL HEADERS: {hassHEADERS}") print(f"HomeAssistant Light: {HASS_LIGHT}") print(f"OctoPrint IP Address: {OCTOPRINT_IP_ADDRESS}") -print(f"StatPing Server: {STATPING_SERVER}") +print(f"StatPing Server: {STATPING_URL}") print(f"StatPing API Key: {STATPING_API_KEY}") print(f"StatPing URL Headers: {statpingHEADERS}") -- 2.39.5 From cabf2d3ba86628ce5027ef37821d4689e8bf5941 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:13:09 -0400 Subject: [PATCH 016/189] added await to cmd call --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 305e1e5..1349ad7 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -557,7 +557,7 @@ async def spalert(ctx, service = "NONE"): # if cmd == "add": # spalert += if cmd != "NONE": - get_stp_status(ctx, service.lower()) + await get_stp_status(ctx, service.lower()) async def get_stp_status(ctx, service): -- 2.39.5 From 079770da7b8053abd58b9031483dc82372f5096d Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:15:07 -0400 Subject: [PATCH 017/189] corrected variable name --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 1349ad7..3381071 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -556,7 +556,7 @@ async def spalert(ctx, service = "NONE"): # if cmd != "NONE": # if cmd == "add": # spalert += - if cmd != "NONE": + if service != "NONE": await get_stp_status(ctx, service.lower()) -- 2.39.5 From 2a3fc39da6ffe89fa47bc842435b73f51260c704 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:17:35 -0400 Subject: [PATCH 018/189] loading as json --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 3381071..6786dce 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -563,7 +563,8 @@ async def spalert(ctx, service = "NONE"): async def get_stp_status(ctx, service): spservice_array = requests.get(statpingURL, headers=statpingHEADERS) - + spservice_array = json.loads(spservice_array) + for spservice in spservice_array: if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") -- 2.39.5 From bf8a3068700336d964ae609bf35fa2cc7eb14da3 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:20:22 -0400 Subject: [PATCH 019/189] making global? --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6786dce..80f7260 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -87,7 +87,7 @@ async def on_command_error(ctx, error): if isinstance(error, commands.CommandInvokeError): print(" - ERROR: encountered 'CommandInvokeError'") print(f" - Dumping error: {error}") - last_error = error + global last_error = error await ctx.send("Error, unable to complete your request.") else: print('Oopsie, I found an error...') -- 2.39.5 From 7015ac4f7ece517a22b9c5c797164d5ca5b0f316 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:24:15 -0400 Subject: [PATCH 020/189] dumping json to channel for debug --- r0b3bot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 80f7260..0224212 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -565,6 +565,8 @@ async def get_stp_status(ctx, service): spservice_array = requests.get(statpingURL, headers=statpingHEADERS) spservice_array = json.loads(spservice_array) + await ctx.send(f"spservice_array")) + for spservice in spservice_array: if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") -- 2.39.5 From 82b08ce80b2ce4eaf4237a85a32b3c5cb83ba868 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:24:56 -0400 Subject: [PATCH 021/189] extra ) removed --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0224212..269fb44 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -565,7 +565,7 @@ async def get_stp_status(ctx, service): spservice_array = requests.get(statpingURL, headers=statpingHEADERS) spservice_array = json.loads(spservice_array) - await ctx.send(f"spservice_array")) + await ctx.send(f"spservice_array") for spservice in spservice_array: if spservice['name'].lower() == service and spservice['online']: -- 2.39.5 From d86f6348275fb8425dd164e0e4e0d5d4e7e59fb1 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:26:31 -0400 Subject: [PATCH 022/189] dump to separate line --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 269fb44..6e9af56 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -87,7 +87,8 @@ async def on_command_error(ctx, error): if isinstance(error, commands.CommandInvokeError): print(" - ERROR: encountered 'CommandInvokeError'") print(f" - Dumping error: {error}") - global last_error = error + global last_error + last_error = error await ctx.send("Error, unable to complete your request.") else: print('Oopsie, I found an error...') -- 2.39.5 From 3f9cbf8964def07cc367767a7a2fde5b655a298c Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:30:16 -0400 Subject: [PATCH 023/189] commented json load --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6e9af56..2273475 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -564,9 +564,9 @@ async def spalert(ctx, service = "NONE"): async def get_stp_status(ctx, service): spservice_array = requests.get(statpingURL, headers=statpingHEADERS) - spservice_array = json.loads(spservice_array) + #spservice_array = json.loads(spservice_array) - await ctx.send(f"spservice_array") + await ctx.send(f"{spservice_array}") for spservice in spservice_array: if spservice['name'].lower() == service and spservice['online']: -- 2.39.5 From 82fda0be94f8cea98e5043ea7b2d5e765b4e7ff7 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:32:37 -0400 Subject: [PATCH 024/189] added contenty type --- r0b3bot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 2273475..e4cb98b 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -48,9 +48,10 @@ OCTOPRINT_IP_ADDRESS = config.get('bot-config', 'octoprint_ip_address') DISCORD_AUTH_TOKEN = config.get('bot-config', 'discord_auth_token') STATPING_URL = config.get('bot-config', 'statping_url') STATPING_API_KEY = config.get('bot-config', 'statping_api_key') -statpingURL = STATPING_URL + "/api/services" +statpingURL = STATPING_URL + "/api/services/" statpingHEADERS = { - 'Authorization': f"Bearer {STATPING_API_KEY}" + 'Authorization': f"Bearer {STATPING_API_KEY}", + 'content-type': 'application/json', } # Printing configuration details to console -- 2.39.5 From 3fd8c5de0e759c4698e1c0da34f6160dbf3f390b Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:33:27 -0400 Subject: [PATCH 025/189] removed slash --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index e4cb98b..ec9ca64 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -48,7 +48,7 @@ OCTOPRINT_IP_ADDRESS = config.get('bot-config', 'octoprint_ip_address') DISCORD_AUTH_TOKEN = config.get('bot-config', 'discord_auth_token') STATPING_URL = config.get('bot-config', 'statping_url') STATPING_API_KEY = config.get('bot-config', 'statping_api_key') -statpingURL = STATPING_URL + "/api/services/" +statpingURL = STATPING_URL + "/api/services" statpingHEADERS = { 'Authorization': f"Bearer {STATPING_API_KEY}", 'content-type': 'application/json', -- 2.39.5 From 7987fe186adbdf089edb9273c23caa91137efe01 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:39:42 -0400 Subject: [PATCH 026/189] added .json() --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index ec9ca64..c60cc90 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -567,7 +567,7 @@ async def get_stp_status(ctx, service): spservice_array = requests.get(statpingURL, headers=statpingHEADERS) #spservice_array = json.loads(spservice_array) - await ctx.send(f"{spservice_array}") + await ctx.send(f"{spservice_array.json()}") for spservice in spservice_array: if spservice['name'].lower() == service and spservice['online']: -- 2.39.5 From 29b7cd93daf401d8a8918866df6194b6c23ae516 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:42:44 -0400 Subject: [PATCH 027/189] .json() --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index c60cc90..b4fff78 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -567,9 +567,9 @@ async def get_stp_status(ctx, service): spservice_array = requests.get(statpingURL, headers=statpingHEADERS) #spservice_array = json.loads(spservice_array) - await ctx.send(f"{spservice_array.json()}") + #await ctx.send(f"{spservice_array.json()}") - for spservice in spservice_array: + for spservice in spservice_array.json(): if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") elif not spservice['online'] and spservice['name'].lower() == service: -- 2.39.5 From cbf96086d38ea996a8a737f4071a4671ac4f3e9b Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:43:57 -0400 Subject: [PATCH 028/189] added break in for loop --- r0b3bot.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index b4fff78..18fbf3d 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -572,10 +572,13 @@ async def get_stp_status(ctx, service): for spservice in spservice_array.json(): if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") + break elif not spservice['online'] and spservice['name'].lower() == service: await ctx.send(f"{spservice['name']} is Offline") + break else: await ctx.send("There was an error") + break @bot.command() -- 2.39.5 From 5b748dc2077ca58af8d246c3a7256e736d2faa33 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:45:54 -0400 Subject: [PATCH 029/189] return --- r0b3bot.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 18fbf3d..096a8cf 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -572,14 +572,13 @@ async def get_stp_status(ctx, service): for spservice in spservice_array.json(): if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") - break + return elif not spservice['online'] and spservice['name'].lower() == service: await ctx.send(f"{spservice['name']} is Offline") - break + return else: await ctx.send("There was an error") - break - + return @bot.command() async def help(ctx): -- 2.39.5 From b62f8641673641c77c0e61ccc8de9768414b147f Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:49:33 -0400 Subject: [PATCH 030/189] change back to break added spalert value to else --- r0b3bot.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 096a8cf..e9c72ad 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -26,7 +26,6 @@ config = configparser.RawConfigParser() configFilePath = r'bot_config.conf' # Last error message variable used by $last_error command to display in discord -global last_error last_error = "No errors been recorded." try: @@ -94,6 +93,7 @@ async def on_command_error(ctx, error): else: print('Oopsie, I found an error...') print(f"Error: {error}") + global last_error last_error = error # @@ -572,13 +572,13 @@ async def get_stp_status(ctx, service): for spservice in spservice_array.json(): if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") - return + break elif not spservice['online'] and spservice['name'].lower() == service: await ctx.send(f"{spservice['name']} is Offline") - return + break else: - await ctx.send("There was an error") - return + await ctx.send(f"There was an error| {spservice}") + break @bot.command() async def help(ctx): -- 2.39.5 From 369b3bf867060a9c93b2e4a69126243b14cd8cbe Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:51:11 -0400 Subject: [PATCH 031/189] didnt mean to remove this --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index e9c72ad..77b93a5 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -26,7 +26,7 @@ config = configparser.RawConfigParser() configFilePath = r'bot_config.conf' # Last error message variable used by $last_error command to display in discord -last_error = "No errors been recorded." +global last_error = "No errors been recorded." try: config.read(configFilePath) -- 2.39.5 From 7fdbcdf951978332cd3ec862ff41c4016d806254 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:52:26 -0400 Subject: [PATCH 032/189] assigning properly --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 77b93a5..0de1e99 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -26,7 +26,8 @@ config = configparser.RawConfigParser() configFilePath = r'bot_config.conf' # Last error message variable used by $last_error command to display in discord -global last_error = "No errors been recorded." +global last_error +last_error = "No errors have been recorded." try: config.read(configFilePath) -- 2.39.5 From bb33e9f82b13fff07d6dee7d014fcca95e8e1fd6 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:54:01 -0400 Subject: [PATCH 033/189] moved to beginning of cmd --- r0b3bot.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0de1e99..86469d5 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -81,6 +81,7 @@ async def greetings(ctx): @bot.event async def on_command_error(ctx, error): + global last_error if isinstance(error, commands.CommandOnCooldown): seconds = round(error.retry_after,1) print(f" - Error, user tried to use command while in cooldown (wait is: {seconds}") @@ -88,13 +89,11 @@ async def on_command_error(ctx, error): if isinstance(error, commands.CommandInvokeError): print(" - ERROR: encountered 'CommandInvokeError'") print(f" - Dumping error: {error}") - global last_error last_error = error await ctx.send("Error, unable to complete your request.") else: print('Oopsie, I found an error...') print(f"Error: {error}") - global last_error last_error = error # -- 2.39.5 From 40806125a5b7751fb7bdfb1254c8b64dda05e020 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 22:59:19 -0400 Subject: [PATCH 034/189] added send for debug --- r0b3bot.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 86469d5..dae197e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -570,6 +570,11 @@ async def get_stp_status(ctx, service): #await ctx.send(f"{spservice_array.json()}") for spservice in spservice_array.json(): + await ctx.send() + + if spservice['name'].lower() == service: + await ctx.send(f"{spservice['name']} | Online = {spservice['online']}") + if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") break -- 2.39.5 From ce514833448d67650b1651be488121caac2e6b8b Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:05:33 -0400 Subject: [PATCH 035/189] remove empty send --- r0b3bot.py | 1 - 1 file changed, 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index dae197e..997e7e9 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -570,7 +570,6 @@ async def get_stp_status(ctx, service): #await ctx.send(f"{spservice_array.json()}") for spservice in spservice_array.json(): - await ctx.send() if spservice['name'].lower() == service: await ctx.send(f"{spservice['name']} | Online = {spservice['online']}") -- 2.39.5 From 82743a0d667f5a7d8aa30d0007dd9cf91ae8e10f Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:06:24 -0400 Subject: [PATCH 036/189] dump status of all services --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 997e7e9..2ea390f 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -571,8 +571,8 @@ async def get_stp_status(ctx, service): for spservice in spservice_array.json(): - if spservice['name'].lower() == service: - await ctx.send(f"{spservice['name']} | Online = {spservice['online']}") + #if spservice['name'].lower() == service: + await ctx.send(f"{spservice['name']} | Online = {spservice['online']}") if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") -- 2.39.5 From 25d0aad3cbbcfb1ff95830a0544eda138d79702b Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:07:35 -0400 Subject: [PATCH 037/189] fixed indent --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 2ea390f..15d5d33 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -572,7 +572,7 @@ async def get_stp_status(ctx, service): for spservice in spservice_array.json(): #if spservice['name'].lower() == service: - await ctx.send(f"{spservice['name']} | Online = {spservice['online']}") + await ctx.send(f"{spservice['name']} | Online = {spservice['online']}") if spservice['name'].lower() == service and spservice['online']: await ctx.send(f"{spservice['name']} is Online") -- 2.39.5 From 4e562c5c66d9f069e863aac454b23569dbe099c2 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:12:31 -0400 Subject: [PATCH 038/189] reworked if else statements --- r0b3bot.py | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 15d5d33..537a957 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -574,15 +574,26 @@ async def get_stp_status(ctx, service): #if spservice['name'].lower() == service: await ctx.send(f"{spservice['name']} | Online = {spservice['online']}") - if spservice['name'].lower() == service and spservice['online']: - await ctx.send(f"{spservice['name']} is Online") - break - elif not spservice['online'] and spservice['name'].lower() == service: - await ctx.send(f"{spservice['name']} is Offline") - break - else: - await ctx.send(f"There was an error| {spservice}") - break + if spservice['name'].lower() == service: + if spservice['online']: + await ctx.send(f"{spservice['name']} is Online") + break + elif not spservice['online']: + await ctx.send(f"{spservice['name']} is Offline") + break + else + await ctx.send("Serivce name matched, but ran into problem getting status") + break + + #if spservice['name'].lower() == service and spservice['online']: + # await ctx.send(f"{spservice['name']} is Online") + # break + #elif not spservice['online'] and spservice['name'].lower() == service: + # await ctx.send(f"{spservice['name']} is Offline") + # break + #else: + # await ctx.send(f"There was an error| {spservice}") + # break @bot.command() async def help(ctx): -- 2.39.5 From af6862dfe518e6e389923928d52083c096ca5b1e Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:12:52 -0400 Subject: [PATCH 039/189] forgot : --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 537a957..95b56bd 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -581,7 +581,7 @@ async def get_stp_status(ctx, service): elif not spservice['online']: await ctx.send(f"{spservice['name']} is Offline") break - else + else: await ctx.send("Serivce name matched, but ran into problem getting status") break -- 2.39.5 From 351fb9c0907eb647bb2368761cac6ecfb9d4b30c Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:13:28 -0400 Subject: [PATCH 040/189] commenting out debug --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 95b56bd..83c4916 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -572,7 +572,7 @@ async def get_stp_status(ctx, service): for spservice in spservice_array.json(): #if spservice['name'].lower() == service: - await ctx.send(f"{spservice['name']} | Online = {spservice['online']}") + #await ctx.send(f"{spservice['name']} | Online = {spservice['online']}") if spservice['name'].lower() == service: if spservice['online']: -- 2.39.5 From 92542b44055571de370da5b6f7cdae5d91b1f4ca Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:23:25 -0400 Subject: [PATCH 041/189] code cleanup --- r0b3bot.py | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 83c4916..bd96ee6 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -564,36 +564,30 @@ async def spalert(ctx, service = "NONE"): async def get_stp_status(ctx, service): + # Get StatPing status via RESTful API spservice_array = requests.get(statpingURL, headers=statpingHEADERS) - #spservice_array = json.loads(spservice_array) - - #await ctx.send(f"{spservice_array.json()}") + # spservice_array is json data, need to treat it as such for spservice in spservice_array.json(): - #if spservice['name'].lower() == service: - #await ctx.send(f"{spservice['name']} | Online = {spservice['online']}") - + # using lower() to eliminate any case mismatch problems if spservice['name'].lower() == service: if spservice['online']: + + #Return result to channel await ctx.send(f"{spservice['name']} is Online") break + elif not spservice['online']: + await ctx.send(f"{spservice['name']} is Offline") break - else: - await ctx.send("Serivce name matched, but ran into problem getting status") - break - #if spservice['name'].lower() == service and spservice['online']: - # await ctx.send(f"{spservice['name']} is Online") - # break - #elif not spservice['online'] and spservice['name'].lower() == service: - # await ctx.send(f"{spservice['name']} is Offline") - # break - #else: - # await ctx.send(f"There was an error| {spservice}") - # break + else: + # Catch in case the status info is not available + await ctx.send(f"Status for {spservice['name']} is not available") + break + @bot.command() async def help(ctx): -- 2.39.5 From ff189b73578612224017ce1bdac03626b6b92987 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:26:57 -0400 Subject: [PATCH 042/189] added reply if service was not found --- r0b3bot.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index bd96ee6..8f2b084 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -569,25 +569,31 @@ async def get_stp_status(ctx, service): # spservice_array is json data, need to treat it as such for spservice in spservice_array.json(): - + found = False # using lower() to eliminate any case mismatch problems if spservice['name'].lower() == service: if spservice['online']: #Return result to channel await ctx.send(f"{spservice['name']} is Online") + found = True break elif not spservice['online']: await ctx.send(f"{spservice['name']} is Offline") + found = True break else: # Catch in case the status info is not available await ctx.send(f"Status for {spservice['name']} is not available") break - + + # Want to alert user if the service was not found + if not found: + await ctx.send("Service was not found :(") + @bot.command() async def help(ctx): -- 2.39.5 From 427937e8d52f1aee409e68cfb07a97240527e420 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:37:50 -0400 Subject: [PATCH 043/189] added $ hint in status --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 8f2b084..a166696 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -71,7 +71,7 @@ async def on_ready(): print(bot.user.id) print('------') print("Setting activity to 'Listenting to your commands") - activity = discord.Activity(name="your commands",type=discord.ActivityType.listening) + activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) @bot.command() -- 2.39.5 From e594d27beb0d9b3ec7a8943638862d061182c449 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:40:19 -0400 Subject: [PATCH 044/189] removed uptime command and added spalert to $help --- r0b3bot.py | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index a166696..796f7dc 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -103,21 +103,6 @@ async def on_command_error(ctx, error): async def last_error(ctx): await ctx.send(f"Last error recorded: {last_error}") -@bot.command() -async def uptime(ctx): - # Displays how long the bot has been online - second = time.time() - start_time - minute, second = divmod(second, 60) - hour, minute = divmod(minute, 60) - day, hour = divmod(hour, 24) - week, day = divmod(day, 7) - week = int(week) - day = int(day) - hour = int(hour) - minute = int(minute) - second = int(second) - await ctx.send(f"Uptime [WW:DD:HH:MM:SS]: {week:02d}:{day:02d}:{hour:02d}:{minute:02d}:{second:02d}") - # # Giphy Commands # @@ -614,7 +599,7 @@ async def help(ctx): embed.add_field(name="$info", value="Gives a little info about the bot", inline=False) embed.add_field(name="$help", value="Gives this message", inline=False) embed.add_field(name="$last_error", value="Will display the real error message the bot has last encountered for additional debugging info") - embed.add_field(name="$uptime", value="Displays how long the bot has been up since last service restart") + embed.add_field(name="$spalert servicename", value="Retrieves status of service from StatPing") await ctx.send(embed=embed) embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played voice channels. If no user is specified when calling the command, the sound will played in the channel the user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") -- 2.39.5 From f8e04ea086df215595caf38254f0112897cec5b9 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:50:43 -0400 Subject: [PATCH 045/189] for mendo --- r0b3bot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 796f7dc..df9c76c 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -545,6 +545,8 @@ async def spalert(ctx, service = "NONE"): # spalert += if service != "NONE": await get_stp_status(ctx, service.lower()) + else: + await ctx.send("Please speficy a service name to query.") async def get_stp_status(ctx, service): -- 2.39.5 From 05b7520a3f6471d194212022dec881ade488a8d5 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Thu, 9 Apr 2020 23:56:36 -0400 Subject: [PATCH 046/189] help text grammar --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index df9c76c..18f2c6f 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -604,7 +604,7 @@ async def help(ctx): embed.add_field(name="$spalert servicename", value="Retrieves status of service from StatPing") await ctx.send(embed=embed) - embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played voice channels. If no user is specified when calling the command, the sound will played in the channel the user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") + embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") await ctx.send(embed=embed) bot.run(DISCORD_AUTH_TOKEN) -- 2.39.5 From d15267ea53962ebd97c3c3e8b7a2c382e801aa87 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 11:49:43 -0400 Subject: [PATCH 047/189] reworking functions --- r0b3bot.py | 55 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 18f2c6f..16096f4 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -29,6 +29,9 @@ configFilePath = r'bot_config.conf' global last_error last_error = "No errors have been recorded." +global spsublist +spsublist = [] + try: config.read(configFilePath) except: @@ -544,10 +547,39 @@ async def spalert(ctx, service = "NONE"): # if cmd == "add": # spalert += if service != "NONE": - await get_stp_status(ctx, service.lower()) + + #await get_stp_status(ctx, service.lower()) + result = get_stp_status(ctx, service.lower()) + + if result == "online" or result == "offline": + + await ctx.send(f"{service} is {result}") + + elif result == "not available": + + await ctx.send(f"Status info for '{service}' is {result}") + + elif result == "not found": + + await ctx.send(f"{service} was {result}") + else: + await ctx.send(f"Received an unexpected result '{result}' querying '{service}'") + else: await ctx.send("Please speficy a service name to query.") + + +@bot.command() +async def spsub(ctx, service = "NONE"): + current_subrequest = [] + + if service != "NONE": + + currentsub_request.append(ctx) + currentsub_request.append(service) + spsublist.append(current_subrequest) + async def get_stp_status(ctx, service): @@ -562,24 +594,29 @@ async def get_stp_status(ctx, service): if spservice['online']: #Return result to channel - await ctx.send(f"{spservice['name']} is Online") + #await ctx.send(f"{spservice['name']} is Online") found = True - break + return "online" + #break elif not spservice['online']: - await ctx.send(f"{spservice['name']} is Offline") + #await ctx.send(f"{spservice['name']} is Offline") found = True - break + return "offline" + #break else: # Catch in case the status info is not available - await ctx.send(f"Status for {spservice['name']} is not available") - break + #await ctx.send(f"Status for {spservice['name']} is not available") + found = True + return "not available" + #break # Want to alert user if the service was not found - if not found: - await ctx.send("Service was not found :(") + if not found: + return "not found" + #await ctx.send("Service was not found :(") @bot.command() -- 2.39.5 From d946067bd45a5161394acc02f0d3b384388bab34 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 11:51:30 -0400 Subject: [PATCH 048/189] forgot await --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 16096f4..f363cc1 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -549,7 +549,7 @@ async def spalert(ctx, service = "NONE"): if service != "NONE": #await get_stp_status(ctx, service.lower()) - result = get_stp_status(ctx, service.lower()) + result = await get_stp_status(ctx, service.lower()) if result == "online" or result == "offline": -- 2.39.5 From bd98d1bdcb67495be1edbad6c12b3d57ba5b2bac Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 12:08:16 -0400 Subject: [PATCH 049/189] more reworking of functions for future needs --- r0b3bot.py | 40 +++++++++++----------------------------- 1 file changed, 11 insertions(+), 29 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index f363cc1..fc6ed4f 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -551,17 +551,18 @@ async def spalert(ctx, service = "NONE"): #await get_stp_status(ctx, service.lower()) result = await get_stp_status(ctx, service.lower()) - if result == "online" or result == "offline": + if result == "service not found": - await ctx.send(f"{service} is {result}") + await ctx.send(f"'{service}' was not found") + + elif result['online']: - elif result == "not available": + await ctx.send(f"{result['name']} is Online") - await ctx.send(f"Status info for '{service}' is {result}") + elif not result['online']: - elif result == "not found": + await ctx.send(f"{result['name']} is Offline") - await ctx.send(f"{service} was {result}") else: await ctx.send(f"Received an unexpected result '{result}' querying '{service}'") @@ -583,7 +584,7 @@ async def spsub(ctx, service = "NONE"): async def get_stp_status(ctx, service): - # Get StatPing status via RESTful API + # Get StatPing status via REST API spservice_array = requests.get(statpingURL, headers=statpingHEADERS) # spservice_array is json data, need to treat it as such @@ -591,32 +592,13 @@ async def get_stp_status(ctx, service): found = False # using lower() to eliminate any case mismatch problems if spservice['name'].lower() == service: - if spservice['online']: - - #Return result to channel - #await ctx.send(f"{spservice['name']} is Online") + found = True - return "online" - #break - - elif not spservice['online']: - - #await ctx.send(f"{spservice['name']} is Offline") - found = True - return "offline" - #break - - else: - # Catch in case the status info is not available - #await ctx.send(f"Status for {spservice['name']} is not available") - found = True - return "not available" - #break + return spservice # Want to alert user if the service was not found if not found: - return "not found" - #await ctx.send("Service was not found :(") + return "service not found" @bot.command() -- 2.39.5 From 3b65435899eedcb0bb54362a7c340113e9c68bcd Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 12:10:57 -0400 Subject: [PATCH 050/189] moving outside of loop --- r0b3bot.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index fc6ed4f..b9d47c0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -552,17 +552,11 @@ async def spalert(ctx, service = "NONE"): result = await get_stp_status(ctx, service.lower()) if result == "service not found": - await ctx.send(f"'{service}' was not found") - elif result['online']: - await ctx.send(f"{result['name']} is Online") - elif not result['online']: - await ctx.send(f"{result['name']} is Offline") - else: await ctx.send(f"Received an unexpected result '{result}' querying '{service}'") @@ -586,10 +580,11 @@ async def get_stp_status(ctx, service): # Get StatPing status via REST API spservice_array = requests.get(statpingURL, headers=statpingHEADERS) - + found = False + # spservice_array is json data, need to treat it as such for spservice in spservice_array.json(): - found = False + # using lower() to eliminate any case mismatch problems if spservice['name'].lower() == service: -- 2.39.5 From 1547784a402b2ec69c896d5058950af27501ca2f Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 12:12:51 -0400 Subject: [PATCH 051/189] removed ctx --- r0b3bot.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index b9d47c0..6a16c6f 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -549,7 +549,7 @@ async def spalert(ctx, service = "NONE"): if service != "NONE": #await get_stp_status(ctx, service.lower()) - result = await get_stp_status(ctx, service.lower()) + result = await get_stp_status(service.lower()) if result == "service not found": await ctx.send(f"'{service}' was not found") @@ -570,18 +570,20 @@ async def spsub(ctx, service = "NONE"): current_subrequest = [] if service != "NONE": + + service_state = await get_stp_status() currentsub_request.append(ctx) currentsub_request.append(service) spsublist.append(current_subrequest) -async def get_stp_status(ctx, service): +async def get_stp_status(service): # Get StatPing status via REST API spservice_array = requests.get(statpingURL, headers=statpingHEADERS) found = False - + # spservice_array is json data, need to treat it as such for spservice in spservice_array.json(): -- 2.39.5 From fba8cc680cb91ec1698f171a7e70effc3f11cd4e Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 13:15:59 -0400 Subject: [PATCH 052/189] initial test of alert subscriptions --- r0b3bot.py | 45 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6a16c6f..ffdb43c 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -571,12 +571,47 @@ async def spsub(ctx, service = "NONE"): if service != "NONE": - service_state = await get_stp_status() - - currentsub_request.append(ctx) - currentsub_request.append(service) - spsublist.append(current_subrequest) + service_state = await get_stp_status(service) + if service_state != "service not found": + + currentsub_request.append(ctx) + currentsub_request.append(service) + currentsub_request.append("online") + + #Add the request to the spsublist list + global spsublist.append(current_subrequest) + await sp_monitor(currentsub_request) + + else: + + await ctx.send(f"{service} was not found") + +aync def sp_monitor(spsublist): + + # Checks the services listed in spsublist for status change + # Sublist is a list of 3 items: + # - ctx (used to send alert to channel) + # - service (the name of the service to check) + # - status string (last status of the service, either 'online' or 'offline') + + ctx = spsublist[0] + + while True: + + status = await get_stp_status(spsublist[1]) + if status['online'] and spsublist[2] == "online": + # nothing has changed, no alert needed + elif not status['online'] and spsublist[2] == "offline": + # again, nothing has changed no alert needed + else: + if status['online']: + await ctx.send(f"{spsublist[1]} is now Online!") + elif not status['online']: + await ctx.send(f"{spsublist[1]} is now Offline!") + else: + await ctx.send(f"Unknown state for service {spsublist[1]}") + time.sleep(60) async def get_stp_status(service): -- 2.39.5 From 6e0642a11b5a8326a3548819dda90733a1c13598 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 13:19:27 -0400 Subject: [PATCH 053/189] cant assign when declaring --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index ffdb43c..112493d 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -580,7 +580,8 @@ async def spsub(ctx, service = "NONE"): currentsub_request.append("online") #Add the request to the spsublist list - global spsublist.append(current_subrequest) + global spsublist + spsublist.append(current_subrequest) await sp_monitor(currentsub_request) else: -- 2.39.5 From b90b5fc8f42fddc593c63446de39ae38fce1a82a Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 13:20:13 -0400 Subject: [PATCH 054/189] type --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 112493d..d92f1c3 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -588,7 +588,7 @@ async def spsub(ctx, service = "NONE"): await ctx.send(f"{service} was not found") -aync def sp_monitor(spsublist): +async def sp_monitor(spsublist): # Checks the services listed in spsublist for status change # Sublist is a list of 3 items: -- 2.39.5 From 51692a17db97b98308ac7b3b4efe8e0fd2d05447 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 13:22:13 -0400 Subject: [PATCH 055/189] should probably rework this if elif statements --- r0b3bot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index d92f1c3..9f32765 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -603,8 +603,10 @@ async def sp_monitor(spsublist): status = await get_stp_status(spsublist[1]) if status['online'] and spsublist[2] == "online": # nothing has changed, no alert needed + time.sleep(1) elif not status['online'] and spsublist[2] == "offline": # again, nothing has changed no alert needed + time.sleep(1) else: if status['online']: await ctx.send(f"{spsublist[1]} is now Online!") -- 2.39.5 From b26af574ae3ad239d544942672edbc6f54a393f2 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 13:24:51 -0400 Subject: [PATCH 056/189] fixed variable name --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 9f32765..f5a6042 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -567,7 +567,7 @@ async def spalert(ctx, service = "NONE"): @bot.command() async def spsub(ctx, service = "NONE"): - current_subrequest = [] + currentsub_request = [] if service != "NONE": @@ -580,8 +580,8 @@ async def spsub(ctx, service = "NONE"): currentsub_request.append("online") #Add the request to the spsublist list - global spsublist - spsublist.append(current_subrequest) + #global spsublist + #spsublist.append(currentsub_request) await sp_monitor(currentsub_request) else: -- 2.39.5 From 9eaf1d80299bc063af82251cb6c279e2557e66f1 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 14:02:59 -0400 Subject: [PATCH 057/189] added some console outputs --- r0b3bot.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index f5a6042..7f39c6a 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -568,13 +568,18 @@ async def spalert(ctx, service = "NONE"): @bot.command() async def spsub(ctx, service = "NONE"): currentsub_request = [] + datestring = datetime.now() + datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") + print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub {service}'") if service != "NONE": + print(f"Querying status of '{service}' to see if it exists") service_state = await get_stp_status(service) if service_state != "service not found": + print(f"'{service}' exists, starting monitor") currentsub_request.append(ctx) currentsub_request.append(service) currentsub_request.append("online") @@ -585,7 +590,7 @@ async def spsub(ctx, service = "NONE"): await sp_monitor(currentsub_request) else: - + print(f"'{service}' does not exist, cancelling subscription") await ctx.send(f"{service} was not found") async def sp_monitor(spsublist): @@ -608,10 +613,13 @@ async def sp_monitor(spsublist): # again, nothing has changed no alert needed time.sleep(1) else: + print(f"Status of {status['name']}' has changed") if status['online']: await ctx.send(f"{spsublist[1]} is now Online!") + spsublist[2] = "online" elif not status['online']: await ctx.send(f"{spsublist[1]} is now Offline!") + spsublist[2] = "offline" else: await ctx.send(f"Unknown state for service {spsublist[1]}") time.sleep(60) -- 2.39.5 From c8414ba000643c05e2b81c1cda0fb50421523d3e Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 14:07:45 -0400 Subject: [PATCH 058/189] replaced sleep w/ more friendly versions --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 7f39c6a..f15d500 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -608,10 +608,10 @@ async def sp_monitor(spsublist): status = await get_stp_status(spsublist[1]) if status['online'] and spsublist[2] == "online": # nothing has changed, no alert needed - time.sleep(1) + await asyncio.sleep(1) elif not status['online'] and spsublist[2] == "offline": # again, nothing has changed no alert needed - time.sleep(1) + await asyncio.sleep(1) else: print(f"Status of {status['name']}' has changed") if status['online']: @@ -622,7 +622,7 @@ async def sp_monitor(spsublist): spsublist[2] = "offline" else: await ctx.send(f"Unknown state for service {spsublist[1]}") - time.sleep(60) + await asyncio.sleep(60) async def get_stp_status(service): -- 2.39.5 From 46dc4190a02be7b4438da472792eb242b5e91ce7 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 14:11:10 -0400 Subject: [PATCH 059/189] added send to channel notifying service is now being monitored --- r0b3bot.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index f15d500..ec60011 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -580,13 +580,11 @@ async def spsub(ctx, service = "NONE"): if service_state != "service not found": print(f"'{service}' exists, starting monitor") + await ctx.send(f"{service_state['name']}' added to monitored services") currentsub_request.append(ctx) currentsub_request.append(service) currentsub_request.append("online") - #Add the request to the spsublist list - #global spsublist - #spsublist.append(currentsub_request) await sp_monitor(currentsub_request) else: -- 2.39.5 From de815af682b44a1c541e9965938ccfbab6893e90 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 14:12:33 -0400 Subject: [PATCH 060/189] wording changes --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index ec60011..0a2534e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -580,7 +580,7 @@ async def spsub(ctx, service = "NONE"): if service_state != "service not found": print(f"'{service}' exists, starting monitor") - await ctx.send(f"{service_state['name']}' added to monitored services") + await ctx.send(f"'{service_state['name']}' added to monitored services") currentsub_request.append(ctx) currentsub_request.append(service) currentsub_request.append("online") @@ -613,10 +613,10 @@ async def sp_monitor(spsublist): else: print(f"Status of {status['name']}' has changed") if status['online']: - await ctx.send(f"{spsublist[1]} is now Online!") + await ctx.send(f"{spsublist[1]} is Online!") spsublist[2] = "online" elif not status['online']: - await ctx.send(f"{spsublist[1]} is now Offline!") + await ctx.send(f"{spsublist[1]} is Offline!") spsublist[2] = "offline" else: await ctx.send(f"Unknown state for service {spsublist[1]}") -- 2.39.5 From 4464d589d94f058019b41a56ffa9cc1ad22b4e19 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Fri, 10 Apr 2020 14:26:09 -0400 Subject: [PATCH 061/189] change notices to embed w/ color --- r0b3bot.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0a2534e..e04f5af 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -567,6 +567,7 @@ async def spalert(ctx, service = "NONE"): @bot.command() async def spsub(ctx, service = "NONE"): + currentsub_request = [] datestring = datetime.now() datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") @@ -613,13 +614,19 @@ async def sp_monitor(spsublist): else: print(f"Status of {status['name']}' has changed") if status['online']: - await ctx.send(f"{spsublist[1]} is Online!") + embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is Online!", color=0x00ff40) + await ctx.send(embed=embed) + #await ctx.send(f"{spsublist[1]} is Online!") spsublist[2] = "online" elif not status['online']: - await ctx.send(f"{spsublist[1]} is Offline!") + embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is Offline!", color=0xff2200) + await ctx.send(embed=embed) + #await ctx.send(f"{spsublist[1]} is Offline!") spsublist[2] = "offline" else: - await ctx.send(f"Unknown state for service {spsublist[1]}") + embed = discord.Embed(title=f"{status['name']} Service Alert", description=f"{spsublist[1]} is in an unknown state!", color=0xffff00) + await ctx.send(embed=embed) + #await ctx.send(f"Unknown state for service {spsublist[1]}") await asyncio.sleep(60) async def get_stp_status(service): -- 2.39.5 From 9f4ee76bb7851837ef7751f6262236e9b423679d Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sat, 11 Apr 2020 12:15:13 -0400 Subject: [PATCH 062/189] added bot_command_prefix to config file --- bot_config.conf.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bot_config.conf.example b/bot_config.conf.example index 6b64c88..81014cf 100644 --- a/bot_config.conf.example +++ b/bot_config.conf.example @@ -3,6 +3,7 @@ # Replace the placeholders with your information. Do not use quotes. # # discord_auth_token - this is the bot token generated via the Discord development console. +# bot_command_prefix - The prefix used identify commands for this bot # hass_url - URL to your home assistant instance. This is used to turn on the light by your 3d printer # hass_token - Long Lived Access Token used to authenticate with the REST API for your Home assistant instance # hass_light - Entity name of the light you want to control @@ -11,6 +12,7 @@ # statping_api_key - API Key for Statping to query for service status # discord_auth_token = +bot_command_prefix= hass_url = hass_token = hass_light = -- 2.39.5 From bb711b81671bd37586298cca46b0702c287d26e0 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sat, 11 Apr 2020 12:15:34 -0400 Subject: [PATCH 063/189] fixed missing ' in console output --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index e04f5af..8b6075e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -73,7 +73,7 @@ async def on_ready(): print(bot.user.name) print(bot.user.id) print('------') - print("Setting activity to 'Listenting to your commands") + print("Setting activity to 'Listenting to your commands'") activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) -- 2.39.5 From f85a6375668d2de5e8996680c156bbc35786f893 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sat, 11 Apr 2020 12:20:09 -0400 Subject: [PATCH 064/189] added read in of command prefix and updated bot creation to use config. Also moved bot object creation to after read in of prefix config --- r0b3bot.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 8b6075e..04f315b 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -17,7 +17,6 @@ from discord.voice_client import VoiceClient import requests import asyncio -bot = commands.Bot(command_prefix='$', description='A derpy derp of a bot.') #Record the time the bot started start_time = time.time() @@ -37,6 +36,10 @@ try: except: print("Error loading config! Please check config file 'bot-config.conf'") +# +# Read in bot configurations +# + # Setup HomeAssistant URL and Headers HASS_TOKEN = config.get('bot-config', 'hass_token') HASS_URL = config.get('bot-config', 'hass_url') @@ -49,6 +52,7 @@ hassHEADERS = { OCTOPRINT_IP_ADDRESS = config.get('bot-config', 'octoprint_ip_address') DISCORD_AUTH_TOKEN = config.get('bot-config', 'discord_auth_token') +BOT_COMMAND_PREFIX = config.get('bot-config', 'bot_command_prefix') STATPING_URL = config.get('bot-config', 'statping_url') STATPING_API_KEY = config.get('bot-config', 'statping_api_key') statpingURL = STATPING_URL + "/api/services" @@ -57,6 +61,9 @@ statpingHEADERS = { 'content-type': 'application/json', } +# Configure bot +bot = commands.Bot(command_prefix=BOT_COMMAND_PREFIX, description='A derpy derp of a bot.') + # Printing configuration details to console print(f"HomeAssistant URL: {hassURL}") print(f"HomeAssistant URL HEADERS: {hassHEADERS}") -- 2.39.5 From dd0dbb0f27862fea5710976ebef9cebfc2e3571a Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 11:13:56 -0400 Subject: [PATCH 065/189] formatting --- bot_config.conf.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bot_config.conf.example b/bot_config.conf.example index 81014cf..af77115 100644 --- a/bot_config.conf.example +++ b/bot_config.conf.example @@ -12,7 +12,7 @@ # statping_api_key - API Key for Statping to query for service status # discord_auth_token = -bot_command_prefix= +bot_command_prefix = hass_url = hass_token = hass_light = -- 2.39.5 From 2ef6cf60539a236f9ea786f4aad42da6348a42c1 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 14:54:35 -0400 Subject: [PATCH 066/189] Added new test functions to read in spsubs from file --- r0b3bot.py | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 115 insertions(+), 5 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 04f315b..0f95bee 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -16,6 +16,7 @@ from discord.utils import get from discord.voice_client import VoiceClient import requests import asyncio +import pickle #Record the time the bot started @@ -28,9 +29,6 @@ configFilePath = r'bot_config.conf' global last_error last_error = "No errors have been recorded." -global spsublist -spsublist = [] - try: config.read(configFilePath) except: @@ -84,6 +82,9 @@ async def on_ready(): activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) + #Run StatPing_Monitor + await StatPing_Monitor() + @bot.command() async def greetings(ctx): await ctx.send(":smiley: :wave: Hello there!") @@ -599,7 +600,115 @@ async def spsub(ctx, service = "NONE"): print(f"'{service}' does not exist, cancelling subscription") await ctx.send(f"{service} was not found") -async def sp_monitor(spsublist): +@bot.command() +async def spsub_T(ctx, service = "NONE"): + + spsublist = [] + currentsub_request = [] + datestring = datetime.now() + datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") + print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub {service}'") + + if service != "NONE": + + print(f">> Querying status of '{service}' to see if it exists") + service_state = await get_stp_status(service) + + if service_state != "service not found": + + print(f">> '{service}' exists, adding to StatPing Monitor") + await ctx.send(f"'{service_state['name']}' added to monitored services") + currentsub_request.append(ctx) + currentsub_request.append(service) + currentsub_request.append("online") + + # read in data file containing list of subscriptions + print(">> Reading in spsublist.dat") + if os.path.exists('spsublist.dat'): + with open('spsublist.dat', 'rb') as datafile: + spsublist = pickle.load(datafile) + else: + print(">> spsublist.dat does not exist, new file will be created") + + # append new subscription to array + print(">> Appending new sub to array") + spsublist.append(currentsub_request) + + #Write updated array to data file + print(">> Writing updated array to spsublist.dat") + with open('spsublist.dat', 'wb') as datafile: + pickle.dump(spsublist, datafile) + + print(">> Done") + await ctx.send(f"'{service_state['name']}' added to monitored services") + + #await sp_monitor(currentsub_request) + + else: + print(f">> '{service}' does not exist, cancelling subscription") + await ctx.send(f"{service} was not found") + +async def StatPing_Monitor(): + + # reads in "spsublist.dat" every 60 seconds then iterates + # through to check for service status changes. This function will need to check + # that "spsublist.dat" exists and is not empty. This function should be called + # in bot.on_ready + + new_spsublist = [] + + # read in data file containing list of subscriptions + while True: + print("Statping Monitor: Reading in spsublist.dat") + if os.path.exists('spsublist.dat'): + with open('spsublist.dat', 'rb') as datafile: + spsublist = pickle.load(datafile) + + for subscription in spsublist: + + ctx = subscription[0] + status = await get_stp_status(subscription[1]) + + if status['online'] and subscription[2] == "online": + + # nothing has changed, no alert needed + await asyncio.sleep(1) + elif not status['online'] and subscription[2] == "offline": + + # again, nothing has changed no alert needed + await asyncio.sleep(1) + else: + print(f"Status of {status['name']}' has changed") + if status['online']: + + embed = discord.Embed(title=f"Service Alert", description=f"{status['name']} is Online!", color=0x00ff40) + await ctx.send(embed=embed) + subscription[2] = "online" + + elif not status['online']: + + embed = discord.Embed(title=f"Service Alert", description=f"{status['name']} is Offline!", color=0xff2200) + await ctx.send(embed=embed) + subscription[2] = "offline" + + else: + + embed = discord.Embed(title=f"Service Alert", description=f"{status['name']} is in an unknown state!", color=0xffff00) + await ctx.send(embed=embed) + + new_spsublist.append(subscription) + + # Write status changes to spsublist.dat + with open('spsublist.dat', 'w') as datafile: + pickle.dump(new_spsublist, datafile) + + else: + print(">> spsublist.dat does not exist, nothing to do.") + + await asyncio.sleep(60) + + +async def sp_monitor(sublist): # Checks the services listed in spsublist for status change # Sublist is a list of 3 items: @@ -607,7 +716,8 @@ async def sp_monitor(spsublist): # - service (the name of the service to check) # - status string (last status of the service, either 'online' or 'offline') - ctx = spsublist[0] + ctx = sublist[0] + while True: -- 2.39.5 From 142a7fcf48cfa9380eb644bb3d130cf1cffc3fc6 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 14:59:07 -0400 Subject: [PATCH 067/189] forgot awaits --- r0b3bot.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0f95bee..d1cd6c1 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -626,7 +626,7 @@ async def spsub_T(ctx, service = "NONE"): print(">> Reading in spsublist.dat") if os.path.exists('spsublist.dat'): with open('spsublist.dat', 'rb') as datafile: - spsublist = pickle.load(datafile) + spsublist = await pickle.load(datafile) else: print(">> spsublist.dat does not exist, new file will be created") @@ -637,7 +637,7 @@ async def spsub_T(ctx, service = "NONE"): #Write updated array to data file print(">> Writing updated array to spsublist.dat") with open('spsublist.dat', 'wb') as datafile: - pickle.dump(spsublist, datafile) + await pickle.dump(spsublist, datafile) print(">> Done") await ctx.send(f"'{service_state['name']}' added to monitored services") @@ -662,7 +662,7 @@ async def StatPing_Monitor(): print("Statping Monitor: Reading in spsublist.dat") if os.path.exists('spsublist.dat'): with open('spsublist.dat', 'rb') as datafile: - spsublist = pickle.load(datafile) + spsublist = await pickle.load(datafile) for subscription in spsublist: @@ -700,7 +700,7 @@ async def StatPing_Monitor(): # Write status changes to spsublist.dat with open('spsublist.dat', 'w') as datafile: - pickle.dump(new_spsublist, datafile) + await pickle.dump(new_spsublist, datafile) else: print(">> spsublist.dat does not exist, nothing to do.") -- 2.39.5 From 0f607f67ee405f4ed9b8b4c183edaf5b04736550 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 15:04:55 -0400 Subject: [PATCH 068/189] more awaits? --- r0b3bot.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index d1cd6c1..81ceeff 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -625,7 +625,7 @@ async def spsub_T(ctx, service = "NONE"): # read in data file containing list of subscriptions print(">> Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - with open('spsublist.dat', 'rb') as datafile: + await with open('spsublist.dat', 'rb') as datafile: spsublist = await pickle.load(datafile) else: print(">> spsublist.dat does not exist, new file will be created") @@ -636,7 +636,7 @@ async def spsub_T(ctx, service = "NONE"): #Write updated array to data file print(">> Writing updated array to spsublist.dat") - with open('spsublist.dat', 'wb') as datafile: + await with open('spsublist.dat', 'wb') as datafile: await pickle.dump(spsublist, datafile) print(">> Done") @@ -661,7 +661,7 @@ async def StatPing_Monitor(): while True: print("Statping Monitor: Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - with open('spsublist.dat', 'rb') as datafile: + await with open('spsublist.dat', 'rb') as datafile: spsublist = await pickle.load(datafile) for subscription in spsublist: @@ -699,7 +699,7 @@ async def StatPing_Monitor(): new_spsublist.append(subscription) # Write status changes to spsublist.dat - with open('spsublist.dat', 'w') as datafile: + await with open('spsublist.dat', 'w') as datafile: await pickle.dump(new_spsublist, datafile) else: -- 2.39.5 From 7391e68778f2dfcc5d0a22a401de7f49d18d75cf Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 15:14:12 -0400 Subject: [PATCH 069/189] replace pickle with aiofile --- r0b3bot.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 81ceeff..3a64aa0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -16,7 +16,7 @@ from discord.utils import get from discord.voice_client import VoiceClient import requests import asyncio -import pickle +from aiofile import AIOfile #Record the time the bot started @@ -625,8 +625,8 @@ async def spsub_T(ctx, service = "NONE"): # read in data file containing list of subscriptions print(">> Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - await with open('spsublist.dat', 'rb') as datafile: - spsublist = await pickle.load(datafile) + async with AIOfile('spsublist.dat', 'rb') as datafile: + spsublist = await datafile.read() else: print(">> spsublist.dat does not exist, new file will be created") @@ -636,8 +636,9 @@ async def spsub_T(ctx, service = "NONE"): #Write updated array to data file print(">> Writing updated array to spsublist.dat") - await with open('spsublist.dat', 'wb') as datafile: - await pickle.dump(spsublist, datafile) + async with AIOfile('spsublist.dat', 'wb') as datafile: + await datafile.write(spsublist) + await datafile.fsync() print(">> Done") await ctx.send(f"'{service_state['name']}' added to monitored services") @@ -661,8 +662,8 @@ async def StatPing_Monitor(): while True: print("Statping Monitor: Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - await with open('spsublist.dat', 'rb') as datafile: - spsublist = await pickle.load(datafile) + async with AIOfile('spsublist.dat', 'rb') as datafile: + spsublist = await datafile.read() for subscription in spsublist: @@ -699,8 +700,9 @@ async def StatPing_Monitor(): new_spsublist.append(subscription) # Write status changes to spsublist.dat - await with open('spsublist.dat', 'w') as datafile: - await pickle.dump(new_spsublist, datafile) + async with AIOfile('spsublist.dat', 'w') as datafile: + await datafile.write(new_spsublist) + await datafile.fsync() else: print(">> spsublist.dat does not exist, nothing to do.") -- 2.39.5 From ae601c45f53192300d78d50686f18e2ef156ffa8 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 15:15:52 -0400 Subject: [PATCH 070/189] typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 3a64aa0..6aeccb4 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -16,7 +16,7 @@ from discord.utils import get from discord.voice_client import VoiceClient import requests import asyncio -from aiofile import AIOfile +from aiofiles import AIOfile #Record the time the bot started -- 2.39.5 From 8d02152697c84e719831ae3ce9103d2bde65fbd7 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 15:16:54 -0400 Subject: [PATCH 071/189] more typo fixes --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6aeccb4..bf5655a 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -16,7 +16,7 @@ from discord.utils import get from discord.voice_client import VoiceClient import requests import asyncio -from aiofiles import AIOfile +from aiofile import AIOFile #Record the time the bot started -- 2.39.5 From 5575dbb054492df4edebd95139f7aa66900c3076 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 15:18:45 -0400 Subject: [PATCH 072/189] case update --- r0b3bot.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index bf5655a..9bacab2 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -625,7 +625,7 @@ async def spsub_T(ctx, service = "NONE"): # read in data file containing list of subscriptions print(">> Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - async with AIOfile('spsublist.dat', 'rb') as datafile: + async with AIOFile('spsublist.dat', 'rb') as datafile: spsublist = await datafile.read() else: print(">> spsublist.dat does not exist, new file will be created") @@ -636,7 +636,7 @@ async def spsub_T(ctx, service = "NONE"): #Write updated array to data file print(">> Writing updated array to spsublist.dat") - async with AIOfile('spsublist.dat', 'wb') as datafile: + async with AIOFile('spsublist.dat', 'wb') as datafile: await datafile.write(spsublist) await datafile.fsync() @@ -662,7 +662,7 @@ async def StatPing_Monitor(): while True: print("Statping Monitor: Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - async with AIOfile('spsublist.dat', 'rb') as datafile: + async with AIOFile('spsublist.dat', 'rb') as datafile: spsublist = await datafile.read() for subscription in spsublist: @@ -700,7 +700,7 @@ async def StatPing_Monitor(): new_spsublist.append(subscription) # Write status changes to spsublist.dat - async with AIOfile('spsublist.dat', 'w') as datafile: + async with AIOFile('spsublist.dat', 'w') as datafile: await datafile.write(new_spsublist) await datafile.fsync() -- 2.39.5 From ca06fea13f08af7761065166349f5b0d4c4222c6 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 15:28:06 -0400 Subject: [PATCH 073/189] trying different library --- r0b3bot.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 9bacab2..6a42d2b 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -17,6 +17,7 @@ from discord.voice_client import VoiceClient import requests import asyncio from aiofile import AIOFile +import aiofiles as aiof #Record the time the bot started @@ -625,7 +626,7 @@ async def spsub_T(ctx, service = "NONE"): # read in data file containing list of subscriptions print(">> Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - async with AIOFile('spsublist.dat', 'rb') as datafile: + async with aiof.open('spsublist.dat', 'rb') as datafile: spsublist = await datafile.read() else: print(">> spsublist.dat does not exist, new file will be created") @@ -636,9 +637,10 @@ async def spsub_T(ctx, service = "NONE"): #Write updated array to data file print(">> Writing updated array to spsublist.dat") - async with AIOFile('spsublist.dat', 'wb') as datafile: + async with aiof.open('spsublist.dat', 'wb') as datafile: await datafile.write(spsublist) - await datafile.fsync() + #await datafile.fsync() + await datafile.flush() print(">> Done") await ctx.send(f"'{service_state['name']}' added to monitored services") @@ -662,7 +664,7 @@ async def StatPing_Monitor(): while True: print("Statping Monitor: Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - async with AIOFile('spsublist.dat', 'rb') as datafile: + async with aiof.open('spsublist.dat', 'rb') as datafile: spsublist = await datafile.read() for subscription in spsublist: @@ -700,9 +702,10 @@ async def StatPing_Monitor(): new_spsublist.append(subscription) # Write status changes to spsublist.dat - async with AIOFile('spsublist.dat', 'w') as datafile: + async with aiof.open('spsublist.dat', 'w') as datafile: await datafile.write(new_spsublist) - await datafile.fsync() + #await datafile.fsync() + await datafile.flush() else: print(">> spsublist.dat does not exist, nothing to do.") -- 2.39.5 From 3832d13200067fc48494badf08b1e0784e8286a2 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 20:50:38 -0400 Subject: [PATCH 074/189] saving just channel id and now appending --- r0b3bot.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6a42d2b..1e1226e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -619,7 +619,9 @@ async def spsub_T(ctx, service = "NONE"): print(f">> '{service}' exists, adding to StatPing Monitor") await ctx.send(f"'{service_state['name']}' added to monitored services") - currentsub_request.append(ctx) + currentsub_request.append(ctx.message.channel) + print(f">> channel ID: {ctx.message.channel}") + #currentsub_request.append(ctx) currentsub_request.append(service) currentsub_request.append("online") @@ -637,7 +639,7 @@ async def spsub_T(ctx, service = "NONE"): #Write updated array to data file print(">> Writing updated array to spsublist.dat") - async with aiof.open('spsublist.dat', 'wb') as datafile: + async with aiof.open('spsublist.dat', 'a') as datafile: await datafile.write(spsublist) #await datafile.fsync() await datafile.flush() @@ -664,7 +666,7 @@ async def StatPing_Monitor(): while True: print("Statping Monitor: Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - async with aiof.open('spsublist.dat', 'rb') as datafile: + async with aiof.open('spsublist.dat', 'r') as datafile: spsublist = await datafile.read() for subscription in spsublist: -- 2.39.5 From a95b88d99f1449ac1d30322e0515c353b2872cdc Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 20:52:14 -0400 Subject: [PATCH 075/189] no bytes --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 1e1226e..e2b11a6 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -628,7 +628,7 @@ async def spsub_T(ctx, service = "NONE"): # read in data file containing list of subscriptions print(">> Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - async with aiof.open('spsublist.dat', 'rb') as datafile: + async with aiof.open('spsublist.dat', 'r') as datafile: spsublist = await datafile.read() else: print(">> spsublist.dat does not exist, new file will be created") -- 2.39.5 From 2970adc6340542a03083c90c61df01edd355ba8b Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 21:08:47 -0400 Subject: [PATCH 076/189] using pickle again --- r0b3bot.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index e2b11a6..92fe5c3 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -18,6 +18,7 @@ import requests import asyncio from aiofile import AIOFile import aiofiles as aiof +import pickle #Record the time the bot started @@ -628,8 +629,9 @@ async def spsub_T(ctx, service = "NONE"): # read in data file containing list of subscriptions print(">> Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - async with aiof.open('spsublist.dat', 'r') as datafile: - spsublist = await datafile.read() + async with aiof.open('spsublist.dat', 'rb') as datafile: + pickled_spsublist = await datafile.read() + spsublist = pickle.loads(pickled_spsublist) else: print(">> spsublist.dat does not exist, new file will be created") @@ -639,7 +641,8 @@ async def spsub_T(ctx, service = "NONE"): #Write updated array to data file print(">> Writing updated array to spsublist.dat") - async with aiof.open('spsublist.dat', 'a') as datafile: + async with aiof.open('spsublist.dat', 'wb') as datafile: + pickled_spsublist = pickle.dumps(spsublist) await datafile.write(spsublist) #await datafile.fsync() await datafile.flush() @@ -666,8 +669,9 @@ async def StatPing_Monitor(): while True: print("Statping Monitor: Reading in spsublist.dat") if os.path.exists('spsublist.dat'): - async with aiof.open('spsublist.dat', 'r') as datafile: - spsublist = await datafile.read() + async with aiof.open('spsublist.dat', 'rb') as datafile: + pickled_spsublist = await datafile.read() + spsublist = pickle.loads(pickled_spsublist) for subscription in spsublist: @@ -704,7 +708,8 @@ async def StatPing_Monitor(): new_spsublist.append(subscription) # Write status changes to spsublist.dat - async with aiof.open('spsublist.dat', 'w') as datafile: + async with aiof.open('spsublist.dat', 'wb') as datafile: + pickled_spsublist = pickle.dumps(new_spsublist) await datafile.write(new_spsublist) #await datafile.fsync() await datafile.flush() -- 2.39.5 From 9af4a5292723332bd48da251bf2fe5396b793ba5 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:11:49 -0400 Subject: [PATCH 077/189] reqrote spsub_T to use/create a nested dictionary --- r0b3bot.py | 51 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 92fe5c3..b4f0311 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -16,7 +16,7 @@ from discord.utils import get from discord.voice_client import VoiceClient import requests import asyncio -from aiofile import AIOFile +#from aiofile import AIOFile import aiofiles as aiof import pickle @@ -605,40 +605,71 @@ async def spsub(ctx, service = "NONE"): @bot.command() async def spsub_T(ctx, service = "NONE"): - spsublist = [] - currentsub_request = [] + spsublist = {} # Statping Subscription list to be read in from file + # Structure of spsublist nested dictionary + # spsublist[service name][list of channel ids][a state value] + # dict = {'Plex': {'state' : 'online', 'channels' : ['1232', '43234']} + # 'Space Eingineers' : {'state' : online', 'channels' : ['2343', '54563']}} + # + currentsub_request = [] # list of elements detailing the current sub request datestring = datetime.now() datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") + print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub {service}'") + # Only work on this if the user has supplied a service name to monitor, a value of NONE + # means nothing was specified. if service != "NONE": + # Verify that the service name requested acutally exists print(f">> Querying status of '{service}' to see if it exists") service_state = await get_stp_status(service) + # If the service exists, proceed with adding it to the list. if service_state != "service not found": print(f">> '{service}' exists, adding to StatPing Monitor") await ctx.send(f"'{service_state['name']}' added to monitored services") - currentsub_request.append(ctx.message.channel) + currentsub_request.append(ctx.message.channel.id) print(f">> channel ID: {ctx.message.channel}") #currentsub_request.append(ctx) - currentsub_request.append(service) + currentsub_request.append(service_state['name']) currentsub_request.append("online") - # read in data file containing list of subscriptions + # read in data file containing dict of subscriptions print(">> Reading in spsublist.dat") if os.path.exists('spsublist.dat'): + + # Read in spsublist async with aiof.open('spsublist.dat', 'rb') as datafile: pickled_spsublist = await datafile.read() spsublist = pickle.loads(pickled_spsublist) + + for service, info in spsublist.keys(): + # service = service_names + # info = dict of service information + + if service == currentsub_request[1]: + # This service matched what the user is trying to subscribe to + # Now we need to check if this is for the same channel + for channels in service['channels']: + if channel == currentsub_request[0]: + print(">> Subscribed Already") + else: + # Append the current channel id to the list for this service + print(f">> Appending {currentsub_request[1]} to {channel}") + spsublist[service]['channels'].append(currentsub_request[1]) + else: + print(">> spsublist.dat does not exist, new file will be created") - # append new subscription to array - print(">> Appending new sub to array") - spsublist.append(currentsub_request) - + # append new subscription to dict + print(">> Creating new dictionary") + + spsublist[currentsub_request[1]]['state'] = 'online' + spsublist[currentsub_request[1]]['channels'].append(currentsub_request[0]) + #Write updated array to data file print(">> Writing updated array to spsublist.dat") async with aiof.open('spsublist.dat', 'wb') as datafile: -- 2.39.5 From 077e82bda208cc9fbe9c81728a6cdc38f984eb6e Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:28:05 -0400 Subject: [PATCH 078/189] reworked StatPing_Montor to use dict --- r0b3bot.py | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index b4f0311..5f579bb 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -669,7 +669,7 @@ async def spsub_T(ctx, service = "NONE"): spsublist[currentsub_request[1]]['state'] = 'online' spsublist[currentsub_request[1]]['channels'].append(currentsub_request[0]) - + #Write updated array to data file print(">> Writing updated array to spsublist.dat") async with aiof.open('spsublist.dat', 'wb') as datafile: @@ -694,7 +694,7 @@ async def StatPing_Monitor(): # that "spsublist.dat" exists and is not empty. This function should be called # in bot.on_ready - new_spsublist = [] + #new_spsublist = {} # read in data file containing list of subscriptions while True: @@ -704,44 +704,49 @@ async def StatPing_Monitor(): pickled_spsublist = await datafile.read() spsublist = pickle.loads(pickled_spsublist) - for subscription in spsublist: + for service, info in spsublist: + # service used to be subscription - ctx = subscription[0] - status = await get_stp_status(subscription[1]) + status = await get_stp_status(service) - if status['online'] and subscription[2] == "online": + if status['online'] and service['state'] == "online": # nothing has changed, no alert needed await asyncio.sleep(1) - elif not status['online'] and subscription[2] == "offline": + elif not status['online'] and service['state'] == "offline": # again, nothing has changed no alert needed await asyncio.sleep(1) else: - print(f"Status of {status['name']}' has changed") + + print(f"Status of {service}' has changed, notifying subscribed channels") + if status['online']: - - embed = discord.Embed(title=f"Service Alert", description=f"{status['name']} is Online!", color=0x00ff40) - await ctx.send(embed=embed) - subscription[2] = "online" + for channel in service['channels']: + ctx = bot.get_channel(channel) + embed = discord.Embed(title=f"Service Alert", description=f"{service} is Online!", color=0x00ff40) + await ctx.send(embed=embed) + spsublist[service]['state'] = 'online' elif not status['online']: - - embed = discord.Embed(title=f"Service Alert", description=f"{status['name']} is Offline!", color=0xff2200) - await ctx.send(embed=embed) - subscription[2] = "offline" + for channel in service['channels']: + ctx = bot.get_channel(channel) + embed = discord.Embed(title=f"Service Alert", description=f"{service} is Offline!", color=0xff2200) + await ctx.send(embed=embed) + spsublist[service]['state'] = 'offline' else: - - embed = discord.Embed(title=f"Service Alert", description=f"{status['name']} is in an unknown state!", color=0xffff00) - await ctx.send(embed=embed) + for channel in service['channels']: + ctx = bot.get_channel(channel) + embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) + await ctx.send(embed=embed) new_spsublist.append(subscription) # Write status changes to spsublist.dat async with aiof.open('spsublist.dat', 'wb') as datafile: - pickled_spsublist = pickle.dumps(new_spsublist) - await datafile.write(new_spsublist) + pickled_spsublist = pickle.dumps(spsublist) + await datafile.write(pickled_spsublist) #await datafile.fsync() await datafile.flush() -- 2.39.5 From 204acac19cb130f164c9c24c181b099b16c141fd Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:35:07 -0400 Subject: [PATCH 079/189] now adding key --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 5f579bb..4457de6 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -667,6 +667,7 @@ async def spsub_T(ctx, service = "NONE"): # append new subscription to dict print(">> Creating new dictionary") + spsublist[currentsub_request[1]] = '' spsublist[currentsub_request[1]]['state'] = 'online' spsublist[currentsub_request[1]]['channels'].append(currentsub_request[0]) -- 2.39.5 From e08621d31784c4b3d7672ab34b98d6ffed6fc55d Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:38:09 -0400 Subject: [PATCH 080/189] saving pickled dict --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 4457de6..c687911 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -675,7 +675,7 @@ async def spsub_T(ctx, service = "NONE"): print(">> Writing updated array to spsublist.dat") async with aiof.open('spsublist.dat', 'wb') as datafile: pickled_spsublist = pickle.dumps(spsublist) - await datafile.write(spsublist) + await datafile.write(pickled_spsublist) #await datafile.fsync() await datafile.flush() -- 2.39.5 From 7bab9a123881ebd3ef2b05f7524cb1e9bf6fa564 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:38:56 -0400 Subject: [PATCH 081/189] setting protocol to 4 --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index c687911..68d6b82 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -674,7 +674,7 @@ async def spsub_T(ctx, service = "NONE"): #Write updated array to data file print(">> Writing updated array to spsublist.dat") async with aiof.open('spsublist.dat', 'wb') as datafile: - pickled_spsublist = pickle.dumps(spsublist) + pickled_spsublist = pickle.dumps(spsublist, protocol=4) await datafile.write(pickled_spsublist) #await datafile.fsync() await datafile.flush() -- 2.39.5 From 8480215db9c7ffc3877b11d4bfe6de214b67a4e7 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:43:16 -0400 Subject: [PATCH 082/189] changing assignment --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 68d6b82..7a35dc4 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -669,7 +669,7 @@ async def spsub_T(ctx, service = "NONE"): spsublist[currentsub_request[1]] = '' spsublist[currentsub_request[1]]['state'] = 'online' - spsublist[currentsub_request[1]]['channels'].append(currentsub_request[0]) + spsublist[currentsub_request[1]]['channels'] = [f'{currentsub_request[0]}'] #Write updated array to data file print(">> Writing updated array to spsublist.dat") -- 2.39.5 From 67309f592580236d21c0d379df07e41917e1a784 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:45:26 -0400 Subject: [PATCH 083/189] adding debug output --- r0b3bot.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index 7a35dc4..1bb54b4 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -667,8 +667,11 @@ async def spsub_T(ctx, service = "NONE"): # append new subscription to dict print(">> Creating new dictionary") + print(">> Adding service") spsublist[currentsub_request[1]] = '' + print(">> Adding initial state") spsublist[currentsub_request[1]]['state'] = 'online' + print(">> Adding Channel") spsublist[currentsub_request[1]]['channels'] = [f'{currentsub_request[0]}'] #Write updated array to data file -- 2.39.5 From 84e6f8ed6d2245727c1d92e435a7654414e9c195 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:49:02 -0400 Subject: [PATCH 084/189] changing assignment --- r0b3bot.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 1bb54b4..a4a19fe 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -667,12 +667,13 @@ async def spsub_T(ctx, service = "NONE"): # append new subscription to dict print(">> Creating new dictionary") - print(">> Adding service") - spsublist[currentsub_request[1]] = '' - print(">> Adding initial state") - spsublist[currentsub_request[1]]['state'] = 'online' - print(">> Adding Channel") - spsublist[currentsub_request[1]]['channels'] = [f'{currentsub_request[0]}'] + #print(">> Adding service") + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]} + #print(">> Adding initial state") + #spsublist[currentsub_request[1]]['state'] + #spsublist[currentsub_request[1]]['state'] = 'online' + #print(">> Adding Channel") + #spsublist[currentsub_request[1]]['channels'] = [f'{currentsub_request[0]}'] #Write updated array to data file print(">> Writing updated array to spsublist.dat") -- 2.39.5 From e0d77bf82dcf6659845d119d7e6e2687898fed82 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:49:50 -0400 Subject: [PATCH 085/189] forgot closing ] --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index a4a19fe..0cbe8cb 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -668,7 +668,7 @@ async def spsub_T(ctx, service = "NONE"): print(">> Creating new dictionary") #print(">> Adding service") - spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]} + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} #print(">> Adding initial state") #spsublist[currentsub_request[1]]['state'] #spsublist[currentsub_request[1]]['state'] = 'online' -- 2.39.5 From 4a27acb4ac7ea71df5acda7612285d2988896d1c Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:53:42 -0400 Subject: [PATCH 086/189] updated for loop --- r0b3bot.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0cbe8cb..a6ced42 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -666,17 +666,10 @@ async def spsub_T(ctx, service = "NONE"): # append new subscription to dict print(">> Creating new dictionary") - - #print(">> Adding service") spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} - #print(">> Adding initial state") - #spsublist[currentsub_request[1]]['state'] - #spsublist[currentsub_request[1]]['state'] = 'online' - #print(">> Adding Channel") - #spsublist[currentsub_request[1]]['channels'] = [f'{currentsub_request[0]}'] #Write updated array to data file - print(">> Writing updated array to spsublist.dat") + print(">> Saving dictionary to spsublist.dat") async with aiof.open('spsublist.dat', 'wb') as datafile: pickled_spsublist = pickle.dumps(spsublist, protocol=4) await datafile.write(pickled_spsublist) @@ -685,8 +678,6 @@ async def spsub_T(ctx, service = "NONE"): print(">> Done") await ctx.send(f"'{service_state['name']}' added to monitored services") - - #await sp_monitor(currentsub_request) else: print(f">> '{service}' does not exist, cancelling subscription") @@ -709,7 +700,7 @@ async def StatPing_Monitor(): pickled_spsublist = await datafile.read() spsublist = pickle.loads(pickled_spsublist) - for service, info in spsublist: + for service in spsublist.keys(): # service used to be subscription status = await get_stp_status(service) -- 2.39.5 From c7216563e6f89196507fa796354644da12072403 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Sun, 12 Apr 2020 23:56:36 -0400 Subject: [PATCH 087/189] changing assignment type --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index a6ced42..50608e5 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -666,7 +666,7 @@ async def spsub_T(ctx, service = "NONE"): # append new subscription to dict print(">> Creating new dictionary") - spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : (currentsub_request[0])} #Write updated array to data file print(">> Saving dictionary to spsublist.dat") @@ -705,7 +705,7 @@ async def StatPing_Monitor(): status = await get_stp_status(service) - if status['online'] and service['state'] == "online": + if status['online'] and service['state'] == 'online': # nothing has changed, no alert needed await asyncio.sleep(1) -- 2.39.5 From 1fc96f6b3a3175155f44d3516f7e933f52b3e005 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 16:17:00 -0400 Subject: [PATCH 088/189] adding debug print --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 50608e5..84fdaac 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -704,7 +704,7 @@ async def StatPing_Monitor(): # service used to be subscription status = await get_stp_status(service) - + print(f"{service}") if status['online'] and service['state'] == 'online': # nothing has changed, no alert needed -- 2.39.5 From 3b6c82d6f58b37e8bd1396b1056cdec55c10380f Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 16:19:14 -0400 Subject: [PATCH 089/189] fixed iteration --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 84fdaac..2205aab 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -704,12 +704,12 @@ async def StatPing_Monitor(): # service used to be subscription status = await get_stp_status(service) - print(f"{service}") - if status['online'] and service['state'] == 'online': + #print(f"{service}") + if status['online'] and spsublist[service]['state'] == 'online': # nothing has changed, no alert needed await asyncio.sleep(1) - elif not status['online'] and service['state'] == "offline": + elif not status['online'] and spsublist[service]['state'] == "offline": # again, nothing has changed no alert needed await asyncio.sleep(1) -- 2.39.5 From 71231d3a9b0ef26018861080207b39a4887a2aeb Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 16:24:56 -0400 Subject: [PATCH 090/189] testing variable --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 2205aab..16b1662 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -704,7 +704,8 @@ async def StatPing_Monitor(): # service used to be subscription status = await get_stp_status(service) - #print(f"{service}") + print(f"{service}") + print(f"{spsublist[service]['state']}") if status['online'] and spsublist[service]['state'] == 'online': # nothing has changed, no alert needed -- 2.39.5 From 75121c5a792eafffcafed88309afb8155d14bb25 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 16:28:56 -0400 Subject: [PATCH 091/189] printing status varibale --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 16b1662..7956244 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -706,6 +706,7 @@ async def StatPing_Monitor(): status = await get_stp_status(service) print(f"{service}") print(f"{spsublist[service]['state']}") + print(f"{status}") if status['online'] and spsublist[service]['state'] == 'online': # nothing has changed, no alert needed -- 2.39.5 From 1e58d5017dd27c32f7ba917a7785c1be180a4f96 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 16:59:14 -0400 Subject: [PATCH 092/189] adding debug --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 7956244..d6eec5c 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -707,7 +707,7 @@ async def StatPing_Monitor(): print(f"{service}") print(f"{spsublist[service]['state']}") print(f"{status}") - if status['online'] and spsublist[service]['state'] == 'online': + if status and spsublist[service]['state'] == 'online': # nothing has changed, no alert needed await asyncio.sleep(1) @@ -805,6 +805,7 @@ async def get_stp_status(service): if spservice['name'].lower() == service: found = True + print(f"{spservice}") return spservice # Want to alert user if the service was not found -- 2.39.5 From eca6fae8979286cf28d10153ea29c8bbadb644b2 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 17:04:48 -0400 Subject: [PATCH 093/189] removed use of new_ --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index d6eec5c..90a64c4 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -739,7 +739,7 @@ async def StatPing_Monitor(): embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) await ctx.send(embed=embed) - new_spsublist.append(subscription) + #new_spsublist.append(subscription) # Write status changes to spsublist.dat async with aiof.open('spsublist.dat', 'wb') as datafile: -- 2.39.5 From 5235df22596085f912494151e3fde5843905b8ae Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 17:08:58 -0400 Subject: [PATCH 094/189] init status --- r0b3bot.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 90a64c4..814e03e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -702,7 +702,7 @@ async def StatPing_Monitor(): for service in spsublist.keys(): # service used to be subscription - + status = {} status = await get_stp_status(service) print(f"{service}") print(f"{spsublist[service]['state']}") @@ -805,7 +805,6 @@ async def get_stp_status(service): if spservice['name'].lower() == service: found = True - print(f"{spservice}") return spservice # Want to alert user if the service was not found -- 2.39.5 From 32144c5657ca0dec9be3e38663f4e7a86ccaef41 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 17:18:52 -0400 Subject: [PATCH 095/189] fixed comparison --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 814e03e..1c7af37 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -802,7 +802,7 @@ async def get_stp_status(service): for spservice in spservice_array.json(): # using lower() to eliminate any case mismatch problems - if spservice['name'].lower() == service: + if spservice['name'].lower() == service.lower(): found = True return spservice -- 2.39.5 From 9dfae705e552817786ce2b04fa0188d1f6c88923 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 17:23:42 -0400 Subject: [PATCH 096/189] now accounting for status not found response --- r0b3bot.py | 57 +++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 1c7af37..6366954 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -707,37 +707,38 @@ async def StatPing_Monitor(): print(f"{service}") print(f"{spsublist[service]['state']}") print(f"{status}") - if status and spsublist[service]['state'] == 'online': + if status != 'status not found': + if status['online'] and spsublist[service]['state'] == 'online': - # nothing has changed, no alert needed - await asyncio.sleep(1) - elif not status['online'] and spsublist[service]['state'] == "offline": - - # again, nothing has changed no alert needed - await asyncio.sleep(1) - else: - - print(f"Status of {service}' has changed, notifying subscribed channels") - - if status['online']: - for channel in service['channels']: - ctx = bot.get_channel(channel) - embed = discord.Embed(title=f"Service Alert", description=f"{service} is Online!", color=0x00ff40) - await ctx.send(embed=embed) - spsublist[service]['state'] = 'online' - - elif not status['online']: - for channel in service['channels']: - ctx = bot.get_channel(channel) - embed = discord.Embed(title=f"Service Alert", description=f"{service} is Offline!", color=0xff2200) - await ctx.send(embed=embed) - spsublist[service]['state'] = 'offline' + # nothing has changed, no alert needed + await asyncio.sleep(1) + elif not status['online'] and spsublist[service]['state'] == "offline": + # again, nothing has changed no alert needed + await asyncio.sleep(1) else: - for channel in service['channels']: - ctx = bot.get_channel(channel) - embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) - await ctx.send(embed=embed) + + print(f"Status of {service}' has changed, notifying subscribed channels") + + if status['online']: + for channel in service['channels']: + ctx = bot.get_channel(channel) + embed = discord.Embed(title=f"Service Alert", description=f"{service} is Online!", color=0x00ff40) + await ctx.send(embed=embed) + spsublist[service]['state'] = 'online' + + elif not status['online']: + for channel in service['channels']: + ctx = bot.get_channel(channel) + embed = discord.Embed(title=f"Service Alert", description=f"{service} is Offline!", color=0xff2200) + await ctx.send(embed=embed) + spsublist[service]['state'] = 'offline' + + else: + for channel in service['channels']: + ctx = bot.get_channel(channel) + embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) + await ctx.send(embed=embed) #new_spsublist.append(subscription) -- 2.39.5 From f94f69aa59efdbe45a53a8b6677df1f8114d23db Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:10:38 -0400 Subject: [PATCH 097/189] change debug --- r0b3bot.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6366954..b5448cb 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -704,9 +704,8 @@ async def StatPing_Monitor(): # service used to be subscription status = {} status = await get_stp_status(service) - print(f"{service}") - print(f"{spsublist[service]['state']}") - print(f"{status}") + print(f"{service} Online: {status['online']}") + print(f" Previous state: {spsublist[service]['state']}") if status != 'status not found': if status['online'] and spsublist[service]['state'] == 'online': -- 2.39.5 From 153bc39e63f78b9c2bf5451b902fcf75b74ffb50 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:18:38 -0400 Subject: [PATCH 098/189] moved to single line --- r0b3bot.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index b5448cb..0dc6be4 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -702,10 +702,8 @@ async def StatPing_Monitor(): for service in spsublist.keys(): # service used to be subscription - status = {} status = await get_stp_status(service) - print(f"{service} Online: {status['online']}") - print(f" Previous state: {spsublist[service]['state']}") + print(f"{service} Online: {status['online']} | Previous state of 'online': {spsublist['online']}") if status != 'status not found': if status['online'] and spsublist[service]['state'] == 'online': -- 2.39.5 From e1327961b6f65730374dca93cb033ebc196fdd01 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:19:44 -0400 Subject: [PATCH 099/189] fixed --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0dc6be4..45b7c19 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -703,7 +703,7 @@ async def StatPing_Monitor(): for service in spsublist.keys(): # service used to be subscription status = await get_stp_status(service) - print(f"{service} Online: {status['online']} | Previous state of 'online': {spsublist['online']}") + print(f"{service} Online: {status['online']} | Previous state of 'online': {spsublist[service]['online']}") if status != 'status not found': if status['online'] and spsublist[service]['state'] == 'online': -- 2.39.5 From 0544d870e70b191e427e86a7e6bfd4bb6a316ae2 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:22:27 -0400 Subject: [PATCH 100/189] fixed call --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 45b7c19..d73f94e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -703,7 +703,7 @@ async def StatPing_Monitor(): for service in spsublist.keys(): # service used to be subscription status = await get_stp_status(service) - print(f"{service} Online: {status['online']} | Previous state of 'online': {spsublist[service]['online']}") + print(f"{service} Online: {status['online']} | Previous state of 'online': {spsublist[service]['state']}") if status != 'status not found': if status['online'] and spsublist[service]['state'] == 'online': -- 2.39.5 From 6a469832935a8b827551d46fb25331172c2e3b2d Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:23:09 -0400 Subject: [PATCH 101/189] changed wording for clarity --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index d73f94e..5e401bb 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -703,7 +703,7 @@ async def StatPing_Monitor(): for service in spsublist.keys(): # service used to be subscription status = await get_stp_status(service) - print(f"{service} Online: {status['online']} | Previous state of 'online': {spsublist[service]['state']}") + print(f"{service} Online: {status['online']} | Previous state: {spsublist[service]['state']}") if status != 'status not found': if status['online'] and spsublist[service]['state'] == 'online': -- 2.39.5 From 91def4cd4dc7b1210fddbd45e045cc4825baa57e Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:26:47 -0400 Subject: [PATCH 102/189] working on fixing iterations --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 5e401bb..295913f 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -631,7 +631,7 @@ async def spsub_T(ctx, service = "NONE"): print(f">> '{service}' exists, adding to StatPing Monitor") await ctx.send(f"'{service_state['name']}' added to monitored services") currentsub_request.append(ctx.message.channel.id) - print(f">> channel ID: {ctx.message.channel}") + print(f">> channel ID: {ctx.message.channel.id}") #currentsub_request.append(ctx) currentsub_request.append(service_state['name']) currentsub_request.append("online") @@ -645,11 +645,11 @@ async def spsub_T(ctx, service = "NONE"): pickled_spsublist = await datafile.read() spsublist = pickle.loads(pickled_spsublist) - for service, info in spsublist.keys(): + for service in spsublist.keys(): # service = service_names # info = dict of service information - if service == currentsub_request[1]: + if service.lower() == currentsub_request[1].lower(): # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel for channels in service['channels']: -- 2.39.5 From 64d80c79acaa1dc5725735b0c3c99fff161c922a Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:31:11 -0400 Subject: [PATCH 103/189] change to ctx.channel --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 295913f..24d8527 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -631,7 +631,7 @@ async def spsub_T(ctx, service = "NONE"): print(f">> '{service}' exists, adding to StatPing Monitor") await ctx.send(f"'{service_state['name']}' added to monitored services") currentsub_request.append(ctx.message.channel.id) - print(f">> channel ID: {ctx.message.channel.id}") + print(f">> channel ID: {ctx.channel.id}") #currentsub_request.append(ctx) currentsub_request.append(service_state['name']) currentsub_request.append("online") -- 2.39.5 From d9883b6f97fe9b4ca6c8720cf4338a687c724548 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:33:45 -0400 Subject: [PATCH 104/189] fixing iteration --- r0b3bot.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 24d8527..f6f4aa3 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -630,7 +630,7 @@ async def spsub_T(ctx, service = "NONE"): print(f">> '{service}' exists, adding to StatPing Monitor") await ctx.send(f"'{service_state['name']}' added to monitored services") - currentsub_request.append(ctx.message.channel.id) + currentsub_request.append(ctx.channel.id) print(f">> channel ID: {ctx.channel.id}") #currentsub_request.append(ctx) currentsub_request.append(service_state['name']) @@ -646,13 +646,12 @@ async def spsub_T(ctx, service = "NONE"): spsublist = pickle.loads(pickled_spsublist) for service in spsublist.keys(): - # service = service_names - # info = dict of service information + if service.lower() == currentsub_request[1].lower(): # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel - for channels in service['channels']: + for channels in spsublist[service]['channels']: if channel == currentsub_request[0]: print(">> Subscribed Already") else: -- 2.39.5 From a265de4a628ad9314df46c78ba59c226411e7504 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:34:44 -0400 Subject: [PATCH 105/189] fixing typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index f6f4aa3..8d878c7 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -651,7 +651,7 @@ async def spsub_T(ctx, service = "NONE"): if service.lower() == currentsub_request[1].lower(): # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel - for channels in spsublist[service]['channels']: + for channel in spsublist[service]['channels']: if channel == currentsub_request[0]: print(">> Subscribed Already") else: -- 2.39.5 From 861397b4559a3809dd39de912bc58f4ffe0ea1b2 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:41:11 -0400 Subject: [PATCH 106/189] fixing append --- r0b3bot.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 8d878c7..419f8ac 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -647,17 +647,19 @@ async def spsub_T(ctx, service = "NONE"): for service in spsublist.keys(): - if service.lower() == currentsub_request[1].lower(): # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel + found_channel = False for channel in spsublist[service]['channels']: if channel == currentsub_request[0]: - print(">> Subscribed Already") - else: - # Append the current channel id to the list for this service - print(f">> Appending {currentsub_request[1]} to {channel}") - spsublist[service]['channels'].append(currentsub_request[1]) + print(f">> This channel is already subscribed to {service}") + found_channel = True + break + if not found_channel: + # Append the current channel id to the list for this service + print(f">> Appending {currentsub_request[1]} to {channel}") + spsublist[service]['channels'].append(currentsub_request[1]) else: @@ -676,7 +678,7 @@ async def spsub_T(ctx, service = "NONE"): await datafile.flush() print(">> Done") - await ctx.send(f"'{service_state['name']}' added to monitored services") + #await ctx.send(f"'{service_state['name']}' added to monitored services") else: print(f">> '{service}' does not exist, cancelling subscription") -- 2.39.5 From d58c7245e7272ee972b5f3b72dc068b4bb2ee822 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:50:25 -0400 Subject: [PATCH 107/189] clearing up console output --- r0b3bot.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 419f8ac..9edaa14 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -628,13 +628,15 @@ async def spsub_T(ctx, service = "NONE"): # If the service exists, proceed with adding it to the list. if service_state != "service not found": - print(f">> '{service}' exists, adding to StatPing Monitor") - await ctx.send(f"'{service_state['name']}' added to monitored services") + print(f">> '{service}' is a valid service on StatPing.") + print(f">> Checking if it has already been subscribed to" + #await ctx.send(f"'{service_state['name']}' added to monitored services") currentsub_request.append(ctx.channel.id) - print(f">> channel ID: {ctx.channel.id}") - #currentsub_request.append(ctx) currentsub_request.append(service_state['name']) currentsub_request.append("online") + print(f">> Channel ID: {currentsub_request[0]}") + print(f">> Service Name: {currentsub_request[1]}") + print(f">> Initial State to set: {currentsub_request[2]}") # read in data file containing dict of subscriptions print(">> Reading in spsublist.dat") @@ -647,6 +649,7 @@ async def spsub_T(ctx, service = "NONE"): for service in spsublist.keys(): + print(f">> Found {service} in data file, checking for channel") if service.lower() == currentsub_request[1].lower(): # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel -- 2.39.5 From 1e62920925eab5a0c25a26f6e1aca893f38e565d Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:51:09 -0400 Subject: [PATCH 108/189] typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 9edaa14..cd47ed2 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -629,7 +629,7 @@ async def spsub_T(ctx, service = "NONE"): if service_state != "service not found": print(f">> '{service}' is a valid service on StatPing.") - print(f">> Checking if it has already been subscribed to" + print(f">> Checking if it has already been subscribed to") #await ctx.send(f"'{service_state['name']}' added to monitored services") currentsub_request.append(ctx.channel.id) currentsub_request.append(service_state['name']) -- 2.39.5 From 85cf5f5ce55592b5522311e720aa1019245c6df4 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:53:08 -0400 Subject: [PATCH 109/189] added confirmation message --- r0b3bot.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index cd47ed2..30ecd28 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -671,6 +671,8 @@ async def spsub_T(ctx, service = "NONE"): # append new subscription to dict print(">> Creating new dictionary") spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : (currentsub_request[0])} + print(f">> {service} subscription has been saved") + await ctx.send(f"{service} has been added to monitored services for this channel") #Write updated array to data file print(">> Saving dictionary to spsublist.dat") -- 2.39.5 From fa2fb34e4127bb168605dc6b1df1bea847968ef4 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 18:56:24 -0400 Subject: [PATCH 110/189] moved print --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 30ecd28..c1a3341 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -649,10 +649,10 @@ async def spsub_T(ctx, service = "NONE"): for service in spsublist.keys(): - print(f">> Found {service} in data file, checking for channel") if service.lower() == currentsub_request[1].lower(): # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel + print(f">> Found {service} in data file, checking for channel") found_channel = False for channel in spsublist[service]['channels']: if channel == currentsub_request[0]: -- 2.39.5 From f026c88817039d6b3454909191dc00f5bd82f0d8 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 19:00:27 -0400 Subject: [PATCH 111/189] change how saving channel --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index c1a3341..93583c1 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -670,7 +670,7 @@ async def spsub_T(ctx, service = "NONE"): # append new subscription to dict print(">> Creating new dictionary") - spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : (currentsub_request[0])} + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : (f"{currentsub_request[0]}")} print(f">> {service} subscription has been saved") await ctx.send(f"{service} has been added to monitored services for this channel") -- 2.39.5 From 238bb9f5ea387686bb952414809c86df28a3be36 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 19:55:48 -0400 Subject: [PATCH 112/189] fixing dict creation --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 93583c1..75ea40b 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -670,7 +670,7 @@ async def spsub_T(ctx, service = "NONE"): # append new subscription to dict print(">> Creating new dictionary") - spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : (f"{currentsub_request[0]}")} + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} print(f">> {service} subscription has been saved") await ctx.send(f"{service} has been added to monitored services for this channel") -- 2.39.5 From f82227ea0db0d5b79be1fec8004dedd4971e2c11 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 19:57:56 -0400 Subject: [PATCH 113/189] adding notice to channel of duplicate --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 75ea40b..89a74f5 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -657,6 +657,7 @@ async def spsub_T(ctx, service = "NONE"): for channel in spsublist[service]['channels']: if channel == currentsub_request[0]: print(f">> This channel is already subscribed to {service}") + await ctx.send(f"This channel is already subscribed to {service} alerts") found_channel = True break if not found_channel: -- 2.39.5 From 1a204d303b33915e861bf991cff9d37e1c70e749 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:02:47 -0400 Subject: [PATCH 114/189] fixing iteration --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 89a74f5..b4f4c95 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -725,21 +725,21 @@ async def StatPing_Monitor(): print(f"Status of {service}' has changed, notifying subscribed channels") if status['online']: - for channel in service['channels']: + for channel in spsublist[service]['channels']: ctx = bot.get_channel(channel) embed = discord.Embed(title=f"Service Alert", description=f"{service} is Online!", color=0x00ff40) await ctx.send(embed=embed) spsublist[service]['state'] = 'online' elif not status['online']: - for channel in service['channels']: + for channel in spsublist[service]['channels']: ctx = bot.get_channel(channel) embed = discord.Embed(title=f"Service Alert", description=f"{service} is Offline!", color=0xff2200) await ctx.send(embed=embed) spsublist[service]['state'] = 'offline' else: - for channel in service['channels']: + for channel in spsublist[service]['channels']: ctx = bot.get_channel(channel) embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) await ctx.send(embed=embed) -- 2.39.5 From 132267f5d4e1ba504c1f0c6b0863433e0b601347 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:05:03 -0400 Subject: [PATCH 115/189] adding more console output, fixed missing ' --- r0b3bot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index b4f4c95..0883dc2 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -710,7 +710,7 @@ async def StatPing_Monitor(): for service in spsublist.keys(): # service used to be subscription status = await get_stp_status(service) - print(f"{service} Online: {status['online']} | Previous state: {spsublist[service]['state']}") + print(f">> {service} Online: {status['online']} | Previous state: {spsublist[service]['state']}") if status != 'status not found': if status['online'] and spsublist[service]['state'] == 'online': @@ -722,7 +722,7 @@ async def StatPing_Monitor(): await asyncio.sleep(1) else: - print(f"Status of {service}' has changed, notifying subscribed channels") + print(f">> Status of '{service}' has changed, notifying subscribed channels") if status['online']: for channel in spsublist[service]['channels']: @@ -743,6 +743,7 @@ async def StatPing_Monitor(): ctx = bot.get_channel(channel) embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) await ctx.send(embed=embed) + print(">> Done") #new_spsublist.append(subscription) -- 2.39.5 From 98cf67381bbd78061256a333473ab269eeda74a1 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:07:28 -0400 Subject: [PATCH 116/189] adding response --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0883dc2..deb71db 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -662,7 +662,8 @@ async def spsub_T(ctx, service = "NONE"): break if not found_channel: # Append the current channel id to the list for this service - print(f">> Appending {currentsub_request[1]} to {channel}") + print(f">> Adding serivce '{currentsub_request[1]}' to {channel}") + await ctx.send(f"{service} has been added to monitored services for this channel") spsublist[service]['channels'].append(currentsub_request[1]) else: -- 2.39.5 From b26139fdac0c2958f4cef0550ab25e41fa859bb0 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:13:41 -0400 Subject: [PATCH 117/189] fixing append of channel id --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index deb71db..16ddaf7 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -664,7 +664,7 @@ async def spsub_T(ctx, service = "NONE"): # Append the current channel id to the list for this service print(f">> Adding serivce '{currentsub_request[1]}' to {channel}") await ctx.send(f"{service} has been added to monitored services for this channel") - spsublist[service]['channels'].append(currentsub_request[1]) + spsublist[service]['channels'].append(currentsub_request[0]) else: -- 2.39.5 From ce319f8696f3351cb3f94bb62b011b6b715cd342 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:38:29 -0400 Subject: [PATCH 118/189] added spsub- list --- r0b3bot.py | 52 ++++++++++++++++++++++------------------------------ 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 16ddaf7..ae8fba0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -574,37 +574,10 @@ async def spalert(ctx, service = "NONE"): await ctx.send("Please speficy a service name to query.") - + @bot.command() async def spsub(ctx, service = "NONE"): - currentsub_request = [] - datestring = datetime.now() - datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") - print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub {service}'") - - if service != "NONE": - - print(f"Querying status of '{service}' to see if it exists") - service_state = await get_stp_status(service) - - if service_state != "service not found": - - print(f"'{service}' exists, starting monitor") - await ctx.send(f"'{service_state['name']}' added to monitored services") - currentsub_request.append(ctx) - currentsub_request.append(service) - currentsub_request.append("online") - - await sp_monitor(currentsub_request) - - else: - print(f"'{service}' does not exist, cancelling subscription") - await ctx.send(f"{service} was not found") - -@bot.command() -async def spsub_T(ctx, service = "NONE"): - spsublist = {} # Statping Subscription list to be read in from file # Structure of spsublist nested dictionary # spsublist[service name][list of channel ids][a state value] @@ -618,15 +591,34 @@ async def spsub_T(ctx, service = "NONE"): print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub {service}'") # Only work on this if the user has supplied a service name to monitor, a value of NONE - # means nothing was specified. + # means nothing was specified if service != "NONE": + if service == "-list": + # List the serivces that this channel is subscribed to + # Read in spsublist + sublist = '' + async with aiof.open('spsublist.dat', 'rb') as datafile: + pickled_spsublist = await datafile.read() + spsublist = pickle.loads(pickled_spsublist) + + for service in spsublist.keys(): + + for channel in spsublist[service]['channels']: + if channel == ctx.channel.id: + sublist += f"'{service}' " + + await ctx.send(f"This channel is subscribed to: {sublist}") + + elif service.startswith('-del '): + # Delete the service from this channels subscriptions + # Verify that the service name requested acutally exists print(f">> Querying status of '{service}' to see if it exists") service_state = await get_stp_status(service) # If the service exists, proceed with adding it to the list. - if service_state != "service not found": + elif if service_state != "service not found": print(f">> '{service}' is a valid service on StatPing.") print(f">> Checking if it has already been subscribed to") -- 2.39.5 From be04db6237cf62b46926fddeb729463687a5f3b2 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:39:06 -0400 Subject: [PATCH 119/189] fixing indents --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index ae8fba0..038614c 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -613,9 +613,9 @@ async def spsub(ctx, service = "NONE"): elif service.startswith('-del '): # Delete the service from this channels subscriptions - # Verify that the service name requested acutally exists - print(f">> Querying status of '{service}' to see if it exists") - service_state = await get_stp_status(service) + # Verify that the service name requested acutally exists + print(f">> Querying status of '{service}' to see if it exists") + service_state = await get_stp_status(service) # If the service exists, proceed with adding it to the list. elif if service_state != "service not found": -- 2.39.5 From 10baa139a1e5582a96f37476f8e91a2d2f73685c Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:39:35 -0400 Subject: [PATCH 120/189] fix statement --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 038614c..d757b0f 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -618,7 +618,7 @@ async def spsub(ctx, service = "NONE"): service_state = await get_stp_status(service) # If the service exists, proceed with adding it to the list. - elif if service_state != "service not found": + elif service_state != "service not found": print(f">> '{service}' is a valid service on StatPing.") print(f">> Checking if it has already been subscribed to") -- 2.39.5 From d97a2d1fe304e264076a3e69ae2aad22da63402c Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:43:51 -0400 Subject: [PATCH 121/189] need to query before use --- r0b3bot.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index d757b0f..faac523 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -592,6 +592,11 @@ async def spsub(ctx, service = "NONE"): # Only work on this if the user has supplied a service name to monitor, a value of NONE # means nothing was specified + if service != "NONE" and service != "-list" and not service.startswith('-del '): + + print(f">> Querying status of '{service}' to see if it exists") + service_state = await get_stp_status(service) + if service != "NONE": if service == "-list": @@ -613,10 +618,6 @@ async def spsub(ctx, service = "NONE"): elif service.startswith('-del '): # Delete the service from this channels subscriptions - # Verify that the service name requested acutally exists - print(f">> Querying status of '{service}' to see if it exists") - service_state = await get_stp_status(service) - # If the service exists, proceed with adding it to the list. elif service_state != "service not found": -- 2.39.5 From 4c43ab0e8ea73b7294ca0946051641ab8b8099f4 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:44:33 -0400 Subject: [PATCH 122/189] added placeholder --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index faac523..3da8d3e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -617,7 +617,8 @@ async def spsub(ctx, service = "NONE"): elif service.startswith('-del '): # Delete the service from this channels subscriptions - + print("placeholder") + # If the service exists, proceed with adding it to the list. elif service_state != "service not found": -- 2.39.5 From a709f25ea3145f7a0db42f206c0f68ca49b8b92e Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:48:37 -0400 Subject: [PATCH 123/189] added consonle output --- r0b3bot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 3da8d3e..2e80821 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -618,7 +618,7 @@ async def spsub(ctx, service = "NONE"): elif service.startswith('-del '): # Delete the service from this channels subscriptions print("placeholder") - + # If the service exists, proceed with adding it to the list. elif service_state != "service not found": @@ -633,9 +633,10 @@ async def spsub(ctx, service = "NONE"): print(f">> Initial State to set: {currentsub_request[2]}") # read in data file containing dict of subscriptions - print(">> Reading in spsublist.dat") + print(">> Checking for spsublist.dat") if os.path.exists('spsublist.dat'): + print(">> Data file exists, reading it in.") # Read in spsublist async with aiof.open('spsublist.dat', 'rb') as datafile: pickled_spsublist = await datafile.read() -- 2.39.5 From eeae88595d3b7110a7f3025637184b1bbb3d8a20 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:52:30 -0400 Subject: [PATCH 124/189] adding more console output --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 2e80821..c1c8d78 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -642,8 +642,9 @@ async def spsub(ctx, service = "NONE"): pickled_spsublist = await datafile.read() spsublist = pickle.loads(pickled_spsublist) + print(f">> Checking if serivce is already in datafile") for service in spsublist.keys(): - + print(f">> Does {service.lower()} == {currentsub_request[1].lower()}") if service.lower() == currentsub_request[1].lower(): # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel -- 2.39.5 From 824c952ad97f0ed5ef4895f812e118272a5b44f3 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:54:17 -0400 Subject: [PATCH 125/189] moved statement outside of loop --- r0b3bot.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index c1c8d78..6edf90e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -656,11 +656,11 @@ async def spsub(ctx, service = "NONE"): await ctx.send(f"This channel is already subscribed to {service} alerts") found_channel = True break - if not found_channel: - # Append the current channel id to the list for this service - print(f">> Adding serivce '{currentsub_request[1]}' to {channel}") - await ctx.send(f"{service} has been added to monitored services for this channel") - spsublist[service]['channels'].append(currentsub_request[0]) + if not found_channel: + # Append the current channel id to the list for this service + print(f">> Adding serivce '{currentsub_request[1]}' to {channel}") + await ctx.send(f"{service} has been added to monitored services for this channel") + spsublist[service]['channels'].append(currentsub_request[0]) else: -- 2.39.5 From 576f21b6fca8a0d4791ff479d08fbea11419ecee Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:58:36 -0400 Subject: [PATCH 126/189] was not handling when serivce was not present in file --- r0b3bot.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6edf90e..0479b03 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -645,7 +645,9 @@ async def spsub(ctx, service = "NONE"): print(f">> Checking if serivce is already in datafile") for service in spsublist.keys(): print(f">> Does {service.lower()} == {currentsub_request[1].lower()}") + found_service = False if service.lower() == currentsub_request[1].lower(): + found_service = True # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel print(f">> Found {service} in data file, checking for channel") @@ -656,7 +658,13 @@ async def spsub(ctx, service = "NONE"): await ctx.send(f"This channel is already subscribed to {service} alerts") found_channel = True break - if not found_channel: + if not found_channel: + # Append the current channel id to the list for this service + print(f">> Adding serivce '{currentsub_request[1]}' to {channel}") + await ctx.send(f"{service} has been added to monitored services for this channel") + spsublist[service]['channels'].append(currentsub_request[0]) + + if not found_service: # Append the current channel id to the list for this service print(f">> Adding serivce '{currentsub_request[1]}' to {channel}") await ctx.send(f"{service} has been added to monitored services for this channel") -- 2.39.5 From 0bf0134a8645e35fcbd33be291fb8c89e9a02b8b Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 20:59:54 -0400 Subject: [PATCH 127/189] changin variable --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0479b03..d1a7d9f 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -666,7 +666,7 @@ async def spsub(ctx, service = "NONE"): if not found_service: # Append the current channel id to the list for this service - print(f">> Adding serivce '{currentsub_request[1]}' to {channel}") + print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{service} has been added to monitored services for this channel") spsublist[service]['channels'].append(currentsub_request[0]) -- 2.39.5 From 6df3f8a55f1c3fd6a0a9015069f8164f66e589eb Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:01:16 -0400 Subject: [PATCH 128/189] doing it wrong --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index d1a7d9f..2d74a85 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -668,7 +668,8 @@ async def spsub(ctx, service = "NONE"): # Append the current channel id to the list for this service print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{service} has been added to monitored services for this channel") - spsublist[service]['channels'].append(currentsub_request[0]) + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + #spsublist[service]['channels'].append(currentsub_request[0]) else: -- 2.39.5 From cc903753767ed819009bd010e78354fc66cdf0ec Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:05:02 -0400 Subject: [PATCH 129/189] using .update to append --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 2d74a85..c089675 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -668,7 +668,7 @@ async def spsub(ctx, service = "NONE"): # Append the current channel id to the list for this service print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{service} has been added to monitored services for this channel") - spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + spsublist.update([currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]}) #spsublist[service]['channels'].append(currentsub_request[0]) else: -- 2.39.5 From c9c67f32c97f48984726a3ac4f2c87807ed72da7 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:05:53 -0400 Subject: [PATCH 130/189] typo? --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index c089675..e7cc572 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -668,7 +668,7 @@ async def spsub(ctx, service = "NONE"): # Append the current channel id to the list for this service print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{service} has been added to monitored services for this channel") - spsublist.update([currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]}) + spsublist.update(currentsub_request[1] = {'state' : 'online', 'channels' : [currentsub_request[0]]}) #spsublist[service]['channels'].append(currentsub_request[0]) else: -- 2.39.5 From 9036557154000b40d35ece2794765380c42adedd Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:08:32 -0400 Subject: [PATCH 131/189] trying a different method --- r0b3bot.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index e7cc572..cee1726 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -668,7 +668,9 @@ async def spsub(ctx, service = "NONE"): # Append the current channel id to the list for this service print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{service} has been added to monitored services for this channel") - spsublist.update(currentsub_request[1] = {'state' : 'online', 'channels' : [currentsub_request[0]]}) + newsub = {} + newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + spsublist.update(newsub) #spsublist[service]['channels'].append(currentsub_request[0]) else: -- 2.39.5 From 87f82af6975d0938a16312a8f3dad15da0538260 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:18:17 -0400 Subject: [PATCH 132/189] ugh --- r0b3bot.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index cee1726..877d3e0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -668,10 +668,9 @@ async def spsub(ctx, service = "NONE"): # Append the current channel id to the list for this service print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{service} has been added to monitored services for this channel") - newsub = {} - newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} - spsublist.update(newsub) - #spsublist[service]['channels'].append(currentsub_request[0]) + #newsub = {} + #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + spsublist.update(currentsub_request[1] = {'state' : 'online', 'channels' : [currentsub_request[0]]}) else: -- 2.39.5 From bf2ac43a882fc03384b245963dea5336831df07d Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:18:50 -0400 Subject: [PATCH 133/189] typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 877d3e0..0cf02b4 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -670,7 +670,7 @@ async def spsub(ctx, service = "NONE"): await ctx.send(f"{service} has been added to monitored services for this channel") #newsub = {} #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} - spsublist.update(currentsub_request[1] = {'state' : 'online', 'channels' : [currentsub_request[0]]}) + spsublist.update(currentsub_request[1] = {'state' : 'online', 'channels' : [currentsub_request[0]}) else: -- 2.39.5 From f051fe0087d40ae79234cd443927e3cf01d83a60 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:20:01 -0400 Subject: [PATCH 134/189] undo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0cf02b4..877d3e0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -670,7 +670,7 @@ async def spsub(ctx, service = "NONE"): await ctx.send(f"{service} has been added to monitored services for this channel") #newsub = {} #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} - spsublist.update(currentsub_request[1] = {'state' : 'online', 'channels' : [currentsub_request[0]}) + spsublist.update(currentsub_request[1] = {'state' : 'online', 'channels' : [currentsub_request[0]]}) else: -- 2.39.5 From c16fb46b785e1105a834f720d546047512168d01 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:24:13 -0400 Subject: [PATCH 135/189] does this work? --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 877d3e0..738fac4 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -670,7 +670,7 @@ async def spsub(ctx, service = "NONE"): await ctx.send(f"{service} has been added to monitored services for this channel") #newsub = {} #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} - spsublist.update(currentsub_request[1] = {'state' : 'online', 'channels' : [currentsub_request[0]]}) + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]}) else: -- 2.39.5 From 0e393b089fe6dae3fcc9a634a6ae21ccda64badd Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:25:32 -0400 Subject: [PATCH 136/189] typo --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 738fac4..ad11e9b 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -670,7 +670,7 @@ async def spsub(ctx, service = "NONE"): await ctx.send(f"{service} has been added to monitored services for this channel") #newsub = {} #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} - spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]}) + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} else: -- 2.39.5 From d85149e5f197b0f9d426c2f1f5f74215dc5f97e8 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:29:41 -0400 Subject: [PATCH 137/189] seriously if this was it... ugh --- r0b3bot.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index ad11e9b..59f0f10 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -664,13 +664,13 @@ async def spsub(ctx, service = "NONE"): await ctx.send(f"{service} has been added to monitored services for this channel") spsublist[service]['channels'].append(currentsub_request[0]) - if not found_service: - # Append the current channel id to the list for this service - print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") - await ctx.send(f"{service} has been added to monitored services for this channel") - #newsub = {} - #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} - spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + if not found_service: + # Append the current channel id to the list for this service + print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") + await ctx.send(f"{service} has been added to monitored services for this channel") + #newsub = {} + #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} else: -- 2.39.5 From 7e9be22734e8aac472f9f4049d74d024e16ed31f Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:32:31 -0400 Subject: [PATCH 138/189] changed spalert to spstatus --- r0b3bot.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 59f0f10..05f2752 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -550,7 +550,7 @@ async def info(ctx): bot.remove_command('help') @bot.command() -async def spalert(ctx, service = "NONE"): +async def spstatus(ctx, service = "NONE"): #async def spalert(ctx, cmd = "NONE", arg = "NONE"): # if cmd != "NONE": @@ -619,6 +619,7 @@ async def spsub(ctx, service = "NONE"): # Delete the service from this channels subscriptions print("placeholder") + # If the service exists, proceed with adding it to the list. elif service_state != "service not found": @@ -844,7 +845,7 @@ async def help(ctx): embed.add_field(name="$info", value="Gives a little info about the bot", inline=False) embed.add_field(name="$help", value="Gives this message", inline=False) embed.add_field(name="$last_error", value="Will display the real error message the bot has last encountered for additional debugging info") - embed.add_field(name="$spalert servicename", value="Retrieves status of service from StatPing") + embed.add_field(name="$spstatus servicename", value="Retrieves status of service from StatPing") await ctx.send(embed=embed) embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") -- 2.39.5 From 4ec07fdf7744a179477348d86e1666489480c4b7 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:34:45 -0400 Subject: [PATCH 139/189] changed info command prefix to variable --- r0b3bot.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 05f2752..e8b4d31 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -829,23 +829,23 @@ async def get_stp_status(service): @bot.command() async def help(ctx): embed = discord.Embed(title="R0b3BOT", description="List of commands are:", color=0xeee657) - embed.add_field(name="$printstat", value="Uploads a snapshot of Rich's 3D printer and current stats", inline=False) - embed.add_field(name="$explain", value="Displays Dalek EXPLAIN gif", inline=False) - embed.add_field(name="$holyshit", value="Displays Marty McFly HOLY SHIT gif", inline=False) - embed.add_field(name="$greetings", value="Gives a nice greet message", inline=False) - embed.add_field(name="$cat", value="Gives a cute cat gif to lighten up the mood.", inline=False) - embed.add_field(name="$bitch @member", value="Plays clip of BigEric420 saying 'maybe you shouldn't be such a bitch.mp3'", inline=False) - embed.add_field(name="$boom @member", value="Plays 'Boom Bitch' sound clip", inline=False) - embed.add_field(name="$cowbell @member", value="Plays 'SNL More Cowbell' sound clip", inline=False) - embed.add_field(name="$oops @member", value="Plays 'Oops.mp3'", inline=False) - embed.add_field(name="$promoted @member", value="Plays Battlefield Friends 'PROMOTED!' sound clip", inline=False) - embed.add_field(name="$trololo @member", value="Plays a clip of Trololo song", inline=False) - embed.add_field(name="$leeroy @member", value="Plays Leeeerrroooyyy Jenkins clip", inline=False) - embed.add_field(name="$eia @member", value="Plays 'Everything is Awesome' song clip") - embed.add_field(name="$info", value="Gives a little info about the bot", inline=False) - embed.add_field(name="$help", value="Gives this message", inline=False) - embed.add_field(name="$last_error", value="Will display the real error message the bot has last encountered for additional debugging info") - embed.add_field(name="$spstatus servicename", value="Retrieves status of service from StatPing") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}printstat", value="Uploads a snapshot of Rich's 3D printer and current stats", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}explain", value="Displays Dalek EXPLAIN gif", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}holyshit", value="Displays Marty McFly HOLY SHIT gif", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}greetings", value="Gives a nice greet message", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}cat", value="Gives a cute cat gif to lighten up the mood.", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}bitch @member", value="Plays clip of BigEric420 saying 'maybe you shouldn't be such a bitch.mp3'", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}boom @member", value="Plays 'Boom Bitch' sound clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}cowbell @member", value="Plays 'SNL More Cowbell' sound clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}oops @member", value="Plays 'Oops.mp3'", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}promoted @member", value="Plays Battlefield Friends 'PROMOTED!' sound clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}trololo @member", value="Plays a clip of Trololo song", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}leeroy @member", value="Plays Leeeerrroooyyy Jenkins clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}eia @member", value="Plays 'Everything is Awesome' song clip") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}info", value="Gives a little info about the bot", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}help", value="Gives this message", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}last_error", value="Will display the real error message the bot has last encountered for additional debugging info") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}spstatus servicename", value="Retrieves status of service from StatPing") await ctx.send(embed=embed) embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") -- 2.39.5 From 8f9af7d10c70e255870ee81471fc20303eb93bfc Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:48:57 -0400 Subject: [PATCH 140/189] addd -del option --- r0b3bot.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index e8b4d31..75cca0b 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -618,7 +618,30 @@ async def spsub(ctx, service = "NONE"): elif service.startswith('-del '): # Delete the service from this channels subscriptions print("placeholder") + service_toremove = service[5:] + print(f"{service_toremove}") + async with aiof.open('spsublist.dat', 'rb') as datafile: + pickled_spsublist = await datafile.read() + spsublist = pickle.loads(pickled_spsublist) + + found_service = False + for service in spsublist.keys(): + + if service.lower() == service_toremove.lower(): + found_service = True + found_channel = False + service_toremove = serivce + for channel in spsublist[service]['channels']: + if channel == ctx.channel.id: + found_service = True + spsublist[service]['channels'].remove(channel) + + if found_service and found_channel: + + await ctx.send(f"This channel is unsubscribed from '{service}' alerts.") + else: + await ctx.send(f"This channel is not subscribed to alerts for '{service_toremove}") # If the service exists, proceed with adding it to the list. elif service_state != "service not found": -- 2.39.5 From 7c1b3c207da749a2961fd6e0cc9b619c57e75bd0 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:51:55 -0400 Subject: [PATCH 141/189] changing option --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 75cca0b..ad3e616 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -615,7 +615,7 @@ async def spsub(ctx, service = "NONE"): await ctx.send(f"This channel is subscribed to: {sublist}") - elif service.startswith('-del '): + elif service.startswith('-del:'): # Delete the service from this channels subscriptions print("placeholder") service_toremove = service[5:] -- 2.39.5 From cc1368258c25b89cfb6f1f5f806b69efd345718b Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:53:10 -0400 Subject: [PATCH 142/189] fixing typo --- r0b3bot.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index ad3e616..eaac177 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -617,7 +617,6 @@ async def spsub(ctx, service = "NONE"): elif service.startswith('-del:'): # Delete the service from this channels subscriptions - print("placeholder") service_toremove = service[5:] print(f"{service_toremove}") @@ -631,7 +630,7 @@ async def spsub(ctx, service = "NONE"): if service.lower() == service_toremove.lower(): found_service = True found_channel = False - service_toremove = serivce + service_toremove = service for channel in spsublist[service]['channels']: if channel == ctx.channel.id: found_service = True -- 2.39.5 From faad238f8cb7847bde13e93c371bf1b8e0c24750 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:54:43 -0400 Subject: [PATCH 143/189] fix wrong vairable assignment --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index eaac177..972172e 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -633,14 +633,14 @@ async def spsub(ctx, service = "NONE"): service_toremove = service for channel in spsublist[service]['channels']: if channel == ctx.channel.id: - found_service = True + found_channel = True spsublist[service]['channels'].remove(channel) if found_service and found_channel: await ctx.send(f"This channel is unsubscribed from '{service}' alerts.") else: - await ctx.send(f"This channel is not subscribed to alerts for '{service_toremove}") + await ctx.send(f"This channel is not subscribed to alerts for '{service_toremove}''") # If the service exists, proceed with adding it to the list. elif service_state != "service not found": -- 2.39.5 From ba792ff1f5dc759c051bd277c45b280464ca55cb Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:57:15 -0400 Subject: [PATCH 144/189] moving indent out --- r0b3bot.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 972172e..0495ee0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -705,16 +705,16 @@ async def spsub(ctx, service = "NONE"): print(f">> {service} subscription has been saved") await ctx.send(f"{service} has been added to monitored services for this channel") - #Write updated array to data file - print(">> Saving dictionary to spsublist.dat") - async with aiof.open('spsublist.dat', 'wb') as datafile: - pickled_spsublist = pickle.dumps(spsublist, protocol=4) - await datafile.write(pickled_spsublist) - #await datafile.fsync() - await datafile.flush() + #Write updated array to data file + print(">> Saving dictionary to spsublist.dat") + async with aiof.open('spsublist.dat', 'wb') as datafile: + pickled_spsublist = pickle.dumps(spsublist, protocol=4) + await datafile.write(pickled_spsublist) + #await datafile.fsync() + await datafile.flush() - print(">> Done") - #await ctx.send(f"'{service_state['name']}' added to monitored services") + print(">> Done") + #await ctx.send(f"'{service_state['name']}' added to monitored services") else: print(f">> '{service}' does not exist, cancelling subscription") -- 2.39.5 From d49d368895a33c1260f9715abc24a64b60cbf955 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:58:55 -0400 Subject: [PATCH 145/189] saving updated file --- r0b3bot.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 0495ee0..6499ebe 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -637,7 +637,12 @@ async def spsub(ctx, service = "NONE"): spsublist[service]['channels'].remove(channel) if found_service and found_channel: - + print(">> Saving dictionary to spsublist.dat") + async with aiof.open('spsublist.dat', 'wb') as datafile: + pickled_spsublist = pickle.dumps(spsublist, protocol=4) + await datafile.write(pickled_spsublist) + #await datafile.fsync() + await datafile.flush() await ctx.send(f"This channel is unsubscribed from '{service}' alerts.") else: await ctx.send(f"This channel is not subscribed to alerts for '{service_toremove}''") @@ -705,13 +710,13 @@ async def spsub(ctx, service = "NONE"): print(f">> {service} subscription has been saved") await ctx.send(f"{service} has been added to monitored services for this channel") - #Write updated array to data file - print(">> Saving dictionary to spsublist.dat") - async with aiof.open('spsublist.dat', 'wb') as datafile: - pickled_spsublist = pickle.dumps(spsublist, protocol=4) - await datafile.write(pickled_spsublist) - #await datafile.fsync() - await datafile.flush() + #Write updated array to data file + print(">> Saving dictionary to spsublist.dat") + async with aiof.open('spsublist.dat', 'wb') as datafile: + pickled_spsublist = pickle.dumps(spsublist, protocol=4) + await datafile.write(pickled_spsublist) + #await datafile.fsync() + await datafile.flush() print(">> Done") #await ctx.send(f"'{service_state['name']}' added to monitored services") -- 2.39.5 From a03efbd2a94d0570ce96a1272372984755fd3027 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 21:59:24 -0400 Subject: [PATCH 146/189] fix indent --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6499ebe..7318e59 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -718,8 +718,8 @@ async def spsub(ctx, service = "NONE"): #await datafile.fsync() await datafile.flush() - print(">> Done") - #await ctx.send(f"'{service_state['name']}' added to monitored services") + print(">> Done") + #await ctx.send(f"'{service_state['name']}' added to monitored services") else: print(f">> '{service}' does not exist, cancelling subscription") -- 2.39.5 From 47e5c364a9fdac4a585f724058b46fac83ed101e Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 22:00:46 -0400 Subject: [PATCH 147/189] calling wrong variable --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 7318e59..c6a5172 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -688,7 +688,7 @@ async def spsub(ctx, service = "NONE"): break if not found_channel: # Append the current channel id to the list for this service - print(f">> Adding serivce '{currentsub_request[1]}' to {channel}") + print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{service} has been added to monitored services for this channel") spsublist[service]['channels'].append(currentsub_request[0]) -- 2.39.5 From 2515eb83a5107d88e085bcee1a030450323c6ba1 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 22:04:34 -0400 Subject: [PATCH 148/189] changed when assigning service name --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index c6a5172..29d89ec 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -630,11 +630,12 @@ async def spsub(ctx, service = "NONE"): if service.lower() == service_toremove.lower(): found_service = True found_channel = False - service_toremove = service for channel in spsublist[service]['channels']: if channel == ctx.channel.id: found_channel = True + service_toremove = service spsublist[service]['channels'].remove(channel) + break if found_service and found_channel: print(">> Saving dictionary to spsublist.dat") -- 2.39.5 From f37fc95ddc647cdcf2d84dd9afb1a569c292c41a Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 22:07:37 -0400 Subject: [PATCH 149/189] added break --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 29d89ec..4098c91 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -692,6 +692,7 @@ async def spsub(ctx, service = "NONE"): print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") await ctx.send(f"{service} has been added to monitored services for this channel") spsublist[service]['channels'].append(currentsub_request[0]) + break if not found_service: # Append the current channel id to the list for this service -- 2.39.5 From 1be2590f43b0dd077a9fcd248aa2c8c710271c0f Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 22:09:54 -0400 Subject: [PATCH 150/189] adding another break --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 4098c91..74d3c96 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -636,6 +636,7 @@ async def spsub(ctx, service = "NONE"): service_toremove = service spsublist[service]['channels'].remove(channel) break + break if found_service and found_channel: print(">> Saving dictionary to spsublist.dat") -- 2.39.5 From ea2a76bf81a93b184e48223cc2bbe92d91ec75b3 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 22:30:09 -0400 Subject: [PATCH 151/189] adding breaks --- r0b3bot.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 74d3c96..6689614 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -620,23 +620,42 @@ async def spsub(ctx, service = "NONE"): service_toremove = service[5:] print(f"{service_toremove}") + # Open the data file for read in async with aiof.open('spsublist.dat', 'rb') as datafile: pickled_spsublist = await datafile.read() spsublist = pickle.loads(pickled_spsublist) + # We haven't found either the channel or servic; mark as false found_service = False + found_channel = False + + # Iterate through the service names in the data for service in spsublist.keys(): + # If the service we want to unsub from is the same as the service in the data, we need to search for the channel if service.lower() == service_toremove.lower(): + + # We've found the service match, mark as true found_service = True - found_channel = False + + # Iterate through the channels that are subbed to this service for channel in spsublist[service]['channels']: + + # If a channel listed in the service matches the current users channel id, we've found our match if channel == ctx.channel.id: + + # Marking channel as found found_channel = True + # Get the proper name of the service service_toremove = service - spsublist[service]['channels'].remove(channel) + #Remove the current users channel from this service + spsublist[service]['channels'].remove(ctx.channel.id) + # Break since we're done. break - break + + # If we got to the point of finding the channel, we're done. + if found_channel: + break if found_service and found_channel: print(">> Saving dictionary to spsublist.dat") @@ -673,15 +692,17 @@ async def spsub(ctx, service = "NONE"): spsublist = pickle.loads(pickled_spsublist) print(f">> Checking if serivce is already in datafile") + found_service = False + found_channel = False for service in spsublist.keys(): print(f">> Does {service.lower()} == {currentsub_request[1].lower()}") - found_service = False + if service.lower() == currentsub_request[1].lower(): found_service = True # This service matched what the user is trying to subscribe to # Now we need to check if this is for the same channel print(f">> Found {service} in data file, checking for channel") - found_channel = False + for channel in spsublist[service]['channels']: if channel == currentsub_request[0]: print(f">> This channel is already subscribed to {service}") -- 2.39.5 From 2a5ced954bdef195b4ed7be4073d2b73903dd0a8 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Mon, 13 Apr 2020 22:39:19 -0400 Subject: [PATCH 152/189] added new commands to help --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 6689614..077cb43 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -897,6 +897,7 @@ async def help(ctx): embed.add_field(name=f"{BOT_COMMAND_PREFIX}help", value="Gives this message", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}last_error", value="Will display the real error message the bot has last encountered for additional debugging info") embed.add_field(name=f"{BOT_COMMAND_PREFIX}spstatus servicename", value="Retrieves status of service from StatPing") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}spsub service", value="Allows user to subscribe to service status change alerts for the channel. Can replace with -list and -del:service to manage alerts.") await ctx.send(embed=embed) embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") -- 2.39.5 From cd4b3bbb3837073dc51e4486b51f13310d0cfdb7 Mon Sep 17 00:00:00 2001 From: Rich O Date: Mon, 13 Apr 2020 22:42:40 -0400 Subject: [PATCH 153/189] Testing --- bot_config.conf.example | 2 +- r0b3bot.py | 292 +++++++++++++++++++++++++++++++++++----- 2 files changed, 258 insertions(+), 36 deletions(-) diff --git a/bot_config.conf.example b/bot_config.conf.example index 81014cf..af77115 100644 --- a/bot_config.conf.example +++ b/bot_config.conf.example @@ -12,7 +12,7 @@ # statping_api_key - API Key for Statping to query for service status # discord_auth_token = -bot_command_prefix= +bot_command_prefix = hass_url = hass_token = hass_light = diff --git a/r0b3bot.py b/r0b3bot.py index 04f315b..077cb43 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -16,6 +16,9 @@ from discord.utils import get from discord.voice_client import VoiceClient import requests import asyncio +#from aiofile import AIOFile +import aiofiles as aiof +import pickle #Record the time the bot started @@ -28,9 +31,6 @@ configFilePath = r'bot_config.conf' global last_error last_error = "No errors have been recorded." -global spsublist -spsublist = [] - try: config.read(configFilePath) except: @@ -84,6 +84,9 @@ async def on_ready(): activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) + #Run StatPing_Monitor + await StatPing_Monitor() + @bot.command() async def greetings(ctx): await ctx.send(":smiley: :wave: Hello there!") @@ -547,7 +550,7 @@ async def info(ctx): bot.remove_command('help') @bot.command() -async def spalert(ctx, service = "NONE"): +async def spstatus(ctx, service = "NONE"): #async def spalert(ctx, cmd = "NONE", arg = "NONE"): # if cmd != "NONE": @@ -571,35 +574,252 @@ async def spalert(ctx, service = "NONE"): await ctx.send("Please speficy a service name to query.") - + @bot.command() async def spsub(ctx, service = "NONE"): - currentsub_request = [] + spsublist = {} # Statping Subscription list to be read in from file + # Structure of spsublist nested dictionary + # spsublist[service name][list of channel ids][a state value] + # dict = {'Plex': {'state' : 'online', 'channels' : ['1232', '43234']} + # 'Space Eingineers' : {'state' : online', 'channels' : ['2343', '54563']}} + # + currentsub_request = [] # list of elements detailing the current sub request datestring = datetime.now() datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") + print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub {service}'") + # Only work on this if the user has supplied a service name to monitor, a value of NONE + # means nothing was specified + if service != "NONE" and service != "-list" and not service.startswith('-del '): + + print(f">> Querying status of '{service}' to see if it exists") + service_state = await get_stp_status(service) + if service != "NONE": - print(f"Querying status of '{service}' to see if it exists") - service_state = await get_stp_status(service) + if service == "-list": + # List the serivces that this channel is subscribed to + # Read in spsublist + sublist = '' + async with aiof.open('spsublist.dat', 'rb') as datafile: + pickled_spsublist = await datafile.read() + spsublist = pickle.loads(pickled_spsublist) + + for service in spsublist.keys(): + + for channel in spsublist[service]['channels']: + if channel == ctx.channel.id: + sublist += f"'{service}' " + + await ctx.send(f"This channel is subscribed to: {sublist}") - if service_state != "service not found": + elif service.startswith('-del:'): + # Delete the service from this channels subscriptions + service_toremove = service[5:] + print(f"{service_toremove}") + + # Open the data file for read in + async with aiof.open('spsublist.dat', 'rb') as datafile: + pickled_spsublist = await datafile.read() + spsublist = pickle.loads(pickled_spsublist) + + # We haven't found either the channel or servic; mark as false + found_service = False + found_channel = False + + # Iterate through the service names in the data + for service in spsublist.keys(): + + # If the service we want to unsub from is the same as the service in the data, we need to search for the channel + if service.lower() == service_toremove.lower(): + + # We've found the service match, mark as true + found_service = True + + # Iterate through the channels that are subbed to this service + for channel in spsublist[service]['channels']: + + # If a channel listed in the service matches the current users channel id, we've found our match + if channel == ctx.channel.id: + + # Marking channel as found + found_channel = True + # Get the proper name of the service + service_toremove = service + #Remove the current users channel from this service + spsublist[service]['channels'].remove(ctx.channel.id) + # Break since we're done. + break + + # If we got to the point of finding the channel, we're done. + if found_channel: + break + + if found_service and found_channel: + print(">> Saving dictionary to spsublist.dat") + async with aiof.open('spsublist.dat', 'wb') as datafile: + pickled_spsublist = pickle.dumps(spsublist, protocol=4) + await datafile.write(pickled_spsublist) + #await datafile.fsync() + await datafile.flush() + await ctx.send(f"This channel is unsubscribed from '{service}' alerts.") + else: + await ctx.send(f"This channel is not subscribed to alerts for '{service_toremove}''") + + # If the service exists, proceed with adding it to the list. + elif service_state != "service not found": - print(f"'{service}' exists, starting monitor") - await ctx.send(f"'{service_state['name']}' added to monitored services") - currentsub_request.append(ctx) - currentsub_request.append(service) + print(f">> '{service}' is a valid service on StatPing.") + print(f">> Checking if it has already been subscribed to") + #await ctx.send(f"'{service_state['name']}' added to monitored services") + currentsub_request.append(ctx.channel.id) + currentsub_request.append(service_state['name']) currentsub_request.append("online") + print(f">> Channel ID: {currentsub_request[0]}") + print(f">> Service Name: {currentsub_request[1]}") + print(f">> Initial State to set: {currentsub_request[2]}") - await sp_monitor(currentsub_request) + # read in data file containing dict of subscriptions + print(">> Checking for spsublist.dat") + if os.path.exists('spsublist.dat'): + + print(">> Data file exists, reading it in.") + # Read in spsublist + async with aiof.open('spsublist.dat', 'rb') as datafile: + pickled_spsublist = await datafile.read() + spsublist = pickle.loads(pickled_spsublist) + + print(f">> Checking if serivce is already in datafile") + found_service = False + found_channel = False + for service in spsublist.keys(): + print(f">> Does {service.lower()} == {currentsub_request[1].lower()}") + + if service.lower() == currentsub_request[1].lower(): + found_service = True + # This service matched what the user is trying to subscribe to + # Now we need to check if this is for the same channel + print(f">> Found {service} in data file, checking for channel") + + for channel in spsublist[service]['channels']: + if channel == currentsub_request[0]: + print(f">> This channel is already subscribed to {service}") + await ctx.send(f"This channel is already subscribed to {service} alerts") + found_channel = True + break + if not found_channel: + # Append the current channel id to the list for this service + print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") + await ctx.send(f"{service} has been added to monitored services for this channel") + spsublist[service]['channels'].append(currentsub_request[0]) + break + + if not found_service: + # Append the current channel id to the list for this service + print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") + await ctx.send(f"{service} has been added to monitored services for this channel") + #newsub = {} + #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + + else: + + print(">> spsublist.dat does not exist, new file will be created") + + # append new subscription to dict + print(">> Creating new dictionary") + spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} + print(f">> {service} subscription has been saved") + await ctx.send(f"{service} has been added to monitored services for this channel") + + #Write updated array to data file + print(">> Saving dictionary to spsublist.dat") + async with aiof.open('spsublist.dat', 'wb') as datafile: + pickled_spsublist = pickle.dumps(spsublist, protocol=4) + await datafile.write(pickled_spsublist) + #await datafile.fsync() + await datafile.flush() + + print(">> Done") + #await ctx.send(f"'{service_state['name']}' added to monitored services") else: - print(f"'{service}' does not exist, cancelling subscription") + print(f">> '{service}' does not exist, cancelling subscription") await ctx.send(f"{service} was not found") -async def sp_monitor(spsublist): +async def StatPing_Monitor(): + + # reads in "spsublist.dat" every 60 seconds then iterates + # through to check for service status changes. This function will need to check + # that "spsublist.dat" exists and is not empty. This function should be called + # in bot.on_ready + + #new_spsublist = {} + + # read in data file containing list of subscriptions + while True: + print("Statping Monitor: Reading in spsublist.dat") + if os.path.exists('spsublist.dat'): + async with aiof.open('spsublist.dat', 'rb') as datafile: + pickled_spsublist = await datafile.read() + spsublist = pickle.loads(pickled_spsublist) + + for service in spsublist.keys(): + # service used to be subscription + status = await get_stp_status(service) + print(f">> {service} Online: {status['online']} | Previous state: {spsublist[service]['state']}") + if status != 'status not found': + if status['online'] and spsublist[service]['state'] == 'online': + + # nothing has changed, no alert needed + await asyncio.sleep(1) + elif not status['online'] and spsublist[service]['state'] == "offline": + + # again, nothing has changed no alert needed + await asyncio.sleep(1) + else: + + print(f">> Status of '{service}' has changed, notifying subscribed channels") + + if status['online']: + for channel in spsublist[service]['channels']: + ctx = bot.get_channel(channel) + embed = discord.Embed(title=f"Service Alert", description=f"{service} is Online!", color=0x00ff40) + await ctx.send(embed=embed) + spsublist[service]['state'] = 'online' + + elif not status['online']: + for channel in spsublist[service]['channels']: + ctx = bot.get_channel(channel) + embed = discord.Embed(title=f"Service Alert", description=f"{service} is Offline!", color=0xff2200) + await ctx.send(embed=embed) + spsublist[service]['state'] = 'offline' + + else: + for channel in spsublist[service]['channels']: + ctx = bot.get_channel(channel) + embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) + await ctx.send(embed=embed) + print(">> Done") + + #new_spsublist.append(subscription) + + # Write status changes to spsublist.dat + async with aiof.open('spsublist.dat', 'wb') as datafile: + pickled_spsublist = pickle.dumps(spsublist) + await datafile.write(pickled_spsublist) + #await datafile.fsync() + await datafile.flush() + + else: + print(">> spsublist.dat does not exist, nothing to do.") + + await asyncio.sleep(60) + + +async def sp_monitor(sublist): # Checks the services listed in spsublist for status change # Sublist is a list of 3 items: @@ -607,7 +827,8 @@ async def sp_monitor(spsublist): # - service (the name of the service to check) # - status string (last status of the service, either 'online' or 'offline') - ctx = spsublist[0] + ctx = sublist[0] + while True: @@ -646,7 +867,7 @@ async def get_stp_status(service): for spservice in spservice_array.json(): # using lower() to eliminate any case mismatch problems - if spservice['name'].lower() == service: + if spservice['name'].lower() == service.lower(): found = True return spservice @@ -659,23 +880,24 @@ async def get_stp_status(service): @bot.command() async def help(ctx): embed = discord.Embed(title="R0b3BOT", description="List of commands are:", color=0xeee657) - embed.add_field(name="$printstat", value="Uploads a snapshot of Rich's 3D printer and current stats", inline=False) - embed.add_field(name="$explain", value="Displays Dalek EXPLAIN gif", inline=False) - embed.add_field(name="$holyshit", value="Displays Marty McFly HOLY SHIT gif", inline=False) - embed.add_field(name="$greetings", value="Gives a nice greet message", inline=False) - embed.add_field(name="$cat", value="Gives a cute cat gif to lighten up the mood.", inline=False) - embed.add_field(name="$bitch @member", value="Plays clip of BigEric420 saying 'maybe you shouldn't be such a bitch.mp3'", inline=False) - embed.add_field(name="$boom @member", value="Plays 'Boom Bitch' sound clip", inline=False) - embed.add_field(name="$cowbell @member", value="Plays 'SNL More Cowbell' sound clip", inline=False) - embed.add_field(name="$oops @member", value="Plays 'Oops.mp3'", inline=False) - embed.add_field(name="$promoted @member", value="Plays Battlefield Friends 'PROMOTED!' sound clip", inline=False) - embed.add_field(name="$trololo @member", value="Plays a clip of Trololo song", inline=False) - embed.add_field(name="$leeroy @member", value="Plays Leeeerrroooyyy Jenkins clip", inline=False) - embed.add_field(name="$eia @member", value="Plays 'Everything is Awesome' song clip") - embed.add_field(name="$info", value="Gives a little info about the bot", inline=False) - embed.add_field(name="$help", value="Gives this message", inline=False) - embed.add_field(name="$last_error", value="Will display the real error message the bot has last encountered for additional debugging info") - embed.add_field(name="$spalert servicename", value="Retrieves status of service from StatPing") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}printstat", value="Uploads a snapshot of Rich's 3D printer and current stats", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}explain", value="Displays Dalek EXPLAIN gif", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}holyshit", value="Displays Marty McFly HOLY SHIT gif", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}greetings", value="Gives a nice greet message", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}cat", value="Gives a cute cat gif to lighten up the mood.", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}bitch @member", value="Plays clip of BigEric420 saying 'maybe you shouldn't be such a bitch.mp3'", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}boom @member", value="Plays 'Boom Bitch' sound clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}cowbell @member", value="Plays 'SNL More Cowbell' sound clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}oops @member", value="Plays 'Oops.mp3'", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}promoted @member", value="Plays Battlefield Friends 'PROMOTED!' sound clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}trololo @member", value="Plays a clip of Trololo song", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}leeroy @member", value="Plays Leeeerrroooyyy Jenkins clip", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}eia @member", value="Plays 'Everything is Awesome' song clip") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}info", value="Gives a little info about the bot", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}help", value="Gives this message", inline=False) + embed.add_field(name=f"{BOT_COMMAND_PREFIX}last_error", value="Will display the real error message the bot has last encountered for additional debugging info") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}spstatus servicename", value="Retrieves status of service from StatPing") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}spsub service", value="Allows user to subscribe to service status change alerts for the channel. Can replace with -list and -del:service to manage alerts.") await ctx.send(embed=embed) embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") -- 2.39.5 From e36d8727c5bb0a68d4b26e1d92368b6319556cd7 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 08:39:16 -0400 Subject: [PATCH 154/189] added print statements for sending alerts --- r0b3bot.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 077cb43..fe91acd 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -784,21 +784,24 @@ async def StatPing_Monitor(): print(f">> Status of '{service}' has changed, notifying subscribed channels") if status['online']: + spsublist[service]['state'] = 'online' for channel in spsublist[service]['channels']: + print(f">> Alerting {ctx.channel} that {service} is Online") ctx = bot.get_channel(channel) embed = discord.Embed(title=f"Service Alert", description=f"{service} is Online!", color=0x00ff40) await ctx.send(embed=embed) - spsublist[service]['state'] = 'online' elif not status['online']: + spsublist[service]['state'] = 'offline' for channel in spsublist[service]['channels']: + print(f">> Alerting {ctx.channel} that {service} is Offline") ctx = bot.get_channel(channel) embed = discord.Embed(title=f"Service Alert", description=f"{service} is Offline!", color=0xff2200) await ctx.send(embed=embed) - spsublist[service]['state'] = 'offline' else: for channel in spsublist[service]['channels']: + print(f">> Alerting {ctx.channel} that {service} is an Unknown state") ctx = bot.get_channel(channel) embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) await ctx.send(embed=embed) -- 2.39.5 From 646081286fa921b58986b2a9ac286e2bdac47a02 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 08:47:07 -0400 Subject: [PATCH 155/189] move start of statping monitor out from bot.on_ready. Think it was being start multiple times when bot reconnected to discord. --- r0b3bot.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index fe91acd..4c66517 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -73,6 +73,10 @@ print(f"StatPing Server: {STATPING_URL}") print(f"StatPing API Key: {STATPING_API_KEY}") print(f"StatPing URL Headers: {statpingHEADERS}") +print("Starting StatPint Monitor") +#Run StatPing_Monitor +await StatPing_Monitor() + # On Ready @bot.event async def on_ready(): @@ -84,8 +88,6 @@ async def on_ready(): activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) - #Run StatPing_Monitor - await StatPing_Monitor() @bot.command() async def greetings(ctx): -- 2.39.5 From f0c65454d34613a1bf7ebd1711021ee9954cdf66 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 09:01:19 -0400 Subject: [PATCH 156/189] moved start of statping monitor back to on_ready, but am now checking started state variable. --- r0b3bot.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 4c66517..a2d4cdb 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -23,6 +23,7 @@ import pickle #Record the time the bot started start_time = time.time() +statping_monitor_started = False config = configparser.RawConfigParser() configFilePath = r'bot_config.conf' @@ -73,9 +74,6 @@ print(f"StatPing Server: {STATPING_URL}") print(f"StatPing API Key: {STATPING_API_KEY}") print(f"StatPing URL Headers: {statpingHEADERS}") -print("Starting StatPint Monitor") -#Run StatPing_Monitor -await StatPing_Monitor() # On Ready @bot.event @@ -88,6 +86,16 @@ async def on_ready(): activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) + print("------") + print("Starting StatPing Monitor...") + if not statping_monitor_started: + #Run StatPing_Monitor + await StatPing_Monitor() + print(">> Started") + statping_monitor_started = True + else: + print(">> Already running") + @bot.command() async def greetings(ctx): -- 2.39.5 From be4b46a81dd5e1641a04de0a13143cd1fb10144e Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 12:52:52 -0400 Subject: [PATCH 157/189] changed to global, though I dont think that's the cause of the issue --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index a2d4cdb..2da1b67 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -23,6 +23,7 @@ import pickle #Record the time the bot started start_time = time.time() +global statping_monitor_started statping_monitor_started = False config = configparser.RawConfigParser() -- 2.39.5 From ed6606f8aceb1710e6fe6c5ac71529d4a4a15a15 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 12:54:30 -0400 Subject: [PATCH 158/189] case? --- r0b3bot.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 2da1b67..f02e45f 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -23,8 +23,7 @@ import pickle #Record the time the bot started start_time = time.time() -global statping_monitor_started -statping_monitor_started = False +STATPING_MONITOR_STARTED = False config = configparser.RawConfigParser() configFilePath = r'bot_config.conf' @@ -89,11 +88,11 @@ async def on_ready(): print("------") print("Starting StatPing Monitor...") - if not statping_monitor_started: + if not STATPING_MONITOR_STARTED: #Run StatPing_Monitor await StatPing_Monitor() print(">> Started") - statping_monitor_started = True + STATPING_MONITOR_STARTED = True else: print(">> Already running") -- 2.39.5 From 5c2b4267489f1e8f2b32888ab9a918faeb76b4b9 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 12:56:10 -0400 Subject: [PATCH 159/189] moving --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index f02e45f..339af81 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -23,7 +23,6 @@ import pickle #Record the time the bot started start_time = time.time() -STATPING_MONITOR_STARTED = False config = configparser.RawConfigParser() configFilePath = r'bot_config.conf' @@ -74,6 +73,7 @@ print(f"StatPing Server: {STATPING_URL}") print(f"StatPing API Key: {STATPING_API_KEY}") print(f"StatPing URL Headers: {statpingHEADERS}") +STATPING_MONITOR_STARTED = False # On Ready @bot.event -- 2.39.5 From f1e35bae27ea2022a9319554a472224896da834c Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 12:57:40 -0400 Subject: [PATCH 160/189] added sleep --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 339af81..d2b3d70 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -86,6 +86,7 @@ async def on_ready(): activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) + await asyncio.sleep(30) print("------") print("Starting StatPing Monitor...") if not STATPING_MONITOR_STARTED: -- 2.39.5 From 37a6b08fe2db9b1c97b73d2b0e3b305c0da1d505 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 13:07:39 -0400 Subject: [PATCH 161/189] changed logic --- r0b3bot.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index d2b3d70..dc48d68 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -73,8 +73,6 @@ print(f"StatPing Server: {STATPING_URL}") print(f"StatPing API Key: {STATPING_API_KEY}") print(f"StatPing URL Headers: {statpingHEADERS}") -STATPING_MONITOR_STARTED = False - # On Ready @bot.event async def on_ready(): @@ -86,10 +84,9 @@ async def on_ready(): activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) - await asyncio.sleep(30) - print("------") print("Starting StatPing Monitor...") - if not STATPING_MONITOR_STARTED: + # If 30 seconds or less have passed since the program was started, start the monitor. + if start_time + 30 < time.time(): #Run StatPing_Monitor await StatPing_Monitor() print(">> Started") -- 2.39.5 From 93734ec7739827ffc6d0b69e25ee3ffe6e0ca787 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 13:11:14 -0400 Subject: [PATCH 162/189] pemdas --- r0b3bot.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index dc48d68..1a245f3 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -86,11 +86,10 @@ async def on_ready(): print("Starting StatPing Monitor...") # If 30 seconds or less have passed since the program was started, start the monitor. - if start_time + 30 < time.time(): + if (start_time + 30) < time.time(): #Run StatPing_Monitor await StatPing_Monitor() print(">> Started") - STATPING_MONITOR_STARTED = True else: print(">> Already running") -- 2.39.5 From 290bdc3903c34ce2d8e04aea3ddde44e4dbfe2bc Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 13:12:27 -0400 Subject: [PATCH 163/189] adding debug output --- r0b3bot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/r0b3bot.py b/r0b3bot.py index 1a245f3..48e140c 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -86,6 +86,7 @@ async def on_ready(): print("Starting StatPing Monitor...") # If 30 seconds or less have passed since the program was started, start the monitor. + print{f"{start_time} | {time.time()}"} if (start_time + 30) < time.time(): #Run StatPing_Monitor await StatPing_Monitor() -- 2.39.5 From c9f2d07f4b39e85cdd9086f9b37c07cf62dfe0e1 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 13:12:59 -0400 Subject: [PATCH 164/189] syntax --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 48e140c..93c375f 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -86,7 +86,7 @@ async def on_ready(): print("Starting StatPing Monitor...") # If 30 seconds or less have passed since the program was started, start the monitor. - print{f"{start_time} | {time.time()}"} + print(f"{start_time} | {time.time()}") if (start_time + 30) < time.time(): #Run StatPing_Monitor await StatPing_Monitor() -- 2.39.5 From 91063db8337cacec7603e9a0beedc9ccbc1834cc Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 13:15:43 -0400 Subject: [PATCH 165/189] change criteria --- r0b3bot.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 93c375f..18d9f3b 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -87,7 +87,9 @@ async def on_ready(): print("Starting StatPing Monitor...") # If 30 seconds or less have passed since the program was started, start the monitor. print(f"{start_time} | {time.time()}") - if (start_time + 30) < time.time(): + runtime = time.time() - start_time + print(f"{runtime}") + if runtime <= 15: #Run StatPing_Monitor await StatPing_Monitor() print(">> Started") -- 2.39.5 From 1dc54fa5f257350778a5dd06e5dc45eb914d2b8d Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 13:19:33 -0400 Subject: [PATCH 166/189] testing output --- r0b3bot.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 18d9f3b..4c6742c 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -85,16 +85,15 @@ async def on_ready(): await bot.change_presence(activity=activity) print("Starting StatPing Monitor...") - # If 30 seconds or less have passed since the program was started, start the monitor. - print(f"{start_time} | {time.time()}") + # If 15 seconds or less have passed since the program was started, start the monitor. runtime = time.time() - start_time - print(f"{runtime}") + print(f"{runtime.int()}") if runtime <= 15: #Run StatPing_Monitor await StatPing_Monitor() print(">> Started") else: - print(">> Already running") + print(f">> Bot has been running for more than {runtime.int()} seconds. Not restarting monitor.") @bot.command() -- 2.39.5 From b165e6767657b63e8815f9dadca91eb008422cdd Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 13:20:52 -0400 Subject: [PATCH 167/189] update --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 4c6742c..791f4d0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -87,13 +87,13 @@ async def on_ready(): print("Starting StatPing Monitor...") # If 15 seconds or less have passed since the program was started, start the monitor. runtime = time.time() - start_time - print(f"{runtime.int()}") + print(f"{int(runtime)}") if runtime <= 15: #Run StatPing_Monitor await StatPing_Monitor() print(">> Started") else: - print(f">> Bot has been running for more than {runtime.int()} seconds. Not restarting monitor.") + print(f">> Bot has been running for more than {int(runtime)} seconds. Not restarting monitor.") @bot.command() -- 2.39.5 From d9362fb819211d475dac67611dfcbb0ad1ca6c6d Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 13:22:50 -0400 Subject: [PATCH 168/189] rearrange to fix --- r0b3bot.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 791f4d0..cbd57c7 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -87,7 +87,6 @@ async def on_ready(): print("Starting StatPing Monitor...") # If 15 seconds or less have passed since the program was started, start the monitor. runtime = time.time() - start_time - print(f"{int(runtime)}") if runtime <= 15: #Run StatPing_Monitor await StatPing_Monitor() @@ -795,23 +794,23 @@ async def StatPing_Monitor(): if status['online']: spsublist[service]['state'] = 'online' for channel in spsublist[service]['channels']: - print(f">> Alerting {ctx.channel} that {service} is Online") ctx = bot.get_channel(channel) + print(f">> Alerting {ctx.channel} that {service} is Online") embed = discord.Embed(title=f"Service Alert", description=f"{service} is Online!", color=0x00ff40) await ctx.send(embed=embed) elif not status['online']: spsublist[service]['state'] = 'offline' for channel in spsublist[service]['channels']: - print(f">> Alerting {ctx.channel} that {service} is Offline") ctx = bot.get_channel(channel) + print(f">> Alerting {ctx.channel} that {service} is Offline") embed = discord.Embed(title=f"Service Alert", description=f"{service} is Offline!", color=0xff2200) await ctx.send(embed=embed) else: for channel in spsublist[service]['channels']: - print(f">> Alerting {ctx.channel} that {service} is an Unknown state") ctx = bot.get_channel(channel) + print(f">> Alerting {ctx.channel} that {service} is an Unknown state") embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) await ctx.send(embed=embed) print(">> Done") -- 2.39.5 From 0467fde122d35f61bb7d99e9d39ca8138676ea2f Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 13:27:35 -0400 Subject: [PATCH 169/189] missing attribute --- r0b3bot.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index cbd57c7..cbd9bf0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -795,7 +795,7 @@ async def StatPing_Monitor(): spsublist[service]['state'] = 'online' for channel in spsublist[service]['channels']: ctx = bot.get_channel(channel) - print(f">> Alerting {ctx.channel} that {service} is Online") + print(f">> Alerting {ctx} that {service} is Online") embed = discord.Embed(title=f"Service Alert", description=f"{service} is Online!", color=0x00ff40) await ctx.send(embed=embed) @@ -803,14 +803,14 @@ async def StatPing_Monitor(): spsublist[service]['state'] = 'offline' for channel in spsublist[service]['channels']: ctx = bot.get_channel(channel) - print(f">> Alerting {ctx.channel} that {service} is Offline") + print(f">> Alerting {ctx} that {service} is Offline") embed = discord.Embed(title=f"Service Alert", description=f"{service} is Offline!", color=0xff2200) await ctx.send(embed=embed) else: for channel in spsublist[service]['channels']: ctx = bot.get_channel(channel) - print(f">> Alerting {ctx.channel} that {service} is an Unknown state") + print(f">> Alerting {ctx} that {service} is an Unknown state") embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) await ctx.send(embed=embed) print(">> Done") -- 2.39.5 From 2cf516dd1f75be307d2c5f283a9ca14cfd87d0f8 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 13:29:16 -0400 Subject: [PATCH 170/189] move notice of statping mon start --- r0b3bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index cbd9bf0..f1829bb 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -84,13 +84,13 @@ async def on_ready(): activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) - print("Starting StatPing Monitor...") + # If 15 seconds or less have passed since the program was started, start the monitor. runtime = time.time() - start_time if runtime <= 15: #Run StatPing_Monitor + print("Starting StatPing Monitor.") await StatPing_Monitor() - print(">> Started") else: print(f">> Bot has been running for more than {int(runtime)} seconds. Not restarting monitor.") -- 2.39.5 From 6b3490557c0d6b12dbff1a62b547cd9fb1c19095 Mon Sep 17 00:00:00 2001 From: Rich O Date: Tue, 14 Apr 2020 13:38:15 -0400 Subject: [PATCH 171/189] move start of statping monitor out from bot.on_ready. Think it was being start multiple times when bot reconnected to discord. --- r0b3bot.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 077cb43..f1829bb 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -84,8 +84,16 @@ async def on_ready(): activity = discord.Activity(name="your $commands",type=discord.ActivityType.listening) await bot.change_presence(activity=activity) - #Run StatPing_Monitor - await StatPing_Monitor() + + # If 15 seconds or less have passed since the program was started, start the monitor. + runtime = time.time() - start_time + if runtime <= 15: + #Run StatPing_Monitor + print("Starting StatPing Monitor.") + await StatPing_Monitor() + else: + print(f">> Bot has been running for more than {int(runtime)} seconds. Not restarting monitor.") + @bot.command() async def greetings(ctx): @@ -784,22 +792,25 @@ async def StatPing_Monitor(): print(f">> Status of '{service}' has changed, notifying subscribed channels") if status['online']: + spsublist[service]['state'] = 'online' for channel in spsublist[service]['channels']: ctx = bot.get_channel(channel) + print(f">> Alerting {ctx} that {service} is Online") embed = discord.Embed(title=f"Service Alert", description=f"{service} is Online!", color=0x00ff40) await ctx.send(embed=embed) - spsublist[service]['state'] = 'online' elif not status['online']: + spsublist[service]['state'] = 'offline' for channel in spsublist[service]['channels']: ctx = bot.get_channel(channel) + print(f">> Alerting {ctx} that {service} is Offline") embed = discord.Embed(title=f"Service Alert", description=f"{service} is Offline!", color=0xff2200) await ctx.send(embed=embed) - spsublist[service]['state'] = 'offline' else: for channel in spsublist[service]['channels']: ctx = bot.get_channel(channel) + print(f">> Alerting {ctx} that {service} is an Unknown state") embed = discord.Embed(title=f"Service Alert", description=f"{service} is in an unknown state!", color=0xffff00) await ctx.send(embed=embed) print(">> Done") -- 2.39.5 From 19304b5d27035d452f3d125c3ece5870682762ec Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 20:23:42 -0400 Subject: [PATCH 172/189] adding version to info command --- r0b3bot.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index f1829bb..6a18a62 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -550,6 +550,9 @@ async def info(ctx): second = int(second) embed.add_field(name="Uptime [WW:DD:HH:MM:SS]:", value=f"{week:02d}:{day:02d}:{hour:02d}:{minute:02d}:{second:02d}", inline=False) + print("Getting git describe data to display as version") + bot_version = await run('git describe') + embed.add_field(name="Version:", value=f"bot_version", inline=False) # Gitlab link to source embed.add_field(name="Source Code:", value="[R0b3Bot on Gitlab](https://gitlab.rickelobe.com/Bots/r0b3BOT)", inline=False) @@ -914,4 +917,20 @@ async def help(ctx): embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") await ctx.send(embed=embed) +async def run(cmd): + proc = await asyncio.create_subprocess_shell( + cmd, + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE) + + stdout, stderr = await proc.communicate() + + print(f'[{cmd!r} exited with {proc.returncode}]') + if stdout: + #print(f'[stdout]\n{stdout.decode()}') + return stdout.decode() + if stderr: + #print(f'[stderr]\n{stderr.decode()}') + return stderr.decode() + bot.run(DISCORD_AUTH_TOKEN) -- 2.39.5 From 86d7e414c2bcd625a9dd0b1601f560b020a51fc1 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 20:27:40 -0400 Subject: [PATCH 173/189] forgot {} --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6a18a62..6afc04f 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -552,7 +552,7 @@ async def info(ctx): print("Getting git describe data to display as version") bot_version = await run('git describe') - embed.add_field(name="Version:", value=f"bot_version", inline=False) + embed.add_field(name="Version:", value=f"{bot_version}", inline=False) # Gitlab link to source embed.add_field(name="Source Code:", value="[R0b3Bot on Gitlab](https://gitlab.rickelobe.com/Bots/r0b3BOT)", inline=False) -- 2.39.5 From 6deb4455ed52bd24ee2943b6194ea5396040a04a Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 20:31:37 -0400 Subject: [PATCH 174/189] minor console output text change --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 6afc04f..5b53c74 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -550,7 +550,7 @@ async def info(ctx): second = int(second) embed.add_field(name="Uptime [WW:DD:HH:MM:SS]:", value=f"{week:02d}:{day:02d}:{hour:02d}:{minute:02d}:{second:02d}", inline=False) - print("Getting git describe data to display as version") + print("Getting git describe data to display as version in info embed") bot_version = await run('git describe') embed.add_field(name="Version:", value=f"{bot_version}", inline=False) @@ -917,6 +917,7 @@ async def help(ctx): embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") await ctx.send(embed=embed) +# Function to run shell command and return stdout or sterr async def run(cmd): proc = await asyncio.create_subprocess_shell( cmd, -- 2.39.5 From d53cc3b3f69d4b5dfbf05bd60460168c80ac69fd Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 21:18:00 -0400 Subject: [PATCH 175/189] changed channel to currentsub_req[1] --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 5b53c74..df7fab0 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -730,7 +730,7 @@ async def spsub(ctx, service = "NONE"): if not found_service: # Append the current channel id to the list for this service print(f">> Adding serivce '{currentsub_request[1]}' to {ctx.channel.id}") - await ctx.send(f"{service} has been added to monitored services for this channel") + await ctx.send(f"{currentsub_request[1]} has been added to monitored services for this channel") #newsub = {} #newsub[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} spsublist[currentsub_request[1]] = {'state' : 'online', 'channels' : [currentsub_request[0]]} -- 2.39.5 From e2c100c5bb3ac6f08368787851d6e85e27c57100 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 21:48:16 -0400 Subject: [PATCH 176/189] removing " from service variable --- r0b3bot.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/r0b3bot.py b/r0b3bot.py index df7fab0..4ec4fa3 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -599,6 +599,12 @@ async def spsub(ctx, service = "NONE"): datestring = datetime.now() datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") + bad_chars = ['"'] + + # using replace() to remove bad_chars + for i in bad_chars : + service = service.replace(i, '') + print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub {service}'") # Only work on this if the user has supplied a service name to monitor, a value of NONE -- 2.39.5 From 7b7f57f4c0eb05f2a7d39a58cb90a7016dce9be4 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 21:50:55 -0400 Subject: [PATCH 177/189] trying more ' --- r0b3bot.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 4ec4fa3..547b645 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -599,13 +599,13 @@ async def spsub(ctx, service = "NONE"): datestring = datetime.now() datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") - bad_chars = ['"'] + #bad_chars = ['"'] # using replace() to remove bad_chars - for i in bad_chars : - service = service.replace(i, '') + #for i in bad_chars : + service = service.replace('"', '') - print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub {service}'") + print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub '{service}'''") # Only work on this if the user has supplied a service name to monitor, a value of NONE # means nothing was specified -- 2.39.5 From f11c0762589be1879ab3db280709760633e69ee3 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 21:52:41 -0400 Subject: [PATCH 178/189] trying removal of print statement --- r0b3bot.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/r0b3bot.py b/r0b3bot.py index 547b645..b438070 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -599,13 +599,7 @@ async def spsub(ctx, service = "NONE"): datestring = datetime.now() datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") - #bad_chars = ['"'] - - # using replace() to remove bad_chars - #for i in bad_chars : - service = service.replace('"', '') - - print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub '{service}'''") + #print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub '{service}'''") # Only work on this if the user has supplied a service name to monitor, a value of NONE # means nothing was specified -- 2.39.5 From 65a608395b6cbe6a9886cf3e627138606b1634c2 Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 21:55:00 -0400 Subject: [PATCH 179/189] adding code to allow inserting _ in place of spaces and will revert --- r0b3bot.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index b438070..c0b92c6 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -599,7 +599,9 @@ async def spsub(ctx, service = "NONE"): datestring = datetime.now() datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") - #print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub '{service}'''") + service.replace("_"," ") + + print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub '{service}'''") # Only work on this if the user has supplied a service name to monitor, a value of NONE # means nothing was specified -- 2.39.5 From 63602bc19cf894bae23a197d12c591f0ab61c61e Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 21:57:31 -0400 Subject: [PATCH 180/189] wasnt saving the result, doh --- r0b3bot.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index c0b92c6..8c2a79c 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -599,7 +599,8 @@ async def spsub(ctx, service = "NONE"): datestring = datetime.now() datestring = datestring.strftime("%m/%d/%Y-%H:%M:%S") - service.replace("_"," ") + # replace _ with sapces + service = service.replace("_"," ") print(f"[{datestring}]: {ctx.message.author.display_name} called '$spsub '{service}'''") -- 2.39.5 From 83f7270d6bc525d8c3ace5b76e4fdc796381da6d Mon Sep 17 00:00:00 2001 From: Rich Oberholtzer Date: Tue, 14 Apr 2020 21:59:10 -0400 Subject: [PATCH 181/189] updated help message --- r0b3bot.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/r0b3bot.py b/r0b3bot.py index 8c2a79c..654604a 100644 --- a/r0b3bot.py +++ b/r0b3bot.py @@ -914,7 +914,7 @@ async def help(ctx): embed.add_field(name=f"{BOT_COMMAND_PREFIX}help", value="Gives this message", inline=False) embed.add_field(name=f"{BOT_COMMAND_PREFIX}last_error", value="Will display the real error message the bot has last encountered for additional debugging info") embed.add_field(name=f"{BOT_COMMAND_PREFIX}spstatus servicename", value="Retrieves status of service from StatPing") - embed.add_field(name=f"{BOT_COMMAND_PREFIX}spsub service", value="Allows user to subscribe to service status change alerts for the channel. Can replace with -list and -del:service to manage alerts.") + embed.add_field(name=f"{BOT_COMMAND_PREFIX}spsub service", value="Allows user to subscribe to service status change alerts for the channel. Can replace with -list and -del:service to manage alerts. NOTICE:Replace spaces in service names w/ '_'!") await ctx.send(embed=embed) embed = discord.Embed(title="A note about sound clips:", description="Sound clips are only played in voice channels. If a user is not specified when calling the command, the sound will played in the channel of that issuing user is currently joined to. When a username is specified, the bot will play the sound in the channel that user is currently in.") -- 2.39.5 From c2f905229f632d82c54f16d13fad5d6eaed7307f Mon Sep 17 00:00:00 2001 From: Rich O Date: Wed, 15 Apr 2020 14:43:31 -0400 Subject: [PATCH 182/189] Updated README.md, listing more features --- README.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6b0ff9b..30a8422 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,15 @@ [![pipeline status](http://gitlab.rickelobe.com/Bots/r0b3BOT/badges/master/pipeline.svg)](http://gitlab.rickelobe.com/Bots/r0b3BOT/commits/master) -# Screenshot -![](images/Discord_Printstat_Command.png) - # Description -This is R0b3's Discord Bot. It's creation was basically a challenge posed a coworker who said "Hey, you can write Discord Bots in Python... Make one to display your 3D printer status!". +This is R0b3's Discord Bot. It's creation was basically a challenge posed a coworker who said "Hey, you can write Discord Bots in Python... Make one to display your 3D printer status!". But as time went on, a few more features were added. Aside from being able to query and monitor your 3D printer, it can also fetch the current status of a service monitroed by your StatPing instance. If you'd like to "subsrcibe" + +# Features +* Query & Monitor 3D Printer Status using `$printstat` command(Requires that your printer is connected to Octoprint)
+![](images/Discord_Printstat_Command.png) +* Query serivces states on StatPing using the `$spstatus` +* Use `$spsub` to "Subscribe" to service change alerts for StatPing services. Subscribed alerts are persistent and are not lost on bot restart. +* Play a selection of sound clips to voice channel members using the various commands (`$torololo`, `$oops`, `$promoted`, etc) # Requirements 1. discord.py version 1.2.4 or greater
@@ -14,6 +18,6 @@ This is R0b3's Discord Bot. It's creation was basically a challenge posed a cow # Configuration 1. Create a Discord Bot via Developer tools
-2. Enter various configuration parameters in bot_config.conf.example
+2. Enter configuration parameters in bot_config.conf.example
3. Enter OctoPrint config parameters in octoapi.conf.example
4. Rename *.example files as *.conf
\ No newline at end of file -- 2.39.5 From 79043feb91d421ede125359500ff374ee129ecb7 Mon Sep 17 00:00:00 2001 From: Rich O Date: Wed, 15 Apr 2020 14:44:40 -0400 Subject: [PATCH 183/189] Upload screenshot of service alert --- images/Service_alert.png | Bin 0 -> 15129 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/Service_alert.png diff --git a/images/Service_alert.png b/images/Service_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..e83d3f7e6a861150e77a455b46c2280cd12eea57 GIT binary patch literal 15129 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
Lj*&2$S`q*gqHZr@Z=}ya1l%A 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 Date: Wed, 15 Apr 2020 14:46:01 -0400 Subject: [PATCH 184/189] added screenshot of service alert --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 30a8422..4f46c46 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,8 @@ This is R0b3's Discord Bot. It's creation was basically a challenge posed a cow * Query & Monitor 3D Printer Status using `$printstat` command(Requires that your printer is connected to Octoprint)
![](images/Discord_Printstat_Command.png) * Query serivces states on StatPing using the `$spstatus` -* Use `$spsub` to "Subscribe" to service change alerts for StatPing services. Subscribed alerts are persistent and are not lost on bot restart. +* Use `$spsub` to "Subscribe" to service change alerts for StatPing services. Subscribed alerts are persistent and are not lost on bot restart.
+![Example service alert](images/Service_alert.png) * Play a selection of sound clips to voice channel members using the various commands (`$torololo`, `$oops`, `$promoted`, etc) # Requirements -- 2.39.5 From e20ac2c8497853416ea40098b7fec45362b274ab Mon Sep 17 00:00:00 2001 From: Rich O Date: Wed, 15 Apr 2020 14:53:12 -0400 Subject: [PATCH 185/189] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4f46c46..d603ba2 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![pipeline status](http://gitlab.rickelobe.com/Bots/r0b3BOT/badges/master/pipeline.svg)](http://gitlab.rickelobe.com/Bots/r0b3BOT/commits/master) # Description -This is R0b3's Discord Bot. It's creation was basically a challenge posed a coworker who said "Hey, you can write Discord Bots in Python... Make one to display your 3D printer status!". But as time went on, a few more features were added. Aside from being able to query and monitor your 3D printer, it can also fetch the current status of a service monitroed by your StatPing instance. If you'd like to "subsrcibe" +This is R0b3's Discord Bot. It's creation was basically a challenge posed a coworker who said "Hey, you can write Discord Bots in Python... Make one to display your 3D printer status!". But as time went on, a few more features were added. Aside from being able to query and monitor your 3D printer, it can also fetch the current status of a service monitroed by your StatPing instance. In addition to just fetching the current status of a service, you can subscribe to receive alerts for any StatPing service state change. All subscriptions are persistent and will remain even after the bot is restarted. # Features * Query & Monitor 3D Printer Status using `$printstat` command(Requires that your printer is connected to Octoprint)
-- 2.39.5 From 82647b2597ada679a53c0f9f6a68b5f0b674dd00 Mon Sep 17 00:00:00 2001 From: Rich O Date: Wed, 15 Apr 2020 14:53:58 -0400 Subject: [PATCH 186/189] Screenshot of command list --- command_list.png | Bin 0 -> 323394 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 command_list.png diff --git a/command_list.png b/command_list.png new file mode 100644 index 0000000000000000000000000000000000000000..ea73555fb7a6df77bef7d4787baff65b479e82f6 GIT binary patch literal 323394 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

Ul~Drfsv&dyx1!jC65A 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 literal 0 HcmV?d00001 -- 2.39.5 From 0976c2c9e319cafdb7e9c6f7576b09eb5198fd99 Mon Sep 17 00:00:00 2001 From: Rich O Date: Wed, 15 Apr 2020 14:55:40 -0400 Subject: [PATCH 187/189] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index d603ba2..81b3787 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,9 @@ This is R0b3's Discord Bot. It's creation was basically a challenge posed a cow ![Example service alert](images/Service_alert.png) * Play a selection of sound clips to voice channel members using the various commands (`$torololo`, `$oops`, `$promoted`, etc) +# Commands +![Screenshot of $help](images/command_list.png) + # Requirements 1. discord.py version 1.2.4 or greater
pip install discord.py -- 2.39.5 From a0d5c63aee31b23e559e586b1dd87d804a06932c Mon Sep 17 00:00:00 2001 From: Rich O Date: Wed, 15 Apr 2020 14:56:58 -0400 Subject: [PATCH 188/189] moved image --- command_list.png => images/command_list.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename command_list.png => images/command_list.png (100%) diff --git a/command_list.png b/images/command_list.png similarity index 100% rename from command_list.png rename to images/command_list.png -- 2.39.5 From b222b2342eeaccc62427f2b02743f5294704418b Mon Sep 17 00:00:00 2001 From: Rich O Date: Wed, 15 Apr 2020 15:05:43 -0400 Subject: [PATCH 189/189] Update README.md - added links to octoprint and statping pages --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 81b3787..aadc5a8 100644 --- a/README.md +++ b/README.md @@ -3,10 +3,10 @@ [![pipeline status](http://gitlab.rickelobe.com/Bots/r0b3BOT/badges/master/pipeline.svg)](http://gitlab.rickelobe.com/Bots/r0b3BOT/commits/master) # Description -This is R0b3's Discord Bot. It's creation was basically a challenge posed a coworker who said "Hey, you can write Discord Bots in Python... Make one to display your 3D printer status!". But as time went on, a few more features were added. Aside from being able to query and monitor your 3D printer, it can also fetch the current status of a service monitroed by your StatPing instance. In addition to just fetching the current status of a service, you can subscribe to receive alerts for any StatPing service state change. All subscriptions are persistent and will remain even after the bot is restarted. +This is R0b3's Discord Bot. It's creation was basically a challenge posed a coworker who said "Hey, you can write Discord Bots in Python... Make one to display your 3D printer status!". But as time went on, a few more features were added. Aside from being able to query and monitor your 3D printer, it can also fetch the current status of a service monitroed by your [StatPing](https://github.com/statping/statping) instance. In addition to just fetching the current status of a service, you can subscribe to receive alerts for any StatPing service state change. All subscriptions are persistent and will remain even after the bot is restarted. # Features -* Query & Monitor 3D Printer Status using `$printstat` command(Requires that your printer is connected to Octoprint)
+* Query & Monitor 3D Printer Status using `$printstat` command(Requires that your printer is connected to [Octoprint](https://octoprint.org/))
![](images/Discord_Printstat_Command.png) * Query serivces states on StatPing using the `$spstatus` * Use `$spsub` to "Subscribe" to service change alerts for StatPing services. Subscribed alerts are persistent and are not lost on bot restart.
-- 2.39.5