From 7933d45840dd830bca8229aef9b106e71b6d6934 Mon Sep 17 00:00:00 2001 From: JesseTheRobot <jesse.cruz.wright@gmail.com> Date: Sat, 7 May 2022 11:07:44 +0000 Subject: [PATCH] tweaks --- cw/package.json | 2 +- cw/recv.data | Bin 0 -> 28809 bytes cw/src/client.ts | 3 ++- cw/src/server.ts | 3 ++- cw/src/utils.ts | 14 +++++++++++++- cw/yarn.lock | 8 ++++---- node_modules/.yarn-integrity | 10 ++++++++++ yarn.lock | 4 ++++ 8 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 cw/recv.data create mode 100644 node_modules/.yarn-integrity create mode 100644 yarn.lock diff --git a/cw/package.json b/cw/package.json index 8cd3726..25a1610 100644 --- a/cw/package.json +++ b/cw/package.json @@ -7,7 +7,7 @@ "@types/koa-compose": "^3.2.5", "@types/node": "^17.0.25", "ts-node": "^10.7.0", - "typescript": "^4.6.3" + "typescript": "^4.6.4" }, "dependencies": { "@noble/secp256k1": "^1.5.5", diff --git a/cw/recv.data b/cw/recv.data new file mode 100644 index 0000000000000000000000000000000000000000..c839beb4cd384f565aa7200ea52dc4689ad80a99 GIT binary patch literal 28809 zcmX6_WmH?;5)CaBx8g2Ei&MO~OK~T-ySo=kks!t0wYa-Oa4GIkT!IvLc;S0LvRKKw zH+Rm+K6_@L5U!*kg^EOo1ONa~Wu(Pb005Zkw->?(=qE!8te>HO5FMqpT>t=NthW~o zAT0wQ`XPa<gqEwSgSo4Rk+T^<#MHsqj9kXf$ihs;%*fQsY1oV(0C2>W5f@SOTt3c3 z%)q`*z0J-#J<Rg?31c2;WN0Xi#tWAyW~7u~LY0H>(!(&2@-^0!J3M>|hs(zJ;`DRc zac6qJxb9kWT1ifcu-b=@N;{n*mEVm53HCbM_79q}0zA+K*3{?J=R9uD9`CUQT-7xf z=B~^3?}b8t|887P{Zid64mDIb<BzW9HV1E}0x=@=t&<cI8Vmps=-D461^|S)5fYUZ z$*_1$tL<I8w{WQM?Bb~ZMWCj2q<9A~R<716Piig(!{7>$hc9vvb7~m^02uO{#>h5> zAEqwMnWBjqS)pH2<X90`bk8T$s$SbU;s|T>9R?s=5CYN*ut7mc4prxgsO|;;$m4p! zCc4L;efh)Y43Cj<p-vQEJ<_3-{}ik{*GhK=51*1CGsAJ40O5Sh;5ga0OAvQwn&5*z zK==uS2h>vxwRA(Ka-xd~vOK>E9EjnlX{MMZd-nklX0U0TOaY_>i8Uz5V1L70eZkow zbeOT>l+-niM{LG`0c>{OC;u8<<L3NPCV)Y|8Ap2Y3N~fOA-cOm#$Z9f2ax-NL4!XV zWmOeQG)cann1h^3sq`f^>yR`7uqXh)`Gr|PN+a(i6MqbBOX)TKZBQT#fLtH5rn|kO z5~JLnq%!DVu=N$xr&uf<D|O<1?ELfB+(>IYdc2je(60w<;goxJU>Xus!d|own~oq& zEpYYt;S>B7g$4YOW#rGjNCTI(w1l{y2};u{X66<Z;SwtAif6yJ7fC-lqpoZ_A(q;) zfEM0U2x31vaSB77c^<N-<khw&veI;xx8~D}g?dI^)M5`(viIi=;i`vv1?D}VKli#J zf&+J_;`i@D?)eS|#!3udhwz{_`>13dPD!Qqr%v=A=#kJ^1>wZ9PirMK)m~6`Jas{E zz-7N%w3`~X6%uaNNjFp!J8@%~&yBhFH~VNUAEWg|eT}~Nyn7Fz`srE2S*Jf*3$?kB zd)-shjX*#n709zB(L62SRq9`^{t?^iMW<p5Y&^<55l=gL<I|O6h{4GE=5ZK95d{4D zo}|&QXTCXBA^d{ob=nP#I(z<lo0zPve5bp#hNqT&@b$g{JcIjhQNZwnfZ(VMhscrN zwV|H4w-sI2F5=*!&(xL_<7rj4EiwaxJGUM8JtN0XG*Gnkg4aT-<TUamHFG~YQiwu5 z=49vx_hap+4j9C1pk1imebN4+FL9B$wa~H_!D5N2ARt=Stn4M>NFj*;>jVHqY8f!d zh}pyn_@E()Ob3fVq^y98c0-%byx$qCl)~@=p($VtY+t<4Cb8soCwcLEWL|>^1-uxS za3x-LX($Eepsr6WaO#97=B{u7pwSTjj#EJ47#vI<sm1X`5Un*UtRHx9lc}(O`@Ui) z(_;hOeQcCS-2W}OY-6%a^LWW&>=6zJttdb`M;`tK?lFyLQW-i<-vxCDYxP&`Z37Hw zVK8n*-yrkcxZV9b&l!jpwZ#05Y*!p?K9Ta-n$<dFa8%efkWL&BNSb7+eejFQ(7R^I zmc#v+PDZK7QU(_dF`gzW{)J>gk%#wti%z@7Fpb6~ekQ~P@K#iKkg^{fJAO4Gd4oa5 zn`yi*5!F99Xjns0aTOfScl?Zcj2CjH{@gj>z=)yYzs09&K6#$4Q0pTzwX<_=h?W;D zD5RyRNI`wyDfMkpHBzZbA*GyJ2GEBV107oE%|qnMLOzfi0s`-ZRf~ts6NB1)FD*8w zwX8moen-Z9vw?cm4V^Q0_M_S9D#YqE1A_Ie)ImYQFad{!BdnzHxt%<c6p#~Ql?FF9 z_-=H3yokluUxqy_8Gb_1M?Y=C3C?%J-|WA|D8rcaTy)>7GmzftQnsPY{k5jng?VMX zr3n5d0<~>Q<Z_&wdr;jhLhonx>(f><@+<-ty717OaR<MO-9*r4n;{dx_+c{y3eZQI z;+gP#06<Bib!kfy)40IL0W@st{h6i85-0k@8(zSGq$Xr$kYt8NoanA#@F<}`hsPY< z4koEd3GIV{=0c$7HfHgRmy+TH$=mh9-wfGPBi7~@KNF+A)dq(xm?DfWMvk%(jalLi zKl(rE`qb)vtg+(3hDJTmX~YR3?_F}?G7@GmGz}wzKSQQI!Bf7~ym0rHMt_FF{sy`6 z+m#9z7ZIO_5*?BAen4?2i2Cgkd=nBhkt-&)u(zn?WH<1@)=(HL6kp2!Sj@+z1PH@V z%f}D)7HvuYh|bE=XFDA9D$U6;wPh#!ip)#~2t*s9FeEG}T#(UQ6Y#70mYff4zmYw2 zYuiAMV;hXI<Nf0B5;XOO_W;}!id<*utyxH80kM5<1U4RvK3~V*q?LiUbP(2V_Z%yv zNR9a}m9v<3baaH6NDcSja(WpJ&8A0_OtG1KEb!c1d5k5i$&HyYLJ$CdWVP8(7(p6h zehhQ^Rz*ok(J8nr=8M(2g+M{iGwe54KFLI^esagGwdCY#l<?(8{?92tLVrwtwYECN z&`7SScK>hP0A$8qM-C%BJLHC@6)fWbt$r?B&r9AnXEzVYtDTo7mse_$ZBLIbvK69J zw}!oCi41Ct8+Do|HR%8EkYl{Sz?`3$n82pfsKmEwjMJf~glEkC%X%+PaEZidoS*Hz zeZ3$E{}yqc(7}$hwB>m7047|}VVccAdxqtI##yrWezdaC0e+=lD#fS?!@<L=c)rXw zAVGxQMTP3+CGm)5X23JZpsgF)X=-6noJ#mv@cx-4fRC3#oIpq(Ak02Rqirx8mY*Nx z-uaIs^J~K-U%Tm%)HE>lzg<`1Z%x(2L}dYX)$PJl3Rv#xRTTU^azo(ZpVwQiX<J6z zk{r}~P_HfGffnEupHq&GN*_85yzU&pU3%A<6>ke;$GF`#yuq*UY)o*-Us%^t)YHq| z;EM5_<5C-*=&F9Kx||oh>~ErgmWw#;=_kw+cN5B~wKaL1{oZY-uLfS<b$}}+6%|Z* zTi~&dTOy9jq_*s+g(2}b1Lzs64L{qrzxHS>x1OB2K8&R{FKyiVKc|#>j=!unS<Pmw z&~b9kaX6cvv%Q7qT~gq?z3)tgo`(C&#U-6ZD(+e1#`*UQ{^ErTEC)U;+_ba;q`>O8 z9Mkz7wjXsC)kA8~(V^Ky&&0$;1>ryM@#gdLY}<O$9@S7eFCcnaj~T>ed@B~3)#0)6 z^Va7cj^AUGWaRoR29=11T%6q8p=#ZP%vptcXHQLAzV1XL;mM)O)StSD6?coE2muf{ z1}&hT9kH*on=MvTY&A4ga2Bk%<{qgCeMk9#w!C;_ph!2dABgJEluN8@Uut<*y$|&i z07DFa{MFjlwxBOmj}49g!=59LXrsKkIv&`@&+mQ5^-Y^=XKigZP#Im<EWfZr#C<*G zH#aB{mFb`7Vv+n=(qJF21U)?zhcGHL$<A^|=jNW*_Z=T>2BHzaODxVgtT7q`M_%_n zW=v0UoTjmHSpFfGhm`U^IT<9P8hk(_RH#d;nr)Zo)T~spvs;T2@;YXV39Es4j!$NL z=26a1#L_R-PQw6tR%grRWm(Ysw;MGL=930AfIvB)8`1+>W-%n>ko2>In(c(dL>aj= zZQ`pNVnOF`4_SW3e#m>1`6h#kVHvCr$T9m-r0SyEgL-0zhljNgqlL|ffcwu&ZBI7* z%PKPm6J-4I+V^lUP5bfj#Rq*cf*QabQknkwH;U2EfD_)V`b6IK+AYH8(wJvZ!jHTV z#XXkO-p+57Ssi%p>wX<Y$ISKQcTB_YdKY&0_>j7Q=#=r*0(U&|#lY>H((hvUcPH$A zaA<VcVP!~mUQaOmBl0Hj^%H~sSUHP8o=iI*AK$xhygJ#mw^$-*F)DZ35oHPma2_V> zdB)Sq7i45)bl$3{s#=Zg*o34UFLxyW#KTdRji_OLrx0N-2V!D0pkO5A`u2@6g)u=Y zCKKZnd`kMt-#Gt3$oFtgvvh{fcFH#wCgyPLE`MTHG_dUT2HJ7@-2;*IiQ;+6A1iEl z6LiB8k4bz-O!@q`3aTR)jg87=SdL3gAQ46jxgXn63-hHw;Y?h-H9Os?yo+u__xd`} ztvt<@dwzl_4@z*o!&a<`HOek7y`82U*($+31hQMy_9<~;tLMLg;EiI1>|AJ$%r~I& zpYA%%)o>Pb`sypRmnxFw%Bg1$F$b)57*N=>-nbj^cMi-O0_MTXydh8{IpUKw`(rWo z<L>ci=jX1U{hs=1DW5Vw;m-ZNPv`1l3F1n@1ov4z)c@so4&CsTxp~f&Sb!b7joU72 zshcx*VaRN#ac6#`xd(-!X<L=vEns7`R#Iad8=Gu6FbwH6Dyp%s^)v7c!6qVv{>ztO zMssAh<&)Xz>CXc-zBY9Fm6e!~k&zMhdJ^mTg@Q@OFZC0>LGRK$E_Ii0xR=<~82n%Q zvDg-(-ZuF^axEO=F-=ii>A@~M*H>54^Ya6O=dIf}K#3giVA~CX2PHCrqU=A5qHirp z?q^H;3cBmkpwrgi+PXS7htXmADh3^ckirGRbt%$UA{8xRpIefDVJ`8&_IdCYuLLPR zKo~D7O1-Qgd2rjVZRx?fgj)kC;w+wMeTnWz=wL(=qrUhacHKfN31v?zgH3&7!!;rS z&@5k8w#3y{#()$L-n9Msl%^(f&bp8~y9LNLC^wH(UX|-6^!oF-UD0pbAm}5j!_g6h zXn(B5OPDcR^^Kdm+Gz3H*Xv+}5;F3To*VaQdk)$?_m4K%mmvVOmAGO?_BK{;UwT&@ z@?{nj4rrB#f7KjRhKR0e-K{S*r+RxgELc75bhsJSbUrc8Ct&-OXRAU{RG0;kAiTuT z=ejOwaW^?Nm$YL4s?@9md&-hM6?%IU$nD~8(dR7DW<77_aVLK%D%y{JYJFY#Kk|Z4 zp<W!=(9m>?#lp0$t^+zx8#jNrT0;hJ=r&q!yu61I>f=P;Ewwkb*bAL~Ft+7dae4#p zegvyVHNDZg1~*91z3WB?h!Y;@>fXxlKzLCqj=goPU1?2_K~54D(dCfj7x45XK_R3; zKtMn?_;4?dO$i{ksxC;A;K<9`OX>^7JA8;fBGjB2E&pamal!A-<$8c&<>l71o!23Y zvoAH?$+R>0SwO%J{;hk=V`IwVUN4$K0>LiDQ4eezTUS3SMaP;HK}uV5;bi`P9gOPY z+8gA11Lck#@a2Go>2hzY|3<;Cl9N-6Z4eu3Ive-S#@yQ4vpau=+?)IGXgyy2!a6!Q z?VGao!X(9x8dx0-J3Tx0(%2~U&URe}O*a;Fob<C3t^E+8sVU799dOrkw-EqwaW!2j zx@+iV@3jbVx*Ud23Q$&SK)})ElVyIWHodC%Kke&yyio=EIN};=YHF@EpD$E`LN5`Z zWZ<C9%Jo*~&b;;9qbpC7?2&6O<13EGqoJG}YHPh3)o)%WC20LEY|P$zC@ON3@cAaJ z`$F{e!lycU!m~i>Hkd+EfWXT10HC6Qr`~Rh$<>yLLH@=5yi$7$PF>y1wmGnhIDQiI za^jgioheTOS@ZT!JpPHiqM~9lC+D>cblKz-R<;gwH+~L^_rQL8FuK9LiLSQMCNVNH zH6F|TewdjBN>2GxkpG!{I-f*B$yUE*N5=?$+uBR^_J9EqcVX`v!s_v~9&0S68)(v= zctQdWS{zo%xVKHt4MWcFl8MD66|a0^#LinbX*AI`_03j1d<*V<THD%u*xA`Nz%vbD z&^8-j#~4ui?ZIOgoKPg;E)`m0zOuL?>vK|ElJ{7<u>}|WQ*~*fQxS|+G;n3#z~Q0f z<8wS;A@I_KTJQ6G>3=o}r4=|tn(nTye_FXWa8Jb>hwQakSqxDJkB-t_Q@8_q{?BBv zsyL^+V(7*N84wq<b%b&hiu)Y&&xa5>e3tsy7)&ShY3Jq|4oW95W!x+MA{0n(CSlqh zA73Tk|BO;;OrSnrzFN3_)M<;PCy}2il25{^-AhWEhg4-Jk~kz&L&+*ef~QyWtg2#w z?Ghb>aSgNSnx24Yzi}-3%UR5UaYI1Cer<q{{LDT&8Ly<zjXskI_!RsE^St7#S6Qk5 z?~*o)E)<H<A7$D{3Idue^?b9pu{+jpJm$<Kv15u4Z~bBie&hy;v(`5){Vpv0w5QM` z_u4#r)?pN4a*#y!q;ko(NVwAA!;)FmPX2OZ)Ig<Qwsn3X&Sn4zBxJZ|<X_|aDR{8R zGBA+9W8jrBA@n?%kS_4cJYbWe)qS0WttMaBIHHYf<wTFo<zLHVEwT1}uv<lFMP-YN zIi?Uh2RFCeeva%;RAvQF)1{Qq(^RQv2M;Ec#VeWAtfP;8&d9ZDDN5ptMR`t#Kf~R; zt@$ODl%6hv3*t3L^9T0fEZxpTfKaQx(9%k|hBMO>EU|gdmP~>#!EeO)M*>mkWL{|Y z3t1Y6TUODoz~*h&{gLtV)iIWG#j%kro3g*Z#+cfnWwWQo&2#Uxj7UY(@0OPB)s_*& z?C0a>{jGbQU}Q`HhO_er^xUuh|9Hkbol^yMAAx+nhUrC<BrkXG*_;qw+;0722gWkw z8Y9cY?7xDv^z~`x7MfJ*O<-GfM9H*NHvTC2Z1#dv&zbe#cyf2Bo7KqNC5**Sb^Rgz zmtYK9rrBA2j8lmRlBog$Gc~@mq_7Wuj@zR>!7e2Y4PQ!mjpcEQu^FpvP%EmoR_`l3 zR-G)g^K>)b=qRCX;uDOXMqh%l7wEVxMn?4J7e;OTqx+DCW^%*GO#+CXo54WK6icWf z3`sH?@iDrNIw>=rIq2&$6$RwLQT*xe%E?JCX7Ao!bnEiN*}B)l+9dTfIGoiR5Xe57 z%^3S4Q08{N{`AdS-_PMMk&6$*i62Cr@1p1H?CiX-*w}r7d2PgjL<52(dMxgjpIDin zm`s8G_wP$vor_-kguO}q_ACPaT-~3Zp01aIlJ#4jZ$b>d^^amf0S|%7n4usb8@)c| zi$J1Im(SO0lu2~o?O1X0lg#&~3__>eF=gJ4be+0hpQ+gxNV%zv?Im&9acdN;kUXxV zg<kLE{F9EVb4?DD0+d+rH>Reh^jr#WCO=7G2YktjxO|)EP!!hGl#aDtUL{>ExXbj; z6k2*U2<R4Rx7TJZecLPjFt_Wz7&F~=LIzpaS4d#a{F41sv4#0~KDDDxZYRo3wko$h z+4*H5bq#p%cTe+q50$C)r~UIfi>Z)DVPj)$Vd1rh$GX>T7foNoTgJhDWF>_Mj`f;6 zA8-_smbY8GnQ4JjlD7v`#vvx>wHc-J^~Yc10{!R^Q<ZIhTdDCB{P?MuPJy_LBJ)SK z4|i^8w}g+H4dUzy`eE6jM*5OcNxY`WNsF#(CziP7yc%*}<nR)I*QUn~m!6)k$j!-F zMdmTSXh2ij00(`#B~AtZp;-tAQ*6<Fu1?jiDW{o0oA%{}uIBmn)QRigCwt6Pe5A!) zEhUbK4+dZK!*ot_L@`Z2qKQC`PBHBzU((MSNR76iDj!ObtoeM{a}4j<kM^i(e=4-x z7tYT&;$cx>lfK2R(6h#}gIu0BSKnhm?(0zNWqsx36*g*4k`!Jz?EWXRcDZ7qm-Lb? zOlzbI&`?sQ7+jxJY=h%3DqFFKAM#a0>aAbtT&j^AxPeuPQs}=r3RA6*%7WHrm4#Lu z+uvz^hQi)o7JY{wHqYLxq0fzwh0(|7Y>Dp@TL*hhB}GN-RuhV?!#d~jO=!`*iARkG zP6z-1X#xDQMN64Ov-EFt`3^C(iN96@y@kCaybV5I^%gJLGWqM{kI`NuF1-7$OcK$G zw+VC$-wLSfx<T|~)s~~bl!Jc~m9ZU#9xc3?ql8b^>A%_u=9iN*HMLC9g{1){{gJtD zR7Jc)rp(9fbB+pdA`;Z)cdEFjEC(cXh~Wx&#<wY=Yx7J0MrlSY?P+CivnP$+<sLZF z3`ugA165ht^|K<iyl~k)+*K9Rmf4r+304B`_SPkJi{8u-qTYOYht{+})W4acUTWhN z?Yd(aD~!UqKa*UCH@yL`mp4#}TiU6c+tQxMjXYg+SbHIfttZx4ZcFHT(vXnI{V$~J z<@_*FL-mMgZGv<TJ}hbdX5TUV23~|109cT3s`*UG{azq8EDJ$gV2A&um6^NH;hw== zWO-%fff6A#p_PlzU`mLLsjx8k^fZg|hthe9tf>3_eC#Y|t~3|CeCw-*V8c^mKoKBO zfsv-}`MfE*VDobb9CQFjNg`(<8}x^el`s}ub{)IoR<YuntAC46#4?$EsfKx8xxT5F zW}Ot1NPDsL?y3{p9?ax6%jfmMZInu>X;uRdsHzfhcA$RtE>kuMwb|Kpf&{8PkjL@N zREVbVon=rS(LPKn;#_(X=xZ!s-49!ftrXn4=xWGi&$Z~?JYRQtCQzLtSxUR|oOJah zzDI`cnV($OIn}>0k`n7XSbHEal=#@@Zn~wRXhbYr@;1)Dn{z@j-DLx2y*3mPH*&-` zY}PcPC2dE1hi;U{D9MI6KTY+#nYcb>&oJn(Yh+1vE1WDT_-q&yAG&nx_`+$1_Xfkf zSy<E0+Md0A-ey?dzQ>Skwe8?vdGCT|vB2VF{x;-*m1-t;+lxBC&{^)j(iVRorCxWd z<;8zm$f=txCzX4e8=(#o0|2C{Jay$Y!9G@AdX(B6-PMUrhfB1sbN0uMd>S(sv@Kt{ zIa<>!^_k@#55ZFLg1-r%nn?GIAT@<yuB8E&)J$!AhJI5%CPR$NI9k@-FSLNC@0F9! zCZ`sIaxAvr?P7}t*Jg0f*Dq)_TfnGqG}F3>dV0bU95a8mUP;ICBsjS+6ZQqatYWKi zvwj!+I(wZ;WVe0NLZ2!W_cE54nhC+JyD-INdy`1M$>g1205vk?_7Hvc|00ui8RO+- zv9WM6D9R0&K1?d)FT7rTsr9g7QRSp?gJl{?F`KETW1tWHl0>~N0aAhLX6_V~vHGMv zv45;!GRlkUJ<x_UaEx+~wY&ucUJZnb(yZ?XhJ!&;Gl?T#p4Yb<SzdqnWP8r_yz@Sv za)#<kfu^Q}Xd(v{{FwE*<oe)Gv`Y4yN<uIu5V>McHiluG)wkY*isaG>A+pbS7m~z( z@v;&jLd0dm$E16&`fx@jxWnzBc7(wnXbB4~3@Tn|uV%)Blp8{1ZSVU+55B(@>Xc;s zl#IT&mLviH=`D<=u<vk1o8d+u3|_>YUV5uul+@Zc9v`wz_rDHX6_{QBHx7LF0i{o% zf8F<jHUcwrVXgH?Wu`|cMoZc<vj1hvmrKjhKes5p*Zyzx__rf1tH~3C_}2B2Vwb!; zlUwcOph9~VF8>|L`EBR*#kJRrN;ykB1EW5R&414~K|~X=T&&+Sz!??CK_OJ|D1Wlb z{*$>%n=LfIymHQRwUy5(33T(l);RnEi91gb>jne{em4X|mS_)ll<#ShiJhA7Y7FAW z*JAHyPfu!lhzN@6-|L6?+_w||`8Nk2cTWu6Dy3DR8lP-IGMMLM&-o@pfErqIQ$cuG zUq+9n*tU@GJ$mhE<JYeXSI>j$B~9PbvXt+SEc)4HbZ7Cr3;|RuWsV3z!7d%{?bkvP zmw3MSZIoMo-iJ<%M#Z+YF;|`37RjY(MC5favt90ZJ9SI)mQF#<ls1PzV2H!X`)yWe z=5(t<(ESa>iM?H1x6@@ouL@2Q%(*&J13_Ou5<+t?@EXpw*XSQnz%2v#o>KQ^zU{GN zFf#@Hj6PYfbLQ}lg;@Q~yVcj~A0P}o=ib*&yRC!q<_Xs!qqlX7f}T?D_s0p5O@G`7 zpf&JkfRH%oZ@(P9a;i(m>D{`}@We{pIp@+X(0e7jH}-9+@eXKEHZ&)OgpXOJKC-3G zT3^7jFq#}Q-_fkc?7D6)TM=Jg<xH&i*5~Q9j||O$@t{}EF_>L8{qRI3RJg73FM{3x zx}N5+-mrQ7DthYTZm}S=bwCJ@$^;{gc0LmC4}q7bQDuw%DRS=YN(Wk)d=*n@Pf>pD zJf8n}=mt7N0S(&*JXL(M;^`d_!507w_vnOa9)Lk*wk2T;-`m^sBA^RO*7063v+p#I zlz5{%Fy$<#^PmW#O^m9+1-fuN)fYw3K;1Q`rag`5elWZVG*XS8PS-z+ov3<0>94DE z?Z7gwnLcv25FliRLZMs<kA?Ksd&ZP~)9{B%`|367`!Kxc$6DZMVKVp5Uc*)6>z8Pb zH$ebppd&I2FLZ=KoCxV$=lPrPdE8=}d9C2`q3hlF-_lE=iAP^jrhvG?ZvJc3B|?)P zU?^eeGE}e$?62?Cz!>Pb0xfJ)V6q%p+L12G3oz{Nt;N&-?C1F$JL)y&p{Pr+>$N4? z0p*{4OHd8%SNWE@=#d>yV4NpC6+MWJC29+N9Pr2z-<m1FwQ+kk-X1<sj9W$>7lXak z_%w{e!vNh<<1pRjcmJ|l2A7R=-7PN6g5~;BG`rkJW(6|r(xqoAOzN}yb`_KU9z%z~ z(ln5=$iIBE%p7N36*}tc=8aPqz%H3j(e<&rrVZvIw$?TWxB6+rvP}hwGj&!iKcZn^ zL@?k1;b0x&cXr26M!bA6;$XHfFHItXOw~hRJwf{rMx-P=(*{4BnkAd*p+Nl@gct!y zgf#Pu>!5>D6h<7ApnWbC=(-_D*MyE7K=gWv=W06WQ+w%|Av-*0adeP(wcruoQu=*4 zc|5kM)0B@HnPL`w!VCZ%l#x4Wg^1-ucXT9j2|Rz1IB)&3{Xu?PZ9cP@9?G24%2{YW zf!#5s-em7zO`RkE`bo9g^`DE+KD$dW*P!I`HioAyB;TBh$o_Ufwe)kET8G$ePi&#Q zO~WtByD5|;e+<9w0M%6e6r55awkEDs+}FZp!VnPX#yoBM#n`ZJVS5a!bx400aYRt- zx0(B-rs^Z&lq#dTe~9SR^;w~~RK22V78{g5bLbhT+ruf(rx{~?4UNf1qDn7mN3xOW z<n2Nwy<qKsEmc!%a-H^;&qeN`rPu1LzE?JH9B@jH)VeTQy^Gwhh}Z(--3Q^kFQ}p2 z*-VqKI-G+b?YlX$X}9c7gCB!LJ*h^8&=Es^`L&sxe12^x>AmU(5sTo6#$qrb*amKb z9Gb1aOdYES(uD#NZaTXZoCt7}cNL$K-T?Y8VDg`@809=4W$2Bque|$uWQd&AQzVf4 z%4de!ct*zG7t}|1_TAG89*S{+KXUI!%yeEsQooCeRGd<SMEVY+&z|EAtmu4}U@^5z zLNk*EliU<*g%#Q!JNs(Mpj+1SbeCNJ#%Q)Fgcto(^bMcFfAhNs&c7bfmTv38iOGp8 z>$fnE=<4-p_<y5fu*vmacU*p+=%Uv#IMn8SC3U1`W_$l3Tn2ATk<`aFjf1J@5Jnga zXV@Rm%s5-7=xd<fPBTuIzx#TNUb_W`5~kUQwH3~mk0jhlD))sXwHwLlyn#g<&r2gv zxM*nRh@W`}q>zu1rW`OTJ|5D4gpLOS!%+iKrlV@}YHA_^7+QuK&-mBXUsj57;^PGz z3n<`iV1ovGbx8HZt<H$C=eT?i$0rLW+KQ$_C=~df7U63lDbIzW^h^wouYX5SgrKS? z0SFi0AnMX@eGjFd)1FOiPzBKb3pSGMDy|esVBf<@o37!BnG~dRcar@lg}}wFD!a@! zg@r>}wWE4MYqfO{H^Qq*@W!r`-(zg!VT4rL;69+rU(vfn7)|pd(D2f1eVaeI*eee9 z6z<S1k;)W@Cj@{HC)>@_Wixs?SsLR(4{Kvt$SoxIO;0uAv18K2&KasFwcpAC$@OJy zzsqc?QFd5X5PhI{ANbJ9N-NRP0iACB$+~F5-gklSp1g&w+a)at=8cGD!)#@0Vajx# zr$o1-dww`*q{^=+``qaLb1AFuG$dD5fMgi#08E#tU}{_1Jz<Iq-AE6sJ^6%WN)|O} z!DDV~_H@gPeqDbcD_lbMZ`}0ct?VDd1SyA6e-OL`2>HowHA$vjIO>RejL;M{xGlc1 zEq;C36pPpbyP=Sc=$FvxqwIT{wby^5gHe~&nW)>d|KTZ-rA7Rn0dcD?MjEOd_iM<` zFY09I{}M0%CJvDkClI_vd7DXq%@)mu<mno^V?+3hcE45@hA;&rkh#>QsrYmzaCJo` z2@Us{t;go*+L@rnCB%=uL&oh4%-WZhy!9jm3>*6Su}s~7@=*+)LRrcp@LV(pP+RBI zUzVBIR(ih^6{DS8H64A^Xl1!HucOM78y1TC9&Ftx-TO1t3L(XwC(cO-Xu>lNnAh~} zF_G7m&}Y`_eIGis;jyA=m0%XunXd1bju5rbS7ed>3#W?3f~5fQ_osJ$PcTr$b*zMQ zz~~mj%Jsp}4=l(((XWv#oAV<l$C2te+u-^808S+Lm4MEugjc_sf;3)%Vt($PZ$+6A zrkEQALJ9?LTLoKvCLo+jpL)kSAq4|^I3oDtcf!wl@u?7dJ<-wE=a_^qp3;j=;cF?* z#v}6!#4F;TlGvpkVagC@ym>Lbv!U|{$7PWW<b{t`pJ_GMHCJg_>gK?SOpWaqz`1_Y zbk5AvfMa@{e}6qF8|`+x;wNS1A&stI$TV4C8MS!2O_&q}!c;f6HU^2poxhmg5(D*Q z6PfrUGd%?ap3+|nw-BE%n<K@soNM$IWlDr`bEn;-h&e_U(b|@a17UHirDu740hAxM zzO~P{hS-==9>;{SKD{7qW~nx`HYaUr21sY$569Q4?@0LdvW2vEra$^y)gXDazXTog zS9*AE|I@DV4Ui)=Zb)$`;EMQ~la$ND8utF&n;i2d<g!)pX~w0rFoz#ICPNrm^M&KD z7M>KgIdnjvYAC5V1+ezpaaYdJL@hM#KxtzeJh6(e&>#z>@jh3Eji+vg+rvzf?tTe# z7N-ls$E{Kir_|RCyuICc&=o#6E(5J(ufFy>aKKqt;}jLfBx{_jxR6ZHJ=Qy#5IX6_ zmHlOxeg^|GO;!oR4^uz?9IsCrbNg)QK>_4=qjTyWxr0Yr|2&yG+I%I-y{<d*)+ug} zFK{Yv%v{8?tAw|}D<eHrwY}Ez#Y+ZH5qIfukqc#5YQNFhYL*oW`Fj;JRo4`y%$li$ zQEIrdxb@`-=p4#yZuUFBeZghseDY&d&@Jaq3F=7Cy4M7IA$MJG`)@lkMrbSA)u*?5 z+Y)L#lXu)5`0Gv&8-17Po6U;pM#B)BUqFhO2}EU^xE>)3X=DB6=|s|}-J)u>yHhnY z-XI2Uj{Dt*nRv2(@l=Haf>UhW#O*3dvAu5agEaOP2<}Yn;Iga&dxgJ!aAJ*1Iracb z#+qM4B~xP@W>gF_n6fY_n3-wIIAt5ZUK4E+xhmShs6xyY`%3q&m&1Uh%;fY$#nEhU zeJ-RpIOvfPx)^B5q7$3VcH!Ui8A){A(FOI#DRuMMJRj2eJqyHz8Fk}`%e6P}{2@B0 z(IxAAf}dLsA#J`6PdYk3&IA1js{s$q=fxd3&*nP3q@us4!VH#{_^!oFjUx}E4U)Yf zk0=kL-P}S06X)bgv=`wj%&k8B@bNfgYPI=st;k<Wr|%;8TnG&WIWNJxc`^@=-D~BC z2VK!2hOp>s@KiOM0jX@2BMvt9%zoD;EE6XLx-5CRKExOw`jD|pE*Hb_5C5u>VdAON zjEYsM8EkQwF)@rrjNSV9dk7}|p6k*=7`R;mOA2b9emAJ;Bv+Op@yB~tvzJr0-}>F} zt3^lXK5f%BR3bqSti?C<jua+WD6jq)q{d|EGkX`O-Q8TSa_?f(&x4ulZ*7fwJZ}PH zc)M~@yfEExd5UqCT1JTC*R^ZvHgqeq<MVv34ZcV2dX5iMYlH7G3J<n3Ww4Y>s1Uwu z7AXizwTb$48QoczrI59lfB%J1H)9kWKGdn~Q{*o7?HCUj=OB2GRqHVt<KxtZyYcJZ zlh<Nca!iuK`;)eaZMa0;1D7a7MBLK0JVN6^I=jJbC)nd)D9M9UTSw=|sMv!|+mMF8 z?kiVCXQ=mOooHhW%gbMi(iSy}uT_rStPdlZuXHcCAwh$<AIjG$YB*V{N>DUe7+I+` zewE!S*K5&-9}r?c!(ozdZGmxzf3L+gT%V@9cB*7|TVgV!Ga`6z)+*&<SIH~Be$!}g z7TL935l`FBIKboS&3%H7Xi5>a;h2F4DU`&qbcjRN5&C*O(XzT?PT1=xTS@O@G1y`( zGhZHY`Mg|{U&zEY1ohhfD#-WlGQmQ3{+xsduJH}55q{Qa9{%>?)w5?PYKvP6fl`Qd zN&1~HYUyCh$%`<m=`it_#nF|^CpL`|zP6JER{uS%C&u;g%C@xgGgxTG-B`S*nN<Js zA*HUQm^_qbyfccpPSy=5MXa83|L80~>RhAC+)acO-TumD2kpnZZd(%Onw$l(j&FQf zSgH_0yp6uY{b0&*Zj!)8)#yQbzd2v6R2i9nq7YCYrEs!Zq_wYz>Rz@MCs@(t)(gBl z71^}jK05P`*muV9sI2ah8TsBH#FX_bY@tyeN|=1<A-Lm^O*+|?BokAEzY7?3#K}yI ztQ8ts^`pl_I!2Qkq)fSG_vB_zlYtBsV&07O)Os4Dzp&$n(~K!08BOTuBUSb_u``FV zM$&ADGG>l(!#f_mwKOMRfX-<J*F2fiy0l$41%<Be^|+009OyQ74xjBgZ+S>kZ%!YQ zj9S#AzX7E*O?=d=I?7Ch?I63Dv{km^9gQh9-FFnj)nyrQWfzMurOOTR6WP2Ut7&ox zk2SVy6=9g#YR~iBb4gW>fKb98>@QE@H3ouXQ>zrC(C>OoJmwdePmaKGSE%ijb=(#0 zz6#S)JEGd#GoQISj9<8oW?{0c_DJMNl}|+jQOWUXJv^SMxi&J_6E%9GPqBs&r?2IQ zyGLm}--T=ETg_O|Tt5d0m-WS3=h+v7S4UqJ&ra>K8X$P{HyNUAp0V~0rS+~JjdQ4N zr)mm5db`zPEN9r0yFz?1?wCEu_(D&X3PeUVrTmTA)-lA0I@SH0S&51!<`adfnjfbA zftJruSC!&E-9&cp=JE8jSlj`aFay$*8UBni4s}M`*L<4_i1zPTee5cuh5<rxf=_G9 zDW4kIGK$JL!w2&w%gAIfI<Lk=awZJ3kB*iWI0W8n{m^Rsg?3EhSNwE<0by;qFJ6l` zZB1%jlJ2UAYwU-X4NUcEc+J!1{0;a3-n_HPn@ACXic~ngy)5RomZq{g`#*Q16O|Jh zW%-4T3#NkW37l8#EZkcc>#FZNYy95(M=bY8FqJQxNP%tSPeOi`Clhf-XL6;>?k9ym z(JBy6c)QnCx;Z-jR8G#0JrHLawBD`?sO0G~{Nvba)X$$+C&EjbhA97;!tjHHZ3vaI z@3p|kBexY>F6i+|r11<k^@kP08$TzsaoU-}hZ2%ed)0%5)G2+Nz3?-;C&TOot<7i8 zPA!=`LKi7M;v^2u0h@@z7J7l#0#Dgw@oMUP$9#(xxnNq~>VHKJq~8k2@=g6J>YJJb z^;}NthX$=H`4yo<cO@6ShRO`aiX@Hmek;Gcxw9h2i`o~W;osI%gA56{3CgppKS_H! zU-w@{thzQZk2M7XKVM-~8;aW&eq}$uSE`7Yuz{YpR1X<7Jxe;qG7(bay){}WcF0Kp zU7N1EjHLWRwUJIiX0JNTXu3{ThblS?$AX|U*K=J`k9KcW_Ea8G5#n}C+S0m#W8RHP z{$bl11NTKnoZs6MS0Up#a|S#TUMI=Fn@`!ty{h;>KGNEK!GoBciL65l5t&5b2C+er zKQ23-yLrd>q$LL{t9cT4=Fs)eZkD%DnaSAky&9hlDNdvs=?c3}>#%QbPc;!+-q!UU zA?Cv*vmCCz-n{V?z?m<Ti6;KAEzUFdFE=csB_<Gp%hs8K!VNGjgRJ|U7Hn-9!6aA6 zp+6fzNRn9OxqtnxOdSiIP#&RG&((Iaa~IWbZmgX5e{K4j37$q)bR9qR{w(0CEQmxd z)oL`(zpcSqb(?I!w7Q%Wzh^lrpFD<W!E(*#lh{bnP*z;=rB7!iGkxl0s6J|}(n>){ zpfcy=E)tW;nCNSpv%G1oYpVSGKt?^v#w0h2dB+Il<H3~cd3@i`7&s|}^+cy&gKh~E z2Zoaq0kOlTRpI=zPF0sqjrKh3&l?`&1x1MG7h&A+5eF40)0{1L^;G(|GFu_%`UqM> z;<jBr-)swgrg6+Cx2{7bS&D*!MADKxw0bq)FY&U5wvN)oTMgh-81ISUOyju|8RQDw zsq(k;-SE2w6Hfd&+;lPB*Y-h$rCDlyj8->yDNdwi`j9X8p-P9(Lhj-Va9S1l&f!pf zMzgrUf>02RSmsvgMs$fvcVeZL+6-x`QNfx_nQ5)M0Wk%0wEwcj5{k;QiM!y#2I;Ma zqg4MS+L(@-uzN|-&o5jvDvHH^hm~wrf1*+-sFmG+jPkcYaFV34G*2v%LOmsrEZq67 zq1`N27~nlH?{@AJ?coA&I1QiIvOdrAKChV9^j7OxeKEv_32ECPBV&9wR}BnW`&pJ9 z>z3{uPPgukn(@WWeJzv>iLtsGnV{ukv}TLTz{qO6ZKD}uSn}^eF$9e+T9DyDzpxgQ z3R>$Sfu?xUh1kpdQL4_e7o_=@J$sDaE*fKj$bvqDeJ|W6SqTiun|LDEM6)gEQMl02 zcg%ys0~s-e7HjOo9hjI^ny-g#Z*vvB_V(4E{`)E)^(G)&bh5yEwnBe17KBMOXXsoX z6ZeZhBgBUz9(MdoAoJa_X0kw9db*1g>qhL_q6pS)23`O+`cRI^0uDU2;S)Eq=FmX5 za6k|~7IrVSc0a#9{Yw|nyW8>v!8?9zK_Peb7G7y0heD0j7h4+{UitiomFeh^TKjp? zDSw5WVZQ~MhIKTyY3{a?Hxnw|5-Q$ET8PeHjv!6VDyp`8G4(q<p&L1QzYZR+G>Me= z%Hr7ORWn(Qhky3N%WQ?4$qm^|GZQa2pmTJFA%;?UhGd`0Xes$cpiK6|Xs7>Wv7L}u zl>mPzvDNRig<%ccM`u+uO(j_g)XEV{Lse1>SMx$u#ibp=%_AR!hc0?pbV4t<zJr&I z7l{Q6l_Q;~@WKIU5mK_PogHDyfnIQ7F6HoglYSvn)sx1WH4`+qUXQi)zB4c$``WG! zT9_=?wqcqfz<>m(&OcKm!iu}odd_@hmBVIoyU2O^lOZ^2v;N_AsHP`5&9d|A#o#Qx z^0|moTbFzU#hQZe>*A|qB|F+7<c3qW1B@LX`s4rY$O{?JAuD?1>FZx7cAupmVL!(~ z=arnVgw@_JZ+iVr!x<cr8{&CTAehnCZ&>oPvv{0?5V?b-OwwFOpYt${K;kmrZuYk& z_L)zHY1KMGAW7H(MqJWR+ryl7n}{c->hHNS$_N%}Hr3VYy{DW4a6Wx7n)8cSV_hG< z9c1xtySMJvp{pwXqkq5K{6Jw?Gjf|?{x80WkWq(UiEN5?Q|1%zF-nq7!ryc0ti{B| zuU-WRf5~l1Z6f+(u1p)k$gj{6SatmAm%|4n%PUE$_^a^E=v3gQi^JVnC<)_LpZxFL zt0lg-2s^-4`XXqJZIV8YD5pV%GuUSm&7VI@RzRk1Zj-6xSugqY`tCL~{`9_f_3pp! z`?iha>W1q7B0dnf{thpdM9<4#zyY1BgwDul#E&KpeaC$w-%Wk!H1OUqfgU8oj&#kD zXs%#ZSlx@buSF-BcG{eU!3}tC;_65y+HIUfErR&>F8AtXyz=ODrZKx{I{(FOyOAkw z60&*DR`GAf|CVG%!q}z0g`NDy-gi88vw`Z}T=A8bnfE``hfN!c-Yi+~6B}+Bbd3tN z_SYasBcFjZU(DyGc3rR4UU3^2Y0{>nb{kpUC*h@|&jF_dd{5`_5u+vHnq3ychn^Rm z5Zl|J5-|j=Z#o9lJ3#4qc>mh#3ej%GR(``Z&W02P3*hh48Jt!ir#1Q7-3ub7*HEQI zW4l)S-Ls)XmR_8v#E1k=O#Kh-ZXW3GH#o#)#U$MRY{%Go-Ak5xlUn0G-ztn)Sr)rm zA>9QhG9twgDM3x@{O%&2yM8)6^|w#+McRj}vuGLj=h{zQJ~;+m=7_Z_zMC$TE>;9B zT^)l}nl)9O0afb(pVgeX_193aOqmXrW<xWsvfn3nLzwMa{T+OkBh?S8^JP~D)L<{~ z0X1H!;YaTsNW8-sF)xGWOZa}>E)HZ1EaCYk=giK2Y}Q=A8nfY0Cp)wV_jA=zBp-3r zea5Ix$!}`9%}q#104SDeY($sEwrI<0Xx?U=D?1VB@V(ziuz`=ny@rqfIQ;R3U#mJS z{9HOy)O_X_M)@Hj=>dy4qva|H)J9x9t4D%`>=ry^iHw&#ndWl#-gVTx?ZrmdAmo|& zW}f`l`**ls{=w0QFBE9436eT&5}7#2<RV~%QF+aMAKW|sJ&ZF%G0^23#Icx|LaA*m zSzbMZ6^i6h7iV^w@-^w=gDGOq`PKGTdL;(6N6v?~cT099boTe!PMb74Y|ILhXgi;; ziad8<b($}VD@zH}4I=x^ox!9C_^^!TS|1@qL+U)@)X^k^x}q8?<obR7b<i_zneTZc ztkJ+@HLXhcErCCjW(&(n(mstuI+2I6@Z0m*`eK^t*!khAQ#xBuy7P6Myyt5#*1fcF zu7g)u(j+~%X(gb55#ykQK7kID&Xkz-?=f$+Jn66a81ABubPc?_L&(=7#f8oAK+d7O z-7)uuI<~oxA{7DJCYO$HxNK<4JOWM#C+%+S7)>Gy7NRc)&E}g^UG_PuZB3A)&*P`P z1jxzL$CG~A1Jh%(dhpZ2Wy$RCFskv5b#(0;fMY26N|eJyHg<oBT<uUorVR*Kb=>@4 zT3U0uf-9In5n!+tnk3Tw5#mF*g&d@}Q?FHG6xdw(c=a4nn8U*=QK1t(ZQ-i&&MPnw z414<TJ{GYp810Zlrw?fUIgYul`(2U$7xvJl6ik`1Y15^DPDArc^RvQgtQ__gj0${} z&@KhqHJgkn=ZG}(J4(09La>B9SN{m_#`Sj?2zML$g?#i+D?WDJHep<)G}RJQT4B90 zWy&NjTgR&?HFW+K84Q=GrH8%hv{mhm%i_-VGtOmY#OiE?Wh!iHLFMoX_}jBrP2NtJ zQvNb=RL$juLyy-ji1~O!Y@Z<pzCn<5JMB3n)N*XBB@J}uoC8Xdy+`3L<IrI;@cx&X zl&o1##ts7m;xc3FaEtSF^LzNP`MLg>2X{HIgOI6iwXvJJUI9HD3+tT*PB-B!d(nQ^ zGz<(Gd#?^b;Q~G7#bVI87TaolZH{GvrRnf<k25@u<hR+yye&(S#!8)u%;LSY(VzVh zmkrI<1F#STLhFfQh2mi5>)9FbEH2^2QrmCK_3@vLF-)HoJcd1;LTz8tt7k_BK&w^c zDu@^4m>8@GDf2!lSEgrl^yHVPs-}Xz%p43P1xx^=MKH~<0!dNpSn3uphr^jezIUV! zJMy~^36=yiGj93?E|eeBKIsyK4927>%p!|C{(5OUd&ZPl_%&l(glR&n>=0d6h>V;e z_}!TRSJ&WtBsG3^X-VNG$-MM8y56Tbia0}ogpO*1X|~t#L=JK7Eg?;%HoKHf!l(@P z?t2H_gA`RXPlNu)_jNy3SYde`eU(NjurR7irWUopipr`cW<JehYEw%uA|IX~WSyoN z@&4^5U4M<XabajIfa}onN=|>z+}DeF@?#G<Bvv4ivWFjOt8n1HR8g1G^;B!aXZ;-> z@=$m(aTdE)4>qB>&6uT|zm_3JbwNXCd8Qu6s2;NN>R))%KaFj)Q>oz(tNhMUm`mzl zdkOhOG95KS26G!w!f2`eeEn*t)9s&P!H3(D%&{+h7G)FrHSJ2h=os@2XScgM=M2_r zpZn}5F~tU_$LB)QMg<DH8X44Zu>u1{x)(`u)qWQL>5Zb+E40P!s4p`h`8si;eKkE; zZ?uH^ApXs4>?hDY<p?P%blSqE%+=895Cbm!#OjE9-y~m1;_~(hPrGfI(w~y|6*Rax zi?2(Tb#f%fPMa*J47>j0S9#BS397955$qZ&E%0{HpMM10S8!R5Ay2c*vM1<>Bzk!o zxgK3#0OW=rU?b&j9bMzI)ANR?EqSqiDoy=jq|lI+(Aw|t(@G93oNZ8wxkYcSOjS`( z3nwZn(#>B6WPayOT_U|xQ@krkx=}<V9_es+5^&wlO@<nzhzB1{!%&W@G$qjX>EPra zLh5mybSoR=_`$1bx)^VjB8ZlmcvUPB{#IoiTxW#G!A6?M7bIDThKZ{RZ7xV$GKx*~ z_MelO@HsM^;c;)^60sv06QhVxX0bKUUQl46nqj-+e!w9iM~xjX&0}Y=)J(PNTs=oO zpR?MsadrBX2g;b6YB|je*!u+9WL6UV<v_EgXvJ^-*mIz|3~T$^OwDmVW<FwH7JhKQ zbA~G3O=V6E;(*-_`&K>vZ7E`NSoM1^RwHvBjH0HJiyx}GK_x<XHIsBYO)J4;uW~S> zDLf4i{p)-SW|TiH;GOxOhmWFexfJC@{qOenMG=**DagOuck+^?!P-_2AmO^(;M%31 zyS4hPbcr8}JO2wyda8;{GY=kQ6`)};#6`>6v4&~wT~##bXr!vKDeWk4?F@=Fq3ftf zzS!WA7He}+W2(ES4I}olo9#r|f+IJaBHw}Y^@=<gsn)d~mMfl;VgWgQGHAB65l3{r zoZ~?=Z<{W+B97dwp+hUd_uK3XJEnw>fi>1r$4Y&-`{&S+!ub(fK?|)Ytcp9BnR6!U zj0`U`<zD1x6&90OA%BIi@1WU|-{8Cs8CE?nQEm3B@SeThz3nPd3<wz#{*gnaOsP^H z1u)EPh<xQA=<v}wJa%;?D4-v8Mrs-oZ0E;aP}sGxuGr5UNh%J+lUKnJUUL-LFuE@_ zVNpvyamE>0Uupm*enHbMAmO$y%e!3AeicTq3?M&-A<1|I_k8+}@1ie8duMx6$*qZA z{YNeTwnJlaeC$O1E)n#EB-h?Y(LWNuU|LyvrfHRTIYIB8#{M}XcaWqK$Gr@KS$$d~ z_K?<VEm0x=4VykxT(~<=)Wk%cV1xF`KRTdfHE8uQ6ny68Z`iB7uyvFTR`1V#-L%^Z zPje9Gf5D{l3>M1AnGiW5*e`99ie|=~s3?z2`lUr;60JMWXm~8^d(vnyg}45!p*6WH z6`yRQQ@OLa3-B=Z!%^T#`8h*yx0&m)h`RN<nz|${P6vN8qz%zcUAN+#`E`UlA^<EN z{)nv5%?x=#K_&&2&9i!(0y4e-weRVK5R>ENzx&Cq0!2BaA-^HSSY3<pYbt`~kT9{@ z644X(D{RoowS5Ub-EG)la{?n%BOiw(<(|xZu?9C~-?oZvICM-E31P9W=}cL@gc<mk zz^E2-E)w67-VS+Jm*S*S$NP0HF}?VGVVJu4mK09xV-FFw2r1G0a&aVssViegCyR{s zH3gHvoMS~VYn>o;3>*u9Wt2@Ics9%-D{W{?CQiZ@gY2C{mH!L@eJ$OeAI;vwIa@}G zo7z7d@OKy#t(om$rYM2%_x+yTZiK9LlCV<VM+fY};)$~8hLe%1o}km<6?`gJKm0B{ z@ovTfac*!tCZ+?I(UgG2PLmiNLaHi#GP>Vyjc3JC_ahK`4r=q#8-H<1KDjnZ9TmZH z3BTe3gAOmUtl9><+D4EsU#`1df-ym60%+l@=kjTMIFuPqU)t(PZga6_^q1$c@*qAw z{OwRrrCE#p*q9WEW@c=g(~q)n#~VVA)T#SXD1#oSOa1m63hR~Lc-a}wwvp{U6zOg% z%4|l$v`+aup#LynUX&DCZN@S@ny2+}9*cK0$!iA=s3}7H%oShfIQMX@VTejPy6vo8 zLW^!bJ5vs9o`M=H(D<Yx*Wz^aLdX7K5e~Q~=$511U(%O45c64-I2CS?I89Mu4zb;- zsJ=e8JG45A#B^<23*yqw6qA-<i}smlkcuFKc`)I%eodJF%A$HPEUz)NCXvLS=+lC+ z3Jjz!4@5n7pWY=OX{<^AUjSz=n9)g2z{CkDKSVt(9U=lwH)`WxI{RSF`|EK@z;4pL z2|OnDr#t_Xrkz-4xLSu^@fvxdiOek;L`JDHzmf%}){%K&HuVn8*W5LL$4X!R&U|5o zjXrvbTBK{>^u(c}xU(<pQsb%=p2`#~Xeo7VA+cC^9qhW(V}%79`4~qWVDXZyuL?** ze2|i8JLIlDKR>LhpJfZ~5l>;9q|XxDbBa>m`j|{DI-mU2tT65iHb}b_mU*GxaA91I zPTV<p8LeIXf)FAe%hCb|Y`lEuf9Mh~=ElEi2-)UHOr_pvI;(K7h0KMP$)?}k%huN0 z%We=wpXJ0$_WLA33#GfQW9dv0JfYQkiqQzc(0NpxPWJ7tmZmZ^u!IGc(AF1|#p6_+ z#+yzC5-`uxf9h-7sb_MDc5AFIz+m{OD}h~&A+W;w_A|3kSW`TeUf4lJ)dy*C!)da0 zwTYH2ELaS;Na3VtBb}BxFrrY4`%ujS)p1NjppA4+6vf*>EySTsosz)jM(hXTiL~V? zLA9JPZV1WIgb4_{3Ez+=wzSFz3>aPxDS&__jeupQ1ZTKv5ir-|Z?~|<xUg^UWDU7l z0lEqc0oyfNmlZZ==Q+)JVQO&YjzE><jlhZ5CM_MT2evARzDDt~TB!T>>-wiQ$Y7)v zqSF@n_AH)`#vEY5g>*e*Z9Lw^^Ej6)Mxz5m!Q+ypwFb9;2v{t#INV>5pJEQ`^GcCw ze3O*x`^7;79N-an#py10m{PPI2Xe40O-J3o8SfsUJyVAns~{2qChs__Z9ydqtTymX zniI;q?wB6FK42-Ps2#sJ3$O?ku(%S0gc<{DY^+)miSMzRg1g~xxhXmL37>-lg5qp} zu^YJpY~6hJ<-IX^zIlv}>o*33MO$YQbDwxg=c9+MUo^2y6wYCs3j!9aEQ!<?4Q&rD zDOJe|<KO_%_17qYa=oVL@70ulvYMtHycBaMo5$#avc7}`rvAXdNz0ba`zZBKTgklR zm@79d)DJ{X+=yU(0V5=u3-O*veNmPv_;E15P<qZc8kR3CF&_KUTdv4ufem)$H7P~h z8E_*qH^07*Y6fP|#iHDpIMHl<@fe*Z)bhVH25<;B?%{J{;%?0Rkl{P_rZuY2?*V~K z1R!7_i7ha<`!FX`-<OdqABbV?>=F$tIcZf5IX9wr*gQubcHchTH7=%?K*1d2^;=VX zv;NF0dxI{A6e@0g>yY+^Ie5j$aS9-2MvD5%;ml4W5HV093Km#QvLupUR%qdX3wyu! zxIG3>9ylV6D=o-Xps$sQR^yUI+`hv@Z%H9_eL7tvH>=g(^P^(0@=co=cTra~VxKtI zw$QRa?xa6_^QNet=v&KAi*3;?UP{&|A14JkT%M1)9+A=<UFv&WO|ZZs!~qoOg#{L? z+!M(!^NmF03Jc!i#c<gm?g3?$v0ARkwN-KWFUJ+od0b3aaL4gsisg|69Hlt^qM`j} zx83rWq8HRLsIHwRmY>jJebpGUR6UjFyBBFc_C^J4fZ0p{))z=p3oM-OLr(VeZO+FX zXE{gahVcc|l4cP%E?@ETz%I9mlDO@kGurQF$K{2*#m(2s;(!5mE1D$BjO;oSr+F-F zoQkV(<{6jJ8M)yey&#Dg(TmHji~Li{D|@x&eR*48a&Z2ahH*gA3vB6JG9RjNjY+C} zcdbee7`v6Zr3xoHa|tQMR0;qA1IZ;|6sF>v+{BL?^ZA*r^=)FBrLmrzO`*E@h0z0P z^wIuRB&@&N7@CbgI6_^(*a{n_y+Xa5h<)|xW_tN+bEzdGG9l)ldFL3VU(nG~M9qDu zbNowGL>X5k+__4fv6~0Ti_)k5vaeqy`WxRnLE9Eh>gyvn#B9NxDEu@dd_M7rdl#a+ z_F-6(m$`|b)~>Q@D3up7Qnf)d99<Wv%EV2d1oahZSDNYnJX0=;>4uwIcATS<zn|3i zp>Zm1(i1}sZ3mA_aulN0^U0REZyOc1%30Jn3YB}yfr#)14gmx#7FiO_FXw2&{c}ev zc4g)Y7DpB484bJEZiNLX!pb4_2FJqsM82hi7XRl~5m*sU@tU;ZfW8lL2WlnvAy+HW zTK~||B?37toA;7+?fb5P8kzPgO6PLg_A`pBp19{c<wL(BML7;Z;*kixi?9ipS`$BR zN#U4PN*l%wAV;ce5Z-qzjQ_u3*$rZ>OG*5E$H77hk8$x>mr`jdhUatj4tsEy!nK=^ zQ0b9Nv}y5VIyXFYmL<Clbz5G6tgo|y6U9Xy-iKY9qd%3bX|=Qib|2?EdMMp&5o4-c zgRpmCW+K-hj0P`A)4II8B8-1Qz+w`<FvH?P<R*UJy_2{F1$UD5E_6Diwt+mOWIJyi zNBbmeY_K~AOpApjHx8z{O+#J9WVxxP2=EAWgWWxvXu(nC`7CZz&KnA=_a&{WURYxd z6Nl4#3&+u=L79fvHMF*kKK;r*u}(uwId9xDCDPP=xt|55P#%mQQaE@+4vtdwZE)%R zfW!|_+<-FC+nIzB?yS55haqt>Ii2xe$ELBdithqpi9+N+4%?Pv;^|oKMsmzyr(O0= z!|Uhq5grfmhO0dEPAYNzJt$kY4j+pbw_71C5qZo0u5N`ff4)&yTM;dE7Uk2a>BY2b z+Az(59%Iip(X4H!MUaSL*e$9g+B`1!>W%szX86H@9~cz6Gq3%@ZL(qX9DT^C6v5E+ ztIq}15jlzZ9;(j60*eQDfcAlKSz&4&X^SnXK?#_gmBvwSJ+mi}Gg~>-I#5WrE-Q?= z<*1<>dmxK!5>FcrkV6vU#u0<4W>^l@<@dkQ7fH__10}09x3Z2>^fvL7LoNF9pbl%s zYN4KMil}#Ti8vSBWRzqCj1$$Ba=`ffzV`53nz!L_pS8u~rCS$GqQO^MY3cv_TfoiW zV4_eqv`ix4HiUr1&4v0vG`=`1C55saJ=AJ7mW;|bKE46^mY!mP;zU|GxMGK{GDcd) z!Z@Jg`ZFPMCCX|+Z3`9f6z&{oP7P42eW+plOVm1?JW_<sdt1LOVkQ}FyfA7|z=xEV zzvJH|yl1c^e5>!F^w)Nao?J@sxERn4SKX+<VMuHer4mPZG{1a=CAjB+qt}h_KQWR( zu~7NnguBRGen|h9d~j{xWmx2fHN^LoaQzu|ArBC&!s69+-yB!hWgpkAl0~dE{uPMA z44W8BZF{(k+Lz4{W32ujfK&u^7z3_D2w2=u7R@googLg0@|lT4WZyS`c+CI3-KYG< zVU+Tc`oRgyX9ovf?#=_Q5cGIN&H7@r1aC;k*0STc=C9-^($fm(FQ9;>*{-hV#!_ni z?(L!@vN!g!3AjrcaBL9VhY+xMfD@UWPUo}H+y<_T$ZkZ#zqSDxvLeP2hTbhzQYxxN z74&{^t9z}r61QBdUL#SgPZF=id*V~XZaJbnj}w<Qwvb`#*A*ZWIK9EBcrm^eI5<$K z<<Ujdaqmob#A~tY_$yH44HWH#fW?J)NiXFllPT(P#=*J~kIA?Zg~cTa7z-EIMYPDc z4tv}I2EEr51^yCtpJ{O=@_5+X6Y+I1aM--s7@tbrM;3qI2LOI}u>NVQIQHt+v$2XE zLpqfoc<c)%P}8qIFI<bj5U{==U~vKaxntrHHCQ(yKglZ<cxB-d;^h-{DB9i67$g4X z5=WX~H=>p@N*u|jX3@kF+@Mo!?2Fx}Dm5QDB|)|mwsgEjH|DoK7R&gKNe1ISEY3w> zMi?o_A%K9z0}sT?hOiqkzcV<u+rGJ_@-w6xsa(Rcca$PqVVYa6Y#$f6PGUTX7^eVO zRgQh2$Vz@Nu%?Pm*q#T1egb!?o>E`lDy(4NhYq7~`UMCJTj4&0fB^%P<^~rnc5Ftm zV%aHQ_(sb;tGv-{g$Y;U#K7ZW@gQRCI#dhXV2e{j#eI);rP>MG#{%XWm`2Fz>J{l1 z0M-{sZUNgGQv#N1Rje+~^$tBvFMV^q`gBDSuYDSBir%in{sLB@ePg-mhL-U#ZxM^N zzz!C!xdAHbZ@)&{y1XJgU7fJi17kRM&uBM+VjHSzK)?V5j3}mD1>72bM2dexGYi&( zzj{xUjA8-%;;+m7%13$NdWx#e4ms*jA;Fm~GEE`%-qy*MiP}YsqZ6|`V&h;BYH@}9 ztHBjWG)5kpd@6th>V&Q6?$z?3lb(h<PngKdD}sPQz~Y9OYfv{OJIl}V;#zpVRms^J zoA>r%*>!w$+jzzGb7>>B5>vXYFovV^wD!j0=*0VXDz_<#6l@7DJfJ@A#Vu0~j?lcy zegeiVR4&$&`9zg$9ZGido-sK7#qPuW6f^ET;bAKdL2?oArKDm`z<6w9h@+P-TV2lv z6D6TiYN;_{PbF=;dy?P#Tq}=zMR6fmUpNoUFBdFWJg!8w8iIX_>=q9e2exqR5x#`j z^5US4K*fo9pLA>+=YCl=mgizOuia;?lABY`dhd8&X8|71{7AB<eaAE>*lf7#gb!F> zu)yMqn2a`>l6TeZH29)&w_>$kQGdN}dSo}6Z}@t;6m#&zXFrOpHOAt_Zp?uJTF9`t zY6#pgif{8$7OyWpTQ00>KBqi!Bg>_~-{JS!Vz>_>U;q{v!~X8Z#;Tau7W0LAvYf0Y zb5#S4mHy7MnHBp$c~Gig?wQBqVcrcgBO+q<RP|n3{qEeIE^Ca%f<x8AC>kQqYv!52 z%W-;u*1!#e;^lkZ*z%Hl7~$&k({`Mp{c~J_IV0@7l$DL>!*JdYa1<b5@do?TMn>h} zNrGkFd74rWo+ndB{~OqF4WE~DA9}+AR(kZ3V$`A%9C*+>G@qP<azr019^bKS_*mPA z`Q~4j6}bJ1HyjPfmJtgWTR&QAF6vqLO`im|x)@Ficy~%jzE%XoaMMtq{5w7;zR0<H zJ+MpBBVeU@D9Rf~F#ZJri%a%LOTg0JIndXwSqbjQ%Qr9<B6cw`Jbtom(IicQ0PIR+ zSCm!7-N+)<J1pPzD$@YdqPKcI2X-{4yQ2K8Izs0?#dJA<g4>p`OVUV_Ob*f*RU=t~ zmD+^M!@E;8M;$WWjYGw8<YaKK02w}R-U23PeR<AjAh=d$aW;~d!w9S|2w2<-*y3n> zaY}uw>imXjBk1+}r-{E=thk9`PD6*tA<_!x8u90p!tNRFTcuPBQPfeqRIh*M*qY)7 zmv<i2Cn5~H7TFES6I(@916;1XssUHm?JImNT0F)TsG__QoDQJVg~^eIA|*j4(onAF znw<6JIk%o>mA<eW`3t|^N{thTl67c<s5%cIU?4P@oK9z4??7W?)e>@bWR5sl&umt- zz__9~7iHbi)J&&Rf<MMAU>*xjj;^J1{3>%Wsejt)*M3D<8}9rjxe`@=aI&!0aj|H? z;-yloSB;)YBdKSOf6EfCM(=%WSiF=3jJfx@9RbHY#c>x^=0}jdY`myG4?;q7US3fy z4ny)`UbSjfT<<_<C;O}D>rqkv4hN+kyXbd=YJYGZIcB+@v<q!k`lP*sdQwb5eHS-P zEcv8{GFt8OC-U?q>Mb5blyNmon=J^lLTGsRT{A@``;=3c$>a#&CafIjvTlkRVy_y9 z5%J<OQ9Z7TDJeBguG~4V<0d))oW9)me-4G;_=OqNV^PlE^0*gySw2_W7fuwF>PJfF z%;Hs@#U%aBfj+kFC&d_Q@4zfEfuPu!mX`CsI1I4B;?)X^%1*F=<vjj+UjRpMex_)F z;rnEL%weZp_RgTck0af<qKD#mm~>-yRgcIK$++AOgk;2t%TRerQE`FV)Yo=s-w2Kd zWNXYCWg%nN<oX%9$Jp57>K#|qZ=cy3?OHn5C1@Ax{Q_P%*v4qx!|WD2J@|`Fs>^t+ zbzqnWB@1jV4ny*hC^5ZJi9m9uTSXUL(RlFADWVynoLgvu)h3dggN1_yUVC_sa=~9o ztVHV%NtDco&dG`wN7s4RQDm{}nLS?nMsT?NOE>Au84ERR4e~bV6fYj{Vt1i$$t}@1 zbjL9v`j*Xm`+bJTD~*bmu)s6ZsD0TSby0;YF<8+53l>;hTVVY3^*}6dV{30OZD?we z42R&K88~2o0|QiHH<^rpbuYR>L@fHkH|~^*8lC1v2hsRTk+aCyTg=rz47d#YEK@h; zLltEH@VKA2`;HgB{*^f*lGG^oW@d}(EVeDjDE;-_^1Jn;yCGu6c|o$iR^Twe0*hz% z$NC2HO>C+)G-ZT1GBIGK4jJ*{NJTmE@>nObEkslWCH<;JW*`bsmvC`@+Mj3X7B7!` z&^N$^BRBn?=6uA9(;tEnuQ9!*zP2gsB9x0j>>g7H@d}Q$I0VUyB|-LMe>`mDgv<=8 zY-ps*7Uh5r9^V@5PF%h+G)K{0=qYEU7GCdbg>=tRaTQuqg=^8*D$xYj9AshPiLEjY z_9(gHdNpd9v1qX%az2^C#AqR2lI0~ACeQD&pr<GVxo}5-owtn(>U{eacJ{auIr&{| zUwSHaES-tFka4!6`UV6H0v18a@^b0*rbcp@{f%F)+Q5S3DNE!@c=oNmXGFx<@=B>~ zQMAB>Rl-q;htA1{-RrW-j;CL>lsLDGC(aGyd@`jdMixQN6=UJzd@&sf$;!goEs~MN zn3p7GuCCQN{VY-?0b>i-o@PAp*xUN@6)_gBl=?O?ZVKxwC|2PRBsU2$2F5ftR#i}x zDst%Ma!)sHZg1=N9v6gt@K=A8UH-L)=Tg<Efr{(n{G&xL?NY7Q;cJcgy3`CMJI5)W z$|W2=Z`rg@)^*4a4o2aoruXLMiT-dPtkzc<4nuO2NR>q^;$=gJm@RaDO8=*OE(oi{ zwC$%=*T>^Ds?mwQIJ$*kc~438)F$mO=X!A{y{~w2)L}5<#Z0hTAztBUB@O{dBmpar zr;X+DurUs2KMPC=TW8>LBo6HO(|6|UDpRG)Y8jZF@IMBA0NAkXhM?BLH4i6bWZ=#c zUO4Y-KMn)1B+$OZ-32`}KbPtoo2cGm62hZYipZX(?KE*E2zEE}n3$)rq9$?ToG2b2 zvbkN0ZWp6>aa*~tbIu>*(EDgxaK4Gi0?D%CD*XI^&Wj^Q;D>+>%dS^#aifLnbF*Q6 zg_qSxS_TlX7=Ukdx98>3hK5Eudff=o1W|U!=4vkhYj;}_+(%4nFEQt^d{=~`RVhKb zOSs&8;h+x@`0+^<SwtdmbgFZRnuXFfipWBrAeEjOq*|540|#vc6Ee?mvN|fxhYb$R zeFWkKyh#`rqI6+b#N&3eh}~)@No<ZQiji6XhZ0<PmXmO`jEk`VrT%4y%Tkeh%Heh_ zJ~w|3gz&)8e2y>9chwY($U(FCxitGMFBwud?Nb#mj^<Q~^wh(g0jMV%COB(<D#Q!; zJ-jAL6e82uSXC~)%#WvS=1$I8&u;Fkr^uouLb%gY4GEVo9FnicrRZHJQEZ=#>(C=w zBKcWH48v`Wb>BW+tlzuOnbP*K<tS%8dW)A@QaDF;4nN~+Sb1UeK*a}wsVNqknwg0^ z3al;=K`aTjKl|fJz<kAv*|vC!rbd@q@mO)C?i{l~q4uH@ySq=8h}Kg`Y*q^D5JHlb zuBiib*B9oCaW~FS6Him_u`0E3D^X3Pq)?1+^?MSNvA{$%{vgDQ+t<w7a5!LIUcRG; zrVfPl6=K#)(+Wwv8gVE<vItm3Jc}1IZunq2-PJ>mRC7qb@3bU}7k+q~CTom^i~C`z zSy6Jm$HZ9Kp>x7&>u<(bs7DeW^Wk%T-{bTyZ{>dFaVu`bY1!OAL7Rh3Jk>;8Ny*uL zJ-av@o<+~IUBVJn=|mk!yo%1&`6Y;ZtXU59@V1WOIt)3eE)O)3l3@E27l9l~;>C6G za!Lk^zz(Y<Vxh)kjq%tRmr7D4fD6z&Sb~Lv#exGRgvI0aSsoYT@iC`lHThk9O5;{s z6<$VsdVIPk_YTdMT_10Qnt1W}V4zx(6Za@L@bu2h<9xpS6f^E5p@Ch7(;;3UDJ?Lr zi`Lj!71P_8da#l*UfS*_UgEy(Zi2}-L>95lEiL3o34KU5N83IB!%vB*$64>6&|bmA z%cAnQ8r4G7eaF-M1gwI)Sx@#8FK!9ryH3%^%O}E+qbJGBs$;8*C#5daJbtxRr8Ji} zTJrKnbUA54K61W7$OFjl0!b@iZVpJ()L7lP^w)ODiWkFu#XJZR%gzp)hzWCb?r1tT zqgV*pbZOEoWRke3jV+17!IHJq>uq&8x@6bm?e-HF<c{Nh0wj8v%^ag@1-dN37R60s zi*v*B8$`ml7St?Mo|o0tOLGR~;SLfyxGf6$dI4RSSFKu=P&?Gw*|Jc286T_L=ghDQ zE6nd+eq$+h%_!+FcBT}%#%807?VZ%2L&T=-I718ncMr{b`>+T^;E2Xrg&TK|#Y|O_ zMRw@M67hGzrDigB8*jeJ<5Jz9zLA`T{cr9mr!P~AT*7mP&1Ffk+wlDZVmZHc3ZXKQ z$=-c6c*B-TDb-Cv0J$@^8f<Z~c<D(}zA`M2Chn;ui_EcL3v6V27iA316HQG)NVq30 zEe8P`Ko<!WM$a@hR<R;K9?RR9@zRdImKq+ovvc>@LV1HnI!8Min&^CLU=dSFVCHcj zo&v#v3LNCYwHejiXiAnBCpL=+MfX@$?;zLTN)0nPpNs=Dc+5)8f-(YIO4}Aq76B|q z7$k}LqL)6VoQ8IJv6dbT>}3<E^RB75lLT*lt-xUb5U|FoGU;VYtZ!%9I|s;CeoVL% zIe4S>k=p})=0IB;9q3gKu28FJ&-~Xv->JReFS)ARvo)uuER}8)I!6Zs@8iC?qlJq! zn3gEsLdG=bXV4d)E%y_&o}vNNvGjVy2M`e0`hxoqK)_rA#=fhDc-dZ#NbDV$rP&o# z+1*9kTUyCs@ed&7(C?+c->&%CKy6vntg;DvDrw^0^L;n-SR~ZK<qH>IE<05xEND6G zW#fgA0bMjp;)Of}V2FeZ;^4$bNyM6@KjY#@p|_!7u_cuj<>pd(Q?n=ntOuhvb^hFb zw=l5v!4}!@v$f&1%yhtokoV0k6$#+s5H2Ra$4PSr=8;31_@TpA?w{bz?^#Y(Q`=X| zs5d_gcNcBEfkOZwVEu`!iX3|3PQQx=<k7CSHah0zQe^9j0~O@PY&iNZ6s=Zx{T?x6 z*v-h6pXW7F@V=g&I8=yMuodLBh}Z48SD%M?%!|h`<)TT=RSlGSppxthCgAR(4Y&@0 zVG_=T$izb+N2uWL&N~{LsnzOArezl&yAf?(A@O{J=LF_(^$PQbg^ag>MRf3`Ch@8} z7(~XxVgdGuu$HRvoD#sP0Ul9h!DIKLL#Ku25ij2sDJ)=0uEgfm_rL<v&H$8)0<ggR zEwH43yE`w+A3z72Tj*$tQxdDI`Ah6h+j-kKI(l8P?i;sJSX|@;hK0;y8M2@$MfS1S zdUCL?49hj_5?uQG9YR38g_T{NdOBAti5J6Z57v)PljT%(zxO$p58|bn^$;%r0rRIK znNA|#U}xs$&~V8b>)5id&-!Bb+WtACV`3Xwn8NMq^T3gl-s0tf-(#yxOF97uY;eO- zwdR!V%jZz`lN<V6i5!jCzHAQeD%x3#LjZyyB@uTjS<BIsY&t^I|9UmJfGwD0L@l^P z%Q#)B$t(gk0(DkqORIg^T<JAaSY(_Efy8FboI~h5fCZ)uH^G~qEGLqyQE*;azmu!b z@+26zvIo24n4>dBgrsL#EHO95N~M|UnwMvnp?3)|pqZ681ONi2OhQK@`jY<IZojCw z>uTC4e|iZWY;2*+*5Hk8ZY9D3<}GG{+LA;A-X@R8`l8fp&DzsTx98-bvV3G%59<p+ zz|^TomXnxL-|API$^!>^3>i2;L@Nd(WIV3qEneOt<_TvH1)j<u_B4yM&Y_wr$IA&A z7bx}}2jeJ4xiLYmD$j*^1Gx-ANZ?}ID{vS91T3%xmK3DDb5Qnu@9~&mg-mT+X~N#~ zK?@j%z57NEau;c~q>Na2FMnsg5La)PCkMCi_jsZZt=+veH8X=IWZQ5jh@5zpA@UG} z?BP98cZ_?3CBq5iv9HvF^350Js(i4J-7X2)?HQRO(oQS34&_!Wp8i<DFnzmx<e*1{ zjKG!{H}CYcP~p&h{vKg<^_uA3ygZs<g?K@{00b;HIhPCqW&{>8j<mZsGn=NSSSZV( z-T_)I2|5(+L$&C@(MK-@wQlZt=7B5q-&cN`%5rnyGK6>m2v|&$@NPs7<>po_9LnuC zZ(wG?&vRL-shOE{@4$Roke(sNgXG{&#&Su;Y~38aF8C<Ca9Vg5#uoJZ|FF$RWP7rK zu<!!J3qZgiV2ZG-uzB^p)b?<h$VcM#EFJgG)LjvR3k8?u=h5f0a%gT^I*n|<DjYm+ z^!yKR>z9noE;>DxE!0r6;*JF&kV723biLU>H!I_%?S`#apb2hU@F4g3f_Q;&VM*}) zOR9wCP~{}CYppcZN~MJZMKjInj!wFArHRh@1b(np7OE0eT&Iu&MdTs}^$J*4S1%RY ztTZ7#owBl1D8<z3w+yEoaOwdnXN1k_S|tfr1r7y(fI+~b28&s7MmiObOsCmfj#0XI z4MTJ240skow&pm<!qZWjU6ve8sD*q-4;81`s5m{%FPBTn66Mr`&by|dc46o&t~VfD z00I^w_=nWkScS73B7Db<mS1S2>Pf?>p{Iu$+B>P<(JgwE$u-;5Dq>ux&?8{p74`cG zPj@fn_YxJRSt(z#v<l6ZfB_lK^i<jQCv1hW>lFmW_oUz28XN`y0Si4zRZ=Qk@OY7L z<#lfCm_Mc1W%1-*9cN;<V|{NAwe|K=t2A{two@H9-|Tf#mn3#|ncC|GPCipdDPs!B znrfi|X0!M%BhiCBMfrZ)&vf271t%At4gdj*=^qyaEX39qlTzO%Zy`wn!(sa5@#Gbz z8UCJm?;fR=M}x1Z-#xalpMY`HX2;U&b$7%D06@SZNd-=G2riV9{?-dyV4=o$o!sG= zOJxN+PUV<YdR4pzW{F@IRE`G#0u~Pz7zkRx{7Xr(xI_ZmmSe(N3I-Oy&by}KM23ev z90CvxQj%aFAz(qm<6lbd!cbdba+aP_p<)m-Ov51n5U_AO8oH7wn{cX)W4_R!B5qv~ z5YR4E&VU65KvG&@u)>0b10Xom+_zj6ho);OR}~t|>@rRSEHD82-xrc(KPw24h(Y10 z^1%TWDRpgq!WIiwAOHXYmgoWoLI4LtgtKymeZd6Rh3OUY&cfNTbS4gd?1EZ{00I_9 z;6jWuOAp}p1wbH@Wef}!7yz)q00b=l$jd9@C&Y6&-2jAzavTBx0ShmyaJm5qInC|| zL;xUQVYI^5lB=*U03dX1!65(;u*k5)>2x9^7J$&P4u=3hz#?OXHJVJO&ycJ69snRX znjv5S0v1^j6YW(bORN>AAAq2E!(FNk00>wlMNG29zJt>bKv0z95C8~RbVO{e^s*Y4 z000m$00F}f5P;;NNqPvZz+nIou;{S@mjD2UK<*cSfJKYO#wzY%^Z+ga01N@^3qZhN zeE|Rg0{{Z1k0pt?Q@y>t?b6FLxU>NP5U>Qq?LJJn2A3Tjo#iPhDMfjCMJuKMPA8Pk z0%80a;Sc}_Sae9Z7U-?5ZEp=7TDriKSjxF>(o`n>xqwiKAA}wRaR3NdlqgH2o$2Z6 zIW~OwHJ_22Cy7|OG?lo8Y&|Y{000CmzR63ZoiUru-we3JE+OM_zfsckJ!v|C%O3y` z&zPJ}XVUDfd+cisC06+SGwv}jqsODnJ+WIgQsaW`(yVa*T|x2@ZQfQgZ(A;Yt}z9> ztIKg100b;@;>AC>sfn^rT#(pgG8KoipsIA7N~D((w`k<ah)E!LY{YweJU6+<U>hI$ zY@6p5;syZ&5U_+7u>FZ7Ucp*l3HWd_&C8PHX(WE$5HOI~Sd!!hw<-a}%iFq1YTOoR zx%csKTWj8;mMCcxFAyro0FXQaMy{ZRL<FJC%A!_5uCcXsUZPg!BWm$zrLA?pLc~DQ zlkhG?>88bzcW)%<P1=M@IH+sGW2JdSjg!A~VtlhX9U?CVu4%Xs0W7cxFfBp%3(3jh zvC_On%@fEnKgPCuowS|JQ5M?@TtNT=1_8qjB*sO}Eo^yS*AiQ696S?^=tuS_l)Ejk z2cmqO0Dypn`?rSE3_@_j_5_MB<&vQB4gC2i3D`>awnR(7kOU86f@G+~fhR=}4nbQR zr5pK3Nj#@fbR$p^JOm(M__2XFXGOHW_y4nZF0pMKX8;~a6e+(#%T{gYp@?lz^qE+w z+e4d!SRh4;7I1WEPd!Ap-dgomG(fE$oF1F@)S?&WkV}z+T=WvOfT^O7i`7b&5ZJXH zGh!^niXS8;KPbyl_h0VPD_RyQa(8ET`F+5Glthd4%xJ&)|9LqnJYD0UIjSBISU5~m z%@9x&CY>W4N7iIDcFty)eFz9Fyqiox#q(S&ZX(^wac8!qjy5nw@dE-2mkFvGg6bn_ zdf%*u2#n|p5SXSY>}OOr_=yt*>Dr<!t3f7{)H)zAJra{+RN{1?BRygLOlf@Ytn(Pw zOvtx8Jxu@rfpx}&Vhs!U6Mcz5bnZtu;w-KXODZ{P9T1q_D6Hi4Tq|+7hthnt$?KpY z(fnvg0xL821qjR>iH${FVx)7lBGHHmoBn1)5*Td_5SU>%e~zPocA_tddR{Z+<77gL zj1U+gFvBD!3!Hx&(T~qKo<7D6`YajeG3XsRMyYl{VCFHkxw%=4Vjw`%1@-8d7a}A; zU|kr6m3n%5eu=;!;$<JSz{aR{KwxGP#k~^gaqA<e44MGsOy{2q>3skYm}ya%;&fx! zU3>YdVIQjy!h0|d1_%s@z+xaViNekp^m)Q)4@6*qz)ZtglsXc%k4@9n&V*qTfP&5< zaI!fdFax1y3GGBZrcD4U1pND%$N>n<K*l5ZnMom<A+el6(RiL30R+~4WTM#nr`n9+ zL(Oeru0do$!Qy#9U<N{J1UjLh@x5n4jLPXW0Rl6SGDQFpjo_y#en4Q|P1MGdNadJ? zt{JSdm^w%C0|J96K`IA?Qz4Iq<|%SOU_@X5ey}Bd7{akCbesTz8AyR5fT&>!E9`bl z1O~>Dpa}FvV2g_vRk`wLZ`grUN*y^e^ms)j5^GOCePouNFsQAw55u6s3E+Uh%<ReL zOQmbt-v8X}yjoeg(aKBrTi4W^r%%%phOncr-%#XWBBT)Y^l0m}C@+^Os>(QYEW-#> zU^46VEvgw1n7Kq{J<ZrJ-gskz>M{x)skL22;g!m&Di)XP*X-<h`)W~M6YTr~rotFl z8#e^MkQ+-Iyk$vj`pwg)xv7|eL_=Zk=CWhmU%Gr%EiPVAOH0eDTCG0ubqm&Oo*#Zz z4L|>kJ@%STA5i7;su~(PG{0xhK+bwe4tW6rGaMP9E|spyo_3)wN|l>M8>Ce&rQ>TP z_PgTya$w<3M`kqpdA&H5e}^BAI{#lk`B3?jf|DEj+=<k{!LKA!p|{uVzJK%9?LWNx z?q7b~YP*v3wOld|+rT7at$@Iyg-9VPgVnG9`plpHvF~eNy{u|m8D(0ONJd5P>@&X^ z@v#hETUf8E&nNm-vNxD)yhQ0DBoR$=<k{<${d;d*DZZcIE^Dy%--VCX+Upc;*Kt5# zfWRWebc6(^Hp;7iq{{TOzPYKcY&=k3>M#ncR@dth(RJ&pSRz^~Zk-)_=;SL$lc~f} z=gY^^mdWRiDfOSlj{i?RiN2p(5xGQprJoFcnd$R@z)VLLhL%d#-j?VltoLlZLG6Zn z7e7$xZ-0}DGk|$33OklasKMU8mj8`RrjYtCE-l;Z0L%VFPQI|Y@$jhCzRvFX!sjHl z?ER5<wr+mA=a%q@+yH@TVk%65b;`rlJF4%%K5ET?DD1tvcht)Rd(?2E|B0`Ybl{~+ zSM4z;lZ3S$Yv<0ZROUI=n@W1WJ@$m>r`#tV;d#dz?P$*Vx<F(H2&@CFKeCK^G<LM* z`bKJ?<8)A~47@O+_F6Z!jhnaB`tr)|D(>(g@-j?fXYbur$NH>DtglZ!{ND$52SadE zgF#Cx`OHyYJ4b8h7SvNOpJ?}2c*h#Yw)q=ujOtv;xv5JcIcQ4HruByxb4j_g=d#Y@ z@f~jhJw58xz58~R4r&)kJ<V6|*S~&n<F<9<ShIw7TYXx6V2kas3QH#K8<nJY8hXcI z5V!vP*Ijo?nsMM;C)B=|zPRIS%4h#=r<eWW@DIMH`iBN}7UhgbY<2{P+#ogrvqa_2 zxO1<J>Tq37SQ2X#7{rH<fB%l}zf&Ua&-`e7$JcyXUAN@<H@g$$PgHkA9Xk0P6N}hQ zQRbb;Int5{EDFLJb)qTvF|cXjFZ3r>`tnkJfv0!VT}cU5@2}UtmYHMjqEXq5R~Cl4 zJZ1fR`5i9(hX+;av%~88#)kU%;RdZRhJ5nQbUlUWC;PwtqIJF0RAQ_DnpO9&7S-nZ zgO1-*q#2=f^^6m(<sGRNXpIQW1YwP<@OL~2q$k~z>{mlS{61q?F(!x<qT6;vD6OWC z*O#wbBKydGY&R-9bn+En$JaDOYI*0HwuHvcA_y!LX-zoN(z@_A2!RPQhQ&1a_~Q3i zloy#DIQZS&_vIuq6N!n;<dQMhW)Yf977~HQXuMS-v>Y-+U_ppWq&2CUOtgqYPdWxY zTi5|f-<96`dtkrc&$c5n6KX=MrN#RW?6)%nF>jx;?sJMXBLeGGTp6cVG-g@>RsK1v z?k-#i<af6+C=byk$j%RK$5(!3No<N@h#uOHQ*mYy=1r8B&}`arC)C#3oTnAWl!LF1 z*(tc7+D=d@$}Z%Tbss`t2&^q+yvx`PW~HaQ_r>5OcIW&Bdu#$?_{Wt>+NnO7IT*x* zoqHFrP{{s~r3j*j2|IBVRP9vTw5f$8yAkxJ`t6+w{6+@RB}Lh6YBWSwVp6wq$rzK2 zH&qKoUs8)fr6;?T0!0u#Oc?`nk8enuTv(E}k->StZa^*uFBXLWac2XzIwP==c4s5P zW1O+B31%fCuudc<V_}odl{UTLB<)wb`K)xb#s-0bw}T{GiAj6%ZY5Uxer-{-jHyXB zAe9+rJF(7@HDZ&NxTYxz1m>s6#+6~y>01$+yT(R()AGEPofu?cs`R3nP7e?YGF&0T z%CV;+0t;GZ8TDuvj%*Ynvqs#tHLl=Xx@4UVfC<biXEzR_Ed-`hXrb+c2mq1AyB}hn zu`L8<s?ZL4WR`KBAE#OYx`MJJs`|x_^aw2SIFXtww2bF@nkol~9PZI6bDqaJA}fgP zftEYSO`<h7a`QeCxdG^nq=dZMdNMN+6(Fz{<>m@a$U2X11c&4RI+N3!Bd3CMAt*p# z8bs$x%`3Xb=d3V=Zje&R^V}7aEh|!dfWYD*Jg?Zi@@teHQ6A_LQKNvo5tIEhjvWC6 z2A#-HaL4SLeNQCGGJ|+Bv(5J!<<lr2J6a-T2M7$JEX2kLu$c%|Lxecm;#<Wznw;6i zYx7Nh-YA(m>=XfjzyJUshV)Vd004l%0000G7ytkO0s{a51O@;AfWQC%01y}e03a{` w000CA007{-z$!Oa*op%H03wCB>;D1_0DFXtJ}|CK-2eap07*qoM6N<$f~FK}WdHyG literal 0 HcmV?d00001 diff --git a/cw/src/client.ts b/cw/src/client.ts index 191378e..e1e06ba 100644 --- a/cw/src/client.ts +++ b/cw/src/client.ts @@ -1,6 +1,6 @@ import { Socket } from "net"; import { createConnection } from "net" -import { waitForDataUB, writeUB, destroyUB, setMessageID, waitForEncDataUB, writeEncUB, msgListenerUB, } from "./utils"; +import { waitForDataUB, writeUB, destroyUB, setMessageID, waitForEncDataUB, writeEncUB, msgListenerUB, registerRecvBuffer, } from "./utils"; import { genIntro, parseIntro, receiveCapabilities, receiveEncCheck, receivePubKey, receiveSymKey, sendCapabilities, sendEncCheck, sendMsg, sendMsgReq, sendPubKey } from "./messages"; import { getPublicKey, utils } from "@noble/secp256k1" import { createCipheriv, createDecipheriv } from "crypto"; @@ -28,6 +28,7 @@ export const capabilities = [ async function main() { const conn = await connect(); + registerRecvBuffer(conn) conn.setKeepAlive() conn.setNoDelay(true) diff --git a/cw/src/server.ts b/cw/src/server.ts index d29c55b..cfe1d29 100644 --- a/cw/src/server.ts +++ b/cw/src/server.ts @@ -1,6 +1,6 @@ import { genAndSendSymKey, genIntro, parseIntro, receiveCapabilities, receiveEncCheck, receivePubKey, sendCapabilities, sendEncCheck, sendPubKey } from "./messages" import { createServer, Socket } from "net" -import { destroyUB, getMessageID, waitForDataUB, waitForEncDataUB, writeEncUB, writeUB, msgListenerUB } from "./utils" +import { destroyUB, getMessageID, waitForDataUB, waitForEncDataUB, writeEncUB, writeUB, msgListenerUB, registerRecvBuffer } from "./utils" import { getPublicKey, utils } from "@noble/secp256k1" @@ -22,6 +22,7 @@ export const capabilities = [ export async function handleConnection(conn: Socket) { + registerRecvBuffer(conn) conn.on("data", (d) => { console.log(d) }) diff --git a/cw/src/utils.ts b/cw/src/utils.ts index 67cff81..e9441b2 100644 --- a/cw/src/utils.ts +++ b/cw/src/utils.ts @@ -32,6 +32,12 @@ export const writeUB = async (conn: Socket, d: any) => { }) } + +let readBuffer: Buffer[] = [] + +export function registerRecvBuffer(conn: Socket) { + conn.on("data", d => readBuffer.push(d)) +} // let writes = 0; // let reads = 0; @@ -41,8 +47,14 @@ export const writeEncUB = async (conn: Socket, cipher: Cipher, d: any) => { } export async function waitForDataUB(s: Socket): Promise<Buffer> { + if (readBuffer.length > 0) { + return readBuffer.shift() as Buffer + } return new Promise(res => - s.once("data", res) + s.once("data", d => { + readBuffer.shift() + res(d) + }) ) } diff --git a/cw/yarn.lock b/cw/yarn.lock index d2ce43c..9f75eec 100644 --- a/cw/yarn.lock +++ b/cw/yarn.lock @@ -330,10 +330,10 @@ ts-node@^10.7.0: v8-compile-cache-lib "^3.0.0" yn "3.1.1" -typescript@^4.6.3: - version "4.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.3.tgz#eefeafa6afdd31d725584c67a0eaba80f6fc6c6c" - integrity sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw== +typescript@^4.6.4: + version "4.6.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" + integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== v8-compile-cache-lib@^3.0.0: version "3.0.1" diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity new file mode 100644 index 0000000..3f7172c --- /dev/null +++ b/node_modules/.yarn-integrity @@ -0,0 +1,10 @@ +{ + "systemParams": "linux-x64-93", + "modulesFolders": [], + "flags": [], + "linkedModules": [], + "topLevelPatterns": [], + "lockfileEntries": {}, + "files": [], + "artifacts": {} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..fb57ccd --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + -- GitLab