From c344cef06e960b4dda7aea31ab9132cb6a5119e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Sousa?= Date: Sat, 26 Jan 2019 23:43:47 +0000 Subject: [PATCH] Added counte-measurements agaisnt malicious leader trying to overload the other replicas. --- bin/BFT-SMaRt.jar | Bin 383306 -> 384211 bytes config/system.config | 16 ++--- .../clientsmanagement/ClientsManager.java | 38 +++++++--- .../clientsmanagement/RequestList.java | 11 +++ .../util/TOMConfiguration.java | 16 +++++ src/bftsmart/tom/AsynchServiceProxy.java | 3 + src/bftsmart/tom/ServiceProxy.java | 4 ++ src/bftsmart/tom/ServiceReplica.java | 2 + src/bftsmart/tom/core/DeliveryThread.java | 2 +- src/bftsmart/tom/core/TOMLayer.java | 65 +++++++++++++++++- src/bftsmart/tom/core/TOMSender.java | 4 ++ 11 files changed, 141 insertions(+), 20 deletions(-) diff --git a/bin/BFT-SMaRt.jar b/bin/BFT-SMaRt.jar index 69cb0de1623d91dee0dd9b058c6cfb39f6789782..4f471739b39469d8f07188480cfa01ba45446ea1 100644 GIT binary patch delta 59553 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 ra40+`057?K#5%Y=$i=qmCk$YpXE z-A^-yDZHx^_B{pft5ESljFwv}ZsS9L1v3&ndj@l7aR+x5e5BxGhLLU4Nn1X{l(DuR z_-#`Jy5+Uop=(=aV0*4!<6@hOVlS<>>j%6&L)^iJ?WYS2`5tb^=C0hkW{bCJs~5YJ zN<lp{ijS*A%R1cz_zi<$rfdLmjIO7kb{M_~A8x)EZZ;XRrxw8Qdry%HZh7vy-3mo-?KN!vxahfo@Eqq@p~~nuq>u}LYlGBt{Xw@F z{JPzK3Ft?%4j~OL>~;HpmHi2IR@&iKC?PL5(_fec?${)8w;Q9Vc~sM~D3|F%fqHzR zpJvT|e#AW~xgYk$-K~AH*dg0oD-=SasE4kr~rN|R4-FMcfH+92nbq9Om z?=PEe4-Pz&B|fAt11bw`jc>F~@NUSEB1O9*Jc1P2uW+z+W*O zp_X%dVBcZrYb-LOyB|J}k#BHjAF-dH8u_0wM)ZN9AJj*K`F)(N=J%lOE zFid}j;U4N>uM8tRJd#K0JlaD#d*$00oyU5}W4-uf7$?Jc879auQHHZ*n56S$4-H|j z&cz-o7)N3xx^~eVV5T;YyvS>O9RuquJ}`>GJ%P3^Qbyna5Rpwufi&IUcU& z*)q)W&?r7vQ0EGz^K_o)p;BR4=lO1~$>V=oULbf2Wwyx8=jZWat`nFAf`5U$UZ`_J z9#!!YA+|IZ!!kEtBrnSawNao~=)5wQ=JF~xulC@%MuxTWWt|M`Wmx2aSQpEOOJsJb ztX<~e4eXa;qYw>-! zlOZl&+ugiXUOEJRo2+ztcsuV9K0fW{owCyvvV5fspAjyu()nsPUn5_3x%pZ*U+3n} zy7_amaJ|sFL53SW{CWO@hrh@-x%o>v-z=YRkuSFjL$|s4cAf9=@R#{cA-Y>;dp!IV zzDquTRo3p7wY@UCCztQ#eKPx+xWj*aI^XZ+2i)8xY(D7bhlJ;cg~LbOykBhobvHjM zwrq9tWAa=ekgYN-)%kHIqb?jaqqQM_EM~@-azc@o7Bk9JP#=l5RK`NhGd5S&tF_tq z+7wwGiEd%ybxfW>Bpi=MLLmXKtl!uikG1-v@ye))56!`r_NYG|jD#y2&FFttGrB5h zcGRX2K+6>mwhCrR8Z#bgtqhs|CNmn?2{wNRh4Hhp8ILJ3lPs^Y!GNM$)POND8zT^jnw1N;nSplE zQ-cKs1g$B~G`ZEX(+1DT4i&0K5jjK$5?3{BQY z0x)N3hMr)&KzlSQvWM_728l3_`onR76&3gcTP|uh+s#wr)d#~{%%*=DK@Wyo6fE!> z`wcv&57}GISPc4!Rjydt&|uA#K|J7Qx!D#9T27lbZc0fxbAsVud@j?8;xly8etTxW zJmJjE)E{^GWH%{U#pJAwG{Ig2p=@(Wd+SCsy28IPWU4R^_(QAw(V)EBi_Z9_ARMdg zlj9LW@}FqT4aA`C#%1!Cgep0p?S43ST8h5R-P&0c{$ZGT#B228{| zh?f=jliE6ANe_R-s6KWWd4<@iL`xZftLEPJMq42P2g=opG}Uiz=%*kWh5) z);W<@cx-7Dg}_qy`ZHj`9Zjc={^IHEfaz_-)V`(tHMDG-pGwSjwJ%5FJA--;3!46@ z@^Mh}gxhU1LJW6oQ+vEA(h*j5IDkzjPMtcHY07ESVvo`xzNl@RnkF$#NUT015@*tf zB)6F^+nj%QX4~}96MGsX?a_d_C@6_@NH)e4VauT1w8x;w=y8L-LU$Q-kUa(;;=?*0 zG59HdnrU#aHr1eeX&?NgzjiX{>-4BWU!}VZ+DrEsbU!^{&?B_ppe}mQpoi$;Q&Hl&^nK)K_VY9<$QSmhasXX}-Y&zHA@AC6995wiR{C%BYF!&h1sPhjD{vp4l^N$Sv zF&#JfC;U_4`ez3JoPS~PFWG|x*uP3{@UQq~rcqWK<%=}?{DC;~ugylR+P7mT>Wsm^ zmW_Xo@hb+u%D;i~7n$+ECJ`W+27DdC_$FTv*)1COhcIa}w<+W&4gM{?YVhxb!teRG z&VPVw^-&QG{v#hZ=y`&?f1*d3D$-op>pK72;5Yd#gWs0n9fAK39mj!Zff=_p_WP`++$SZ;-|6$mr2#C* z>t+CCNN@0e`9*`?rgseb4+egh|Ht4HGQ20l`=Y^I@!1b#n-A$#oj)@8V?JqUgqVNT zSkny6A%jzMF^#oV(L*#}Fy`ATHPz5^1WVW4hL)>&bS=-&49H3+=sl)!r^XJ3Eqw6% zilGgFQnY++ph0gk1fSTS3XNK}Fd9|1j)X-8k&U8^DTX#k8w}3Z*Uqn9yzmlerb0@o zQeCHSeIw>(wA#mHl&5ScuX*wsi-CW#yzwQ5Rv@Z;gN_;65c;>S4K=hvtw`5~8QO5p zVe+3^x_BfaZrI_EHu-$TAwPV^_Ag)5?qYl${+Mq9!2RG&K{Q#%ne?X;ra@^s;ASDHrmal=wyrJP|^FKg#Lf6MRY$YQz|QV zW|#C{l9ObccnWGtCWcj&voNv>H4sN-Gtl$1J07u?aF{CY4G4%qJ(Ub;o6L>vz$omC z7bvLWj4pPp%ZkQ0AOcv0(xzwL1@t7L92MoSHggqxPB}9S2!>r(#>~_OB^=a{^I$qs z(z@#%N7!+6aos7uiW+|$ZS64etUgTKU!%8&Eq`*Gse6OLS;qzI=D-;XZbz3mxes&n zv6GyAf~i0+%A%KXp`mZ`$CjvQ9|)~9__x*g(J?iuot$CyA=_h8Y!ArljjRl?N&+Hv zm1LcK@=`}3Ig6juFYf!6r!d>eQ=AO+ha^5bmqjCOk(iv-WY2#_yPjGJ#wxXt*Wc7s z@0SZ99K{#5w#7Rw$*u2;P(6i9xj?7`2tL$w%0fmmuu=r%4g13p>nM#=8V=Kg?dD$A z8iJvaT<3WdX;sOQ0wvL5Z#&N}NY+^Fhw3cnxmX6Y@BpEUVp&M(i-%#cQ&E$fH~ZL{ zzAY(gIRzb8FjjxFXa&kvKkid;u(dBRmM8Dk`hP6OkuxWTFqBOPgMJWnwwq0-=*(Eri`UnzuMyHXuLrg+%DC@vz|uXESJIc(seSrVhhFh7LOmTQr6|%N7lzgqb1>W-fm&N* zEwyqnV%Bd~shFVwo^tZ_Mc-Bs;0XRon;r>-!F89mj@7WvYBzSEv+= zLXi&nxg&&>=#Rq|!&5=u>z+vBdcM%O94bH-t`l10Kl%RNDhjn$wAL%L+C?E6ky{E0 zcwuR2n`wVl5m|8gqfvjS_(qBNsq8HUu5LkQ!*;p=kgHyJrD{LR`WG{T0y$?E*Wus# znz}QjL+vy(-S?xT;=mEB&@IQlYm5RpNeT)SYV$)$^WewFT4 z&%JbydfrR>i0Nx;ejonsrw7!$iyl29%a} zQ+{bhHw`TH0(4NR*VRpfOTEA?0PGOJ4(%ol)55iYI7CI=G_3R>4NK7QClp7AFwUic zYIJ{61!k2rl%~^Innk5F4{!5n2G!6xR7>a40$PawE~N8m6)mPFT1Q)GJsk%2VvBz| zLQfH?ndpzzOf;yendr=+W}+phnu-2gY9<=Y0S=Dz8F~@;D0ns!T6)p8LU*~)Pu0^@3dzgrGxU?7auJCOD$0)#4rP$+2vs`BF&FPsnW~+RDwhJ7 zHahvu>pVi!86oggS%N;5(%6iB^iZM8BD0U~7O0sF5vq>R+43A!o#V|((5!0Rn{$xP zu^8ZjYFV5O+Fl*h)E;x3q+UkfM+1Mo`sf6m`y9;`15~?h)Do}zD9!Y`57K#iXsV(! z&+AUme4&G9O^S{io_=1Ltkrf=&Mp^sovg`bdoK-3vV9NbbW!du2Y?*5ZOg>APG#He zGzQ}}m*$BR(Uj}hZ9!^7W!Kfgy0F){$V=rMNF6FiCz@I*Sulj%mTpd&m3z9GJHF|2qM z?NWY`1FAded-Q!0)7Q`obPRmWq_;u+2jF)W{hNLWPjXQO!s;c=9O41CpSgJo{Rp_| zu6QhX`3d~&r&uq-)1vWn(6E2L{UYUqxgS%7PQTRYSNstSL@(p94clXFo=(61kYqeT zn)V)zc^^A7y+W_rvAGUUiTN8GbF#fpd09ib?NR2)J>)O%={QR&EPtsG?{Rva30eTF z%X4A1%j>dn$I470&J|BnuHkmhfz`WC{??*U(slAq+pZ(`r|i0j24jExF62B44Zi>_ zyhszE#hK9C9O$VATDSl@YJrX-^fS5~+KJOI5ydal74&P^tH=(t+V1>6SfOyzK|3SWd7g|0++YlQ&=tH`iK1yjfKzX)yry<%b z?arm@ly-New0kxE!Oo@OUfKM%Ix{{XT^=|=pxOS$9Q>-Ubjha2e`05z7*Bv`~)p-D7OrPLNg1y z)h)5!ODY~umEs~Pg*=#Yc?b>SLh|x(^6?0@eW^t)wf%T|`&{zcg~f~cU!X__R{u(W zv-oiOAw)hlXgz;S7a)sXc(x1KvZhLRRJltFk(3u#=X!H3&PGWP!nf)H(Qpqx4bDLtSayGe)=9f&nX1ZD=-ExdvV*jK zHx0qY2kBz`U6P-!DT{jcCyx$jq0WiiU;iEU#(c3ub2edMG4vnocyDdCl7oI zl#asKH&(-7Vm%~ z6hig&9HoEjy?IAzm)AH-S9(1MX~S;XIBGXtn%Uj7qPr2xp}{E#WA61R^5Y63_Dh4j zwBbedKbONF46mn~qIjTVjDc1`g5q98a(fqzQQPdHB5YIO^`NG1K%vYKwo381HRl=X zSnEiN+_=`Mq*YUwau1mvp>1d|s@zE*DRl2A=AD0h9bb=*$%>?R>0G#WIck0d+`Ezn z@>D9|=`;e>a6F$)Gk6xwJleDc90wUO+KkNS(ZhuH^ISv%HvY z;tOdH*TVn}l;GtkVJqnkUQO@tI?mzCIFC1QA^Uj@Z{*2r@)U07Dh~1--oiB;=9S#W zYdC+(O}v#O+`-#<8#vwpp0D8R`O|zO-tOeja2H?APx3YV7GKLJ@bx5rPRr*nY9sh2 zZ35q_mGJFaIp3jG@}1hbyjxp`=Vg4CwvqQ~oB2K!y1P(6euc{Nchm+C--x$=AYTsP z2ztXe5U?KJj&s4kkUR5uCr%7+V$G0{O$L8EX3`I^n!N=oNG)1WexZVPbG0V6CDo?GTf|JxpZnT&v?d){2>NIKgB(Gy0e@LVG1FFe; zANVKHALM0&VXD)+7$qbAPyPqgKGb!BT+_kV3FLLFUUg!p9PHGE!tX(b>)b~_9N#R7}N(pY|&rtyAM)kkR_KSqD``~(H~0BvP(#)s)TehSX`EZxH2pxgKvx|g4$ z2l(5mW6_l;m10mA-KGpLjnvs_J3c@ebYRb^D22yVZtqIv_AX^)Rx>fYRo2FkGw&o_ zM=tAt0AqY?8{=gDd!WFq{#VuK0C2<%3)4*l7u=wZMP&`;&(3vJISZYm_fdagd7*PU z6ytRrq8oQPQTP9$KtHcQ?ZW>=sveGqM-jh3Iv+#yzDSe!2UL#dbbg7>jau_O@70&`F|b+6)!Z>HQ#D6{;B92 z7JyBkzuUCODh+_6sF}cqu@da5xf<~MdanmY?#waa@U-+ zE=%ie1y>YY6^PopWoYF&-Lj3Uc`18FK%5ikoT!?%qnXZ}R<7wCKYsLke%nvIKMN=o z?RMVyQ0KO+K=6cN8qO&Je>^cK5SXYI`OB7^Vd~Sh%A#(~YKvvAbbsZl1t!s$igRx< z;M_25fp~85x?@)~%gGeVhHgsR)Jl4VX6B;)eoeQXoMAho^oVC=8bvD>bDHf4B%7R_ zY9&*sT6(6U+cy2}%682$pmwTeM|W67%c@!DIRjx!{}6Dmca&cd%L<>p41I zD=$lG7I=^BFVt*)aluXU3S@b&HB80iD z7o{BQmw_7Ot2L{jPa0C!Xj8WxkdamNqK_3?1<9I@UeYZU-RM!V4`V9c!MiHn!-9%y z&?u~mMHEyNu^=$GE)o@K98kdTb(B;j(5K>tj5-QK#ger4VNhUbeHTSwdplX!Q0?1> zlH2Z$<|SqwBY*X_m^3UmR6Mb^4gzYqB|!J{UF{lNxuMz9`fbNez{&fEVfly?p#e zS3@OxTHcA{ziTrNQ~TE_(h_boZzqfUCfaN=7_u)q{?{G*LRI@SKM9k|Ah_(2M3?Ib$kVfyc0b1PLOUn zLI3Ir(vPvF=d)(~U)SKDCjRS093$>HF(;VxEPvBaHsMDb_(Ki+bOS$433^)ahuY!q zt>Yi2P<8xI8C&+=pe*!v;hg_uZ|dpi*qQ20_C7|G2O$2;Cq8j+<%Z4$Z?i(UZP}kWV+1!SD5i?la!qeDF+%-CL2;F*L1=_J1O_nr99E- zgnJ(Ma0_?$noe+`|5yXPKXfB6nE&;b_ zE&>H*6VZ(}P6!@{@R$++0KG2&05kvqmr=9@8kawA0tJ_!lL8`tk`zfuNZ1mLtXUu- zY=Vd^VF{1~Br)tur@K07=yZqfN+5^}$|5S@f}#SlJTdNrOTc{@9dUFVMt$Qv^^HEq zZQgU6(NUi>F7Mo1m0l{B===KX{_EcQ|8w_q&*_(beC#Oz7>7qwVKaQ63O~S)sqhm* z3S5LpbtthPnH3d(4P9yIMpZ>E6;d%J6;m;dz0o!7m5S+@!3vog_D;nt%w~l?8s;#} z)vzzaej4^?I6%XJGQfdptdOT+KEpv8p2e_0!?PI<)^G^Jp&AZjI9$UK3=1_ZVpyzU zi43^?Fe{AIa1_H*4a*pg*07x67!AiV9H-%Uh7&YAhv7tj4JR=?SHsB+&(m-U!}B$q z%5a*7(;3dtu!7-C4QDZ&t>GMol^V`vI8Vd*469VE*03fOYH$JjS;&4a&~OoZS*u|k z!wWU6XSi6yB@CBpxQyX)4OcK+so^Syt2JE1(4%1kL$8KDhK7cIhK(9FF$`$9R>O6v z7{q4w6H3K@Ft%v8p1q7{7-eXx*s5V$8g9Ui8n$b=DV1t3Vn3TzyjaCc5Zu9VW1|s4 z$f^oQ8q1R!aVFlzX!jplHqohBhh zORPI9qed+?Z$#>vB8G=*(-M{oL8bTA(<@lN7&Fiq@|dj=)?lBg=`oGEh$j@K?!}B| zdYcUIx|VPtWOgl5ZeuXq;0acAdqI5;m;q0Jus&c=Q_^zUP%hJKnM<$KK(sDQ+l`*0 z?IACJN^9{%Ji(w5LjIzDI*3;%G3wlD0WwmC6)`<4L`#jd|^AXN} zE}UD{;5Vbqo`_jSo3gCc3w7%i#|+wnq3)wVJ3~P+gH&OPxw-iG*n%MA_WY(Pix;)TEXNT6VeGvRg-|Jw#K?y$6j^ZSk0< z5g|X)KY<%D8jX!*3$0g-NloM=^l{ckuhC);xmT^}@vf`(wD8HJD~P+UY85Xf_lD5B z(J)EHUNVK9FZJ#Eiu5KY82%U;_(#}oXn@V93+npNK6OB!OG7;xm zjVyAwzYMCIk>mk0xw#~NmqS%G0+*NDRqynA{dh}4$E7fh1+%Tj7AAYeEUtApMpjwp z^o^|V)k$tJ)2iVv%Jz7yj|-E0m;EA%Yk55Z*LvZw+j1tmEpcw5|4ZT~zF-quA-HgI z0?}HL6U?Q0p(C^QK!OuxbF(0S$*uMdL@#u@Pqrg!9KMkHvaR+rH+8#BH z=F+GUX`?QblAl)bN*#CNRn#5lk=5~Pctyo)bliozb+{BRBa*{{U&TE-UW?c1u!X(P z?s{);f+pGoDqgSS4Y*f_Ti{mm=QhO*o1S1eLW|nm8Z_ysMa|L{K3_Uq$!rbofoO*t zI$X|}BYI%+C@Dt2g3$|qd!SnZQ;feYu_NAab8~CRb_%6l?owjR?Tk4@$c$J{CPv+n zNELOW$@UaF>}1rE9;kLCwmL4k>gObOKN2KY|J)=}u*ByvO1o5tU5q{`HdKCg{B(8_ zpLIBpxY&s-GS*^+VieLwb=aNQdLl6vk|ojiFnZ5+edPOexb~NS+O_D{{k&aTNFrYU z%lpgdH!ymE*e(TozGm)Hb=b>z!+SED$i9)W2ME})UAC1m%6r^8EkRGWi%y4Y5+_0= z3~`66!%d7hRJi3G@vaX0*>1=?6PGz?9S)xPuq8#sI^4#XMLl$pN6o8E`?k^H5Nm#9 z4}y3+y}HW@9ZqzAXm$);+D3tj4oBhN$l;$c_@anvBspKaQOBF$bshJ?D=Y@KTQ^%u z17!a8;;|HskwSSLj8ulLbyo_YLkFV|{~5X& zUhSh?K!-aSyC=`aa)s5rA9pb7s9&}sG5dG@BKsuM;ciBM9oqxdN|#m(7XApE$W&WO zak>uoFk`uP4c(eNW8Pq0F5Ni&m5tT{QOM9w|d9?$+^UyhX=baleWObUX;B5kQCg;a4nOwC`VvD-t~R zeXRf4f&ia?PEkd;HRvk{h0Ow5^{8QwqaZ0ED)0wb?0=h%hww19!cGC5v2euGXp}a2 zLcSo|^yOVSO{pWF;-@BBI@9obX!^U-1=8y98ap3H;B|!3|6evncU;c`2fObX(x0Tj zXFiFcM?o~7xGi>=M3Y+7v=Y~v!cT(faPDKhZ3%loS zEdNT6*H(MXCQ5?5Mj*)YwV6dTldR4Nhl7TPCROKFV@085N&!a*>IKYt{)b5`WpK>J z(mbVqgp7?=fzMuZ3lES-iCXC)?^T=G5n+=sHfg1rJds+KZqhX;&{tcc$$~vq-DS_V z%%XhfdLy{#HV+dP_dIyII>Q@Sn#9Mi^Hj|K_W{m^i(oSVl!C+}eR@(@fX;D?jhEYa zg^gQn+-Bo;8+X`vrHwmnyvoL_ZM??DT{iB2wsDV**V=fUjn~_FgN=J_ywS#+Y}{w# z%{Ee&z;VBg2RKSBJm7enjfd>|!*=nmGK_{F5;7=#1HRMl^z@wyOtvqJ8;-y(o2(zh`Q76IGLo>CYQZrdl$D1j(WU*$l zW6fm4<1`$JKd}a7Vp5`LHJEnVYEWHTd=lKn#Sep;r9BEM5wtbXKaV(h2O-6(=Yo7khvdI@!k~Ds2XWF_0#ZSoRKQ7pXA6cl zxB~{*q`^cQoSAx*TF*?iifY!72b<*PMOh-QW0P93Qn2XjWR24WfrH*?naptr_AA$%5Ido@rLGd%DirWn{R&H%6v|# zN~Db7&gBU@Db?~6c7}T$Q?aTV+yx%v-AM=56ZYovGuL3k8c-A3x^xM5?DFXs=p5*DMxjmc%tn zh_ocGS;93-U=Qi>ZR*j_QRWW z884-4cR5|)E1(2cLK&=r3Rna4DFRpqK3EHWXop6M_?jp>TT2mEGetciig3bonXjkI zJpxZb6rO_(lvr(qH;DZXMT#F$toRwJzJx7^a5=i*3QUJ>mFgpU5(NDy#6B+#9}-`@`Sl0{FW;48E4f z!8h_m_*R|)-^ugf2YD&{D6fQ{WIv)DLP>5#S>A-Iyc0Ef7pBPjFik#$8S?#@DL;t4 zMtN+u3f`r!y=1QseKSfq@_ z5@j-$D)X>Rslm}oJ&sXU;drGPCn)Rj9Hkv6DO>P7s{RJ`VcR6eU6v7zQjviKj0R(gj?MjZgcm>?d}}h;V!_P?qPV1y99T+ z$Kh^&_e9*|uE6WumAKbkgEzVt<4x}6xXgZH}sfcLxK#b3GK$K&o#@Im)i*r`f*Qq}NLwJ$!V7T^== zFnn4ahtH@J@maM3pHnOGMRh*DpjP22bqT(I#KYoBP?e7$htA4nAh~krys;&wE zG@W4yO4NLKmd+Ha8cc&<(}|MQD$wD1_zer6)unbw{Q`ZD!m96~LWNW6G8JC@i3Q|@ zROX0-)x7Kh*#rCJsr1Pm*oQvq0Ciw?9{=WbVa@^=?BPF;kWo53>-jz z>b%^1#rjw*VT1W39-_ianv(w=C^J-eS*Je#4qmad2|taG1^)fG-`bGq4Bc59kCz;$ zcibmY8bL__o#+hwJ!Io)$i-Lr{N-ADdk!)n#hNQV8yevEtk0*Y{ChZUw>g_|I@mL;Y*?Bv` zj?1=#?B6DVxb9wu_+6p+--Y77PVxIf@gIfa{!a17Lh&0yah_BBiBS9}p?Hu}{Dn~b zA3||~Q~Z@s{H9Pm)hYf~D1J*Q?&TE!ODKL@D9&_>e-euSQz#zn5YuHQ68~9$C?4t* zt3vTRLh*2?I87*iS12xYiZg`b{}PHvImOvR@q0pXnN!?XDE^C3T<#PP6pG&$ipM&| zX9>k02*u-_;vquuheGi=PVoq#_#>fsl2bfVDE?R|p6nEl7K;BW6i;!A#|g#%9dqZ2 z;%ujQqEP%lLh)Ru_&lNb6JfW1>z(3hLh+|U@e-$arcnHuu-g?*aiviFxv=HwPI0wR z{Dn|F$0@E8ivK1Q&vJ^F3&npIisw7U4MOpk!U-#Oiv2?IT|#k#Q@mCv{z@qJImIEN z_?S?<%qflt#s3hB*Eq#(Lh+qK@hYcylTiG%P`tt^zEmjwM!3#?r+B+DP<)TDk2##oxuk;6(9yNBBrtrbzrx&idE?0h16&8n?Zs0-%Ni z(Tz5@U@Zgt1Ow5HHn(0f1AYV%(Tz4vJSBr&LKgr4u{Zz#C6{h310t6XHvrE1 zj*9b`V67YH;{s+<$IZD;T*$qgUgSnUE_UO2Snr1E*pP=ya49ob=En1Xv611LR9w#e z1>CG)sFh6hLKU0cFbiimaTWKg-EbXV#G{LycnN=8>clnNH}GVDDX(SOg1nCw-l5KP zTKTh$;nuk@gzKHSff+64nJ|ySjMUD2BTkGmnGTkGBTvV86z5Tb;gfl|2{$v+7M|2d~`8d-#$HAF)%k(t{*q(+}zD` z_o%qjiTAQ3yPS9*qu$T_A8_J>Omw%34>@rUZ|R%dJj~SgvZ)?_;pR~n?!)~o>tjwl zzyOaksV7wIa$>iNJt`hV(EO2z9-AKy#N&D#!4ZzOwdpa0g8FEztuh{Now>fUUd~k` z42kI*lX^T6pC64R^eqX5VfE_+n*x=|L?~RjC=g%Q5a=K{S5v4h5=bOtIznB4h#F%m z9Eh}4`iT$|uV34LnuxatVu{K`w7s&?;A66>o}0pz=~2NP5S!437% z;0A=!45VN*5=_QodL&U9ro}jEkH)b;B*CzR=4^{5Oc5r3p9+uE-4aTKq7lMz2g7L=w^ABqssT1E~<+9WJto}DxB$+kI2^44R^*TwWe3;SXk&X^;hyijCQbc1e6 z=pO*n(|MX^P)>1ov_w}%W2AFjMISYxNGLHE!RGUqte|dww1wCYAx8R=WcykYIAFL+_c@+P}`ztyWU$KzKJwz zrqs(^ogFEYjm*lTW_2xl%KDtQE)o8>?c3P%5ELJOs1behijck;p~Sbkwj_-l(+z(} z5?eaSm754CUdf;&uYGN2f+MF`T}xgS?d>m1*RI!t9FPVzB`D5NsFNz7Tu2oH1ux@N z7|v>co*IOUiF=xPFxuXpjD&&)>mY?`I)faqJL^O7gdXV^=T8=l*#Olg$6!~BX**6-M7bj&HBT5hbyQZ=T3 zFW2gkILN)6pNz(m?ZkN#!lWF-ve36!+mNBy3OO9JC0T?saukH_VY0S=NX0{Rfl%>D ztD-Rsg5dR?(wwYY5vM(P`_yN#Sh6Fbw`5A^AfwJtY@s^^IRR}k5eRXdbof^L{Uxgm z#~?+s&E0_@7c>*6PMwM{v5yE@Y9K~`7h9&L5vMU?Lk@@osa8|Or~hxnvlree;xm|d z)xe0SF9<0rGntD2e-yD-jc*b@lL?=h3*jtx!W5CJ|K}c!8)J&ftf?6WpPl(}mi%an zCSyVU+z^*$Bl=UH!n8H`COoLY*Ws%g?BM1r+W_72Q@s5-%{}@4WGtmG&l;+^YmeEo<_*;Cp9lT-*16TMo}YIAJOnxeC}lMSsa$` z4yV!Y#AzfK9?{?-*rVdNHT(_>d0MRL8ti3+?`n7y31LDGkxRoD@Ovu0sNqZavIfWC zO%2|LUsGvT7omWXB%!@V;PD235?&(-c`x7UZH>mfW-jnfxO}UI-^U-Q_(KhUgvV6; zv4*eUs~Y}DBZ9K-hct?ZZvkpe| zt<-Cip|DH>6AXpKqLFAa9_}RJjC|ykq1W3Qi?(|;{1yIM!*_`$jebLaHwN$KP-2}o z&YUAb-5Zg&KZ5%$9-|EC4MbYJ(GK0vn%BR8R^G$k@qT`<;UCER@O|XtR}py`*GZi7ZWIjYhog^oJ5W< zCgXoKafa}b!-x`pD#5c940P1%VlmRb`FvpP&T?nDO-+=FGKBGcyq+_4rZPxoa#>NX zi3-?-Fsg}eshR6Rli8 z4q~Pz&JFN}R=tpCjA|V@_Rv`q1H|z)9ERc5h%~G9(of z*V_Xf>!SSVIrcR1mi(m`MDMk-0o3um++aCbbF=Yo;iSu*eAOiYUr9zGCnqW6j_8}q z&z0{G#NI`y_2x71Bws(&tW|(!l+Q+KK?%*5a}knDCAgwjAV@vT+2eGFP4rczp^Of+Gd=LRNC5S|j(CD5s{ZvAwc0E6HmZX|8Fbpyzab1>vdQ^P;SdicE zotExMn*!mazO+?7O_pSN$u;!4G?fCG+R(n9Lq=?W(bp#15YF?JMJR{dw#HCdMxQTWtKkG#sO)PcQgv|y$#tHG*5yW;gWQih#CM0 zg}(lOXw`iTlJR0an9{IW*%*J!u!Uu(v~le`Ihz@?omxjSV&J(6uQBzwSK%uefVL4z zat0;=DPb7wnmD!caj^%28`#QDLk1q6k&`F0BJ%r$fN0$Ky8`)=jp)+XklqkWJwMZNHSqL4@}2x#`Hk~`+nD*N;nLGD>c#z|ZpM525EHUdk9R~P z{M6Hw^HYl7pQ8z@Q^~LQ+YhN?b1cw7i6I^E`@If1Xm5U2n=gyGR-Y=8$gR$c#R8pd zuGUaE%tW%FoFrHUT3SvLtX9z(3mPfn+;DWW^#Id1i8iGQjp|gLa#9HSmPJ)CTVP^; zE*Y7O9OpmYOnqZ;CSlWV>?gKuTN~TS#x^##^Tf7o+qUg&Y-3|5o1A^msrP(eRaebD zUGrzAdV2cm`|4{#Pw#ry22#riBLVL5cMIG|j7w#yk{#pYK7EB#@sIfhG)OXObSW9o z>}6>m-OF8zp1f*QqN$vW<<`|Y4pt`HZ&=G53{*c8(i-N!AfW9-=$;tld9ca^j4G%651^cJ zzmtqA-N32`2Fy*HVgt)wAgTl=wSX?_Whck*M|o4tP(a_Fz6!gqMGE+FVw0x4a&#bn zpV$I}v3|U@*ZnPQ??{=j;fE8VyzNjc4{}sLcRRr~2nYZ|kbgnymJXfRM?SV~$zF2w zMep&$YxITd%$;k?#P_Cnx2Ik<_9p1V>>GsNvgW3ASF~O-wl9O_oB8i^=EJ}K@p4>Y zi*J42#@N}Vjglp#5Cg*~;kdUP7$GqKH$z!j5V(2&Av>;}{{Y%NB(dc7yr@|EnsAb4 zcsR{6RvKp7i@&<|1|SG=aF4M*ZKJbaZv$L(5g{}vXXBSKGt_-Sa<8=^xsN*Q1Fk8( z`3NN&AweKj1X$A#n?`y6n6IVTa9eRCgqaX~0$W1_bmUzW2S#N*>bF!}7kXfC5q)ow zTrdASCcpT71BBud!q46;w|&D7tw2(pgdXU7Maqywk`bA4GMZ4dUE_A-QIV!(<67aV z#6fH6{g&d}LAKlKvLa;i0)21wUMOD=ed6X-eDCG10)DSr6=8z@`kLDHx zc+ufx(fxv5G}H*i!qjr34#e80Ahie+@xbX-oEKzPcy+`s7(|*=-j{6lLh!Tk8VNC# zY@M24WZifewo6ylFK`(;>iL~YpmH^Y)62Ddz=^J(u;uYc`zbd0ZyB^IU75F-UgKVM z^b$J3B=xvfbp7&m?BwJoqi&*WB_HD>oNf^H> zoJ+QQe9uT)*F;(uTrkW)D#E(>DiXipij&89{f}53>Q10RBCtB6%L8wR#k~PH8`V#< zbO3R1*)F}cFAi>ZqJEuOHs2^!XowyIamu)53niX4EPYWl=EF zG=HFFnNhP^?98s`E*&GiMV3-lY6&NBi^9KIK}hmZpS=iy4t$Js39DrvDf^C6Nhmm5a&H zP05-tZjb)(VHU$|ZPEm9H{ehdV>89g{E7RB71 zvANKmY2kwkbb9H3w~HW#=xt7yZp#@-Y2bDxr&IjiTHDW z=O1j@%WNvF1?FYIrMsbX>6i_7&lq~JRkjme;bJeu=^AY;X$jV%0g_ne=^8M0&|6GR zGZ%duv~D3d@m!n0`HHiVPODI6hS@WvY5dx;u|$thBjNA4o{}tDbwdVW+E|8_1GfF^ z!6@_qnUUO2qTn?*2OH--PONKzJBGNSq8)g7e5nH{y92*UsaL*^&Nrl43C$^{cK|tNlCyc<9<8rP4~E<3|-H4l6E;3q~*bF<_=-)cR1GT-_hqJ z&RZw#%nI_i@* zSeW6*26VGQrW{b|$0p{Zp$!4KprG_Y08P-%derN|ih825A(U)b!G0hucWBd|S~j5W z5Z?pdde1jI>dk}G>kdEL|Dhh=+7a}xAkt+$3f4i%*;rLYU#_{`5Y$$XtfL^~P+7U4 z2r`o~T5rJA9fNK_-$2T%WH<76z>EjJb#OoUV2E`H-anqC&Iq|KRq3G@%0PX%iI~kG zq9e}eh?`twPrKID5CgCfo(WCz7VZvApGJS6Y9!1f=3vko15l?5cMDYlW3TGtk;Dqw zS3W(cH%Z#9s1@`=N3vC9GZL19cjxa!Cs4Z;@R7{t*yn`gD=4+=T`nl(izPr(bk)R+ zfHnW;IPMmd`;HT4C=7i_?-ud=QITCmT8C|aj$K8{Vu>2^SqW$Z#3<`Gurj6kn{u~H zGC-nV2oGV>p3D*a?Ow^EYs`dk`0XFp&-kpo@P!4tDvt6uPfiQJfDZ4cTOuaEL@lWv zdVk;E?yyM)tByLYNJo;>z}PL(ET<}8=6a~a*nVF!N;}A(;J`yQOb9qabKiy zNTduQ@y5IzIps!iR1*F590HpL?tZYssv6EfFmWwsVJ4(U45;P;-%rQL0|)8t7P^`C z!Ci@l#!s4d1;$(YF}cYaYu3QZ9z&hFjV5}sXTs3SOdcS)^K;=_Nw-8FgZWmzQ8{$2 zJ@sk%4uH#H_!VE??b?4Ea|W+%2r+i)_wZ?*Ajm&yn;G8RCvWGk7-y{*Kya7%LyG4_f0u)&bm)h_IhX zn2Rtd?T&+&Trh;|R{qsLFpywZf~q%4937wb?gu|SP*V5=sU2c>jQR-{4qIa{Z1{t$ z8|Pbk>pQgVU{^Xc&H>9;Q0On&^370OP34CfcQ_D{7Yxk)7+hp_;&}aQ8MNT`sQAzX z9~p@|b_n`tj7%_eYQj_Rs+&>7)g)If5>AT*lg3#xO_`RK8t;eMvO@jlv)xbX7N7E~ z5PdH9g86}#0c4{vAKW-(1zA?%&o6ROiJLAmtWw=&i~@0RB z2?hMX$#wlzg#S*daHgr+G`?% zA-%t6K;rio(*KbClT$bqRyI=7c7`DVZJ`R_!3c z9MY$}S9qWO5op1Kpu2S zNC&t0wRXFO(TGSWN#*mF{yXT9NKZ?ZmmZ^a=Jdb zgP5sn2)P2vc7R#U-S@6~*B16Iv5h}+dKo;-n@_jXOAtYV{YQ}AgD*)H;ms3-E!LQG z@v2nJF~l}FW5v!SJKc;->nJkZ?{Rjz4e#-IOX}K6DH|IQA71v6**nz zqSA?6@0lfir^X6gamh!s=|c=G<#h$pp{pi*Twj%(|oBs&`hW*FZWlrn^N9uWo zwqZL&s?7Pxyf@-fX0ZGMgr`~X8TdiRr$zmiMzFvFV=(zT^)bi|v$)$eIXulY$mo(~ zw7{=h|JVx7~^cpPQGHL1lP@1!rB0)d z?LUD<1@3>B2Gj%B2jA~!YTMHT?*>Krk011BY}X|O2#6^x2nc7IQYbjq|Bbn{+)+q; zV2Zk|GrAi3*L9A97pv7hc{eI^I&l&SGYP2-vGTvp85(LjatKT2?2-ARQK|RYHSBPk znx<;UzZQxpR-jJBE!H6=k_lFj^xc*KElYVu%}S z6h>BJh?{5tviOx%Jt_*@Vrcc%<42%u`*fXEZ*PH#$XFJbS}pAnCd4yknYj;>eW%}+ z`~6+?VWo$@XKsd?zK@NmNBcApMtKfL&pN!R8I2-wvH}v^GNiuBWRAvlxu|gh5ZQ8^ zTYOWnNxN$!ucdpIFyOc3P(w+Ia#5|bZ-9s@QIpLS5wc}mZBd$(OANfF=xj4;xuSL} zug0_@jr(-=WI{2`x#{#)`??8kd z+snj0->Tcd`e|~`lLc%=^*zxqAWU`~C1<$fYN$5}edIyL8!@Qa$8sFl5D`gNWNLqD zvb}jNLRJVI6d+k0ry_+>qO05}A^E2Z+ePw-c1%^&4`z$mEU4!_9&qow)BuYG65^#G zsEvlrenx(id^7@HNK!;LfdUT7={+8IFszuET% zC)yJY$St!aHEK@09$(I$d+NM(aByiWqp|4NCH@FziJ#^#=x-@4E8@ ztOMagK`W{?V?le$dg#z>>BUZ49%G`^tfp{GL+HnNey%Ro@?+>KusL>;sBO8$Xo)k3 z9#KN$PkR+>><<&OsM>R#Sow4VUXMNJ0`9Q=06I076?vl}AR1tB#38&G*6Tj+|`;{4$Qqmv}BvARNK;M5t*b`r`!h zan_R~5-;jPh6sUAMG9UU#;veN>@@`&u1Mp9(eopGTU^chMsW?j%LS{GQ<_B@{Z~(j zZG+ux;BJ>J3{wH6Yt}O1&d=cp3b9_vKPBGGnVcy~Sab!w!9b{kOx$xzhJuQUjAP+= z3LDDa;8c4W&-!Sxr!SZiKro^;gZBF2?+*h~3|*17`SC{7)|7g^u8<*{<-!DM_Yj@u z#$bXxlc|{aHLd5xcgVqEwcU<_h|O<5iff1;hQx{m3I6z`#ESV^xs=Fr$lr591y z4+fmb2=^cpBmDW~nn>?R@1EwfHh+DMh9eX702A;6(j1Ce2^|Y<`b*9YnBs&u;Ezp_ z*Qx1L3#A?*PnGeBaSPfw->sX7?gjr>+C=`BAMN9!VLP!wK;$_0 zlE4N-V4KQP(xE5~6_P_lP(n23ljI{zz~e}n57G+>T|upMx;D`+Loz_pstZdK`{%0( z+gi71*2t(;)-e16wpFUZee=BZWXL6w4A<=+GM?so?{rx7x#tQx?=geOVX__W`^lY9 zhGZEb{tD&W1C?_XVu*Dx#4WYvUIcXm%9#Z#Z$@aO;EY4!az(LOBM3SNAXNH8Gc8;6$B=CVX?G`H ze4J|w;bRiIv-iImi^9%p4Ba%GmZr(I@z2DGxN4$1Cu98p;QV#YhRC9F?i^g!9uM03 zmQ9Dexz%llu5MfT`%iA4nBcuY+p(LqyDqm+LbgWbA$hmYUU2mTfZU#ho!?%6)~z|f z-Y8nlU{NkPT;=j z7)L;4b|-K`jO*>WY&V9;cfI7$N5J?#vOvOwXtjhFN@YZu+I||6Vr=dwW zIO~;N7OKd@>nKQpWwb+mnSUrt&hbOl=l`Nb-&Am&eE3>#j*f6D6z16BO2@38+B1Jj zfRo_@R&p_iu;3DN%e=dD_v8+kirAe=Tt|ALc%SoG<5ttLercJ%R&7sZ0<319u1`Yj z`oc~zl>nTcQdm}}=Fug~7cVPGaBI~ntTOVT>|H%m50!yHzc}|d_Af@O(ake0fz?%G zv0(I=AP1xB8kS(ck_Gh>=Orx)y?Y75vEPbVv?3;Q_bd#>it>4BMZzlUBg&!NN+L3y zHZ&z&)e{-?o=D|ziGs;pI>)*arBocBF`edZKJ}3XV!~I*2_rKt9WG?;ae9aq#_BaSgRA5r0_wmaIJfjK~21f z3YEl?o&5cmFzp}-(TNSOqLd(t421WttY0II7!tnmm}35eIR{*Ul!tN|@Q5C9i_{eQ zfV_oU>YUWT%x14h_7wrRC>*_PH-?G%?6wV)YS<$nL$Nv>kp@}x4Hjp|Z=0eN@-x?a1HBdg+SBxw2lXphaSChGmTjHz5 zeG)srnQH#Q89TdYho(55&AB24Zhz)>i^e73?F(m8%c@?(aMDm_6lDV5H(-_IWpGXMt)9Vn#U6%n~BQoLJz9JG&21 zW2|p~S6W6kTNzTwN))QDPck>@oII^yUGO%qnc?Ty&sTTA?&=-*Co;)*mO41^7yNfz z$z4J$(F3f&{>e{)0hUj>F<_G4owHr9KilGGH(D2&k+N4I%Vx~KCa-AZD zqAADOLT#p`w$W5rURtfCsk6Deuyg}QV)+iiul!J}(G3*Ll_apV~Fl(lqmk*T@EH6mjDjr&CMwl4wn)NoGm0vC37 zX0u-WV{@0V9jfgd*qaSCd8S~#`zWC}grFC_msA$vA|JgxLd~L$rNAPAhIM94Pbk`+ zUpb?*d-USzTOhQoT%E-6?#rN{7i|)yz!D+RJ$P@U7k#>tAWYgA%44ji2}Vn9!z9k# zs5jGStS5(z=9&N+mrx5NyD)W6+9iE~e=jfbr(~^&T?vsjRc5J*vPme4(A7JN@X?by zP*lf~)a4$0rqv><$3dPDTJx4dU2OV+-cx=N0a4(^W$y;PW}a=XJV-PtLW5s^y}OXdP_hYIXfADrIT#kIVHC?ccq)yIOQzcYPUHlhU5laQS$lQhR0+txb! zQBzyRAJAMRoiU;(xw44Mt&E7%`xh@Bt8P7$vh%NM*_8eYta0=XOg*!*vW%9A;tW0v za%G58S{@m}mtqP?%A{T%VQ109V&i@&&ShJ8lq+Wy{;6M^7&^}oohcn3i*m`kn56L1 zB{jV=ZbrTVn9~66x+h6<=Y}Mzc9O6$9MUdpS zrfS^?9I|=Y#%MW9z?U%~vzN~k7^~^|aL~TQ&q0&hYurA4!f6FO*b*2a=snK53m(#D z4rzC6UZ(oU7qaEB8DhaDXagD7 zZW+_HC|npSX6`xYD}QGnzjSR%x%?uVh`&*D?XkD&A(@_zKMqYZ7^40qt9arqVJBE8 zbpqL_s;?nOim||C?RfoLJt)uLiPe}t;1NvgnDpFG3CX(fRz@ZF^dv2@IC_WgZGoz& znJH4V)7lCsusikoH_W3A+Sf>tU~9?zJn^?7J^X@-Q#D!qYv>cPjRdx6;#@V^{cLY_ zfoiYNxtNLHYE(i{sTzJMw;SMEA#b(JG@Px&#aXNVKr8GyKL>Jjy|GG|giNIi7DPmpQJ)6tkq2h$my%=k^B zO=MBQu-P@&rV&)x!5P;1(Y62hX1u<>wz@hl%3A#ON*%k5ZA%xAsVe*A>d17XKK9b| zoU1cXB6iittjc=Jug=H!+-!;E0BUn~Z+uB3SP@U{AiF}Br963LoF`GC8>3LxBFl}? zlg-GU<|4ymsIaA__UU8GWrR*M2qNONtCAD^#g1D)d5gS#9AK7nmwRgZvcV4 z>GSIFM3j{i*Js?gv1`H1x`R&BoSGW1q3#6~u;)(D$DOhDWtYg+8ay6ZGcRqXRRnJm z`~zH5aKrs|e4mYeK_QPU)4#0Q&MXse($vc7YGBoi=F~j#DIwTMty)Z~yV$nv5K_O8b)er{uMtu3Kf%Aq@TDjYIp_F~|@~}RStr&CF=;u!NCYiSV;uRg8B=8H^ z+pqF8i%%)V685Gy-xSLGvSiWM5kr=;2q=^cM2NCYz~PzBQzI2LUFQ!dFa@g4hRx@i+|swqEmXrCSVH#i%ZR>jLSGO@eDDt)$>0o&@_eRB&`?r- zBKjc_OEMvgCqI4}F3^#AMM^XAarWRAwka(-XQua@-JOYhMAT>86ERG}M>GO)3$oFI z?m5KXw58Y0jGu)wB**s64*dJ>r~>D?#K6|h=s@h-p95x&FZ|p8=C=eL@WMQA_#*Er z7{no^rAP=|0LR&65z|k$mjqc7z1kAwIlqJxT1*-Ny57GeL3{CTUfpqMcTkH^xfB1dbsWlnCi7oz*&r%U{ z9XM?(v1sz}TTZ=DB5{jq=uDjw2dG*Wjaa5^#f4qc!UbaaI)XczhZ016e7L^27?Hv|43i zV-fmB0t=0C=g>BNYnE2X+Qi~Cx4^Eh{#4fqwuT*is<4pLSQsc1SyO28Nl1zXDK)+V z<#P$I4r#`aWz63p(p1OTsuOzhMt@m;EdD%U8ZfG)`&sKf{Zx&pscd;U<8S*Stf`f? z){UecJKqY7*euxi%w0{qS6@tkc!gUbNWX5R{3v*W)m#Dn3g2kbI%nydkEu!&7#}+P z5kpPcbB*3Q;Ci1QP)|(%3};)>N@cWSKJHwyVSI18p@%}0~Yr-p1U9T!z?t1HpPVhRKGi4?ohu%={n&r z;j!qonyRc>pV&6(N7%~t*3bNs@<=2hv>1b8ez$C=*D2;`nGBc7coXU%bCqX?d><_s zsy&rS>n57C6ct7tp>-RQlH@8H8>XW6u0W>&0`y^b@rRoV5C;0dIX#?;1$K8t^%G=i z7zCdtbf209H-{8&EZpgW&aqlE_;8qY8uOA_!)B1b0q0v6IxH6g93XnVepI(V;al!Z{f@;nBegSfw*t)-bG4iF!yb;Wp3;flmf# z)@+5sr{wLcP5uaeV1DwhSLX?gO2%qX;0cgTcE80v7S-kpS}hN^<3PDwNm$D_FDy_P zlxRWDTGl#KmUZmu41cF+7vXRy>4eK#0i3DX534_!>z3>UST8dKH$}aNRRB@zl5l|b zjFt!72*m%UzA7`N%`U>ojqr497|CgfKtdFrkSE@M)OszK4P_)qn42FhjJfv&L|8)QqucfS&egrfiEf!VLQJX zv}*?evkn&w0z|nLL{a7E7R%7JV0?j<1E)e5i&z#UC|7#K?_~MalzqY9>5%L^5n3S2 z;*u>b=quF3E#g$fPUc`WY&l-O>QuT^)O*ir`)>WA3hjgiRd%@I2q1RB3+=F!2QNl& zJ0K$-Wc2++{iNMAmCNN($+)h!7(Vh~KNu`vz9}A3AtkraX_XHq>JY`7z8HW>Pxj8$ z-?2Pjb}#%F%+^T*#&mKqJ8wPZIe2p|O-^wXFd|t3WPj~wpBcCZs8M`@e3?eyP@@G9 zqZ0|83hl~}V1ND5j@7fJxFfRZ+KhRHv9g9pKBdiV=|(HqMpV`0j^k63bJa@ZVq{M| z(p_Fbxl{1ddO5N|B&&4xxtW0EV;J}$rHuEt1OG84^pQW*}ywGhunx%}Y;-XcsvX&j;CjD|4KE zSQ}il8gnLtL?$A0u&2_F{7g|A%cTm$oVvO_l}8pp1$VH+_+}|XDXM_8SBXKfUGruvmY}6gsYKQ%56X?~nHR|< zc8pXrxn+hG@cWFJJ2(NAO?>_6ws3pgp>^#Ebc|V2G){b=5$Mu5Zy&B4P$-bZ1hOG#CJ|93;cb%tQu-u$`^eIt=+mQ=nSS>+ z%GYK^JmR)TZfugk-vono!^1hUVYfqO-kr_|zKG!2g#gIcW0HYRT>EaXB-gX1?H>LduHs}c_lF0*d%ff0kO=pYprT{03%loZd@+}5;~%=Z z*7{}LYb3bkoz?kBVqE}_%y>y{y-qz569j6^PaXx!ocRt*N_OG9PkI?#H}QizKx{w! zwjnx+>*?I3p(m~`cWFXUqS&?nHx4HGkG9J@W8y=rNc?cDj(F<(qTG|knz-R5Umjrr zVR97;I!M8_SYE{NJKDm>?t2T#zQ{cxN~tX9{XOg~@o!F~fnn^dhEs33=o#|Tf=2m3 z+vT`?6Md+cAtuXRZszaN^zCo(|JeumM^$LM^aXzf1^>_L1PIOz0s9~N!o*Gi$zIx> zFE~}2LNGW1XndPZFt{8j7~yAHX9&0km>W?VS|~U@Am!h+9X}l_Q1L)O#?s_M!8w5d z1ZLqGa*|MFm;_?l2<296RALk<(g9mmenZssfeaGZYuT-umCj|=%fw1ClkH4@lo;!x zmX?~D-@jUFT3cFv|5op+;P~-x)NqIyf!XT&<{Nj=_rJ4-xz0pPzIU&FAmzv!#r?>& zC*}Yys?Bn%eSJDE+pX$j^Bf??YL!PMz-Dch8PBFZ%Dbz6D75Ur3c z5}Y$VN(bAyDst0?nP{_ydwj0R^A`U)XKKbX+F1bJGXR6B`9Pe0Vgy*>0c&@RdvgWaZ@jhHswhbv^%o+r}=>E_1KPXXK2p5hI<(7<{<5( z+5-r;71m`td5(a(YmL<3MtLfZ>XBdSJl29{6`t7-1ba4f`hTaa4pFj?0mX zw|hy|dw(ll(FJM_*wlS~N6wXq5DD0i*jIV4Gu8C`_HFn~5A8fxgYy`#mz!D0i&k-P)Et?r3Bpy1&N14fGK*+5&(t25o# zU}RtO0UvFzb&&O)2JP1d)at%{`h_>`*Ka7UJ$u#99Dv>6i|5G;tzZAaXMm)DX~5Tb zJ(1G`71V3|@yB>5aI~-dwE=KFsQ7wZNBcDc<$kz}lW}#6gz;T*PzIwNG*<@w%X@nu zpHNKd`pMlLcnJ#OT_iZKhk5mX9(n{L zttZ<~3*sXrIZbmVIBj*N(``I&*Fc5+m3itqM|Is>Oz{5Twne!j@Av_vsG{N46?vyr zVm3=)J;%|rO)cQ;8kq@{Yd&)vqQ^9CW1cg3XzZsYOPN&EdneG#GM zAY2vpvgB8dIp+&`FZOj?Bi=_+hrVC@C-q>=j>SnKx&q;W_ zv}y=p8j9S0pA*{0`{oys4VX!rK_IwO!G1`s=|^tCNaJmjC?a`^NJ;_*Q3#fR)moSL zP=N)h%p^19T9-t(3splt07j(Ok6&6Gy?Y=GwbaTi(u4w#&=YEFa8R3uM>a>z5!v)> zLcQd?xJLmyH6Q#=5*#k#J>*C<;kocg@)?VTp`S1hXzC0T7kFpZ5r(DSgYaA}|C}75 ziEKrSnG*I&yb1fZ(Ux~_fByoT8AgfngZ}P|KDJ|DmB7Na+rV15{5%+4^TdI~k{^-7 z_*1E*s;Xv0V)AeeIOT6vNLqDj3%h4x)sl8e{Z(lwmtX2Q-~G=eic@Cid|;$vCvCYx z8Sm-y_!0EJ3}Y=vEHciXDB4()aUKirijuQ3CbV#{TXOFo304V>+z9M^ntwF~7@048 zS~YeI!B{U|;TMo*3LWtHqAHu6mJJ1T3l1gQFgJFuH#m*RKHFBm8rC~36pF*h8XMcn zDPYFws&3G=GT;`uqc8FC7*SR^-!l6c)efuda0XmZK=vV~ALMbF^^Swhv>Cr6!o=w8 z09d8&(*;wU1-FeY@6cd`z8z^pj?W%PA^3(I9*DWChUmHTdpI8IK?Z|-xcrcc*7bOV z^Lr#7nn6@Xf?yP0$9L(j7kbwLJ4*BU1oTyGJMuW}9s#huAiz2+Qfcxkk(FSzV#`|? zewi_w!sAvbZzD}K&Vj2XkigU9F7nRgX_156k0Q1$Tf^mQKPF}RwKQ3 z8fk)ia8GBot*sn#wv^pPa9*>db0|&g|Mro{oY|GBPk<`1wGm_^2x`+yVhQPW5ylNd zXcP!KlQSZAlkHl;7@6EM$yLS;l(fSOndL_bCc_P?ga44Ga!CY*G0pMJPn(9pA}NM; zU5qhBa1BDv2A9(dq5dD^p6~>Y_leZlM=7xsJhhCI+qL zPjFMOJcU}hujA*(cCSZ&0a-NHa;w7J0Ju`A2KI(*asG%b45_XT;p*jKS`Q_(7~>M! zO!ftO^(Oe5h2aUCI!yWINKW}`3_6QaM+tMV}H z^H~lBI;Kc8>b#y#$K9KmzrzP_kX-eWAxi1xbsFLvot_j0yse%6YJNfGILnEX{Ue%u zn>AU5^#k@ph%VHMWuc@8M}xFYDZ3t850F#?&3CX2Rxqo>AiE^OKmVPy%C!*XiV=0{ z7>RCsMM*M9i(|#Mh3-PJqE2tKwR1#mS2rwviMcLLT}0$ncYoLyQ^fIrM({G@`KH?H zr!N%#{4i#NEA1Iag0bQABh8Pbti6#~(K1sCG$Om>u0WPd?cn-&eaiH4B zNM^g3P24s$D|gE?LNM=N9bdZ7uNjG&ITx4@6-O-_bnLuq=B?uf;zMu}H5QW()2C7S zPAYc!BVB&P5pFwU#T8gAOVvfWBpG>B7vtJ_W2}EbE;5Gz7{Ph1L?!;-hU;@m<#Q}1 ze*VguhVNsOPcp1O`&60&NA*S$3e;2?VINgPR4Giu(h(Dj+(H+zW$)XXX2|r%ZTp<} zVbx<5&{oRCH0Swy8Z)xA8#3AvUTn!%U>q}ZU~+FKq4Q&;#b|3zVCgp`gLs&}ubj6| zE>4vZZPb&H{~v8#bV(gYADKnRVbGI11pE2{4eRt^Ecz;2UeY8Qm7gFbS3qvUgJ2T2 zAu_VkrZ(}VEG)f}v0s@>9fmmIj1fj=S6?(*TB2XKp>s5uFzsSHjP7r5&x(EpbaKN; z5vf^%H#JWaMO@56WA_p}HWT0iLDN^#8fYDYoSZowva)3={lVU*5GhK4l^JOv`{7AE zn?;_vq7Y1u`n$&WnCgT+MPTchaAo;fb-nf+s9VViVsD$>CT6FtUF}yWP@}|_Q;D5OJoLZlF=>2LV+W%VWOYy!$oT6 zd+K{9o4RUSZN8-J-wEqWoz2nh3#xwhA2w2=D5I#R#QU2HvI{=F(m>9eoyQgdpubNN zMq_1pfsv@>%yQZ@tU;%Cpc5M=)q9OlXzZG-Ct0quK6&3=Vx3$=hYCfxvLtqt9S0nA zqkUPgWBz77B|sMEr??Sa3Sn+8r8|(^ikch+UTb);K0KtsTt(VI{~k|tF2SXJAh~6u zDZ@0MK9sabdB-jD3|MnzN8+Rjc9fW+TU$p2s)38OT-8M#^?WPNV--8ou!np-8q+1w zyFm0|oWOC7ZN2h#Pbo$z0AcWJ4@kg4ho`>C7OEL&zTNL8Uj|;cK!CvUI*9d0S)JWp zw??3CZujKa-Wh#PnkF+N90@n*`~=J_mPU}dn)1&K&9C%X6W|+LW>*v2i4ZKbb>xrp z6Ln339T>VO+|rWFTLGyh-=jqEcWs=kX=F6tT2z>>U*Y=vV!iMMK9#q003rNeMUoM7 zgQ7#ke^E7>)Gb_jsm%X%1ygfJ7nInrjq4_3%ES<rq-DEI2oP}LZLO)5|N2o=$xqPcTSH-i=1RGs*J zYtX}RtVd^fSXBn2c_$E!Z>{;B>MI}$Nm=`k>$e&&*I%vzQ8_`a;$`Bn;am4&vZ#ZG zsJHlG%b;)1NtxmR88Z50)k;YCSrU$C69 z^i`DbIiO)Kk?pX;;z~yjTi`xS&rOS7y3+g_a}S1R{XUv*v=JMjDE}6!s1EGnn1e;U zw;Hx>!u&UupJOyU%n9?iG7bUV0=h{o_QMTay6Y*hg$-@XmKi?O5DTO@Xm1W@8SS%2 zNPs9X40!y2;-MN?uplp_7*;-Z1O;F9A|#+Il>z8Cicd5dJYUKbLv3Z(u_*!i68zEf_Fq&*KWvk zgx1>BlRsP$+aKMdq@+7(sQ`b-lZ52IlEDwbx%3!)CTBd2Qjbh0+&3w}EeGN{@4=JZ z1~zZ3r3EY#C2UDs3{)f!SxM?i3qn&DB4HQ8sV2AAf*cbj%czI_Rght>{?i^n^Teu& zl$KTLrT zb=5$VXc{MzOq!%ya~7c%s|Zhhq~ROM|c98mD*J_E*%`u-{HCz$0`Opr~M^a*6l z&$P8~)EyREPk{y#k{!wtq6LL_T4M28Q@+^1s9m++hcMHmRfq%85?->cb6WLCa2TlG zc3pqRQPN+~4*{YJh}8RU%IS)wG_6e7sWNLn(_|`#&U;en@*;wYcjQ-q8FUH|J94hRh!c0@ z;TdM6Ubv`zOm0HEkfc4%+eF)seZ*I|t74&dK%oQD0ye4a4XKQ%>4KhV&h{;4h*7H_ zqhprjpRQXvtA{pu!PkndJ!w7KPu{lA8=ylbT%RzWwkK61kVD_RkZ|fdl#@Q6%pvW&q8{ zD@)4|+(N^t=E?p4RM4n37r(D4XT%nH2EN*Z->f@pw(YrsDw>|i&fMcOAqIj$jhx~e@ds{dE{ZO=Yup z7na6Xe8J|)kojQ7UDK9sVy9h?#RuZVhh{9z|Hc0@)1;z+zdwhjXQE4)kO7wP!pS$A zWK~t~D@2wop2$_oxRzemEhkU1OJ<60R`4ImxfZ8rl<+O3+*cx$uqG8ORyAg8ebD`p zF>C!l0F6L$za!gW-zlzfW;wFUt8$`4!DxeJ9pyC$nQ1xLYjZ&}k6w+W|L46Zb_c+fOfva9~nTLtoTRjm-8ZK~=6Z z_rUmr;wRE?ji{%MhyCQ{O zJqlafjrncEFc@Pe^IUlh&W@6{e`W;E8HRJWXX5s39Qs$#VcP+JF&6!SJOj@QOPOpx zKXP2zFOXe)8ZNBL!YVr%@pibM+9%;6@@;;eTE*^7uAbw}*#U9C>LBU^e|9(!3Hds!ZPSsqKD$I|Dqm*ugS<*}FLMZ7GJf4wYkQZKWR zmr3&Us?++m=i<=8b9i+UF3V}(2NzplyNcV>aOm?j5y$($k$gM6=Sb$|q$-t~)4C5X zL8wY|rtO36NC)Ul?p=yhL2RYXo$An>>AaTh8gY2rnX(TqLtrJOksA`^<$@rus7fti%_()KJ8?*VDSYvc@vMGJ>T+yLvS%>xDVAsL;JfioZ<3!nfGr<7wREI}8Y zy0f4fXF~@T!d-YIJd8!K59h;kSPZ|z68Hd1;g7fwzQ8iH<03o(f6H+tF2*)I8r!iF z-FOUc#^dm6ni;|xd<1K8Ki1)kxEw#kMv;PR#C&WK3$aZ!<65yE*NY8!is-}+(TAss zemq^Ajc1B0u~Y0uUA#iiSFu~Xj8<#ha}Wg9+Zc@!VEj8gv@ z+++D34)YO12Tg&PPvXBj5WO@@I|R|jxO}*UvjEG>n2Iu0pmEBlZzfpU{f7B6)Q zG$5avMey`K>r|RR9qMmu3$cfSpR@^2PvJNnngGx=D!g%%Pg|1tm{6d7?ZRE zERUEK)7Q-G<4b&ujl#8jO68Bhmm5dnI$3=!V89W$o(me4PT#ML!VS?AH#U#LP4a9j zDK&6!f3C8WI4#5QRjS}_X?I$<02d`@C09Vdc_Xlc%5SH|I48em4paA56NvvmY^4#PKy-QD4Wkp#Pk>w1ZIZ!wkbNn^S92J&ver$8mG zSn)ZqolD2YLAJ&q!?I{( zJkCU}!X*i;c@pHMczhh>Eia5J(!AAlC&1m$jh-91WF~HcqF~ zau&4}001PH-k}3GeeC%bPkBivw(oI|}%?N2qf21kZd8CiLTqZB0ig+}a zOK*%cW95T-9j9}Jk4D;5AJ{;}k>3ocjXK-Z^ z&*UokTCH=9kEU>$him0I%SUUtPI||B_%rgHUBt)n9G#E%aJ_Wr%2M+@e1eDP`>@~w zX-@R;Niy?fe;-}Tr+E2PUMRf=A2;$MVSTDJ)kVCRmw0%otaF-h)8ymR`3za1*~2Zu zX{(3ZWQS!kc&3M!3#;w&vckhFbzbG8CN2}ov*gR!9$xL^HM~}qJV&-W*T?7a`9g4k zGy$QXtkYhd*GV^6#344N>Cm}Tcn3aguB+s)G3;^AJA=t2))B<~k{_!19as`F*C{N+B{$X7`7Sr1>S^Hy2)Drr6^ z&DGLeBh9taTqm1c@8cWzMjvhB&wJ6_Bv!pynprSd1lf~n%K$P9`1|=e-g>K$<#FDi6=I%>quDLfp|g)Ei-B* zt-3Tb3r@zmoInXN-PRtTx5EJ5N-HNsr^;Ib2X3z|863R*WlJIYMP0|_v!HZtR@!sh12 zf6N3-FLG4c49R7~LA4`lvFd~bGm4|J#NzIrM6c2k(=msegS|pw+27tOB08|QI)nx7 zY0FLYJk!0h|-V(Qx8qrW+~`r}e|?`G|@grXpvqVsbUcLeNJEuw=F- zyVsfV6|$6qe=rbP6^MuB-5GQxy260;f7C%la3t+r(G@oXA&75unu+CESWK&&IRs#g z!lY#;)F184aiN0BneeR=wO~)AwNbNa81QYE{(w0v0yKgzw)r|A^HI5HzrLh zfn6)t4zhT+X<1m<5|g#qeeA)|O}UMYNFdr-w|Gm?>~RoO0I=qH&>%YlpzVo3e{e%f zphsyMSw&(AOce-6t!#)nk^l%wBOKpwm}8nTWGPDWr&=l`b}IElGsTV`S4Jbs7YdU- zp+Eu~%*tWPN?@p4>AqV$V_}biuBf72J}DiSfC@r3rUhVft9eY-!&nKCRpM`B(;{#f zPeuiu;chH~JVP$al!#jtO?J0+f3(6=P3+jH^j*K(yXrpfv9lo$4M6&P3rHkP%va% z3de<_3i)?5ze~s;l$KWWLc$4MLRjDNAunLe?kJw6(-2f1V>}ct+x{`@d zY_s^G6}}LkeeJPiJZLTn3!+Bl=Z9H>FK8h>>bHjt`Uc;l^SuV&$M@^pXYkkf>jvFI zw;J>X`l3O%(Kds=MB5OZhnk78CjH2ud+9!%A29eE{GdViQ=dU!e4qbf27V&8T?(o2YMeQDKXVF#*&ecA4QQL`30czr=tbl6EVM&2>ctB z(EL6AzCquk?_=9E@cbR{WPiqK{V2oyp_pl@HJ!xeA5euD`~%u=@YA%PX|%s9U>!{G z3_ok|5BWzrKWFfd`6mWHFM9o{!9SDd&kgyqg63HmjpX^af0UWT;Z}}C(iRC8DVs4V{ zROT`Gck=P~)Q|Wk5v5nAIKJbL^_aFWR$BS_QPki+@GAztDqBxaGbRlAV;%lPmzl5o z`TmP8(fN-Cf4|0m5{v%X;J@(eI{($+H)NSN`7LSwhS)WXsA2Hm`5y?;2EQ$fyu<&5 zB!`K_2LDTd_it(5mF7SEUxVM{_jUfj;1BtK;R~nx*Mba436iYLLS=UMotyCK+ zo0l2de<(ymZM0TyXk$dRW3_RHRsjdn#%mJ{Z6X{-n`CH5X_F1juT25mhLkB}@u|8t z&Crh4rW@KZz`8a=)H|si5nd@!!n{9SRzpP5Hj2|D9SYz}*=Up=D$DvvQ$k!PhR9c5 z**q{RssxrZzir)mGl<;l!Kt7T5E6I8aUe^ee+H3h#|}KkFF`#LljDFFQ=6UB{`AU& zrp_Gf0$}nH&YGykqUw-kpCFN2(o7xstU2K@hd*RhyX-FLNhSs;$X10?(D*~2Epapm zM#9+H%AB8a%5CRUPQl%nM-2964w)E4QlC ze_kKOmbHVS=%67d-9o?-0;O#2&NLBa&td32iI_cvgj9JjAt*`*B1qLs>ynt^HYKJp zRSm*qbDo>THmk$2sHMmPVi7JEZ;^wH7jI2byFVJdFEWwJ!+{8rNoZ9dBKI6smBT2a zed>U{QO*IPyur@agG?0iJain17>ZlIf4H%&bxG6GJO~b96Y*HN#E>&z?XWI8U<^u1g7ZOs{nu+$r|Kpg8GoLFQ?TEo^h@bF;oS^~h9+cX6{D zthOZ+Z5>V$v20Yd#%xr$gD3<*IWlZzs~ATfoa)yAH-XK8aAIXNED186M18m}e}d3h z)R_x3J#4AVGc2gcv0xUVl3Eoz`X<3#TL%iRe7|uhAl8h-gFPpZ6?fW-4+kL`mYkgn z$AJb{aROjz%pJvcvxYar#z=dh+f>=UU7cd|P#mS~3K(*HWlkV(6jTM(K22imibH&q zZ=P@_v5m>g2I+(+cNr*$TVX)Jec=X#uMXHQfSb|E9GKIiF-$ ztU9_Q9JkV!0n6;N2+S5DSp*{1A<`O9>Xn-vI9+!Sa0@wvvT0EL_@Kv?f9hh&QdvkG zBv^#T^6LDSA%ZRw+j0ANJ=w$x_8UT9%(1Ev7V*+k*&l=It$oFc2e*Fv0w zyE_?p1L3gU>PP$7y@1}dy^Ip17J@2PJHRo&e zb@hBey^q9N-=GK4e|{5hA5j6h@$9K8}6LdHj=sHC4tF**{XW&Jd&s=A*>SJm`Wc~xycjj5`@ z!ebv+9DNJz$y9>&R4Sxe@K#4-=vbNv{Y;^`R73OV1iG3Qf6+D6Mhj^THPZQb3(;Z< z(^8626Mb8Lb8pK)50R`ZJ<$=Xo@hx^J<(Hv>WQXY`2HPw#L+_?o}d!hag zDEx7HLILQt47^^Wee@)_cuJYl^#PeWeb@My7FL7sd-Q$BqEF#X$MY00eq2jUYwf;z zS3$kIf81T}x|^zN%iXi*7giLeXwG-&`1@(JbnBsru_>CnliaQcx4OCSz)J-JBwNm- z)N&UAgO|_*x|AyEGCH0v2mUUhljzC}{}bRqKcJ@p9BiK9`V@z2H_fMKlyt)X1S&W{ zBdAcPXLb6aPAl<`q2S67LCA9N=ty&}gU@NXfA~5WM)3c6S?3<39PxY6)#tbZ);l4)o=;igHt1p7pziQMW{r8y8a}L1s<<4u%64#dd(JAp z%ql;opEyosK=Uq)-7I0DdJoOl@=?A3_?(#bj1z5iV5>vep92q_2h%k|hSMQo1d>?@ zb~hp1r7d<=^hI#c7dXge3|gfB3po+j-!(>ho#pbKilV?4>41dU|tS^h(hg z+sUwT)@(<9{06MGvB3Jcg?;hXx03}f_fb!XU+Fic=piQ4D383f4$Wb z1J=y<)|Bg26<$Qy_S$m2!izZ7R^hUHYuhT^cJG|Fy|ij|hTU@&oiyi3bN(*6U^fNk z`zi`S?rX=AvkPWdcz4md6a}}_GJ9Ybh2|EeyXM^Dbho3vM0M2!XY!b$ehN9=;(jvi zZaLC($5tJorM_Ckc7;;ZDN=Z9f1aUDHT!nZ#;V#1cZI8>ux2-P+5CpZ3>6+Qyqnfz zNH5)gFEvR=4c?RQ6&rw7HJ+0*#PH5oCh*(Ug&M8*mV4ndW6HgSp?aU=HRZk(MPSL& zW@Y*AYCGGcDBAbw^=c^Qc!P#w;1MkZWT&)%db-3rSVLh!h;=$*xB*+0f6{kpJVNwz z1nF6bkS8D#E(NCB5Pi;u->-w`Z-56}4y4~mFCad=gi_(xD3^YNRQ(E8`8{U63eWi? zzP^Uc@hAEN{e@n~-#6*6?4mb#1ii^)=`Ef@f8%QU2QQ$vc^SRKXVJg8i{536{==8j zfB9N^kH1Lo^PThoKR_RHe?NW9kJ2Z+m-h2>aJCnj`BirDTkPg{S=V&-X*0M;JC2LB z1zf5v4Dxj}zh`ViC8T}c0W6g9j zEK4kL;?V0(Otz{1>SWq>Sg)l16Pl*e8?!uR2Oxx3Wvw@KdQ+#j(*OR(I{lsKQ+h@v zw0|IxeM0r*Mt6_^e+{o+cGh_&B@~)AosCMe;%Jpt^=r=3o?0}3OqCx z|8)BI0pTF~!Ik;IB|dEPF8#;Rz}-mLqJbrQX_JV$89(*-nS-A#`02&Zh4{G$KNnZ; zqDvm7OAEXcHH{f6xU97nrTyhnzgE|#=!$H@9WSK_F9Zl1sFE9LE-#@Ic_}UC(=x(J z8J8Au32gDSe@e@2o2@XK7sEtbKWArrD`$XYedV*z_>IwSY`2H#FcWQ%bWJ#%RZWX&vNYRxo zHUPG^+Rv-(LjH3px_Ucx71X=RUA6n}rZepnc#Z3Ef8XkY+Hx04+|9@g*XCpfdvuHa z=(Qgg);OghipAY@U5c*X>Ou_vma|%lZs=3B4tBgTTOHKHgNfV73;!O;%V|2dQys6M zGk7J+yj8RTQ7M7<%^1Ig*U)u*4&B1%We!!9fXe|GKy+|xMr*f1Yulg&`JbIWE;m%}}UZ<@4z(;ZT+3Kr98w%|R+< zlPb7_rgA4$Be-UZxteq_C;t&*kQ0_v5CcwVykW4ClEuUt7yci&$+rWYQwS)eHcrOY z`6`!g3j{EKTXPge6#hEdWXLetT>?bpnn;w*1~N$u-UuM9K?A!9vZ;OWtuxy@+c1~4 zrzgsrFa85xEPsVn5YZ}q(ZbRnWqEpLkqu?GNNsI*pVR05ozwI8KfnA2U=^QFpolrM zylta|cP8)_F4?GH-bNJ*Hj$TYT*0CZ7fXg*K7y5hqj(pqhPZ0sJqzzM6nA+r=f#m$ zaS#Z_;MR9KItjVbt`c<7k$$SUmT}}Zh1wOWCB;{@{}iqDuLe&DEB!bBELt>g+rtn8q8qr!Y4kw$Mdyg8t*EeZ5<5YR#jx@yN3$?|E ze3w&L>ya14iH!V)(A~Ig;R6RJ@S%e#9CuL0F+-kn@DZ+ASaWb4H!R$A@G)*VxQ&{H zPaLe{j)hMhe1;7NcX5y5OjG(156JFJPsP1|I1y?_ca`An*;xy92MugG*us56W>{_v z$4#Jas%7AA%g|IWdBkw~U?s+i|A*oF*TPE;R1F?+e;<}c#^5JC@j&zf>G4-ClMGz< z0bx$NDeHg$^+6({Bu!jGT_o-;&l5czt9>G2m_}rGpjB#vyyoLXi}0}RbwH3`rXtaQ zEumyb_It4C1yV#h>8H-HFc4dQ6=qi<9o^bKVd}2=*A^zYx_npM7g3v_?}w6Po%sbr zIfF9bk?-aSGaU0$rO1GRwjqN+=E8TWZ8_C3q1j!c>Af&?DvkJ+LzRvO!55kaMN5yk z9fp<4{K3`FyKk#e8{|@977wRE<3?V8Z*%Q+O}=revt&13CcA8sT^gQjJyyP(1fA7~ zZawyMgvzh-7{=OSC-oUlR_X&~*NSk-dg6u4mDi|m3p4bXm*{aHDVNQo0MJe^gyGQt z1Wtlsnoc#MM`o^Glzv2|F)0uJ!Z{iG)os3C;M!&N- z*EjeL3Yo_B>JzXhDC}YEd#pUexS^lH610!(;m95)zWwe8oXXku)X|^ej3B2bjr-Be z{WQjC{T-9|1DEg|SMev-@K+X&lRN5%b3W5yYqVU*qMyMm?FITkUBqcR*(6@f;>N#F zO9KQ7000OG04St3PCgZ088;#a006m7001DDpF0E z_f7I9lNShq0Ab4j0g_1|h=>S+Ku92%kdOp0pyFiaB^j8^#94sgzM!pIw^|iYL|o!7 zSTcaPZ>?MHVqII8R;{hpy4DThJLkSPTQUiu|KEq^zPp`!&prFOcV0O3@M8clU0Gp+ zckovkR9w%+4OYC-2Je6378|tVRvT`^o4EUCF1B-V3l}@m4x9hDbt@M;xwuWm+ifri z@8HIrDt6lNF1*_YL+~E%xtELkc*6Z$dw`1vx!A?UZZ00;;@4d4;i8L+hzq6pKbUWzMcbsf8l|@s`!o#=Hk2Dcu&RmZ7?7I#*M%8 zN*}2Bp$*FM4i!JL!6N(zH$LVg{?ms4!cVyNsfz!$K{bA6#s4tO=iKNzZI>>W>;^GivbC}Q-zy;cb5DJk*Shz@|4MaK@ zDi>BRGPtmDk;zjuu4QpCfQx}vk*$hBHjyI+6QRTq+Ee7(;A$~6LkttcxyZAM5!^G< zDn{{lv{j7ZZ$9B7>_ibU)+WY@@r+P`RZQUSiM;qE5&(ZuXca|t8sV^tVqUz2hbLRb z6q_g&Q*GiHF^#*AWq|42JWdreGHC4h4BBHR*G{mCSynNdXPijlB<5JfT&p;VC?n=s z#eADsAj)`fA@`J9MTJ!?vWmsLQKeNZv5J$eqRJ|&d3Y($uCa+)v5W*u)LBJ6cQ@DO_u`QL%~#R&(E}+;8=kxX#aB(3ccM%sC^T1|aVKaYYxS1g~Tg4^3*QKiXnJRv+ipvnR zN}o>;lzE-OpdLg>_xf8}^Z-Iml|Rr@8uT_#Ut3xw`)1Rq+rQEuScibC5Hj_Rx~tmh zbISPzRZY#IV4E`#Dh>JDN?rbdURq8Q!Xb~}XU?J(tWK9pZx8tiVtgFJ<@W`3Uoadj z4fub(da!i9If($WT>iGUu+QUi@9JEyio?i(HaXCy`$DDl2@?r0o0jo3d-Q;DXg=V?s=>PpNvsW-P{g<;#6?ewj}DJ8z~%K2M#0!|ixY@z3?&@6ENL>Y?D54o zOe{C%Pj?g9+o%|A;1s0JfG5;ZTCE3zw7^173n9cZrTbbuKEfui+r)Z8(;0sX z2beNgA zp80K6vfV2Wjor%pKDUQY&w|rtoGWOop|v{K>*i5OtuosK{&s&*HwJAkr?1xNKv3FQ zp+g z0fW3eckB`APiQ(xuUv$T)yK|24^TCWtf6aNwX35L4R8J}f4UCfO-my`X<+^#VGe+Zp18xvm6sGF6r!832Uog$7AHen#En^m;Z) zM2b?F3*BAQv{rYqSyB8=YY~Q~h9#Cro#=?!7!vftz80)3B9AA6er7?R`=*mjO3RVm zqKC?oeb@BDqW{HvWqI1>w>7ltQJbU`vTS7r^-z^*Zi!fhl~Ul?0Mmb1OX3*KC)=Ds z^DBMkY_{A8LpC@)p$dPX*16FiZ17i*8Z%EaTH-SYny#tN5GS(dj#Nq>HGV9Nrqz=Q zptJ>BlDuf25Ns!jdLCa3DN``sTBy5%iDT{5vW0`XyIODa2Rfv*JKZ%tZwG~o95PTd zq{l4m*uqpsgBJA!S-F3t_$h8a?dU!y5;fxJNhgd@*q6sNr&W2Rqs#V53sBP>cMAie zT}#Qe=s{IntBPMzvcxJ7CV@#?@AQW01Q{`G5XPj!u`F7nebV%HzpIs9N{Wf)JSM#^ zvA2@gsnWqcZf30g2xKC5=8#WttuqPhUSS|NnN)aH(dvHlSPg$fgOM~ZdtvrUDV=PY zKkN%F^l$K0@idkW8SB)UYLMTXTQ?@mmSPd(Q~&YHYEM32j??XK@Eg&O>BCe!mO^?J z&!kwMj7+mXu)!H{o9u4zM-|m-L={ZtL7rfp9twE$^&~zrbd-8YMkPI<2g6>XMz$wd z#xWjEh%Uf7yVQSgXyRZ(i)18N6Aslhvoq2+5>S?pK4o#~7)ZKXpA^CtB^sS01hEo2 z!MRh=Tv&AE0ALV-B}dYf52OU_5pP?At>KWHc#JU8>uhUsI}3WsSivy}HT^X^{gNdX zX3gBsr*9~jdNg*8m}cWNCKxQ3I+Y;vQ$fbOauG$`V&i|*ILt8&GqrD+RLNHqep)~F zq~qD@{o#O1ukdhakrf@9!qm~whVwP}8~j~^|H8KooBzalI;T(8P^m ziv}OShZ=ka|Iy%c_(FrP;TsLUd8r9$<_=g4`!#_3n7kr}OK+LA#LlZm1 zt*Y3miQBM36}M~R4soX@I=OL|ChivZXyRV1(BMn>iu_eS(=W#CK2_YWi3h}k8XSVd zq^2q2H_CM@oWuvWJ><8OuGmenvb$vxWH&M(RqTJ##BTABCVnmUXcT85kti817!6lU z5KVN6h=y4>fXw%iw2iUdtHG!6Z%ypO`4pRJcmZChiv5~+SR5b&w7~BV1&LMd)q1Ga z?+y-37msA)<@9+}6OW0Zw!hT z#EY7ENxV#9M0|!3JeqUjTv5gEH1P`WH!Lm%^5X`ui#JG6#hYBbCEixWUo`PoZoEUP zBHrcVJ)ZwQ_x+8FzjN^c7awx*5wGzNu6@kKKbhEHF7yOl+t~>x_$; ze%hP8{tYC%tO}lBn=PZ-xzW=WZi_+$?M{-+v(728n_*JI052B@aGOCzPl$w(WRQOV z=PP=uEzJJp>1{GHw0nYl4AUM(JB_I%?{Ov>qM(X@Y2p*{sV4p{KGVd1#OIp$LVT%; zuQc(s_(l`|72lAfh{nQp)~d;V3Ons__h7KoPz++?w@lrk_6?p;t3Alnpg7NNM13^+ z9gk+&DSn{AAfKB$zh|!eAb!-uLGgc+Dh_GlF!d;)kUg-+_U>&*JXsN%qA-L-+=MWk z5(j%A1r!OJl16G~-{1_AA(HIZ-BbA3*J(<+q9V*Ra#p*)IhmuxP?8EWOd>J1$HGM- z>@51DC{|OfY+SF^lng%4pB0;?WHMHol0^|;zg(@R48WzDG7!Gilx%i0!^?j-vS&P; z_S(9d+M4=ugR~S&+9}ltYRVwqBS#rbp+#NT=cBn(DA8F;QIg#-%%uXCNS>{v+=zGL>GAV1yFz-P&Eu0f8m&FBa#EW;L_{{0pQ0&4@hpmF z65(~9Kitx4kB6g!7x_ayd&hqguSmRE#ABL6gl^L9e&S7lxI=cT((ZEl>>-llI1i?1 zxCqNMWtcKtRq`}tgfdc7M)5Hwa#m#b`*cH5T+R}EQ%Ad#WQ|aZ9gE#2;T8ZA3cQ^qR=8hUW8rcA&yHD#hQNmB~3Ra1%-hpK-RYf6bSnL@#+ zMYab+{`PhjC}j!@R4L;(70bvrmT`c``$q$9yP4*U?lYh#L#+@-)0AV$pY|ijV~xfT8JcpuGE-AdAQPy}f)5cI>f+YU07( zVUe;}!+9K&oy*0g?7i~K0|AoS4XuP6W8!feN*5JMO{tVlwReAioMc?1DZ%7k?mi5n zMMJB)*u~YjBVQ(xp7n9LMJGAJbr$K|5$_WzSU=iJo5ZvB=SGnPx*u1Hq|N=iY)GU^ z&rF_dNMTj?_(Y}*R=%?0mmo4wg+&Q-WG6}VuRAoLLO(^UEnlhnD z5RoX^tUjmD&*6Wb%#N4vz19+$tNA3kjN5ifH=@`b`CdNDOo%-$>TO1tmYA1z=Zz6< z)>M}z_R=C#jt&ALhju0Bxl|8@I%1ckgW~5U*A$Ycw9&*^BR7fYW;bm=nEE_kme*S2 z4#3aLjp_4siFrswlrPlBF@_j&MFU0HlFvWj~ee_m?Q1ORJw9fA{^ZfsQ z_s-Ig*V9iB0?X-Z@SCre%gtA%{KD=R#oZsEvb&2WU!k!9ly?F>6s0Q3u=zI_m(eVv zENPyW=*A;^Y@GO@#c0Ogcqq5&F+1r6=!$+4{r~o&(r*T&1w%AHF^uc$VoBaNduaOn zqc}yX>!N?66*gswah*c+yTYS9biW^D`-Q;&MM?Vm zu9lj9#ueX!=##Nj=%xMSO24IJaFBu-ci5}X4^?h3yu+c~1J`{Q(jGq`T{k|oBw zg?tzt*@vd`uMeV?u+NxZ)yvyZ@2b?RN=7xfHr#(iYGdkTWe=r{j`9_{aSMQOT=$ow z_^jTyTZK^29~Z_iN(@D&E#2A9fhga&r|{oBy5g_f@q?rswubyh7bQxCJty*$f?ID2 zxA1+mL}k90uo>dy*Q4c>VNpI52)BnkO#mLqi(Di6zfPAWxGF;*HZ!q5Os+}9< z66RY}QkU@{)ooULylZ*F+tg5L>GftJlI~6%5G}55qlx>a7%+BC3DKS$UQ`lKBq3Cp zN7PWMZC8=`w$fVu&THQc8n`G7A}m^&DKC&}BY}%DZSI zj%es;m+wWXSezpL=jpQ(uN#jvnP{+lX-(b2^1AYcYwF6EEibQcNcvGrKXw})Ut#h5 z`o)P0ag1AUzV2qqx^bUloUh)vz~SFc(46^fo{9@s9mQKITc4`3_)m|zlPSsT#3p~v z?w&iOo@U@!C4UM;ik$5>Ji~IId9%RC_7hk6(A@9YtJu;FG}J=+oq9@uiBYDxV@FW! z@p}2k4M}D#Dm{JJt(-(Hj~W_B(i{5`o@7nMHxeX%rn3Ykb|>^5_nEk*mi0kK=%4Vc zYa~_`o&fu{K(~#;xdQ@NI zhAPE#)BM7e>m@$I$1&&NW2r&ja^umvs<85CBbL6N$%pqgMr7u@8uN)bD^`Cue$`@6 zeTYP&*qmI=}PtuV6@aauY9!YUAr?2je6%w;!GIwcfy6=JKY7cNhdVMM`Gp zDRDFIJfhQP_jNH6Uu%HO0}^TxM+JlX)g-@iZLwb@10M1?S)|+|(P=HGZ~O()X=P_upP-wEDen6EruKX(z`p*b_`p zWr~cNWV%==e{NNrsLMxmpO&DEjf)FcSN57;$z&=KD8myhmy{&PkG8OI0W$Nw4zz*M-{=UP`2|xq$JAyV&V-lhPI#GiUe7{3Jjb5B*Pr#+H4<7WEu0 zb9%k?o{&CURhE;P>eqjHqPJkZ&Vys%9e5WI-h?LmK-Bfo=j2z~QuBo~KL zISfF#3o^h)lizpbSoT7i!x4e>eV}%Ma9Fy)>cB3@;KIg5reg?bU7$FWE*RhtT`-V~ zY{vl@)VLRNx?nI>hcxbk+`TZg3x>r9hC3X4V0Z-bx?n`ScO>_Yl)ad3Y3gGr2Y zbXwt7!krFK)G3j2H1ZZ>d3Z0-4n>ZAP|^jHJ0WLQ2K9=Z(!7lQFjWB>IHn7x#Rra! z4#d`;-UY|enll<5C6kR6kMDw+RGS%r6C9KG!z=_Q;vRqcGkRw`^3> zXm}2-Ft?Gx>92_X=9mcPGss>zsSD=Ol=+R0y|ADQ%JS0X-V4R;H2VOQ6XhzHKYJka z04!=GD(!{E8PQprBT%`U1&%~Yg()}`N2494fP%wGAYOoJRQ>|e;UpLY^I<3~hLLbG z*r6UKKm&i2z)Dh-GhhZdVKy{F1$d~}3u~Ya)`Abh;D_^}9WIA6;d;0Vw!zhKD_jGe za4p1u2lrqp+>dkM z0jz-saRuzcGhjD*;n#Q`L~tkU!w2ADd>9_VXW@TQd<|a2ztZXa^PtWYZK$3mPy zDs07xwB#DdJPc1mhKiF^EL5>bMTd&TDwe1?S;Z-|S2^Ynu2ivffGoa+MKt#?ZPN#g zkVAh{egqc`;x|`AYl#7Z5rvUhO)MWAfhF{rTpWRu&30AEE~)a&-=T~@yhb3e6BXWo z9C#D*;B84OySa=>7phIeV~H*T@^CuU1Z{X6&M>z5J& z8Ig=yC*Uj-m&*x~*BoDLYT~E})G|5|Sa#o1iB8>QiH>rgL}xGz>4whd)bj=8lHDE) zUrTfx)SnBQM28PLK8DVCoQ)^Sb;grm9wgG5h&339&Bc>U#Hc0brLhLbxsWb9f0BRO zXvPF{apV_P6L_f!Jlrss%+?Y6p`J2V*{<3hTTdQ=9EOSlvdIAqBi)X#Jv_Gd0xUDv zo=X&F8mBu(lF^Q@WRudb5k6URg`vi**wNE*Asv{#Q#n?oIAr#H$%iEGlIoC)Vu;*D zwB;?98FrozDGopb*|6m~D+ha7s=i)yX@Y5`k6wVYL9pd*Dd1gWOC6PTdL` zO&qfyPLtFbZBoZz@EFohARSjRA4*BTr{h?dN7`LU`do_>63)3ScFtwEn9nI0n+EtJ zR8pfdC2LHqY4g*QHcwPK#teH%#nUazW0e7H84iC|`VYjL z1Z>?3mfiH77lAc%3~zJBT;uDEK+_D1^pP%Ey7lAJVqQ$&f>*{G&D&wnsCa89oDyra z(9r03Yo~NnMx%8*DT}5s__mwES4(NXT|}dalK&s0ox%_CbKUtV7de zZ9fDR*iEK9^bmyafGnf7{!UOWonTRBsJZGE$&Z-IY#=qESsPhpI*fn%Ca#}l)Xz@T zAd(CV^_{~a!G^Oe0_R5Hya=4%3EL7Ez2N8;Ew)79!Yy!o>|6^;O>GpcU?-HtnRd}m z$fA(yVu~R|#6;v&+l#iUD>P=HI|SW!$$Z9S7A1;#u7XgD{u`dP!ran8(YwW=i*xY z6|Tbv(Th)F8$L_@FQ6Y^#1OuQVf+Z!<0rU5jKdC5jGM$fJX>tQbHzn?zPJW25I5q* z;!eCo?83{$Uc5@Yf!9iSY-621q?A{K})!ulZD zj$>)9I?5f=@FVyN>nVFsrBNz{TUV&BUe2ES9gEGHN|`28Vd8f;M(HRUGU397G6i38_lBft0)T%85vf>(tmMm;p;6s zOqq_r4ZC72cF1&u^bl`>v3M&?qBgyIR{VNg ziKh^Wt#Bna;wmEXL}lWjXPUf*iae!y6IxIUEic7C*fcZ;d*o2y7R(z|_ReZZS67&RgwB=1GzRi!Ih5&v0vW z(nte&5}JRVTVO(hhTje|Ojnbr;Nv9pZBgh^(Je&I?FlQ!c7u=P*d5U^k#lG2V0nc^1W( zd;hGoytK((@IYRgV{!x@?1Ei+X%W~>^@q5N4BUUOyI_y(qaE_n_P`!x8mU4FcXhEr zr9~s1hcpB8y(8sr5!l!H)AtgG{rlnJL}T_8OeIO*OWDdk$iV{?aX&)w$>S8yJOR!4 z47A~MumPWkbMZyE1Ye@8=w-@)UZKqA5AY2B30|Sh=QVsCKEO9n;9C^Ey-k_jUnq-t zhcbVY_b8J88_vNGa50&$Gw>f|=srdtnXxc_ikt8=yad0%Yw#<)3BSRe_$?W~@9+SA zPX_P@GJHSct9TIK#h+-_A^cX5k_i5nCUQi&$Q4#$7a39m=Td~Y6V5;<u!PueT+C{WGpz>lk64ZU zL@iksvPJN*7(NtA#?Ooi!U8q5^OktsMHP8TOYfW8|=HJl@A z;0Cb_ZV~lxpJ;#wsJ%xt!sB8!JS9$pr^V^;idX|538&=7sg#$V4nxQRFQwWI6fhgL zg=D$C*hYMq1lve<{ba)(a3i+knZ(zpVL~iX`#8qQk1-%KSgr-hbsCA<#gKn-7$~`y zmOO-@SRs@Cr#c(>ShpqCO)jCtOw2 z@inQp^dO8k(!`C?sGTG!U1Hv7im!~LDTjS|3oK5w-oJ}RM4SzcO7;(9Esxk5l~HYd zcOX~a|Nm>aw(OCSm609E%m|e&WXq~#l$j)XMIwZlbxIucBF?bp@ zb`}y3G|8uZgC4fg9cSPm8Vwd`4r%e+W{GdIEg|R^CUwrO6+m>b6ALFklHU(#V6KRc zb(-tgvwYH_rc>4|M6Nc_B<(V6QPw%uQhXDa(|Kt_W2wcBN31m6ems>Mg&DWKO+F*X zsb*<)z9}NX{MyY+H>`c1LVe!nolZmq zeo?+G;43l5rX3MP>Bt+(;j+|9CfVN;teTqG>u6he8yS-NWnN~rf6=$Ed96)?ztE#4 zBRMchKBV$#&s2YkfeAT#xysU)mInbseI}-=JAjDvN&6yPZw7&1qhF(%b)|d1rrD zR~OCxjcb;BC~|*?YTKaeVHcinJvLo85j>Vm$$8vsPVm7lL7?qHwejjzxf>Fn*xEXI zpH%sNQI6>3W1}s8n2upp_L3NjRmmn-wG^{|EF^QI($0z|>uniE+{7x)!GMvM8zSm( z3+XT4cocoFfFk^H)6hzZFDhO9j;{%MNxnODz}DtTZdLD$5u24z?s*kP&OZBM{S#Ff zd$rk025voW;R;d>Rl3*Fpg3yQWjNBfr`-qfh54c~^m6p0o=3IegOYW#g`mlL~u@HPM1qx6$&9Z?aQIe-fbSk zaWa_vHQg}2J#pCQx8e~`FOr^S>5Yzg-pFq=#K~bCx2jsrF?F7Hh?8m}Ln2Ey`BhHV zN}WSnm_1bysZ6`WaLxAK>h9vq&mT*#5R46$jCDnE&mT57^O5SGsdQ@bu?odAQ{V`> z(X+A0Lpow46pAU_{A5R8&^{Of=F7fI7G4dQzvB5w&@;TEuysSSzE$60{Syg^Lt8O) zmek?p?5*12rw;Q{wH`pezWe-))yA6L4${Gku3cdN$+w@;qWivUKXse?&(vnUTcY<$ zc?SsDuBXU#a^H+AZFytSzGa%FOHttS`a=&i!^=>RZL#MK7g0nA})PzFmR<3dKcJ4_rsP-sbE*9zGR1F@wq;Jfd*kPzN zvCdn-a&sXM<8#B>Z8T?8#&~kX!2g}p^=>ti&Ql8dK||vt{(KXgq`Xf!J-7nei*#7x z#xL?4$LB^^`^JggP;nhn{&2x&$dP~AAO3uOkPUajwk_NZbw`OuRwjzlP2RGlCv1N3 z+iL1MgZTNz=Zb3zyM@8JE+^ZG<9rmZjv5y_2S3*zqsCDAD&EMDAByB^-OsivlK-5w zXgG5E6s0iaY@wVuGw*-Jl5i{B@_1aB1+9+6%*)Snv*?sL|ckT+cVws=p z#~qQ(JNu87F;kXfq3ilgnC5oEL?az@SI;I(e@EkXC(q06Gfo%VQJK_VC$mHZbi!Mu zWn7e_Bjz7$uRSt6Z5-QAsAJ%gXP%~OF7clKQ<1#Rw26+S?nXkj87^~bJCFD-*-$&l z@ZHIKkQBWv@|(EEgFRE7C9l!;v}Vc!p7vuWPb9mvKEN18=9~D*mzqS?A^^t&$AJNXGjsH8pcrf^nJYCym{?&q`FvUoFHQ#9XLM z8?biq-HVFf_S<{#u2wcar?WFAHX}aAtSd&6rT3OrCDE{Zw3~~T4McnrB%e$pda_Qo zAg}HfIQp96ET7!`1Im@StW?z}g2@Y%IUD%FH3N$CrI>UsWxl;jKX2Q!afVX%b3L&M zTz@4e_7#DrAg)r{#4rASow0Y{So$8`u4x%hwoT|T@!XVJyq(e975;W13R~sJMwWRC z^SM4Go9mYn9P@b8@=LrOCv4w6_iGYlp(NBCw24?$f1kXSlQ^aN!9dQq#F~J?&abSK zcm8HZdm1IiI=zd@+aNnkpR2@za zw+VIDi@@Q>IxVNz^q_bzbsw|CIHC4`iIz_gu7Yzd-Tbb0@}@KWCt(mC=A z!8ML0#(ZY^_ql%iKSyuIMmp;5yt_p<&|9Ggy|$+t5Pa92vcC6TaBEJU;_a#>@43K= z;uQr~&a71y54{HgJSX8BU3+CgPaRL6S-h*}y+M}mpVsi;#r-jZ)B?K5h0 zt{peNUu26}k>Bh(Q~Xgub%%E%pS9$N>`jaAt9eG%f@Ng^bY*;&d$v|}l2&oKZHeq+ zc$-;Ia30<5ZkT@V!5t#CyK0%`p~-QTW6A6Vk=ETvXR*F{j?M+fr&`-Jz6{}0*E3c% zi|qo@3O}FcPwe^(bCqYSx;syiz`dh3d6Uge|Xx*tk8TDdD8YN;BEV^Xztob zz*iEsU0l&thS%lO5x%5&=2x2FpLDxMI##QQs~>k!j!le;Aq(FKJ^%6K^KOz-=@QBH zwKF}NVYOFK2eR1nJD%^7fEQ9Y6#l+aI2FE95X(ihTH@J?EFb7I9tm91n7riJ+X%1X zUqNyp1iypUc|x3`ZkbnWtI;j;WVcF*NR4rhQL7Wr^vRHRZ8uvDfhWF-5y}sV9_pPj zdsT?^N#`>x4v&$@6O2+!t{MDMy(jA4(RZintaFTnTYP-c#?7z8=F*b)8#%v^8|9BO zSn%tY^a~6H#_7(>hbddEcZ(J}_hwd?)b>}Z#B}3e<|Dhyiq&#;IVS_ClJ*~A9&`0< zWUMf49UHqCgMYm^SvyC_t2g~U!ND8N-OsX31_bPF&E!&<5Z<@6N8yqib7isexh59ZJKmDp&78>?QI%&9g;?OvsOJYS?8ecp&Log-RK zMS$pI<(F6XOtz!TOfvI=0=Qv8soFS_K0Q@>L{)ie`3sG6S<0(S^*_%@SWBDPDsuAT zUz5?p;9O6M#}nt}R)}gUsdD6HrQ!|NSZDB(knu2EzqaeO`N`f>u`$&u)6%=e>2u;z zr1;0Nmv>U>I8B%RkC&^{zbrK5#l7&7)VxcZ+oFS*mx7(KhSF|gbWFPCbVuy681r;J z!_UCFmkp)XhSa*AWXlCM6T%jAx&qX9Bgv)W@h}D*t+5;rBb-@feeayrB~!nN%nr9oNvOHPFG8N?A0aQ zrgGbzm9glFpsy*r4o+#o)wvUHvy^vr*?E>-OgFTTCw~b#^_3xsQFRQY% zQFy9}iQ8_T>dT?sbrB7zs=Xnt{y_DcbViOI>j{^S-80Wj1)9FRP1J4ncYXSFMrYt5 zX+UYjm1k<>Fvr&Md}m$JQ_VQ`h6Zdbcd~n`Et2#Ql%?Zlx$rODSqYiTD$H>B-NkaE`rH z@eVmP@Wk|yNdHijiq3JH7Rvn--ttA`Z>;b2_FYID{Mq}?wzOPhTWzuJb}FM>>B?pJ z5d5kh%t|iLB7!ZtmKs;9tTneX-tKe!e>+oxl3f-k`(sagJp?x(W(s_ah!MRceDCk8RmMZ)m3e^Y=bV(CnAuCd8Xp?GTlO4`a}}Wx5h%1JjvIjk#kp* zLoVlMgy&Tz`JzU{2`_$AiyIiT4}9EF^N~Dh(c{gxn|0f#WWH$|w;$`19KiQ3-n`ow z;+;!#3gbj2KE_owYgUJN#T?BLEbV60z$QoFbWV~5;>`#%dL}~T-fZ2XtgtftAlFto zBK|6#ySMes>37L|w68mGgT>bv6l=Lp@!^n_S=~NGH%e;W5LqwQmNmaCAlus1on38T3MY$l5NJf{$^LNm!bT;M=Xk~Q?6$raEeeR18_lFiBnhQ&kzr<}6z+Ym z2;R>>=n{DLO0{hH*1y14I3LY#0_kBpOx{{4Gjr8~XL;Nz8x^=WTYkF_os zJ1$t&uj>c*R(@@;nlij!$aQnE?e+Z{i_JE1Ox3XEx`BK}X>DJ2vK`=P)H-l*W%b`p>|H+iRM11FZFIB9q;VahU*@x#^O&# zHDY3`saD2Hd%iK!O;z1tr1)$@pR|1Lvt8Y`X+sUUGOcw@(1MHIf;yx6Wg<((^e_z{ z-$~Wt)RfqV3$ay%R%f!d*GlbOwDK2r1|8>d>+8^HA(pp~kd*-=dk402H}`11a_^Rv zTVL85$d~(>C%gJ8IT4rA{O*HDAI6l_XUgGLVQv*S+Dpgo1hMEJ<7oY!HF$IKMb=H; zhr_!}SAOX6)RtxIx{IKPr}Hpb3^WTfiX46u_Opcvgb9Iu<7*PV9{6Uoo_umz>zo zzonD3NJLAyi_ua=qNvc=PpS}zQ|V_xVk9JvhX1sxVk{D(L*nDdpVg2w90#HCJ)K>Roj>Hwq(%;O*&M%L1#9B~MN$Rk1^_z-{prF-LWhZl1T0HbJ#2j#~f zUaSPaHy&HAIV^`)3Q&RSHi-Dp4Zx3q=uw(du!EK#wr8{dn7JPr~GpS?l|29jU_HXMM7h5d|Q`eTAWAtwPEsSsKC6IC+e z-{GZum#APRw~z;bEDn+hXI4K_f$=!Fev3M`mGBM?N)VC;xBu(~gbO6%Vauq-p=DB& z5>)5^wnSqs9h!%h9xZCDg&2H`hfbiXwP2DHNF~7W?qkcRL39Eniz?BD%U6IvB6J#c z&Hz{>LVlqvlEu%amzwIjkBka{|va*m+3< zKtf0sFrEfiSUm#aB>m(-EFF?Tv2`9=4~gt_SWeLQo8Sfl8E}>6H@^uo5SRf+-nx9` za54ijMwPGp0mlJ*JVXPYWJ2_4CLCn=yUTRp4R7&4OD1#%9YXw=oj!LN0Nf2Vu%b3Wx+S!l<`QT$Amlvsw-hyf(`lK?zUn*5}2?diGXP~>`6fA zh)K+b&ZBBXkHG3#BtcXTZ2k6^US1mxzxcce@P%P;^a7d9^+0v(jG;Sp(M z1V>VcwQL%LiCjn$c>>V9fD};LCcyXwbOkkQfxR+=!57e3l$;G9$b(%v+5qJ|NF6Qa zfdq{Ak^I0u56~IP5}A!4?_%sOQ18TpId(zB2du;52NoTa2C-& z|Ij!rANs4yaH@tbhYVGogq<;!D`i7RwQ{_7W0DrE_5c z15hl7ovuqBfi)=EwFYLI{>w0B!NC+^ z>4z`=Bm7YVDWS9q|1grM_?LeGyr$GbV(6f96u4ZEq6bf-;OJQD;L+by4&>?}WAx?9 zLlXn2s)I)pP2C~l11$A$JGO&SuOLn!`4+x8qeK66Kpxg41p4aX{HurIvL#A-6uz7W zk*^>TRK^5cJ_Ycnevbr-2KfGMPam>IvnV2PY2f#g*s=7F=lDff#0mD7Pz<2I0gl4= z<8Oiz1UJK>94=ETjqt2`8wU-Lui)Xi)(8;+&6C_+B)su^NH4+ftFQ`mwi9~wCFqq)Ht zJj*bCeMFcmje|f`z}pP2f4W=bG|+5;L=Q&=lQhR8)AR7=qF5Y(;P^*YCVJ?O1(1rN zaY1(roVtWM*lvN;QBQQig;sdJY}P{qQUf#_pl^kUSxG|9YRtNBDhZ$vh+Q-S!TOK8 zK|?e+?Te-cNv3Grs5Xf5P|t;axUq;tAVU8iy^P6UJqgHZ|J49eC!}T>PU{*00&(`A z2CT0Bt$+&>+aT`4792vK5>(S65bB}`1oJ-?Qmy`0fIw>tM8mW!Z537xhqDi-!2XXo z#`93j1cnOW(6KK8wG?@fk4-ZVj^tl$gx4=^YWpwk;R{3mzkd6D4z(x2E;hq|UKo1* ze{bQs@1d3v-1dWeM7aa*5&2|L+zC;EfDVY51zY>ik;noF1m`~)IQ^1#cEBs1ZTV3> zrcOu>CDe@t$ANn%yoJ#i!U9bc)!31OrVBd3g8j>X?BN^MaK5{^2n5?do_`Pk`EED} z_#6N-U8`(PoCh2i09gCT4cN#kGj`ydHa1m*}hVZq%; zSa1rw>4T?sdA}pDAAm!7G<{#|ho_(J04!~Ya*hVGui+JSqaSve{tKwZ!v`xY55lR= zCc)FM!2n!gBlbubH~?=uk0&01$pLuDxt??c1P9?BG)z7MUW4#*e=g++ycvW$nl=p! zIKjCgxFy41Aan@cRZ8U?Syn**HQukhv8_{I{qUd>cJra zv%|34?4CdL32YS}6#eWGllmHND0UMIoKZ#JuvZb_{|25Un+YNC?lnAb&b)!Azg~(% zL<5B0!W&aU%D;#Zti6RG@boPtht}o(A6^zEa1IEKz=QkhIp8<~X`zReAh00^&z@e& zaO6B`zi0UE5qL5kRfRyK97GAcG@)O6+6$vFk5T`{yNyChXb0V2h}r;F&5ptow)&M{ z6w4SSfv(c~g&f8p1@uMJUueY~ZgzGImTO=CEgy%@p;_#HA(wG@9W-$Kg&M}8i^apK~J!T)VU{2wi`{T2WK diff --git a/config/system.config b/config/system.config index cbc1a355..ef0231b9 100644 --- a/config/system.config +++ b/config/system.config @@ -125,34 +125,34 @@ system.controlflow.controlflow = true #Maximum number of total pending requests that each replica can hold. Set to -1 to disable. system.controlflow.maxpendingreqs = 500000 -#Preferred number of total pending requests. Once each replica hold up to this many requests, -#it accepts requests again from clients. It must be lower than system.totalordermulticast.maxpendingreqs +#Preferred number of total pending requests. It must be lower than system.totalordermulticast.maxpendingreqs system.controlflow.preferredpendingreqs = 250000 #Maximum number of total pending decisions that each replica can hold. Set to -1 to disable. system.controlflow.maxpendingdecs = 200 -#Preferred number of total pending decisions. Once each replica hold up to this many decisions, -#it accepts requests again from clients. It must be lower than system.totalordermulticast.maxpendingdecs +#Preferred number of total pending decisions. It must be lower than system.totalordermulticast.maxpendingdecs system.controlflow.preferredpendingdecs = 100 #Maximum number of total pending replies that each replica can hold. Set to -1 to disable. system.controlflow.maxpendingreps = 2000 -#Preferred number of total pending replies. Once each replica hold up to this many replies, -#it accepts requests again from clients. It must be lower than system.totalordermulticast.maxpendingreps +#Preferred number of total pending replies. It must be lower than system.totalordermulticast.maxpendingreps system.controlflow.preferredpendingreps = 1000 #Maximum used memory that each replica should reach, in bytes. Set to -1 to disable. system.controlflow.maxusedmemory = 524288000 -#Preferred used memory, in bytes. Once each replica decreses its memory to this amount, -#it accepts requests again from clients. It must be lower than system.totalordermulticast.maxusedmemory +#Preferred used memory, in bytes. It must be lower than system.totalordermulticast.maxusedmemory system.controlflow.preferredusedmemory = 393216000 #Timeout for the client-side retrying mechanism, in miliseconds system.controlflow.timeout = 1000 +#Maximum number of new requests a leader is allowed to send to a replica while that replica is not accepting new +#requests from clients. If this limit i exceeded, the replica will suspect the leader and try to trigger a leader change +system.controlflow.maxreqsfromleader = 10000 + ############################################ ###### State Transfer Configurations ####### ############################################ diff --git a/src/bftsmart/clientsmanagement/ClientsManager.java b/src/bftsmart/clientsmanagement/ClientsManager.java index 9cf37458..62d5c0d6 100644 --- a/src/bftsmart/clientsmanagement/ClientsManager.java +++ b/src/bftsmart/clientsmanagement/ClientsManager.java @@ -29,7 +29,6 @@ import bftsmart.tom.core.messages.TOMMessage; import bftsmart.tom.core.messages.TOMMessageType; import bftsmart.tom.leaderchange.RequestsTimer; import bftsmart.tom.server.RequestVerifier; -import bftsmart.tom.util.TOMUtil; import java.nio.ByteBuffer; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; @@ -254,13 +253,38 @@ public class ClientsManager { } /** - * Verifies if some reqId is pending. + * + * @param req if some request is pending + * @return true if the request is pending + */ + public boolean isPending(TOMMessage req) { + + return isPending(req.getSender(), req.getOperationId()); + + } + + /** + * Verifies if some request is pending. * - * @param reqId the request identifier + * @param sender the request sender + * @param operationID the request identifier * @return true if the request is pending */ - public boolean isPending(int reqId) { - return getPending(reqId) != null; + public boolean isPending(int sender, int operationID) { + + ClientData clientData = getClientData(sender); + + + try { + + clientData.clientLock.lock(); + + return clientData.getPendingRequests().getByOperationID(operationID) != null; + + } + finally { + clientData.clientLock.unlock(); + } } /** @@ -288,15 +312,13 @@ public class ClientsManager { * * @param request the received request * @param fromClient the message was received from client or not? - * @param storeMessage the message should be stored or not? (read-only requests are not stored) - * @param cs server com. system to be able to send replies to already processed requests * * @return true if the request is ok and is added to the pending messages * for this client, false if there is some problem and the message was not * accounted */ public boolean requestReceived(TOMMessage request, boolean fromClient) { - + long receptionTime = System.nanoTime(); long receptionTimestamp = System.currentTimeMillis(); diff --git a/src/bftsmart/clientsmanagement/RequestList.java b/src/bftsmart/clientsmanagement/RequestList.java index 34b1545f..dee37e91 100644 --- a/src/bftsmart/clientsmanagement/RequestList.java +++ b/src/bftsmart/clientsmanagement/RequestList.java @@ -110,6 +110,17 @@ public class RequestList extends LinkedList { } return null; } + + public TOMMessage getByOperationID(int operationID){ + for(ListIterator li = listIterator(); li.hasNext(); ) { + TOMMessage msg = li.next(); + if(msg.getOperationId() == operationID) { + return msg; + } + } + return null; + } + public boolean contains(int id){ for(ListIterator li = listIterator(); li.hasNext(); ) { TOMMessage msg = li.next(); diff --git a/src/bftsmart/reconfiguration/util/TOMConfiguration.java b/src/bftsmart/reconfiguration/util/TOMConfiguration.java index a7cfb9e5..07d75e3b 100644 --- a/src/bftsmart/reconfiguration/util/TOMConfiguration.java +++ b/src/bftsmart/reconfiguration/util/TOMConfiguration.java @@ -32,6 +32,7 @@ public class TOMConfiguration extends Configuration { protected int requestTimeout; protected int batchTimeout; protected int controlFlowTimeout; + protected int maxReqsFromLeader; protected int invokeTimeout; protected int nettyClientTimeout; protected int nettyReplicaTimeout; @@ -278,6 +279,16 @@ public class TOMConfiguration extends Configuration { } } + s = (String) configs.remove("system.controlflow.maxreqsfromleader"); + if (s == null) { + maxReqsFromLeader = 10000; + } else { + maxReqsFromLeader = Integer.parseInt(s); + if (maxReqsFromLeader <= 0) { + maxReqsFromLeader = 10000; + } + } + s = (String) configs.remove("system.totalordermulticast.replayVerificationTime"); if (s == null) { replyVerificationTime = 0; @@ -568,6 +579,11 @@ public class TOMConfiguration extends Configuration { return shutdownHookEnabled; } + public int getMaxNewReqsFromLeader() { + return maxReqsFromLeader; + + } + public boolean isStateTransferEnabled() { return stateTransferEnabled; } diff --git a/src/bftsmart/tom/AsynchServiceProxy.java b/src/bftsmart/tom/AsynchServiceProxy.java index 5f00bfd2..ece9451c 100644 --- a/src/bftsmart/tom/AsynchServiceProxy.java +++ b/src/bftsmart/tom/AsynchServiceProxy.java @@ -335,6 +335,7 @@ public class AsynchServiceProxy extends ServiceProxy { logger.debug("Client {} also received ACK from leader, client "+ "can stop re-transmiting request #{}", getProcessId(), requestContext.getOperationId()); + this.leader = leader; Arrays.fill(acks, null); requestsAcked.add(ackId); ackId = -1; @@ -469,6 +470,8 @@ public class AsynchServiceProxy extends ServiceProxy { sm.setAckSeq(ackSeq); + //int[] targets = (leader != -1 ? new int[]{leader} : getViewManager().getCurrentViewProcesses()); + TOMulticast(sm); //Control flow diff --git a/src/bftsmart/tom/ServiceProxy.java b/src/bftsmart/tom/ServiceProxy.java index abf64c53..f012b630 100644 --- a/src/bftsmart/tom/ServiceProxy.java +++ b/src/bftsmart/tom/ServiceProxy.java @@ -54,6 +54,7 @@ public class ServiceProxy extends TOMSender { private int operationId = -1; // request id protected int ackId = -1; // for the control flow mechanism protected int ackSeq = -1; // for the control flow mechanism + protected int leader = -1; private TOMMessageType requestType; private int replyQuorum = 0; // size of the reply quorum private TOMMessage replies[] = null; // Replies from replicas are stored here @@ -249,6 +250,8 @@ public class ServiceProxy extends TOMSender { //logger.info("Sending invoke at client {} for request #{}", getViewManager().getStaticConf().getProcessId(), reqId); + //int[] targets = (leader != -1 ? new int[]{leader} : getViewManager().getCurrentViewProcesses()); + TOMulticast(sm); logger.debug("Sending request (" + reqType + ") with reqId=" + reqId); @@ -453,6 +456,7 @@ public class ServiceProxy extends TOMSender { logger.debug("Client {} also received ACK from leader, client "+ "can stop re-transmiting request #{}", getProcessId(), operationId); + this.leader = leader; Arrays.fill(acks, null); ackId = -1; this.controlFlow.release(); diff --git a/src/bftsmart/tom/ServiceReplica.java b/src/bftsmart/tom/ServiceReplica.java index c9cd782d..edcf5189 100644 --- a/src/bftsmart/tom/ServiceReplica.java +++ b/src/bftsmart/tom/ServiceReplica.java @@ -284,6 +284,8 @@ public class ServiceReplica { for (TOMMessage[] requestsFromConsensus : requests) { + if (requestsFromConsensus.length == 0) continue; + TOMMessage firstRequest = requestsFromConsensus[0]; int requestCount = 0; noop = true; diff --git a/src/bftsmart/tom/core/DeliveryThread.java b/src/bftsmart/tom/core/DeliveryThread.java index f1f66c92..bb5bc97f 100644 --- a/src/bftsmart/tom/core/DeliveryThread.java +++ b/src/bftsmart/tom/core/DeliveryThread.java @@ -238,7 +238,7 @@ public final class DeliveryThread extends Thread { cDecs[count] = cDec; // cons.firstMessageProposed contains the performance counters - if (requests[count][0].equals(d.firstMessageProposed)) { + if (requests[count].length > 0 && requests[count][0].equals(d.firstMessageProposed)) { long time = requests[count][0].timestamp; long seed = requests[count][0].seed; int numOfNonces = requests[count][0].numOfNonces; diff --git a/src/bftsmart/tom/core/TOMLayer.java b/src/bftsmart/tom/core/TOMLayer.java index c81db805..196c9f28 100644 --- a/src/bftsmart/tom/core/TOMLayer.java +++ b/src/bftsmart/tom/core/TOMLayer.java @@ -44,6 +44,7 @@ import bftsmart.tom.server.RequestVerifier; import bftsmart.tom.util.BatchBuilder; import bftsmart.tom.util.BatchReader; import bftsmart.tom.util.TOMUtil; +import java.util.LinkedList; import java.util.Timer; import java.util.TimerTask; import org.slf4j.Logger; @@ -81,11 +82,12 @@ public final class TOMLayer extends Thread implements RequestReceiver { //timeout for batch private Timer batchTimer = null; - private long lastRequest = -1; - + private long lastRequest = -1; + //used for control flow private boolean ignore = false; - + private int reqsFromLeader = 0; + /** * Store requests received but still not ordered */ @@ -341,6 +343,7 @@ public final class TOMLayer extends Thread implements RequestReceiver { usedMemory > this.controller.getStaticConf().getPreferredUsedMemory()) Runtime.getRuntime().gc(); // force garbage collection ignore = true; + reqsFromLeader = 0; } else if ((this.controller.getStaticConf().getMaxPendigReqs() < 0 || pendingReqs <= this.controller.getStaticConf().getPreferredPendigReqs()) && (this.controller.getStaticConf().getMaxPendigDecs() < 0 || pendingDecs <= this.controller.getStaticConf().getPreferredPendigDecs()) && @@ -349,6 +352,7 @@ public final class TOMLayer extends Thread implements RequestReceiver { { ignore = false; + reqsFromLeader = 0; } if (ignore) { @@ -531,6 +535,14 @@ public final class TOMLayer extends Thread implements RequestReceiver { dec.setRegency(syncher.getLCManager().getLastReg()); dec.setLeader(execManager.getCurrentLeader()); + // deal with the corner case of a malicious leader trying to overload the system + if (reqsFromLeader > this.controller.getStaticConf().getMaxNewReqsFromLeader() && !isChangingLeader()) { //force a leader change if the proposal is garbage + + reqsFromLeader = 0; + getSynchronizer().triggerTimeout(new LinkedList<>()); + + } + this.dt.delivery(dec); // Sends the decision to the delivery thread } @@ -560,7 +572,54 @@ public final class TOMLayer extends Thread implements RequestReceiver { requests = batchReader.deserialiseRequests(this.controller); if (addToClientManager) { + + //Control flow mechanism + int pendingReqs = clientsManager.countPendingRequests(); + int pendingDecs = dt.getPendingDecisions(); + int pendingReps = dt.getReplyManager().getPendingReplies(); + long usedMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + + if (ignore) { + + // deal with the corner case of a malicious leader trying to overload the system + if ((this.controller.getStaticConf().getMaxPendigReqs() > 0 && pendingReqs > this.controller.getStaticConf().getPreferredPendigReqs()) || + (this.controller.getStaticConf().getMaxPendigDecs() > 0 && pendingDecs > this.controller.getStaticConf().getPreferredPendigDecs()) || + (this.controller.getStaticConf().getMaxPendigReps() > 0 && pendingReps > this.controller.getStaticConf().getPreferredPendigReps()) || + (this.controller.getStaticConf().getMaxUsedMemory() > 0 && usedMemory > this.controller.getStaticConf().getPreferredUsedMemory())) { + + for (TOMMessage request : requests) { + + if (!clientsManager.isPending(request)) reqsFromLeader++; + + } + + // check if it is time to resume accepting new requests + } else if ((this.controller.getStaticConf().getMaxPendigReqs() < 0 || pendingReqs <= this.controller.getStaticConf().getPreferredPendigReqs()) && + (this.controller.getStaticConf().getMaxPendigDecs() < 0 || pendingDecs <= this.controller.getStaticConf().getPreferredPendigDecs()) && + (this.controller.getStaticConf().getMaxPendigReps() < 0 || pendingReps <= this.controller.getStaticConf().getPreferredPendigReps()) && + (this.controller.getStaticConf().getMaxUsedMemory() < 0 || usedMemory <= this.controller.getStaticConf().getPreferredUsedMemory())) + { + ignore = false; + reqsFromLeader = 0; + } + } else if (this.controller.getStaticConf().getControlFlow()) { //check if it is time to stop accepting new requests + + if ((this.controller.getStaticConf().getMaxPendigReqs() > 0 && pendingReqs >= this.controller.getStaticConf().getMaxPendigReqs()) || + (this.controller.getStaticConf().getMaxPendigDecs() > 0 && pendingDecs >= this.controller.getStaticConf().getMaxPendigDecs()) || + (this.controller.getStaticConf().getMaxPendigReps() > 0 && pendingReps >= this.controller.getStaticConf().getMaxPendigReps()) || + (this.controller.getStaticConf().getMaxUsedMemory() > 0 && usedMemory >= this.controller.getStaticConf().getMaxUsedMemory())) + { + + if(!ignore && + usedMemory > this.controller.getStaticConf().getPreferredUsedMemory()) Runtime.getRuntime().gc(); // force garbage collection + + ignore = true; + reqsFromLeader = 0; + + } + } + //use parallelization to validate the request final CountDownLatch latch = new CountDownLatch(requests.length); diff --git a/src/bftsmart/tom/core/TOMSender.java b/src/bftsmart/tom/core/TOMSender.java index be7b1265..349fe956 100644 --- a/src/bftsmart/tom/core/TOMSender.java +++ b/src/bftsmart/tom/core/TOMSender.java @@ -115,6 +115,10 @@ public abstract class TOMSender implements ReplyReceiver, Closeable, AutoCloseab return opCounter.getAndIncrement(); } + public void TOMulticast(int[] targets, TOMMessage sm) { + cs.send(useSignatures, targets, sm); + } + public void TOMulticast(TOMMessage sm) { cs.send(useSignatures, this.viewController.getCurrentViewProcesses(), sm); } -- GitLab