From a55af06b6399082c5ac44c213c4191058bd95ad3 Mon Sep 17 00:00:00 2001 From: Trevor Berrange Sanchez Date: Fri, 5 Jul 2024 18:51:57 +0200 Subject: [PATCH 01/28] Facilitate cheap zls build-on-save diagnostics --- build.zig | 21 +++++++++++++++++++++ zls.build.json | 5 +++++ 2 files changed, 26 insertions(+) create mode 100644 zls.build.json diff --git a/build.zig b/build.zig index 3d0443fab..f98bb8a83 100644 --- a/build.zig +++ b/build.zig @@ -2,6 +2,8 @@ const std = @import("std"); const Build = std.Build; pub fn build(b: *Build) void { + defer makeZlsNotInstallAnythingDuringBuildOnSave(b); + // CLI options const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); @@ -114,3 +116,22 @@ pub fn build(b: *Build) void { benchmark_exe_run.addArgs(b.args orelse &.{}); benchmark_step.dependOn(&benchmark_exe_run.step); } + +/// Reference/inspiration: https://kristoff.it/blog/improving-your-zls-experience/ +fn makeZlsNotInstallAnythingDuringBuildOnSave(b: *Build) void { + const zls_is_build_runner = b.option(bool, "zls-is-build-runner", "" ++ + "Option passed by zls to indicate that it's the one running this build script (configured in the local zls.json). " ++ + "This should not be specified on the command line nor as a dependency argument.") orelse false; + if (!zls_is_build_runner) return; + + for (b.install_tls.step.dependencies.items) |*install_step_dep| { + const install_artifact = install_step_dep.*.cast(Build.Step.InstallArtifact) orelse continue; + const artifact = install_artifact.artifact; + install_step_dep.* = &artifact.step; + // this will make it so `-fno-emit-bin` is passed, meaning + // that the compiler will only go as far as semantically + // analyzing the code, without sending it to any backend, + // namely the slow-to-compile LLVM. + artifact.generated_bin = null; + } +} diff --git a/zls.build.json b/zls.build.json new file mode 100644 index 000000000..7b5786eba --- /dev/null +++ b/zls.build.json @@ -0,0 +1,5 @@ +{ + "build_options": [ + { "name": "zls-is-build-runner" } + ] +} From c24e84207b0a621336717d1a8371f4d24465fae0 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Wed, 10 Jul 2024 13:44:12 -0400 Subject: [PATCH 02/28] add kcov functionality and update fuzz testing code --- .gitignore | 1 + docs/fuzzing.md | 56 ++++++++ docs/imgs/2024-07-10-09-33-37.png | Bin 0 -> 152825 bytes docs/imgs/2024-07-10-09-39-25.png | Bin 0 -> 63082 bytes docs/imgs/2024-07-10-09-39-57.png | Bin 0 -> 304533 bytes scripts/kcov_fuzz_accountsdb.sh | 31 +++++ scripts/kcov_fuzz_gossip.sh | 30 ++++ scripts/kcov_test.sh | 29 ++++ src/accountsdb/fuzz.zig | 12 +- src/cmd/cmd.zig | 6 +- src/fuzz.zig | 3 + src/gossip/fuzz.zig | 218 +++++++++++++++++------------- 12 files changed, 281 insertions(+), 105 deletions(-) create mode 100644 docs/fuzzing.md create mode 100644 docs/imgs/2024-07-10-09-33-37.png create mode 100644 docs/imgs/2024-07-10-09-39-25.png create mode 100644 docs/imgs/2024-07-10-09-39-57.png create mode 100644 scripts/kcov_fuzz_accountsdb.sh create mode 100644 scripts/kcov_fuzz_gossip.sh create mode 100644 scripts/kcov_test.sh diff --git a/.gitignore b/.gitignore index 6152ca1d2..ce82abb26 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ zig-out/ data/ index_storage/ +kcov-output/ /gossip-dumps diff --git a/docs/fuzzing.md b/docs/fuzzing.md new file mode 100644 index 000000000..066c0b4e4 --- /dev/null +++ b/docs/fuzzing.md @@ -0,0 +1,56 @@ +# fuzzing documentation + +supported components: +- gossip +- accountsdb + +main code paths: +- `fuzz.zig` <- main entrypoint +- `gossip/fuzz.zig` +- `accountsdb/fuzz.zig` +- `scripts/` <- kcov + fuzz bash scripts + +kcov will give you coverage information on what was and was not fuzzed +- [https://github.com/SimonKagstrom/kcov](https://github.com/SimonKagstrom/kcov) + +*note:* view the full script for helpful install instructions + +![](imgs/2024-07-10-09-39-25.png) + +![](imgs/2024-07-10-09-39-57.png) + +## gossip + +gossip supports two types of fuzzing +- *option1*: sending fuzz packets to an arbitrary endpoint +- *option2*: sending fuzz packets directly to a sig client + +![](imgs/2024-07-10-09-33-37.png) + +example commands: +```bash +# (option1) +./zig-out/bin/fuzz gossip 10 4_000 127.0.0.1:8001 + +# (option2) +./zig-out/bin/fuzz gossip 10 4_000 +``` + +## accounts-db + +the fuzzer does a few things +- runs the manager loop which flushes/cleans/shrinks/deletes account files in one thread +- another thread reads/writes accounts and verifies the data read is correct + +the goal was to makes sure accounts-db was thread-safe for parallel access while also flushing/cleaning/purging + +example command: +``` +./zig-out/bin/fuzz accountsdb +``` + +## running with kcov + +commands to run: +- `bash scripts/kcov_fuzz_gossip.sh` +- `bash scripts/kcov_fuzz_accountsdb.sh` diff --git a/docs/imgs/2024-07-10-09-33-37.png b/docs/imgs/2024-07-10-09-33-37.png new file mode 100644 index 0000000000000000000000000000000000000000..54d239cb5402d6b38470dda4f1a51f401c90faa3 GIT binary patch literal 152825 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%0DrQ+r~N0l=-FBKdle(ga)l8-Lx@l zk~q;`2EjvG9GAn|Jt_^AFl!XiIk>l>%vDb!m-M`~;1|FaaAOY_D*esDvTt{}xld4F zSeHL}jw}U(gthJrm&6U$v7AfJ%k+y5&h81uJWQC~2^|g9pGjNZ=_-oSyPWAVkJ(BH zx!Vrkp&Wyw(xgYdvnQmYtyo*yTdRjHYcqZF3CN>PZdBrHahLD+URa@N6Ti+>78*!Ie=v&We!Mt2i3;`jCkUw_I1t35EZ=mOo z&^59d9d)YHuP97r?n7WBS{5TKxg-2*`E-$azQM8ane+)LPgn%(!KHr>uOxS4P@eHH zn+jY1bQP}f*f|0R&OKcy8=_0?Ad19=3Cr#9i~OPiroHpN`Qv}_?3Cn?K^C3e(P0mw&V~-3^f`z>xbvYyZt&>7d zLnAC_LJmXPU9TW?6_R7^;=y>vY106DtNFOiQOvXhoqHRc#OJ%&?c3T6hPQn;NYo$% z)}ZvN+c9copX#09{p@?Z#vgA#4Bwa@8Yl(I;?7Kd_LtJ_(L5bh z{54YB{UIHHQsV%-g>pwaHezNelD#gLDq;nppRa+Iiqpm$o8d4=YDjf;sl$LK-xeX_ zea%uYR1MUJNNHR9wMfo_p#`(7hWCW&<1<>lzXda1!>p`jnfWvdY@ku2!psQ;-%*!r zGSP#Gp-D)^%X!q_4H9z}6Z(OU98@!#s_=Z{U-6(RF!|Z(Kruei-RLQqh~<{2)^ML6 z>Edv_Zrfiydt_Tr3xUC(Ex;zAcLE0Cm1+r97+CyL3=HSgN5Vy{`(TYd89dfSg{FPh z&6p(JLckt72lMp?>xuL9_SF(Oj-LJx>LRKRKB)eT&|-BCiQ@bPgRKSynZ9fnSjY#; z>E|UWmeP+-#&Ntp6<_iq=^dFdFYfk+?aQmmEt>k{$$+aoQpvsk5HRBu|HRO z$U6UfS*sxPu$agOBjCwY3%eEpcCn%!@({jlq&Y2pWELryh2NJgrtJ)SlEQx^R!?rY zD(ZC0;eZdYU@@ul=(8+lr9I)gS+0PWi+#6lEY>tN%%>veNz^GEJR~HJ+Yyk3&oD0; z{fY>>2NlWL7)nkepK?7boGW!nX!v4ES0OY#w}Wx0sJ^(js5{~ADUW#6Q$IB?G&@rkqPTat zL98d?l(anub$K#>J{h4lPTtxZDEG`F5}MywJ|I8A(R8u5jY?9V|JbVhFK zMPnY_r{wZo{n_=KI3w!K(XrxPV-eaV1HHI*LKFNq9;B5Etob7nD#%hQi4Le+_8TE& zctLB^=?YK}@tA#@Yi?5Jn^qf+iPx5eB6d%D?dI0)ZY49tc%c`aTm{xMlg^$Tf%kkTeTzYN{o7D&uEiiI zDiBl058orV?_Ec^{fXQ2&^+~vA`H5PN8-63*cW%*e-RN7K;@`B?;NyvG{igbMkH14 zLxZv37KAD-H5Z`eTE33xi z_mqAWwG-aL?P#VGnSEaz5TRs zoH-mc#I4Oc#vNgjI;3C6f-*(BxV?88avZu!`XvQ!AFhh;Bui@TwyRzeXK41c3MtJa zJ69z$CRfG1WJ+O&{9ZW*e?~vZE&L+gV-DkiJ_KXnt?q!hH^&xsF_Z_o@1WmJphKVq z+LM`VBYq(*W^@e+nU&+P`K_bia}}Xcu<8s_4a#+fKH^yO?d5!I=x>bVvHd(W-_R%7 zmbF#gjpGhalzoQ4BC(I7u>O#&EX|sj$YSpnPn*D3)<0fV{nw?Vj?5!sGIP3SXo+t^ z#NYQ4*qY#A7FkQSFYisTMJZ=IzPm|P51=FSIpnQ7^1Y45y(kE7R|-bpml8_tzvR3v zdz0I<4oVdgw=8!mh;LW>?xdNymQQ17J8e-OQOc$9Jih6*Up`uU!){?FkFBjx!d%n) zwYf+zt%s=|K8x}lOGoJ!9%{5-%Irvb+lt-yA|JoKfZaZ ztp`Le>%@6jrr&c^KUv@zkR8{n)Q9(IG8PF=C{ZAkMYtF8;a@Q`H4u<*0+ULtB*YSYsMaqldhR#x}L?c7$HWYKb^N9 z-(W@IN=y17=2Jq)i?k%{oT|aacAny&pbgbc)66ViWw4s}I&;Qp@2bCB`yd35H5NGY zq@#giJ>zvi!r=`Y)J#kB<^NYeY3kI^p0?0 z$wnK2jPpV$Pz;j-wfywaJa!ZnTwYLVEpc!=FM+KM4e7dv)}hEknN)+~X1ew{;WBTQ zE0yatau=2$_N1Zc#XhI<;i6o=eT)0ku3ahXweol_9eFkuiYobrj9t+OKFsmhsVs$Z zM3X+pVsAPf#i4g%+H(afMuX|(R2m1j4#1iIi*Buzb* zmlYiGZ2glrwfRg*`mrC?wMfeoM0MI28_XhKydfn*uvD{F`^8D#9q|{AOnbjlM;R16 z7o*9o(y8eaJa&w#G5=S$sf$XcYm$B4-G(%OqRkFB-6NhY@ohGAcr34w@JGUK;wg=* zbbq4CeExSw-mmsU;!&>NYC5&UmVj1F@t@ZcG>;#XB1?ICZfeN zpBM$XksRS|BZpNg`?5gWFP~g>lH*Kab@(54JBVH0LK5}~XXPqZn=%!Vwli~}(OXPu zzB`eaqYC6%C9W+5o~%|pn~lxWIr(iBLKUu7t5fl_1z>4KoTbOc)XJrnO(|Q~kaT;> zwd7Tc6{p5l;*ovHtXvEYRYIolG^jNSzA?}V)TAxzRB)2v^*vr^LansQbSFn^fi;O2 zM!azFy&Kn1n^E>V{;4nnMYBoPWYg?~xlXFjE#C^ydj;Qv(p?ktsE5XZQ+fUD8FkSP z6;mA-Bd*tW?e0Tp^p3}#0*elIvz*XMsE;FU+#%v*Vg9VsDse1-@e-7M{hFt>JKG)C zYUK~tw$PV8r1Dw8F^p*9c};mw*45}-G1HH6r%5iH+eOsE9&Lo18bdw5Q}=Oj$G*7> zihq5edS1soJ7uHbD2!3O%y6^y9UOLuyVJ!QHuY^mv@c^s@)T|{-bEk2<{2J_Imugv znhghF>i?w|I>=>(aKwZh-IDlPmZa=U#amd?ywH}U>1A-lhA37;r}J{l>;tltmjCn&sW>h;q8V@21|hC&{*~5(}9w;(Umz(U6%) z;r$1EN+Pg)d_}gPhtlwu_Kal+-R1x-%X0D8eh*n(3R^!96?(=A8(`+FKdXJDghcTaXg#*Q_pT-&VqB`RanLL~E%H5lH%({QL! z2u5XeERt64uoTdxHqsWxy_nd)Te#s-*Y6G7$vx&9`uXy^gB1x?Z(H{c3(z+U3%Qw+{c^-6rNInKyuW>6zD+sCMl+?uFNW| zXsu~^LGGdpv_SpsLTH0V*k9*qK1@hM0@YM>Z(FtC8k0MhR!N_SIFn>n%+))wWW~Ra z5!y3Ee3Bo&Jv3st%xQP>d#%pRai%kXVt`Aygn~ZzV-Pii&vE9tWIHBH6;f>e{<$P6 z`!t}*W?$T}P>r6C-vp%KzfR-eg_H%YL@BVpEk2%d+nsX^YoqtM!rxs5Bgz;*Lgd%h z?)`LzFsKpLXS=5DIx_{C6c74KF?qJbkvQaW+(e_-cA0I3bQpZI#yRjB#fZNgjw7KF zNhU|-3%S1}$KC?T_VcFQo&6@x7(6$I%zgmI+rbDD4=8$dae?nYpoRnkzJy^Ccy(Si z`OjJ24IyBcaYsoD9WO*#gh&z9<90-v(~uLVxX|tL@7lbzFYbkRia%LPe;6bJB}@fx zD-TCSJ0{FxTNiRAI*GU7n0?_bjef2(@+ayn-p$U?Bzor)M;xcH9xd#eY%X$|PhXl8 zrz6F2Mc6NuLG-C1=Y zTcU;9J%P}%e%$^_u|Ar^q})AuiW7rm!jc1nd!pI- zCuC}b_0jcS7z10`kMa_8PZ0XGMKO@fiaZz;WKBy9&JM4tR;Vl-7?#3Tw9M;$NiKm|GhrmVfu1!tQHRP0H?J&f!p>CXG~9I-m7cv zje)ZnwnCQnQYmqeI^Lu;S974r2`csdw)~ zVi4xm3On%*10dqbJ2S5yWo^n4P~{?@t&(wzVl(g1m!GK>iMb?)8W%iZ-Gjl~F(%^Z zro8|UWu$9{XJ_NwX~JY>a(uYN%pn!%e}_CNP>6HiVG$@|)qv2$T}^cSW9CaH(+bR; zb@xsoruGP`5rH(?#1cPQA}>+Et)Rb49_pq}ki%HL7^y}VPaDI{6i*f+&+io%;O+CK zi!ClVKfYojAEMC_4R9+~$um6id7WkF!x7YZt2@P`{f8Ddf;uNMK{f!O%Afte;hse7N23^yS1sQG0cT0mrLz_R#B(0f}G^Uusbsgt2DNQ=&|v17l|B|GEOE<#TeOxqk^cx4@Bs{D`%X zRa+vb!$*v4XsbABJJ1pMqiQf?ici`wco7t2nJ%TmI`)5}ZRy zMO-*uz~W507QGpzF8CE^QA}u3qKy$FY+g-MsAQzg+|Kqj-K}6~3ww4~aWm3Mr9MAC zhM(o^En0t8jkYy{wN}3(YwXo=+PS)`BoZ{CFR8w#Y5Nev(4rPLCutW- zr`P#Ik{i0^1B4A>oli8!^C-w-Xp^*LgNgK#R%3vRoUy*BgCTW@hF|?+_p#)V=nE8X zj=_nBHXCBZbGRLuwmj2yuC*>2$9Jk+%po+-^4JiiB4-nyN_8x)`@9Kc3L~_2dUqT= z3Zi%IJ?&lwA`tOOu*#YKlaSxXApxAO%yg`xhXNCi8SwLwoe|>)H@0LCjnrYi!EFq* z{)E|FrN&TQzDg(6nli^V2i0H7rD5E$6b<~6Tj0a@5kLGn0*nTDNbSAQ@<8i9ubYl#LM)x(Vi=O-Vx2aG!qOdt{0N7Q0a#2!#TKOqP zdmOvOPtGv;DcWbRYA9M`=Uhv;qU=+xKaqKl3w8jhSU2(x&jb|Am|ZkB`o|kIi(g|F zt+u=|;cl}n*D2?(T%Lp~H5mtdI`>Xj3ypBjMf~=!zrhv>9!s{tdSu}GTm+&XM~3%P zbt1HBH}IL^+`NZ3*g5st+Ix!!#{prlF4+Y>R3?QN`!XkOA94 zX`9;)UW)WuWjyDxmwiF+;1wAnA8nG$USYfz7Q4;dtfpi9>LpAVd;2*Du~LuoW2aqR z4Va~90gaHHBU|oLeg>sYRgGhT8`?$7E+NVPzpf5Fg`7_48Vp2^du|cPN*nNFiSLU3 zxWccx(X^&1bq-?|&cW73NQo1cdMx~JtR~`+4W8}!ww9uV z#<;}!1B6b6&r|ys4B};A_0G?bD7I$UHglD1$4@e!;|Q`@lW6*NN)ndmf`lwCIgR>1 z*7a+kagh5B*D{2(=Z_>+3|uy$70YWMXK^yRID@#e#k3v=B{N+2@wKzFpB0C#pHhe7 zhTOH>{L?2%a0LtKQm?rk^;R@~j)ofZpTT#CE9 zQ#^Qp;_gzkxVsjILW@Ju;_k(vSb1{Jx!-yJvuE-t-}bEaTkEoo{~=^NNgjyc;U_q3 z6q^S8CNMTZgE7Shg_~8GePZ-F(VjL9&cktc+7@P%_!0I8Y}-3M&^{*|3-b-3r#{#7 zl!XO^H#>yilRU|=u;6N*zE_$cP{l(=$FH_H*fdL~1TrN9nL?uI7FycHD#mH(ON(wy z<>#Yzuo2I+uv}4mOt`pR^r+SU8VMd)4w&2+Ww16SUK`hXUL6Y#J-ZomR9_-3aveRY zMP8D6C+Dq$M}>AZ4rY4yaLPmkq&o-RF*UkJUP~)F$ur5_PdrTAb((gOmEVlmabqaF z)jSkeJACewXyc#d^5@LhBJ+NnIA`0?dc4qQ9;+B+?-$XoRj%E-jW?gOtJ6SiYQ*>V z>adc3aYJrN#eg6pbnE6`3!+yFBT$9h6m}uK$#Y$wZOj{`5e4~hU~&fgQbaa<-a30Q zlrGzVC}xFFS^4RetGHNl)b(c#_BywSK! z*hLuE{<-K@7RNb;Fs@MW6&$n}DuWDx2Vs!|T9{InjrB)e9>i)hcEV;~v=~E|FN`p!ivE0w7zdP(Wb%|@NnP|5UF8P->2eG|Xn+Kn#wXLH+*5V)f8oEY z0DuKD!(Z_!Brf9TqSkF@4utz0w~=gsIkATtF@f38)s0^#xE?qGX$V~Ycmy)iyR zm+8zilal9@iqT_1WM(8tQ1OoucI?Axd(|XdgTB=82^7BRGo*QS_#tXHhp6TgiIgL} zpYH*b_c`8wOx8);O>*v=t^-XCa(s@uB=!ROZ|j70d{Rd&<6_U*LeGgF_S4UdnLWRE zl8t0Ra+{1jHsS;(-v(g~iv~gi>;T3H5HfB0HsjWeG;CAXQSW0bV_yX;m4T)a-1|mD zj67Ttt{oD$yBXKFw`)IVDRLvim5jK?Y0m1P?+Z?EK)-}IS0u8XYpdj5SzPhBgOI`4 z&{=s6!JluUoX8%Sz$(DsTJ$Jb0Q?H_x0~Y+CYW3f_UPrcI)%AhZswzAx$hnYiKsed zly0yb{7BHcjRBlI&30E$kSS3^<+V}I^}erlpsz@l@o)D9bTKM%tXze`@z}48Xqm)Q zjg?)VfgdO2;K;bcQ+>7ode(QNzlH=^u4l)oLVuG@TTGh#)?_+J6&#gF8fyAZ>y94c z-8)8j53}N33+l+JbWCDWWt?I3g{J$V`i{B=eq?bwld=foTbDL`6}X;Z*8PPE(CFh` zB$}vR3~c*92x>i!F6+PahCQx++w7ntM)b5Dt?{rv@>IG7eLXCZ=mUapzv{9Q>%+_x zO?Xxn)fVCuC90W5LZ;>tnnE(Uk`?KW^H~RKa!|Z%?td;p2TwlY{lE1qxQ$DR`g|HNKT!^U;YHG#=P zT-QGRFX2(<0Y?OVyXIi0s%O6IONb{Ni+I*@kq^zcu+`>HpV0ufprRx}U3(iq;JhM( z=`eUFKf)WYkDY~ei9tVrXEJdJZy+%)@Gf!`W8%lK&glE5G4~K8CQ`nNvusiPZXfY3 z796pVFFS=Zm6`InobZwGn^6QMcGE9(FxSH09eq|#_)N8q z1)#%rI@|?b|5sB)s+Ci?;saNuc&ViVZ%MlyBzg<%&2gebHx%3g;^TJ|)bENVvtj9=QG;qdhk=lq0@f);vk) z?#{q{!V*C5oE!-k>X}EXV5*jnSACr7q}Bv&uEeM4@yDMp<_lF*m%etPlQA1g&#VVa z)`Hp%UfuxOeU`RxF}lkgW8Sru-{p@7U$$MsMnL$c?UY26 z3Zr;c_K^G%VBf$%9u+I|=`k~jaKmrAFr4@(D$id9hP&L8%l)tW03qpV5%hpvGm7+P zBGZLe6$qY_U0Rpa>lGAkyJPV0#uA1uy;;S0TU~?BTP`e7$i1rwZ=P?m51i znA!tbH+xWqF}7v>VOzN}Lu%#*@`ikYt36QP|Bkmk;)7StGz3p-eZi*mZ0!`=tz;U; zmxW_6W6O82oc?-^C}=)=e+eN_<+2lnN;M=Wu9wYj>jvEVcRooA>pI}lpbK+rJmF2Y9IZcC)x|N0p7eQ)72c< zeTE^9BmO;^m&_l%gGk6y7%;KFtJOMqrHmEs(#_K5g^jD)tnWx9!kr<}+&%~O$eG{H z2b+)^M#twc&c#TSx#EH_pjo7ZF0l4!RSWA(!kE|jc_Mre)9pfWm#X7|>|pNJL+Xj* z4WFyQ0LH6jZJ!T9Hh&iV_p{Eke9oy2ry6)ud}@4FpH=j`oK>BX%rdziay2G@)m}Zi zHu?tbl>fU-+reM)esjpSu~tJ3Rh*!Yua z0121HhTFxVN~kE`&{ELNz2NISC?i10ilt|hZG&C7C;AAoaeKBr&oO`o_ zb?8H#5@^c3qKuK{;KzxipbPWGue0(lJ-5S#uL}ncKLR{%3DyKluP<^=Te`D6!mn;s z5RG*9JUTwPO^yl%RyCyX^FY!rhASFpCGW?oe~gcuKa$-!{pMUaT{u$<#kArz26_B8FtCu< zO_g>4kfsCd*mZ}uqm2S+OdnW39s{kdq!D3n$Kij=>dO9erItpnoL1*#F z4|<}*?vL&6(-n34b~-(>u_qp1Z>Yv@fq0)EFk-KaP^=d5`724q0k?V zU(A4pl#*wi`>B_?XCQwU6JERckMz zmZc-b9VuIe(6Tvj_c?C9)Mp|kjyHQjms=zYM|h?d0prI&)p1zkx$@C=P0%Yt&o3ugCyv!23ImaAj_C5CMwa>r$ zR&NbxVHY7K#;i`2^=F6b0#(W=!JEE20$J1eK~(R0o>25?tsC-qL`thz?w=DK8aU28yK5dsOJ{JcN*0fV z_LtFg?JE~-byK`TXFnr~D#1_K*Yv;bGYK&p^%>-n=IHzc;2qWXdy_Jn%)OqyIX|8V zlC-v=|^0JPA0c+ zpB*S|lIptESL2xR_kL-Fk!tvkWRrTcPmOpSk$sQU(+G*uf8LPHSe zbboG$RasLKr^K;OCDqpBH>3gF;95ZpmDV@mEDv zt|iJ~&t@qL=6gB8&%(#Pv#ANZ8N7lwFFQFr3}~2{iybI2$3FY1=N*;SYGB>GP?h-O zD_5nAiKkeUKX(U?*nlLwETJRt^Mo(C^si@v3qebk}t^L9?{UOL`_{1dRfbYX4aJH(@m0*r>e3KpTyV;cD-? zW?Bl<6(@s|=_AT*QE4!kHw>m)M0fcb!TViSKk>BF;*Bud9B7S~Iuz)ydd zFH?&Kf_60$CNye|*f4p2o^YXNPjY9JYNQV6glZGo{canKZeT^_)l+)kb$-NtHQ=N= zAe>ig+{cDe&xSayRQp1kNdZt{*UGX5Ss%$V(5++Vr%f1OUys*t#rT~kW<7NfWP#qziVX_m6N*#IL4E^I|KrcUmwu#V!BY$KE5@t4&#M8uU$ zO#bN+x3CqJk4X2dU7ewr{oHSZ8XNOK>v<)UvP#K+3LZ%2JqRcER~kYCe7|9P1p6=Y zP)%;X@sN_EENQv^iX8Dcq}@as-1rlD2nu)h`-z*QpoTtohiv46eJ*keaL$o*P;( zRCDSt%6w>w`SOv3S#4y0tz+wPGO=yhw9~*)VrIFfv0}?=78kg`oBH8A)=EAkJ~Lzb zGkz3LAQEYA4C1HpKad;WyV^m1(~Qb&ItQiSZ@Du3b$j3SYt(XefZ^IJL1&n(!RQRY zNmmj(w_dhFP#y zZFcvCC{daKB>TCghh4gs@-Bs7nwic({5auQ$QXX zd!I$O5pr^NCOy-@kDqVkUq6ar-wP!ZKA!!AGA?0d0}ZQp?9gx9f8vl2%Upp z-qU@Tbjf?x)ZZ@O-T4z+rb$6?l5IR;fVmUwA%#5k{=@KP9U1G-q^rND?Vexl1Hz@! z_))PwahrJ@L%p-(vETZ=0FRfB02R5+k6dnj&&lg>`n$us&5bBbqIdAAP5P28I4J^&%VO(hh=Puu7OxY2Yq%FM?Uv*nZy0fB z-=`$rNsDX$C_9aBDvHH-{>m8v&sWr@u}yd|Kc3IBNxA5jRCQS$c!Xj1lMOsw`f4aR zbu~eELS21XncNlAR`H$pk^CZ234y|8vGV!zE|L|kBg0p7maebL;92Gm!@jh8<|y1Z z@MvLMVXAOa>xyrSmsDw>2SF!yMB8CI8(u?5r>M+52jOB5wm#i03uk*x;lohn$k)<) zGzX&y_9=w|1rWqK=KehQ>mG#)ZM@ZQN685qLy4sOk8vV;^S5^q|Dwr#3>o5saMsOV z=+5SM6F#_H6*f+^;ppmu4CPV?O0Tv2=E-bTZP!G6H*l}T6T%c5Y&f-$HG$RzU0E{E zQ9e*&aPhA#GntZ~H}_NJ9kM&ywm+p11k1m^A+uDW)1(;992Z~E@z2Y-*17D=0R0!-Lu z<&Y{=f>!ip?b2mo`ut2ALw4RQC~Tm?OKsI6_-<{zBYdu*KgKT`DrqBAwL-Nm0FPA{ zsu|a;ts=^YL1Lz^qrGT{_cPI?;?FOT;^nvoz^6y|(${`yauf`m%s2KdX86Kyfz@zJ zB>ZiILh>1JI?DX_p3E$ZFqrjTn!?nL8(r~KI`y?n>`5Gxf!lrk zWK11LVOK1(HJ{c0QiZohjy9id01$6?n5xj&O)4S*}sTo zZb!rpo+OwLJfZ4({-T~n?BaL<2l&&Oqbpf_Z<#|0LW^x$l!QY8%ObOJ&j_=ia%E8T z-i()&x!jZ9W$e7O-V{vxge`@!J{gS&`ZKi{`;c%C0Gi^)@&cP?65w>-cPn+d*ya>g zP!Mmh{cT~as-^$4czd-rTRZSx`%sa1r5x%fn|BTQD|Al?wT0X-D7>8a`yp$(DBV;m zlEWG4vYbEG9?flxN8kb9iJE%;jpLjf1KyB_+|2P5T6_Q`f)P4svx$>Xibsc zvx@T0LV}!{EqycX5+2^_ct~QvAP6A_cbxSxu7&Ay*3k-Lj~=-54t4w}@6herXQKG#d&kYI7{$3~7%Af?Z-7^Ty0MEHBX}r?v&BmNJO0 z-{uDq%9+pVfLUo)Wx+00bCpNnqa?9MW(Y0GQ(TLE`ncd}nUHZixeQB<{eD|PN)SK^ z&0k{4lD=LAXR}E)HosoxfQ&6fC?659s`Fv<<;N2VZeXr`+qeI;;D-MHN=+XcjaU%A z_0e^az@(_QmdGEeamj48a_d%$tWD>ay>_4^p)FMvpX_)4uJqKXfV7~*wvJ`kK?A6n z+<)H$>yi($Av-KhriC>O+xU)XGn~SX#U0fX%t|5#pw#4A5=LiMTG{fJfZ(e$1z2gI?~ij zNl?`T-0@ix)m+1d40NypD- zGw%An?xwdK8u8iuFKwhOiWX&}t(Z7JgF1^9P&bpp9<1U5tzD$V!c_S?371MBqzhoz z48(EFdS0*KA(E!|~&{#A2#&_kyPK_{(0YF0NXdL3$SG{ zq3t|WXr|nkD}`6QzmQxeY6;Il()Fmn&Hvh5#xsfQ84Lu_&FR$u(_~hE=nV?qjq-O~W<;CBZl+^>v6W1f@RH z=0hy?jBOh4))6tA_{mf+p8%Oj+CHK5EF!`t4F+NN9_58!DR9nf-@4H3Hz1A|JN9_z zDV5Wee?_eTca=(1y&1I%GT@DU>u>*f-|o^dS^PZkbw!I1Aj@K`2tVXiFR{9sGPyyV1%?QDXuYMe0c?r0YYo=(GM5%Eh~hV`biHb=D@ z9nUHTh{&;K=J#@9h%k4c=Ggq&V?D$MBj|bN$|W#~C$C$&#c&I1KsAmgQ+ zULqi_K-^Fz8G>8uwg|6%NWL0=IYX76iV2Oqw6xyJ&6D`-N%PkB>AJ0IdeWA7d`ob$ zaP=@J8*a0>8}9aPX#@%Wt(s~^Sh-{HJ<#r>1AQSMT-axo{iWEz(;1)Z<}2)Nbt#AIN zZufN+@gmEpwCcPaAmo<21sYv*GQnY0bO5%{Y~6Yo;ER76&T#+_--_R)O9X1|kW^AhuqIIvZD?}O}~9N1pgM27f=SQ8AH}UT%m-UGK!8C ztl&=uUY_NbE&we4{q^jYG|x@ZgKH=Nw?Cf%U?#ozS<`kGz=Mr978;(!?eO-NDSxZm zMTlt=Z>lK(K6A;rN4UubFkIHef`(<-ua=iflYY51##F zjsq82m;h$WD`oSeh6!mxRWVZRHE{Y)qFi!RD|X`Dbbl>?KK`BTW@%oG+W8*Xv_?W^ zvC>gX27Ga5-;oaKBj*gc&v^EA< zqPB+vM6LcZ$1e+={C(P{^iZD>NJ=i3KuJ<4)Y>$Z=#ef~>B7JH$G7|@!1z1x{S$Yx)6!GbXP$GTwbM)mqh9cunt7WY=VhVMD#M;%H2v{tmy%8UgNow zI;X+1NMQN;-U&&yGb-Fsj^d~gn zh2%KRA*R9IaDm}DP#3Yv$FWfnFl2oRF8x9)T|${k0UGMY-o(d0S=H5W^@HGOZ#033 z{+ME)4&G`qP5!k~dbdr+$!Tg0($>uL==R{pyNgT-Mt8WEy2`ii$RY!0hC~b!9L~E7h=q8~f#k##eS#KXq!vtWp8};sRb@cfB?u8K#6neom zCbh+bD6~A0_eW_zd=@hS&zBv+Z&M!eoGqUBpso&Ce3=gX1Av7hhlucoIi}pSh;h*# zH%(YZSE3sLV8xVwFQEyusegeo0>tT2`CD!b<;`jrG@7yc9Dr10rx7EBU;`qDaCe{I zho7QPPeP;x@oo-vD|E3=ta)2woZWFBl@vAgi)U%I08*o&qZ+H2?gcnkA)fx})3ow= zgn(QH=4N~-Ma}KECqNh@WuGs`W;=gPaa|44j4b$PdbTxy0eKqO;kA0I%8f04%`&!> zz9e}-9YHV@jMB#{{TLlgEs#Cfb?^O2^9i*8ODg+uSpKcI0LKPgqB1cSoE^^4(jn(hTz_ zWw_3$%&8QX(5LT8Jd9K}ldO{xVS;-|2$nz!H~%Tsb$1BmyrTcXcY&?7_gJY@_ACwf z95$cjGvud`*A319R2eDB2}*sTb3cul7DHFe`q2~6)Aih7i9Cj3+1Q>F!S6V1rU_*0 z&QolVPx8XIwONln4G4sKXI=5Lt-2PoW^XE?+|gMCLLchmUNhw~@}(SQc(w9nO^i^$ zyi@igS_`897XyGB*7LrvggC}{6nNpykBFS5YU^CofQ&2g9fi=0KL_!Z<8rs{93E$3 z;1R)77vxc)?_cxuQoJ@r7oo(9;3i$v{mW;&(Ee12cOlN@T!`!J%@omCYh&#fH01DB zI5u?3V;24hhf%z%lrP*0a9EH)o*yLm>$OGqWE=;3FF!gKy{-!&rx_Q&uS(TPHt_+F zTB8z`4DBRDRKpXP!qH=%etZ584rJd5*@dS1!%>#-V}-)1aC*NDO@6}J6s$Els9F;Y z+#f7;M^2siu4NxUMDneQh2y`t;6zM(7yr;TbS^#-KL9Xs5v#K4BN}txq5OXx=|VslgerXVq7f$$*!n>mWQF_@8+R4u0u+;J zr;67iW}~X?zxN{>CE`l@E+!4i3dH52{YDL}W?-T!hmG*!sbPQE`a!~f(~2a&$3~%FQ^Gb=p;FC>X)y&E@bsv`l`uCY6OcTi?(}^lm|xJvu0kf}tqEGHpq!?0q$JX} z$PgT#Y^Y?M|2}tG7!rnOI!vX`7K*aZLHNDMEv$bPc|pym|Gl)_=|YY9GOGgbA)WN{ z_f|#3W;p2ZpA1v(z;F+*->wJMOa{O5-o7DWAF_dKXV9K1&XIbzX6<`1{*0~Qz-0Ga zuz3=QyZxZ*6T`D4_7i6Kw;&F6+BRU+Ox7Ofn1&^M|DjX`qX!<6sIkR`{<3dkn6w+# zDxCdFtQijUO}+)u!Eudt&_Ln3%y?)EqTs0BC#K=4v)(coXsXy^98ez6pBOhb;ze5; z%T7zT#oY_zHaJasuE(IJ$?6FJkZX5Jx~9Zq4sJi0WeHubTRQS5A+ykQe|$nE$6^N7 zRb`1`oK#HJ!Jps#tt&SHc&FMt-)WLzCF7?B;;z=p@E?9PN+4LyT#bALjgh3^99h5~ipaCHu3KU-A;jw8K?a1P)sT3to2NYW1i zdN^7V6ena=KT&a1a3as*%ehuQ)yq-uxel~ECs0sXe})4HK8Zr+X-YKn^PYdXron&L z;dE8OYPa@dCIwBvKM-^-9;dZTU$&4eh8^opxmS_vjAqK9^OUAu;v9ThW*kj4{kZ6G z*XMxYK#PfGzu&#IvAocdC$%S9=!nbp8MwBMW|7o?7!@5@%ZO?Uq%u{W3UU$N6&*}< zK?!NZejt8jNf2m$rjt{qWe{~x_``lqOSaQArZg*-+W!=>SwI9|V6?p#-a=_HJF6OV z&dyMgGWC{DonVnH2n-`^%?H-b!LPeIdzdFX-M>Ed@Gw;5U!&YR0jJ&#i{UCr_VAt1 ziyB-cq=pC9rXLgWKBRhI@^niEK8YQ7%B`z-Ypz!{6x5N_6v_(CDJ#Af(W}W|`4NZ_lBa z;eaIYcK>JD9`4@QJXv9b`y{&>yh@%&r)k z%2(%}emB&M(uYQ{30rj77+|%n_!qx{a#*7hUwc=QbpH@#2-S4|;NX*+H0!h;M@>W# z|4r5R+j@a8_0Xuk56AC8m;IB2U&!*TKb$8Kv4LejG|fE4r&@Tp{!V5{YKYXYJq(`( zj0QN1f}?I|vul$)QEF(QBEu?0i&3TbTUKlu+XFCQme2G?l?V<2uVU{8F=X@=tNP(c zM0U&z_zd<`S;s`lvxuzHwxAV9s2*ArCvX14re?8pl{{I zm3uc{Xd5VywOxISy9$FYBh?XP_s&eYaA5K-7ppHLg;4~X>BFd%uS8HCJzVovuDz|A zEK&q$tPPI{;}!3P^=_9N|6v?Ytiudu5@TQS1=ZnC=Z*d8vM;8bX*>FJo-<>c*O=={ z{)jVDIR$vkm=O~0MIu#_1#1pr(ywl_czN@`#0v;aTXPy6*B^1HCRld-I2gHm)Y%hK z_EOERozajl^zeVJA;RT$+oMt4%f#|~O3)z)WV3iW15xS+b)%_q(Y#L)V#*R1D#xB9ijJaB1%`Q{#XqY>Jcxy=b%U(=ml0uss{odc4-B6{S#-8& zgPz6|N+|G)SsSY+O=3KR^_-OGM4TjN`kse>VFQ|2>K* z<-vl~e?01q@Rl=CVTwrR{1eYN%=3u)WtVjnxX^;6C#R>@cR1ys@xQUUmT%OJhhWjC zIH}48*r*;2`!yEChNXFf;fV~;*nEv*dd_!L=FFIT{LPeBW2Wl*SjA6MS75XG_WBHK#`(TV-(6 zPwa4f7@y!|FLTf{ZpzJgkJEQb0GR$LcrfxC;O)0xO ztohM)z@G<5P*G%ToF%rs@X5%_BY()#&p1FFIxw~1}{C2$%dRLE7J_ z2DoX#$(M((7II!Gl`JUb$6XPJ?5~Q@DhfS=hKh)pd zImc><+;;Oy?o=)I8RB}bHWXz?<0DF4){%!%OGeoH{WdMJV=Cgx(!ezd!pZA0CDpUy z8JS~?o@==IoiA-TkGEq2r+LNDDhwi-Z#Aeo%0v#Fcy^Nu^M0>&s9JX8^JgdWa*xEw z%}`1h`x+;f_8N!C5U0R5Pf7rO7&sTT_(_6x^~IVokH&6wh@CZ^fA#YX2W9Hcq}i6qL4W82p}H{% zoao}UT6rSY|EY4+=%+8BdW%(em2*39PG8Pi^w1pVf}778aT2A82s9g3+7uHHm(GMO z)qH;FfBnVWz=jL~@($Z<4dll-GIV$7RZsgqoRHUPOQ(j@d1H5>O5{}6;$`$@Md}_ozla!p*&%L1QfW7 zU~l^TukfQpoNSmREb6TDzdZPN1vr{CQf*%SFa^bl*}mXIKT__N<1*`~FqY1pp39h4 zeC=S@CGL%Hj*(;!uSJQB?wvOMMV$jtEP3nCKTmg_z~%7Zk3*Z0+< zhpZ3TTuDB+_*&ZFp_*lYE5S8a3JIH&fct6zhl|z}*RS8JurniYQ;@28Y;)UL@>!Kc z8^K_5}Xr{Tj)?3oXIrR(9;W*Z}3ts;j`tB-G|rF zp|=rKX85Lv1r=5%Ww2l=z(|VxF#=O*JHrsQul=`P-_~?G0V)iOuz12liH)oO*Kb|B;Zjv1Z+XHX z%G|n+GxpW#D}l6Q{dZ1QIORy0HPw86X=!~ZbWr8PKBU@k9-1Ngx*1j9_lPvIq1 z2n#plEL>3Cpn?|a0Mzd9a=~Mn0q{TG1VSpbIFwNNP1p_oUJ6auOKt(;6e<88vGcN; z6WJM1x9M}iU~0gwJw6?w0S{1h^QLFVjY$VN&D#gwJitECR)YoweRd583bwPQjN(D=~A@wGJc{1(0}MYnw{8zybGj!;O+0V ziGR)#6+(IPhb_VCjyf@sC3ggG-BsN4Bt0w+awp-Sv;B(S~)l-b*R4^Nq7^)wY;8XjOu3PD`y9EEm#8k&vHeKQP1^IL8>P9(QMjt{z{y|mqx@r zCVHLc5K48CoegZ4oXSh<3RRx2h51A8LYJ<$_B=%vh;N77_ZUaq8> zIy5mh8Ks~5JK(zlgkg)SK=CXI6Wm^Z1)i8^fYNR6HOgMhV{WESfz~+HdWMRjVgw-C zvv<9ag>Lg5Oxn(JyPIn1+SPwYokwhL-S6jciYmK!rl)vOdzJ;q0@9anwE%Ud@_}FJ zftk@1$7&53XLy4}b7rdgUvhTZQm0gy18^y0u+<^w^K16_CMWmz};@&a86Y$_Y%2-3XDj% z6WjWKCcNZI1|`?7t{oo)$oXwK{SaBv2i0A(G$Q>cIOAx9Cn4c-ScZ#6Q|F<`HRKK4 zj{zIE`mzRh;v{}!05oCfA}a^H;+bcieX?3$macVxY0?N%pa|mxDTyMz>;HuJy#}iC z42*i6uE(92$q1^-kN$yJYBm^Ko`~=|KKySZ(*S`o$v-l+hKm7F*Z|KN_Fr&X-s^Lt z0EPkjS$-9xgLhxK>8LgV+duER&l90=@);#huA%)H1MpR7?U^A65-SKQit`*iO$xMJ&R14&2*@CD&} z{4gnw)Mu^lIe?{hUX*(7y5Vy_(6HY8daT6s*iSz-ac$L*sR0YeLc04;$eH8_A0fS- zD!OvkcR4T>QQv;5_#nvId}|A2ZKo?g)EnsU9-rvclGcYq-}j9{Wc*h?rou2R#VeO{ zxrU+F8ztC*-+MfR-fP3!padR7ZZ_|x+-8rc{QglBq#bY}3C)Or0c3;XK}o0 zSmresG%SB~68Y~g|M?wDfOfSKJM86*!wMOMePd#SF}SJBA?rs>+^CXqr;WxMqL7kg{oF_iu4X{`VH#0{K*qItoJVGcubiUWi)TE%>mc2WF>Wh zyIxddg#vWC?uQFmpb+t8=5nbxXL;d9DA<8$FcvQ~;2g1l2tiuV?geYA0kDsdTb>bP zxLjinQNa<&d00zS*vwaf=^CuA1(phXx_baAQzdGaWZbQ}jdTM1 z_ho8tUsy*BRK(f29-0kTYT%n62e1oK7hg8ZzHgr;y4V0>iHSlJNc$*vH{hd3wWk?d zjpIc4&6BZrc}^^ezr8n(TStdO<6=+61uj)R!9(#)PZlFd5kH8|%D4VTV83vrBZvuUc1-*lU1cWjh7=0Y;pVaxo%lDilf6iCIPHk71QGR`%`Pf--7cKk^AH1CoI1uZE(EWDw)SyH3|629 zD3*8rzI80MS6CA_lIJ>m!{;3PFdFKW&0U^ak4t4tAlh+2qneyhHh=SBvSJPy!Xk*F zWsSXet_U1|R)f+O{J0LLNrEmjBWUrC$k?^!Ieo7I(fn_d-TpPs0j9o^DI7`ry^~ z;V^+vj>~VfDhWt3cW6o#r7-FAGlgS6>;2YJwhZ4m9^;5ymSKtb+cDUUGboEC5|jW5J9Wo$+H?eIaeA zY5gB!{ZHv_n|UDsnh4LZTrh?kR&Aq34<~iRf1naX!#KlYO=n=uvy4NRQ$kuFVxl-M zG@0Ts74%i!^UZnwhruVCtb3uwc9?7q#l=OZ(CDnv$DwMQ8;Qzwp}Uy3IwKvFIRSSk zig?a22v8R%O;NzSNyb$y%&1;ux^JI*S_mD*Okh@*a6@;wlLn91hQgwgSHkXG_Wu!G znrxBpG2n9Hj(!uPLj2`2dGgcYk(mdYVMN(=nyCN_C=&&jUePkAh05yU9#X=s6jh#C zGu|1tL=c+~bzJtnQHcwY9r_m2*Y!=!Rw@G8oKN9%J0@gc(cYDGJha;`pPMx#!^ zZ}ng9b5l~GFQV@!Y*d4%hkqA+4-TZRYW4j8qqW!!K=9)O5#m1}PbzP3C^4h1JeR|& zuMsq5+{MV=8x|D?$&#|K-3ckK5^UJwP%ZT*A|;*p(IYP2V5(H@vH(Cpr_Gv$+vDy^ z;!R~&jxvT`PxX=y49C&V%ur&9lu2RlifPdixaiADw@b|qC0sUrMFkm9v=OINcR?Au z8M+wEL(bw;jk6MS_Jz>-&y|W+=2+#>{UnT68-4JBE}sK4U%UbUy!3P7vFvSwg}5+; zG8-@A8az%kczX20;(L6(GRk+F?H*++CFQ$SM|>@t z4s69|Nvzrvd_T>Pm;g&6K@}KoCBAZsQ`fruUwOd-Oi3uY{Lq2CsyuO9VQc6J7x zILOn#$`FjxoTipb8F~W9D6EC&#_PiADCQMLn->4u!3^d8t**+<$*QC&UCbs_W-V+t_Tk+~;_-|PnSBm?q3Qbo_Wd>z`tNj%0JjC6g+ z_Q1@~i}Bh0<6h7=;bVP(^#uw;E>&EN4J9C#Dz{dE1JGq&V2>7RpTT39!*%Ip(GHrn zZ3V@i`c4=VN8suDZ~s5W-a0DEuKOP*6(oo5E(s|Ck#3}s?vgI)ke2Qc7(zghZt3ol zp_`$kyF&^2U8wi>_J00&*SprNS+iixoa^kf_E4DvS|Xf+|b~pLYaps9_(nP26%yiH{d~$`3Aocj9R0pnYozV^%T!4W*lo$zL)_ zn2@c>lnJk}PYt-6Qkb%gs>aev+;CrO|DZP0bl?`=UQt`T;28u?biu?@$Nrb`d;3({ zPv!uL`O2j30A}%9S2o3x#a*r6oFp*_nlZ!x3#Th!4_8BKqS63^FVMN`&%2OZM`fph z`8*oYPdv8)uHe*9X(dJExY*PH^|?nWRXALG4!{|O>BJbaWi6Ui1f z!jD&FZg10_o=`j%2zjljfD9uMQ{(SO8c(2$;1wU!trmRnnP-2vz$z%21m3Ka)=;t{ zm-i9H)<+EngJJ`&PiZONcoTtM@!Q_hju?|a<&tcZQbz==obMq2p+R0}p_>jb&g zMc8;`WT`$`3PgB1pxxs!dP6s=*r^i9@dnDU_PQ(!?ymG$bYG*DA(oS7qD!v%UcW_Z z`^D3c$sFwC&NQ6SaCW*^eVX03S@|hsbqmt3b5{yA{P2?%=xTBVC0CekaD*pENDFz% zcRE74twhm#K-SEFIOF^MF)y~Zn{JH`ToT%v8`W*&rIx>=22=Ru=Gv+}nVrYiQ zblYzCzjRaJIt6-ByX;g0cJ+|V?575fCLNvWLT(Rlm37KGZ~$H=M4wJ3mwG}8_4uv0$_9IKU{J^=^xpRB_xda}@lh2@5hl_fc zq-FTL<|X--vK>RAUxU?tE7}Ad~fp)-OmC1@G;_2%VuT+=oc$)c%o_+OB&Lb@Qhidp>jE z)G7*TDg5U6L`+_v`xhY)%l!df5B7n(0s(=o30?I~sHM}-Win@+9O9A|KVh&vewg0=cw-mYRsPNY_q zr9C<64Yzt;SCGLo^B968XiAX=RGI6_S8eJIHm30fFkVAor{H!a;xKvxVbo45kxv*R z7DiEyz5#7y10t);Hz&W(#JtiPA7KG0@z`njAL0=%8@FaTnkNv9uup}3*FP_y&Uy}% zxiMZ$)DvbI6SvFx>L~59baJww=$Y;w(=;!P7hRPm8v%W7j>!cc(~r3gvvQ81lpe{4 zCg7p;f9sS}m-o7ObrR2c=F!HPp@qT_m@{+!wPwHWkgrI^!(B9b>5hP(@}x^XT^81z z<=5g9wpZqJ&*dV zHV=$v7#)nSs2FlNH|+3qW3*Zl{TjU7I61NmAF|RbK6aah1Vb33?hyH~+pfz%;rzID zPj^`EwQGK1rhu#=fvh~Qqr|Tvns%SxM*8-^&P5Ks(FZ~R1xcAMWosU-ib&N-D`V=+ zINeSTV_+bpH25R>gtFyL!txR1l@h0;ernhOvVZFrXp~T&(|NFoLB6k}I?%H`b?(6J zH+h2-+JRuxn5X&v86KN;{hT$QDlP15i9k?nJ=*l^gyp~x!l#6wf~19+Ke0j^XXLj| z^Y_tApHsRrtI5oWy_;=rej~1DF33us2t?$vF1G^WPkdq7&KOjA0=$4W@*v5M+D~yb zD=61$=P%tU^n$=T$EV+%D1<)xyA7|c4%C2dWZvdKoiAzpc83F#Yhd)O7;71R+hH<* z%$i*vP9Y#Tp|XEoSf^mS<0=`%b-~Fqy`Zh?=s$=_G!FkUD-NMurkun5X?z3I4=I8- zndO(BP3`hkQ@^3KE++DGLBq?&JH~ge>QPHK-w{CtrQI?s*{@*yv{3jV#v}7j1W$ox zQuQi$Rs%VBY)uv>#!R(9mj=x*2qf+Mn6IQK`{_$V=Hd~}IsfUauL~H1$nb^H@_Bp0 zYQH%NLRg)`#P*&9KR+d-HmgHPT?Y3!Q_QWR4eSQj8b(dMe zqsUtr@ag5M3Pyidx#HK)lWqpfFUh$?Xr!2Zb>5I|uja*jc?jtOJpvqu~ZBFK7eTrI5aeH7|O}sWg)Y>Z{K0*@yqgZ zY1gtY8ifIF@oD=iz?Cm)Bw_-zP7{;$^P3ZaG2?+{Yr2173_egDcno-1 zqb7EMsvi}`qPTecUXRBJ{^hNM?7*zBn01r!FR34m#iAgk%?Rrx-^XY8BpB+4 z^95g1cd%?2L$Na&aGjD`NKJoyiOnY7D*-<%NLfZJYzXOHiBcmyvzberL-|d$5`k_xWKs-^u`rXtW;-GXsF6al|*1>pTiYvk|q$>s=0s)zcKK3KS*DYMZ#!N`;PT7sm?(iH0$F%6T|M=7YT4q1TGR12~$ zq6NmimUzwfdg+gl0}%!vWL+#jEg!&23p%-<#Uvg0C$__3WqoM~A~S=5tX^d*ef<2! z%bmm-B`MwkwsKD8;Teg=;m{3TQ%>s;CP$^nmncfV4E@{fzJLYTSVjZlKDsw?QhXds zay{R7X04d`d3ej1f5htFuF?cp^>2V=A$U$cfc^B+y6ctS*UkQo#iEN~ecbzAhpCh7 zkBk=#{19{$`_}jM6{#i?wN@8BqJOnSi*i!>b8s$5)KUE>G;^+LKiSMhy&5?0p9^%wjqJV zg#`OvQ0#w3GP`F*tcs!@%6R4X@HE<@!iZHjb(F4Gn9uI&@U_Qj`6ywr9%eZI^P1I$ z%fN$lzKh?!-?(E?TxYw8DbH31WAzK_9c-Cvr-M8z%8J`0Ymk>p2jbzjy|$Rf9bm8`*-fFaF&^ z=-C~wn2sJF?=;OX%FSW{l(`%CL3m6>V9xN3MGFpH=FchrKI>At6|D|bEET~ob!73% zh*iE=7*)o(Q@69^$kiCI$mU5eI6^}gY%;vRKlfa2gAbZ``q=<%Nlt8u{P55vBJJ@b z2i;If%r<+}wM^WONd0ftv8zVE&duMIBJ0~|i0>KZ`I+^qZ}S2=-PoglPxRM>?lhWF z+yE`pB8q^y;sQJd@Z$PK=jMT&FhbSrHy;p$hGvc0eDrEXVSR*!^6plZPe&g5K*V;; z3LBI$vAgX%#U}O>9@dLvbBmI^pQ4T{*jy3Fh_S-VVe|lMU^&0p6CMnI^350c{8i3oPSKS{~8MvS2 zH9)gII&AC87>GPegRWRW5l7;cgynS8IqAY`4}4{LCJp1=)^n|_c~ zKgulMclI|`e6ijRkIrH;Y-Jf!$(_#?W4gAkzGVmUnS}?`>eBs}43Y?qQfxQLGfD%A zP$U6)N`IinB47@LJitIXv`NMrwDj0Dn=M1~nm7234U6R^pf4&w2&!yV*szg5zp;OA zbpy!?rOt*L&Hl5o>Oeoz3lq8Sf=TStl#4FzJIJYscnhCVvEk*GP_E&0e4;u1AEN!z zJoN6(fH7!=;b{bUz_G~Ugx+`h_E zLDIzHu)4YT$Va+M(EL9ALxDZb_4i;t7|-+?U}GMrD%=E$C62u#Pb7}5J6{>kY#X(k9wYnnt8551C!u6_EjbM4;o$2K z>;u`L0Ii!cG?w3^RDbJo3t2clYVgqQ9&rKlSXT*4xhT;T7F=)F{w!u^9UXf)U=l#bV>9WG2Q8pipL{r~P zXhD3>_Aj`Xo38;?9K$6=^^g4k7C%PtF9Si$?hoWYs7NR>6VZ#nX;2yRLsZ$IM}cql z8+?h2sDPft0zSFB{J%`0tyKFL=Gicq+Pg6a&`n?E_w}CIs<=nL1V*)rB}&up5Xyn)<{+Oz?O$7vJ?+uex9&@*rdS_+aQ0Iyc5X));nwbLiHDW!5}mI*)q-72*k3N$nHsgPt3-0;OVYn zn80eBrp&L|&h}HCjA>RR;5?}vw>2<2XUKbLTR;P%f7GL`H~=LGetgU+P-6t&W|mjS znQE{}AXW)AU~?4*543qAPZ@7KNpuf=ux$Un+G!sIc>#Y()ROXOIIWy!h4A37NJ^hHY9EaO1DE1m@|Xcy`h-zZjk7H9;&HsexExyz}?z^_`xhEpl?gB zusxDkn=e8NeqQDAY(p)#zSH|l!3weN79zY>R-@>R#Gt=c2fk%!`+yg+>uAQV3h(Gj zCT`o>f>!zM8%w>P9?RupSBP>OQ-OmnFAaYJYUQTPmSIrkb0Iw#zF=Y|=`ul>2Q-=% z_vwHg_4Zoi?8bU01bgwh_i*B`HL{|R3-FysZd@r``zXwQ{&2yeud=l%HAxLO)3#Cz zH$?~il>N)N2*X)pZxeOc97e1f_2y5`v|_pEts#SBBl{lFAbX4>nF&yV)grLs;{vq$ z%30`z;T9!@eKVteb{sH7n17!X%Gj>maccc7-?q}iU-QG(UXPQiCq2{;hD?;J*53KWJ2RnW(vrH}2mJj2;rAE8Q28WqPa zC?5?4Z6Dx*|07uMfVM0DkD&{Kemf&AjFgEf@2g=$h<`7xBPJ~RXb;}<^1{gW`2jyMbyF>~&3 zlz-ebhNt+(y^X{^Adjx3P57_x(5jqG*@$_;bXnXum4N znX&ANgGi5!ex{j2$8_h#AHKbZr8FkwSdVc>zR0xn1wYm&TJgLbB?|YquF#ee7GY>kY{Ii($VvNo|lW@ zWh6vZhe1(IZHG`r27;9Mu>{ODBt>@(KP+L$iEL3n_idT~jZdcD_0g(nZ~iq8wou=L zVel`b&BCx1kGY`!@oAAELqD*Mm3he&a4QZ<(oG1tOk<+s4>BH)cgKSIit-8dn~j++q7YTJ)5gyitaFI#BHeC1hwYkpPj;(9Zs$W zM?-gqUC0EkqCTZQrMz2}>kIQP-R$`JudaRArNDzxW%1g0{sg#7s&f>u@?)6RFbqF9 zI0D%=#^~FaQ|KZes)3RKWZ3QSvjy+Nsz|Uy8iLI2}2mAq=d z37BI&c)!V(_HG*|90xMpjOm_z_KQ(;a3W$pO6ekSqM35vzYyba{kiM-2%ze&1oXbp z8wpjM?d}K9HrKFhz;9){fiOuuc!-j1(8(q$%2BkUnsog0Easy`DYh8gjbG)x7-CiW z+9&yrl8qTuzTZyI?>!vjJ@`?OGGU_3knEF-lsu4vf_8(APKev zTf7HRKZb+lBWmv_Cz0S%>s()M-4A-|fd2c)ZAFE9zVx?#UT21eb>==V2}d;W#pJyA ze0}Ph2<`s5_xydpoC}$4Rc8f&K7u7lJyHSxklm z0Qr6}fIZxMc)75)1>rW$HcMZjdN~Sxv1c*7M8VPz|Hqu!#rx4Ny*X(L2KkO~uV-XR z)~Ji!W`H1fP~v_A>E$;^I7K7Evm`w5@=RgXtM_js4{@L z`6VbQvgcZIq+8wiWU4$MK0BX1E+$EM34f8C$HuD?L}^B~k&qABG< zf!zXKt7_b#orQ=WwopQs1p;!n=;Ay*bx)H&RS690dg4HIvAk&if}<4v)>IG35D12> znyS?I$41ULt5v*~!a5GR3tjx?4jvNne1v?#7V($??6Ph(4%BVDgx(_|x=74{9gx^`~5B*)`6etZCoe2+i`Va6v8fFr0l zbd4nf@xGI*%lUQ-I3xTD?f7U}M{Dmu^B;vhKKV`Zj8MB-jjdH}p8wWRWnq4Z-#tY` zm$?GLp{7A+PgS3pej|>cY-aL@4087K3z>+ryLut@P661tl&;hJ*G~Q+Q#~WBJ&M_l z=h%J3O%^2~{!_5th3Lw_F#XCCvrnGVy|ar{;ET|Zxf#Ov$}^2*PC$?~WBf=@DP3(a z1&-#TQ}q&vGd-B^EU+4|o%XmkJbwRr3`ohIgK1UF-3_DjCIN|jTTH?+ArT)1302~o z?4!6uw${1Kp=`Fq69wS8_M|&(xIl*q|F|0uNT*#5*TW6_Ox5^6=xRl1UN zU2DnIM`T+QBl+=KQl+Z5aIvI zP=bU6c*vq=wpjdPaHI-`L56f>iR=wV`$uR-hsF7PUS`iTALO1I4&-OJ4i}4H*XCyyPC{fhN3%N%0;`-&Kp)GZD0g>@w3=)HPHB#d z-c7njO7VoWO}ymGBJ~-c>atr^YmTF9_QeYC)vrb+2|t zI8q!wfBb14PGUdH@c8`u#@$p?%O`xU#)ip0TR~@RC}ZaUDnxgv_&k@I$f4|6(T>Ab z0s8u+OMbb`M;(K$gY*1@Js~wC3)kvgwvw0h&V?V@cfHlW=A{x23eej|A%9ucU5+%0 zE@a`_QR$2IfxIw|YTbQdm11K(D_EnvxBcBrw~Do|rjTr+(z#*p=Ji-*&FZY}uId}9 zVe4f&U|>}vdH;B(`C<9a%r-HRiN)J8)HB@`s7Po%&frI6VsRftUkTM323Jum~1kRji)|@^cikGb%9cA({Uoe)p}$ zh`YXMqnqdldMEzktOs7Y*;>wV>byPrX2^Rpbtw{W)@nCGa$H%%pyYDEWa$~d1l6q|>W>17v?51!EN&u2ZBt1~r zEu38o*N`NL$3_Dc3g$)c;p~*R(sFX^yxf}V5t#8>n8cRE?UKJ%HoLH$Q&khWPO4N3 zjm_>;{eZa#VehJIEw!x);GPh)!IfWEldaKazhUGB6Sp~PvN)$&@EsV$^v7IM3Nc0! z#ECFjvX>8g%+Lv#)aDv@+11S9Hk@xZR!Z;gbT)ZU-b^^8yLt+TI~Rz8E0x_$4T7Ss zpU!k{2yTS(>Ktj98-@=z6_U?LmX>%ESIX-TeV-RDp1E=Co9yT+tEcX=dF^fX=(3Y!*Z#i+>8cPNHJ%gGxf)?#a=Q(+4-+|C+A#e z9JUvko;qhu)0KngT0&(m7xoJ)N(ikTYysXzpq_x^zW2h?zHI~irf;FFx~9g7B}ihY zH@f8D$%@;c2uszo(|3yyt&oYRLq^XitDW8kw;36y+P|ShDa8ZIQxfICW6iBR{s@Hs zwHQMD%LuY&bRHse!lBJol<;V~3hm$f~q6bS?dTZxmebY?_xzsSn zSCKFjnl`E&vn|bCbS6e`bJnCKR5X6ZdDPc7osDU%eN(kxAJ(#m6sx(Y5Fg-#fr{77 zsx9}TO@fP-A@;}P?_cga3T+DCkUwikcYL=1MC z+FDJ|$k#18EY9FwOdr-d^g>!&qtRmJ@A%wFCG(W;(zTxPuIP&?gvehw53LI&XIA~Z zFk0+A?3}vMYKaqNh>a#8@zT-Jc z+mi{DUK?Y~_E6*RXPo0;L_s`j7klNHpq4DdFxdLUthY(=@u&ex@m6tf#h;MI|JnU^ zq6fE6;_AY91;3{Y0EsE`FMS=;VIS08 zb*x{*)3UL%&o7pAv-2fxD@;zYPrIJ{FdS^PLgZRYQFdr%cms`|b4*aT>o3X=5?7f> zYn=Mx-qz3Ca%Iau(_PaUC|5j4(win`x0HHQ*L#rNx&}5>sK0Wq5z-(TOB>nDt5kKf z7w6e6ZH+j%tPv?69Mqd8(=1#1tp%%AIi=z4gLkph3~g3>>vi^44|H64&ZHM{1?( zBvwmo7YiA>Ty7-AHs;h_0&85iUAudEHo1hxt_-cg!Rf(+$%F32WDPg6yya`h-J@mGa{j^` zeYe-nERzu$I2`8gKfHBfLn#vj+&fa`H=@G8QbXyXG zno6%Kt)nabQn95Ky`bnOnhGNX_2v;Ciw~PuKZj5&myV*+cABu~cgyGK7RPRvatWr9 znWTt+Co=y)r>rVu=P<)0iQRYjaY9w~8^yWV!M-%%D~1R@VQn#4{90NC*)I|$MBWbjzh|ATexDgbH_T682XOyZlC74N6(CzJ?oJw{US zSf>L4irA{M;JAHaCrwXJIHLD$Ix-e+Z~{jp?+xPJ%byj}KchO^WmcNrlGQ2;YPaf; za{?oZ^QU=#pR9Rq{@e5T2e1FV{O`}(K;9M~at*}vUrF~)UiHQC)wl$tw9$ul^Yvo# za>Fp$bR{*@_w>L~AQ!W=Vf>gt0Rlj@14R*fPVB+1-I#4o2!aDuxjo6KUGzUptm4Zk zF1C3;8>EZK$9q=k62oH0D+3XH8kL9a+)Qs&&7TAKKmYT8KD0vv=34d7?>hx?dV9L| z3uXK5;|%kDV6FB&j&q+OU`FoJ%z#jybv~EDCRB~!vdB10rKxAA=#}_O-$s7-hBu?`ZKihvuXO-VYH19Lj1zk-uO&KF5+7xaqz2#v96GBag zUHM_!ZVSApoRLjU>!SNIe8Q?}Q9rYS0v$C#Rq2dbjGs8Hrv}@U=0(W88o5_-^G#HH zI7gq%A)QNQZGGJds7`j^`mnw+G$Zy-WviS9j2N7K&ers_$VTq3kQ@;5kP>dA-f>I+ zw)`@1VZZ|-ANJgb+HcvH;tW2cnjB2 zuxV=4RvA){{rT-PvPNMrLFGn1&ZvO$ib4frY^;h7nvMuT-=Pdbm(BLgBY=aJ5hDU_lTWD&cSo^%o6( z3wtOG)?i2;))Gi+{Sx;3jo4^SrT80^gFSyCLJl~3aR#QL^}rF5@Z@m~oW;~e>zzEU zu11Zy)wL~9@fN3vbZ?TenfZS-<>)1lyhX8#Fh176$a1HAzr)(vu*zo&RrGuGANFd; z!+Z$7em}cWuCEWw&958oVy+f26Xkg1MjH!c0#eB3vZ|Fdof>Aaqdk{+gJ=09Bk|`~ zsmk+tTq&77x~G{K=~#T+NOBAJ zJ=MzhZavTR7gIc)Es3d7!wl6fN=uZ7)Rg!WL}i*$G@wOr$+Z!Sf=EnsXj6LSg{msF z$Z5Rq_fa?*Sf7r&FN%(R}AUTn5BZpFF>(~{5n`ys_A1tvj|p@0p! zt%MN`iH~n%dLqkzrdt0s^jK|x_Y>2_po!|~K*NvmqC$?-@}W;O4tMZW+(8)OZU!;# zX#=UuK4&D3_7EOXK5i57r z08`{RrS6eT=x^amj&&77G^T(pnBV4$JjWw}gk{fArzvO&U1!Mc^M(caM`KW()Uu!C zord)#A=xgIsfLW$>vLJi^hG-+G87Yz5 z`0+K6n+!dvWz>TZeH)xDaT-r|1hn_MQYHkp_lE6mJQBIbB4khB8f$(O@0)Fn)XI~G zw0>>|2|mbKWIk!Ao^kb}`5p1CiE=`@0%Bc&dz!7J1CT0U)N#K}2kFC8jSu^5Oq!vN zu>X$*n-7FRtm4)}N)`EwtfR`mpy=gQCy=AZsQTazwgql)&(Ry*EY-pP9BVYJ9i~-I zg&3VwR`v496qnJH=*hD+jVpcn=s$MazC^Xzj-;EPdeTQ2kxX+V8W3ugq8)7K)-n&8~V(w~Z-!{0Ayt zn@ellUa1xvQ>aqy_il*~-AxddR2BKNsh(&ISmVKkA;vtN*hWu~_~{5YPm z_Tnym-HC4@W?mF@22=$sSkkAPR~aVVjXi%YL?mT8pvB{6vqAcr1s#?n$mK$1HvuRm~mQqFbP~=z)ylfmTky&u8P1ZXGk?o2CCj2` z%h6KwHdGR_pc0cIb}jLZCc~l91Rjgqfp5Q+f`ba~*`51qQPXD;`s(eH%OP&mjyEtA z#+&JZ&mk>4p`}9sbK@%UIdb#UG|5^{VG$OInC1L@gyOqnXB>y;!S3r^F@;b@@XjnF z-7^$3b`V6NtnBN5BhVDE7}!~co8NjiCjS;ppaRSskyExgTy;UI!=_3AqF%14?~$4Th{v2tW#_Bn_|idfyDT{YMrg;_mv?UXa?K6|?}7lx~E+*%Rr1gMFe zyUp*}?)e)EdWS}N0a}|4g}BCP^Wb`OasD&$(a4*M?`XKYd9>z>j{=I{Yq5ZL<{wL$ zfOA8%&T_jRQX&7oj`;x)n_*zA5c`*08p1zRu;r1N%>kgP^c}J-3^0wwqXn?CfzcT^ zbzL%#0K?|-#vstUT#3t_E-RQIKLn2Xm{@F4b@Em2EI}sYC>k-m^;Buh9sslYM ziBd!3TkLH#%4bw6;-b>ptCb(_=1|9}7!%FU_B?a-a67ruBT31{PklhCo;{q_Q_UJY zSM*}rcUggN_-7+dbzvh`MUu)xgl5mN%@lSWxmS>uyY1-YNL_MOrI!d zGv_+R^5eW+?7HR(ZHs}TDN-?{NXe(*rzF4fiT_8fZ7M+S8Z9b$)&3&3u71t%%RQ4GD4jGtGSRy zeaqr4FY22y=yjZX4Chgadv&3bhPEc&m(&|o5jg=!Hq{rcY?8cIU(imbLe~&H{+tee zPi>DsX^{v49P5kC%a{~&>W{%Wc0h1VF26}O!Jms{&I z23?t))N%^X3Jm0v@h6euk&jcuU(R7W6|Ado&b@xbc&^H6+IRD+6OZnYNJKY?`$VQn zhU<;E-&a|N&Z6}@ZDmF^YKk5AQsz$|k!i?hqx~RlwW=bLqJ(%O`BC1j;xM>I%0wgJ zhHd=z{!fA+yt)n^0!f!vzkMdBRZvpgf}Nl^?Y^CR_);n58oGZ}7? zVUL$8kTtaMSie99J1qq5PkklOuc%*;urFBviKp0b)>jOD0h}{t9ddIUrjT2mh+b}; zX&Ru?!sx`4(}>L=U1HY~`TZPCK~4P3ZmSpQgc&DJ&Z9sheJ*Lw@bHsLak1mCgw4Nd zt$hvQ+(*Vqusj;r@sn<{tY zYcy|7KEj1BCalx}@>oCjW6>@!W$%OoS&=&mBqR!f8nVb_!p>S1Aq{`hil8W@@Xj)? zry)H@($W$hMPJnQ(4`1JkXU?WY-W8*`s(x7>bGB$4W;0YW!uzv&6)>kKA3uFpSDh= z*A4|}Nr*RUYkimA(5{4&?Y)qdmaWOH)$9xiPV{o}Q8`V1iZRrJ*W@(nPS+SfC;<6@ zit-noV33`k!v3(!Uq)R#;?$GzpZKp23M77k6tsSK{JtVh$Xrs;o5)vSLFAlz&ftBg z)q`^}kT>4ml7faN-9^Te&=8gVLrQVG1YKj0vi)b(tq3JW-cU>&6~$~Hkoo6H@%qp6ZtRoEMsaepLvJ2{o)$D14U4LpPZPCYdLby0xW_j-_2P z8lq**a4e+nBmU9*A)$?xX6elxQba#q?AuVr>Xi8M@U58u_rjsnTa%hqMpoX;pjftO zGGcK}{;#TD&a(2NPd90gG_Pq--lh$dVm1RZzkfFIg@LQG244_)xxfUPor&8!(f`x= zQ9}ZX#`(TepXEg{(}VM_`2cva-kY!kMZ{bdmr{ShS|D`yKQEwc5GWr|T>vT*tDJz) zMKh9Fc|_d^9u6+Y^SVS@eO)5F(e;gZFD(rwBEha@Z0Gr~zJze?sa&dXtfdh=%BQ2` z>}2x0Txto&VLgQ>$r7OoNV=2c8rF)`|4((z-$9*+&we4l3ddDD zVSUJR#jvqYaZTJmo>NY)+FNP@vw>bTvD!lt&7e zFe)U)i1vPRPIoZA*pMNP-010=8kLsQ%~XJvB>y8Ote05h`ZL{)kNDDVtT(uU>gVw{ z2LF3V|2?xs@%E~KlwcZF2a}bxI-7nf*-1fvQ+FD}7Lg_-6pC&Eh+HWXAK zgm1D1+(>|kR{i%z$p0RIum$xZgH?kRH#*oj3>i+pEjJ`w8^^*uQN!@P7_wBY)Wj;l`fGu1k#h1ZcSNv-Sl9_{Ihi=_jJ`3)?*z8(AbKke6!Rn^s6yN#WWGn~ z@!HUMd$?F_w>fsJ77RqNyt^*yW2v$otUV*}Q&Ajga9PkefY|1=VHejhR)4%TfsA@; z6S<}w%2PWn@aE%Izw+j{Wj$EnR=~K}^|W$fzqrWKQJJ4_#cfN_gSupG_~h!hly98L z*G`XEmPbnrTi?Akd0vN6$60r8<)klL2VduKr&bcjGIN-irrkrTQ@6M}?b@f;Qhu?J zo~m#^-1<%q1{{rMUsoCV8Mqe)j1t{4L>;ZQ%V|V3Gl*%xD}>da+nFdMpAoFF%4txK z%jQnq`>gGPZgJ=NPGDtnrpED_$F(yFTic+VH(zBUhFAS4Pf)#!aWVN`PDozz#a)B9 z^~a*ZH8Qs{OAp`4KIMr8!9_brYsTnn-%=T&+WEqeg>bW&dw`oC)Iey6*0PiD%i32Bo|@LTztzy z^IR6#U7&1nzNAnH?4l(JkJRp3qm&-s$2nfx^vjouArUGwDQ+z@#jW*c4aT|G-!=H_ zRThE=Z|e!9VnN_D|W}q7UPW=jjuZG$t(_#Ij}dLbU{Ht>3rq)->yqum#_F zQYoAnv$z@7szVRMW$bD;8!Q$F3Am$LzLY`VpA~JTSE`RSL%36B!UfgpUCNluZRYG= zmbWzNE;Q8N3^!=!v>ft8WSR+jjy5;38uVQoshITCI=$&>vr4nhf0sQM-OKK__QZty zOvPHaNu7(m3BC3ue^<^=$-*l3BltP}&9Zde+3O`CP}+0r8UM) z3%na#hAQ(a(?$s2tqWM#uy58o#R}@3$z5?IoqyWfxYaL)?x`oQ^`_=|n=2^XZMsbR zRM%hbwAwYfRFm@^K9=G7@LEDMAXmMxKL%34;AmMJ8UAx!<_l{dVJ-C7`F;n;22ea8 zxCPp+Vhv;hjH)%Pcn3LA4nbGE6TXx#NU`ORhk8+RrdC?B3EU3Y1wa|F#d^*nwf_|+ur1pm6g1GJ_OUn+E z_nvQ*u^j^IQ4^2N1zqXVOP9mUY5U7vg*!truUPN8Hf^=t!hWj0A~jMSzJhx&X{CI0 z@s)h;p;iuelXvRw%d+#er2;PKW?*EF_bZ(PC`4uNYs_5I&q;oh2s?{04FNinZ5!vA zNEROVsFd(7)rsrZeJyc%_W4p93YCQ>+@?^{a>likw4X0A3N3bbx6O3!9emEsyn1S8 z4vKv|J!}s2u0Hqk-t{$a=Y6;)iwp>Cq9b3ZkvkLdZhp4pDiiL;yT6R9CFF8B*W?bXuK=X)8vl91M zgX1#ZVhq-%#CX`2ZG~#(wUTgO^ly?$HR?-u((?5cV;Y+EK++>Ay^g~hd$Z;WV3RUhblJisi?zt3`Er2<6Yxot z|AhgPLjJI(Ri^s1F&W+4dBSgc^Yv>Mq%|{(ZkKY!jcD^_V+m*ac2-BTiuF%5D2vknRwW?vO6&?iK~#cggo6dd|H+@ALh0&h~lEald=LYpyltm}87tR$LfGVii%O)4wiqD+;$e2+_T^ z`94B(x)ia#XQ9hq(8SQun4KOEu$HouUt_bCsp7^el%U}Z(I2He%i&Cv-Za7u3Pbsv z{3_>*?JS^Ni~KUc>lp`7GNq^p!;F3obI8m-M-g^Pa(67|efA&t!UI&}UkuPiMRwE4 zvH_Cgu0oOxgGsnDt{+YeVeBTBoC@y~+VX<6Rm7hi*)`7)hjT4Il+RM@I)hbQS4;9{ z)L9~szFn^{K1-v-Uef}o(%GJi+(;04@_qm)g^C=}N zVH#hrByX+tSi*;*xyF@0Fae;xzNrR?(PgV&YT-cWIXG^mU)9u?4B371?7Roc^Z% z`W2C7om)5Y9c#;xZ&S1JBzj}oIcrBL%oFA)V+GWNU-*kMoRX{ao%xv2&vl%*`)Bst zt9+Kzto%|w5r+?16jp)tC3r52j)J_`pwJhT5wc>d5B*ATJ}Hc%u{S3SAS2-wg76+o^=>`)(HFydBV{u))Ml25Eq@ zSkf$6LS<^HH4DlJ?u-&SjOum6ePTn0?VI?^`RyN^Pj1N zpLE!waB4q@^{k&koyMI>Qk~}^nIA3hBa?erKN7t};Y1ISsg^pPavhjyP0j}}yez1b zn^`3!koJ|@@{d$WKnr<6ERMyk3m~oz%Sd1pj>K>SG5y0Yo0% zkI9PhqeUoC#(f$|<}-)@D2p!Q4ObSlMD{9xiFV$SVl1EW@c+OCZgGD4Lhv1_(-Wj( zHydPP*Phg>#!#!9jO;9fJ!VVUw4_*vB?dI_%vTIpu7v90gN{*pHhQ?3Xe$Dm%MEY= z@n!^K&jula;m=qOhAoGX|435*DWw1=Z^ED$U2Em_gZiNG(n!_f z)zd$S<$(~?t-?vi+k@~B=M{U>){v_RGw01$1chca$|(cxNC922U?EJ1iwf)Ucj~^L zqWcBXm}|2Z6@YMtB>Rd8KuEGernDgc^R1;IY8**;@4w~86q=+ZFL0FczRnIcp;k?h zOZSRvbl;o(jgk0QAQY@u5TA$J(_|6Yk;Y_*zNamh5oC*+P41{jah`Pm5`3DFsSp=} z7RK`Y+3nRsrkG(WX_ySMJ5WzEhFh4=l0Cj?7%q5U!2mRg=C%p#Gt$&XeHfo}k#MPsMJKZ1X0-~b@|fE5bWnCNK) z+2uU(fnB)Vz@Q|f&wc=+@oeGf8PGm@UDb@fCwAyXFqOFeG_Fjg^wqStBFs(N*;~qF<`8|H{jOO8h&R(Z%G^A$(;HXRPQJKiXsgM_0YQ=L3Rodg@qXC*b2amA!6NNpPO#qLEDe6vt z?r`9mB)ES98WPYtMw7IdEERN8ycg&%w%9NDq7UW-PT!s<;OC1y>0;#$NaDPRyFdBU zL_~-1-_KAI>DTj^{yYnNpG176(&tk~vd9*EVo9+>>evx*iiNFv2v=(ZEni>-`k4h% zMm?Zix_U? zu(RKqgXVF}uYMx>PrXSOtoCGCx^FjU3pu}P*>I3~2LDI>vr66h(eIuDp!g{I6 zB5?#x7_crylI(nWdjsXyWl@OlvO);N5AmLsCbg0(ym8t;EvIT|D0v~X9IS-0b7RjKUvCmH`o~(a;xobTumMwOPqqUz_u6%? zOJJBN{Zpv`m8)@FoArx9;CRGo*?EZs;tosb|2zH#L_{*YqIcveE{6r_22I$`Ka3W9 zk|#;R&;J8x?TQ16N=)A_1fz2l^5eI%pVBweyg>7K5RzH{-dx6ed?Ao=0%R_dv!ObEtqjx6+?;zUa{$FI` zAD(dfqn}Ww5iRt_-K93h2BOhchMu&h7^jQaVUa-$0 z<20)AUOA$I06Wp$#GM!QS0?GtMVXnc>E?^|HlrS=kTfE7aE^=P@ZFl54lAL^lK*aj z!b*&fAps!0Dn;;zmu*Id`QF9|&=bWysi`PoIanB2 zMFP@90@=814yUPMnfv-ZFh&HV^FPj>!ckMHF6tn0 z=zAd3akx%(zB1eY{Z4*hD6@bk%S4w~1!*k;%W0?ikupPIIeOOLRHM@;y{0(^6k3uk z5&N%RU;|blfHA~bxWQRBK6czN>51W9Dv*n82Cc9BeY1?y{HPi_&(aO;IbW>_nFrV$ zK^5Cae>_?M<}Kod5fsYZIJxR8YK7a;u!Qr4UbF_LBw~D#rG}XZg9IO+xByLtQlhgl z7nlh3)iQDkJ4K_lMU@Tr8M-3BNO#~jSE&J3%K!JP4V(}rkH|JRNJ+$>Yqzclr;8M8 z%%%DBBK?U(z!)Vf)^ni=+i=(_@8_DS>PT)S^|C`t5oy@DwYa;S0K|tP06&Amat1jz zcuwHKe}#)7KvN8cgP)8S(%3@;;(n1R_)p^Z&xbbzP^eu`pN1K1aHGrGURywfI}sQ^ zRtA4d{PmQX$B0P>-8o0@H=E)b?+2HtFBNPjmfTy4)&*x?ru33C1!w}8Xq{fjw=b|T z5dd?UrWHOe$@78}%MK5nBO@}%?hsiN`Jntkc=+dNybox9G)jX@D!bl~;v3!u@O_-b@L@*c6%W8bv{4 z5lAD!Iy#%Zs{sU%#jA;pSRWt{8Uz7Wvn; z`Ox_P3$p%QK)cXpUcTCqcx3GRhW{uZkL}pbuClJ@TlDW;Cm=5(oOpX{7;&>_2=To| zVQ1;DT-6a|NV*jBkx*szJm-230vdc^KseVQRH*|4xa|~^8HC9Y#j}2jow;JYjtMjY z`Znq5+BYQP?3Dp5*ME-Zf7g412-?G#xtarzh70=T(sspOwd4-4r6>Hp%KhLGCuyRm z9OApI*MyZSS5bg(uUXt&I*-m`XW)hSPz6lM0-@rLGg6R%!5WYp+8!%@t0dFu8U?jV z4;U_01hV{Jt1aLefGk~FzNDn(-S3yK5^;)7vP(W;1Y_ zrK$j^^Dc(T3qmwCVZhV?dY_@Qv-Bla<(v;7eTHe^3i2U1TPVIWPw9yinrE*oV2IR>PkPWkBgIQ1NLJVZxinX!=An3GZ7vJ4z72j4q zyf15Z|KRiU$1`k~6M$(IlTA77Hu^e1VxVaiUGf3g{Q;U3A z@UYXp7(6vr6M)2>+lWsgfKFJqC!gmo{(GtZ2@-Az5m=6X{k8qbA0ztp_Tt`Oho@n7 zzM|ikH}zHUrieXBSY<`_E*86RfQIw_{~tPqIq?r4DuIC$svret_&&Zod^5v#SZ%-+ z*j@+hT(5a5SHPypWr7sdk{Vzm8->72u*Szkpnr^wi7+l$W6Kv>)sl<#QdrN{_bop}Y}s_2FwmDZz_KJ_$pp9JRYe;})afCJx#InNTmZKn zskE?7rfPo&)qZxAyhtl#LlPW*~(%Sks;;0d1at&ky;0Hh4eZRo?a^)`@+(zmWYX{8f&$|kn4w6%PlP;j9z&=MVxfE z2Wyi4vA$-2E3={s7Ho_acPP}=X1xiI-OWa|45uTuQ?7fT^3MQohkw;A=_RXG;%XN0 z-#a8#rWpYQYT(S%R_`R{;lM25?QN@_N>NQj+!UmK5(z z_0x47NEO{X_ld*|7;CeI=U$St9*MY zDyBjqxn>fq+P5LHGfeQP6#j&?nZ86;GMyWTqL80mvde~QnsLHX8K99l!u;NZzt{1j zOmm>g%^YQc?B{?U)FW1v!NPgKrR%^x!!49|-n6&(RrHr2igF5y4$@h)l`k@a4w&+T z&jn>m#YT#~Lz}#x`0pl$D^Js0_cD%9uzry6a|%Z?`e}lJh`A(Ib@DW;U$AQFbztdE zI5^4o#CrLwM}3gX8JWW!Lcq+D$bq9BTd@w#e);$1^%%@y2ovAL&*(kTjY^?&<>l9~ zjWyCrl)jE1$mpJ*{M6a^tfF+>|B4AoNKa>_plIh9VCwxMpf9pUJ1TSMhIPW})N}C5 z)~H?@0CQr6d4oqbsUbd>#g(a9<<4B26e8D%yZ8 z0NXjKU6=ulQJFwkg2&n`h7iL)Y4o2n>DMW92Bb4*Ga)Z=7R|Tzwe}73(zO;F?)@%E zEh&5o&ENa@5IjFL2QT{suB5$FX!IX44M@gpxDv}Nw&O9X?*;M}I=$XzT4UL;-h%{VD7o#I|oPSM5PipZaA)VqLh1?@5&$|3JW zgym~RCtp_}fcQWbT+v6bF!}URc?;7)Wi#-m1}&`W&9jMszZKua*#sWyLl3>04Z8F3 z4Y~wtYQNFivE8f&E#c&6c^GiO{i!|EydA1r1qHQyf6Ob0Q9-<91t9ZG0m%YE332wH z{ueGWqQv$$k=zss|hc3#qrO4B-&|vsG|Z9w2!`8t_9&A4$!w@?H3;Gk(~Ir zp%+!tiGBejQ77+6Nu>ruT=|TW18sG#=Bot`bp5FH^kcQ-HZFfCO`V0gz3-UClaPoD zX{jhcm^hCW>|5@2^*M$4vif{InM(c(p1cId+(eqW?V;@aSHqs|yvy;=$ym6J9=MX2 z{hy6|6|suLRB5WIigMht$9f%$o`s~m^Ln2APDS>lIFq!jE+p3NeDXQKRZLP(>ozzn zbD~p{y^xxk7>e66#jCUGMhLXPM8NAHjDGMPXikMmgV&16q|bP%;(IMOqc}1Xki5nU z(4DEYafW|v%6D^68PDkYaTYkkoFpo$icxNmCWDV8)CTLSCSU>Vt0Ics^Y2o30|6Qe z+1S^EC}HK8;BM!Iwrx2JX7k2A>0_}t76pN_JmI_A6?ul|oiFW5^e`JZZCWi`iZrc9 z>-E9`%CXv!YfVQ&z4{cRk+qSO5m6Sm=Az0BJ9%;~PSFxMHlm zYAA9P0Id+hXX$z79&*y$Emmx^1vx)lihQAdhpg9>myB`iyv*KbL6zWo;6}uJFTpA= zAF%@BKB?43B#?mSmIZ=0^rnTV$?OSO-wRt1OS*wQksHz3uH1_29~9-^n6Xxw0Ti*K7K735l3WAZ=IWw!M?881enWQk{>F?AB3ma6?r|g8i`f? z#DZ$3kv_mJFhcOLH#j~-p}lg(BWqp{r$%2b1tP1_6&EP}-i6`@$BatCIR0Q_w$c4s z3Wnp?Ai-?WkCtKp3@D5`m(fZkV#h4~wXl@NM*`uS-v3Ayw$$^j&(MI5Kf~8_kM_}79?=TxkFUq8s z$PyzBxCUY(Y+NsgGu5z$^tmuEjRky45kUF^VV~TRa8`TRBk%hEuG9bnJBel-2q*ev zyRY3YDlbm47?za%kE*SJsbAOG4pKdz&xs$9hx|YQ$uHD}=4S9L40^|jTVI@S)wH*R ztzS7-t9Hagn5Ma0-aP7w-ebEQE_u>9^zH(KD3Y8`&$6)*`NaKt`oJgIUNGP0YSYXE>Ykr3KQFr?X>^6yPk77UGLEH(q@uP_$E%JKLdrbnliXRBArdoc!`PY z5WO@MFOAOpOE~p8y`;i7$@vbFgu}mxdM2x$nM007n=G^BpU*iBxO#z6K z-kM?FaRU|HMsr3hioJjt?A?!Yplp@Jc(hcEdge7>%yJg3Q zk}kZD8{j_G9hocjAwF%{$#hGSeL9ltn@9xOpNonUz)A2KK)f6}g8CnbD4>sj26Y=% zM2>HR1JO!rQ^+qe#F6${rz@&{ab$}Vx$!!spWD2^OnZ=D3e)#|(iG6z(!bijc6n+j zFV1G!-I1H$+21ct*%?-)en)$bKUn%1!O|%%zuum0bi=b4b<~9}U~wT%`8~TY_WZ#< zb^YS=6)LCwXD2^z^x_wa=#~{_Z7V8zQ4v9Lb~cA>J%(q!Iyu^XX5{sC@Nb*EzVIgS zC$>V?7tGUsuYz9{!p3?RaD|9gD0c(~QrT9G0CZkzmCg~sCheo1HTTbNAuxcmT?QZr zgTx(mxgNd(0FP}1Fzw$}5*j(+Kq|p{EW6Pv?>jXe6Y)-jlF))aaAT%DRbHUHoOX>0 zW{LB2iYEivA{Mo}h7QTnnS8gz$``C9z;{AuUBZuzVmO`Z>h4%*!^Kn-NC8~LvfE8E z#k7HrNNd%3TLN9=B?kqW_hqqE6vsz(bLmzDqvwdr8u3Jy&mB6CWQ7ylN(v_c)-#(b z_4n73M=39EZ@)OIj3AyDyg2PbJ4vnwjfvrp)vhNq0g;zZMgi}MDKw4V?S)jzVz8D~ z1+n~skxx$cIBe)>OJ0B2_%?L@`3mF(OjEYov_+vBLjm)LmpzH7`Fie|+!ULX-xii? zzJ&#Cb53EkKoJr?#e>JltuMB_ypw03=DUoqf!UuQDtXsJMQ~CXXNdB z#A1LOE)cv&fRbtVDo3!Gip-bO%IhRB(3+JTe*utF;DIBbZWa^0^Zs8TEI+ogp~b;y zRSPNdB2XX?d8jCofa$J$f8tJJr4N^AU|F&Tl_P*E5kNjYsCij%&sj78_u+kAkt^Ch zu^1Ktk)vCFj2iFe6{0V_4PTCQNa!tLrLzmXu5}rQ6#37=Q%{$OwQ?P zIZlrhSPhILTAms=BU=ZU`UlnZ?fH1_H@zRMvEfJ9WFvN(M2t=@_wc?M=)L5B zQJ9-hJI1j^B3t}2Bfx>7eqZ}_6MZh9b2@G4M-xI5=tTl(3`pF1nNv7FSj|d8gXQnL zm>yF(Hh=&2x?@XHrt<}nxeUWMG!}{mH@hv&b+{%6ZwtwUCuyo}FMEsxdmC6(F(5uJ zdKB=Ta=UbadVzIYoqC5m+rf`OEQ0w;MV#$<-A>C=jD7h?Xl#NaLB)+t4N^tKrd@*> z&v1!S2;RvYy_rOKGY!Y2mEqLPAV?}w-IXw^SkK9lvsC29(O3t|7z+1%ayNocYPM#5fT$YY8PPustsOPDuEK7)npFU zRO%`8wB$17vg7A=mFcp=Ai>NYJIOJl^7-tjD<{eLWssRU)P}2RG*A#?<^&>U;2@C> z?c^ac`D*t8hjL_hn|%?_M&r7-O%o)CtHgm|gH04(V8;5#*czdh@>ZIHWOXZA>zOyW{)mL6~|rH#-^8~wL; zum8u&iHrg~;qhxBz!2KL_eT>q8P#$CNg)|^fr>l{MGRj{?Lvh-5n(+|`;YdCXnBt( z0Yg}lgH`4iQi1B<>rE2rJ*?;9$mNd{EE=@PI148eLhN0h4flM1ixH8n*il#=fVfH5 z;nd%;b)In)6TyoEY4jcmwA4}Z-JT%O3;P8t8$3tc@NDAyG~vA?C2OpLAkNO^zzOJ~ z=7&&2G)ZANcpx#H?<@Cc&>nrU6oNtkrGFIN6mit21g4-ge8LDIzq#@14q4-V_xykT zy5sv_cmC7c2)WwiKtIDq@A1LRtiO(7x>fC`ZZLL&t)LLS>$TB=vApyZq;lxg2azDXg<`4AH>s#}}Gm#A!w2kV@YOpsRq+#xHXZ zZ9c~y8dNgNPzRdw`t0_)=)S-W+<#DVB7y^{N9ft8!{>!y0f&T#Ufkqxn;5i>JP?k% zA4eRn;ga1h0^cEs;cb*0?4tz!$Du(!8&U$J>>Kuzw5E@fNro#e0iq!H3Xd{QfK(4`lpNI%^%k9Q zy5YKx8c)9O1bdyDBUY!_qQ&E(N>z*Xb4V&amL0r4mjSUqqs$Pfepg(m=d6tk@<9Lz z;Xqz}ZMwTaiF-F=}ioC)bv~CvMUTQR>Z4iww`?Zw+~>0K|dyt$a<8X)Z3M=N@>7_8X#m4fr0?3~O6%yeW^%BQq218Q_|j>FDZb8nDK;Lf-YG{SgEVn6w#Q|I`1;Rp{m)CDVoDWjjY57(J z62%GO83yK3YaAN>dSw4GYJj%_oIuAvlzQ^Oj)x2BIP&x5wUJuNoF z)=1712yTS%ekG=VwgIjm*m~u;1zb{6s^PwR^NMLOZ`**5WDJBk_v;^1z~}V+1)}^QxpH%ABK4jHWlj%{oqi zmr_MofVRd2v>C6qh)=o0Tby09dZdxx*9DFnoM1*N5sTNPen1sIB5s)ZThYRRU3cE= z&@hPK{j9%KC~$hN{-y@lbzUiLJHaH!Py&|+fQUz(^R=7fm-`o$i^hQf0(K%LeVSx? zfPqUIAP$Nqp831=rmPR$X?XT>h4rln$Kh&DoONu0_%sR2_?MdrQZ1d zI(CD(u7cX)BEK^y;Y012-i{nzovwM*OreM=H&RWR?@qANa$N}1?_8GdVy@?*^@w4h z2tQ|>vbU-zYe8`P+h&G35jX;(g_{`FojD$rAhsxoDtVn#!Gb{$ zy74kgn0IL40dDKKX9yr-*P_G?QfX?RfPksbs7MU|CH(xgYcz?8CCru^P8MHKyCx02Nt#V-orrzO$*~>@##lfx$V;QLQYs%zRg2_>Z8f3 z;|_-(sP&>^Fh*}V<(?-fX&Ot;EcylGkCWW*idwtW=2a^3yGv-tWK(S<31A2POpR?r z;dlAIBzXA|`+^JTrPfMIt8$k&cTvD}b&3lkwqh7;@FQf$yeWSB#yR>F zU#1X@@RW=q4U~Aa5RD4vMBSTGUD~}l(VndIP3b`yP`Tqr<_zp_#E{;Sm-V=J54oAn zEdcLVHmKB+1R5j^^mO|+(P?@qRlc(D3`zD>Vokl_0;bLkZOzHWN81##K;4#qF?=fK z+Gco`<3y76t=;xHB|PVZMAH(n03=2HhnMcy)qlOJ^-= znTAL}y6r(Zpdjc{OFpa~;TGg&LR=c`WT~C60gdq%_X&fJN{TSkO&z&xng(MElQ!#U ze>vgp$g#R7?sph}Bo7@V=SZK$gY0$4V_eMC1#*A&QoQr@Obv&+dX1rR$eR%aBXAQb zdv=C9Nfg&YIx}LUck0S(R!@+Ez;#_aL5gclp+;g*4)f9X(98U#%<-|iEUR{C(XxcN zRN0;lJalD!u~fQXSf#>gY)>>r0xl&4#&Ih)gm#OGF2u#>hHmtO|u~HcPQ8;bJd< zm1#4|K{do^m~i=^vH9Gql&HGMATNu^oBJfWn{&%~R7Ro47~}8BoZDsOQS*uoiUG4E_8|?<6a>IpYe8Vd6c8pE z!EGpeD?n_qB-J=~p~8TB>{<=sw0V&cfstyrqK zoEZYByZHGr7#WLS%d7>3;#JqFHqhVYpkVL zjqjd*!)hsVyIs=P4iSg@c^E8@3^ETlZcz7FsCvOTv;!b4CQFOhI5y>%L|9^zl6X1} z$%lavK5NS4`&vMwYQ588Z>5dafq4f+*IT<>>9Z-KSK&oL3l`>QiG6I`v4#`nPssA- z9CWC&fC}iyjnRo?Pu%L4p3Xlc>E?F8-rqi#8(i4qK;yVglO3ee`aBA(i2EAjma)Dt zjb^(Th}_?W+F;&3MuhtU!~;24<#byIVW+UUlh2muf|~wE_LWKR@7{uf2F?KPEq2Y* z>JLKZqDd`3b_v^&v*_@|iMy#u#CbYb6Y>y27!3k-byO$KT$EcDJRKYU0O59;%+lR% z2WPz!jqS2s$g==LtXzS0^dPcKII8!glw}|ze7(WbVfPxDcL22bEnI+u{Z7Ev;zAAy zgd^kjOAj(m1f|=grtY{9at7SAgCq$js#Z4X=2k5bpbjJ$odUQFaANEfKJ37&X7CTl z9b;(mtV)@4`sivKXR%`|ulK2~NVhBP_V041KnbXuo$uZV9+{X*z@|+uhHb%@9K0kH zLvd-eh<7X54Gw3bR6)LPLBt% zwvviIHC%a0+|n6w0%T-)5!F761sIS6^$A1F(Y=Jdx(b=q!8< z7!Gq4Cm@8;d;D^{cxDY2T$nr2Q;sp3x0uq`dEXCsE^193FtwqMCJQp!yh`kg?Ruc| z>%hW%WfK?2Irlx$df9a}xsI9c8W5nVA~gWl0&!&^0$s4j46d3k5q6O$F-`K0zEAjy zg=LQB-w`kcm+XZSFlBFwHMjOHxZ)q)>AxSEw=jX9?!!-2_V&~{N%OhgMBi1%-PI|@ zv+B?31hEIDaLBw(3By32MeN)L`+P5RrAe~EYhL0ZB9v1^90|J8vJ}ebwZ9~Jwz4uv@0=SK6;OolX9c(=EByy_dHd<=IX)Qax z-QJA<5kuz0(9|u~1OfQ7`ooWxoo&*7!nwleUZ6HA5~X?>^=nZ%fTWhB^Qi^V%+#=O znZAgmm51R#zqS-$o}!P9{$9A|>)!OH9!;r2fy9tFpZaX4dSyuy6W+1mf(S%u4PrN( zwks36*m4OUdlx>41Ax1_`$0}9V!9xttS3#Ly#n!Vw_Y@~9Zt_9Ob#jt+mDa*RMd~e zG~&$dEP0q~Oghu-oTrfk2xd*Ect}QHp|_w+9FPraBDfDQYUImD(@+Nsm_1{Bzc$J{ z{51-fFi_xx19>s#pZjHFeY#nAK^X{0n3kfB@sb%W)?-mtm5^i~jA(D10DNKlnd8@; zdic<5eI9^F=iDyw0DFsdh6;P(bxQ;qhZ5%Bxow3c@ILO`8diR=hX1rsZ5@mrBYmU; zO5gp6RqqMbcsn3w`&9;)90yo?g&Z>Va3oPno^U}ynz9^~@aatGBrBDWH%;&XiSML_ zdPYK@tFGbD|GQtMI^4d_eMYM^MMOfZ0X8^RO2(p(xp(d3$4Kw*cq*wDrZ$ zqwGL(7aVy-UWjrP(@LCek>=!tC+Zh#p2uwHM!I|qTy_1QR9`wc)u7cG@n8I=i=QHz z(=9pQUFY$(?3niz>sD15jQht#l-!b2CPfOpQFWAQ?G=OGy^kYrl1-0mmt=P=H1GsD z6(tPETye)k0{vA0`YPSB3*BSic@C6C8AWyIC9F%*wn|itESWAyUgl9o_r70#CCCA6 z@M@QUDAiK+Vp0wfI0j1Pb+m8d>M>$3T6(D0=jFD4xIaY07jXkUfPJ#E`7%s^dpagq zBTda=AK{(r3k(X?X0HrQjo4taG)W&0oW{>MsC|?E_Cb1qrr$1haYB*~f?lA>U2L}2 za5afv-R)_W8MGWac0eyOJb(IOn1zU$*wVjyU2DC~wUpUm4<(eCnHOiPH@qZ6@$Mq6 z9sNa02m>tJ$tvQ>>eOZ9#&NnXIbwrx9b#4W!R1oLDbIPO(jj?t^1DE27aUllSx7t{ z#O<}f!0(2Ojkt)DR>`$6Y>V|0gETeotQII503>dzS`91p#o6CQh_d!|ns3^ss^jvP zCp~IhsJ+67!wg8KA=q=<^`IISB;O1Zn+)!tJ@~aF%~hb?gjK_vIsywtHB#ua?3ibq z7^z_Nqd%>1pKWy-$P#5F^mHld3pKTwvgoWo#+dIKTW_<~4XO5Mpuk9T?4C+VR+7Ww z4_E(w&c|Jr*JpV6XU~yd;>ed3spU#iYAG{cJ!f@zd8f@2%^gS&rRVyR%=y zkZ~jc3FNvNjkNcqriSKLJ*k1?fvg#PMleOM?HJz2A$%36A!sje!P8kYctkX7w3(Ge zmDtT@D-?pMHr()x4A%=@887)6!t10Uw-5DCrINa8Vj?c)S7t&KbuT=ppsiBh>6aOg z;)JAJ9W)Gwoo%_IF~IQaHcLE`UbY|Au{?BId_^aHoE+9~Qo=+`({Aj@N|799vYCRM z@d8y+ewT?@wcg)l`&^B`@qB8?tc3?3Ih|k@BluOD1UsH5=0nLWa*YXaR_@k8$J(wp z4AN9#gIy2#>N%|8ab@pDBDygYTqA%%0BtN3i)sb^qtM_Av+I$A}P zLGURiJnqG9sTM6-b-0Zl;~Rrv@nd6?xQoWOzFVQ;M%>Ou$+F8<%_`^OoQGcbt+(O@ z8y9MH?{XC!rT|5P?0-^t9~QtC&-MaN>7@0r20Q*?w_Nr6zzDm(Ky(i z7`n0%iPCQs<~&8FcL`O}Qb0%#f0^ucVbaInpFo||A7p3UQI<@Y&2VKbG*~w~avp2d z{_c6s#o{ykyZIi5T96{`7a6Z}+{4-Lqvd5QR$E={=&#CZj!_9a8mP%+L*qxAcSe=7IXlrYxPjfJ^~QJg!EAPo#yJmXGsovzthL&Eo^%YliM!aRxM=C z)Y2~oxVpDoA1X3;VL8s{#bi2TSsDU^n5{>F&K?)dk3a)lF_Nf_{gC!^M;=HclzIz_ zQ&PoY4A_dw{xya&n}j%IQy4kB#KbJt*oy0!d!Vqk#+$?GfHd^2t0AIK_z17HilFj& zYIP8BLefk)WaIO{7`-H1Tv456?`m}zyIuFRC*~=Abtxvqcnq2K<*Y~H8hvj^H{|i$ z4$yLc$HO5iajz)vUbU}z72P<^|555>B!;uY%LK<;lJZ;ed;_@ynW5)Sje~4t7nLwx zqtwigxf4l$$@-Nie=%?7ui-qdpzGg8*rg>1L53RP2jY~P@s&iwa%{&_mILPFyoMHvKdGZd$^%uQ+n>Q7(ADG1A_+sHJtOqJ~$Fa8pI_-OEhr(+KIva zRx#Ljk=?I5m$^W1TdJ$Tv*YV3qf4}0CINPe2z0T62wsBjV?D|rGcgLYOXY-F6sa=! zw9-3M4zg(`ioWn2wwA{J7TE^rMjJ{ZaNfCROG1e=?$xU6uo)8 zK#3)tU&i46>13#t@O0w~Ukjf;Sg%OqrpiN=RiXqr6zy=C1IyjEJv3ko+_{b@|s$yYYQ1@csyIEX)SCoSMN_1OC{`Qsn%<4RD z^SVmL8 z_C{>hulnse`{DafgOa9a=WlV+Ds0ck{oL#}gJdk8cWqZVCbdnOOBoF+$t=yHq1j9 zNR;|sJyc9K)ECysh~HEFa%PwW_ve`m8JjO{_dXy_YH>_XJ&;%XX$&M%QS}fl(~D1G z4?owV(lm`5d`GxBq*OV6(XxrhY=f1wF_h?wLHr)!Z%?5F>-}W72@$+cro^_xnpOFz6@57&^5^0pR#j``j7FfPK z{PB}`DS(pnbE*lg3j5LK+c9E^*DT62ZzZ$H?boGNG>%o%KDpOonYG!I@wJaHb5Se~ z(V~g4c3{&n5EJTBY2QV2|B&aAcyHuCYJOCgPvy3+7RqQ3{ow=9M;aC8qbxHHx-2;L zI2ToD*U^~-3HCz_1EZ2Uh!oQT%+=HsQptNSZFks~OdE?3bK6+g!bUmRuPL@czI^AN8#1F)-EsILC`43Q7Hn?|f$yS00}6 z6S5q0g1@}2TAq(vrETg2qg#eDUhcl>?UJ8(3BCR|aqhlI@1OSMO$$18p9jK?Qiq#j z2kT9AiaJ8x`Lb|_j3E{b@B>{&0NWGKaBJiY37`1!d-Kp>H?Pmu`c{iNa@Z#|urgzM zWf=e4g4cy6z%lzFK4G++M?5?nHDWkkv`7bJ!m!|B7BVVIS9dOC;cZQ70ONJOonj8V zwUDUSkQr$Yn?isEza~IalZUoS@ne>AZLs-LeIAHp`yneyvq0IQui?um&&!B#Qyv;) zx6)pmIoj2LWWE-RI5t6oL?9#S$tz#lIhT8s{fcD!+MTieh1WJ!qmHPxzh{31r9skm zV(Aav)R&lmSqA0Wbv{F9D^h+upVtyCP+@NyRWq#wihs&EcuHU<9@_Q)*m?_~IGZkN zFd@jG8QfhG+?@cyJrF!N1oz+`2yVgM-6goYg~8o5xVy6tuYJ4!zg5)KR53Nuef##6 zbIuK)DTy8oLciQAX4oPRWFdp2uQ zZZCU2>(E+#uWOutnEym~^)7swlcgJE&v0dTwh^*8C~3kQU<)uS zCk4!_j?~J*w;JFRE?cJGrtX4&?mf~<+e zl`?FkNli5Z5}zWbiQ9;ln8Q-nY8Y5*CU+{BDJo=M46@BFevUhzG^4i_5Uul1;T@L9LR0wdfi=OIDE+P zoHxWHjArEsgox)%iRKX8uQJ3D#3kG15r~IC)xq_Ooi!@rR9r40<I0!P zMzoF2RTU`Oy*2U7J%V$@f);U5^4QMl#^%b9+8*|+x*$=~C(5LY-ZsMCE~O!C{)PX$ z-*42{h+i#|*NVx=LT%0JY-yC15J!=o$4HnsfH&VFdqS#LtUOnaB4mk* z5X8Ofb+~xBMv?6LK&Pn(mWgzd5}i%EJ{Imd9~Q<`mLaNl8tUV8lq7T^39O2@eb<^Z6gWv92dM}_$x>xBO*d8i5V%^bzX2eBSEFO&>)O%D zoqK>4Pcyy7#DB0Ufl!Q(>=mwc&|q z7iPL7(NGE6?BAc%z{JnVe1U!5Z+|$iH(b|yUaIN!(1)(_@+e!s{c^Me)!-j>;PPw; zT_tv<+(kJYgt`}j`^*9zI>;3qQ;L17A#A+_tK6rr$+@xe{l_tji{>RFZIrt*m#x{F z(jfDn^N)Q>+djiV`U=xma`6|Bk2PDFgAI0OgvsNV%=tXp%uL6#LO4BR0pT&w+zuee zHbe7|i=wSe8xqh>48GzQ?eKA`W2edQP&vNwALwTygOyg=X6p0vhy{M~+4*VhtJD+T zKR@wo#{bYQCVkyzU(FH_$AM(|?b3x3{Ubv)OlCClPX@^8&sDhYl-0Z}+pdtS+avn* zhC<_AM@AFhEn0k_nB1$Cr$4dt3}BabMRwoQo@HJ>O=)kE(AC$8J+DYR6AA5NVssH5 zxblM{(M5&%hxO%5wY!i+X1`_D#F;5w>;omg4S%3Ch|5^fvNb-XYIeIsRQGAW4=GZ?mtRD$aV7oa?Z554WZ}COcMk~drT9)X9hZ4 z%_i?|Ss40+C0C0`07R10VMKQb`g%j2MsKS-v|b;Js_4Spi+U{wSw`e zq+qTZj6^wbB+U6X)>8yiCZ#w zAIL&}I9MG$Hox&h!HFkpc4oyyr>V{oc1(X-&bdc-r7PV`%?-wr4)q^t~=s zl>`b|O0c1NpmAa)w2-kF1v>$|{+B{}>BRz3rimGs58EebvTI#`Csz(sx~=G*(8(qG zHVLHFEQCf5u#mxjP_gX@pdIUqwCe+*O-uopD$Em&Q)-xw5}n0a!_u`hvB;CAb-0J% zatOL)h6DU;W&8Bws$3AceGHtP7m}5)CP2vF5696E13D~%g!tE;sdknfsjR2S-8uZ6 z#L@F~)#L(7&jOmNY9{G211Ilv=-TBYcO3A$uYY^{)PFYgUZS%RsOZ|v|192rlCNE2 zv&*K;Wd2nrw#U3_y(J8vmG*H z$}azsU7T^iOp(5kixUekKGTP$@fEGkemf<^qCybTI=%ixo2JN+V9HRsOPnsOmN&RL zK2Eqx+%&M6J${m!NK^Knw)4@Hh{Zv&H;piMpl<}X12VQR%GKlH_h1B~XAT~s9i&!` z2AGNZ#6sdU+0eenwpgNoPrTd z@&ro;J17gvK46Yz!Szylx@(t|tBA|`sHbk*)Ht5}Jyp^B4*k97JEdz^47rn&iF1_e zyP00v{{YpKBCp!YU5OSc87zDWjU{@MBBuUiAau~h#-h>9%_;Hzhh;FtkmgPJRSiE+n_i7A94o@u&^gqFnJ)8g`AiDg$R8c z>v#yvQ}_H8E52xx6@ft$Rnk_?pRd)P-Fch1A`0mSxgY2d<C^3MxfR+BWpCyUEzHtEpd%)t-<(05aIi28O>gNl#vNo0ngn-vU_nT87<%V$aOZY@TZiI}}K6ibgz-SMCU|g2^zl zQRh1b8-JCiGS3yF8(=<%;;o687(dJ@5C5^njNk9&Hh(*LKl!1q>mKr`FTn;i2xiVQ zF7O2296yCGE;Et?9_lWF4Wt8Ho)e#XT!NkoBXr8<|Cpgc_V@ydYkvIv+ha|pe@BJz z+lPHU!Nm|yJ3e8xPnb$)DgO(H54gKQ@{G0)p?=(>Wg-y?F%gO{6ibE2l&$kcn=9ptypyOD2I`6--o6bHr7C-3eGWG!l2JFG6WPdIZ)Z*% z&4e1N@%!QOGBp4TGfjDyIOZG5Z(kqtso!7paMc4$4wjM?h8yO$Rp|UQ1aAfa3gFYP zC(hA6);H-h&n#mJK4oc9Z7c2RVoFHdti!kCfMBo><7bowOuu$kNS3$tA3 zq4;tV?W$bcL#s^JXufWYu~oyZr>0VPQa1iaGTlS6o^M8S)PcpJeqxU)z2=)mG*D{c z`lk;eJqX_R*74B9vqsS4H>6y7M7+vq+%=3Uo1J(!y!F3Q;(S1Nwt*Q5_)}7)28w)j zd=%MXfWr zm8m=3T?v4Dug^SB58#t}!Ya!N%=HgTf}vFc0E?-RNa5rDA#eB^w~Oo>zlKMLt;3i8 zFTnAihI&o@{pMi&+_^wypM9)M$*I(!>t9!n zwD^7xMG{4vv_f~OWr32gT+>*nd>86*^5+Q2r!f&q6^9?qjTO39oxhO9DDFBj&Ww6w zTB$Ju?O%(EMrR?a9`oL}oX>PXHN3e^tvXoc>*xV>?27VD>92 z!q{F-$cIg|O7$K$59}ws;ll4{3jp#kk=?+>irP1E~A_XJGcDImi z@v|-xYX4rXfhUQ@dZEk5X^^O$Pv!1g$C`JxR!|l-{Hb*=5CzO|<(y!$(6df`--5PT z+N-eE&Iew0+DdFHrehM{b%#vet;?PqqNX)n1e#3;Vp*%4$=1=2>u{C(AV_)r%U2EIh2bT(|PEDIP336m+-9wtSK8vehn9+V?pVu4y)? z9-eR^L0?ZzCD&TSIf=Cf2pF_NIsdl4B;alkzIZ(JZ2n1Jx6cZOZ1KNMng^-;2UnJt zeC4A)lf25bfFE;eO;R+9)-X@|$!xi$)-eGSh7~!I^$849wIxeCUHt``03NB@n zQ4a=0cI_CoZaXK<9Q-eV+g@`D+MaX?Kq+R{S+HmB+IR5rrm`JNUdj1N`9@0+CqMoX z-FQV!pB0a2r1l2rV)h)_N${jh{;{ca27g0FT&MA+T=NGmQ%CQ8aqOPU1i*UCq4Bi( zNAyp1mOkEUqLBFwJxq;$2e=EQ#~4^+!q?Wc%roX7Uv@Xn`QWG!^37$X&c$J4(lmlZ z>W1~bu^9k2_$TwETEUM$4}xMg(f{kYAS0W%XfV~aCto>Xx7Dkuezl*I48D^K#p_IW z;8B_HDEL`l^9|zSL%#>1PMbaBNX8X3{4GI2x-gasOl z=iB0{mxA-atrG~SGd7)EX0w7z@>y$%WQ~p4!N%NJh!P_)W6vk7P!d9rn^zrm1+khzTFFFJ%7Cs^Hw|ZQ%*D%+h938LqVkAYSo0 z#7AA&_I&;C0G~o0{q-X~K{H}QS>^4wgMDCZ%alkd3f!*H=RR84Zh*?i5xTUm^WjTC z@fjM$=sdK2W!`-%FNFgK&2X4DU1x`$e-G_nfL}Fas7BqgOx#CCVldotbg(FPF1t+j z)|?bUdLc&hZ)jHUE|aZOyIBY5>#?}+>VX_H5<(S1JLcUj5k=$7%iU zPc-RCh!YJ2_Qm(c0W2zg@!LrZ=Z`YN5@yUwlQbeLAhF6Od7kh5EAQH zYzLSX4n`k_y@wQC{HF~~u2E6A3=bRP2GqOHcI#$=pNiW?kIsbcz=8hH=YqLAFw8^# z22+)P+EDFmQms9o;!;a)=f$4z^$-TnJTcR!x&MfI@|17oFRaq?^F2HH-QI37R@}s$ zId)u8}0>gGsMEmFdpyCS^6zXPSg==Dzf$Lj7gU}05!h=6EBz&Y8UlQ9B`vnIULv|^f z#EgOOlJpyKd~|P{glhJLuL@Y)(hM1)Qfczn`|%~fykLPYNZwA=DG6rX*ZfCY7Pa(p z$GRJyT=u~xR2_unz6kN8HbU{>BbVYTlT@c{y!cJ4zWR;3E0@ae=Nv=<2H)kA}g0klD_4TVZQ}h-Vz4R8U}|$ZdYb1eh8d})wr#^_-EKdI}+b? z%uM{M1oT4Iwei_96N^=C#g5-&yo{3!2fp7VWqTPHbS&#yCJfKIO>g)^u=Spq;wP!& z{4%mgnG}u5bFboN47M_cy&xXRa8|UwdcIO71PZqpi)!HCpRq?(K?+mBS6chiU|$vF zwLtllyc`8iviB4uuv5GjzY?8n{O7jzYPhCK{h*wTU~l`zZ7dBZ4^_04NPN+igmvdv zKUWou`WJ-V-HqSIbnO56Tt0Ost#ws9?N{k=MXpJ?XsOa{3?guwZ*|AhPy7|6C#Tn? ziE@nj=ja1#9JufDAqfG=V*pW?kCQ)Si>a4Az_#DaL?ST#k+>DslA3G5U%;*+kH#7N zH=}Cfg~;M@4<5t@q&EUkdz%`In{DY=WB;kXMpbxOl6*+^QLrAYIu7AI;A& z9a6}|Q!r2t$}l>0AKlC8>dSgtRVucV{me{|w@N6x{V4BE_rwa=K*U=-YHBknBGR>b z1Bg>MBBdUsr{9LSWO{!2L{xRxPd1<$5mY$m>T!o`=n{1aZ+Y4!RUT+#ZfByJ*rN#V zlqgqx=1gyem6^HF1l9e~AI`;7EU7cKtDnUQjr9M?mfOpb+>k>y%`%HotTC)(7}e+I zquiyjXIagdPpXQ4JI`RAF%xbKb5anW8Y#Q)K^Bt@`a^&h6h6lDg!>fLex zL6Oa~m?vTYZpy{~s6xduuiCKLl{{B5_hppYgC%&27uiZZWkE)B)BvDCvZDlM3qN^O z7eI5my&}b31CMH5X6t0>PU~(q^8qr>E%0=t2~$mY+JA|G0%bMSq170Ba%+pe!~JfQ z>m>iERM!I;>XC)m>5lV%a#}e6s^{gGQtMov_IR1m4Tehk8_e@UiE@D7F&b~T+^$9$w>w#GQ=@ZF z3J*t}uDoBE-DN5-H`&u4?MiZtV+cAnxvYZiuK8^&|qS%Ta`4S z<7P}Mw-lJc3}C=^E9+(4ufNjT8f!>okiL|beRSjS!V**78N3CA2tg*=F@Sm50z<&r z!|BUqpeQQ7L8;jv0vQ5V9h^+7fR-=jy=J|X<`hCD-PL%GNIFrhNXX-=hD*K+)yo0U zTzb(!!*-J;THH<7iQp32`t`qLgW>g3=*|nW<9PA?29ui!|FsH@xiHfYXQor8b5Qko zw}A$pu%MQqmh}pN->aW>mm6CY_{#=t*inHQnPvM}*xw?|Jc|?GF-jPbxv)EUTLSaM zOoX8tckr6cqn(|6DWX4Su{{XHO9A}ZxQnl!e{I0~c85zD@u>eEobkt*rF>bT`XbPd zo70G!6A-pXCZ?yv&W;rp7d=|g{o~lH$zN9;*%_omA8A@cS54ZKU9a^ ze2Im~2%Uk4|2n;ZW`Id63qA+c+{vTVnRE8);$Dt6!1IA6Yt z60ni#*G*1AReeC$SIBd~U_v>3UHG4%MG$I;LVoc*q4Ne6?)|ueWY@u@RPG~8)zU{0 zK-ar@PiR!ib~+o^3$`JnFgSU#j7pRW>@kcFvi{6uj%2F+7X$I{82z8ej9hqtRPDh@ zVARjbefh{5#l<}_K4iG@&%br)0Rkba%G?HC+ z5Giie1Q-&bYVfe|4o?xa{Qo`s`(J)A04IT|f^!NnXr~28Z!z74b1GK!3;*T?=03o! zNhAV;wA>^r*5<6nVh|L!=LB#g3Cnk|0dW5=A}YWQNQ{FT>5UL12fQvo*`PZ!HA%cV z8W2;sm_Af6b^d&H4xly#Y z)mdcR;52T}aRJfD3S<;yr`KJ~zwmi=4hPKy8o*}ySTE2tNc3(_1GDflCGa~EXZ~Yx z|3^YHv4p~N$h{}z?XDbqr?|pR8B_&e@Z7p*dHz18HG+cY!fuWZ`p9m{p&qY&=D1!6 z5lut;UJ6RY;s}F4a=v3#}6Uy>xMs3f3jaMR z7H)?MP@h?-3vrXq2T1T-#M-I;6)Jyyw|}j-%1Z#7W|@lS-p8@Y#Op&~bgFFH_c^u1@{l|NFeHe?O$N3_$zb^9@jF@ubNGgKtME_^7~j%BkB*TFHM zeinr*$>gNdgv@mRAL8g=A44IJ@68f02lPfn(vIydw@=^ycM$wvL?y1|;6GHzimkpH zk*ihd-vmkyg}Pe+zn6=RnzfC{VwU8*lVX$x`rtJeLq4aJg~I~w z|FRK5^cN4>XkAZ-O( zT@?ravyNJ_43w%-joRQIhA80ohc?{Lo4L>7{`-yp#}~$XAp#~lD>2=-F-mYm7M_X_ z{p&UW58#j;htBNlAi!^45sNn*bM$(?Tm&q5ZTK`^Np+GL^uYTZ z3~6-l{gPa_0Q}g(x0t#ApUGr{Xh0Zh4Il?CQ(10;wkguZep&w=w7obKWlG)3FWtx; zC5WbeUzqz$GMb zG1;N891=bP#Bs#_(Z075{L$t$RKGs_V>uODfS0%UB+(e5VsbOl&&;#%g*19WhiL&b zX2;F|&Bg5NkSxEW^C4;lK&(9h&H|sKWJ*Hh+zJcE?tC)L0rUU4UDdF!izleC@|B^# zC^Ps)1gb~6w{pudk|&S~1e*g}?d8@=eYr=LVb}f+K*2|)N=mLzA_;#~Ne%|Hez1As zcKr}V6fOyc@0rZbSj28z%5PM;>wX!`zUuRam3F{RZy^6Y9b?MdJMHy(0x%*+{3|TQljc{;(&-L{=(V)iDcOf;dPiCM!m-y-|+8W z$*2=u50Fxb3iBpQV|TI|rpyC^!=E=kkjDFFE&KHN%kGl;h69B4P;{dQjlR+4EzmQ4 zpn*d41-m6OSI+f^ChQOKpSCHkpr-$%=S3Q#rm#PJZ@v0(Pm-`yrS31_0$xD`qEbVi zo%k3O->>$CT?e>akef~m1SgeWjnFcHPH1iL6kNa@DiF43=+-upch3Kpbp0E_9HPnV zbvtR*aiL-<*jep&nwe2hQHzL3riDlt@sM(JY2dB#vHHxt;q7VdAn$rU73zZfcyDxU zFL?}ijhXUZ?cwK>o`{iWS3l#Q6Nk)6bn^hfMpkNJR-+R0e_2x@5ujty<~r zWX=#{ulUVQT-@j1sFI(klH^&te>KcVuU=h(N2{V5!I3*5=(2@w4Y6vKy^Gh_O+C}w zkp#XcYo7>nbX8y#`aZ9$G!akE*b^Dh>O1guqkYFg=*trGNOn2XpTli#n1uHOkja)9R?_38>nWBa)(F}yBQF!TTj$>!p)awRtFM=)+hKvC% z!wTV)eGjStbyok5y;{j_Li`?NZze!XtO`6BWlRknTg53PIZD|9h+njf&=#Hp7j8EU zdgrePu4OAe?#Fi$s*)Jex z_zuqMfDM&tCpP( zS;A{OehN5I%4(fyV)nDaMPnWX`%%7aVZ@hJMqV-+{(&!RC-LW-i*MJDCb_PJTSEO~ z8>}<#k2ZsvROvC=;ufF)*tjI)fxw@YYG^Zd*9;$wLj$F{uJ z?mQxX1>`<2-4gqP$Sm)BZCX0d4tskZpt4sJkw{J`FCLe6} zJ`b4(o2dMNoag z>|xcg^aoDF-l^YGy~>GuE*zRV$8U_Duh|Hb8cuy=WzE8+&2o$xQTZf9X$eIP zjd~r6+^ekn+B78Uq)MBSEE1`fw-RFGVE^?1s?ZFjZ}iJw7Aa{AEM+bXfM-igqGOe8hQ z9qo&hN)cGSIW0#tIc8U$if^0A{gQI2|HcQk|)sN zeb4dZAzyzfr8i`LA@da(saaYd_tYQLk;dXK7$<)rIRK}Y%nPf#pgYnuXyZ=xi_)t@ z_bJ!FAe3tH1$OFIjr-BJAhj=EXd6Wv-}Jvk8FylmC0xy*ye>QsNA}}JsVN{y_}KqZ z0R5e9_;4;|O1zP#LV%mGU&11*> z%*>JW%oxNR_T!UZg!<3xc*9V07q3eIvgRk^?1c)%E7~n`4~+Xjpz%YuRxn4~-aVSw z#JU5CCKo_^bhhC}%}SRha{U_E7}}dp0kVjX02}Lu;w+z(hjziedG5pC3G*~*2B1c^ zR2#(@XSDQ3V#rj40PjqPG0G5yJZpxQ#1}&KMKvk-pNBNPU^Qx(Zs(kF{8mUO| z91!K8!@F*Et3!2yeLlbSx7WsAXab^ohH3{rh4`sWgM3O`{Yr3lr_>36usZ+6AIQ&b zaX}RIsymr)UXu>X5*moKD)WJ(n5?%>_}Y%mkVUyefWFjY_`s|D2n@{J67 zFQjvaYCScBwOxmhD_Wm0$ZO2@-@%xGP@^7}0lyh^!MLLCuJ_60r7^GcTTE-U zDlEyAz;iPP%K159m)c3YP|8NnU$=f;V&@y1_E87QBR8r)9G1f5->4D^ zK@|%DMPVmPEI3C>Kh$8Q=yz5B1>9_D-x&yCR;mXM!ar#R_9J0g+SfT$1wS!Odo|j` z_JlA0@jWtC!B>C#j}xYg|6Vmh+q%E%E5uJ=4wpjf5&}P!@ZFAv9f#G52H7M3D1Kev zwh~1v<=A7ysuFIAMM^ zBH?j>J80OFOqJ>>`JVEmHw*zOJc&-z#O4(#B&&+}a2dH0W~M)s^6LZdJ1N9xfOyGU zD71J`&KT^UecqZiGFcwZ;vfjKTK3DHteLPo>y(i=l5J7*3*D^R=8rc+!FRIW;Eg6R z>}Rd5*+F`se`oq&0m2@~}tRxE=ZvV-S>^tQQWQJn3bC*8~W z>C4y!CWFmZ!BrnYc9tUjpP7`dmmxogB?(a4&$3Vo+iBOPoiD$;%z~6{2n#i&mXhQk z*nL>_!zVln3dVpu5|#VvA81wwEXSobtrT9U-a@Y1%MGfP6qT$)2g|*P(KibSdhlz* zQth&Fi5&?|2kUcKOm=ELX(#0Y6c3XX+~PCEN;s4JMb7&zFy}(*dc!@~3534@;oX32 zn>5kiO-)$~ca39}Z(CrXI7L)b75AWI(o)#KP+C)QHw}LRN|PS}N9+Na6ZppwlVtG5Hyte)VPTBlC_pYM6QHOT;K@JKo0k;#2!n2{1buWNebHC?yNWSs1xk-^^5=M&8qZ= z3zfbY<$}(}Az+FfW(9)aGJ+Y(cx%3q5DqU|s@IQUbD=J;A^f6H_T}CYAiJFuw4>@C&5zxl*v#fkJa;_W47LyWr2z92_(>({#^bTIn4Bz6q{Yr1hPV~& zQ5WE6zKrM`vxlc~2|dVq-shk)Uua@VXxflEv|&TR!ZLlpiHu|g-i$6K_x#YbK!m9}tKGGXMnAONyMUjjOE7$=2;M`%EptVl z(Dt3$_Z(p$uP;!vTCenp$kF=%$L~&`UObV?s@r%Z=^Mmg?tUZ4slJXTW;- z0i@p_t3snjai#O)*ur{AUsFcUcWlBYLOOPRe0c(W=XBLmX%+hz#G zmm7%$l8L%ofx=eUiLQ;_qpvAP%1NMw5=#6n9~jjYqieMF+f|^u<#Ju5f5guxM_U#5 z+H(hwHBLRSWb`ZpAWb@&U*^el+##rmAtSMfM%-Mxlc(yxmHjyx z;byN|i673JY@H&Vm_6+E|0DS0+arp)fv`vF`(<;!U9o(`Ht zP%t_T;}DGoJ-iymZP_ieyC9*c&vx)o&ZQ1*hRJhm%onG<7A6fMhw&ao0Q(=?u@|x` zoBai{GdRBXn!+X)b+o5Zu6xx{S2gs=ajZN2e?9fEcY+-yr=jX^fCjm@plxR9doDV0 zf-%Dm8axrod6?fl51;ibpKiMb(~|{CKO-f2xgRydAiuv7Pahhh*NhX$+s3}egB>_+=T^PAT?$aCjO~X_?+!wem5foZBnd zu|-Mr^s`a>*3U5wKl6+}*NWYDDX6X!MGejf2bbJm-=fhH4em#~e1L7pg?Rf-?^xQU zq!kCOTAU*tsg;@~j=SlaAMIZv^gQ&Os?Y@{ZLO74&wH<1wxp#6@F1#A-}`mhleWsg z#abLX_cM^y_-!_Jg%z>hn0Lt4rWU(ADYk#A2JJ)^no3A|VxOtHDpF;lvHC0Rak)xE z^It81sfhY($KdwYEWt1bMlpcy=pIU<%SB1IoNRnj0h#XhK4so{rcA8_V4@I#n`0C0v3J!t5e*(n74iWj{UWFn~m)@0Qvbh;{0x-zCY<$ zI4u2H3yy{FWf#!;B{@!8qI>f7{s_WpfZ?d`qr0`Zte_jn6s{=1Pn(oK zGg)|mil%rznCJo`wZO6~T!hanqv7o4I3C>II=PmUJhPZh(P!aHO(Zk1R=W4Q+UJdY;SGi(C{QPw5>;k`dzY@!)IK2BIL20E)giFmAQGy#n>` z^m33YBZQ~X#K3Nr@&}lr@l{5Md=h#0Ru%at)kd%@NZ@D?TQC@Nw==v2U9z%rG^5!5 zRtc|3dx8q%)9ugO^;6~Nbn=Vqu7`?`8e%NZDm zJ(r=7IK4&FQ+u^(s!i}N`z72rR~|hySH==WJ9;(LZxYx#d?4=4hS!MHYMMbG*!_19 zZcx4x?*F0u5Z!+HP1$9a%%_29-b8pA9-RZ8)R;~46BeT0ynit9(;w`uLuJy8jj|p( zzK!E%U0tHqO)vXH%cG0jpUD~t3`7~*G1wu+;@@x>{|Jrh`jI-b9lwMW0}dj*q; zpSBVe35la1KJ|Ql(mbu~ToF2S-CcLMI5iUr;@7q?ucYsp*~r>wG%=5C(9V{ZQte!F zIn8rkT;InWVKvX_+1n?gV`FAAEVPM<+!)Ch zG(7vvB|WwzbK~l!pJ|VZj$%!`_a?dGLLehuFbOjOR4R!e6zOnl`5sN{k4aH zUC0HbsN{E1DCBpbdnwKM(%}u{V4Db)=&I4fpJh@IXVzZ?4DYa76?f^jOyci+$gt`B zI>)bZ7NI=(lGO`|uX~$h#A)YKRH!qyrrNu++I_=j;sAjM_e&zGQ_I(V(a~47#J97x z?eAyFyPOX!&)u~b%-Ya+OURRZ?&NQ_T_Wk@Cx@<>!nF|Zn_;Ond+fZ=zw@(H$Qgab zbHiHKW>^)HTteI17M7guk>H$fd70*GQL+cWJTj3cqT)z?ZX33MW!38H zf*f_@ew<+-AzgzWmLdA-Q^rM_(mPSH+MGx0Be5$U2r#t*i*dTW>iX&4B>wF32CLt% z`*}%yL@HmicF?Hhht8OwmK|L^n?umLN}^*~?Kn;gw+$-stz4{?Juz4#E4FBsn1?+d zedwPIaCCpdxRifef&Yq&Ga3{QHXl8;2 z*F95?ppDxCYi25*RFFLBk5`dc5h4P-LaI>Kwqmk2j)myX!b_IceB$=rO`z2X&^b&z*;^v4y5X;?Lc-{*$7|0!7!IpDc7ivZatyn<`0H_=}M ze73tf!-qCk*73EXuX4~Lf-iryv9D&va6H}-L+#f29c$axvA#JWh!Exztx$Q>6{Fcs zxUWpt0-BNDpWe?3>FnSnu(72NSNqnU8f_80+U7BWiHOs zbXA~Kt-I&qRpF&4bo@NGC-L$piTLh8lS*x>0g0D0{=(Az8-wb+&I{-JW%ho^J5u8) z+~j^P%Y~5q`Ob|?%OD5WWhD*$R`Wx@6swRoeTV)Or!xesK2-uf8SM||#<5I^k$Mz~ zmoBMXS2)BupT;XsY2jVo%T#}(iBR9%dsVCBNSgin%!Cp4iT>j`Xdi_r8TO{ zvH-X5f(;gOFF>4O|2(b_XGxh)GrOiY-bT0LRDnG)1}3W64>6n*kB^Kv5JIc1Y|C8E zk$HavNf1y%7BewMe>86K#)g5ZW=%Bgx=Z9t6Gxz2diL?QACMFOY>^7Y+LSpZLm;aUj(Dx4&i<6s1CBcA6h2%e zsh}&9TJZ<|7Ri#~nogP#YGCfC>_J%PxuGeBtqE zrOA1Fjv_6uS8FaCZUtIQT1fZmB|nsTID8$7#FnN=jN=t@5}u!+TbuG+B6NR6Ns{AWzRb8njQn4W8to{1W&K?#N3Aahw&#>D72I41`hocf*-(gs{zkRF5 zQd^`Anq@8wYhzu?4HxvM6#QW-JkJ$okfBXYLm*rp10yVUfK5jqSDD+^wx9Vtr4W^+ z(P_p+{{~oxl+8a6b>Fpp=XR3iu-=2g4<< zlPD7eHmbw$!}`nY_cl&rNxxMirHl(o)Sok7H}L-&5r#Nnjd2E7@%|A#zr@CUlxAe) z&Y}uRbGCYik_MjtCa4C@=ov}~ELs%5B&;TOaq(dEOg!_HIgvN3R^>Zpk$S<$2y4dg zexEWE4yF`<9|@u;Q>%G&*jy&Ic?4Hr7-Ox zMe$`NEl;(R2S^zB@oOPm(JljOp0cgj_#@&Q)GvhyUEgkwY}%gukrMsZ39SSoQ@X_M zBaKcj-#%w&Tm!xs4kmWQ*sfjHbCdKK_*Q1t0&WO@a!G+kg$6 zqzqa;^_!)^At6J?$nr&;Keh@rXLVvZt`+EMkvljk@a6gFjAC?GeCDQQHgyjrJ897- z;&PHS+fcs_YOMR76<{b*0 zkqmEB>jRlaJc|s~f#+$D>6yos^JjeI3*ti8y_-q5bPa0hNQ8(hRpKLL2{sMn=Nac{ z2b6_QPaX`%NC2z*NlCzjVGgnHI+oLzv^0CA@bw@-6TxKv8&J~Sx?HDE4X;4>RUqEJ z=H5vg+Hi+!F98tSnC{7;5F}CNi?^8tNu!s~m-wUWE~F@(aEyaono zd?$VmM+AXoF!!cja8smEdRzn{JrjIR_Ns3C9{h1dc0ICgF?fxk310SpWL%;)wbW~Y z<7{c^5!d=a=B_ESxcI*A@VcG!_GpB2@5&qI6Ocsy;+TArf^{h^@hd0;u-UkLm#Z~q zHLqkmT9U2+G+M#|bjfQH{$ zNii`Ft%(xcb?>ozZa#6ApDw-AG-AuNJO@(J9wWn zwZM6XlG?jy!vG&0gon(0o!bW=2YToC?q14$*TMot!e^JFS&yT|Cfy1QI_17qsz>3M z{h*~?Ny5mdLYl&^5ftDiz0m8LGf{-!5NX?GDw=rKwF%709?;%;a_Y6he3C4p@jEX< zUwdLMtNJacA21(X&&>?)2%<|Vim7@!Rw#eWR+PU;o%Y6FO7;q&TYM&xV(uCj_y>_o zE+`{k(a%)IIJTIp<_KV^M!cZ)(jfP)lh@I%b+OOusX6L0rz~twZ(y-lt$1hM$Zs1CfjH zjIy|CCWDZ6lUaw|tc5$xa_nztQ>Ggp*Nu7xypyFBUamh^T9UMD9=>7l{LCjEaqj{! zCi@f>rleBjMrUDzg+Hz&t*!(jPwY7=;L2^GtFelX6dX2tz`7S{Jw=I6XV^oG2fs*o zt5N8y#B8C7Rtm({IWZAUNQ{e-+ogzgcqeDm_v0lfJUd1eMX z)(~hPD>$~YIh-d^85%}RNA|;(i0(CRUX;vQGq`m)oMEaJI! z3ajsG{F=%B%@=;lqf_ZAJ8q~P=^_YaDThb)vRqb-8i$VrV?j%Z*8-IO6Tl<^WHym$ zSg8nm7gwlO0(X_M!gd8>WG3NGG;QcAPw&v+_eQufHMCp973MlqhV-3}GzdWCque#s zX89e#1kSer_~VBrK!MwFY7z{EL^y_(^lP5FuOeO5azbYte%*p#@#OW-00O+)x=rbm>9?kQ%LOzI)$z5DsqtpeO1uaKrb08>^ zXSvLlWzRt$*MlSGUuSbh;%ptGScq`kv4m%~?J;BWqzbzN=#+pG*~PdtP6Zu@29?v) z&e0-E6_0?iJS>!ZHJ{@^4eQsRE5T{|q_>IQk9rfm1U{1;q6_0WpL@)p?gC{`YWbF{ zH=s1NEGis44lianZwW;;K7?7-72JoL&KSGGfo`*q*6SJe){k zpv=jS;U`EUJc=8t%c9t|P@Zp{3)k8MEQRe6gm-LP_Fgv3_tvcBY*;P^U7qd7<7*%p z2)RDCj(ri@4_I8#z^WXXl+4go^0@s{Ll@DxddvFI;K1nG@dRAYs@daHXbq0JNbMT= zFgZe8H@IBp^s2A->V^S6HLet&vr@pFI>xf^wp(DoLBKwK9VZFlnHr?2zdm%(czK*n z?iA*B>`yZ=CLmw%p@zFRhy<2V>SyvTEzU`Kkf;b`7DBzO$=*SG41(~Sv)9Q7>0Qc{ zo2pmAudHr^nOBtJlmvHe{5$l7T9SNj^GP^#X_nUw8`T9Y?8-)Bdwf|{MIy>Jp0sy7 z$r2l$tvCuC>7bku2vSM9So;2M68sUv%dYSgR!_ww#}Lz7M1oms4vwgJ z)&Yv_w#BAoL2DAXmf>L2s!zd&p+`hu)0c@5Yf`+?#%XwZ|2J2@d68~dq!)0eq-T{V~zcw#82{a4lr*ZF)xzntQL#F{*h@&<=Az4P} zaNKX^EfTSQCif)P&l7aDuk3s3#Y`F3Z#zLK*!_i3tG;NDkNI6!ZE#Ak^FetpGB;%< zI1pJ4R}|`rcw1{O=c^1Ls-8;1sm}T8y3_h{q8kj)%eCyeb2@7s!y9qVCDi;GKwt1v zU!K(W$M!RCcMl6*5J*sIXR&)|2S=(5YaLfrwC&tIrvH$* z;Kug2?%|f^y!FB-Ycg?gH$_YJJ4*T+^FRwy!ypCzs;y941IDhAs(F;O(CCgZ@LSX$ zZV0~~cO);FTMed@@-ypqS^)p-E&8k#NNVq(8wT&r*KNyoWN~$`XDD%R*fSBo{+qZq z?%`1T;g28p!E-Ls$)Tv2W~Y6wQ=DSqsD-r940b4hG!!Acioho z5>yCegvCX55qUdXtRmR>YM46bIwrwcLMZ4{;GVti)hFuq^RCP$9UK}}^*kogJ(;Hj z`ZB#i7KyqMBc1yq1!JU#^5>II$oKAyO3a3*jx@U{f!m9B^QOhv&;lV0hGc^b(Y0S3 zAG{H_QUfbI+ngpkSKYlQU1lHHef@HSmT-w3?`f*0@bE?Yb42?MLc86B*8#fW#&Gf0 zN_ZftzSJD-kFxBBhL11 zIcuS`kJ{2?*c!Sw3}4EbmU`J;&T2ac1JexL`Es5=+pFQ zzi#06VAhin>FUm+R6$eq*b`m3gMdazKDqAsDk%B<`daQgYc~iG!ri*?td5QMe6T|z zb-9v)#?DZWa(zaB0@ix7;6a0kfu6H>o>W+VoUwSRRoZ5O-MYxBO6-y7-w40m=uYAi z5vl8+hebT%y&mRs5*%MUW8Ga7Kkq(SnOSrZ39-s4?K!F9x1rx>mlH|cW}hi6q>y5Z zx?GP+5|JcXa7gzS3Wx1ln@IM`l8B}^+KPxq-(9%8jP{N}_tLm*rLpbzcQ^x;O?EEAg#)Z*McY*HO>Gnw6Iqo(weN3NkvW*wvL(-QxI}y0?|^;r-TB zk8xW04APS{B%5ZmOPCav>`kxip3nD<6l^fU7g6Q1 za!JegZq#ig4Twg;ILDUv+H>m<4wcVuZ+LcFLb^oy8jcqd`8|5%4y1m?JCj@Kkgbs% zCfTv4c6tA7;K+LaiU#F;`7&$>r64g1Cr>&y(D~A2Q0susU$e}3piJqAx>SDd2RLTg zS#h;2p|fM-2TC}+DhQlCL8i>N4KvtjX|~ka$or?%UbGQb4!X%3bTuEIa;C-v4(^r% zR2ds6$2y7R$obY=Qw68Pib9Q>9sBUuC#0;K2Q*EX1Db618!w*glUfOlxRQmRVX(yi z?!6AJO*U!mY-5QUW?-dJmZPedQclXJ?~C6};$L5wst{=6btke23QYtk9bx{!V^Ohg zL^n9QsI8)pR4pM@e$Ir!MJqQv)YK3T>BX$GU4elbSv%$rCH!2QBV+o1xV1cUCA-NV zP|Dg=wj%{E8W)&>s`zU*&-{=N4MY#wOe)}QS7RwFI@I}(85%h+Aj4Eg-xHUqO*&l5 z!cZzE^DZ~~2cFXz^b_hM#OawUB_I}okuoPioewQm>UqEL?Mp?9M|R5*Lh}Run;-<* zGW#VtpSAX&T1VK{vh6HI6pOO%yHd&}}o2MI3K&ZO^$5=9KF0B;*%K9dwIah}19D@+V-rJaaxHfxJ zwIP$rL;k7tA(h<2mK>h*f*m>>OS6n#-n|&T9>ox{gVJfKqoArT=#BfR=tLMnv<)=5 zsncq2<}>IH{!D|)a!wcQSvaWfqzq)OTV*Q);Jh@^sQ5agW@F9Fk|1fH^_m%Fy$DW& zi`Buzt9)-TVP0F#4Xob6*+=bgaByOlO#%8a0z1Yc!d=)EEbrpLOJaf7vf3Id186fZ zGd4?OQ4j2+u-ml&^zL6hpb;RbhUHJ+SB-vJaeii1QSdPRmXp5EUCcyKbd32;BOaV` z2=nQ(d@#SvqrLTB494M*yQQ`9kye)M5qz8oewJEJ)`|6upIY{+W_aHd;k;8xaw$lU zM3k}}(X}uuzR*H)?>O097sw7>mZ%Gf{e+CF=5am^o?L|3xrMhN$&={Q3q#5)y0rxX zrwjkj{5OuG$RElfiyULqPPc4R(GkT-iOJ;#{G@~ZY>&qs1`1krep{Q6I7O6RZ(~|p zGp{mLql*hilD|9lS)WVLK6T94cQ8-+Cg^{7^=iF+x$_gFCIl%5)`loPBetv8)TFDE zBA$MF@w4DGeIZ(CMTp=io`VM8nSy)rH=~&o#D^ygSd0{-~!7XBwEK$T|SJwNKpwQmth#r-$$ZYPPlAm z1rL>l9>iY)`>Nc*epWM?6!|;$Q zk{+F@@tb_yUUtqovwGE9BJ_S|n+8k9#ghHU;)2@#SjCPfBnwF z2J`wA+KM^?E<+b8m+iZMelWcV37&9wtJ9^8!M-3%3`3p!$4VNWhH)s9x{zMB4M1ap zX{rTy@$VZRWv$jq8TVXm9?DsMolb7r=W9PMBM0!5T!17(2A_X}&b^?ry}8Dbl1eL$ zoIS8^#P1`q-hcUVJ<+#$tcX{9*kTP^hU#Hyhlc<-F5biV0pgbkxe^oWUQ$@N*^!Wm zc_z|XA#D52a3V_Z2iufoTpVXt$2>K{PyQ$V3#a86ofywB=_i%LhRjMNtc7bvO;QM> z;;eN6@&?Q3>;lTzS0;y$_UD*^v1M-Nc@YG^9Lp@V7k4@&w`=qKD*RX_E=I^=cJXS< zf21YcF=sO#oXkqMy8Pl{pDWj1GrP*sN47)d*oS#5yMLkzkTInC?O&zcbrqEHw?*Q&!c&>6g=T-%H*Nq8g#AWMK@j9#Lr6Y z=cbVXj13+OKIVkOr!Q9zU)+!t7LMbTlBh5d*?B2T-ELRbwdpTZSU|p>NY{I*gQ8dl(zx^66cml8XYW60<0AdWOi;DPQ+Flwgh#bynT4}-2j{2fg$&TxeyMP=q6-A zNaL>b)VL_(mtD!}C*hpC@l0@d7!5APFK;X=M07O`AwFi4!Mn|c))0!#Ri$`|9v}-W zjBsJbO|s7xdr!SOJc6dR`cyGsgwn-;zM&^XUR{`c8`GGqYb98=nh^pVgULP(dn&)h z$-{_4ZnR=bg>RFZE@4V;t(0HnBIy?nL*h%{Tu* z`wu)PDFXU=24~fl4eCE0dsmbECJ0gjA=brH$MO9y;E~Ko+JS2BYbcDXxM^ksWQTP< zBwkDM``AiW@FIploIhXGZUwk&C*4h9A1jHMfs+4KCNFhR?R%FZk%CHDv;W3?WEjtJ76O|vh9o-_NPeMW@Q!9NxlhqTN=sSkY2ZJeN)_t zcZZw9&YH6}^v4zXr#@MYfSSz`XHf@$z3PQ`e6UDI&a>aEJ@~$cWcWw7D_RaDFvI$j zG-JAt=bx-FuI(Mf|UVKEKvF!rHVjy4XMV3Z15vfjX zBV;_BD$mW>RE|B_nQuO6spHJ=?pi0GZ3~>Q1~^*=`+ioN^JA6NpF^T>oTCCdq2d)q zejaW8{eclPNI{Zlu4#(n%O(%(r+u>Qjf5G!gA%RzO$Duot!>pznwA9)OL!^v-=CZJ z4f4r~zLl4c%t~|c-4o^kK+^T6cV3FBnVdJtx-s(Ha zo_Ih1;ilSOnpT!6HJTPAP{KRWP7oXV=f^8Fbos|B*0SP02(6jJ=q+$Z1yk9o!M;Tr?&lDCY4~lXkMqR@w{*0kbXW_EzaM!32u<1Ux@%Mz^%_7uLnAA^eB5;TZOaWzt;d-s|=!CIRDe z<|G?HQg)tZ$x_Kz&Gu9vmMDBY0!KPlBUWw|cew>z@SC1gphWp)wD!%>IQgueeRxyh z8D8UJPlWM}Gt}G5{<;08ho4)*q4`n=*~(H=WI$61ziOWtrqaY1fSWAelyV4L5U^T9 zqL{vWvE`@REP!NaN4EIgzkJ@^=3PPZ!nZc8^{C3oi+A|yqR{mI)^Ax>(h8*RZVGl4 zbn;|w;Awog$tQ|eBYW{4Uzn1tR`BTgeD^YF>@ZL62yX{`=riKDdDBW-m{-){HGtdI z)B*FqHj{J(Pvc%+_c-lk>YAsuPmW}k=j*$&1|QO*`vrYe1v6%n-GINZO7!5ExT#GS z?Rf1UVq#qcv0Otn%z0lpX6>(BZgs{-kRv3Myco>C9l?X}a|(Z`So9Jid6HJqF()}i z*@Afb#mcT-Yn6vxul{J=foF=r)v!Z=+zE{FySP2kV`blil?ied0t_GF&a)4z>rr~T zr%G)Vr9z*+=xRBA*4-C+P8d>}NVlC#^I}nS+cDx+nm-GN_$bK32{0HpB1@mm<_HO~ zUa4NcCIf}Cet)52;nnxvBoG`!y|(F8y*a)odwyOG%vTVe-#r3yN(0%#5HPjNYZ~)hKw&nVUn! zW#(Encph_t$XJz}it}5x&$$q+j(ST&%)Y26AHvRFwTdV;P;Vq_Wz5Hw|7ekRA0Z6k zo!glD9+2ZOxXAt`xI^y)WYnj1>9%c1WU0!n9%mj_;;Dgf^t{HIBCyl#Bwbz3b8U%@ z(~}Z)+&H4lkbhkh)8UW+Ov=B)Uvk2 zHB_|gDGQ5JR=kt4R7F@A|b#~Qy=^s6oo+J31l zOpbY};JEx=kyUFOk&!N1dsn6N)YJJY7jV<-wY=u@5qn*Aj-F>VA0O~`Eepj=PmmCF z5&dOI#Ew!GR%puN^y@eqFogWfQu7WvX-iqL^TThYb>Byj2O9WYk-)4q<%cqp5iDTG zt851FKJxZQZZ}wdqWjE>XXyy|mVSE#AO3UtZXHgpC(h+ng)T4qR&?*>=;v+jJIGtN zTVsTPR!q*oVJKBR~9-=YQM~9R#LcyJ&fRf|K{G)oq&?4flAv}@% zD1u3x!#azt&SmuijbVV@p`zDngeg_Cq%mK!YU0_&8P3sn=n3HqZfsPX%^Z~EoAeUp zDU%RV+7EB#kZPgqXOegu(bo~`${bm{*JE$QSy_sVUjeJS&H4Bd92?*^23hgf$dykq z6HP~+c>1Ld0NkL;W~d4UAWW2^Y08EFXc#JaubpyjI!t$Z7U4eZ(MZPQQt!qr?ru8C z=2ICmlVD440EFW&t~i7pa7l^wONu6;4jS=(yKOf{;{TLn{IJG^n>7?oGu+>aT2W*- zlxQ>+Xu9*)ehJ?8-q_!CeLkTfEH;!Ox_KqMo4#EYRlogfO%x;;Qgk{mSDC9iI12$G z*(N((v5B_M`afn7y6l`jY1MU82diEBZ;HW|rTkJ(K5fDM zr-Q`(6>oR^vHSqZ^6mpy2h0%Sd;9HPJ;9f4G@P%$_7gsvYYLk}aO8flS?T&!6-crj8KiT6Nqg!2QsedPh5 z0^*tc@dSB_X|X@W2;89ONOhj+k?t%smV@+B$+Yr+28Br+bxL z{FD5(Xshe&$ERUuA|W#YPanFG$UL)l^jm+B9raXj!+$JXF+dxCM7`x{=icXMfh}_` zTPja0DV}yNa@E9cqsA`Yclp#N!TO@t!WgY)4d@?I{TXRz;faGbSjlV+wArB0~i+Gldb!mc)*XO_CpoAUr+^XeB5_*ACZPO7u-W@JbGjoqi@CnV2J_- z=hhZO(`V3>t;H?oJeD zNzZF)c^~1}FxIqbViR-AyZOvH4s%4Uo)G-Yo}Y-U+zQ2sX>E53HQ57X{}IR35x0di zJ{j9j@5iQM9;2bUik>g7>T>!V_qdh*MG=M23w@w@Rx^zK=&_ajRE zQf&#bfSC;nw&9HYP1dxg_%3QQNGusw|T&6`{A)r!@^#IkPmS%V`k6;8G7HZBV# zI}U|Yhv;Q@Vy4EChHb?#%|Vzz^gn`Ytf+z4kCe zaod*3V#N*Yl|T)c0^!DN-l_E{AK&agD7GoA*;QOqB%iWfpPQk_^TGOU1KQ78k@JXX zAUru)b7!g$^L%(!)1i*^X^-JQ6 zQ?Z{JsosT%9|bd;G)1#?H=VX!;i9TlZTo8nP71vZh}H3&+HXg zzPoEa(++66|6TAGkySV(H+YyOCui$v-r_byQhUr;Ek0wd4ziotE3me_;^G3`CjI0( zfOJ-464)j{Flb|WGih!d)W~R`6EJ}8g?ZO@R?oueL;8}fK%y1YYSn0K_(M?H?;RNI zo#H1qfac`_agysvj&Umu4WwzXsYy#U~-STyPr(Cwp}fo zBk_~C^GC(rvYIfsh`aT?uVhZRu1&(J9h!UDop6)gdww#l96gO78 zM6XGoPz>B!fK@a-%ftkOoeWe)j{>Jwxg8G|q&PiQ?oV;zz>C$U5;`r1PbT%%d&{#d z_-o+zl-~(|2?)BxmP&(QaO-_~`&AztU|D@z$JKGt$bwg(pyim(uit%pkHBy|3{qHSW9Jm_}SnX0vcimOOZHQc8!W1ek;v~wdV9bt>OMwnOL4O)? zu_7wxT{nGK0@DRPtVWl?yn)qtQzBFSa|if2Ji#BU^k^6P%`ZXVp{JhL%LxsmwziA7 zINTMZWeRbQ{+mL(WGpC2c)|f!t+JmGftjDkZPq@PZ&=QMwuC*H}K+zqP95$VdKONV&eNqprqA@%h;F$XMD<;)v!9KOV$^zBtD-dWne6ZFz zj-9fy;{$e|>LRJ(q!HW3&>+>N(HB5ibJClfu6$ny$%jbfhxT6Cdku!4VP_N+9L>Jr zCollUhD$ds!H7)MyI~D=7J8aEweM=ou<+la4<*X(&(`UL5dMK%cWbQ;nWiN}VKKtW ziM5+6Pd*SQ=?9D0PwH3cVJ<~m)WU&eufj<9MV%}xv0=CV^(7S`kS4FscvjfJ>!!a6y zZ}A(x$p0Nr$x$VY89e>G?uS)U#n((^Tjb$n9ubqtw(s3t$XTd1XzOd0+N92#ihu)d z%q8P9%f-5CKz>&e=>oP#$wQSY8VE@{4dWqph#$41i7BCDxp!gr1B5ij3r_SB3dqNh zPXpW}Ok0p1wVK`t$}f4}?i<1o_F1>JE1z7B(*&(35W6k)v)=Y9qz}UQ$={lz3{t&+ z>#}8O|0ZnaUwQrFFGUQKdB(<{^|RX&5{bJboR+8?*Zek06+yZyQdfm>h0tG3rqKQ2 z*~Y&Vl+uR3o34=ih4>ri!h@Ft)_v!SPs8aZ*Er^4uK5A_J>HGRP8Lv`bKY$*mVOVD z$u3;0vQeC2u$l~hVMgr8AY^kvEmi5W8I}1UQrwD|IBEWQA{UNTBfDFySsRgyS20cm zE>yM31{-bf6+0ZAr<0scj#DbsTSw>{R2uZSYN&azemxGs9bzE-VBEP|>+(Z)9KgNE@&2tXyqU=iFZ>7~I=T;mdHF zyg&{l(FmuJ2o$o&VNAy(VQ`Gq(f~^sO^1x7SC~QYxMIOj_alKR;8{~9`1rRhU=fHf zjVH{Qw7a?$a}B1RVgc;*FYk=Bkw~PH{}vKW2%nu1%#AeOcu{8UGkvNbJeIH6v)7(X zgi{V{U^%8Y;U}5U3cjN*&`?W?-!FMK>D%gb`z=$nTawWkloerW&K1G2)C{fHx;7WJ zi*S{+h{ATeZ>*4%8dkblyH)gIbG;5Zs-tGhGL=Z3E+d8SYWV#%e5&zfb=>{cf`D`Jr%89L#y5!0TdSRoRARe!JSWN&+&8})?VUQQ zA42@Rua=^fOj(x5YW%(>pkgL9HJK}m*18cbyy=BX)egc6pXKKZ2=;UuV8?1nQ!o~SuS`#b^pc43eF6VRWu93iS)6aw z4Jp#CCzb^@5lDn(tw!BmS&@qNRSna2<(-D&cbAgbrER84NW|WdCx1%t`;w(gEjS$> z2p6#j+b%4!+dKYb#I&#MCdcJ#HuEwjFEWx!Y?{3Z$hE73lAy88 zAw9Eyk)J!`vkq=89wI%h*3mbp>TVxDvm#@Xq#T)%h@{Eyba^A(l7#&S`DPz4cGq;7 z;8a=pKbv}cdRV#s!AJ>~uD#tarZ;)4dsB8lO#g*9djh1yuhsi~%beRm{YCx*mtDU@ zB0IVXy5PN7`8=7UBl}Gyy9QJLcOwvT^g)@v{3RC6>mG}|@PD4}#UAE}Q(IXeQL(uB zh1@<+alSb_cHRFw_EGx4;SmpKP7Pez5l-^WwK5GkjGspOoCjv|rKli}Dl2|H^0n4|K(^zQC0E75Mf3@uB?Jv;Bs2NMgd@ zW($gDD6k@SdEmud|RngciNpHx*SpK4nkcWDm zbG-WUaoOoIjfEa5MQ>1lIv9WI6I3mHmP|r{v>Z-az)^ zq(Z&gKkmahIi_#=O%C9)c{MWx)o(g`l246j1a|ewBpa>LO$l8WmHK`)YT~UV5c^R^ zh^F_zuqr;ZhNWP1=);}+SBw-ZT zEu%h{W@YP3;cVA+x`fZ7|*tv z61fD6IcnFwdxi3B3#geC{AV_1)UeuLvx*npXKY~$3b5!UpP8$Jo;eUJ z=#PqLfk>t@&41+luX>}uHYl)J>p@o*VE0HPN5q@`-@OG5SGjiCi&%=b)c>F-KV=^& z^&T?BZzdx@zivmcV6mocUu3j4+|Z@U0)E)TV26(`|740`tB>PDiAiJ!&$85$6}Hi@ z^I3M07JK(M>;6}-|J>_`GIONz*f`%;E;!=KzLvWOWICaJ+k@wtum1xZidan~J>ZnN z(Hy|sS9F*Uc|f$J}Eq=En*!C!BD@JHJ^@Ad!Bt zb`!@ww*@`r-^2f}>n~|6ufdsnWMdL~yW_|Bp!m_zHn_=Pw>kJ5?4PL_O~R?^X0pq4 zFYzTEB#^5uYx(nkqU}r(Qr8r!bd)K7wO0Woe3wh$6(2ex6nOoDmxb{o@0gBaI`cnL z{F|Qtc@3-JOzpSfGajCYgxVX0azXd1Kw zhV*3Q7tBr$9T=kBJo=_WM@#bpoLW;5;Scw`N9a(KMjKf@$Y4lec6y!-ukruN(^L!N zpiphuJ2RbS*1r5}wCU|k?UaFomwU{F*S}hJi&F!Vl8MCE`&6HyZQ)~B+uYI-7-%HK z7Vj)Prf*5%3Yq8&6WEnkc_N(@a`(HKuFa42toGLt+Lbbo*3bf$| zn+e^Y={v9D>$@6h(fM$Ro1zCTv`0=J8k*#?@niixh5+)-mJ}-1o3m& zs|+5yMX|+U_BYxbZrcPK0|qUJw_JQNteELY5sM%7Ziavgm;zr6g4Y!p z{T3UwgP4fvcB4B^Qf*)S?-0reZQ`XE1I873JNBz4?aLs?or&lSf*^gAMiT8mXd=e zfb3uK)BH7v8B&~!MI%`e3*|%Ecik-m;`ikV5M}?`tuEn}wkKl>I|p zriKLz7++@XrK?HZS5|ZF&9RDqe-9lZu&JSE^s^`+1^UboUAUOu^zw?|?`xXw+=9_O z;s!`y*Kx^EmY3a77IHN~>zGlfY&_pu9%C-$HCJ7gV+m)pW`=X_rCHwQTO}-xqpZSF1PQ-}+tDS(O`& z)7-7r@XLwT8|Re!{KLYa$&|?1*%*BA;oS?~JeC^1r&(JzxQ-d7HR<}><&&EXTDrt` zO`pS)&>raWsTSzKw#>|M?uhsqbv#t(L0>vttbmb!wu@EHdgznNTHZ!w^ZyQ}`J+M) zpZx2(JM@7jGU=LM=6PL@(qsmE7QeiVb3G5g|L9kHy`jJL_7?^w?LcxSsJvz^uBM)W zl$S+deht9sbSINp4m1{a^y-M|SfW8(ouH$oABrPafH}8U{>C@&Xj6t`TMe0TT{ME&QcB}D-u=o%G~<$OMFkg~b-qD)&K++0AvSB%|d|>%YQ&Jjpu;B6ua*SgC zX=DdUY53&vjuLgJ;Snz&f{xw@=`wRuh%E`-lz@OS+6Yv9Z(b&S1IQKeR{RT1S7-@-VP4xsx0mHLB^e$s|Es>d*;ewG`KpCq2Isjd3q5gf$ zmDD+LX=26it-Ig3{Br0r7@3JR2@09y(8K}73nNzldyQDzZKtE&G}AFRu~+{C+-MI( z5OY{^kZdDqHyV{k2f4deM{nO3*3&Rf8GsFI$Er9X^*hvM=0-IGQL1uPZGpO_Mx1{! z`VXNYnTm9SYl^8%9phC)B%P#3?H@)s9qI4*#n`^t@R=XfBAySEZ;JLmsYDoW-f)cV zP8sZ!)7$O}M(5KaJifN3F9(g{EqRUV<$tO{2aq-7hb5~PauICc5sBZN7wO50*`$RW zhfi`E)Oi!AR9dMKhc7$F-muNK0=>e#%2#0iF^*4x$ZtQis; z1O1nc!m{*wl?4679Ah=@zSw?x7GYm}^PHk%Sy;I|PWEC1rXe^@pnHBTye20r#N>Aq)QLk@9U@G$0%X>D4?5@A!g zufaM#T@Nh72_vyG!1L}sd{5KPeF4hoZWOV9Gp+w)D(i<4vkR@`E4K!M%!J8)TSp~s z$5k08!ASHZ`U#)Gw@)u(4x@;gEnXD_S8w0EJBT8F18S8D!*ZGEl@BTq%lLsd_Ox!I z!!j2C`hWjNRR83v&g`LKy-vdRhO*!x%x7pr9H%EK{q}2-ZHPw!_9v}%3~n{?S3^)& zAF@~)_8M4uIzCx)bC#-QS=>ghSPp4ogq7PzdSr}MR+*Wk*J^?Ti|!@~c1^!K-ZeY$ zqw88|MCF2r?zdh?RbWrG-}v-5_pl_5xH%2Of93mK30z!VbW3@iPnO>9OMLx8S^mVUKfXl)$_%4I}jzNG?TZ*v3)gK z=peNINX%=5U+!m%_%n`l_8Du;jq{rR;13dXr#5xC+liO5{74e#Fyn^>Gm9t|?&WfdgG@F228@4CpE>lILokN)r0cX;*6KMmBh;koa0gvyL{v1+ zUP@P)5meAi(4KPDNijC+de4+3tii%G2FXl1J7MeJ!lJLOVb%cF6w~$an+pSSn4R9! z%IhQPx1dV%w-JfnRI>sfw<8#+Mv)*}s(}ln+EMl>8r}l|MdP2Mm^W8*KyI^Bx zO(TDX<4ZW}om8^g-uuz(aC#jZmT@9L&<17)-PYal8{?jEFCvanO`HqW=d#ik>m7HY z<+A>hCG7zfna!o`|DVP6H?dIgC5J+7Ab^UBKj?}#`#8-BfCmGZFAuDDv1^(5ZK>3i ztqBZ26rEz?8B6)abF(gNHa_`%EV}>eowi#jaG_L2k0=@87T`NA!~bJv&jIE3P%W zIbAOw;L1>a`Z5#AKVCG7TNd`1K0v%gR0fbW0PXn3xVHX|>5DA!ozNr3kwMJEVjE)% zn~XK&70Q zZQf^Wb+hy76U!9|>1=ho8Vqv~<`2`wfq7=JXVJ~AK~C!off_v%J@XWWqEpJ;Da2Hu zgfA}74C@PQx;d3>7*J_`Rce760d;kb5gCZWkuVURLEjOxXUf0K^rXf0S^8zy&A3&VBN~{@+n4dN;wx>pctTiSO&U=n8 zmj)k`+DfM=TV$UF_E(1xMBZL3CG9_p2h-T3Uu<)v9UggNih9r=?sp0|fXRGrMS1#Z zKXsquXRMw?(mP*tFJ05P#j?-=tisPByv(<^KwZ?(3GCp z2kwQ0Z9~w5zkQ1Ty3VxVOp(0yoS>{!q1C|qBK2Gc*gu6*W?|LR9;h;*69O1#tUQ00 zTuZIwen%Qn*00c@-UVVkCF{AAAcI5ftD+vcvJRH_^hO$lFnu&lLj7ELo_+7l4hRH4 zOoM9y?Ya|gw*(q;qgL^so%*pR>K<3;CIt6=aC#pOB6v$TJM2D1G|-(b=Z9j9Dj*v)b2$*?&^ZntK}HE zn-g-8$Jb$w-CVJ>pL3gwJw`+GF~IkG-wjI+#BI>r%!YViQ4M8{diL3TG+vlt{`IZ3Ia~{Q+Ju!&_x!g!PcuI%Zbjq^h7$e3j3eK%W5S!@`>UHdSy?sD#AoS%=gd|J$O-{Rsv+#>zr zIc9dqcT)S{=Kr;KrSVX%Z9Hq1h7m@{GE<>2woFRK)+C*>9GQ%DEHfO2iV`IuTb3y6 zG|F-a8S6xr#L(E6lo&e+IhGs_$L@V}ey8;2&4>4E&!_u$f4HCfy07d0U)S}&?&p5e zEsChLeeL14-R=x*)_hC%p zW#{V20Eg%G5uE7roVrIBJT!8G=R>+`r4oYH1ABFwrQ-GeelOLD|2S%sc2~E3G)=oU z;o`G;H=(yL_|_veOMUyf(W!Y;%nSb5)9Q~#I`8$+ck6XEWKj@v0TeW;ZCS6!`&y=- z2((geaMh!}=JxorcX5u0HDX-eBCNvm^XZR&lZLO6dr}#DD(#WG{(BG4f)TnR3)g_n zM?vk*{mTn=Qg$=+VctXjo`RGkgaB8hL(6QF4yo=Vsy9i%lwUit@^%}%(IANp21NxL z1ds25kETw_!&9?QvkGV7%4gjV&_(y;NV=dBCTI`$^&sB$ z-|a-H!pfuAE;+T(9-dA+^U6a@f1z3#a;jeZ&8e39Ywl_f*f}lL;nCR?l{@ zl<yOO%Ih$vAW0(tFV-X26pUSzmu3>$Nhw&>=bTCEM7( z@!IzDz;3Zr7-dQ0m zme&%-6Z4P*orTB&7Zo|jJO5_x+ojvV8rON~s(ym4oE?h7Ucv9H*qaq6awaZh_xWge z?}N>#tK&?FoliFQP#T{UA_iD9_`cA(TN8&ZZQ;FiBR|Y#tBadu-J;&hKo#y-G6pYf zDRh<&@LDu72w5-?D5mN-XHvGA1G?XgdWZa>=)j#7G0Y3m*cv4b0rxfTu27|4 zh93e$5q`>vX8}5CY5X_RMvZ4y>n{ZQqM~7g3oNo8PxeR}2pn*0Qe^TZZS>3)tZHg!?cEH>_1C#FRSOVKBRFVZ)QE?_i~ z$9D=EDLvvm6TX`;bAGooz*bvK_C0=RXS_`+^%W^Jm>0Nw%cbLo_OIN){~f+ecr@zT zhkxnX@-!}Pp{47hepv{RXWKL7s$;7!9k=^Mt}^ChC)~s~t>5^Tf$bMgWb1%m+t_1! z=|EPk9~=tij_8@u7t3#0@+7SZbtsXZPS&`kA*Ku&iRWqxMqbRT%j2~#sXM-#<3y}< z=9=De#YOBje7?i@NfhRV7ueGYCF?Ih6;r`6qC(GO1k#;{5+%s)D5d5TH#6(Ir@(_Z zZZ7@lE$pAsvoRRo>SMmz;twR@9WB*u*8i%S!R{Dn9e`td{C7OG8Mr)jv~1afN~@o@4O7yiej~{rMiGQ}-@BF-9-KWWCM@ zHwSL9j4y1E2DeDWk`>G-kPcNNuoZG=kT3X1F--fi~L z#&WV43QQo3gnt_Lb^I-`^tCgOWm7_iR(r;nx#=Uh8;=dI$Hh%GYO7QO*GnUunl6x$ z7xPE8`h=wS9!L0I)yLh13sAICjS+*&=z^;C2O|m;p!j4re=&~iYE4BC-ng%Y$?B#X zd9`D9K;GiF%m?H9ssxi}?hC`URI15IZ~0opJ;MINtj(splYl-nR4L;aBD}OITzaYu z$?wOM-?UH6uTXFRWuJLJYUb)R(lpD2YUCP|1upvs_MCKB9NEL;wQIZuniTl@gmFM4 z4QJ-*DZz%b@XGE@2yy)e;J)`*mD7jBsgsD7^AenKH~3ogu+5paV2!|WOKzn=@vx(i z3GnM!GP2M{na!d3P%(jgbjUK-x|zRe|I=f)Af{Oz&mar3Y3U^zEXjwWn%}du9SU9Z z>L@rqIapy$vfdw&iGy-C%IAt14chE|>y@ZV$DPoUCKLyKFwmg{AjFYDtId$%D_|?j zBkR8j=)rykMPP~pK)0<0Wbd4({|#Ik4VWj< z$4WmnLGrEYOdz$#TO_Jw3VJ;faYC3ZeVZxOmQx9tru-|wf2U*W({dojo$_tIKlJrL zef}^5JKjv?3LHH@rr?&*%CVdEPd|A@w&c_bA0i6;i+ofa?cqpZE5b?Z-0wae<~5Kj zd~MxY;8ThMPsQU$#9!^R6eM4ZIgAy{HHVH-Vx`^`V{0biNtz{B7(jn;`RB_t!WyJX zt$R}T`ipSbiMFo)s%8UY+|W9~F)mtd$AN*WIh-C+nGE{NAoe|POj;q;xl{|aa#v$C zoE?(l%yAV{6w08hdB#@M#K)p_%-t`X)nBIDeTA>AxD|v_9IXz0K>~4D)^XC>mJYy~ z44VRuN_d`VFx)qMxbh0`I6TtuRVqk8sp}p#?i$UV<=x)k6<09ra?X&W!bP|VYb_>0 z5|O8?89nA%YGcfn9!}(E!+U7TILTl~leeYmwpw6i4pf{<)=sao$MY-95i(jWrg6~N zk)Rc?Cx)>~5mKoil2Z@9M?+vHtP@FwSSRZa9#rD#a%-Xl9%uO47t6bl`O)AxRV?Hb zUqBwaQkGv*^{~{W|5~J2W)6d=047lNG4yb)ZHTVu`2)Hq-7!`Wm_U}@;6Y^wCvE9gA9UzRtF;L%CulI6;G;a;;LUJ#Y@Ep|8(+K{3=I)4kI$yS@(EHhYyfo#~Q zHPseT5+?koZiTpELv0axDBt^IcQ&B%%VEfl@MmD|EE%m8-IJ)Z9JrG@2`IYXOue9g zxMN={yFC{opB2MNVV~gBNzX!Ng;jkyzVbhJXyx=laVkN$H8fNeZ0>sXZ7uMVnsZ2Q z9u7b5SB2*6)2s5TnF^fLFkX_EJFkVZRudIz!BQjyw#q2X+fy`+i2N07Eb_{*vPyKp zNUpVojYVKAI3#k$6x3A0VNgK{RLw=kd>Jf}ab$MFBq-`Wu`1Y0+D3 wLxcGzbZkL8;2_dZ=-6T&KcVCQf{vLDrlT9pR{E)4gk8X+i_$xlqlNYR4@6QUS^xk5 literal 0 HcmV?d00001 diff --git a/docs/imgs/2024-07-10-09-39-25.png b/docs/imgs/2024-07-10-09-39-25.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ae98d9523a09c6d283e03c0067782cda0557e8 GIT binary patch literal 63082 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 literal 0 HcmV?d00001 diff --git a/docs/imgs/2024-07-10-09-39-57.png b/docs/imgs/2024-07-10-09-39-57.png new file mode 100644 index 0000000000000000000000000000000000000000..53e7cd11ad59d4602292bc5252018c8822554c7b GIT binary patch literal 304533 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

M`KHU~ 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

modCkkXUkbv1|crPf}6I48h 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

LiO$id-?l;S$vi+~cq z_LqRRjf_nmnBz(6BLo@DKSF%U=~zdN*cC+&GisK{z+wj*Bu&UDU#c)1vnFgDR!E>W zY_Q0$2=cLmk@K3y1mUYw?b4h`HYpqsYV(yP$ZRSP{NWbK_-e=fy5cXhf{^l!jz0Qh z(c)Nb98{% zOBeJMc#y=r9C7V+;uT1^(8}gYZ9kvL$r!%B1*ImO`9KNohB(2MKCbEcuZvH%4JlwG zpD2t%Y;nP#5sFv8&xYb7TMA^9#g~8bWc;-9{RPKQb$+Fh@Z!d`c-PC`0n8O$l)kFU zKS88s{~(aqABTE}-x09a75m*{K6Qa$I3f31-Da(y%`M_|zVs$_A`gnURqWLj2yh0t z#y6$mt`BeDst|50yWi5g2t(3CuI0X4K7Bfx9mtX*kh7hMtrZYcd7Xee3`-#lzujXz zy#BL?W9$OD8PxtU4D7{y`!TQ3O`{0*cFl{A59l|1ACIfNEG1X|awkO*CRt#S3pNtb zDCzJ(QI{SLjUThLizvXz0o+I8%ioCcP6!yWo+xK|q5(dy6)ZB~2E<>Dd)+k$kQ2kA zIM9RMYL1Q&0k_rquXMn^$>R{9a5;&96KD%m0iI|RSRVofB`>kUA5@nny1P=Zk)o$GU`osH3JqeduLLl}WA5=9L}q_gjw;2&OTEDR4A)rSMxeSoBcLVKS9_XMA)t{&sp* zIxgSvXZ}dGo)Cz4y2po;gs-E_vl5Kk=ElKn?C(tD7@BDuhh9AVNA`;XGmCWPDIVEG zVYe~lw{JCWE=e2Ghr=W)(vFB;H@UZkLW;Z#LyFH%S2K03mxko}A<&uH;s^38FDNUL zp*VHPz_2ngp#sz%s3LoP5cz;1+Hg{_Bj6OkzE@X_?y}O4o7gC{vY{Rv_7||TpnBum=Zk!y z3-s>ltuu{m=lXFfvofmmPf@x{&6#my7pB@BnPY6_YIb-Gv#zh5lJag}ixzU$mw1hS zdk@Gt^dkmViIN{rmQpFxt}cB_exH@Q!>e0ohk+W4mX%RD8%%8m4Q>BrG0L+O88SmW zvQoAP$2;;Xl}S{}GjXQTA9E4xz-ItSIQ2Mkdfywk2D_m!Z_w8POJ%)s9=q-u1g&~7 zfe{zCY;?{yJ$Pi-kl$E!PqZ4{&HOzoBy21V7y?rvA&+f&kg)R8f$m_pCE!2F0!-o5 zW?)WH?#ui)FG5}Y7Xmn;!G|!uOeuoG$)6(1z`(QR`dSYlxtSE}kaMal0lHV;7UeFK z;?mvtuR8ORPEVS-=|F^@N-xLprOB$i00ItArDis)*b6keu~Lwk9d-U4n zbv!5c$##vO`<-4nHYzJg3g29Ei)8wfzL0b6zwL_`YG1s`7YzTfFBoVh%QLlzYuQ;M zgs|oDem@sdROmL0%ATuJj;vrz&gVS~6wTg%C#5QpZv{@sSN>e#dTSmA&gqk)Bnl;T zqWQp$s>-7GAS-Ra`Bej+w*q9b$Ba04o6wMValY2=s&a#M1jW4Mz2ta!P|YC>Qm$YN zOqU_2{VhzaX^}YVi8Mt1$AvJr)k-?c$kgJz!s<(_n98dNZN;1^)|g6Fd5R&FZ_cli z3cGt$Eb{-bG)VnTFY%Q<<(v!@!z1Z3G6nK1^nF@3{{H=Q-$VFZ*dPSZ4uKW4 z-aSxh`pf4#e)ilI;TjS=KWi;Fe~T;|*j~st1#{c^1As?Yb+InaBa7dINmn=-7C#m? zgYP0-BZCs)TLLv_Al6eXY$S~v*+#m^CI*XTCU0+xAVxNOe#$FFZogaH7fU^KVidFv{m3!$fw| z0f{k({pnpgIs$$*-#~_WY1prT!0HEu0NY0)@NCWkWW0S$Zq)`r37m+G2D@1o#OAS^ z8`?-tpd)f|Rf>474bZf+q)>$8@JC2n`fLfL!={-*>&N;~Gwdi|GE3mHR~Iq&)d)O} zav}YfcBzQr{pOWCyQG;_iaLr&!)bG348l^y0LkgGZ?Y(xWAu%u$;E@8mI!E>L)gvu z4QBP%K0lA)@K7k9tL=OGl*_p)LG1&`K5dVt6kjLnmN=RJ^qx|xdCgt!dbP@$xMvq# zY1;TYcVH&-@gRjlfKGu(hhut^T&`~PY*PAoD=~J-G`+cB5UO+ zlEE0~1`AS2K(L>URHuizlx-)9> zal+$FK>Yd)9VI5dejr%U(VF=BOhMVPyAk0oE*X{JOepbv)}Y{1y>mmbO1g1A+Z^C< zck4DB;cw#WW(pg$ZKpq26u=)vx=-Ztd_3a=N@kD*OT=Cna`r2lHwshaz8E5LadqLL zbt?;YPj~Emcb_h$F%OkCuy#b!o5l~UFNE$}~EU=OYIs|x71uH0t+q%nd5jW6;h_U+8-`RrZMC=Fc^v<+f5D0u> z99cfki@?M0Qa9wFlOeNjLb7_S-~++;m+@mnqqJ?oqLVA-5q!L=3|hhx{1PrN5eMf- zv7H`)0dZlnKPT*Oq^KO&x+jsi!wk`a=E8yOSmu~@Pqz0^*C6`XA$l|LWcyGZ+jUw2 z(hQrfI%-SeM`Eh3A(mmPyka3a43v-x!SG(D_bt_U1QP^HjxVrECkRdt`(Z%&uBs#Q zz~`7gp5oCocP_jyIcTc3Wvcqmr)e^gOEd{yMuF8e)f@RHzJ2xPJ;``ltL|LN$at0u zEVkSC)Unhz&x$T{KReo1kxPE)VUBu8D&I=B+ININpQzn;p2C~6XUv$f#i8`#Bm6ML?3rZ==>3`3A%hqIqnX0*B#op$AmUoksyaye|#$cLs%iQ$fi$M2DuHh zRg1JdZ9q8)cFB1oasluJ?G(r%B@t@zkMLhl zr@j@cT139(*~jK*(5L}QxF$Bik1^f(j(sqDMvo9i243tgPBZ5r;DC*zx7S~a-O)f1 zoW*Uo8LxN}P&Bx3(0V?p@RSm`LWnYDDmY@7v^_L7tB*#T`Q+o^x` zAjM$%q#gR*sllnDh5-o8G0+83Dkp4SjK6zhU8G~}@rQSLA(fs)fD>yo5S`2;E3OlY zOL+21$Xvt;THOa2Ym)HMHSL#bx&9&;-+aW&37F%s2!X7rh;3DPyht*q@jBb=Lm$95 z2=tYbzHVL9Eci5N5|sdrR2ooNT5nWaEfF~(n*ao0LH!_U2GXQ0nw%9$2CR#_G%_3D zY^1M^*Vv&JUtUKA_?4UjW#ttX_$OFqO}2ZKV5ed#kFa(Y`%t(qR!|q{L+i`Pm<-*~ zE_X$>l06p+>;&GMT66w~liqFdhxdR;9*`8~=E-Lo6S!g}LxO`%C4YLKg`Yt{X#?{f zgL8=r-5Up))7HZxBVxMKp?-FE)4Vfeja1?ETPGop9{H~W9|5@;c=;l!*&xV!S#__F ztJ}9Tfl3NZL9Ja zPZE`D0%`xU%>@q-2loY78~#9Kn-5S$3PBDp{fpMU*TS1N+0`{Lle< zUYab)d{tS$c3{`{Kpk4s_F#N4?GXdJHwzfMEs??mQRE+d&f$`NY@Y(j$f4+GQZf1^ zu&nW*)ags&P+6ri52PyGk8RHNlf>DV<#*f{OlFTbclo49l!;A_>LOseU3MiM>&2^j zU=bWfx$Xq7{RDSK2lALqG@a(%~6m$|K3Y`RPnC)x)H3@=z3CZ#t!I2|D8jGfU^;@#Y zGucsfe;qvpjgI9*61N=7`=G537O8Vwf(BnK z^-r(~eNhED+^2oYlrgDW{uX5Y((@@d9K~-~d}#qbH0$e2KdpMV+}_KU-~M=9x}4b< z_$h+Frw*SpWOAH8i)@O&V11E;aO1{q7Iw`2`X=W(MDez)-_Ay%Zm;}m>*;PUSg7BJ z`pbRG)w=u3_73wjXZD*tnh+y>>~gpqlu*#b?{Copn^lEHy4G&jWf$lNk2ee8U|4;t z*rW{y@)`!*ewE+~-7xXpb)ZD2IgZWWm~C~@RSK-iIO9ou@$FlGb1P(F z@|=>r6;hR$j6_{pAI#MMq`5$zCW550Y3sy0-)&ui0xEz3x(wy6CBdEWJR&b<(In4m zG5`|nW|AcHUdQ1U*~IaE9J8Z{B}u1g?O&jjriUD-D_7ppFE-KKT4l6Spm?Z9NUew? zzk<3!rJb6kl;MaP{J1{Nnj|(Kx9~AFO_|!xpRUa&75Wo7|EbC=aiemTAKDEVLkBx& zB5oIDg5Yu zR3O$OO-g_pe@1wp305JbMbz-+9V#WuXtK~*TEknCm8Q_C7^?7L4rAF;Z1!FQTQf1- z6}6h*W~S)1PIp|hPW#d9yY=Fk1VrS32~}QCZ2nziY`SjEry)?>P)mO|3h%;x@~Jc9 zfbX^3W)}0tNOr);*F9%$ho#c$8D4Q@LVpH2qh*D!>9(uThF0@y;I*2AlPo&!2cgce zfxRkQ_U=j zaGHm6=xe({1T^BrvG|ci@B%=;Hn_k^bPC6Ju(cRv6403%(9DaegXX*uKq+Kw?&*O= zeH2)nco~S7*oO!bKB6TOZriTzstwK!eYh6F7A_qJ=ZQ?yuGWnVFZgB6Zau`j?L}mq zT4e0q{=!$88ZWJcorbcT;#tyB*-V#@2x&C!9~Nmkh(D=ak##a$4jg)&RE#sS)N>}< z7L5L`V=$rIAx~nw#os3nnO@B?xL{PNHPL=U^_S&yymAIUyWgo+vs7x^${_`=SJ|We ze`7cIu|SK^5t$P6emDvpP#xnU8+-W{hOq|9Spk|zvt>ou3qh<>d~AjfTVN6X1~6fO z)yfs%cGk&Bs@W#*>~Q4C?+xe{7|{A~ZbWNtkkiHU$o&`(v_|R2qN0I_Aymb?Y9Ki> z9Lba4wa2V<2j1l`l3wSGUW?&%;~0LwTIS8k9*&qXEXJ-!^a`BZb$RJvVtH{`l&e&6 z0qeX`B>pu|n}OoQA~vFfj#u36`Oe#pKx5G|PUc2_F=WyXV~>kVdbf|rJljj5+o~}I z_=;|uV`89}_Xg4iZBn=WItsg=y9$Xsz$W}+T{#URF!3P5wwu~_tF1&;u_k3IOv2mUvDHIIATL3{LT zf`Hta>uCd+qHwg1|J;EIf((`$$lAz1i}0z0a&McLbz^;N3n3UN2x$RKY_Tu#fKD`r zVtn8cr!W(o7kq|8m;J@z$JbyiG&)jiXYv%V&w*aAh(CG^-8+`-K4k=KYEfTg(14-Z z+!+V*oAbR%h8B#<-8Z~$az807$mje_8-g6M9t|;EzV~WF@)AuaXEmHYMPqsWtQ}EC z>04>wBZf!XKm#JwUfKszAsmpRvtK#_TO(ytZewA{?$uGO?`irWBd==LD%pw{BD8k-L2fCl2)7;B(KZJrO z^#V-7*utfg7{RAt(l?b<#BD#kw8Ro#CY{PVi8|mfi32A2v9h>Bcp&il zYs67>C7kU@W>lLWMI1!}DQ$DqOHjPvV@5a`2^GwH6Idn84<#?giqyp&Z$-mPLEml% zD^f@6G%{FH#H$7@cqV~qRc0udMB)qkqNbS5R7aJ35@Z+k_2ky91loU!6^4V$&kNob zB|b@%)sloZbbwlX#<55@uIOeYc)L}Onx?r;?lxFM?hpyam`qqyH%3=ElcTg`?u7av2PgP3eZvoA~PhcKrCesMkQhXz(%gA(d0;wQVi%C8a z{pMhC2ME~DV%t5E=NQV7HX#MQX<&Q}bCTRorT`0W;)`qbAqtxI08G+E_c74^hvEo` zS{@Bfa@-ZH(Txvg?y-6`F7!h%cw z5PjL#L|-mqylWgDZ*Oiecg(W@n-BDGAVbT%^y7t2KzsS}N7( z7(bo&(X}orqUJ8=}(@Mz@S3df=(FXHa z1(^~e69{IN*0h0qGO4_;q9`QZPGJYZ7&}cu9Gl2TG>5ZmRqLJE$m;z}Yi(Zu>JyGk zItacPK(eju>OYakP{?_+0f?qM$;WzndIqaNZtm-_lSEb^3e;+17#56F;zcyPkcsU< zUF5{{(WgaIbZ7sYAi2lwb%o8Ej1wof`*n2E2H%0+K-iS~vdN>2LF8H>ghZ zaufo~-3iH0$9mqpD{sq%^@|>ELCDQ>rXOt{$rlm2tn*+tsjfZwJoJ@o^Y_88xz!jp z7udpqCYZXsJ#BT2#ZlT|fP^|Z&&IObjv3cmQs=OiUq9>-zjRq(2fKCH#C$r}b9XOn zyFTlY6Z8Kruim**x7wVm_hjo1-H^z0Uuu78r;Bg=i>dJc3cC=fJ!3t`Z2x1=wz$YN zUcL+&dExLGQb3DU>DBi|YEooZ3aBo)wfcD#M7Kl&cGQeFnu2@%nhUh39YlluWF_J< z*dVY$Ky+>}&Eqz|mvm4}9q_MIq{9lq4pn#iORHfaI1UZGh}cu-dI_kr7w5gPS{h!_ z0N6VGe5UC>SqmerMPSPXXgpwv;+2uHFu8V=iG@CvFGe()Y=lMm8`jdD-0+>Zj)G&pGH&dE!Z2vm%IE?rQOt}E;2?XJ2%IsbE^ z*$1WO1$6svy^V6Bs08rM3iH2t9RGfBE>i-toZ%Khq7!i5BMYPCEn}awn3uJ}2nT?f z%)1T2wFh>6=s4(LI8{IOb9*|1EvG*E|BGT z*d8K9jYq$`OM>HgWHwO~P52Du73Yyt>7e>O1-W>fay>`y-M>H8taRkX$BHCo9tW;^YrXkMR7$3mmos9mD>g+Z7wauV=?@U71ihNDbp**R ziE8jsi=TzGd5~`+2;fw7h4rb?FHZ8hK2vZmvF>Jc*^aq{bd9~6#WTI1zE!z-3SM}utV>dA9T1AC$6WRONQK(h?KCI?oyk~ z+2K9zoR$j@060#E6%@8VwOZ&7C#S2eGNrkkf~1RMPaq$&OfAuGF(e%wT}6Yt%NGxt z56hy7fcDoj`D{nyrO1es`Uun%)2*rx%|T*z3pg)m=4xvwlw)he-)(ttkM;X8V9+t1 z6wSNf_XU`iGw6n5njFzTy^TbnbGL`Uw7Xd89CfCg7vmbq9Vg-x`Qh1OI3=H&?FGNJUr!jFfs1&jS zONna`PsvcJ_wqu}ZFr(lv~21rlSua1S_~!+?s4+lBSZz$hhl$r3SdtW%#KqYw*@t_4km0J=|tuYpdsB`ALx z7azW3@X7S_CHnMaXrFH7Vy`ETvA)7yw|-_|iR>lBYJGtokBWDA_2nGzo?n+d-xb$) z3%|vQ=0{zzFQORkIuq~YvM+J?%);s3$q|3|==T2GyvHt$*gn$>1Rbuh=(ciCf3{&S zZVV(Xpc^WDjrNo^C#JPAcQ@1Fj?eM(7~kI9%rm)$ek~Kt#upg#0|ZzJPne)4tL3*; zf-ukEy$t9NGe_0OVWBsZF9&O zxUlW37)QG3qipg`fk`uZVuH0*p;JA7iJOSaVW5XS`bD5uZ~oHaYW*6g-AQTOio8-> z;fuHtkz=ZU$Lnk2vYU!uJq;h8ZTM5fPOW7V%37{o;s#9DRMeKDzIJ-o_5|-s6Tu@L z!QW`w4|Y?b&Or`ElGOwUJu(gE2_^gjRn)Gc!fftMmx%e*XF?EG;V&pA2Su#XDnBxm zKa}kH0dhKMLwr?N;07$>CB`*8x+%+;=q3dMfJEQVA?a|h7Oxy4KjZiE(-0TY()-1y z!(6R|hquxl0UeSL1F5rys6)wMFC4I9vCi2t^+3;Ht1p2S2~eXkb1dej9aaWiGm`)o z5>2h!^SIZZp6KY369x2Iwy1W5#UrfKcM8a@h;dDyi{i{$F!jVgiv?&OZCSHe@AXSn zKPNO}m3_WDx9;m3ltFkTU~r|yZpzlm?P|3L<3FBPf9Wg}K(@ zyTye92~(PYhgKsx9&npb>TtDJC$cx6i9$vU;u#aWY9vk4074Mmk}ttc5GojM2>3er zKBcm&6T~tYgPF|NwJW=}hS;E{; zMGc?H<@a#U%S`HD_{y})*DI;<$yNgDRp)?3M9r?|uJiDA`OJ!sJh<)xUSvn6bx-X} z664;XUB(J+xTZ3Ga(dTwf8+7NjSo4rS%W@C-fsnK5hJU%2=At;SI>aJN`xu1bxcXseBiZJ833PU7Ghm}wC+9ZEI3Zuh!ZM~_@TLw_fCB4g!sgZ zx@Sc->q5L7A8pI7*UHFRw!iP&;?r{277cB8L`q;3PG^-~bmgR!5ONEZu4&9MA0rt_z;I7h3gf|>dzriSk3shEn&XsF@-M+T(nGCpkQSLf1fydxpMQp)5?AV8x4}8TtE)s{Hs3yTRuktpxMC+POJu6sGd!_zf0L>-W*oG$ zemFm%J2<3xzSp9s{3PbVeC(Sb)RkfKSJvM&3nq$xQr{cPxhXIf{-j7kaGLkV^2nm1i4({YL@p>DA~-#goX$CkhT!jMJ*)QS09J6bc;APBab=BX1T| zkQzshCM~Ajxw8-{mpS1;P*nrS1pOOU$8j@pLv+b5CyOZ$j6Ot*BgLlof=AwlT5KT% z#S{j+na))wmPh9c9}_a4u)WS{J@41rYoTufQk6X8}GO7IUItPs9zKqN~-> zXsoa5EsQHFp`;3Fv}2>?qPH{}g7ps^U&~{OOxuLPY$*bZ0hMqQ0N4U^Gk??PO+L0C z2kTuNmWb-71FyXpIw|_*FJ6K+1_oezIy%4{1gvF*9woK4wU-st^>l8R$69LMkqubS zek@Gy@6Pf_?l;$Z$X?lHQHx#pObpfpS%CJL>07Ijwlrxk&`T%^yq0Is{O-sBY9h2D z-)vbS%*nJLT)z#OM0gaa-xK#+jo1ajhY`)|aZ6hx-^0i5tSU zIMT?Be#dtmgrVWQIJ$9YKPen2(OXlFp^L)#sn~I7e+Dz#kcnYFZ;!Ay=ln%-@k1as zPjn`Evc!Fq(pGEApO52*-A%g>Vj#`X!Ld{lSe)0C(hTSQ703PDNo3v~0Ndf9NjdAZ zJO_e;4nQZfW1b0AJ#3rV0K?o+f?!u;t79+<=FnOX#C;K7lNgsa;$K`C7O>Hv9YzlJ>2IbxJPR5e}{_p)XFu3_gL8Jl= zH>=0CI^#zh7}H^#o3JXIURnG-L|JvS)+?sk$fdgl%H4ol{pnE4*AqxHeEv~6DF^}n zATmt!o)$OI0)MqUv0T0|E%jz7#T8ok+(M}2lkc~aTiB7K*B7USl)wR^7mp*;pgPxtjebXQdWl}p<+u_X)w6_zP1 zx+FXyn}aAgcVND}uIE@_G5F=J2gqnf@7{4{qSS--2AR}nI{sU$rP;wAQpF+4FW1_) z52BGehQxea$z+q*i{b=&e@ut>#+_giaq3*dP*GokF4R@L?U|7}j#i{T?uzR`GMCEiik}e-$!2P|qFd7)20(`~-*YQ`Ar=UM zxkPnJi126ofWgL%7e^sV!1EavS!WCwZb0~mN@KQO6zkIU@pZee7-UJhyR6guA0mBm zE#`MU*Euc((D8;Q6n6Nr$$)52QJoZqDv^5&!()Pf9Jzqx^~b)jo?}6?`EI{=D)s zN#HqSbbKcxqvX$?X9}bgcMivZGv^AU*O`Cs6#MC_hxyGIkPi&w?gvb(i$Gw{@!~Lh z@ToaS=);ONvt-6|KMM={L}`Z~^k=F}xNWmPymdh$9lf*uXe(5z@hS=sIW>MYkFj#O zg9(tGZ}R@IcjsY*k})|4!)7778E0;WXfs{_Wm{fV*#55L=;^hx)?5et2JCJwOm{ z0PiHbdwPIO{Z~?ohuj0q(08S<$0qasoqOQs?92Ec{rUYr{XMcU_+W3WxTKtad}aeG z6J(JV8}0t%1s_Ad8M>BID$aeJ`TKv~r@#Mm$Kh$)Wxc904cOUvs56NFIfx%k9;fSe!#b}we z9{z8x;?GwDe+oGV4*@d2$!^g9@%1o*TD*UuOK)9;RUfpvVV6}|C{fNRSgZA#V@MF|Ltb~ z(>46_OF?9)Q-asRBl&ly^iOB|FE9V+QvTI)dGzIsgDNgl;~Mz8v0}P`7u5)kj0jbnX9RB%dR>BG zf=ZnIoV5P9u75adFFAQTMkAMJ&lfIyPfCUXqt_Z+= zx*`xH zS{_g)y(y0nT z{Cm^LW_eE_M{gsBY?ab|R{+K6@a{`47mhW2G0AN3&pVTJ%)FgnT#~7uEV@jvJVMXc zwA5J3FitJ1DrOerW?yczpuc-PdMY(2r@4B3+o#HrO-dqA9r7Wcbs_GjI{%ex&b7iL z6^3Ni%1_MdGB2OhObtvE6~N-i@*_~9#!v+q&*q#vX+A=a|0^Cc2^9Z(koY19LB5YU z@UYK0gzjTV8a)VM2DsL6c)y@g0+`-gOf!GDx~dJkfUlgv$b(B;;KG(`^Hn*G;<?Gdc!FET(e2wZ0J(HsMKIuy#9c0(gvcC z)#W@jD7m3Vk0oI8N+P6XrW4hp5I(du5s+du~geOmrH%>owWWk z*u~~PrSGV0Y?(4c13BoT(yspSL}`<|Pj;(JuIaBJ?MY}Y{U6d6e#NG*U%*U(m8^#Q z-Xh_Hfkk??bcM+^Vcp0413PyJh@(HYcGFyb@O5doe za@I*HCtsaaThV})i68Ceoz1#wg?_~V)5C#j;!+{B5}|))%Z+X?#!TYO4y1=SG<$|DlV1P{kCaU zwJ!*1oKbiDkhaw>ik-f~cLc`yrY(z5oIqP9;q0h)X-q6a2<<$$161#@A+Qk+> ziP%b?Qg>qy4Q@MlD-9enkyKr(;cCJU3Fvpbvz|-SZx>Iqhs8PIsaZa7^k<3|RR%64 z_EPEH4V zb@sQEzn@zwr}fcw#W%(rT#O*>i1(9B`Rl32E#01=br^8JojDIoqT)JqRe|G@QjzdQ z?spEOxA89=xNYpHh{+!s8(InPovB>l&=5GQD&@8JZp#~c55KFyA0}Py|J$ECM};ws zuxB|fv<8hZ?Z&x2x0x&2Ku~lyq25Hl&}9vNcfLVChAsTXdj-4VQMoU|aPf!nYE2McoL93siMy2r0a%+X#H9_>q^;lP|!a0$vxAm68q>~zWhT-p9z zngfpgUQ|@zh!j(<{_YMyqM(u4P3Ok-YwCmqV>v0cav^?$#fUQB zF@^zMG}3_0CHru@22SoTOt+8v(IZa=-4FF$k1ab3toSS?`LgU^2ChZy1VGfINKGH@ z-RZH9y?LU;I*@GnDhBUtZ|3ETW(M|`evJ|!08AoLBGS)B1eW4n8Kp^7(zPEl&)U7K z*-bGp4}cGs*}jAe@&7*Fv+Qmt@R2q{G{UI2&Uq8-5r&Z-yss@;VHDkk)EE6YtJ)uQ z)(##K%6hfG*H1^^J~NXTUZV>Xhg&80wxQH({z_tJb$iaQr{OJ0ob#@BH7dd8>Saqp zYhCEdq0=6(3kSn>Jrb+)6e3|LY})Nc+_A@(ulop>6KzehLiLk zw)Eq(o*esf^&C8x*E$)yeidq>{tCF6EcXGF%c8q23HJB8dvE9P#ach_97vBoocM12 zd`yOP+l-Gy0JXWi}h|rinaivMwA7UyX6E_sb2K4CR4*rqy<& z{7bQd5kuCG0e!|&S7Yt-0sIJ5(a%K!5&8E;_2LHpSP{x?bmr;@G(}y;=E86)J@kE z)a|M^>N=G+=XJHjB=#`ZIa+XU>h{3qQbS+zeO^ItVVnOxRWoi*M6P1wtlHu1VF&s~ z*zk)xW`gvU{dRGcN7G6wu<8Wi!$-qeJ)YXN$KpdV`If)e-@hSZ>(ciy6K9ktpmT~^ z=<_gCJ#nemVmNtFYd=8UQBkqX^wk~ad+M6cDnM9f?)i#U-!dTP*cbTsBbD0s!jSgoixM4XqjIBFO+I1svM+~b4?3j)Om_~jcr=~+aG}o$VeIuvj zoLq|oVIDd&meZe~J&ydPbW3tDQ2&7x;Mxp^`b0l9qlM`*^jlzU^l4U@DD3r)K?u)+3NI{`*LXBi*{%_9rdZ~{$4nrQYizzoJ?H-*zIWrN2#gXSrEf5`W3MDxf z(5SI(p2&6WcX@cc?cTvBZ%#Ddh;f8iG156)tLG5&O`|nl>*NZyHwrZ33%Z4PLGu(GT z{e7X;-iMp5L_YHb6`D1%Ec z*uBvsNM}a3`n2outwssgRxOVgfQ;c-f3hgq=%{$Cwm*5)5$zkoiH9x@@8*U`OAfP~ z&k1qY9_}@5^GhFd6W5-JT}Gc+-c8aT7cO3O)YA2)e8akoNdD4Oq*)`%7kKJALCZQV zs}VwJRPKTznWc!C=8;q>=+J!7#>a9y^PTVrNlh3JL%l*QtTybVGT?aE`^JTLekcxU z^hU`6o(26|8fk>mz9^#81h3QWYtDSYGL*fOHG*_{jURBj!~D5N0A11$)guDr*@qT_ zHWp3!|FD2PH&DAPI5;;P=lCLG`+e;V?&UyNPh=igno zjgc(U&XiIq4;c`Q^TuA0Q$S#XCa~woN{^&$ud?$W@<0<_Tzy8i@U5Zg2}{&7?4K!V z3uAp-1t#&+T`7%Nydwq|^>s)O_a^UQvyQYQKhfJ-Wp~v;+DGZrWnIjSWpqlxe@6d!zdY>PokS0|B89DxwA%VpXCR!?x{=WWb zo^(I*xTb0H^wrK*4To(&i=RKb#)(wrD8s*|D=fdFWP;{&RPdUAAj9?v|6^(BLey> zLE9G`l)>jXeSo;h;&<*qG+dwfH=(S35=SdzwA=APoY#4C?o1#>4aqK0_HPvU-VMP_ zG$@)0H6g`aTCG`nJfB`Lm&ThVlgj*J&dpK*(_WxyXM=cq`nxov#gG9G%cIL?DM8^D z%#X%ZZ6vFf3(MU{Mjq9g?$FxKC!L~DUa`7-WL-m=MV?6qF1>r^-3$nXk_ z#{s`yga0U>LZIC{f2l^0`rgTMQUH;;tJF-Kf06nHhvE6sCD`rIdJ@JYvB>&aPB}3PjulGL$VfH z!S~<^$Fo7u21J<*O&;%M7&V2(*?Dfke7djo-5Xn=h47@t4a32~;o4>y5}v}D-y)xD zCFCcz9WW)}AYNQx7B&fB87QdIs?`t2=h|6daRyr&J3G}o2P;dnuTq0g)H5Y#i^1#& zcGJisG})d`XHE)TlJj&?<3AK+-a_{U8TsRq8npXg?<<3Ww|0=KC#?IUzgq+!U6D-Z ztHmwq?phkLp1HFCcqWl1^P?VpwZz)Jm%8jY`iw?&m6(#~N#&0gaX)gXwEGFH>2$2$ zI@gX@*agOt6UywVhC5Nv%}UxnVM0VXeAj}^oIF<;ko)aG+z)lmJ=8Ofq~FnT>#6@s z>hvn*@A`arCR3#5n=r*(ZORr!5ymRSYf5N%ENwxAqJ!uDZuJNC5;DxSV@wnx zj3o1&P23lz-4`$AzpOjtjoBcMh27wLm}wP-$lNYrX^EHlW@sp>k_Dqa{&BNlI^)8q z{Oi@J(X6-V&@%O)`6WX=#*b)}Nu zjSntYSd%VJaqW}@$pd^meJg$qxwmjrEWarYbe83{Y;a;?`Ss+LWu~kYW z6j!mtj!|dPV%U_-+vkhVE=1GO*D7`EKWaXUHOa80mD(aITeyC^a+B1a1cTDIvWI;) zBL%JxrNoycnk%37R%4BgbGUk3^#hH97{T3oPHk~sjIu1aa~mTD zT`aB@MkwS?Q*Wq7N*GW3w<5kvt*-03t(i-_ROz{)p{I7eK8IOs<=J3i`K|as`18Q7 z#*;Of|3%tY1;y2Gdj<{e?$WqJaCZmPB=hwg%@+9w{7P92wYZgqFY zdKGz*!Q<4pTPT)%*~9G|1IW#2W``j>XYK!T3j`9z!W9;*K}dUH{R5hKnQn>wPk}+@ zUx9)4ca!bE0>fWzi_dRkUW5l`Fr9KOC$e?36qdy8@oVjX8|L#LJK^DORqYEf>KAFP zO#to@r*?x`*1{Yd1yk=Ez`-G@9V$*=<+yqc25_+<&^*VIGmNcn@2;t2@1EM-t*gnJ zZ3*89Q1A~NoFm_!r|f)X+QM z4U<{TfY@i`WkEJaETl>=c9y7Kl2qY)3^eZw0oJ!M>mH+^lFxAm`rui%I= z`@5eQ@Hqt%JuU5`hm!rQQSzD~7LN<6oVRWIcyPcswZLR=fgHHTq7TfH53&M2P3C-b z@I6OK3@k4m4s?*>Cb&|1^{qqP0QXK(O}~z8U*^8sZ-W;rlXy0~WHogA1?FGehx(pT zfu)&$@}AMzz8m|VUaxEtC#@EQb-QLu#RM4^*ol=sWGw$;{sf#Ks}M$n*VAM5T$I|b zp&)#C0B^$9Z-SohkwxeIj5Ry-*0cPqi6cLd;<_ zpooLQDEx+20|bMSHyFMSZltQjpCe7;S*0?uX>6mNB?4aD-QP3V#)T?3R1quHJb&2n3Q;v!^HX(F%2VGfZfs@dpkYIpp$ZJf5UzX%zC^-BZmX>8FSmz0w5 z7z{H!jjxB%GG}bU(>c72KNiD;2}x-`_S=Y3m_KM9D7O^)bTAArMH&QSXYv-tUO#6w#shuQew1_WJGyr@^;LhY(uIknwySed`9l?5 zmUwhnfDO+J=f4{D$?p#W649qe+iw(-5m`{ESBu2UN1g(nFG>}ZnPJm3f-U*6$%oE3 z64T@nQD_o94kQoWN~%N;)``sP-aS}51ILSHJ<-SvtgotQVm~B=UuKB#+wB8Uxnr_D zYmR{F5`(H)hZ9tx_~Y32hMifMod^8+3c zJN*CkVt;XTJ$0?G@(q1FJ~x%;gl}ruuKi~NdiD4Qz85D?6n`MXz8xVyIQx!u2F4|P zEUAvzIjq^*JSB90y-F6MhNqU-se(d9M^!#2l^jQ5a{VTX&>K!jdWo6WlWvV`GdB$G zrkYVRe=wXIAKDHEOw8}sXIXg4&Er=q-LY9eQtKgF9O94zAMSaot$ut-Byz-Tq&RLc zyWH3_OA~CCwx5@D1x;E$eWxsR+`f>KKbY2GamI?3Id~z!1akII20Xj)^4_Z*WnK4T zesnm#;uRFOKP)bs^oYE4;C}hNday9Wfo6mw6GzUUUAQgmW>W!vhfPJqR3AKh{(*A4 zSonu^{$LT@q?%#rPgLN)2{wMIxZ74lR<7~EthH4WuTya{9Isf&rU_TG-aNI)5@||t z@O;Jr(>x{fadBrg-zn^VsyR6N1T=N~)WPG+9%I4J?B6eWENhVGmP8~3m~U2jn(Dnd z!{$fVuas0P^tJY0?7V%^t3m(_ww>t4YO(!+Ksj$%VF**r?Nyx>`y4`->hNt4?r)i? z!4X`m?L=YX4`v*U+ecri5E*7|qq}ZB@ptoIvxoF}>?2d(2SCX@Q3&5(-MXm1sT6*b z{dCR`|Cby9M<)Z@o=MPdYC)6z+l}@=r2NHVnB4!M1_O)I{-FiPB=++Ex!p1T7xqaG zhoRdj0mDAy;Nl=j!4A&t{8RAFS#HX9Lo4Ums=|)HWsGS1W_U})q*>4}#BU;9@T76f zQ{qSmlbzInjc@A#{R)!VrM(vuf(RAcc@XgufvF!?(;&9-oo$xrt+P@|9NsJmj`JG)Wvjv~y)T zdlx(^xu0!o1YrS0?2nfDzGr!U&;TbaMt?r<{f&V=DlMV<5FzTOy=@C7QSiVl$DIy? zoAWgTmiV}6daaEVddw*apYXZ}^RH`>vRuQbG%2-be&@y9oyZMIvE%x+xQP=v`pzqD z9^Gw)83_p_QeVXq_wmF*>jLwNEvwOxmjn(VjfMiT(=S z`)xeW(dMs#%ibt}R@z`TJiPso2N1;N7ke|6Q=4rjst-1Y)X(YmBbm~;Kw z|H@XtgyBH&uK)ALhWR885618I%RdrXGCdbF1zt+^a!`iUpU`8}WH#5H3!6vUkMoT> zbF+ZJj;_^EBH^HnH~VLb5u(G#xrULK^+@EXkB-SIQl5!<10EroLj_ffTx6jP6H{C0g5?f{m;JMtJMrT~{g^yNcj4aSrJCPEEQ z542PUdx%fp)^Lj0P5Xkl9V0geMom)L+BD@rabr1qosuvDCm*}tP8sC!`H@2I&MuAL zUr~Q6S7;N?Zi|SmB1j=&Tgl>F!pt$$1aTBBl&TinzYp^oNGBM?7}bqzKH~i zr4&K{qc=+ry1FMz&1?Oqi!3AewrsyF!SbKf#Cpp|)193rnG`nEv(}h=F*HS1I~n_v zg=*1?3`Se?7j{QVz{W2%ZybOGn{S^47`PKnj6;VXo+(}@l9cm~DJjOru9?Mc^6dh7 zW{DvlWvsW&?r{K)2lor@;x$4~f8yb;_r+<0|G#;6w|xPrn{&Hqr+|~3$?;Ql+I@;W zh19RV>QH3>PVN3xP|b@j$dpX=pH4X-g0A+I^dDZr4!5Njpfdn}CbRW5^?2N1hjGRx zN+Fj1dlmp!J;VEr?sp<(lfKTIyIqIN7i|-tQQ((Yx?}DnHpgG1=RfS7c6%!XKav4k zB^qDGuJ8T4MY6vgIu%ZMgjc2e0SOqcN&iAUbV`sI_x5@{kKN1OD_OT)53?CbR0*P(f?cB^nWlSv?nmo7!E$a zYi&M7Pp(4Y%bH``^;S=s`TA#m3LJV`_mkz-%U`2I zCSmM9oTa`%5PzZq;pm!l1U4@G&pghQC56m_#z{lZ%5-_W#mQOK5Qps-;S38*W+DVl z+k7HhQljO|V!aSV-}A|u>x8m^fk|V$={3Rli6CB#Z~u_fumFmndy%Wq@eQIgO0e_5 zPnWx5ySK)|{rQd)10WwLA^Vg3M|`}a*A?~StQ(u_F*^ISx*$&!;bxSO&+*49cGZ-d z7}Cu;10Q`*@7q-Ob$ixT*ykc0=g`t<(cl6_lI^}*hEM`30zFI`(b|KI%uHRo$;%PS zpUP5iaj_C$)QX%*VBkWAbKdv3j}su90C~AZ#kvR56b-RH(#o3!n>X)LnTJe3ZH&Ho zW2Y(VnnZhin|avqbrrN$nNm%OEDpO@FcRT-`0%rAeUXQY-u=i8c2j^ai-4X#$Q=kad;h~YW2Q{ zh1bWV^!X9k=lh-;5!pg-V}x?mBv*8YFY0}^!{Ks1W(%H`Pw1%LI6$Rryj{ce+?L%X z=@iK>fpia1q!xkgG(Nb0I<)&9OJPRP6S>Rj2iP5N4Wki`>=cl?7W%TWW#!d&-WroN z#@34PA`sFN^6_l7Ehq%_oLqJa>u5oLWcF6ENp7s<)JI8}L((HRdgAzE<4u1BmDP?6vF$-qG_bux;*GF1VpOW9va8QI9Ppj`tkT8a5kUk^Zz*{ z|1EPAK|@@5Ip;yK)%$ir<@*SfNfEO6b2?f2=fYlO>t)@u%2Zxaz{g>H*`#QtmLpu# z8i|Ic0=sstyaxsgjtY`g$fu*~)Vj*<4$dXB4SwpK9qbv|xQ2lwh;=VmYc&vVB1N&) zKRXr81?ySVmyv_z!jaYzHX$n@!DLMeG|*6GQ}?X8Bz zrJZBVRQiYjfn-L|$K?J9$}$68NCHX2ru_Fa0jrv%t-%aGK*wu=DL?!A2fRByk~#h%pZgaDhXAAM?|^1VQ?DHKl83O)JcR=?e~XU z7mD?^LK8xkxYgaa9t$o485>A;(lARjK4kMXdGfyR)2oq}xoU+_j<}wV?rc^;EADJI z36yew%)GNrfFBhW9|F@sP8ShHUTstz#@--P!Dnk~CZQw3H@M7owM<@rwDg6HM-ftyf zf4zq@0x#40k}W`~T4ZR&HNqS^)3^jpMhyF=vhAG;KyhE`0#DJNII@|IzT_bGG!PTz z7c%0zg^ph#NKv@XQQ@*6vlmgZGC#LZ4iSc=v56qvS?K3J^d|O71iR~EnPDQ-Mz+v^uz^6(f=n5 zMPp+%HPQX;0>!S-uji4HKQi5HKo?^WjL@0CNQ7chJz0>7fGI5NeB{pP+3T0u^AQh( z?S230SwgvlAxGh|0WmDNPRNFejQ(oJ_wL;qny4J2`Yl$l{o(<5IU$z#_sjR?8QrZu zqZb!vUxd?bO5)_==yf54f18ni-9LF-sI`gC$E$i1K%;i^^WAd|HPg)=c4qo5N$knRVNK2-Bet>98r~e~I7>e-GtvDL z#KmijGZ4#3<1}}Lq;`_B2K7#~X3ZFm&5x22tz+%AVYng?;6FN)TJqFyVhz5@dFZP~ZEYTmV z6%0$Cy)!b{th#x<9KuTrh@;ZhcrdT~P^TiEMwWgY$O`D5U7RHcGQa$egx4O$PPozYy2)}1QixlX2&J1otrQ69 z;>DsNqx=WDFd0Gxq8g?5q+MM7qWy3{v8^yvbt{K9&uHys5N{!Q$7!UoAMTU zvAGK(n6fkNfAuve#Ky!&GnV2un}afNUEpGz#JdUiFbdB+{+8 za3_9&ZsUMf;UATCJ91us#ojjF!R}lc;2-=T`$uF0&MVB5P6o`gG~Y^gvI_%Cw(i(| zOlrnq@zlR?zqnn6DsxGdF8rw`vz|82n#e=2cr06Ef4$QB5$naxl$$wSDEzN# zEKjGxX4@{5h>4n+HCA2fPx0Q_Z|3&e?KlQ)UeO1WCKMnm{p_U*N;D1y zNKkoX+DbciNJDwgsGP;@`rLhN2PYjyfqV#(M|k!GYMnY}XGRtx9lx6lf2;Scm=rpP zf!NF;&j?<_o5lT66OX4$Lxy_AvVADY^mW-=;&|rQ<1Y9`GL~6 zGZwYB1cQDeZBCC5XY0+z@_Y0K=yvvoCgV#%?r%HjQ@-(}k|m!+mTVp`6h?&`E%D#h z>PQsTynCnnW7NDQf~g8lM_zu z(fYBwE*sze5_NZaPf+Gk9HbvmEv`0Dl(N(3jW}%|SF*EE^B%!gCygKCNrc?BDmG#G zraD&;mb3icF-dG4N#Qulrt#WD^PMp>?7IJMYwNH*4j@U8JCKGc{OKqZuWE~TWhM-i z>S(%b<&C^6fKf0OI#s7bktVbc!o;_L43|jsOla?0?6@1%$8i*~ayv@ID^o`zMhw?REf9maPo;2wf zPamVKH2jjuSBt4Ro-QGwF8u40EzYmf$(6=Am5J_dVveV`Na>>*$MfiY&YzF?vzH+; zXb@({4dO$QykehqpW&@Czg|6v)zZ5A`=nS!$p+5i*rN5NLNg1 z#Tf9=$nFFWN=M1pHii2y5IaimpaI?d`l^?lC;i)b`rGH11LhT#_o(0GVNdo3;Ui7T zt=|bHBC%$ZEZ$>gW=Yqp5V%>=*p3F`^WI@4eQcsrrMY3O5HY~rP3*R|K<@9ibMH8- zQFO3s@I;%Jcz%{6aCx4YLVIaMCbb6c^ZdIyan8I3Mw_Y48M!kk`SL9*Zy8C!3UA2$n5-1bMT))fh{_twj<1GIOu5|76W+(G{=ZEQJEp}1y7D1Q z>)n2p2=2{k+1$v?K)p6=ex9kLm)~4eYmgrfIDWg0Ab@~LRwy>;I^gpti`<$jqD z1sRx+)IQPZzHJpQn+0A{1oL{TEe|#NT&A(n86m(sXrYci$+MD7DW1;uxOdotMt}m} zSKPnN`SSfN7%sLj6!J!L{`kIi;XY+L7$)sjer#rTTr2Si+kWJFU)=o5EFSjA@;UC@ zx=!R#s(mR??qoP=dTw51jLl~Y>*2h|$hqpxGEH3AwQSmA`ntz+v2l&3()D+Sg&+la z+|ubsGU+%c;9ZKPc%{j$fQe2*y9NZoahCfouyC%Jo20~HptbXqTomUVmUkQ>ivO?| zf|mq-rZkOfW+9kJaZffNC}qVh%sYt#A>MVX;kXTJv&`B4Hz7FJ};)_ zizHz;0^dl97HVgB+JEd?QJRqn$lNK4Z1rwG<7v@k-i>B(pu$EfqfW0HgCRSaByo8f z?wSS5Hk4QPLR+O6UG${-N*QY%JjrNid zPUhl7^Y?nBquY%90yES1r6w(orp%1_%5gPQIyD@KB9k>%+YjF>GHh++j{Z=!8VO<* zt)OA+-u7QhyH$NtlG9U$5ReXN-O*~8HwDNiE3>>^bV3cQ#fo?NLs*Rsxjyi&7 z39VeHFPf;f(NHb#pO`g>Zlygddi%*dG%_JE8kjSB8td2GHjNA(p9E>hbSK06cH$Xm zSZjZu5~7;(N(+0AEL-P_n=Rf+np8=G)QtpXR4vCdg*euv*!C?{?2|r`>?A`9fh@W9 zq6oh-PYLf5WfnH@zVP*Y*$6*FL^;~>)Ew&0_aXHAk^ zYdgP_bra;ff<3mQc7bKbQn&0t$; z4(+~tyLO|9j<9$gNJxgNH0q@Y*)`p}7`#TOa`llvoP@K8A-$+iYx*PkJ~)ul{)-Ji zcAK~QJ2j5{-BVYjo}uMy4^SqFr|F1VYBtlOF>4hy;ZLY5KED0DJ<${nt+jCKG!~pQ zq`g6V2gfbh+tXt_&vnsm#)wBad6ShHw}ybGL>K{O$NovCU(c=TN7kxqMWCU&^_+O} zp7+HHWp;)|G$7)E2&{Y|jJG50E@6*zc=uK_(a~YdSj)?g*@ScEM+TOx3$7=GL|hX_ zp0DBgl2*+S-|N1ig7-Ao;`Hu(7v4DXEr_x#O3Y}qA+&4i7Zo{5avME~ieg}7(l|)> zBEV<&Ag9P>j(mJg*_!D*y^FBTk8!aJg%Y@eGgjpWNAk=Tik~Q zw0csblaNOF1-_ntT`b619~E}Rk4noEcyGarwZJL3x9@9(U^2VzBYT#K7lI-Y^zuuc zukcAZ#_#*a;Y0k_{d5h&u4Rnw%&`?8PA@R>d08 zZtCrnB-p@`4~elHX$jUa{G(qjK4f-2Sf~*W|3x3c@SfgnFaCVQf?7VPn$tZaJex|P z;O?Xj1JGH51*FtJVq+HRhQHzhA<%?vcd5r%L>H*9nX^UQ7sLrFbm0uKzya0+~n?&#dG6`c9B?nI6A{*(O zk_1Tf=n>8EZH%NHNNT|64o5{8gSDm)@|%{uzfzgK8|MIo@Dz##avf@K?&Z zGo~vtOQYBQpd8@1`J%0DiiAz*+Tm8GOI~F4J6p9TrP1jyn@u>{O165uYxT+hRbZB) zyQ;n3M+fo2dz*O$F%yn(?=6@~j>-P!O{;{&YQ{PcJhk5V=|Op+;w^*w<8jF2wz|kx zwz^0cr=#&q=`tMZ*=j(IGxV>gBIKurvWQ`gTWpj35#?L#$x8)S%B5Nbb%D2=AHg%4 zH|g#D3!?_JLEY71ucP`Do?|Ny>m6~SB$TksY5V~`f_z6n6uO%n1R1PntXRDHqWUk^ z*y+GK@hTNFhr{-3Ji*#bb#Hlkm(*s1<%9Ias1t1-34H&Qf+5D&W1uA74P0;et!dCX+Abz$OM`vq0r~3ULSp?q(r#2RcF^n|}*8^Ts;Vvg7d;eyi8h1W(IB)pkk469=Vkr%LfL>HGWr z0N@IolzS2+wLbN!%&+F!T9}qj%&q(yRiwGS5Db5^pC+8G4*bZ-L?BCU$-C7BFE=52 z6i!(G0Hd5O(LIM;LcZ#p6i{or;`oHp6M>K2fKpyxgjqiK{R4v9x35?r-%|mp*Awk_ zCJw7P>mTgJy}QRT1|JKf7nMb_9f!YX`h;YN4QEhRy>>W`92_?JE?S&<1x>W-TY&9X zA4+^PV|tw}25d|U=S^CV&YFKtru1G&1x4BAj+&)=qDq0~p_^x${&YDZh3jtCBa(gN z9TW{zzD(Af|-`GrB?fZK$&yqg?5V&Hl{Bech4@2%^#%y z?{fNIP___U(igoU#doB*YzgU+hcGhXSAKADJy~u83-W;HLejZPw8Iu-xiB-G9AM_D z^)6$cwO_#7VbIc26!v_A9zE8Ww=bpsoPZ%{ZX@b)J9j>be9h`nx*PSb5nwK&6YrIG zL=T)9sAy1b29tdnt1&`AQv4hp&7Rxgcl_a<^Y>nBF3KM@HEiCyQ!urbD$*62dD^(Y zO4mk`z{1ZPVs?VZcBbNC10PJ{FiKG8v!AJ`qa|>~=oOxbKn3R&;}-04KzA0wu{R$jCYT zQZK&f%u1-@ALI<>MF_TJU#kmo)aNwn#w=xtDBd13=1i~qqOaGb>aPTT=9fpaD~vX) z+mU;z7Q13%(XuyD8=V1uQ5tEsWE4B!LIT*c^NqKUL!i!b@9T-45j!t9p6)`M_Z&X0S=`0HR#=fZW!E|0W)O2CMA4Pif%QApqH@S(}*&k8&O zl%x>ph6-c%_^qdv&k2tZ#GWXuVgL*+2WQU+^E&#&+uW~U&*VWb27%a13mcBWe>dbi|2KcSij>o>AeT^o3We6Xp((+~2b!>=T=zUz+{LQZ!r?)R@@|C;6S=@cY|_wx|E;DeaHcikNCQg2NM=Ny8OrV zl*|312)_o-Ehbw$=LiVmvjtK}_u?GsW0KkK^cQ=K#WZ>!!$y+|22#GK_1!wtIK1C+ z>aP*u*F6?bN``_hkPkhJp&171DTRR!D{%Icd3y~{a{37;yb~5H0xRyga;N)HV>W5w zhucy~sS@LdglPO8I7C`P@Ff=7^u`D{OkuQ+c~_JI6v6i$$Y#z4pv$i)uL;D`Gf9pk zvTy(CDtVy2pkknn7K+*5t_o6>3*lmjTIOa#?e4P`$XlzuK_Yx;te)+fEMwSM+C}Um zg4Z4~1mWMS-xE$@NJ`wA+i!*1&kUozcaI5kAJ<8h3HpbkQ&Mh*@E5ALHD+Wsxbx1O z3u%B}o6v@-k!P-@6;py}EfKp;#d%z46J^H}|A%Ig)!i2Z9h+jIlnVzw8 zw=~c&bgZqW?l&z1;!WAx<-eQ9bH6jr#%Pu=V{!7MOm*!+hTZa`ZdD~cBy3|kbsdQM zC2}dB6-Q~VU?B>lY)njIHc~TwUTN{xXHoT_w&yMID7Y((xh_!r=41IAyuopPJKs=@ zJT|mowtx3hvep*M++P(QP#)$Od%4=C)+-v_Z#sCLg%{(9zRhO8alfvAvWRc40($); zOG|dw6f=^H2=LLaB|5Xbwz4H}kR9B(L`YAWon02tY=e9Nc6~lEV1r`Vm!F7u%a!*4 z$iy+bczigkHBC|ZAl&JN!D5`ZV-en{|Im-#BDkq7}-q)54!E7 z(e@I~b-JD&CuH$kx?Z-h-Li!W^1w zs+-tgzL8Pg(job-HyFiSN1+I1 zPn3Ch7H`gPc$g)y-sbk=2$_s{tEG*2zCMM!bQGn4TLM8s?pMr3fj%2%@MQ1=)jfKW zCt?D!45~12@2*PpY*Aq_esoK)tzM}sLvR@>SZN(0M4iFw$?TGRN5lNiP+v$e@p*jO zc|&Q3;hl;E254n+jW3X4G8AjK(86$ne_alZ@l*Gmjl*G;C5(DO=KKwkSomE6R~d&z z72Oai2}*aL(ID*!Q{40WM8)bs9ArCckW#kZ@05p&`0yXnke6PyXX*V~88_|Y_W}rj z5#4~zBzZq?I_d_J<1=~aH48%^19*!6D{PKR-8d7w4>QRY_e=aie<`+1+F~8Swbb3j zwe+s#L>6lJ>@$6uNVfPr#DFr@$!_=i8n4$p`^b(~4fCsVrG|9b!-p&tecp2Z=#w>~ z!^0hsepH4SOBOls(?qYCC-VtL8^)bVTPnoqy#)#Ge*P^bj$2AG{0nQp+Gwou{ykM$P%$w+#@1{P*h*x_c&gBN&Fvfb7F#!1C6{ zTV+^c7NQ%OHUViwncLmPJ6K&uyu+dm5f-%Qx*Hs3%SRGuHyy{}W`LAdk2H?NaJJj? zG6s`V^)e4bkN7mM72}fZOrDp@f}?SL6%b-LUrIqB4DJTnBflt9^M z``IbfR>V_Lmq`NU^7aKDD)W!+CB-ewwB29Zs3um)`fc;Q^81m9&2puRBJS^k^IyMZGHXP5{Ch@z z`*v|Fo5!C}>Lm8B@;B7+$a#77XfW9K1m>+1YF7Q6hpFh{Ni4f%!7E zeZ{V_U27%X>8JX4;ZxL^OMlQB)U&r82&-a_Q2Bl*ux&5RB7K&(>HKvV5W~9PG6&Rq zC+#Ei9t4V&qOI?-nLGRU-27g?6j0`RC7R-B66f`9p^AsXfgB>Z4r}-6&Ax=X!FrXJ z7rmmWyQw6STYr-ywb82)i}BQi3{zzA3g+`Rx7vQa+Oacs+z#ENy15Uoa@Hv80{WLvj*LJx9uyF8F_oMg z_+1hvfSnqID|15PKL!UKx4Al+xJC5<~q_#LQy1L7Fm!jyO zj`>mOrgHlq#%3K(hs?^59-rIRPgog#6>r?CK5emd`|Jz9zM<;1{zWUvskNycX;GqYg`j{j&7x$uWnCR zqm7Nlyj{&NorFdK8g+3vD|x29STvAORTKY`|G z*mZAPe60ML%<*wU{9Dt}fMHb}8-3ck9vPd<7}yS(ISfdz z0_Fb6JI>`?;IoIGV?xBN42+Bc%v~qX=UEMBT;L$ej4;W_>w10=B^kW&n&K$)6kL4@ zq!JP}{xLnvDX&Cvy`V!1eq#@UbT@uemoTb0)AZ(Uj$8^Ck_C_GMPV63M7dze9B3Vc zQ9@@|6B$K!lE`7q!2vKHg?ltJLu~UHX+Fg1rOcz(ER>Ye?4-tb2JY+YM z%wGv|+^Cpca@{KB0hEOyN-o|hCdlp@3t z`iwa4+S}Mx=8Q9__ZqlcjN4T`Eqgh#M!QGw{m2>iNmg7Co8Y_H?A+@}P8q_#l2fS_ zJ@t1d$P+n*HIY(-Nb(Dz=P6xunOf{;o4xXdPddn7%S0$P#^8}`i1W#q?zPo#p6nWZ znAhhkdgXeEbBAN`FMH+Y;>i?OE*0?d%m7s&<`4)2GK?Gt8e{J{#9J*J3pOSt z_Z))T=;40hZJ)XI1wM*&lhmH6E6F2Z2W7 zm~(@MSb9c!$tC##{ZdHwJ^DyM(Nt$QgYrV>x2IBc83Dl>sC75gR0&yT>LlQMwdk@? zr+c%B=X*z*(fWb%V2=ht0Pg7=bv-VMWsV}nAT*SPZJ=8p5pb!a<3psKA_6HFHXw5w>Ta_5R%9BuJk^9Nn}Ci@cw(2Z@?B%kB!ZM&2&Zr zbaL7K(P%l7JYE)@=W;8_$hr5m__8tI)A7;`KLRmS9$zrkr^ z%o04%T~krhAhQ4Fjd`TmKNBye$?cqZ%3=h-)3TLZS?aJZeD%8=TsBa5rC5aNl-)Qd z8JZ*`{8nlo|CF}Cj#}eGkXP`WfB!+P3}2(6AC;7hjMc_#$L;`!9{i=E)M)aBUR4%p z;GDuizH|I0Ibwr#7r|ko-Q|J-kH^={ z9f_@WJ#|5b6v!|~hPPnPtzSR`pbS|(dL!_R_RiJ-tSV*ly_a$U328g!nAS-R{N(Sc zwwE}Jy!?A?Tb{P}*P_643)+F`>N+mcz0~VRMu+ei;|a-v?Py(~ZJ^gGv+y6&vIKYF z<%eKjV)LME(;$LEhPLC#vvnr9%9{dzpjx7kcx;mx1Jemz2IoC$d2b9Cy`DIDJ5U_JGL+|Z zHIU9a{1AI;hJqVUs?Tbh~s7s z!F+@3m>5pl$T<#JVC?sBxf&~|NwU)HsK25Z(!;go8+O|EJ~^Jw;fr2Nic0~Uq%6B> z{inPvwPB=ov-*32R|QJ-kSM?>SS1ou2GHqzW3QsHULyZCklAQTi9rMJQIx{h%5rCe zjLv8}l0sbO86}o|(%S`Y&?Sk`!Tkx*ddQ(S!Eu9X0Cm|!ZFhq^^Bpzlb^|@Qt|Tmx zCBw3x5>v)Y*a8uwph1!Ba&J%c#unE+c{|`o5UazMS7T!%f>EF_u%SE$MEg0<=}A8M zayH3ulT_FSCddc<=HC+_I3J1tptE%bH{piSk8Z#ZbE>JmYbOhI(Vo7n_B~hTH0sF^ zRf@|<;RU?A@xkpGXruQDze3EnWH|7PPQ7@L`Rb>*?jT!4Rx_K0tpFPj#O%{p!&n~6 z&oaj!N(xZB-?vzkaJCT{K?6m5#0X2qOX)(~ zg{Vf4MI6XXv>rp}t#jmP$YmL}N8F4sjD1;m8Qyt%loF{)>)+FRipb_6ztE!!WSd+s zU5Cz9$b<=LsOYvA_O3{z6Z}jThsHA5GHB7fARg@x_P{Ab_5)_86iI|c3|CWSBl~Ml zZz+FTuo$Z(cy#EIk;Aa)_c2R>SJ6r8!W#9?kXBl3vkU5$L>vA!T3@s{Vu6-JzEFP_ z3ZNOo-lk-RgM$-^nKL}tro``g7~nR+A*1!_y1)T&Wr`>XxPiP5d8-^@&A%l7>BoMo zWly;yMs0XFYjg(Vv)_?)YqwA1;i2~5%$&W!{Ul|e2t}MInWG*Yz+9RvcHw#%n$eI| zykdXCBQ=gup9>lW5xkoO~^;+$l*%B|(8C9w_cg~g1 zLGU7oH+8@GRw(CHcG_)b?-CqNP05`<9vKC(WvHxz)d+J*KnVnQNTuC zdUHj5TqonpcDwDlZwpx=IBnjq?7-U6vd7(f@3^04%4Nsy0IzE#5aF-Bh>87rqGdZl z8zJ^xWRKtzEk5kj{gB^uhz?x-flSUg@YOh-ja+7zU~ywqSnHXgk8a40tXSW5Ku~D4 zY*{#8qTVCIpVh!y9UaeiP|V-P@5GjK&rJ$^GRGF^OI76o7eY_}oJ=S9j?P(C*7L+c zAYp+_I?khqv!ni8i<@BQP~3H>0`Bq77g-|)IwJDei|?L6bWqEwr7nZN z7=)|C1&^6YmP2$C$B$g;G>VuBZc++E4#^=f$o}o}KfnmJq6(p8lrC)6qKu7YaNT}& zLoOo-Ec>LsD{(`oSstA!go?U4WsQS1)z%c#DagMa$!bxSw$e65O5)+Ngq@x za5>zC-AHJKE|#ZA=!I(AR$8Q}Q~1CZZ$YMfrihM5pC5ZEs(F`eGf2KIRHQ))(bmS( zXcB;Qbk@S_3+E_;!$kBqcTIk|vD8r>XXs}TdMicA9lWA!;R?G9_k3bIe6;MAZ48|) zI@HVDD9O*%O_SglL?cjwglDM|^H@JJWW7(M1G3X8JXWfit+aT+6ri3?ZiA*R#M+Zn zyKN=2Xy9&>5CNvOHW7>-2wR5%{Ee=sKQkojduw~GFFL4@Rhl2S3j7T>zZUX(B-1*V zqXx?4(=rqB`=us!Yb4=T-0-H{5tRJK9QzT7CIg-N<;jiJLSux$LbIx-m)9$Im%<~AlE&#$oCgK z!E1l~ftK7 zNV?EqZs|&pT<87lwZl9MCNFq*>l`nbIC=hhp3e$lN{~77@W=oZz9GU8#n$XVdiwlBGPx>FWYQ#Jzo8&kOP{3d(puk{l8(d8V-_kfa!?;-FKz4 zS=0`P(`JFAm$sBt3~rZ)v41!;L(wVoODv?%)Z&f-eZzdClMRa$$`Pr;2a{6ON#kC&Z#MwFYef{@W0M$>t=-?^2kT8m zRi9JduQgVcij?;qE+fHlB~%Ck+?6{yt8Gl}IeBe+9iSM+NC zwJ&#a;c*`4wejZHb7?V;qGpv9;H0-kFCC|F&60NPg$?zZ`t45v=_k!3*_*+DIK>fZ9RmEqsBqZRpkEq6G*bX*?d^X(2PW{UJ?|{+0Cf>$!ZxU^V5SAznc{~N$ebk24ivz6XE>9 zHbJqm$|th%R3Sy*Zo_MubZ6gid26}blSk@Xn1ShwipBPfW`x2F&SSSa!$WvGaEPE!b<}wHRV!VJxoPqa~Q% zmhR`b7N;E^yB;03>z!ImEnzmgDM%w=ybT%|N~LKNRsI)sU%`~uwrm>+1Pj46xH|!Y z1b6q~8r zS$e{mi;yTxSWhX#I_@gV@kfUIY_tfqNg>~jRE`e3)h6FkDn4fE0i49+3FU(?^ma5% z)XLzdswMHKYSyqvqXG1@LnohdE#(=9aAFul+5O1zGrB`aO7^e44}t4KA9lB6ag_7^ zRPSYZIUaI2#V9>}kf1E#kU3^Bd;b^#YjVy`@3!ba6v?TBT5ed@h{NSR?gUn!$Z2um zlYwIcGvc%T;OD!`>-z&?NJKcJKk^p$kC|c%ke*FZ4@TSRuHV)SD(hZ42CpPUlp6;* zmXtiHbCour-VEl;s?oQ{| z*0?YB0YSJAw=aLab?k-{QartNVJ8Z~vBK$|lpm7kcC@neYj9fT8bqG-lK!b|n>42}rzRcq5~8u|zy1W7hMQ;ds})0Uk$ z*{^6?qF)?{+c6}=*rw=MCa|F3TiPQy3i;h+t;wb=#e7mhzUXszWqCJc zM}X$3-z;2Qbqu5*w?62lp5xGV*YVFd`cv&zz=JDU zThp^C-@iGCM79?mKy!C*5&kg+k^ePs^v|tk`bQkh!5o7tXOgb>_>#eF*(_}fA|{wP zyq^eqDa}Jpg0F#~8-iXMXra}#rsWB-VLbT}O>(upnxQX_4t&fxT&Gr5C!)Z56`vd60BFFhj;?FuGaKA?eG~uF|s<%)` zBpu^blVXm5g1w;^mT|AS}oE ztXL}vwV`_Xy8aUO;o*5l~zC!PgHF8b2@GXNutZxnNIo|JhIWFa(j5OQM&D@$;VNbuG z#;5+Idv-77S_?tQ?Ruo~#RC;5_0)y>`(>z{Ug1dKaB=v+NM8?7vTPMC-6Gl;=Zcut zL4j44S|{l0>$xyXstlwpVJ>8v!VPUp$76T4#JxIN^bZN49COSQD3Dvj=4pxn3*4U7 z)3PEG_F(v3xC1}Z=r|G*&b_wJHIJ_dCq`PEa8sx9b?E7~n*r;VP@F8e&`{aYpg#+H zoeR;D1ax>QfvE7|BU(`LBkz{Yxb83FuA|K#Q22YipqO3`qX}39kt1JN3&{Lxs&Xl+i3N%ITSuIWr~MahOj7E$aRi8DRAH|vd5jCEQFZUInMY*YJet=x2sF_gNA z0t&_WTkA2CxEn#1C}TlBYTA+d)NfR%NtXnk>rc+|&IU{ka7@ljZU4LK2h;&q_Q6aM zgnybuw>EG3)&fKI9B;&K^5L=AQ8PWi4LR1cB3_bv#N;90Al1Fw<%M#R+j7I+FOZ;D zO=eFp%8r?*xQ2}Kx84GUKq=+i%yxlh=CYz0Up}#p>eRtkb3`?4Kx8T`i^QXr7bYDS z7DL?{7Qm9CBzZtW_r)xDl1NZzLU7@@#WFydJrN zMTHJ|$HweywoPZ)L6wa-p8)UxZK9w$cX=+mK}ARzoIoo?J#fBmp>rde$ZMw|&TAqY zW+S-ScUSyLqUhhK#Guv3pz(bY>L3P%cv3_5;=GY`K03oF1o43*M#qd2_?4^eM$m$x zSD3=JD}*igIVK%(jVeS4{NPm)>hWhW*(3Zy!VHO5@;%6Dqoy>!iz91+8vimM%{!Pes($`z?Xh_QiDR-G1c$TR-;eH=?wK8eQ;V(1TM=#kRZqVQ^6eR zCU>nVM-5I+LSknBI}3n$p{_Iq&x5F^a8qF{s(znWcLl$tHJ0s)Rlqmq&r~>_7z~Ov zl}7zp3whOc4D?5?O$P&KX7V+LO+1s!G$plb?oiF|;X8b;5v>Rv&{`tADSYKI%WY3V zCh;)u-T0k;3D}#*kyM=A1Olg~lHc4RbC|aGDF=ljE5uYyGq+NIm^U}!0PhHcyhLU@ z?qsb0=z{M2S5^uhqzzi z-<)pHXf!MZqIGlQzjsung*jy(i_NnIS@WB^Cq7)%tiNx66ucY7p(;_;Xk?h!b+cUg zBH{@q{GVUiBp{63Ry)d~jWlf>=U2|@*IHOnWCWQ=eNa%$bU{c&B;P`j{vhPkGHa-O zj6|i$KISpQ(2`2Rzkr(}kp&$r(o0OZTb@KhpCBLP^<_=vw6R}kuonTZ9(nGH+Ss3T zM8sN(Z4^&WQ!KKLpFSl?5pU0~vjhQZQC*WyZHzp!GUjFI+X#h$0xtXs5y&CJB^3{` z-GP>*Rdl?;#JV?A3%C}QoIL~5X7EMTJc-2cI+(Y>GKvVlMR0dGk{H4AR0iVp7Mh{g z#wmnvI0RLB6V*n#e?K$>w*6hnniPHDa3&|YtmSymEr`bnR$%^c{1=$X52sL+y|Lef0<#4zpzVhC@^zR0o22^&s*4OLY<6gP@rO3-Tq!9V zReu}WKT$fF?;taw`;(Wp`p}+tdzmAnUq;Wv4+=#YqGkP@Pgs(H2tg5HsgR=zg3`r$ zI=^_^tEhuAi)n=e(U?48aw=i0DOBIv#YW%Vx2n5ff2wX#l|=*4T>e1q;Cm?vw;{NR zK>yaaEA`qQ;VU{oBUeV%n|nluF*=DB#?uC#Sq2Y*ju7WBf)@y);{e#i8*p$$3k+Ms z6JwLeanf+D^|?3}`)fRaEoNg&#F9ac<%$LD*Po`lucHco$B&trBMj0{S~HtCydU12 zX|!wBu-$8C=&D!+b549okQ{Nr$RZtaC!B_7M7f){X8|Qmby}C+H0@E^l#QTPH;>S( zj{oJMiB1E}d}Cu&xzsPka=q_~yjXYu^g|P^@!Omc{BIx&w|#;72?7mGw4{FL*w~7A zw*c{n)RnNt021=pr?GK&>C)kWF%3Fo<1ro`t73T0wQ zM-9a<`TAIn57#79;`_yEKgFAwgf*`js9l|xac5e!qPC=BsZao&Fc64jtNV||b@rF& z3k!>poI>ugX1}47VPby|d~%lDpA95bRb0Q!`RaJTLPNhz6KFeon(5kE8UK+8uhyg{yp=(p#VHM!E?{QcU^nyZLf>@UHY((~(V-j2=Ua(zS z*%A`Wi|-W8bv8H1B%U5EmXILO zL|EQYevzJn|6tAjjLO|qQJ!?J;0}JHa7+{iSCtuC%pIo~_bX1l*$fOFh>5LrMfLQ8 zy7NTpWM!GT{tQv6d)pwxx6$QWic4}$#on-xybEOI%5DDW?0(DL`!6wPjJs?Ie!r$C z$4B{qEqx9v^c$-Z!D}Krm(Dp9ay$o|+97PKscK*RqkeRP@vG<(J>AmI_-rg;R3X=# z=fJkUZ$D%_yI{z^IPsFY6$dUXcx!MumGM{8${fwpIkP$ow`sgM5G`7ft-q*oF3dQ zONL@0*W?HV6=-|c%%fj7yL%n&ZB6fu)`&SwJX9p1#?QmKj+fAxFE@dZC-CU6*A;_lDZ!^(b+Vlv^J*rVe)pC`Jt0?dT- zY9=^=E#m(zwgP4fc{LMF=%Dzkned*?1W6Qv55fZ=q?yu-|NHQArbZU3BjGT0Eu88n z8wx-^$*b-5tY?cHB&C!*T=ezpY#CcuwZF!MP4*9@(cK6 z!yEK%)F&+hu;Ah+np+a2`Qv^Z2_eu+q!+hxr(6N{7pV*nNQqzkw<%bk=_}FxK+Nss z%V$+l#`5fw0V{OPq-_(*3`-re_hBENcw6d^zaLCQ)=zC+4h<8Ix_P^=N(aof#VD+m z?59Uri6dxc!q_`R^!;cMv9gf#_4WjRAOcUIqAPKH5i6#q>jc=gfRyrQ+gR^(&h}s!#My$K)4}^cYqiSCa0On-GT5~`Q2X~s>DAI zbybJt)iMxBz^Q5HR#rBez7LCj~qbXq!EMs^I`$Op0w3um3=r^=)>9P@>a^=o>7E&^fUQ7$SB9 z9CtVc_BqAvGF!lrio$5;P{X-Uy9&11A2A~v*Fe*gBOU%Hi{qpA2j`@CcD=nCp0IEq zDr{{ms2Tp3C~Vr%EB=>sh#NE8bz91b&&6?D5-(m<{u}#|kKV8YTYD$Ej!#;@OkPZ>_Yv!<(G{yy5%3=C^Dp$PHchPF62w)L=x{TI!f88x1cwn~>kb%whg_k~Z0@@hpY*+0abNh4GBZU8_YbUkDYl*kLh-sz9U2d9F{oK(b`gDicN;PTvV_6wHX1o>JmRqHFWuX_;t7+lk!n zvjZ>Ed7pNU5yh@&tj6i^t~VU3OL8;;m|I(v)@U6=^K&Az7AF_*e)#FPh~S8q(z+Ud zJ(Z1+FQ;<9qi^t^Q%L}vN+0eDbVPW-hc5vQSNCO>5KUvcle1}eCK+XT2>Pj-%8`yX zXLz?YCh2*1>EH0*r?BAC(3J3^uSP5t@2w0Me-tJw63rfo#n249L20bL51;(n`OA2w zfFZfsJisv{r%1U4tTIpH_rN~gDs%RbqAc7v5XAoRN~1MbmK!BAa;4S)Q&znlt2UYb zlx6X?$@xT%lFMT?g6=eL*IBc{_K~W^4A=fJIcz>deBkK3;rH`Lyiyx7dfLD4t@`WU z+H2|R|8o)%fW76xQ+^Kx3Hpa)WEKo@$-MNF-ZvMlxmHDsJn{Nd!aay?%aa+-g$7rJ z2-?>Yav&O@i40N33$ zgCsKD6+2l1)8Xw6uCsXv9wyp@5Qxl^7P;nd@f{C%3IMLW?e@NV`ius3CifdiMLaoP zT?$U{pxDbP`>&SdZ)iYT$K&Ozj-HhClJd3j0KD50UKo`R)Eh`6fO-!VB2!xTuOKM)4Fh*@oVH`WYz!gdiqNsv_yV= z%&fo)tXF%xKmt?=jspmkUjcj5vVsQvTS5Yr%@gqfYDhd~kj-^=sC@GZlQ8Dv>ku3H z3$ie2N?dP4a>FJfVAY#oQuFEeR?p_UYS45b{;VG9oAF17;u@}ErAoo?-yx2BVER3m zaK8VHL#iB_v-47TE#ZrMKPN;0JD}i%nWcl(riyh-Mp|2 zDR~>!D(FIOYNi=|(YJenUh4-Qqz7Z5wXLaoZXHKj90Av2I`uBDV6x{&8xitH@=y0w z-#!0`Aq&rhMT7sPJqVzbqOX*al4lDLO`g+4qGw7e5~J5`_m9;~ah{+Mcq7C2_xECx zfesb1H}p>IbX2c=hoeEkmvZVYvPop*NP@AH}5Z43GvWFTQ7i+uu_7CnZ6s}d^`X)6_8cmj zL=5Dpit|_$UbfT)1nPwB_g5}j4k9250HKFmyl?$NxHQp#HgSU79cim@=f)Bc{V(?%Gr74uG#6T3&?0b`guKCmR(=dah(!BO z>A@FD=I`(Le?gp50%u#tQNx z0q`r(-TWaY(aMR5_Ok)9doTi;5G`$mV8U!+-iFUWc>0AG85z@TJ*N1@Njz8PFd1ID z=`$pmT6dD`LK>l$310T{PHNBr-3C}0qR>yBAoYhRl|Y(M?GJW?M`4A1G16#SKONnp zJ)56HR5mw3ExfR>jJItCZ67E84`eD`CdjBk0nT6E!SPD>E@WWHSFoVaz!3|8=g$dx zLJaa_>0A)8ie~TCfesrS{bWk|nsp!%RmS{R3-!y7Gm@_mVdL8(dW8tqGeml$iKG5e z5!}XuX{kiI&=iQh{i-4B8T}WQ2KPd+|fs&xwoGdYLg@H~_OOZh{_0Y|4FIu$hFEA|9n5=wdIYRNEA(V(l;N z5&rBo1<-a^J%xTY2p$tatq7Q^2uj1!CARq?<0 zi-hIH!vDJ90L&i=qR$AB6bCR!YL2Bq-GlIgn6A299lsx;Z|Q0k$k{y+uhaY^ z>;=*+ssm-5e_L?C>mgZ_&N`EQhJ0HPlr-LIS6F93H_HoRg3zaJi^^gUfO{Sl@3ic+ zsa_BhST4~Q{FigjJxKcE<^pfb`YE3yuGb8=Cuq>j@8G6)2KXbz}a@BjP%rb^|d;V z70CawTiyo)6?7m^o<|pFayLIL5DA>(!41Sb%D< z{^ik{EMEQ2)gmJMt3>HZ)V7Uy^cK+)3*?ftw_I1m>N^kw7R)^~ngJL*2Z8m(3ZlP0 z80D+aDFW-=czrMnKfqiT;FK_7Szt41YlfX?71)vhd{%{(zhS+?+v@z?ir!z&pC<$S zi^pc+Gb#J<`f08-CpdT@y$Ihttg*!6k!znl!@=eDBwP5aX9y=3BlsJ5%A#LIAyG?l z$(Pu5tNuy7`J+WFOIgN4U}_sF~&OvvJm2Gd^*#`5-+XERj2+k4Fv zp3MdD#{a*}Wg(A8=dfr52Hs4UZ+H1#L?%P&T}<5!{EXcO>aga+$cC(%+FFKPaZ_a4 z-)gnopsTNY-BGFa{>4gdjQ|M88V!aSdNhD@R$go7q<0km=5DNUbEvZWS>0@w_u_B( zQ`w0y_yZrqez*vihBH@4?#3B5T+kbbz-G^h(|p`)9@8%%g*5y|m{_09AVJDh_y zx%RIZVy8OCv%o@vBT5QyW0Ig(Qw zo=6(V_l!Vkoio|xXOCSQoZ#1s|NK-)UcO>Yj>4&Z>YcznZrenLpRz@K50g9CGY>}+ z2MwuB$3n;7;Ri6n;f3#QPI1h+T%n8t*3K$s@hp2VYORhK!N9=q_2}VTRmj{@>dj4P zZO@jce{c1+R+(~qMB^#l5-6hX(ArIFKJUHs!FR(~%+>8np!VzhRa2WzJ`k?eFCr|>nJXuU&sJg`rsoc{ZynuAXap*F-{wa0|*2uyDt8)y#I19_!luj6{xPI zadx-+K&&1fh64&nXJ=>mnx0SsE*4fOv-V)yGv}ZwK^0oLbEB<{YIz%2hiFcIHnXf*1#B zUFL$3uC10p&J3xsu)X-h8_rI~Xg{gBLlbr2Yw=SNt%xr(l*7}~2K^Ig*FJ-&Lfn<8 z)qAIMxU6jr!F$zsC$c%1zsF_;lze@8874Q@ihEDbH-o7h9~ltZ0d(!z6eku z6V}=~-5jtwm}9)Yy(KUj%O+E)BAcr+@`)w?s-kXmNm>|1=Mw`z)9S$$Po#%jF>wwTt**_lA6Cv<17no=~D3_;KR3~XO) ziyu9l9Bku^{}Gkb?ho?ea%)5v@OCeuaIBvi&8!9Tg{Yf)YCsh@hD4%cw$k8af0n^4 zg9msHnO1kV&qiZJ3l_USq2+)oRM1c1S<8he&>%0aqs|4`yebvj0@XJ@^Jujhf^-aG zNtcvXt5Y5-o73U>ei3Iby@N1L5Y_haK?Bn*UVX|QAl}}~ZHtrO+X~g5c`h3Y7)v0j zkWw;v+wZVgY!umWu)TcC)5U62Gi~osRFJ_D1?kUw6+nkiIgnIuP8C%%S=4C^&%{Lp~;4r4BA}kg6jSfd^d!?;C7kksx zOg0s|{hy=w8*FzicgKiRSgb&0Q}9bA8b-LDu$JAfesnj5{*$1wgQ%v8g_nYh5qUX? zwJk4eey`)O-Uzf`qmVDabGtpCX|OB2{6I*p8HUYo9^hfMeaw_x0f;nt3yNX~Od#l|jYV2mM z$aE(sgl@+0_>%dL>fYh!-B}Iei>unn!BqW>N6TuAcc#4vJQN|145T5?B?M_xZZVia zeGQ<%_wooJ76z7Z^Fn{fHsr4Nhy7?APo(R((&lx&R~mT$kt4h|t?41){~kkb%n&#; zuJtOpM&r4WF&}=3;CBJYV+8K|kNK&ABSpo;AgI=ujw)CP#`>SU{)2GhZwEI046Cy(MHINLB1;&+YEA8%@&{p=64~`P_4XWMqC`RTVppLY_k6%|kD)M`E^mohAP1 zM!yasnlg~W(6h2{g@U0{tN4xm!cuzZ*n+DtcCK5eOy|&5pcqNxlagFfn7HI< zD-9;L;e`O+7Q6#Z^zJ=+da=HoBZ+uoda3^X!__jK^@gw=B;b>JcSf@=EN$7t zDW0CMq@51XG9pd(oc;2`seb4^-yNs3SYkJ03j>2f9T?Y>gjWvWmFlgDfmi)zp_uP3?)Jx!CX?G5EmAn0Zp@Tvy;i*0qK#bq=`4o0IbNjgdZraTY|egjDLZBULQuZj{~iEDz^jcTU- z!Q9StX`247q#ldMV^a-BKn3D-kut;L?GI6;S<*XMU0cV&S;)RS^`-SOkx}Vp=Znu7 zK21+KIYLGtV>`JL-~F|_gLh?4>j|kb`pwKX=#1=S>Jw-+jaw^m*&Wjb`af432~Ouf zXOOl*%2C4zpip$--fG$vH-0k}+>%VV$_wa5(WHT8sBo!GJ!M~>R{Cb|9FLbx%DZ{W z5>qaHrT+N-RA!~bR2cTl4kAb`!eP3@RcpM%;><_XHq1k0aoQ~>J9;y$=H#oG`Jo@l zCDRrk*LAvvMV92EObO1&-L3O*fW_s4&YZ&)M5^{$nDSSlIt>Kt#Lb&Sa~jmMBq5Ck z@*0{Q_zF8O2YOnphw6MM#F*m=6w>4EmO>VX1G;G9(=MT#Cg2rzJPUPKpsM^$wtTGd zWh~0Hq!+zZ_h?Tk4L%{vkK;A|eSc!W{H*hMmg5DYh=QTqUFvb0kKuK;a62~VrA~Hs zO|;0n!21zh@Pz!ce`?a98M`Kfn`;+Bi%HhZt{b$heqby~VH-OT&OY7>)s36M)@g|E zx$YJ!yI8SPL!D2`mWYBEICIXjD9jX27^@KZZb|w+?AmD)>iu^YZkWk?B1(NXMLIQE zr--6iCy@}`6M2#S+bbpobG8T_Z$1KA2iHUfl)1^Fh-mOJ{{c!u{Rekwp%E_6fJRCZ z+o#WJ$#+s3s{u*)##_m0`eCw4NJu~pa8x>SC+T8L62L1j2n(B zP8Mn|CymzbR{QGjj!!MSW0y9|ZjMZpsvihG{AhtO${`i%(cM|f{`AWO`KEx^<+h;d zgG=4VFG}m0s>z%p81v&H>gkC) zCpLjm93=8*>4{~oeE)NH;T-_38@vNaWWLmt4_kt6WVTR;kpDHHY2a5}gf)2fsM%7} zmpK=Gwu<{C1_R?Q&M>@H3Q8xVNa3Z<*nTRUF-iL(c-mvU|Q2Jie)1Ps}~UVeJa>lO=9w+3Zl4SyhK zjZN%PhU^nrK%>?82G9r+q>2J}+4FD6BI2p+7{sEn(gCBH0x)%fUs3~Wz#`XR7^CiX z^U{n9*DnTT9A^?T-*k0K3UJe?M1}y@d~=J`8&Nw0;HLK$e##I^2xky%@Om%1-@)!p z6<5xn!C|xdmbToAiqU{eusIycDQDfka0xOQ<+L_ntPA+Zk@V%N=DB_@%6KRkkDpjt z0#k=gp`|^C++}j|{40OrhP;g21_UgT`@VYMr?#95@kU%LeQ9`SY^!Nd-gK%>a5lXv zFYzl%e_9pp0R|wHbV1DTqDd@!XXB_tWe{$^yS0MPe+V!|qr2T3Gn84ZNXmFqe$kiU z#;nzvxbxW|^+f%I=TeTv^)S`maDKvB8qG_(NJN^VRFtdy17a8@Bbf63HT^Q;H7? zOCLZ-S9{H7oUa90%;|Zd%Wpr^23veYsc>9Kz2i{7m{mzik|pgKPjH`e2)hxfa3pPy zC%2=5uHWA+>~YbTo<~GyHE6xbuP#G|VMIf^icjHio76ar|AVwxcbVDDeD6lA(*KmY z2(Rph7$9b{cNI!yxY5*^*hHYaEPCc$n9%1faaU?Q%7KZ(bA&1|81w0Wax3^}Y3&*R zgAl~Tx$2Gf?E?d1ge0|9hQHIjpqfb}lG9ad%}J~fz_FCwtBog*cSZ>xhzbDFB~@M|Z_Ha4c5WbvqfFt*C*I$sit0Qc(QBRd-ZOcrJVc@u(y^5bD# zt4B_ZDsw+|3eX^D<9dJ6n~Z{nVsIa;K$P80xNE)9mtj_H#Ez4s`P?x_kfpm$Cj?0Z z&7=_uA;nkpc0XzI&Fna7wbI8gH}Pj7;K`eBlkoTo_^&rQZ97!>T!#qS`a|GO_U+#M ziR};Hec&}m6$8%~QFPEMZu=@8KEQ6>F~L@k77c0TQw51%tPETi%_hnEmeuWe%{~~- zlN#C|#U=(l)X+X#7*Vws>Fr0kr=rSQEwb>?TPj_5W0A~47?kiGUcL&MBvd?l$E&8Z zMr*t!vY$(Nn)iz=esP(zCAX4~Y*Bvegbr^7}agsp5KX-a(m92FBOHmrd4tD9ZmZWNF(ShI5U zF(V{zYXO}Xe_=BZnL`*&-OHCkyn>R-7ct+jI^2!ad@pADRD-3qz^@K>tuPzGo#t*2 zv_WDa2b)&DO(@W`KvmoXS@l)|GWyo%e+2y7DItSqhekq5?RBQ)gIO&Jf`a-wTen;{^*46^~ zx}%RScLf{^dd>S*XH!2Ars!#usCZS*S=_&L75IpkSxEBfilAxWX#q#)gpDUYjYC~_ zVBL99|kQpI3hmQb=trAC_SJOApn_c620Ea-p9+kuhwjqE1vqd3b#2)Lzs-l z!lj4V#Qt1Q_g~?JwyflCdO$wfwE)?i_RjANiom<8qb&WQsXM>oC=F-IGTcqa zb0rWYLHB}u10MQ?ecTO5%8Vx|h8ldTHc*oog42h<5u-L^dN;t1Q@+?#>4u=u3Ib_# z=C4d#1I;m+-|HJ-8=2ts@ZW}#8KXE!V;KdUz5vzQpEM`eC+mjOG`a}Y_prq^XMq%H z>?O|}dNe~%57Py>lljs6lCZ|ufI7bS;~vRGaM`=o2P+T`5Z36c#HFk-oR^=R-(Xwg0tdjm3%9J2e}I{P6M2w!cF7Uf`X@Bujq)q|oKAt`#o zhf*5fce%M^Xl9%t`C<{PZQf;QWX;kH5munh7H1LS!+PQr5)Wv`mxUzRkw~c_{&GBi z+89+tW5^zpC9Uh(Gk^HL03%@*3bcL~xy`L^Kyh?sn{v2`L4Cncs~f&$v{EOPZ^33csSpKVjWp1zBb2^=PT^{@vx=2W@!W= zF{&Tr_M1doFU?^?0*eJRHD-&8Wc%m`l?PZhLk}p|of&C@Q-@#*J9p?#JgyH)ZB*)B zMU@(Nap%yOMJsi@j5hwfQksV|(1s`EQx5#%dei%Sriu_Vwb(nIC%Y<4O!{wBcPG0j z)Z#Vv^&_uc(^Iy(j+y>Icc;U~L6DEOdBwK!aq~A^kPe@dr(M%NuAVeprQQmpg zIwrfzGPJ(%Mf`<14e6rp5puUIS?=b$<$0xZ1B=-NA3jVRRP)rfAWhl`{+LTXO6rhE z*qL%_Dba*{JMWqu+`fVV@yX@@ibLGXH{AQB4;hf911o`Agn%4q5TLNc0y!F1p2s89 ztiBXZ8IgG8i6DaCdsXXjs;8B9pPjLskba}=eD(S@*?K_sFxqn2OkKA28!Ff7{oUf` za$w1yD=e?^&pfLp4$x6In&xKAGF?PR2e9lixr23cnyt@MyoVnxTovyQ8;_1}w$nbw zD4kbwDR*`Bp^K-xKit;2KQ!2bTMxX~X${=3*kEF^?!J#9mHJ&EPwD33*>{Q_QBI3t z^c(jhWZ!Z-rDDkhjR5rVhJxg%-D0Cd?^3f%_44%D*3dYbI6rCYbNc{)Kzy9hK8kRx zX|tN9NUPTU_N{Jej&Z2QF|E4_DuJ}23Ndq!+g*N+u1pUGFc|T@yKUEdYdwb^6&u?< z6iT5<{(Nt3`MR*fo5D9657rq9sZ~3ck5};|F;zX<5RXl8Hq0qwnHvhQXYT@%7^9=c zh@MCf;&+t?Ne@CGt-7&+TOPyFasFb=X_>YGD05a{@||t?REJ6*X9t?+m`xZd5h~cl zVk-Wyk3LlCuZ@xE|2z><7^G9sbPo;IES*}*tYrK(8dUSRNxEynxH-$^HV zGE!D0T;=zxp!56~p?38z3j(I3cS^M)YS>&g@&QJen^<5l*1WZuSE+95< z&}T*|=Pn}ofnBuRt6sI$oujFl+9K`e7$60nZI1+~c55RW34hJBwv<cCL}(UJ<}W@+{4s1$`laov9BH+}~aI<;A~*}TGX zGGWL2wKsQPfy9@J1Tk{t9XWcmq)L9w(V0v=Ac7dHKK@{}6a5axq@oiM*sNW_Mn*js9r%G4}Wmn53s$FDga!tSo&DOI9GB z>KxGw+m%?%`qaC34;8qTQ$Hpus*7(x-0y$c5{xUQMx9XL4_Qc~lV;$b z!LKE+t7!=XuzVRt*t$FgCKu7GBH1txRya!>!foTvn_)Jq5cUY5+2V#2>_E#9(Z8$FB#MV^;H~D5_eD8AiP1d5W`tMIhGBQEBp`bw@fLF^0 zgm;Gt7(FWRJ$B(f`I3Da>L%>zHy68Lbrnqfd4QpfSfVkDl{i(aR(BePVCQV!22wuc zZJXd>fl@4@9jB?nNw&zz&;PZVA9WBzmtst27wf^uOw*0Jrl()QqD2ALsa5Jw`2%l2 zW_|j%&9^nsTPF6JV{1cxV3$ikgCTym;PiAg0vwgmILRP~+inCqEUGa=Qg;pR-8SO{ z+}ylk*j4Dwl_z`9sIy?mpPNs&ds62%ViCn|lL!kE6l>|8C(e2<`^hp~9n>j02T{pc|xeRO>V2hZ`ShheGPK?n{{FfZyJd=Y-{s};<#=E*;YydQ&T&cA1Oo0&0 zO8+yq3RkfyG9Z0qW@f&=xmg{cZS4Y7>hyQsp?A(=4AVyA{#2YSZnsrT#}w4E?5@|+ z3^Ejc$bc>hrRX8}s_e7)bK9ngg@5@dhVOMH)V4suFQ@+t@N}V1k1!Yz@$sbZ;Bc_? zHUaI8zYB~m&{IZQJ%blK6qAu+Y;J&)q!uF*sX;UlP_ju5m^~N9dN6xibYZD;!=S)6 zI^NZ{;R8HlF4OC$?+5Glc3{qK)$-`+EjtGgtT6fwVi+Z#sd7;U>QGfr|J@m-YO?89 z1bGDc7LBYU7z@rXrsSn5N>nq3boV~q7oFAumaA$;(wXUSm~w;R&%L)1^1pZ0sSqI5{tp7vvn+l@O40jkB>8a;{Bh)CTm48pK&i<$# zm3o{+0$oE*dVRk7`l{nCbr>+wpT!Dew1$X2rW|`n03BesK#dC%cA;oe;$a|?0wLIK zB}@uNkNbzUa&dAI@Mf|c_5|Q6&*+14#+h+S{iRajT*ggU6sH8QyhO|h;WkdX^HsG< z%1u{|NXKta89cfg6O7M=@sw&68I_Oi=gSc$Cq8rW+}pILdqzM+2cn16#K}m%%g;rF z=HXAQsnIv%S{I3!&ay9*HF8-Zz6h!hi5%Y-*;!p_QIxHg@Htr5*VMo+EUHyiOmb!Y z%yqxPN*rrUVa;}%n^VMYe-6};YRzYAfzI)J3Lg4!_u{7OF<<70g|1w3?|c`P8ZMd? z4tGk$vIH)UY46riA3{!A{gk)>?Rie3&G%nH(&Sm!_z8w67Ek5%S;xe76h*l2LBeFJ z$Y>CA_-N;}Hyk?zg_4(l@>Ca)6}YzslgjP(6xf~5A%BHdBY*8{4o%~5$%P_yzW9?f zDPdkoXR|eEc@c|HtXeC$J^X_jM~CReD|@VYhi>5S)RBk|hr%oF9VAILHEYVoa6a@NQzAqgsuZJxujUI@g7eD|0pUXMV zhde$iN-A6#i9n_?RrafGj;ZyP*+^RAGcyb-Js_~VW2>NSa{Yp*nT^%!{iNN_L*0_2 zG|Kg>EOVJ<)-3<9r~hyU7?RlFX1CP9fPOrn5ti3f%037Nx{AroA4{7IWz)jE=-i!p zrw&C#Q29Bgc$mHE63)A5y*LbCb&e&olyxn&Jg1a3xH0FloOpPe3m&&tEf~m*HTu{l zsXf~dLR97DY+DUNmzxow9-fs$AN_;zVJRYsHNKjCNTA%XZgpe+I7z`!nJoKY{vTmCMq=?E`d}>K_bs+n% z;!wyjIKve(ZA+NhMiYrZ*~Ks8s8<)Y?@>W3xcHMIZzQ=&x+s- zuEMgDe)f;Z2oUab6p@BA9!U1Mjm49?9kqI+b)u4m#>AwhsAlY8I%qg+yM>W%opK-o zegZ+TTy7=atDJG%1Q{~{kC`*Zc&vxpaipJ2%>ywmw&c&W2bps+W2n`VnLB=Yq~2^Wc{sBqLu*#NQy^Cb^2?c#W20X?Y%WS6ba(%s3fHR$)GkF4kw zlbwJfCS7TZ8naIE4elyEof!~{txRw3C?qx9b+w`RvMYcgacJC{S zr-keefKJeEgkMok$4t}ivxAMslz-SrjK?20ODka}YU-Jl6gOrL>6g$8?b~APm zNigQl^(XVt`ApQ^dk(9p-0|IsO*VQ_G+|3$l`;t|W>oA{t&;Qc#UDku8b0)S64_`L z&imvJ&5_$9PdQ(-=^B@>f7o8msXO&6-<>xd(x_SEsN2xve?1zsS>l(Z9 zqeY$@$tNZ&K-W_D9IBxSyUtgo@6O!oACn~4od*t@P$E-2%$l-ZCv;!*b_)!3n^W#l z=$Ekam_d}pMWsR$g-fE9sH}BY(fsaDqJh7`TmCpE8WOYN-ng-=q*n`l#PpqH4^HZP zq5`agDapvVV8dNg;Yn`eNLjI1PC3f_Pe%it_F1Ki1a4l7QZ}8*v;{Xe=G`gxnW6r0 zC_4`8)vUwC#Ul)d1%sV+EKn!`^fbITpwD0Mc2GZ|pcO%(>?KBX#Ly_E521-zEWE*> zicaTJ`E74%E>4_AQaOx9Gs8UgEB~DZAn@F4r_Im=lo_%C#Y*Xb=DDi6ppHr?_+GgS z&`^OPCz78{XFmN(piNUQ4}1#({{{s9*vqr=h#0qkTLB&t9h55aTLxGFP%V^sxD97+ zC-*o>sZpsmKD~m(WrIPN8s1q^DTDv!Ku@Lp0S+#YPNyeOB5%q(WwAK|kif(eoTp3F zW0ZqYCxouPj3jG=GM%ppn*kj#DQza{Mi^e0U}=o==pJ^d>8mqeWK9Yk zP;Im?uB7T=WQ+%u#564~{mLa%VsoedARVKvfPXnp8Pu%>7jL%Vg ze$i>AT+65A^X5Hp7mgTa(4crXg>i2QREH1hAJNj8s+Xoh&To}8-#cuKdBR-Tj>erW z)ITLwOr*30AT!Jr+S&^81tYOFuwQMoE?hjOQ+jYkDlecAR2??P>zA_OpM9oD`{8c- zP$D0KBfv{pY_U*^Fb)*=YN#YgjohweDJ3a9j=|yj$v_toion87I zN#T!zv#PtJX&8`1?0?=7y?eph8?Q*BbP_T(VA?)5n?9>itJ|Hu56ltCYQGD|OfcEG z$*mQCLg{pOZ-eq4kI%b)>=dA|MNO@$&p~@KF2yx^chqX3yS>QNw5Q)4j1v1P!=d#c zw8QfC(0mhWTfB-^7v%TkhDZFpsQ=kyDwOkP11Z3vy>&7+>v^?bhVec!0vhKQm z1wjdw25AK8Qo2F9yHh~AyFn17yF^O5Q@R`J?go)A=|1~H@B4Yr%=6)VIp5wHhPfPv zKV17-d+oJ;v36H9vG>q>(r<#}dGcB5Kzi`QPfKUtPiO=X-cdrCQi*YfgGpP;HZLVC zb@|gDky+o}xU@?ROqc0Xf?AoUGLDu>Isc^1&ZnM^VnWr2kH7t(k2ps8nG01!4K3zz z`@KegI2t1ke(J>ZUZ?Y-8lH}7QUF$Wd9nB13?XxCSDeCj5c)kfH@1xARSZ8eePv+f_lG2y+!iBnQh?XROGkH$8Mn zj*_|h6JcqLFJx28FsCSM8A&rpKkZ#-E_`%g(m%DCc_xF&>fj9%%zGxCFVf>%!{>)) zbf2wPM8gZGClXG!(74$aGxW4LW2=DX)X_X5b#`i?s62>p<6a(fC4apMnao!#}BP=kBrS;4L_TioJCnHkovK(0^8WEZ;5c5_)#Yq3nSndcmOV zv0hB%d~L~LcS(m~^|swv7{9hs?zHC0{@m?zx8ASqxPv!zcBZMeiu|hj@~vl{T$eB8 z43^Pg_#Qoc5mmtb$;ykQ^67%`oL(6Xi0iTUcQtzP7zVvDWzZd%FXL#+;B1TNrjtOH zW|@#HP%bh)-(QH~c5_^XCw_5744Zl^{e{_V^5uEAjrr&JPCTHZ+E9RjB;rRD-dSehjU+p{D(Z=CQ z`xdB$&LkxI;%KQCCOg9L=k}VzAEJ5(dQJ$p>4bqs)E=)qkc@_%SYtHbRC;?P{o5qf zhCevQv&D$5MyeGQzKhRLdO0JAzn+INpLUAOrsWm3n@o;@Jsdo0{>56U4mTxnW(aaG z;q4A)?2UPx9Qt+D!Q=^kZ!|6TLfvsh)o#5cx8LycWU`38t0x*sG6%)1`IF>^lhn#b z<7nya-SuimRd8KH*)Jf;M9gxg*G;3PKM4rklesjE?8odO> zRaHGn#B%3BI<3)57u!r3{!pq9Sm($2NgoT988X`6wkMo)x?$Qg(GW_rGm=KG`{j5g zw=o8Ip4uH67HT(A(s(kJs@^RBLPwAhTlm^YGW#`#fY(F#I(+Gy%WAz|SH8ad7dw-( z$|XjfR3|N>)>Brr5MHd+xSXL>g#$UxXJ&5B0B?{-96Q2iZ=Ek~z)A zs`Jl|*bZdx{SG_ie+S=7{FEY*Y**9hIa+rUcG_vx%O%q@|Jn0ZGh||iNpJsMdmU2s zBj`Y^+m9rFq8&LPA7&iJkJ=mNSdNa;UfEnc+7AW~a9R8q)XL-Z5+mzH zq=Wp@XVl()ynWRLvcVu5KdrP}Q11fdFQM&u$X?rHotulb@Ga1?vD#7g=2)yCwalK@L_Z2A&y9qM zU^e6c8t9w)M6Y0xaDrr2-udviRbtjDR7*r!K=iN8LSs-v!EpTor*M-(w^>{1Vxh4BjMbYZyLkOdW! zpudRIdevVKu*IkFw*K^qyhf}TVTJFeC)+m~tl4#sbiYd|+i)jhrN>PaYEf>&H>lYw zU3#T7_+LrQW=Tu&x*Sa_6P4XAW8~iqKqv6%=lfRJR5W5cjE7I47JT zU4yMXp+tMRil~8zn$$Yk>#OyO*aw#I_^Fyqu?>e#?M@r=cUShX1Kp9KSc-Fvp53U- z5~etUAU_MI_O05`=O~{n-}&swT8f(YQ6-Rvke!z~(T~~vWWnLt_$aw}m|?v=mtAV1 z?7vY34KD&8-4!l1*FE*tVFp#(F5M*6PR)F8ZMU+%TosfhNr&H?%$~i9?9aVD&v_XR zzuGmfSBT^Sb-D0sEK{}P3PCQxX>|1BpwOv!Cj02u{9GA_?vdQ~%^aEkZBccnB+*LW zc}Ni-e~APyi``}0lm~Xf9kM6|O8lbo?KG&f{p$1E=bRMcw%4}8keO=HSi?%I}lGlBsq{I2X7ErLpD7|pZYK`Wmvfmu`2Iv?cqhbFy`>jI18>;7jf4w`& za*tb2_16eo7~<4N^qOVV^miYsKNP5xWV6|5tKKNl;_-TN-JZ=^{f@!PbUoQjqhr7A zaJCJ4iuE|=5q-@hP-%n(2cnU4+$;>}`Gb;O3`*$cV$!Z4%+dltdnYqSsXcw-6nhj! z1mR_wV=XqN$j)>uJ-?R@%=0$=2|bCb6n|2bz7Ocu0$L<|(z2k9=TAC=vEqwU=N+y) zU~|jRt)bx;zWUUSHCY77w}+SKE99j1Zq$p%y!NEwU@P+GaJZ^9+;GXC^2k&AItn{F z>YI{6YwJoJvB~Mlddpx@T{zZ1@kvQvQhNHQ%Mgl2k>lV_&&6FmGqs>YFWdQgRK}TL zoy|E)8R=(G{_Y6XIJhr&JU1P+gVjP-MllzdR~^X{>%<$c+zJ-MmsTiV;F@)7D|a?D z%xbN|`+m&X#w|9cO>J_Xs`7KtNjq0Ek&DM;f{1WH%g#r6pM(7S9$GP;Jr-VmA<*#4 z<)q<0M?0ZP=`+zE1ACznGy4X>mxK=eNjxpWudoCK2P+sFHTd*^z0WI50esm;^2^?LlU~tn~e4`Tv>i{ zXy{lOk8Nmpmh&Z-AHsE>=V^5`ymkhn;&x9J-(ZMXLp!$1t?$78c9~#oN+iMXpe`hK zKk4Mc-s^F`a@f|!;k-xIs=pl;=UWb&3prLf7$Nsi9*JaRU1!XlJ&{Xe^>cXEt#d|| zoRiuVGSN)8ko9>Xe&h(zD^a9L=fcPL%|iqX*& z{Su=?dj`(-o~pfDa_wb3(&oVwIWj zC*H_4DYcT3gUUON(CbEyj=vO1&k-se8cacPzgV@(1Oqc=Ckx{)kuil%4wh08FsKAS zJw;MhJA{8|qnC}KQySuLG?{}QdyBqm!F=tU7AF8S8M)#ZZoyp*-}(^i@qP`Z9-LXa zhL8t7yN5-A!la!lP?7n%XQV3&RJc+aL#qJ*^!5QlLNP`o_4&`oOQ;RTxQy9rQt=IN z{rnbpiCt$_sAEBQ!5yl$!cV85V;}LZ-JCmtqA!o%4<|to z;7$k7dBU$1QPO$+9TD?&AvHhyFDuQ6rZkP{-oA@3wQn?8#_wPYa^SnxsPHjIt4QMa zzV7$?bl9z=FVmK_pWkKVjHh2YJymav`6WUk~k6985Ed({x~K@@nuQn?)UT{(LbKO4bl@=}En-)LXoJfVX)m3o2l`-akRIGQhN13{3Xjj%kwHQX z!vVzyiKKQfa}Zx+z9@VROGNWVwds_GR17(BksA3|+_F#iAkWAzeE(wEIz{;04|i__ z9<7$zYQBNv^8Bs&dkzqNL3CFf?YQt1{uh?gQNu@lpBde*8+M=rC))Gjg_fEtEYD%D z6aut@nv#31CG?nvd%UalC&VHxwSIT2p2pQ{Jb!j5cw@PIptv5EGxcMS$$ZdrW*eK= zT~Np_=fxo>-|^p~{}Bvv)W@&itVM`g_i9{EsU~ve+L2K=Eh(Hget@JK`fKnjbMT_` z+Viy}r0In&0DTmKlBE*?NVm^x-RpfS;ZlC;7NFeU93wGX%#IJ@2p=pquBU(MZBwTG z%4{YK$eT1Er4W~R+3;}%>ApMvg}cu~(V~iWc+&VG8P|vi*&XKYPQzRjEgkO8BZ}x9 z^rePiE&W>kOoIz!rPY%5qAG~3JiCoS%ca*{(Q~;GZyv#MIUn-XLCflyFCZi@a@|RJ zZG?4JzNLTkecJnRI8qgA_vGGem4$>suc}p33X@3`I!6xZeF3RSr%8}l(!S}CryoKp z1fAN-&*!AGWlY2EaithWiYbOptsL^?1s;V}c#%|pGN($Nz3Fu6t0P`5=L)kax~-t7 z{xP7b-(c?%!DdOr!PU-9O}rmR*uT{egSx*MZdvZN zQBy~N$PW4EWT<_sM2j*JN`sS6+;uQt*)PV;j?TIA8UY2|;T`y-V7nV7`d+Ai(h!^^ zw5d;*p*e19wt0vpyE@UkR3IHx{PP1U=SBm2Hjxt%Plu zYX0@BQ{7>DJAj~z$XwXCWqQjK76CmwZLq=eJ2T(Xri~7T_)o;RlPwRp^=ydCJ%STt z@CM+qT!wIHKqsoXTCmo~EV1a%%Eg*u0{$;zR|6Ydjz>#%+vgXv`l@}8(0lNMw-?A- zEDeF{h`&3W(1|mAKTeqSyaYismMV6hc__GLuG%UG{H)x1Z*0~&yq0g~DChOx#1q=` z5$bU!+>dC-qia%~CU*uzMB*?4ZqpCp_?%VfM5K~mBEs<4iHqca_QnP`UGH;V4l-HE5jD~G4*LeOR-I?6o?y6eGR{UcXRrk} zd%YH&(Ntu?N#9TI@nUI9s)&VEtGMGsx;@v0xY6v#SOzFX`M)v=XldvkbLF+G-L^VQ zm9e6U)~vRE3`|sQGteA3(4d;cQ z4Qf$icq^8^0&i^PhmuS=>!;r%qHfQdz4`HS7)G)AyFu1f8@F<06t*AEl^=GRPWEnA z6Pi=6+j}Seg3l^Qo7eBw{

z`j2eBx)_vJ5Joq=ighDr!|0r3MPp$LjV(NUE;-n zbT$ABT5&l!qG3$}X)&%OK8H9A3u7*J6~)6wxX8BfopJwzR~c*N<7=05ok~?gbtR|s4#v9d{pstZHf(? zsV`;rW%;GT@Q1*J0W{d<0A0f zh4@p;-|Ce>$)a9Ycd5z4wxQI3guApffL74<5-@P1^tB#^4>3?}CdiL`$ms22CL>qi zSzwT7<7XB+F17}*LMmu9t<|Z}hZwLH-fzA+Y~Y)kh>qTw0RLKBxqSczmA+vAN3Kzc zHM2tTEmujwU<}7AiH6UXooKlcOMB^> z@!H#=VBS)d=S9LR*xFw3Mei{FLg0^}y(RgiWSyxZmfiH;wgQdU7HIp>SuHhJ8KyIf zIK2mK%P%!kRCVn}4Z$Y0=v(W-XOSCdl50%vFQY}<`16=M^5s6ap8KMAfkepcFc;Mm zfa#_H!V6oc;`*iq3yt8T4-zmNY0@7Ttde-Ww8ID;say7$8t{2Js6$ATpM+&VdwX?S zTHLwa0^8AVt6SD3_pw3f3|72xfc>@My8b{zhKV!h5s-45yAD+f)pw$ccJ&g~?ODsC za7Tbf7Hw$gULFm-9`{^!EurpDWrp=wcvCWU`It0Aox-1wSl0FDdWFDgy_yBQud1G4 zHBzo%3X@?x%F~DP1wsULLLetA7*x4u7?xNMDAY13a*Nv*DW5Qg+~-GK3Nc%z^Tse} zEviB9TPS#Xk!AJap#v$#*3(=v8Xh$|uVHi8Z$HthzeMT`K?!XeBTu_wkJ4Wmco#3D zZW|)4bCI~(9V)iB^UE=UN-v#tzfsi8F(uxwy7-i(F@;FEL(y0MaZn2co>S0Orr{Dm z&A;>P`e=%agJuJ>&+W|LSCy27?_cucU_(SEMc!~ler>P6XS2P{gwnBp6Geqx{4eke zg$zdp5-&7#;J0lSCQQgX;g5T?DDi5pvZhRw=;IMO{IHyXC~Au;LXTyqln^u&q-zd< zxyVI*c-Mb=w12<1@PpXkBl0GPe)wM^WVq!=ALTpNh zhad}7NY;;isBuCn7)T5eE4reeL;dq{{{gZezP}TFc!wyy$^K-YK&s$_Lv3-RgyF=f zMmK?ZlS2HQo9e||=$8_&Cevz?MM=JOp~9d>PQvEC{BO(kXR(Z+{&%tdcd?-VH?sbJ zZo?=EZ^6t;WDLlj{eS=Zm7v_c+1@#Md4-~T(s{9B;#5n036po_M27%V#ys6Y8H zNu*VpFQKO6MxgZk^(+$P|I^+*I>;K{6qy%#56MU&o_y3ksgJtk56@ri6TN}UEranE ze1Gy({l8@-IY=M$k&js1k=GIj@@GPaf%FD7MQSXIj0PUIIw&yqI0!t9&*3Q!TF0OC z7Ql%j_4J?G`+?+m0DryTlLH=*C<5**MerJuNQsyr864*}pdRiS^h+7<5hP=wLy*A{ z?sz)zVV*pk25=#FeANGW_y4X6kvIgoLlzb6+3%Km$dxT9AXhHe!8}LM0}p#Q?_%uA zhXNj!yU(ZZ^W`Is1h|~dhCF@iKc~RInHPEY&vDSY7;Vh^a2z~=90wVMHdx;8z;W>A z3aSXs6C~c&CI6aFEkqBA*L#G}81}z>-hyI(&OC~l+Zq$d8;4_qcBY5bjQ{rTog{cz z04I_Z5(Rh|)C9hx4Orn@Opnvy^iF7?Eezie5Gg)>ks25lYR?XQe+&MLv4gm&kil{ z$%W*!Y(A|ZzJPyE1M5Y&`U3jXpY<2^`u3k%?>`>|GATs*0QWlm!}(hFLu4#NBEwqC z=Lzgv@Gzo%E++18aNuEzPT$_XlYBVaeQMA~?EkU~|MT6#IsRGy_XlDXgpeiW{{%ud zZ6v%VxCK&kyuAIW48sdf8zQMZ(Z>k}sq*C`I^k?Q}fTB)wG$64x?X)%BtJjJR?)Q+m^# zB%s)7Nov`<4$ms3k}fnxCs(#V77T#>_fvg%0f!A~a5cO;_U5WhfFKl|(NK~~wUh`D z=6xmRH(GZ2(m2=t$YT!O#2(*E5DO92JL z?+*&i%@fl74lfu2E@wV)-%b`Tt0jQm)V3<8wC&W`x}qcmMUi3Qf$+(o_b)N(mNiKP4vs_O$cAscU zI$9t4^XXl;QrjP0dFXMX$BKU-@@DMy6-pc&jwTZF-~%$V?5xig>yDo;j4aSH2xcnuf)MF0WAm+Z!QT|EK^20Ho?A|tRLNE;0%rTHTf%D4H# zQ-W@Oyuw659H@D^L%W=Rzr<#MdE-qg5jPAbY0wBg2bkwsZWaJG(|PYMKCxKL3S!Y| zM!2B87UhEg4ePa3&-8mRUTGqcK?5ovBaT+1mkdl!N!9DHUK(xzo;H#t1qjmsn9p7Y z=VPd$=i|96vwWX$B0b zFK_rm)9(i}6Ga?qu=?7+^FC>Kio1F9JbTm+_ngA8LS?JpC%bjhz2Z;*134@NAzMra z1{F+W$vE4aL)@_&0_Hr>>Y^QVm`)WZXQFdDn&a?#HcS!2d&PNO{x&cj%YL5B?KWBQ z6pd8;wGe8<-1^U+X#3?BC_S4eOSt~xu~c%^mJ5={#DDsYmV1~67y8R)35homRB`N<8aj{#&;nWr-Jt)=ND%`YN>>yFv}=Jc6%rzNynUcw z_4UUjkrwQteT&z*Od?C@MRMms7Wjc5WgYxHb5c*kdKEyI2QT959&nz+m%ekLVcg#) zP|o}ZLP5A1E?@3dZ|Icd@LaK)*>t(38s%h{hnafb&@uU>*XQVyzYL{a=+TL!s?Rd) zG_MhJ=JeZ)dMRjV_-Z+!Enn~74NvvS`G`F=LiWR=$0eX<`{41E*b!ejZ(wUQy_djp+Mkz; z-{o-`HQE}@vOUjU5EA@TA_>Al$t+2rjKZNKK+`AifhjIqK%7vne3vW_#5d4TH&? z3V=BNSxbJeOXI?iX!1DWQL}!wWP%>k2);Lr718o@RP#VTph3qr2G|+FebJB$MEu}m za>0HfL3DJ{W7n$*^f8`iN$HJO2>8h(5v!dxOZ@?weMqk$}C>awg?gg^zxQz=bOnVbA^rN`=8g#<(8`A2uJr>o`8Fh#f0|k zAJ&@QoZUL1c>cnFwGs0ZkMl<8`v%ww?0+f%A{a=pJHeuA)!9eZV`BsXVH9>fwhQ?b z5HIJ_$@N5$=2N*owDitV?W>%&UcK=CqC=xAW=kgs@PqIGob)bD=x67Vi8Dvhlbp(VArpL*Mi0y{^ zYDb{SN}Hc$qCmHE(8Zm=a}=46PDSC^j9s}uz+&G2B4o4v7U{pR5lgAi#dd!3NWVux zPn0kK21p4>7bLeW>_{Wn>^G5_trq8d+lUdv=PO^P0ihS9o7R=+LfW`P6@8Xe&WbdhST2U<15b-$631*Dy{2lZ)=-FO&aO$?D3vedB60nJjaA;3SF-5;EAR1 zS!pA>r7VE{$(JbmZ7%mDrZ-sF|2%nqB~tOq=4M)v$;otkvXF>W>}6jCzWJHw%9Vos zNlBvp$`yAIJ_$z_`nr-QJz8a9RI*-|^8`~WFuEOA=Nb25GjIr{vsF0#?yeFm9P}S# zJ$}Hd%WA=EA1Ix4tx@+` zG?fEteK0DCgQZslUX$kVy4T~tX2r{NUYf(O#Zu@V@*4gIZD@iSEh(iXjFs*{PXE%oFKZ0cxkDEQPjYvEHdQ`6hG9 zT>Ulo7%DN%`toF<8=m7w9=wK$lJaTRt~fJAG3`IQhwh|!WoAfHrp#6e2xNa%l#KZw zWM>VT{!C}W5bkq#VIjAGvWhIk;Mx{h|ltL5+MIG$)QePOD|gX@4-r^Y3cv(+=Up~$9!gEN_z z`6a-;Gxt;KL9Llg?=c~dTm0l+lPIGKeuhUn(pqPrn3a(O z3l0IhsU&3mYcj1SmsI(HgV@7oVz~}Qz^6>xmsy_SD5K?>q-@D6A!#ri-?_Dtk#o{M zjbCANAXMjYo>pNUy*@CNCvxnQ-aoaq_=y|>YN}}tN{VeBbJXHvNadSL59jIf^v1A6 zDydtgIyEADzPMmtsJkb|=e=ju!di;u>KcQmW*(q20=gEtc;Ho|wS_~6VF)nvrv}oUf z*Bh%ISSkyx;^e)WqJ>cAv$Ta*Hy#JC48+bkVqMOqfOd=AgWDMm@K+&=Jt;xkaRcV@ zSSbHictp!|P|WXE!uZmGHoC&~)U+Ud#=eL_p>Gn$8Co9cbbBKD7uzYDNcSC0GZ^+_ z59YpQP+@Wus#gY0%ljgj=br=L{%4^OaL>KyQkVO}l$PPY44$(vM0R9EO2P~WL*NZ| z_%L~@J27t8e$Qk{b^rQIRg6#~7?u?=va+(m1dI)Hud_E^%4Dk|W50%!*+jJUWfBdb zQeSvUJqUwZ<&6{uzR~FHQ-|W3Bn9_3e$2gBCQ__d7 zO42qOt~Q7isUrhDcP>&s6$q-CNq(EV=gO`rOCRfRTF<+|I+p6Aeh>m(4(H>sI4xyP zAaTg>jaC57_l(bf51|?pUbK+jqlVFTw)Q*TM<#)8@290TXD@)?(VEO zJv6A_Da#Pa*u{<>E#@uxVOH>2IU2FbwQUURK)$kMW6aRy#3DNsX=WiO+}-pxGuwZzJHg*68v$ z*PE~0YmPHS(1r3xLTnO~sJ8e_F(iO{E6}%CV7y*zmu;c@ zYLfN&Z+48goBGk+ij`KFy$8?dpeLL+N;03tc8>~_1q`mIrp$Gu$x?~z1=_FelcjNyQNwr&qXqzWrgxAAylam?|&SrAE_ZNCK#4+w921L?U=Nw3u@!87g3_sQ zPWwhtADGfryyS}l_eK16vi#E)9)GvfZ398AMk-ASNW6cV`zEE*JX72IVv|siBw7Sg!h;k;~Hkh%X>3cU|tO+#(lP|I}#iDUG z!d|>d!Haz7{svjL_@cX@SuL&pwp?rTbB{wvt$JSR5Fsz0 zKWnxcU+N%qKZL3U7kOOml$?M$buR~usA;MaUxfq{;6dOp->1X#Qrk%0g2i>wo3j>u znL}NX%#`|HeX}Qy(~W*@uZ6-EmS!I19?s=;5Pz_*?YmqK+_4wgUH#Qbvxss)k=tpZ z%@j;n9kWmG;4;8T9r*S>c7PS%fVSDSFn;zMoJoBLM?+o*LF+Vw<5G60Jd-^`H^hp|~ zx{?rhs-@E;&f2<%EsiCjhI9aFq2?}n9PGs%yP(@C1_#r?qLOdP{M0U&%xN8ctiz#K zt?w6-_|h*eoWEssYNXs`G^0H@ZW7P^V8fmXbKHK@p2}+5_VwfRD&O?}R1XcWg!#RX z#23|EO1IBDxXXu?7tw3blp@7{lPa%$$b>pf;W~AyXGh338qx?T%1t zSfaU~4dEqT7wWvm#8j~y)=}BdHU3K5L3&s9dS!=Eq44q<$19px>t(kA^1{r9NMas* zPPgC}2oi6pp55lZR`TM_;HbPB2iN#zi@u+?L)AU?rIph}!Q^t@rSyg|vZNEl4rbBl zqST-`;E&>%pTk*||h$cBitCug!CG=CaXXj-O-wee3gP@O9kv)xbFXI`dsh z9etN}6Ah*D$`A&7FpBa4n+)N(^IPSad?`>k_+>>J*)|-W6Z^-k*4qvd4i+uE^s93z z-54@E*(;@ep+L;2P&(oDT;_kx}6=x)=y&kD~C z=euG3vI3}AIbDa2%!IjeSaA#T@%}1AASLKW&c7Pk10s;-1GFONsx=CK9KkZ`LU->F zBk-^y-qCmg6llE8!K}d4IfwM1Mo|}ZJ4_x|_O+irOKBX;Rfhv%<12bj2CJgqtAE7q zM5}N$*V;ifnBP7igYBrQ+6%4l!gQs#(2>Qj_+A<8*~Btc^EmBJT`o%0i)Sp*)XIfK zj^qkJ6~DdI%&XPpKI8lgAO5xKX1|XShW*G0z@h?+DmsENB(%;p(e!&rG)3|FV5Y_O zz$Dk7U4FH88@+FrfvnCl6*S_cS~iD8rOaL6Zkyf)^BKQ;N0|sBZxyFJ2*;(pVwcjR z;tfM@T!~yC%Z~oztIsc_a_!PFv()lkHjm2!16_`ZosyA#vD1^j-_FIQZ;pc4Y%7Kb z1Hr%=L*#o5poB(qjm^3!>6DdYGMIT=%Qo4xkH~m=>*p5qPQj^<$=pWQG&Q_qRo9jT zi4e@Vi}@_QATrn0Ec->BbXfXCXfy2j?`ZA#xRB{eq5Z4qbz*$_GwGXRnnoQWNiyAP zY{IH!eFGGrNNFv`sSB^5;UWve4OV_$VptRN{zxEU(k`U)CkJ7J5HF$=wCiE4+jpQ^ zJeq9&5NWs?>mQyvdZ_j^&pnd06S|?Y0ICsxTh+^u3q|xzy@^M!*g2)77qLVo($-xG z5JgG{Kv#toNzp|0s5%ttV(!a)nFZ(B{Ujs)e|5jqL{DAEtOO~eJ=rp=Zr^~ zGBP|~8B7IA> zN}74ChA&K$V|n^ADNch5cgHRj8Z_H>@8$Xm?=XsJ6c3$*HqpH&gdkCQEoBIN{^r1)_&M^W=J8jm3Mr;rXfa11H(I!xm~l zfr|b_EMNKrQh~{$aG&b>hRe!O?6Y`AbJ*;jbLwZ2zCcR6R+LWh51{N#!3SW#&FFo@ zY74XCxUoaQz}}$^uE;jM$8)9cTcP8#*>2VDfQTy>jIvQ47#700dX17;_^YK}x8^x; zhh~9}U2VM+{(&H9=>ykmP!}&s(3c41!ov`UJ-Xj_zPTtX{N{4}YrNb*!asH^t_mo_ z3~O+$zr53IasDeS4E~(2Tto%?yx}-m>t`*v{c5R+8_Y4BsVM?@lsMGrNQTJz5~ceq zo7E0^`w?J54evmGDe*)Z4+aHj7>FgnG?RcL4!A>ImEy4a)ig*^PC0{NTV5y?0v*sLT$r`SQ(0Y~4d}zXHIq(w4 ze%MFG9Xs55Acm?ri(fgCm&i>X(Mcf))8}Z`{VV5k?!*-odVhY{8{K4p*7bG09=|P=ibCtl= zS6cJyjfP4f))-x~g>Qc9@eQTsUI!ZDmFo{pi=+zK_9>ZuOFU%7Z@yy) zY3+bX8u+(SADeTP)!MN%wiF7C|(_U~o+Ie%qH4^T!8F~pfiD_CYFf2NWD6aY@` zpPy&AU*gph|75sTYf4}al1gNe3wik#jJy?51P~^e>m0?zsGco}J$mbU{Mx)XCa$>% ziI7Kfm%x`+UbER#>ub5;E1_7bvo`%?#IQeli3alJeYc)#oCq`+zyuX3!7W}|QXh_M z^fs&A-OVw?_r{S!)a^Pf++EHLojyMR!iQJ~P6=X6=9>er`{-iknp&V{PAaipY3mAe zatOXTM>w!=cIaa`FJ1-Mt{`yn#}}U}CViI)AvLnMrj>=i0jhZ>&l~4*j0sTaff3uj zFYwC?p?1#WUW=j1L&IYX>4#{k#nEZ03$foSLSjGXOGAAwJsv(99kD(2vtsf2hIUCD!p2V@H#{WfbTJTF+Fp)VdYJ==SZ@)W~uJ&Dn zHEr9<@c5GxS0AkGaQF2^{u+GMi_|%9yf*xveou^fbz?`Ej%Zl@O1@r$fgP2|#h%Ev z;%U4}avV!>I$BFhC#`Vjl66V_r;Ut}{k44neayxrtP4xo!={#zt$$}`aAX)<3~Uoj z7jJM+&5Yjm6$n19gA>*{Bp}mFQoJ1M45W)NR%0hWz4_@!3e}l$ z5}lXpbw3v}9T5W@6!cSVbi(-+ZdCOb*v`*#OXVxvz;XDy!sc@KMBnWC2#9-4n^F^= zcq#E4I9**1EK4!jY@sA%8y)kHm#e=ZX}nABRu=m8qVT<@o&9pp@m*g`wa!u(Eb;+#wjc|QO4>{F<%^IE;&F*qO zrtyQjjw7ZwoM@t@5>fn8w9t$q`VJ|j7o*#}!Ssgu6MIiyz4{MF3kPXoV)=Y-!^;Wf zxofB+HWwQ?m2#JFsj1(Gn?Nt4MfLrXo9mqUmqB(j)n1d-nuTSn#T5i2sP|_5o zHa*Y<^nHqs1u`jbu1>~eidLX#>N9G+TR~W0 zAFo2_nS7=69#LdBEUNE47A}P30W*y9`$o%uf~kXnu;|4;5Hh@mc)ioX<7iRATkx++ zw_Mo?QxyWw)NV_rcMqlD(i-R-xd77}m=%%zHH%?(?}i!G^l2U6>UdHYos+fQq*{TD zd?J+D2TBZIQlChcIJk;cEdm~tJ+FdoXZ^@XCl^k%ICN8n&_T^w>b~^~__f&sy{Uoi z9cXxu*6Eort42Z#p_fgzI@KG{6I*p1K@zH?&Wc2C2vl*Lk~FA9=RbC2Xl3x`RB#Ye|_dX&RRqx%@#KKI{UN}=4;>oD#KkC z8`WN2Rk*%b`&#mJk%w^(Njt4~iRLi(%E>M>ede}zZhZt6HHD@>wSkDHyrNX{*&JQX zPO(6LVeK?Czo7H)hMi*K&u})Pq4Ej+K}?}zsjOo#WRY{-<7uq&U5vG>Zs_&UD+fHJ z^Z6Pah|jOmzlgvV934m!rD@1fY7x;&ZK`z@hh=yzq(`L=L>+-(rhEKXZVX`%Ti_uW zmbmOA2GxIN0T8{lSrx=#_z<8Z23VV`ldUydkw6gGEA2qSC}7Us#&Wp&SZ57BC6Yv> z*K0T08Bj9lfx&><9@&)%j6yCjuwB?Y5K85yV^c4efma%5z+n%nFmSQ7{F4YeGeb`RlGYQ5hIz zxjkR|Ju)SHM#|p;%;}{q+u_EjbKDc>s?vlFAyx6U=8k|X4e(Cg0nqy>7;*UwF)%+A zoL))Qf`M3xc4{;uB|5yZ6Bi#^N5FW((BtzZFTk~Kk+0248@onL^+3Ju0qm9D@{>C2cD=opGuO1k7~8kAlZA~b((tcOl25K2zONB>?PtDX zJnNOPF#VZbEOiVV3e?g|>spn9!dH#@VmX)Pii9#w1YD6Ocxr693kL8-SmtcN+UWts zrBOF!a#{+ad(Z2tEq}(Rret2EpGWkzWAN-cJY`my)+wE};7hV=CDjL~0h+cy>3f|` zPvx}04}yiMO`H(+!jF9J9PqVRh;7p3;|$Y|90{9e$mPn|z|Xe4|6W6#t4xe`J9)(I z&~wq?aq!jv!%~?IMDsS{q@e|vkVU1m`9=p^`urYBdNxS^gZs{QZJq{W-*@#tqXLLK zG3fB6;dGIodf?p+=fg4QeV_-!|8@kZ5_l!Er|xkXEC_Gkc>0H!p2)G?j%Sy8&TQyg zr6iOchs(yV#KEgoStC<-1rs`i;V3fbsN>ugRqkL&7a+clyOB?@ZI11iLvcL1vdf_< z-?S8SZoNBcAX^pLK*UJXdUY=Z*#PN`GINDZShebo*T+F-_7#@S18``fOuJ=C%DZgT zlx)}gS4h!Y{@YKDpaUcAUdWwCYJBh%A$|sm^$J_TKc0w(j`#83%uP=D^x4bzN1QhsQ823Tg?jqPPH z4_2}KXYeUKa8*1>O%wdML=FJ0$l@>4R}mK0WD)Pps9jU&wCdRG-}da2tL=7sYt58a z3ah+pj3ZC2XbFLM`{NkzsW`Z_xCS%rR#CkQoz2e})q3(7_zo6mL zS18c0S+P85OlF+_Ta#>|4lC!K$1kWW&k&)lUwK=uja=HV2h`X6mUYiN>LBa}ci=+V zK2LjOC!$BB4wh(Avuij4Q&o-Yk1tfOEbz3(irvG8u}DN5FF#VDdyFw9)6ctzTpTc- zkBts^jkGGT7SecI8|X|7h~VS=d|RXv{W(E_1B&S8{##;sqLodTVLzUxpwH-Nb22ii*b5l^N7V{r z6@O(wljka3n?Swll!ke~QnM@8gPb<>dT>$R zTMaga>tKSDE`8uBT@SdwS)+e@neEoCEBSy_Wc`A~bMwSw+$c%NJ(@`R+3ediI?^{~ zNo)CZ%y+<{a$@u=!)Yur$Us`BLBcOlCVB#(pelPU4*zt8P{_j&ViugTDZ9%(D3B6j zxq(Y}l?FKf4IRF#4TH{4uKYt!0J$8!c7rIh>3HdHt$ss(mo_D};P-avpdU*I{H$D) z`(=NS5Z*&&@)7AF#md5#`|!0Ozdycjc+;N-23sjMH?6U2YyVIp8!AvLAoB{ZsY3}N zhvZ6GIQR1frwZpIJ(KlNukg7ikW>FIyZ-00-Rbp070m)paJ?nVn>cgIRW4b08ntpk z1d?e4nEHgbh#;q$2bMwR3b4=#0OC&*`KdXj?IKrjtXr59%f2Gd!!VXIK>q-&N6sy` zYx16g+Q5Uc3^+Y!+)kujFMjB$eMHNaCJ5&#h#WH^aESD%zX!vE2y{9z`l3JgHYF-2 z*PU*K@~yT_T*ow*b)L(%P3et}Bs^cp?~^0err75-VYQexD*M*5^+MW&PYkt-VPG|s z&*wVdFut?AftXzZP!5Z<4brOaF#xEi=%f70J5+?aW|Ev^yM85>${EY+bNUbifQA5| zp^7>RT9u)3cY5w?#PG3l6O>40^&wjVD%- z{}CHJf=PmCDM5n;Fhj=V3Sbzim*bI{J^tB9U@nAy#eB<_-Z!`Nn^-%8NkAlp$Uve?2}TdH7AlN-&-} zLx$(FL)Y!18b_mXby-|84WZRp{`DdD4;ag(CX1Ri{a`CYZ$H6??^>|2VfT{|g~>vL zOEi^|YnfOAR-oFZIcC${m6>|AWpYCdg&eVZ(|md0FilZVyDH={n=sQ?kHaxM?`A?X z)oQF)I%ge#9PODC%kDO%ObS;fB1KZI*H@r+h`kQ|YxeHXXIdRsMPT#pP-(XO#v6BQ z!W4t#X{zOm6I=bIwz}@UZ8~Pt1gT8N6Uco9PnOhV1Y>%!grl3B8sC>}ugL(T#y7d9MM+24zKw?6)b*$0n_IqL zb}9kGbqDHS8~1(t$7*Xgpk)o z8aqEM%ZR^p<;Qw2go{qOQuu&7v;E^}CUma@LHRj4IT8U+*0YJOo=xXf_7$$Gv^k(L zI^plrs{)|CZD8xAV_1QNNmO?w75@-nB#+9Z(=ij%`Q2lmWt(r&QkHZU(uTa)U<8#o0TvrU;6-CWoLqGvz?7DtxiBcj!ckhRnQ3U9$6f<{ z2&Dj^)zYD>5F+ws*<24V5(K<`l=M3SLFAfx$MlItzfO5Gq0^m@FJOfCjYprhSi#mv zTv+0XN>x$V>~mESMrFeIBb~_}2_4pcv-mEWbiVdH`@1V{m!3%}SVTtK$pld+0#%xp zFWg9}NSY#JDr(z%(?qoShzuAwp{weWR4-Xvz3--$Nk zAm#pn&Fvu`G@bLJ1@2Uo^-^ntgG|>L8XLTfyFY`E4115KM>0kN+4sZsGmyz4FnL{K zV0fQl8dNG4V^LuD_HPTLJo8s}1?)`-uZ0KM1s6mtBOSgo2e%tp^{mZiEvD;mptD*; zt7Vc8aRz6BKlwvIvamgs5JqrLHFeyW1-tdk_Ts6Lw;%NNUGBj!0#dzyEwv^td-?7% zI5|_d+Q3B#%(w+F z@gMuA=yBqI{zcDP`YNPVERYE<3IINHN5k0 zZQFX;*D&6XNL!i(Ja11`W;l$p@6HdF=!L!}ML5CKQ;&BzBMgU$d@qF9nOl0fKTmYt zOHa!utCt%5AHv=OsLSn(_Z9>tMCnGl8|m&85a||>?vU>8mQ;}L2I-KLF6l0j?yh$O z=lsvP_nw(|hG7(R|DOHqTx)&TXB8lUgXeq0y%xKNv3-~Md=K%~#TTeu@pA3Ww?2_N z30&vUv>tHOBcB7_{1|CKDyG!S;YC4DBoGb&B3RpLs(FfUfg(4Q zCl1XOjOprLs~iw1I96!)k_ka#G*w{Y#oH9*bL5GIU{Jj&a>{-LAn69!{+ob=N}sKA z-7G#Dho8Z*CDY^DfO$G`ovj4F{HN6Ld0-Rp@Z4O5&5XLePB3XgCG=LKk#2a7K%mKU04hU|)Z#U3=uF-C!L-g)u08 z!rLdw!31Y}p=<42h8X%HwJP;xN)zE$?`K9zTAcSC`4+rO9h3itA1!wLW@WLpu6$7v z=r;$n@MDyD(C^Wr_KH@Id*eGO^~-CR^*0#xAd*XxgG}yAKPc&N_&VGk*`BNy`rFs{ zDo%Y*t%HA|W%c^p$vR(yi03Q2Lx9>%X^$g1d+JpBmiI|c-kNN|$1;txmeUSD_%C*L z`>O~hOm0N{vHm}u`EkRxrBmA);#J4Z+&Z=yCRC;40>}#Fe;hNJrr#nh|>ik`h`}vnHmzdzCSW-=0PSPg$ICCDU8}jYUZQTai>nUd@ z&Fa{e)_6MU`82qWg-ivBWn_;CGd{=9oqb#cn$5p17HKb4LrE*ZI$SngD%T(Jpi@_Y zVa+!+4p>;KWg@RYu`C^ngIA{YCK=17(x(50oMGl%XRGb54|9nQWDsH*PsEB1A)#?po_o$jJ$w(w9NZ%**2p^QSuDe5;fNwF5 zYsoyhtA5UDg6lbJ>U@UStA8X-zEF15DBD_k17A4o9nzAo29sE*r4v4swOAzY1K9=h zA=eCE$$Fd0i18x(BNQ=|{qx0(<$hG?p>;RliHvkXJZBCF0CVFHBpo zW@VSyfF^F`#V0#2bVIgdqr$4a=qCaaCQf~na}U|jM+LCtNi)MTOgU-WPL~sV9r840 zYVEdeiD#tRxvocZ-hQB|nE^abpQ6vO^@74s@Vxf{XofYrCYuRALW2_<+=aIERBE~1 zYOS}cd6gT~VJvTV3)l@)bJkf|g9T+D#!chQ?^ds!|A4u{XyAo1BsK<0n_IA!;r8Qr?wg+=ViuM=bT!# z$<_*FU00WVZ|`lTyYJmP9$TNpV!>zS92-c3!biXI_tQF1<0Uj&A6emGSWkK8^IzmgzUT&uae(30U{#Q zq&Jj$^x_ZzsOG=#aBrJ8Om!0lCDCGy0rN!`pdVwqif`KGSSB1P$JKy(((0 zUU0t$>BU%sQm@Q3^(v(09CCV;i%`gQEYM@WAE8M!D3DYG!-h$R8Aa$%V%j4_p69Sw z#m-W>_YWK?lw7?psCfh@=@%|*d{uZzw=lYZ zHo|fFQT~WW%&cmfqaWd#B(m$e4t-bIy)vqd za5${7^il_?)|h5^mtG1u{7CCbD&NNZgk3kR603ZmA+v>T88Wv#Zmu-pwl;6rCvz#J za?60?V1>8s{w>wYCz4*>MlowFCkMXM@Hb0V0;ASveF`rqc$>~o^g=+&q~mbc(AH!* zL!|WS5H|Vx-w37Fn(-dG`nRk|%WRM=ckWqVKfiL9F*v1_U7J?7FG{9WvX$HJ5!~^f z2ytf(B1B^rdg>=<00jSt9G?qW@> zVxr&0JR+&5>gFU@l_qqX^UHWEv)e84>zeeIojoXmB;~`U$7$M9q=n?ih=S!kd-_8e zVJiSSfu>tJXRqgnQd$~NbY_Q4YGts4 zSVOj9t_sQ1us@eguSMkJ@N&EapEzv%cDt}xb7<#kh3tN^v`Ji2D%qOmxXaAE6JVos z@mDD7A+Iq75!gAqFeEjzV3U3if~hYEy>|V*rENgKX)M!hg8l!E!lB0c|p0q{5)z2pICr_S-7P zus#?J$fS~)(SHFmTLz)HLAapS8TC0N{nwTSkB|$cvfSQgS!5D%0*?@iGyT~FP%>2> z)GF1l2hs*fP%^{5KJ2f&4)Votes4s5F`8xK0ft6GnJZsEy8zJRn zQ9`>EIcYM@#pq^O<`VgrYpvw=l}-+9%EB>{&w@p+KL)K#eqNG++OwJebeym9q>+49 zmHS&I<+6Mn8wwYT`kqW}O12KlW&K@)%vHE%M!VpbD8))IT7tlt3b;Dcmk#!k>iYIp zHfO2its;^5vWX2XB&A+pptIOU_9FLZAO4%K^!>PGrfRD2iFR$pmd}l# zhK-U+o8$R8mOgSZL%E^&@>pwy>Q&#eomcyXA3B{&gmzB<6&)+#SdfTf zCl}Zyj|`>`>UF;>@3mGQp=hYG4Ib-PDZwHQ#xZ;;iCwZOQtmE(IDUW9OWrg@dD;Z- z{U(9ca~jS3)@!?RN<8hf3Wvw%64L7Xjmq#hNi1VOJR9?X#UH@Es5}}{1hm!gzT}NC zVcovEGq9&nPP<%G+138!c#z9M_PgJl?CL8s&Pq2dt_BS{{aOYjC8YsNzdm=&Ml}p%_C@|gjtd+Q&s|a?_MwymF(#7W;o*nDhSz zMlcc#%sm+gQ>jReR8tWI|GI+V;9*s8(=_B&G*QVL+A_f#_uo)&8sH*yItzN;K&wqJ z#MflK;?E4^XM8sr_THQ*q1W`yb9CTkOqosdW&XkM=}-akAk|m_ zYpc?Rt-iuOmBUuFu8_n1x<-)+U9y6qwNKMiQ7{=LloW@69l-<=)NqbZf8GR(j@l8p zG>P)mlIR0l5)P|bq(^T7&bos>O8hkF|K^Yp&ue0}o zaAJHAbWeVj~L6XDKs{j1C;U_0e2qte&ScntNVT%^d z9s(Lu=91{I%NxPe%Xf;$oCtc% zyGKlba&@AI{*9NWNU+EOackZo*bgM(QX$B@yEfHDuq)khFasIb5a>8%e**7{KR`H) zWJ)v&dX}xCv3`UjguDyx=)O;04SR|8#(>0LXGQv*Ubmr_FWYD0S1{*3Ee*isuh=|R zo?FveCAyh;;LC-8oW18)ADlB7dQSWXhtm#gDZ(B~9m@bR=tF(LPot7V{#He~y(28u&EZOLX!wIU$adrGEIu#(E+D#JkRjjpM`3N_(k z>61-`kHUuh$E$LFkE?Mcj@-}ETKzj+`wbugB+3ck!Z?aOS?T7o_z4a99SQ_$f);V1 z8XkEr^9Mr3PY6ms9$}eGyZE)mm2$;PH1cJZt{&iK2L)q*gxTVWMkH|!AhDi)rLm{! zN2GjPNcm^W->GpRB9vee-pe~Idw9y!K{_Om?3dA3>_#DTli$pZ;o|=UvG#qz2zv6j zqL_%oKZsWlJc0nwT=;x<6EVJFSaJ&m z$jp5+)y=W(!yKmIc0=w-CFc12GltA}_m@XC6Y%D8x-D4-h9 z^uSgKBnq|pPi~LKBSNA^*bnM4H;De8-9rz-lphFkty9w9DzAtVCxF(Vo{ApG`9B~G zgcIqy!u|j$c zho_utEa3wxLoU15I^&=8tN(Qq(ebe{uL(9Ir2E!{MZf|P>Co!p5km!y1rmkWfE^$- zD|dXQW+9O1p)n*8%(ed*06=`cFEaoF=Rt6=kA2sI1d~Gx@}mNhK44{tBo=pui86rJ zV4j68XS{fXO)+VPcePLO^S`gY!<$b*8t zg-H#&CDEZ^snWmg6BF&jQUt>hi9hR>D_{L$JAf7U#rC|wIXBHP+c3w_&_2;>)9G71 z^@O_SOuc5#9;w#{l9u)N38d5)4S8y#AklvXFfdZ~Xea;e~ zjO_pO1!gWi1qJA8FxKNQ)4iUgN)10rl!iipD9-toX!4Rd7}knbgz!>HNk^BtEi?)=QhF|r`MmX#A@#6hGv@|3C+ui-C$NUL)M`;_=7B{GNkZMxK3S-u_P} zUs)z8|xF!me)qAHFe5+;dqo&P^xf6E!nLnqJYXG_KIdx;nd zb*=%|sk)w!5ez!15T)PvL)6oha?;?-N*ExZ-FH&aSC#(%=_2T{rxfHSG&D3aogCw1 z?IV6>MDY5t2`YlV5w@J5GRyaSi86xMPw}j8)5qUa4b*r?77+6N&!PO!p5OlvMgjNgaY1`Cu_o?k6>@9&hM>O+)0sXOC}U_(`(#<6Ni#D+Dk``uHKU zVXb%)MLR-C5DCGnfH`1@f_nSd+UU=OsQ*|X;w>|e1KuDVcXB_gpTG+HgC!D`*2zTj z;jQOZcLKbgM2jXE@m*v+cksC1#z9@=PFGB+|6@M?^@8pJysH)gQW3+ z30~kq7M+>Gg0UnB1VL*^%Q{4`36HI1M==ur=a^SNt`f&&nl0joC`@0x zCE>|L3?oKov}Zk7CbOiS*Whvai$E!|&Zh_+M8&8U(gy+dz&yagY-jdZ;ACp|8u%nqCBoTR@HH_ht?3WAYJK1{IPo@J;6LA z*P{c&=K%JWTB*aMk927MtEXTxKeQJ3Y|_m8;o)0IK~FV^z$#>r2BW}C zWkBKubH7ss1_Y6ONP1{3L9{dUKj-E=8Q7`-{i^Tl`cC#uK@;}abwTqs?foa8Q$mam zlJeo<1E$5W1X$6W#uY{UWGz*wKP!66M93djbfC7iU)c+)P}nREb);7qCxwoVGj=rHQi^!{U1-eDE8Nm z^A;Pd?k9|i_boOEwH(`abM=>@Bf}Vh%@u;D5m$p5c~LD`bkdCK8*FYBY8GUWobB1l z#^^dLL4`l5K&`G0tF@O^nMoH1F0WIY0R^LOgFpJ1tsvzbYEKKnusZBPQ|OCd zARprOIDHX7@3%745h9+<4h!e&M@S;`<>$$cAOCV$eTvjmZLhJJK@*ILJ?_>w2jzm#EMZ7k_Yk@+ zs2vD*-u7LP-@c7w=C?;Mebq!-LWQ8ohC#j5lB~zXWg(v^`ieZPeK& zHylt9?*~9qS2h3$tq@3p{i-lEfQDWZkdQ!?G~aRpMSI|KM+nYol4&<0Jh4QJm#2m@ zu)2qrL3kCE=$L!MyeQ#xq7jVlCH%uIuXMjU>E#nhmh^#%qcR}IHFpH{)m9B`cQ031 zeu#({Ca`lB)SgSWpLU3Sv(YF&U`{&GN=Kld+$D5ax0|1iF`Bc?Q!12i6g@wLxZh5wBWsQpdC4rMeI=6Fmgd_6##1EW5e%S^ z^`D(qQyLbv?2HsEP<$S8x+AjZv91RHol^4| zezSUy^Un6_NPn`?-5}JLI_EJ4srQ7lkwig5L+^08>|X$g$qx`k_w60cQM(1$k#C^h zh`&CT#N&(?zuz9pDD=cz=wbVk*ma5#P;D=gPU5;^!Px;o?7#o)AO55|Mx{XD?e*-)GXIu5rb= z`jG$Ba-d1!bqQx@)LR@1&0gLrQW<{LE*!E^5dOvM7R>rh$&!ShbZC_j$(MstE!B>&DAgBGt2!A zDg1d$<(7xp=?d@Dh84H%4mLIdzCYm8s*GkLF2`%T{{XJxs{T-*vr!%0md(To2jNme ziD;5ji3YNVGuTS-{^d(JiN<&~BSnrA0C2W$-HZ*fDR6ebL@x}b0>^xME4wz?P_3=u zPlOqeQ}oSdtw%hODT|C>tHH5My1FY2CqP3Grs$Q1lruIrIfNeMq2-iB44Enlz!W*E zY4OBUM3%~UoyjziMmip!W0g-}fdXx*ga)A#R#s~AB%$jmiAZ~4RL-W;_KV2*ZpIho zoiPa8e|Am^On0)aw#s!2I*LSwx$}_XrVkHk>s)>rt}4AqER#3=ZoD@8XQ52k&f$lh z%RHj^Ih@0&&*@R97eVAA&&oO*VZH3b47eIeC- zv!Jd%h!Px}C5>S=nPlC+dI@u0f$?9zp{{rg`rDCpCt+!zz*MmpUSmspH%)>A!nfz&#QE9^X-mNF$$HxRf8m!c3& zf6~vaVp#lTBm9O1hf`unG>1fsA*^_TJOVbe=QU3{*wm)|OSswKQe6*&POn62ZPxaI zwgg+>I&j6=hQAdCpRCkw1;2=wZ3$iAFlVARoLI=UE*8^7;YS{%EGTTFK_;-tdLG z*wgo~+?tb2QU^P}x5Zb6hi@M6QZ)-{=QZ(~%BJ#)oxbXX(XN+85;||5w zUMGHf;LqPG=8w!g2Lt6LJoFa*x#Zuko*&ZU{yx+PLy`h-`z4^2o=Dk&}=^* z5$}%=mY48o6tNWvH*UXF>@SQ@>=ERyX{>HtnfvN6*z?<0KGJwt@|i7__B%z^A!oZk z?)p>o8{^2s7O27p7fL>$kkgA6YGvJwl7qP^eB@HN?0mYNry4latPqWZ{>E^?*RHY5 zYDq8|qdp%u;_)0GxPSK?CEk=Ii)>IJWhCQt)Yqkd-AEXTxThE?WX8IHLe&F%;rZ#j!W_cA4@e*-a7>hqH^Ndr+IIF3k?w4?q_{M-3Z zc??Tp%^s*fbKludU)Pgu&iFnhFJ4ahBUCO-NTJGr=UnLwPZ{0Ll1VDvHK^`}`&?G5 zt(MvW5t$2pB>2)KuG^or>X1lg8`FPnn>gZYV^Fktw(+oWbZ6Uu2XEz|uI)`%C67w^ z63NT2b^e*KLhqPmu`5fIpBT38eTWK-Pn#g`Kw#Ti%f9uro+)!$fX3yq6|zN$;?UGZ z?MuYgOhyyX#lX2vu~`72lV_n*!7J;Q%bWdIt?$KOkVvCqOtnUTv$(*`y|f@}M=z!d z_5M;}TK$@xge5=nji3X`dq-RTa!J(ZPdVe-2T|-lY{ZSS)6FJkN~b&#vB?pb_$`8% zMC2tjha~diYtwVS(CJM5yi*y2&_8nX3|F;M4vbC*I)HhCy)?1A()smyl71|Wj>LiJ zY3zA}TpG-tqGFx~ae04O{ou;aDV!RjT^9~*EWh4RC6=S$E8du%e7vz5#ntN*^2$+1 zYu$8>;TKeDT%E}1>i%x(17tFq!u~FUIylz1J(}$yIPlFLYu6Fao%pU9_2b7C`roU* zYg8~8D?D*L+9kebvVQ(Oq>66+EzPHoEg(O&`QUHK z#{=NFUTJpL7C2P)wob_tGJh`0irri`)a++cRj@C?&7tK9b~24f&fhvK>A}413+&^` zu(UexAH}5C2-)Uz6$znBAV$Mh9`M7(ie8S$i@VCQ&eEVDE9_$U$JOA;ckf973v#=w z`u7l_D~EZobS1SHK-Ls5f5pE_v&w#pc`7HLT%MvKK7o%AaHlUX5~q;Ia1moaUZZI! zlW{W1IBx2sYpE|ts)SU`Sv=cRM8}fW2GX-D>A4j%nOAV=d|w}$vS9%-T>y}Fnyw#` zn)|_px5Cp#-8~wn?4%zqYga3ukwtpmA^sUFz>tik@B#`QzE+unFr5pL#@W6R4^@0Q zf#RINKMeg7Fyd#}Bi_Dt1v;piTbz{d;?h8+s&laHil%BFw>f{P*sCOnr_YSg5kD7* zS3ttb_7=$Gtpfu$I1nQO91o#iJ)X?@7mhlgxR<@aJZn6P$F@~^-IeoHc`s+Tl z6_r+B5p}&vX%lUh>{D@z{p~KIS)iBW?6)r+LbN%uq*B@a5r`@4%qhPRvwX*`WEe4w zP4~jODM))apm6yIW^jy$7mB6+J^meDinwpX|t7l=pC z?k$g%rn@PJj*U-6?^O>BtIK6ZiDQQ92ATR?2(zsf-ES5UA~`gP0?eXn4HZc5a2gSs zrDxLU%)=Ff4O_j#$g64w5a3q|vi;0QoE{wj5BAfoAb;bxz)*hOWCr*-P~I~+tqxhd z5IH@#1OR0e2EG`n97|_Pe1R#+VQ_~vkuM7gajLgZKWj!;j-oQfUfNw=2v5zE!bKaW z$Bw|XXjCFkuD`=SHd()FK{zYJ9 zwEm1Dt}2#EV1VGTS+%O4(U7tr*7JHoz~Hc}A&r`Lo9(vOc=mXFJNs_d3VZpc1ji46 zLxf_;2$F80Qsub{SNiMnY+2pO`m0x|FxAiWSbCo`390n>0?gt&og%`x(@z)k8Ol~$ zw|X_x>tu z8fLF1ee&@kFELq(^!7usRmTh$z<1i1<^g%G5-5fw;TYf)2JjG7m z0O{DzSh^qsXpwna2k0&$j?oYE^ka&jB9(AYUpJdHDtW(F)f#Bz6(<|$M8w)1ffL9P zpspgLYDk38bK!tXS>;L0^A|ZL+N+nhRf8ivH66F0U9dsNcRxE!i5gc7UX=*}0tAyI zvWc7*#vMs>jEuSk)Z>!UDUQy~V&C_!BD94fbZ`nAxoK!pbF04cxV_Ir)f)?NUaQEE z6FKvs9GlSb;C0@G=u>fT=T)nBzh1?%$FElT6p1vjJN0w+O*!vPUG#*i->2Bw#28a0 z=Ww`!H<$ciB0U@YpTGAy4EQvVG$Dib)(3uE&!J0c1S@_~DT`!t!wlB%@eOu5S~^+% z4(allK7FM<42Qunuc(F1S{x?M{$g5fd-XGQE-*_@)V}r^FCe9LN9Rdl!t!P2EdWrP z%F#7Q98cio{4BmmiS9L9B7uOEJjXxjfl2ns4CXy*ZZm(LfTjrWNT6$n%omSK}yDuP*)#X#)c1 zfgmsoAefG7^C|hxbaDhbvYqe~zzWYS2p(Uiw#Euxlk}%@||DEx(woMgH$)Ej; za65(q=KQR#^v~TlG$a+X@Oakd^UvOI#V?31e|{d3@?kQxF;|TUr5ygvWwG~dinSO4 z;gmEIIzr|ZD%NWrcmKm31C_2@C!f~VvB0g8kpx?^ zX-(@I3;~2POb9&Ai@9VBp@2(El~Ep^gH`u4gN6E=ve$Zk1+Z8|S-1TY&e!O3ds-j2IEClQOf$g0@_9aD_Axqbd5`d1|;=+^Q|>7Jir=E z>3IuAH1ak}ybtQNmJ)Av*Z}&Cg#D&ht`t+lpT7JtgV})V+x=vISt$BdQ;-0S<1i zb~7)XM$NZG%A$8^keTAk^?OaDhf+rw#-nOb8&_w0UD2dcrTV?-8c548He^-dC;{_V zU!Lv3`|Sy(1zgA)&Z@qKB#1*$u~MG89l<)FMz%%R=dEs9jlOL?s1#l|xQmW@JL)6x znwA(spv9WrTLc~loBHa93kU=sIYBCxURSsXDDS=BO`fVErl&-(Wb9<>Q-|{4M0nnz zo|6JYG9Dsb_DahvxVvOU`DF=?PIWdtS8zCA$*)6k_?LGt^Mf=JwUX9COH1kGzy>$A z;-=uGQVYrEYy7vlVPP)#|p4E;=zuui2dyjO!()Q+5b8b77#Csg11DrxgB zg@3&CG!c&;x{j9^4{u;+tlyxj*n&p3eWuWrd@(Yq9N>!3sji8op|W2lRL7hCHhDv- z7kW4FBOr%_k1jb_9rqy=6dj`=S=+kW!zY*hnd|;Vn~b*>(un$t8x2?S&*7E{ zK+CXY>POlhnTzmH$$kt^ncbV;t}lThLAT@%``s9CM3LobGN%3MYn?#(y19MPEu;CX z%kcS3G>6lp(zys~2A2~?+E-u_W;*@9lMu7^M_}MseQU}7;EB244ANQ&Z9B%gFN_fW zCMun`g<`&moO(z6n^YOx64~(qa@SdGjuHRq_Pa_)q-={RvoLC{26iTczCa)mUj|#; zyIXa9KKD>Sz%b?2$g)ZYrT)~gHVpL6_m{>GFJsVY)xLq$?MsT3n1>iZ0|D6lgmp;} zp`bE9QBfAhrU6-0u2NBwdd6>O8+eR2SBPE!0cKph4cM=W|-L=oxi2F z$tY*r;}!JsN7)xQE6pcpHlT|oW(md+zrP+4RarGIQT+iPS3?%I6Vl_*wXUJ195l7D zF~Dy@vX6t&sLGR#$7$yzgr-5v`D|pIt4yKA)X}cNsUPi+mYuep2`d;8QF=O4>)ex=*H)?6O1A4YG*?wcn zz7f^F6&WoXDDCSy$*rcS-p}Q!eJwxUe5Y5{4EuDH>+i^8E~q^9Hp}I4+ari%cUoeV z{GMV`^+oR^0tr#B!NewpkCNWuNSm7C4Ogu2C{=jyYHFut*I*0{x-Ug!U?At{;~59O zyMDdDF5*E3Nq2?o^bZr)xbM*c9BoiWJpIy-kdhx?tdnNaP)5k4H)*EG+!tyqj2NeN z(PUHiSDt^8qf@rHu5v~bEmkd(9T|vsn}QBnp1R$+ed}5_u79aeh*r$C-S!;c)f1RU zYA)T(fLQ+1gOHF=1t85qI3@u27KGHk3_ZUiE~lONmBap`fOrTp)z5{- zthMi%WOp))YVTJaUp#{Zd3s{N8*Y7dYTlQ`(rdExE^O}e{iMvt%gA`RT?%)#vEOvo zRUjB;kOBNoczNo;P&CnWO*MVJs2Q`z!4dYCdXqBy52;$*vTC7sX++4Kwif6Luq2_g z5|a}-#aChT!3#O6Z~Gi_)e+~^(G?{u@K53(0Ou(df+4=mV~?=sP+1fC^D84q+?{GyDeaBHbxU~GzT6rv>jn23uj_BE7l`ACyS%Qt z@+A$C=ugxX2Set~L%1@rL=xugKI@-A!WwRyI3xyyUD2CJOYbPF2C|Oeu!LZLz3Yhc zSyG$cw^)+{UaU4(s`qtXxhE&w+%dPRb^>bB@0MIYSJ$YMZ8i z2v@lLSUsTa$Di(Y_c@_k9V1VlGgwZ@XwJqY$p5=lf_Cr`%~M8}kfBy_uQKB-P=nJ7&^mlZ1{$G7tcLOyh{PJmz#2 zcR~4>q!XBna-|EQII_2E@G5TS`)#idK(%pWIggtY4AF4hybI((LYj|%dD`V*IsduH|Hvj`8=IBIF39a5Ag8m8K!BjF!i>bvt^^m}3pl z`@i<_;s>Q=%5*#6`VlhiX!Y;`%#fSbav|kb?LMF~B!4jC^br~vp-I(qtbV|>5%XBp zm^nXTuIP1lSoOitnchScb&b*%3h&2+H|8o}v>KLn&IcCJPOo_5~NeOJWIF78@9j`ixV=Q+CIOcY)<0^YJoFTdDADO zmKzWLY2D5)peX?4mE;LHMqievSKlyr*-?maxg6wOCHSPNlbGaSPTyYqY{CxM62zBj z@7Ox4ItO0RG|K?wm%5%bRiZ+{B%!+Cn3qpB=g9y)+&sNk+UD9}cX%Eq9Pa2_XEl=kR8$Ee(=hw8rKB-dCbVkajnv zMWc+}ho>-SUT!dvKkwFAq8%&hbB34tyjgb2&t0$D$n6_{>rUQ>e?(;XL?DRTK;`8t zNJz_itjU0X2bbo{`-@5eb3y6T;Fn|QgJrwP{Lk!G2ap5sNJ8R;Dj=mBHarmF*%iT@ zr8pZdoe)A7uj}2-SpuI2FVFx$8$Ub0zBtMSCT#zNIRM-aHCcq<%^VK5AFlNd7pb#d zgXCU{_wB;133-c>7gX(&&*7E#bbrRq zv0Cq;OGX4+8kPpxeo9*qeq$=IJeyTdG3^?y^eOt>+RDmVUb$a5fv))%KD!Rr_%^3u zf3?GVluU8t3Fjidpiq9n0mVj345P8wpQ$fLuat+CjW1niy?y>%cB#>NObP0o=U9@) z>z`=PZgsr6^d?o4={N|fuB5o)PE({YnfM61tb51Yg+ze|JQAamy@;OgE@tY(pHT+?C@yqXS z&uL9p%St+bU-oryIaXweBt-Ly2m*WLU4lD_a z7JUhfn4ESLw^w_7BuME9k77ay^?PT{_YOx;!c>eum=eVFi^5C+T}}K8d)bWMs*l&5#XD`AwfI zZR`dj#98qAkTsfVlf=>^`@{0p%$F+fbnAVDLN>po>uTN#HyyLH)Ovxp*_>9wG_ro# zzaQ9C6A{Y4JU%D(Q`Pdzc=dgZf3Y$<5Cge)rwQGR8)=D+MhUtP4(YfUE=jpRVyVw>*uavL`~xA<^<3(T1UZ#VR}+V-e;9$I-FIItvSFpNKxn@h$= zZ2d_)dX{zz;uJG<#zal@?7F^&Q5A&mS}E&0znlp~vOP12znP9}@rAxByF320}LXNRF4Ud{f!%5CvByfZ*^WG{({G097{ij%<)<5%^;TLY2#U7|G90PNINTVz2>Tt zg={Rj93HuKca9p3y9ABLX`mF`=7$t+5T6lEZS!Od#?xvd7hcQ^kA$UgK_h2dLK~3$ zy>EgL>L#=wuyIJz>2qW{liC7U)L7ur1zc*rK~R$*`(J|OWH^iZw!M$A{46!Zp0 z*h2<=H=of3sdGP**-Abg30^uielr!igpJRZ)*j6p&B9u2(={tlR=@ooTqBo#FGAwq zM*;^g94|AjbtKZeX6036-C^q$nyV+fM2pTg@t8+foDj7K1scy9PR7;GZ_XC}wJCn4 zR_+8xH8D#%(2^J{sd7`&7s(5w{<@cu;E~F*4%v;>&_>o!vK}2ZO!h@!kduY?8Cf{L z(Q-%oDz5TH9CJ{YN`B#$lh)2r?WFyAG&V!8^nhdA#C%$s?68u+iiAba*~q zcq)kF;w5}ziLO>;`inXqulWS@-eK8+C(d|ccljI*69mxcN9txn~axc-{!l^kNu2p!yi5Uwr3Qw73)3q zUT4WN+;(ImM=|01b>Mj2RM=DuhQ-Q`l6)nT=<;)8o^-1f59Td6rWm=`l&;+iR^Ey= zObzNz3iO{<3*_%o`>J&YMHFaK1n|vmQ%Zg~0`LDj6ffMwd7AgjuN`U%I#1}d$}^?S zs%&)aQuCNVR9b9G*3c;aFlCbEfH-ITLuOX^OlyY>(3&Y)M?^dr$5-cm&ks)a&`sY+ z7pw~0z5IQ{FLt_ql^0SiCs`9Mr<)fzyORK6ewq?RRJ4t+;{NidGx@y;r!_qa?sSE* z{-vVR>;K&o#arU4 z(qIF95`Zw)@kG^EJv0cv8p-3Xt1`&JISobJY^od@FyAN20lfwZsBOAdx+3HN9X@#( zaBm2CueRTqektda1L)uvm<%o0gD4L=Ag}oQ!&?h|2@4hq*9(Xg7JXjv4t0`x#78#E z3zJ##+)Gc-nIJX{GQbC@VXW<~023snwEjVBtNR4`&rCJ_svEvsq@V}deE>?Ol{D)G z0Ijtas#b7=;#jinZ&R>c@XKzudd*a(;`b9T)FP zjHfpCGbG(tR+*# za-kJ3IC~=0(=EFYGS|3o5z6$Lr=5u0X?H7)T5Y#V(^3&Z1T=+mPSm%EQ_v^_$pB&+ zCCZ0xe|eSCgUp_6yd7YU56lTmlx^e*j`q|ZIIVaG;ohZQkIs&LKAeNMjsg&C1R7=S@Kni&^#Y1q4E!dbNJ+k zep6<0hh08VIvoySwS>sCu{11cB;>BcwqCWN?x6B%f*5KzYUG`*Mz7Y|_wZ*(OGbAq zOa-J!i54W0kq1J)o*9Gi5CIKwwiD^juUGpLUUYRd(4lKzy~3?VbAqmSYG%Ldk)nUy zgPjD0hm9)SIV2oN+DQ_bCcgWt+&Os>*1=7rL;dZKJgX2KG_<=DF_C={z4dI5VV)8!C3IyTnIUTnu*7Yp-9E|L5 z?fn_>DYI{!t6$qR(B}UZAS}}Yq7v_=iZeCZ)t|qC)giD>`9IhC!hNO!5pm?C>oq&) z^_w3CeSpaR;bdaYZ24Em5Lz#z$DoBTnT$85Nbonw+jtMIJnlnw_crJ2CbK+5g|3!M zi-qMX3^G2&lv9*0z1|>{Y5nUO>jR{&piaeyAs8VlFyByfOGzXg!t9&o%v1=!;_sT91?r z9Waxjw~OAgD-aQ7F6!+PbV=LG)^7O`ithBVbNF90|Kk6Fn}=Kev6vD2RSNf~KnHYd zU3=StKmqU{&ADU9cwY!UT&hblToU)h%vwuTT`G}x-8=5CVl`QpQLYTKq`m}1q?qX0 zl0`=9W4l&7De!}#NPkCSm;?iSp423wCl9XEO7hv0&o`XLu-MQCv%R8H1$yy>QcdxprZY=nO{fU8~s>b z?L>t3e>e=k_m^hn>a$9C!PICb(z3tW&uGptmfMR8!(7Hy2kD{x zjw`gGKSj&q%ueMGQkZ^SJXum-QrYmtRQq@F<138;uYB2cp@3J*A}q!`cq6q^NYdfP zu^CbPC%wt-S@WH79C_xek2n4zdGE9K7k@l8RUg6q4(j0epo+Y}Wk>7?!RP`2CxiaB z$DRM*w`P%VAZIiQ^Nmy-4M6_cWOj9)pc>oJoWsG06P8!@pbr}qfyi`GEx3`qx=*_9 z)v}?zS1JpLx1f0Ww6EQZjt@D!eCLzA>&P!1D1x#TX*`AifTinLQEb}mJX;(U!zG8= zI&O~4y<@z>Xx27LdiMWg?=8c!T)TH)K~O-tyBnkg1VOqx1nKThX^`&j?vn0q5D*0k z>F(|ngmt0wopb*8e)qB0`o6y4bBI3A{oGgF;~L{Uf8(}~MQ8pB!(vrKvym)noA(2k zXSyCUh2HvZmy-IJ#_d(l>(%{ut^n1IYqwh3hyaXgyn+(34J$r1y~m(5gxzBvG}Tjc ze;^u$ErGe@w{mDG%0OCBZ@)7W-YlLsMf^ZmXK{xEFdG&9+iJ}UCNpj{^+a$}8VUml z5Aelk*^;rONo}jt305^pwli$mRV#@bv6w_64ZM?T-?mEF4c;E?wUe}uH5}APT*bL9 z$*VKV1IPxd(*XOafmi@UW}CT5A74RB%Z{s=jAU;xfgq+os+bu6a8d@w_uaq;{LhSK zEayii<|#@E@kS3dKL~SSvB`6PDW(#OLvE%1tPbPUO$moF7`(=o}{ z^x+lj6ju3RpQ&WzYAT7j?bV8;B<`m&xfQDoE)uv;An*-g;U?ttczR0rYeQX@i|IIk zPhdoI31UZCRBc6$#Od?8%DpjxBhHF^2%YDRaf_grA&Kdzpj!0KWGQyYhHdRf6x}`) za#z=ml22`;PA*6h$xeJKs58OGdsmi+xy^<(D?rm#v}q9${p+T@SD!tevni_FlcnH7 zidffSM2vs(j;+7ekt9_no?NJr{!4_^4r=aPl%txpYlA0VnfaFE*ej7g8Td!3*T>(U z7O+2WzjZ>~JXqXd>YO>?BGs%mU_U{7ZPmG)|1i^A9GU|CBHO6T2M`!wpS{%dAzN7~ zx)E0RhsdwmKV5$VJz9{uA z$-|b~7RdVXt%9;u%8wwotHW%=p#(s^E|Wgt@%X88INvncIF>J&3nVZqReI1Ok%Zyz z#>xV12BTR`70d}U{;1Rbl{3SJ1XY6{rAmVkpgRuYOEnI)0Cp~wa;loVq!BC_YGy%P zlAOcoDl*!4l?!-jOu9altiw?xPYVE>xD;0XQX}mm-Fy%S=ks$e2w5n^m~<*22B%Sj zLj4J-|H6&%*FB?#A9*5qGp2sp5wa6BZhyb%8BZkvRer=1meph%`6xm6bo$rM8%Ad` zRl%9G$#|P=j&)xcYa0k!{bI2WVVp3pqDiDl*T2TWH}!UG!(a8O)Dt!PXa+KpB_kUT zT;@YVF>|M8Iem+!H09pEqq5`qdLF;nex=el5Jb_QQ^l%Wz95Cq;V7-|X5~rep&V$x zlcUpfXv2-l*b}lP845%iT<0^{Q9;LXx1bG7rFxL0%nNgDB)<(mi*5{&MS7Yj9!GMm z1RTfj#4?Og99$#ahFj5eDjj=1Hj>f!N9ZuZ7FDBG=;xTkpArXrRu+bE4DE5Kw#@eK zZT5L>31+lpeH6N-1-MCugQXf>&q(SCVfv%Tr%)(+nQv+e`6ka9HA937WW1>DS9Ucm z7Mx%U85YMrrypG8tu8VOQSb9dE4G zQ;F4y?4FzFGX1x>=Nupom$SyN|!x+;i>mnVTE~(kp2Ybu?mn8lPh|FO^p&;WrwY`4%18TfkZfy4u;Jb^s=4r@Ai}d@9 zO7W>hL`_bE@~LSP7b`3Jk55WHu~f2^E@wvja}7vr=99gk44nOo=kQaghGaPm^IH{I zXHuJ}uiP{h8Iq#_a)Fb8P8T?Z(8yUat;_y_sAH9>JO~PvY-?XMvSZTRkW|08JDZs| z#N_xu0F;4b_Nurr1->H6Tdf;aaAC^&!%(RDG*0t=OT$2^xwy6GA@lZ|IoV!7upk(x zmhi_ny6tr*M=ph0{N;=rk3f1iQw(!gU=7iizbS{vzS9=xo= z8)XmP6h%#~+S#3*tYJ4HaTrtHb_S1he>juAaaGK*ICWp{vSD zrmtz7<7C7IUL$8k7?_k0N61l!2G5WPEy!Y`*r?DFcB+j>B1U*_rMOZo!_5cjX*OT5 z|0TM^M0$F9G&x-rj)1_iw)*?YsX~mRwqYH3PcwdgT5?_}OV9Z1T|r#8fDa45)jQ>l zv&3B7z2s0Q8<3VswUU&4HsZP*p4AuRb2vJNR%n`tIhpTXnR5 zxl!`dTgF9%4sP{R^sLFFZ2E)~;x%p~7if8d1U4&sO%yoae}8rHTkv zb#}QgqEfv+5W@nkB^y1~9wa(-wMZ8TOl+YYnc9LbB&#}qT%tj^kBLF~ac*-8@Aon~ zpviTk{T5;#o;NezDw6Iy_7;+7MRrAkV*~<^M5&>g4ftLlaXz#v>n{ z9(|ZDg`ATDkPyKCN|RNX=o=~me8ZzKsnXD_e|+cLrkl%u7nc8d(fOBcxG{+e7}=lb zu{@qXodbbKHO47L|K+2!r7;82)s?f+gdF%@!z*VV`@=kP1U_aMAx8Y?$@6CO!K=`UJ-2 zC3Gjb9SjfuZ`ZlI-kWLIf7bDzO%nWsk@>TryEq^4*?!x(ae+NE&VJ(YX|Ze$SP!Rl zIJ#bU$-t@4J3@GSC<(mv?xyV1SYCg8|M%RX`&|D?4*k{v{n-_+Ie{J62NISyQ|v?L z<8lNj)l5kUmT3F{S>$Ec(_m8_D#(w3Xz@gfG!PK=9jE?qQ@^7#D^%;Hj(LYbV|J*S0 z<*h$n^*eXc8IQ-|fk6hIf9L@rJ8T|);L@im@J@$$0(L0~reJ&@S>)dwhs-3z4}U!U zf8VX&FMMKuZz@7I!@Q!u^;qp90F|JfigMYX2`~;fXZux0?Lr^T2NR8aJ;1e^y=+1k zyFMeHar!S4TvT->TJ{>x}b@sU3U z7U*I^kc6RsCV+D~7;i1nFL1tq@}P(;%M*C01l~)lZ}5xHACLmniF9Z7KPT6}Cr@X| zBlHjj=z=Zf0 zJq8WG=FeLR!GbTD14T!Npa7;0|CbRnRjgID;&FUfoTB=B!_-M{X2JKvwh zh6M)m&(JK}2ZKP>ITEanE0yYkZA{>&S{)a9f< zrzB#D#|?!-Mb$J4+oP=7zzh}$4IEdI;1IfnkTpR_aK?f=25 zfE(ZXT&&X#YyhqOF>KJU0Y_vx!z*IZ?av^(NvWd!w?X`v`e$j(L-p_fxta0;fN?_I z^+m!r4h&+H40qsx>sPb*M) z=P12(9-|j@dOi*r)MKy(#6CY(iGy+gBl>6V{aJEI#MRXQ^&*Y`TqO4zHhMly6ikTe zCb9Uk656Ba^#_6BE&1|u@V)PJVy1;Vz{a;;3~a2GU{tCf73R*5tC`H5UJ6qA5yeo!V{7mOD*!7uzmmAHmijtBAB1%px6*lLS1@J_e%d$55=Bk1qL z$Pw#4_e%u7l;;N@O+$-ooKB9c1HKNVg#c&Td%)S*iO)9ffe_&<%csT=^HaW=gHRu? z%v0fPEf;L<5Pi4Lgx3-hua~cOh#+y(0jt5`#!-Ym!Hg6fZtrixlMOV|>^gT+_BqdVF_d4=f#s6p{&H?_v)V zw$wtm_asMObe5aan6N_RLw^Hi0E;?WO4h zhDzJ7(#f$4uE=AlJDa#JJjmd0Zat5V&4UH;@G(_ln`hEV9f#x;L0ZY6H+yoWdxV!A||8-jj@{h064dK~pLT>WDvBM4NB<1=V(Y&~+M*Ra;;z z#Q=`vl$A#T51NX^D_-`W31fjt0<4+So~o*$d(ma!Bgf`;W(vV#jG&ZGX=M925U1H_ zLjusbzK=Eqpye1yVkQegr}1Gi{6Y+rmsWL*uK+PsLBt!8`r4Wl zRA>e=-f}%Q`Q6p>{0qL(L}Ec?kfuQf{L!7D?cIKCow@AL-1{$e2C{xrqr%I;3O8%N z4O-qcI__cWeGUr-xtAOO@HLrlteUQ=ztuk%?tjc5g07LthXv?(gT~>>Hk)5@9#b?! zZ-8O0H^OpJ&Rb1#lr)Mu=_Ll{Jtj9^x?_7rB!b&ZMiOoev4L-!!17@36B?z$Z0n$G zZ+nKbWMO25>-D9^V9k_uuT5yru5v-}aCp46j%u`dNuf;TFQ?`2d7uri7CtD6WPahX zn8no0{)%xjNXASV?9xtE5D+4KwSe9M&(#+eE+sBdw!|LQnUPRuow zEEG;vo{6HC$1ht-ZD_0Ix$(Sl*q$rQs-`emGIvwN*an+#2VG1%3Ou&fuqAw#!_YJk}wcYIw^iej0J|^#~IMyRW;%%$Y-^Ce>%iC zU27UUxrM}ghn(qgnOuA?TCflDW+w*?OJ>@={lRF@fmTAKRHdr&!-1M#V4(Q{sAVVx zaq%+!cpe|TCmy}b+zd0|)&$H0(`{}IZ=S(pBkN`W4R0_x}FY`gwFO5URMz$!;$~T#!}W$mQJ)(=Q$LfaqTqu z7x813c=Ipf#}S0E?vaOK&Fz1PA8?Y$wtAmCe^-F15_Y0R3;9Srenh7nQ=6NhmJ+Cr zI1oLh$gP-v<=q{-_IGRsUIcN2V7D7=pHte1%bCSgtR#ZvY2r4&K9dR3p;n7t>>BjG z*WRexnYSe&#pe7;eXnkHQ`to+ui>o6zuMWJYI1q<#yoyZq4!HZMkyv?1~6`|=3}ak zZww-}!M$UaBIkvskh4c(0E2@4V^_JHbViF%R)Ofn3iI2sNGkz*iL7o>sB}H;G_@6=V@( z4cEXxSFhHdL7PIw)~!HQD;`-M%0t$mHxQPtW-m>*CGrqKF>jUv`heTG#Lc`v#EE>? z)&1|sA_RB_549JzReBy6y5Il6oG872(~i;|h+U;`0)Khf?md}lRS6`~I(c{@H}*rt zl78Bak-Lt{#I`xp1My_A=acyFC}p8g)8ANjeSVp!q(pu5!3-Yv-2~7!?6RpC>LcVx z71v^aU+O%~sEm{E7&Uu-(qHQ(L85OowB+6sK=8S!N_4csiN6=?=!JlwAU!4pk4knh zZQhHB&2KfcwMSD};4E=*UUf#k%=oA)xijS3FVsdc0iBV6dNdFyNKEk*$NW0r0pBP3 zC70W!#rfWpta<kyNN$E|~@dDHG*R_xg_kc435j3bpLHycappq#@7;UA*d4{AEF(HHN5LW|LC(xEnjQ4`K!I1L9H z4qZ;zA|fN9p?JR!dMXA5+3luNmZ!f<^kqAaT7Jn4Se#O)-+uT%d9BJ(| zi!cU6bvFZ)032QT6>(Wz>&<2=`$ic?Fj|ug62Y6id`4Bh6Y4D42HvH5%T&tQ@qR_( z?81|fkv58`YnMC3J66+F_7vBR>a_-jeC?BgoQj+OuuPtbUN{rQFAZXQgxBPYp@3kG zv)YU4*%i@SVfd35-S@@PQRLn(HSE>$aO9-^8UFtShTx3XSplFSGgo<75{c?zKGx*@ z%i5uwVJ>%#YuCRrh>V19 z5g9u^$vaxAD8VwXsq~WmdcNNmrdr6B-K#fxX#8t z@07>_d?e+eN2b%H&uXuQs_CazjV8NUkpy~P<6(S~M))7^^V5+)iCO`hL=ea}Nh-cU zl~cWnOX^pL+MOu&1q~#0z@Gtl)eFszH7Meb&Bdv;S{nt=!tq{XmhVOAovsfmo6{mD zlLi4>qWljHNs)KhSV~a$cW1KSBzgcV8)0e;bV@qeDa}5wQ6?`+fJZhDS*~2OiH8hMA&CT9lH~zx>2+Q#ywIp9@}Zlo0AJSY;f=3X za}!~sO8h$2Ny@};VsMpZE7j+qCU5D#KDEqXs@VTIx87SRyUNr}(d7&oJzW z#RaxffAHS5;eh&;NOK(Q_ZCZAAgq&~Xn=h#qtW+vG|(VeK(1Qn&AG`1rUH4e`81Mg zwb$bA8i(^K?yzQ)Z`5>El=8&;8Y%YL;&?1uE%zCH6%{O({e9^;3;i2II_WXz>6?+j z=6C($yafkcF$h$)+Y@Z$(%3#gRF&n?2FZcu`8-sp6~2v!#;Q@3@%6>?u(=38wO`&& z#!E2|`U>i}I>Qs&v!yVoEz`?DxHnApo=NAcGCr>t+I#CotONl)V$+<)0n7v_$Du90 zA5O1G>TQ&C(bv;7TP`|Disk*&P@2i2yHlUW#2rNM+U5Aw; zcfxhB)Pl;ULFJerknjDz<96Ib9V**uc4Y85h_Id!;=(X8t=(Ij@&Ng2&yYFbb|8a< zleR4#B6ITP$8#VjRefPB>wn`*@FSTEN&9mig=nSWlCVaTt!xXgV#qDIXn=vkc{pUG|^R!jsirp{5+1ceNkFDCq0qZ!b6A8_}KsRd`bCHB*B1+wf!a zE8DfSyDE!6SUI$Jn{>D`{%;dY|!u z{Yp<{waQw@el>#mq^i5i(1047R)53NdP6};EbWhkl`lU6cTvYQKZj6YAfrBPO!JyG zV`4Eb_K#5;ejA0X2}^O&b}j2kJPxF@SZo+~AF$Q$(fm3YREldb`b@#1yM zYIY(4C-VHufVwh8&nrepFTx*!krxkxlh>E)b$`>JVhPYlQRN)#_S89#F4J1;C9R=T z@UOY*26A@gM(O};B?};-luJa=#i#{%Y|aDt^!D$bZnGPtv!`5z8g@1w(Qy#Wq{a82 z>~vx{Qz~J|2&9kAFy)!!P!;o)H?P^8Es~K3;k^J_f8igDo4Awj>*cWTchm<92u(kA z2p>IE0)Aeq^Dp7Q+yfqQ<7big)+h;(|_y zFl~p(Pg! zan%vq-I)tn#78^B?tjQp8`ENJoE9CDB-;)p1;{M8)6Y2LzP!CF43^)gE4wy&M!)E; z7Rrt)c8=GE(IH#YcwEU?QeKlM9j40r-X0kp z2J8#=jES)~uj#`oQr>t$lo_si{X3{3&mz4`7O!QQ;eusEx#bcr9=10-Asuy_{yRX4gt^{#*`+2;jpP!%3#qN*O36g;d z$0g6X)7t>4J77nUZ?ZECbiYK=ki8UgCQyPh`kIuTd;>Zm82L#L++G6jsv04gw-9LY z3cUM69Z0BDGGPEl!KdcWRL!otlvKEJu%|esAsGS{+0LhPb+~YStv^Jl1{z!wFT85P zbG_L02MtqA7;Mimsl#@obGT_jiry8Yx?UZY!KUXei$4Q|+Mu=^4)A<}V@>%u^!nu_ z1ZZ9nSh^F79kF@eL)Bf@rLt#a|1S)S5sJ>yC|#rD1G8EDmk{0-)d_A9jN)$x9NlXC zLDTq&hItzytb?m0RmiW!LXpQ(`~fq?j0KK04LC`()mR2DTv>qTM5D&a=6GGn5?`Ux zM$hU+Zh_@0gJw&hfHbA)YFKZ#*KXI&H~2D$0f914l>lfwdgUhu+AoYGgKN8YyC`)L zR(B5)8B-0k0P1Dmsk~Xg&i0GL|KPFk6jYK|T8HG8z{oaLOuJ%+yS3j{7kxywM@Pm) zBMiFXwmqc$K-gCLZKtwg2=)a&V+U)Dhf=ofm2mg2pMMLt#HcSk(0P0!94wDQmdHa@ z#%AB=tbjE%NNL4F{ANOX7^p&9GQJk~5V3rwt!%nOaaxE*no1ks!l=;}+O6lQBnCuI zDtIt`Gskn&9`kzfeEB%A$>@*>H z);xJa94juw|Blmw?2@qIZk6nenm-c1FwM;)N@~Bq(ombj%>AMw;Uy4IL@ATy)uEW` z8qRr#!eDvG>Gljf8$jQsmXq6w=8VX2d-5t_E@evTg4^@-Yd~hrC7IjE_SXCQWHwe< zJ7bx0)lg2_(#-9rKnnTDJ^Uvl%LIV8j|YY{<*WUZSFG122r}vI=HJG1)jcPQZkjJ< zw|nOxgAobX_0QPnIxOF{P%O!WbGyXqT`w_ex^mQ<>P#@Yk@SuDBI=CAf?u% zM0h-DBxIIOrQp3?C0PG$^lm6Low`v;IV^lj!&2>Cu@M?Vv;ko?M{B67+1M z69gyeGVNkK?^x{(UeMo2GDds4!F+0%I#n8fDi#4z>-vc|Kn|E`Hw=}-6LL?BT<4a` zaqJb`rL+STmrPk9cvz^muwBMybgq= zA#d$Bi3&=lqOwg5yKNIc``V(NH@b4Eu-Ww)KP3#1&&xJ?7Uy>u1NMyA2gRStlk%v&JMYx9?xBzT6bQb z=-O*1yCL?Vj}Z_UZr$aVf!D-`y#%s!j6OB0?d6Md35gKYA82p+Oy0 zf?rNdB1)Uu`${s(WZs%>Ses4E*YC!Ol@xzK*4~Vd-Uu2G1}?L%JR~#FSV}-qCaOrT zI*5VgX)#mll5TLG779y#+h%u_d+X*Z4H99lYb3^3LYg;eYD-uyeha_URsvm~SF-L~ zD^C>Y3e)3V1?S*4jhLLeRK^u*)mG3&(Urp(Ai=58BGh6pN~u^B^3kFuc0a3ZypC3# zUkI=?phYo=93aSaxA1%)J6%zn%NDv|$0FE5`9X#I^D&Ebt;g!TbS-{!1VvpOcCYKI z?N(Rl_SqVHLaE_Gki^lIuZ#1qkv zWSuC>Fg8&1Bw4qHnIXis7heRgNA8}ZxP>n;gm@sHl!vr?9Q5Ulo*1H$7x|W{qcVRG zNR!t-4P!{BT~=RGLtWw55;-~VANfAOtPxE>uo0l)ve+Ffy0bk?hx*>{3=4z0-m)d^ z;g`v^CUSijbiM>$5Ed-eq0Vgtoz#!j&*7q=&pVN;LtR}_Y4$b;7X=4DDVHV!4`xIs zUg*cetuegNC%jerK77i^COt{-Pz|a# zaQkMtIrSKcV_{)QC9??ExRJ`GaXBFZnsO&F*!exQRAB#52UZCSOUv+68nT*$y0Fux zJb$>6Aql8~3wV^E-WxuvWB}GCYmBilykOc^tpRGs%~={2ma#m@K5*DaK}P-vP6W%L zjO|fBSD;{FL-sKS;rUl(b(yR8&iV#E`S^MDc3TzGS8`oG z!>;CU=hHjJTyA5Y^Q(`+nvM$P9jzkzZQ^AVmO23y7EGwXnraKgfw|u5@@GoR0cI^a z;wnO{wzOI7akPLpm zZWwDcC2d4eS<2pqU&Df3v)%CUJ%Ot}sC~YrSCoOTq}vkbwy^ zH53&i&OI}`XiQU*0}{~{lHLcYg*o#N8C{h)D5Vh;K2S6wX=wA&X($8qSI~(}=rK@O zgo?_&m5q`Mrz)IP2%+X41_8v;4D(zMnr(rvu&gDmWQroAJA|rkC6KCw%%vtbEko~- zwALDGjD*&M@5)leow&{BT#u4D%_DlOle@N3id}9t;@(apJ0>`G!J?YwxupCxJvsi& z)=pH&X6?&j7}Rxz?l~&8C|8-+bA3KD2-39Tt#Ce22uAA8r1!5Exy5sIePgcsI(W$5 znxuD*+*4J)S#Nze(Woo_u2c@2>x1^^@O4oeb0wMMhhHdUinV49XikcRJ-ICeBA%M* zb*k0p@Sf@p5@w8%=SS)|i;GI@s+?rQu&A7CZ%*XxpzJsxn=>Uj@3?P{Yj`15`J=>S zWCBuCQ=vpa2B}J?3zFt#ql%I`5*w^4TD&Kr1&L3ixDtMVBm|p6+hBPw!|n z7mjA@LTL(u;Akg`1pMKMWBdrGAd@X+f1NZ5Q6C?_K^7Ae>wLZB?hBecnthPXBcq+d z6T|49nZW@irH>^gba!`mtf`;-`g8%pw@9OjMY&v~ILRC=aM+o>kvPW1Ot_sA8%14H zhq6Gc&MNz7Uiq$Z(1-J~f(IELWYW`Z49{kTwF)I@SU+iEE~wAu#x1+{C`6%=50_ny z)jjn%IIO|`c}8f|+?FL&DV8s!Q!MMkdC*?5O89YtN|xV>2zAmqrLRoBLuW7^^2bZ% zfh3LZR@WlE8STT((P-p^1w8!u3`45zG!5kMs5>IeP(_SvBe`ROGI*(-o<{HT`KIKL z&S!JKX{a1`M3@$bA#%lPDQ-_A*4@2#xUnO+Z_3|C!zu_1wh+M<9TnbsOnPsU!& zJvSzd-1b#aozJ6~0?6n~8TBo*X^)#i*_2w9eKo_N@xf>PupY zt>n7vR~>!iHqO#KboI%5=`c4Qc{+16||y_qs& zz>;4xl42(5n@{01%NU*$!HX_S3-evs??^*`%zR(ZPfQ1c>QD`U z&O#<8MGlLgwXI)Zf9O?fZIbZV=GoRr;x5RUBWZiy zudVs=c!b5rd z$cX*eD8|xMwU3jymfbh%HiWGS7|H65?;95A=qDqNmqL3Dd}qCzTjj%9ESQ^Zyt#Kt zXGY-PA%^0}`)T zk*3|8q2;jazQi#D9}(G@7h9sa=L|HC^j_nDr6Z-g#X}1}N)@BxRYKJSn-^}E;^B1X ziiSvmt)l;;!!j5#;zP;>wf*2{H0-mv%+l6SMZ>QbmR+l-kz7|}a?&<60{o%GCz9Xg z#YqG#L{&E2?iB!8AB{8y!T)oeMWvM*S5?aBsG3i2c1K0d*)~&NYz49^b=2#IIM*bj z?UtzJ)zvUQR#znwwgXt6Lp;AdCk0ik#X};!`OW}k$HJ?O=n*o-yfWdvhtJc(&s844 za{FPp9RL4_2cV!FI`+qj#l)V#Jrq2DuKn?W@!9(@h5NICE?(%CQnGTr z?mT^|QE%5$tupL;@kagmo3pf&hg%rSS+j@D9NMbDSX*jJ9C7ht>i6x$v-Py0)kk>j z0(tW?f+d$NP&iA**cVFD=f{=8I?J42GZM45D`YDqj&Y2LxfnGZa6_R520vkZ(|O>R z7jCo2T!sp^@Cv?u!U<^&`M3pJcMqQ04@|-sVDS6gH9GB#37>AsWN~nCWPyxEqwU%= zF=fs33kJvnC+4sbDimf<_XQYdS6818-Q(S~O|S!ES;BMRj3*h|(-VLoc(mB&nEFM^ z4M@UzzS6bpK?Us#mM4Qw0i+i~BVqn8up~_FqX9Mj6?9^&%NZ#xEnJfwPVA+Jhewt1 z2w@oBYs7X2s*(IR4sZ zi$5jD@-4qSsfDtra0WLCDtW2ubUKzDK3c+k-`8_fMS}4Fw)oTug2IbUvjr_=LcOPM zT?LKxdfq1Q4taXwR{hJ$=UuY1bDm^X;H&nah|g)$TREnU7x@ zH$MWexh6*L?SvwAUK$EIVTxNIQww7%vHVs|yjb%^)J#Fu4T2?HAd*C7?X`UI84I#_ zcZv&necdMYLxibZ8LNP?LuCPHNeP&wEh9;6-LQn^pO++SeAk$0mXT|QU{RH|;THcB zvi^<X~fGdY61Basxj6#}FM* zplUwUR9wru%)!I`6U6qtQ~GunR=;I0jwX|FlY&fam_3>+O2)zx6P~5hx-DfAGGZy1Fzzf8p)p( zM-oc*8A@V&UbZ57oZEDRSIn-blxa?Sv zl`X_S9;JDd=G&*AUiVal3)2IA9Ubu#T-`CbMpJJSj;jQ-5gm%2YzLUYZUCsRhb`VZyZ@iV)N+R1O z?ms-AZU3%76pbc!*P5E;)sJiTD&$<=yK#-({prvvVXf&uM7hT+MGnC zLzQ0ny*A_X#u4mad!A5MzXFptpaS?^aiV?)XP88fH!!FZTYka)m8NGD z!dI!2oVm5q5W<8MTI~Ee!b1n$Lm5;GyyKKV1Yc~8(R)bCecV1#jmyy}O+sfFA=3L)87i$W4VtRTt%ME^>s1*mP5p?ns7%y= za-uI%0NHT?DVUe%1(2O1baTW}@ldcQd1z>8IO40_{x7KIbD%)x_&KTAcf>_duC6iL z#4HoyT8#!tpZ z({<|8)+#RogX(+tL4W+-{_9sHEd-|8eo?zvoQNT;o(JruXTujm=Cfa5_*V~qvA#QK z_n8?=<-!8NEgX;R(qyeQ!}!X0e531Jd;NiCk@`%se#ZXl%BBJ;&o} ziWHmY<||1dl?AZ_TTG+u&TR@_HMU2%@7Oo5X~$XQGb)5Glt2RygY??g=PQab?XHk?eZknXXd1?M>sBRUkpQakM#8WFmB%V!J@SsnTAY*Npf)F=1+KOI>4q(kcrwnwQHVS)?QZKF~`dy)r9T zq5E6=o&3)qgi?KNNOhdOv#2J4tnekyh8C2Pf(JG_ zdJNE%F&ogx6lOL2MyTw!kE`E@KcUI_u4e%{F+n@IcR6nn45jM44Bxptm^1nDrILrq z6 z=4Qb9x`AW?>(HPFVzFe>i&c$PC|DecWYxyFWbZntU@lMr2;U05fj-^*yi=#ujJ0O^ z+7*T0R=_-vH@x`Q`)m&PU0gh^?Q=vExtdz{A_Z=+y_(JI$-&5IHGkW8u>BO))c#UM z^b@Bj2r3{y+7MMs_69PYF=et&Sp>1=&REJ&Hyk6O@iP%6k8kKyDUXD2-gvZ98 z)9H zx9Me=y9W_Icm9)V7}TA}%zlU6eCom}sF}61-Yql%OKth(++ph=PL}O<^WAkypJaF&8qqf`Y>G z;o-1`4YCgC$S*puQc_sbdMuW#X_UBAT9oGG|+*semgwzejf zfkOGC+)#Pun+b?!OMQ~x50gR()dhmovHoJK3#J>!f;p?%1Wd>M&k`dKUS3{}R%iJd zsjp$+aF$!7*}|T>6~}Bb&9o^YN;?r0WFL%1Zm?X0^|OeY4xQZH_^3bR*lSv>b%D3H z(fenIoay^tM*?$3MDcweBiQ6SL`+*1IVvizy>PnbWOY5(RgDtS35NqOr!=Ap;czI# z$kRHYx4O(#iOxr})J(&69+-FEF$SwUDcTYe8)@Bz- z@ePHe_vdNuJoGafRQR34C#k6ZmA^WnErNL%E8y7pS1ncvbeTQEfi$J;P5aLY2U_y6)SjhH`v zSBb`7RhuhEYEVF>?gITYgKO2A_+H998Vvjos10O=q^#TBbv4=bkrG)>q4H|Jb)<)t zi0yR)kRdzjb{k{Z(aN$dhD8m0XbQL_6D)?wD`hUSf9dR4{NVx_z8le}576C9; zZ-p?>X{Si#<#_zVJV#g$8*sNO77f|AQ^NN(6Z`6T(ssd_*WWsu$OUk(ZY2s1pLJB z?do~067vq1GR$7*B)Xj$PJL9~Y9L&gm6to81RrN)rnowMK)l0rt7FrDve+VqF6{eU9%j>e?kB5Oo4vn8cc1iS9rdjGsT ze6$s)V0`=HYd%g$P8^7~k^D6G2={%?r{4Q~QOB2;0gcGQ<*@9Qvwoz)=OtPvH*v2H z>t0*Nts@oyv8R}%q@a!tv4v&)9@py4Vuu&eTi5d^DAebRQxFgkNnB10r<>nGK~7rz zpqecA;6?+r0+-ha3koRi;YCG7xjlZyp`d|!y5$EGTU%Rf4jbZJHx+;v(s zP+8GGldpJb%K(m#@Ks?98egO;i`d{$i@Qmkew5QqcQd@ij!lJAG(+C?q<-ndm8Hb6 z`Rm+;41PDqA)h#5lsOkX8Mw|O$&xN_bwg6%Z6to1BSyj_=2^>;jD zpZP=1${%gkKr|fkvV0N=ZTw&uBJtwT%m<21u0#qO2Zbf*80Af_ue`jGZ6carSQzg} zmi;t$4H^C?n3m{wUFB;mc|0zkzObd=Ir%0E>4B6-QKUo6^>>(I$1iJ09qb|$yf1&g zcri(2e3M~muCpuW8&@JPjD}P0J4JGTC;d%6O5~igyUAAzmVa*6lXD)GkS^4!t!J-y~od85!Sn6c79&Xj*wH-1muk2p}hSm+5bsNO@|%x<1O z2EjqlXkHFXq`ajFH%N-V)>PXPhS`(22WyeWe%CpC6fV5?38#&J8h%?GFvq?ri-D1E z*WkZvFHJ___dfmfj*d1wnN$xtfjEcBj0UQz`4Acg@ zWmHNE-0a5T?(Ub_V4`G8#@W#~e+nXQ@i5%3=P);?ZP#VRhmz#C(=#*7G0~H0(G4V5 zSa|FfI;zpp(bRIC&NaTR?M>H1#A0_uPo6w^c$oiO6ZM}~1^emGoiT**{3D?Rwu#x0 zUE?X?V8+~z2;vb##@@-HAVWYv_XYeUlTJb35j!HtyIRb@0@rn)-ZX4zy_7mn-jL=& zSlu$dmHunmU~~U9V?Gjs2O?Mh{7jAEcB*x|Db=KkoJm;~i*B@rY1R7H&j1z=b~`l6 zmz);SA5^ATOf=~-g_CkqrRw@uX3nrQCDQ3h5WkviP&Wx*rx0wNC_m(5>MDgAcjb8l z;J(HJ>rV%idi+N6Sc23a&jwMcY?2J8do{0ZKQrJg)hbxs&6l+H)LxQeT5{1g`=N#XR(@h3(F%pv2~YG$FR6=edtA~#cPDbvYM_Z6Yst@ zdEY?%v!2mNUhCW8S=ClA8xDKBwi1B8{UBW&__pvI#e~;{;sZgO&vB4guiFlVfp{W( zn;J%6D;rg%-Bw3+Qk&wUKyxD696G1v4DD)>W%U{0 zyl<8hDQg8CVM?tdGF!s4z4kkI3AQY-HPq%u-*C3y>r;6q*Y&SHU`JEaODoX-tRkds z+DOa@1tZ;91mk>$F}2F1M|?&UC4pTS2G{(- z+Hfcdzs+lbJQiX1obnADeOC4HZ=As23NZ#)pc)r0uw{EVzIS7*vcEz|J)Lb$N7HQH zj9)=Id8zX~%R{Acy;XXmwS$%zB)&UHgu6Yp z_aEIymZ$W|+OV1DGyYGXTc@tkCX9U4U23&z?{K|A*=5zRY)67~g;l(#4o_=}P3=k3 z?Fp0}&9-D{z0x8KT^9`4@4xde=EUF*)1}e14FAA4mTedw&^JW!L@z!-60!-Q5Um2}$V&X(gq* zOQgFuodN;^0wPKyY#NjfDQS?D?go)~*4FF3|K9Un?}z96Gov$%<1pvB*0I)k#4paD z1}+-&|40zuo+x!$>A{^24#y&2J{}U||DLh20>r#&{jUz?zGm{PPNWIAn8r|vkO9}C zn|YH0u4-obl=QA=NNw%yBOf){vV^Rji^*s5mCohCZ4nwh_WSBoMSmi}Q&CVCjl5GN zCQSu;UMD-#_&^GVXPwyMd}HJ;Fu|30#j45qazo8Es}AbuAKkX|eK>VT+(az~7iXx} z69wEy;!Ua@t&5Aq0a8FQ>Di2wxjDlcFc}8gxpnr@733x!Kn(w}Y%JL-ck?HtHa@5C zoC8?)-|I&590rdf1uPUfI)N(HLVBCvH{)pztP=@;m$}?^$t%~3DrKWAGzPe_g>WqM z@|Pd)Uzh~M!=O2Qnsk}mF-W0e-cfJl%9g*r`&H-0PoevbS!&+?LxSor;!L@^i8KSb za9dpz(dNI>M?Ykg8}jCKnCw zfcy7znjcIX>WqD{No3~u{w38<8|QH4!4smdf!bBA_M?_Q$kJ)Q#xt=iRq@lZ8hx?j zd4lB1DhOB-=y|!{DVml)jt|{L##<-OsM`_rr_4Mzlnlz^$k$j>V?eDE3lezIWr+Ev z&H$G0xJf}WSNk+&mLdC<^7A*{x6L7}o$U!iici`t3>psa0MK&#wBq@J?9I!k@_4HF zz8zh(*`FvQ$`*$=^?F_jBKHyYLZve*SQ74YxwjQc1uI`u@mP}I@O$J)bGlkXQby7b z{^t46Amk&BA%y|Y#Ho>eelL%d%fy2M|hDo~ieHpI85 z7JPxi?<8$J(9ln0is&avTjp6SMP)vag;f87@e_;HNFD}>fM>a=;I{%5XeS2SkCAry zYWo@qbRLc1iHyK}mwfg*k8?Ed^VzUtVyZrt!`kfwS{Zd%lb=abU%A-rS*uw(=Oz*! zb6mWp;>Rhd7+o9vNZqQpem!2<5L3Af`Fq=CXbJ~&b>#8uJLn9)mPJ!)aOAPvzPfN}w?IKgHUWT5`4pB!{gvy>?Q+Nwh-1Ad z<}&?yI^yWg;1V2T0Cpxt!_)C6fe=OJCoklg3h`Gn3aOD0m?53e38_coJVAYH2#AKx z7Y8PAA}E+NbOD3`4iV8>6(vXvr2wqcq5-Ij!g z!Hj7Kk8G0hN)bLp>zdP;7dx{99I(edCtr`ybfh}{xh z2)^h}D)xtOB)4-v&jz}Sbe(uZty(#L5y|d8K4Z?y7V(NxH;XqLT>}_XHpDQD<{0jG z-}0V@VajKH?e3f-kgq%4;pPG|$z!M_{v0x;o@;an?~yLg_u~P@?y(X*(TB$`Hv&Pr zKUENEYk0W&%YGpL0`xTp+MvK~D9>)PO#O)LtrN+vf@;VlmjYZ`>)U9gkQ-3YlsabN z2Opj6XMo!wLLuTkR)~7I>I)LHkylRz8Wrn>rG>A&`T=$*aJ5y;rt^fu7<@ z4MyOAjb}@aHyKU?Q8h;$`S_o^aY^~)= ziN5;aV7vC=kFmLp`8?DpVtFSOs>2o1`K?-l%rm1DlQ-lY5MVQ4p{f^2ZxNogT$@?)K-`j~&Ol3C2 zB-uk=)YL9rGoK8Foy|S#FZdme?eE(L8xKlhT(y7-T(mGje4l3rhKbNB4fB%Rb{h z2Kf-tJu=q8cE#t^Y+AmD{1rhZH_4%hXt$(_XQ4<<>48hq%nq+kXDEC#oE~~4VMX(HiAqIgt`HzlBe9t54W1TX{z35Vl?}xc~ zb60UBBdHXLCZ0;TI8>1x?!5d?^C`jMAj7Dyc@@@T0M2o;1tUmxB?F1mBC6h5V=ydN z;g<+ipnWy+L4OmGdFH5`=TMr+rTkQo*j>wB`*7@pHxX4#xVWYrLXVi3D-tA4^TIf1 zjy^Y(Q)0&4UT3C2K9vRGrrDd?gGx3X_;yRCa+32V&!7oc!KWM{3d_rTwq4+|XovXo!FeLzz z+-x2G#{u_`Iz~d^GeldsKFa%ak_UkI|79I;&1i_=XR}jMPX`(8;xTxD@_3rreF%7f zd2T%Wh;sbj4^SR&9$0((Efz(m>5%ps7vL z&g8vGNI%+BWhe?vIni|R>Zos!`e9k^XHwb)r6T@E1obr#Uc-SmM7&QdB;+ef6;1l_ zJmr4d==?{k;0&z@4IQ0f=h&nu?hZ2EW0EEy>kfT@7`~v$HGU^m5z${d@N7jcq_?c& z0m97FtYxcJe`)b)VA|x*Q?!HrF9Hr1WC*-)9j5YFeTwQd#7Kd_K~@Et1NfUGQ<0se zBYkHQ_W>RPj}ih65UUv*bx7n99sj)f>_+V19&&IvLyUN+rU_o^DrQg=vy zSz_Qh4(FBOQ8v>jMux>2Bx_YeAs+kmc-&mb&#A!5dPBwEPiZJ5ZBO!VPbv22DR1N5 zs(s{xq^ohO?f|6sBs@a&i8~1xfV_&eD#9%)PGAJ;aH=p;QYVryf(0NUBVFZ--}#?# z`?Hof9)BLvh5w%Dvq#8yqK`D}S}P-Pi?u@Q~LypF%4C zEM+B9*7!eR^Iwsa-#<*@so?|Bm8mKdC?NtmLrLI4Du^Pc-%%vJ%ASmL6?12|cj#Wq zT;wCf>URQCLs8c;fmJ}b_{!dRn)3gk>;Fx14jBK0r4d<;fGry`o(od;c#^m=E?7!* zcJ>_znsnry-3L#m(j$@V!F$^$a02?_pQluB>sI=g_ZCOYrpaYu0b~y(WigHrpa?{5 z>>iKQ6av3uJb2PdX%Nc6jvs9;nf&mD-f`%SxEHN_YKzzhS1Q^vG5zt+CjTwG^SKos zmH=XY+x2<=&$04ELug5BGN+lsY^4FeE!xDKxhW9*HjH~g$_E&Kep~dC`M>ENedhlY zNVx2wOo8`OI{I{5xVUI-RTV|7GPC zfgB4wtXl;A?f(cxk%M=L`#W{!O|D zK}B2{Nb2A&Vk0)H!cVxNWZ*s{2PrCFI|u4;_LV8gG#UquxZY8)gfaeA@Shkl6`1}v z0jmS$KQXdEAqLBUf3B`#!8_jYEUGWt#Is)9@Fh9_f3Q6CR}X-VtHA#OAM z#g+Ic;DYWj|BemR1C*fO`c()Vw4cwD(lC)Smx#du^XH1$2_?qKg?N3TsX+6W_;a&x zW$hsS+nHthb7r05sP%rY!Hq0<#{hEmGvbAJ!oFxm+Fo4L;#-xVob!$MX)4_|18PxPXRIJz0CjI)PDyMuvq!M+eNB( ze*IpFc^R-0`()U#u3E4XzCKq|-utv*x3epa6@f4w{6_Hgp_ummmz6lM`Lo+ORI+^8 zzjr$v?6&`-lpQG87?FQA21GP*dyfiuRQMg}`Ng;b?e7Qr=VzRvKM@^tiBz!w|F=a0 zqzl8NvO{A#-%M~*)pp01o>PG>+9$<;b<~0_0+Lg;-HD}t(`^2;BRNceu9g39!T#SY z7*J%QL%Db9) zk@|h^S{_;2|JMiLuMg1$<)3r6fK}@B5{ihnK*9`5LNZMR7yMIpSfplRU^%!Jes1+t z&dtk$KyjdNJG)^0bM#MdJH>6K;H2^9zk!B8Yup(Qul0a;c`F!BhTieh%ktCi4g1!^Y zU27`>ei#LccAjS8fQlp^F>?61nZx6>KeebS{@ykMaA<39c{b_L;9{>u&Y+m}nJEha zylkcF;$8@<@VK;IWN=6V3q#8+mVoOf6;-%cWpA3O8(x7*;_#pU`S;3{fsa&F5zx~D zl^#%ZSz0&-LezeyfI@;v8yTXnO`-Up%+NnHBw~MYDTKKvjRX0`nmoGnx>S_a(BT#7 z!BgK!YBT$JPpnLszD#MxYqebCKAo+~culFG(0DA8OhrU4Rq&P%)-v13{vEW3xTo()M=5omTbJ}A~>_6tn^aqfk zY@1dVXgfY)qytLX;_@j9&NJ%MzV*QHN5*k7nS;x{$?^p%uW>A*&C%2S8)rutGl%l7 z7YVubhEmJ(wTma`AZ=!wVW=jj?#Ymq-Xy%Au1!0YRrz{qg)=`29Aq_%UgdwGMvaG7 z+sKwCOyQOkdDuXfGdC zn5DyMcTu!E9PAADP}C|n#8NL5kbVtRqEjrMTb;kW?n^b5p;2ehe$M{0zQrx)>a1nt zeRRcYpbZ{f10q`G)YX$uy)V@H8T@g815L3A%btjR3%d8u30Lb!*7f%Oxgt_~ano(F zR>L+MPhOY$j7}bSHRkOREmfXS`?XSyYEvbz`b}NA`A&4T=tx103LzrwqgXe&JXK*# z$2#N`gat@=^^e|lTypLCRP~NKBT@CdeMU0D)L1A0gh0~`lqwbCVyRp z;OkF93qDJj7!1|>xc6+@pkdLF^|lOlEr+O4LJ`=CTVdVJEttrOe_%q1pG!K^XJEFUtZML@sG@_Kh3hlyb42 z6JU-7Tq*dxPd1jS`DpDoW@^~n_vd#x4M1OQq~6sk;*ic1NPdxs`qqu|PzPLbJ+HQ2 z;)#ta5P5(n+)We&aFh>FXKI~t+FA8r_L1?TmpzWYFOS9iuXJX%%M2QEC@5k8szTAF zt2dds^5y1JT`Qm^!e!EiRG^wO??}Fb{4I4y-9$$T{{kpVt$f-l$_7ji6VOZwm&RKb z;k6xOc|Z{bg(l=d?_rVUzF6&Jd0t&K$1SYex)lP?QV4Ldvqc^xZ2X!fiZSw3gO$0q zOI}nxL&JuRHAb^e+7QJV)j`Mw13V3y)Q2zn+Zuh=eolBri_=|=JX>+(#!bxVpIprK z6nNaoD;fM_cGr2|h|g?!S&G~7G9iQIHp9orY#K5qWBd|0A1$jI)`f7tvFroe4oq;w z$p2A_|C4|?$Aim(lQrSuFrq#Ea?-|Owuxq?KNGRmQEuv#j`sOTwYrw?kphBi$h=K6 zZg<=Q?*e%}iw+HAS3Jam;e*nr7o9REo2}hymq8g;Q5h=2&#rvV5T3*41EEl2BNz0g zZq)_C_MaF_BnRV$-xA^;k11r9%74bdqD&>zj$ zxkyo)yFglw2#v0z%9mm({)|47kwVpgmxDu<{9zN5LXx!qsiQ%+RgPacFh$ivQGBcZ z^2lRz$Mfc@PC62Vn`pq63QibmJM& zn_B5fybB1D?LY;tx>c3_>i`Z_l)jhXW4}ut(W?U~{RZ)hrSypwlkXf1&=w zK9TmmHew`DaLWVw9Y>0%U;^G>{z7xKgOAcw5uuWXEzV=!3&j*+a=y}W?y<7YB^odp zqv@|wq5ob4LW>f#;$d+wJXL*OK*Mpl#KrAD(8Au~E{8g`{Jh8bBqhP_Aj2l$hhegb={A{(P~81W-e;h5IIvGk3)`5j zEjNhA{fMbLQQoIv1us2V=%|E!p3rca9y$8*JG{5o9eq-N=vsb6W&h5DSaZD{dCF_& zqy5T-zoz;p4Xu4gPCaJkJFfiMf$;J2sK2i0i8fn-ylMSHITb#f;r~Bpo+jusBe>n+ zs;2kFe?I9~TNzI~9F6aE2vp8~iB5m((E-pL$f+EqbnOq{V9Q+>+O5>!a1N%Qr;|oR z7!4nlXld}M)W&E#(1Bj3MlICw24L~~ckf9DNhYYji`v}BaYdd9!=sC=cxccdkB}@n zKf>$Ki%S~bjTCfyy&sUy=Riipu46oz>b^4-ge`g@t_49-06ApMEanogOjCYJH`R|4IKADvs}U5@S3{pSf>%6OPt`gkZR z^J9I#P$E|pX?|XD3Jx5 z{v6F$9BsQe@AG3HZ|me*Y)*0~-lnI|F}o-*m~ubBQ@QfdbHqv%F?&JKn|VK{=0Vho z3ekm3{m5#|`h^>2PQ_gyYV{>nXer};f~WjzcG?$V@5Gb)ywn=)`51;_A1gedT#a6n z1#}bLz;t$U)15)m(^aS92~o__T%U1A%A8L9HHC`J>}zvRLA0orB&wVmNYwBcM@sVL z5v9Q`pPg6>nbQn$xypwflF{-inWtQ3Ms|Lh-P!q*&P!c>UcbEes!^5gHc#`)&c08S zCrB~!=bTeChTHVVoBjIIU+4ept*_{)^^ig~`-f`(h&;t)$(ew%wG|@bO9-DOR(aU| z?e`F6pNES_11LR(UaSu^1?WYcw8s+oLyH_MY3=nY@J^{lx|ZhKQO)}kD9YEAqeXY; zKlk_U&Zf!8eQ)wAbnyDNRIKTFb`_>)C?}KR0|6GV>$QAzp5=7!u>eWv_c zql;+(<}f)@)6JLZ+$@LcXAT*_?>r@sACQn7tF-ju{j?z|4TVTOG`ip2x2kE;06_QZ zs>f8c_m?#Do{YyFWr%?iQ@jn0LN-y{7!TffRTAEDW5-p~vxIH|J8AEfDyTm4}0}?GNU`hjPq_KR{-6OKwi^^Ddhyo*;HA`ZO|iSBjb1Oa!P`f?CeLLNzZy0Oj|`) zo(@}NR!J_SycHkhnesY`iqZRLS|rmjO1%Gegc-wG7e8%EC@H+7d#v0x&ok)cEDzUU zFXyHSEjf(}rUyf(7=0hb`oDibrZy6*qRNA(4k+&h}@R2t6%h2{tSKEHQygKS)MA92rO!95;*Gng=U;;{}`A2z-f7s z$=%c)Fk+hW*L8?3RZ{1w4JFz>Siv1Cbx5r}Cvn zh-v>0c{h*DpwfdK7|Ycms858|y+v`*+P*Q!e9)HSb;3G)Cl`2^x$KAI1%6}nz$N1N zvU|l^DUGyV0ijpudeq4WJlc9DM;t2JP<{-%pwMA+0!J?7$^GU7^8^l8)|G*?suM@& zm9JRS*t9wV&AD${o-|HsJBfDKl@=xJ3|60n;%}6ZInBLF3NG6MXGGmr+GBoE#n>^*4)}U46 z&tOWCFZME-s=Cc1=z|IzvQxa7n@QjgBV~*G(M~Rg&^S9g>eF6G+4mD*Z@O>&LxpHpkZgg@jxF}(5=>LPWVQKewlI5jUt z5r-uBgoYO120-*%)j98W93R9p9YhX?A}#kM@sZxVp3*lIx?Cy~mqd*WH7I@@N|IN{ zBnyyzwC*<9Mu0wXIK}lLY?exxqUKpB1~wj+HzdW%XY(wl$=4{Ilju-F4m<3zefpJ3`L= zbRU`_eD02|LFbLFIt4hSOtBoXzU58nS> zQY3?dInE+$iW2x!fwM%#$`>Kf4Ba~(wEE13>iLA`@L);mXIR73P%{t{wM^T%RQbrU zerj^LjmP+;=XyEz;mX!A*^P*5PUIv5P6!gHEQ5h6cQ087Vp)HyM9IuD`|WCf+A8re zYxITbP2+ycqv)8ES-WcM5yZB^SgLBq{DSm{e5k%BBXV%PX@YOphuzeC;QQvGy4v>& zm(=F@Ck%A-Hc-7Ja+*j2nQ1A{G#tsMBC4`253MrzNy<`>GSvq~x@mEgij;QWO!T^9 zJo3V%+f7X%;HD5&ee#_mGPZbD4 zZ>zTGc9y~C^qs1L3hwAR_(bi$&t!@Z?GD?NvbB*6dAa84!sXSAd&TWn-j8gR2%D|7 z!PWY)v@!rk3l)Z!c%9{^QA!P zkzS875)flkDf$W~-fXKue;izmBc`#Fz|k?1_k`-|z(r6qMOZG)Cqja)(sP?s zH&sLxEuJphbZqBtk-=l~7gjDJAKnF60*xtD_ebGlDYNgPUDDRcQLh$q9QJ-i3>Zzq z$hhkBU&Xo|NO`@(8JQ@dG?(~Kcf-43;vT&re#fV3;2~V9+*u9bO422O%owW7W~}ZI zCVPY%d234lcp?b-wthk{ zJ;KG2#0IgnrAsP!PCoYboMl0H&R)gj)a$=BBIe74MhicYM;N}j(g-&o_?xKneuSw zLXko{w*LG8&CrHVA(gphM~tr)3(wjRbBEF|U^e&=1G}$?jIqjQ7Ehy6o(VR@GVT&C z_|<#l#!Xq@MFHOj+Mb;jp1i)F8v~nqcz;P|`Ks;y(erEQ!}E-}bwv)`JYm|sqNA?p z@(c~iy{vrJgdzi0p{}z>%7q^;L*GaA8Lao{$z_vhJa;jy-!-ZxGk$UXoYTj) zwU_}+1~u|b*#{-Ede{CWVk(?YI|R*A^}f}5?WFLRseqf)pLwo+$9rZ?BbFJu1l$+R zPdC)WTHn&eqBG>#6^E0xOaDEU5mg40);hL?x)%>9==}v^YRK(t4K&0XUJgd{Ik1O~ zvJPId!+MHz{OScSx}Bo)HC|V*{n{}6UQZbGu}14T!6TcjHA1>ujB*^-qv_;z7G1~4 zhF9yQ+jh3|?1pWlKu4->^|Ai9%W~KqUDys?3rU4sp`JiF-nVzyiIZ~o=e`^frWI`b zxIFEinO{L0DRI%l7$PHjg|v(XMAQVfb{?S#FoMzEN;QFOlK2U#v>XjBQNa2@CNps* z9UYyyRF!#e@Rtx2DfXv=kEL5c0&mh8MW_R_e|^^2#h6(Dmn#GPV23tJ@cjFea^dp--CT05f$U**)B%qKtv;oL$86U(!LF% zDLE5u;j{hlgajP8oC=syeERUwpwS&?S$LZsm_=9yg+}2cHo>KAfhsv`&))Q#%Uz-a zqul?y>XGm=&kbaM%wt##c(p(6*!RDPT(X$xn5H$)8XRm&DNA9{8rH5WxWSk6FLTePUxckZ`1v!3|M?=`+H%AB#UtQ?+TKRzQ)Bk~xNo7UI%^dJJh zoRIc8++JyI8d_o5tZy)S!MBmRRMvWJ&>vMWtPcKU_nz%1IwYhfH zBk$7cuWiLUJCMJoh-K=@t$rX`kRU-_-s&z#^L8Pa!O9x_#P)RAu1wzH7lzvvj{|?4 z5ocwVV0G&Br--QY6Ge7j$|B>9)M&P2nM(dW2hD-^x4sj~ zLm`ZhJ!YezsH0k5ad%?KblVb`BW<3k{)kA7u;BXg<*-71)=+BJ=bL(^V?;cq2V#CV z)uVO02>~FU`hs2U#<7F;ig!Ck@H&(68=YQifllQmUD<+XOvX4jP-oJn?I0MpElSpQHjN_VqR3*c(j<$>UBNNhP$Ef&!z8{|+m&1q(zhKvl`^@Y zPR5~n)nTeS%R@>b(*3sg^*2~gU5Vm zz_}7B$M*;gpqEW+XMml2pQm4e=MdC^Z)~K}Ob)nFD6|N55Rn5xs)?Ia%A&lQng$x1 zWJz%oKk0Y=+uSGT@OpRn+2L@Fzr?{*2_Mm{M%~9e?@6yIkG_?`QK(gr5H_7!T_?e@ z_IlpcSTEjkjqs*gm9s2QX%_xwbt%6-rFT%rhk6Hx7RTDOfU~XSjmtSQQcbyIY0j=b z{GevxxVDbTV=pq5j{NtDGgqUEz^uFGnIq%u0H@PCns0^jrfd(3=FCLhDO;I}$1oU9 zq8H;}jJU5)epo}=z%A_7$dM~!)L$M1FFFnpH`QVCBxD*rj@Fn2LtxlUA(HcIJ}0Ez zN_o!)h_6Q~Z6+0cWFKsdH`g108y)B}*^H*?aOAfUA{DVoQdD)x)wUX)vQ z#FX3VO0xxpJ{lsK-oB>Ik+NDQRWA}kjN}NoMaf^^ueFXY&h+1XlB+l>S(YRtcoSk` z$LTSr@Y)D9i!a6@%F|KlhKx{Nx?3y%yPzci9{vaVfp_o#jOp79f2rYg2up*rEC%(DMc|Jt*^tNLL@9K|v(F!n#mBK1p(_XTE_AHES z^YMdWkk{(hd}vX~FS)4JMyOv6$1`L=M{BE+(Zoq&L8U(bZjxMXyBfoC@C5y;ERv^< zTE=wyk}N|m%9GCmMIV475%^bjIMM3p;P>oDnyzGV9#pUxl}-zyS;Ag;06qWewxca+ zMn#-Q&iAkp=%KaGqC=6(0B1yT2=Aj1uu73xY6}}L9ewmCZ=ge1qI@S4O;jaYxheyK z`uoSZxvNi>1Kds@-j>U=BVh~?g6w({rLn0H?hB6u27I0|Q}wRzeX*e){WsUY9AM^` zV7#VQl5VptPa8Nawjjy=7M3=`?*fR?7eCi?1|;H|8tU{~>%~!s;SuV5hvo5?%P==N zjN!9Bu@`GZtp1#OvVwYbwS$c&L&&~7rgtBH=kyY)h~s!Ic9$tYlTrbnu_BIp0c>vb zF2mQzl850pm3Qf_GW0#&9iAfj&1O>h7n_GW24uld+LN-_Vz z=BJzT%li0i*E{VsqGFy`V}<^-c$;dqcka1OFnz_OP$!fZFrBQJl(ZLlsXK8sIh>JU zO`klcHTLVm$zII#X>9DC0jXQRMQ!Gwp|J)Mo|y82*%{8;K7tb9NA=-c|Ch58)V|}; z@{8J6QbRq)WGlu59MhEDWTjS2U4~)D6bSSHV`hRiPWtX1D#QF0-{a*Vir zZ@i=EGscm!?9G0T*CQcfOb;K&%(prwF*2dwZ##>0qIHWRrg|EqVWB~TOR2~E?S3Kc z-?8imVwsK=5zTdT^ z+ZvLi;mK|-3Y(TeNMw~l4M;Bq&OLrk);qN7L?LeFi<=ZEUD z?~e2leA+m?{dDdOWLR~s^uFgjs--8AskME5cdj8*-!`5KOc{73daD&I5*~THh<=IS zB^4wseqTsP8F3JfDHUW3bz#6!Mg&W(qs<0G@;smOczcdWyVp6{B#T`+rP=K5b{wn& z^t2BLh4xAMRD8HYBO^_N;M^-(Bq`008i}(=b$ahcuG)M;r`*NuHRUdrbr(&9z=IPMTgt}7uo#28IwL@8{d?Fo*h<9~UtNSjQ?WBJt-{gB$ zYIw$-r4>NiqzXMx5eSWV^@$<+4WyRVH$P2F7VI)O zf40bZRhMMXmTEy|j(Vf-o9rKM*BuX6*QT@P7Okn9F2$dYl@91a(3urTsF``N@nqu` zEO)!Lf7~W2=#6_Kw>PHoB@HmeI-lm0_hNi$FYATiX3Vs7BfipY^$VwuC%%;NZx&y^ z8vn&I@7}=v#NMOAMgN&*NoW0OT7M<)suGSpNFJawoRf}dyzt(r)%{iR@|YAD z!?(BLLs?q2`|~!Yw|F&QwYzE{6NSq2(L7X(qsl- z>+ki{LB0b_A9g$&y$yXoI%vKX9r?Jc_A$;xb?BrY_v- zQ`RA!3D1JfiYo`gPya@8UUi~h+1{17mZKVNqTOC9 z!thSMAYlAX2$uo`)D_z7RnNm1v{#x!bG>4o2gaN4WL79SjqiZ;Gz`xCgP@*Z^tB~- zfWi>o4AhJredO@F=;KD9MY;sU<4VUjoAe=o6=4R%0INVpM_6L>8^=U+>-Cu)Mm*kS z;eAqWq~rC>rm^S)z#ycRKY9 zZr)VFjwn;nV#f+dzq;Vr|wG2(6}sZ-6gOS zQYPB{dfi&wpm}u`qJ6NNVlY)PxgsGEN}WE@x1_xcswils?Tl4rN!81@G3mTYzv!6J zyMaXa!88ZC#b8u&DI)}vLIaode40ml$uWx&p=*3ZPP zi}opb^h!qetNiB+lpsNpewFw7T^f;`O~6k(j&P-^hxrS3YN&VTAxkVD`VTg)sJ;HF z=ces?b5)%3p0y)B+^$ahTqI7{0JAN3{2yk<1u=-_CA6SWn&a_BzYCucFAVvBp%2iL zw~_2^C;XZpOFz%~6xN5zo_@;pa2kSUlpA=3GG$nySH26I()w|3q&Vdnhhs>C#~2lV zfi{;}H15-UaX7ooqR9lgJYNWT$EHMWSagF${hWZ1wNSe@o#&9jpVW<@I896D8v*bV z{z`g%3Wy;Al)7ipNO?+dOkN)^Cp}sn)1pF9XpsZR6-aoj6G{XWQ`vF$Zs!E!D1|J~ z$d=+h2cNCnw^Wo$jj9J7hix1VNF+-Ak+RD zU7l%Y6bYYwx(t~d;NZ!blTc|RJv3^G@jf;5O)n?rM^%MLk}$-9lpa&fH0_|QA+E_zH;F%#U%_9S2kccPE5MGZCYBGSv#Np zxab}$5ymGyE%2@Opq8d_dNxXY{YB!?+1%2O0X@>G*4HXXX8sai+cBb_K{gEavU3_% zgR!{%F!fh&6s-B1ebvyg-cCiBa&m*a9+D;-J zcKb@n4g`jBaYHs31EfKE-ML(|2d(u?65l|#`>lT%h01ZjS-+*yb6@#F()m)%=i^_k zk`0~Y29b^egQNbV1%OAF-)!ZuzEoT^>Keq(FBiTt#nbXynUa-8f0m3f;*27aUh1Rt z)b;x8(ad~2uh8I+(i=q!jh3$;D%Q@s&XP#cqqlAo+ny=bt2}a9UZ&Jlee-mhtI)_o z%56rmp!UnE7{Bye{j)jj?NOOdt=;hf&i_lGX%KGdK&2-{x;)NA z=?BM_+Lozz4n`yOnY}`J&`jYL%%c{(>r!Sq9(C!_+KC@YYvXUF534VJ{xbD^(6UOc za=tGtF+RgKavkDp{Zq?*yHKz>;5H--+o5=jz8vA20x}j z&71kTV6*Q1#};`^hXYdeXhdlJ%jT6hkv@>WR^`1T%Di%aewHAzR}kqEvh(1SGi z{o?zm`N(VPg;n(ZnPk26*Hi6CAc>ARpZ8I1*vsKEyZ5y4Ro53g zuyEoZVUyA3ks-VOOB@Ya|6omaRuPw;vPe`IEn?aLzt%sqfUn zn27F~K#a7^;o$O_w0{18-+xbYJ}+a$_5NaiWg%J(yG`;^PGl-a)y4}kubcZX%%7NO zYtRTQtl07(Ea4_PGpJQqm$>6=21yr=DOCDB#fWyl;&v4azcR_7U=zoeN#@;3aTij%@M`71}%TgZQG1t*A(^ru(#$xYG1EmFqv=g z;i=O5)~|Ua0BSUoA#PmqN_?@jMX}Pdc2n^aHW^_TG37!7yRr`m*zJAW+}F>@JzE<$_hFmK{d96==Af>eQ%rrN4Erbw`<+|2 z;-s;a;}iB6@#IJk9^tA&E@6h zH)H^#c2WCuy(krN|1B8Aa6g5zh4!@dNceC|M%tJL!wsMg0ic&2IIO~DE|*H#HT3e5 zjG$a&d}PT?%91U<9RAqat6L80p$=0O2x$0B8YB0Isu?4!NpK^OY$wYgwN9*BB_#g8 zcKKZu@7f~vFE$7fzcL$Z02&;v<|wKe}zv#I&h?~s29LjG{NM>)NErNUleJv{8d zg4wK9ABwqLeEHz{Ja@UJbc8pu8hd~@0J)SvZj3r&R=eT#ylxr5jao|hM29((9xlX# zzCv79eOMIrS3Y7*VI%JoyW4w)K8z5@IloYd4~JPU6Hnc{`ZF;wuoQgLz%pvWq+-bJ zH?pVn`7OApFCm;sw%KeAJdogF9)$|ueqHu?Z`qu&u8>fFAEZP$obO;sPbNXY1X1bv zOA;w&NB(u{g>qKg)IQr5V&ak2hnIebU4CO6Y4}d#JrTizM)#`Gsyj1`&Bu291e`C! zOUj)Gd35-yf@J2F*8q$7P+<9kpzo&GZH5fi0Nc96WMSBV3x`egqG0>e^!?L$h_vyD z@a6%)J15XO;3?^OV_tXLbG@(OXEH?)%UKhYwwI#KF3$g?N6#?jH$)quGAF%S#+0Zi zJa8@j{t{WeP+qn`-uBXh#xA^oD37?=110eWAc{s{j{czGh=jqPCF|snnF{T(T7xy> z$wNa;zx%WtXPDofhEk@t9HoEd2z}6PRpYXWE5lKZ7D*jCQFELr@?d4?hWluJxa+i4 zs`WYo70<19bS8)2j#a<$S`A-DznfrpTCaIqnA>hP+x|MgzR%VrE=s)Z@)njT!e%|Y z8>*91>?l1~Ujj?UrF)-zn-QwUYH+(yo6*V8c2^$3z$lqPArL@@H2g;@H8rV+{%(rj zD8ifKc=EylSMLb8OP;$T>waR8xb}XHo57Wcl}@fr{nqk&eC?pT)f?+oacIW=DRCn1 zkXqq4?gzF+OZ(M5K>*Ip%zf(BvEXRX=+F*(GigzA@aB9~ljNE@=R;asje(;2{)cqQ zA^>Dh_z_au!)|t?3Jc61UgJBb$DPN zMdkA{-vPw-ox!x?d+dC8FLH()75G;nf#K-rO=_GpsIUiSIU`|cLF%K0$`+48f`bb@ zB9YMSYd!R99VtbBuHe5eb6#o#3i~BZd`IoN*MmoFfJ-GQ*Xxa|F5P)TL>^x)v)2^M z+#6<4$-)NvAfM55Mmxegy8N_tH&7;YeBg5&Q$H8-KX!^aqZ? zwdd?qdKe5a%DUjooEymK8m4kk>}sN=WhS3yv4ahp z0_D2=z|rHG3>i#skoW$0t#b`?)$oO2K8qNuh$IzQqmIdFGzup_yfS_k_%L_AJHYH$ zB3nZOaT*rSVb861rp5qkwMlu{l=nteLyh1%mZHs>wW&0X$+OP^2!1mJa_w-VuZRY|jF14}k^}~YoM)KDqN4DXG)84NE92*|n&}jFq(3SS zZo0lcHzVO+3XOWpYT1SyHAe$+H8fN63tzVUk_q63|IrrD+(-H3;m33*rt3h)bK4Pih@9c(*%q# zi=Nkf?Atn0@_7*nMH5z91lVHF?b6zU*#O#|-q)iOpX!UALg_=_%r$x8!<(74bdP_^ z#gc^qqDX&LXg49_6K>+01sUMv1NPG%F_di( z6;rZ69dZw=4a@*6o^?)eyKU)|2}MGI&op9xDkRwki0OxD8~If}B%ZspcgAxQR}OS^=+XvL%HB+Oiw1D?Pp=O6{YfpKNm0 z#G}LD?(C{Pn_Y07`)bPVBRQc{|aAmug^bl()FZQ>r~cr|JrpN2*qE0X>-JS zS^dfWQy;Oxo>bTV=bVgnY@g-(>T);izzRrCm%wkelUV+vql-IWHMxWDB{P&cS`Ap# z_Pic$C41~!)7EwzEYHwHj=8P%ym0asM^9$ORzM=^5mLTXK#gP+LtMb&#CnYfq%X7L zfYbj?J&LwtnBJ6Qa#TI%Q8GHw^qz=s@Wb{Ae-<7kIT67AoXz6Ax~1>t5D0C_=PS0&%HBm& zgv)5Xcw=;xv{8Kr!tK{5J@x3+A=(^FyrSDYrT#+mFKWZl{QnPoZy8qQy2br25R?f> zcXx+$NJ~sgq#FdJ8&tX*q(vH(?(S4TLO?>gTco?=y{GQI*V^aZ=gawgzRe4+>zVVe z@r-+n|M(3+^ts+2@A^K^XLGf%v75Fz%2ST&<8aQnU|Fy1uK62xm69L$@#T+230}fl z-!oFa)z9Mb_1v-EcO>$$b*)0TZBqg3%qn0Ej zrw?bpR?Q1ktZB(aJj2m!oh?0>epW(7UiEqp7+PFC)shU|6&9=;3L3X&H@WG;hK0a> z&?ksjy;r_}`aMg+r{R-W2f1{t7X@52){`rPBa2*?ci<#%p4;0`RZxoD-#8cJu-i%9 z0Fi!-h?o28?TN=A(dvO&sIQpJi3r|QTwTUHAjFkx+kCy^LQR>1u>x_VQOY0zRacUL zx3b=Pfk{Tj_LcCzh*hyDGx3;m3agCpD{i*qMY!M7xk|}%6s@lh3k&2~TEHpS)L=$< zwk3bQ2`*iO^%f%%-pcH4DTXbs8~`b7IwHL6muuMW&A9{cj#9uYWmzGeAO3>{!N9nm z97^Rw2W4s)`_zX@>>abPECwIaJ|>V8)iwtWrayI|sQZkOp(klTDfumiGN7?Bk=-!Z z)hCRzq<;B8@^&MGw_*qyCQG{m;u#)U4%HP2Q# zCjU@U$n{2zt#^L}@9;-n)f;rHK$(l|{3*9JCLozCw>8I%Vwu6;bgRyl5ZN`fAzRil zd~2zT2$}{zF64F$E--Wz8=mlDMZ29KIm1(B#UgIOjQAPG!x4ND4kZC;GHU$NuUW@I zQlx1gsOsjXs`inoGK8f1{0R@j>xBK^r0(Kk=U4C?$ikeX7i9a3uZ9Ugnpf9G!vstC}VU$4S} zf|uax#J%Onn_oFGG#TGbOGh3e`E_5-<2$VF*tTf%KLFBk6K?C8ACNDfqn>FxLTB^n zYU>oCWff}-Nz6Q0mO~ZovwzJ%Sk**%t zUPnfItjR!ED7JGpu2Uz;v!&Ju`08!SX)kZAjlpy31v8ZdyM0SAI)j{(q&V&w*{1GJ%t8i%=M-bS)gTl(*cD~5+( zT;}e9hSHU`v%Dlit{A7=lZl4?5yA_nAzD*c08Vu(?sWaQ@}=kcH{3?Cx2xTc8#h5b z*L=!3)-HB>EBNdcVqiUov=~cAo%JMIPc%87UI+$9i9st7z~ID1G>r6>gVwL7d-J*r z$Ri`4{T>{46Wc@C*(IKE0HseOg^I|A5&^S2oBRy(E*lND^v-GIS@-?Acjf` znMA~sz}OnKlJ?(xs|r}l8SAXOa|$6`$QKnLE6pVUrB&D$TgBx$`H4WfY65DfhV7kK z3$J#06sA>5P-p^CZfdh58MAhH=5#xYT+&0l^2=tqhmysN=Wd>Do?n|K(=%l-*)Sb{ z^4;+I@bWeTrRwXRD-y?y6s2D8{Hv_FD+=|vKz{BYN%)xA>(@?#9`KOt+rDCm`(ChU zY#+$_5@t)FW!oAHF4BqVp6(u+Z2w&&`x*O>^+d=(`#iZw@_BR}pQSE#xSmqU&K4xa zI(iG!^+~JE(rXXSDjW=GbL7can22El;fI40E2FviR0xz#TJ48Syf#(sK_9CnB5k%Q zj~3f533#?kC+O5NSNq$7l$)b&!wSrmGEBy%R;Ow%!+Do+{5paRq?1)Fl?x>v(mda| z_qQ=G+3i-QFv3T9AWISRTN2Dkb0#c}goM8)pQz*BFri6y)n-7h^>L>6l`LD+ z7Ik0+6)1H*Vm5TFa|zw$>RK5G6)d({U-8?Gmy7Hd+j>)YiWOU8|N3JFA@Cqw`*m|9 zd!9+ohLpMv4nyYk@iw!_+Z}?o>%FH)L(CH)!b+?YmOJx5{!}_*PBpufd%A?W1m0m# zH3Me#GaE`((7)E}eW&$u@_Ije`}-BqWmXB&6;joDJAEW2rioc+*D7!IOhIPd@H#Q7 znh7oSyh~3@M;SNPHo0ies{s-=wowZ*EP#5X>)ctdh3-7yD=NP?Xp1hcXCcQ~?h|uW z!U%a|DAi`FJG7j6OIMD)yR{*+fhub|difW8eM*6AWU>cFVwtFz|AqMGd|koG#LK~6 z?Jrqr=^^DSJ%!C9tx}jc>@f>zLMwe-E#vl#pfv?UCuk}h$o@1TW^!-Lh;3Mj4aWm) z6-{88zr301A{~|-=q+=5YN5_$_?hc8UWQt_8B<+1azwh);h!FHIV|k>8$ysY>-EdH zp)UID-$*O*457YQVGor`!z=+s1;d?%LbnGu=afZi$Wn1@9PC1_Cr_~c$*givIRCNV zpD)(2ACg2$1Lp!;^+w$%KjOtuu`qNWhO)o0pKqdVAH|)u)MDosC^lHbH9SF%#xaIt z0qK}35_7kAT_YLqUKkVk(1QMp4=goTwl6^^M=JC0Y07oXGjZ)AvWUm#PAIaa7G{PARl1PJY# z*2>n{LOAnenSOSB58q|VNKu1Q-5iumpw+(%-R1Ro=5>aEwJ^+9_r(V?ta0mNGtKq) zY=PJiNJT`6bzq-Xp<=}VrS4JyfM&e>O(S3;w+H9Y2H-qwlAi=3WJ≠ow>gJcF+T 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 ITNaQ12Pg^o82|tP literal 0 HcmV?d00001 diff --git a/scripts/kcov_fuzz_accountsdb.sh b/scripts/kcov_fuzz_accountsdb.sh new file mode 100644 index 000000000..4ca827d2c --- /dev/null +++ b/scripts/kcov_fuzz_accountsdb.sh @@ -0,0 +1,31 @@ +# to install kcov follow the instructions at: +# https://github.com/SimonKagstrom/kcov/blob/master/INSTALL.md +# to build on mac the following should work: +# ``` +# cd /path/to/kcov/ +# mkdir build +# cd build +# cmake .. +# make +# make install +# export PATH=$PATH:/path/to/kcov/build/src +# ``` + +echo "=> Clearing kcov-output directory" +rm -rf kcov-output +mkdir kcov-output + +echo "=> Building Sig" +zig build + +echo "=> Running kcov on accountsdb" +kcov \ + --include-pattern=src/accountsdb/ \ + # not sure why this is necessary with --include-pattern but it is + --exclude-pattern=$HOME/.cache \ + kcov-output/ \ + ./zig-out/bin/fuzz accountsdb + +# open report +echo "=> Opening kcov-output/index.html" +open kcov-output/index.html \ No newline at end of file diff --git a/scripts/kcov_fuzz_gossip.sh b/scripts/kcov_fuzz_gossip.sh new file mode 100644 index 000000000..9d2e5c022 --- /dev/null +++ b/scripts/kcov_fuzz_gossip.sh @@ -0,0 +1,30 @@ +# to install kcov follow the instructions at: +# https://github.com/SimonKagstrom/kcov/blob/master/INSTALL.md +# to build on mac the following should work: +# ``` +# cd /path/to/kcov/ +# mkdir build +# cd build +# cmake .. +# make +# make install +# export PATH=$PATH:/path/to/kcov/build/src +# ``` + +echo "=> Clearing kcov-output directory" +rm -rf kcov-output +mkdir kcov-output + +echo "=> Building Sig" +zig build + +echo "=> Running kcov on gossip spy" +kcov \ + --include-pattern=src/gossip/ \ + --exclude-pattern=$HOME/.cache \ + kcov-output/ \ + ./zig-out/bin/fuzz gossip 19 4_000 + +# open report +echo "=> Opening kcov-output/index.html" +open kcov-output/index.html \ No newline at end of file diff --git a/scripts/kcov_test.sh b/scripts/kcov_test.sh new file mode 100644 index 000000000..363338f82 --- /dev/null +++ b/scripts/kcov_test.sh @@ -0,0 +1,29 @@ +# to install kcov follow the instructions at: +# https://github.com/SimonKagstrom/kcov/blob/master/INSTALL.md +# to build on mac the following should work: +# ``` +# cd /path/to/kcov/ +# mkdir build +# cd build +# cmake .. +# make +# make install +# export PATH=$PATH:/path/to/kcov/build/src +# ``` + +echo "=> Cleaning up" +rm -rf kcov-output +mkdir kcov-output + +echo "=> Building Sig" +zig build + +echo "=> Running kcov on tests" +kcov \ + --include-pattern=src/ \ + --exclude-pattern=$HOME/.cache \ + kcov-output \ + ./zig-out/bin/test + +echo "=> Opening kcov-output/index.html" +open kcov-output/index.html \ No newline at end of file diff --git a/src/accountsdb/fuzz.zig b/src/accountsdb/fuzz.zig index 265e6804c..2f5e02973 100644 --- a/src/accountsdb/fuzz.zig +++ b/src/accountsdb/fuzz.zig @@ -7,7 +7,7 @@ const Account = sig.core.Account; const Slot = sig.core.time.Slot; const Pubkey = sig.core.pubkey.Pubkey; -const MAX_FUZZ_TIME = std.time.ns_per_s * 100_000; +const MAX_FUZZ_TIME = std.time.ns_per_s * 10; pub const TrackedAccount = struct { pubkey: Pubkey, @@ -78,9 +78,11 @@ pub fn run(args: *std.process.ArgIterator) !void { const use_disk = rand.boolean(); const snapshot_dir = "test_data/accountsdb_fuzz"; defer { + std.debug.print("deleting snapshot dir...\n", .{}); std.fs.cwd().deleteTree(snapshot_dir) catch |err| { std.debug.print("failed to delete snapshot dir: {}\n", .{err}); }; + std.debug.print("deleted snapshot dir\n", .{}); } std.debug.print("use disk: {}\n", .{use_disk}); @@ -90,8 +92,6 @@ pub fn run(args: *std.process.ArgIterator) !void { }); defer accounts_db.deinit(true); - // try accounts_db.account_index.ensureTotalCapacity(10_000); - const exit = try allocator.create(std.atomic.Value(bool)); exit.* = std.atomic.Value(bool).init(false); @@ -113,7 +113,6 @@ pub fn run(args: *std.process.ArgIterator) !void { var slot: usize = 0; const Actions = enum { put, get }; - // var put_count: u64 = 0; // get/put a bunch of accounts var timer = try std.time.Timer.start(); @@ -125,10 +124,6 @@ pub fn run(args: *std.process.ArgIterator) !void { switch (action) { .put => { - // if (put_count == 5) { - // continue; - // } - // put_count += 1; const N_ACCOUNTS_PER_SLOT = 10; const accounts = try allocator.alloc(Account, N_ACCOUNTS_PER_SLOT); @@ -186,6 +181,7 @@ pub fn run(args: *std.process.ArgIterator) !void { } } + std.debug.print("fuzzing complete\n", .{}); exit.store(true, .seq_cst); handle.join(); } diff --git a/src/cmd/cmd.zig b/src/cmd/cmd.zig index a1a0b6da8..5f8d752f3 100644 --- a/src/cmd/cmd.zig +++ b/src/cmd/cmd.zig @@ -405,8 +405,10 @@ fn gossip() !void { var app_base = try AppBase.init(gpa_allocator); var gossip_service, var gossip_manager = try startGossip(gpa_allocator, &app_base, &.{}); - defer gossip_service.deinit(); - defer gossip_manager.deinit(); + defer { + gossip_manager.deinit(); + gossip_service.deinit(); + } gossip_manager.join(); } diff --git a/src/fuzz.zig b/src/fuzz.zig index fbcc77478..f66fae661 100644 --- a/src/fuzz.zig +++ b/src/fuzz.zig @@ -29,5 +29,8 @@ pub fn main() !void { try accountsdb_fuzz.run(&cli_args); } else if (std.mem.startsWith(u8, filter, "gossip")) { try gossip_fuzz.run(&cli_args); + } else { + std.debug.print("unknown fuzz filter: {s}\n", .{filter}); + return error.UnknownFilter; } } diff --git a/src/gossip/fuzz.zig b/src/gossip/fuzz.zig index 0045f6e4d..088e3a3c9 100644 --- a/src/gossip/fuzz.zig +++ b/src/gossip/fuzz.zig @@ -1,52 +1,38 @@ -//! how to run the fuzzer: -//! `zig build fuzz_gossip` +//! to use the fuzzer run the following command: +//! ./zig-out/bin/fuzz ? //! to stop the fuzzer write any input to stdin and press enter const std = @import("std"); - -const _gossip_service = @import("./service.zig"); -const GossipService = _gossip_service.GossipService; -const ChunkType = _gossip_service.ChunkType; -const gossipDataToPackets = _gossip_service.gossipDataToPackets; - -const Logger = @import("../trace/log.zig").Logger; -const _gossip_data = @import("data.zig"); -const LegacyContactInfo = _gossip_data.LegacyContactInfo; -const SignedGossipData = _gossip_data.SignedGossipData; -const ContactInfo = _gossip_data.ContactInfo; -const AtomicBool = std.atomic.Value(bool); - -const SocketAddr = @import("../net/net.zig").SocketAddr; - -const Pubkey = @import("../core/pubkey.zig").Pubkey; -const getWallclockMs = @import("data.zig").getWallclockMs; - -const Bloom = @import("../bloom/bloom.zig").Bloom; -const network = @import("zig-network"); -const EndPoint = network.EndPoint; -const Packet = @import("../net/packet.zig").Packet; -const PACKET_DATA_SIZE = @import("../net/packet.zig").PACKET_DATA_SIZE; -const NonBlockingChannel = @import("../sync/channel.zig").NonBlockingChannel; - -const _gossip_message = @import("message.zig"); -const GossipMessage = _gossip_message.GossipMessage; - -const Ping = @import("ping_pong.zig").Ping; -const Pong = @import("ping_pong.zig").Pong; -const bincode = @import("../bincode/bincode.zig"); - +const sig = @import("../lib.zig"); +const bincode = sig.bincode; + +const GossipService = sig.gossip.service.GossipService; +const ChunkType = sig.gossip.service.ChunkType; +const LegacyContactInfo = sig.gossip.data.LegacyContactInfo; +const SignedGossipData = sig.gossip.data.SignedGossipData; +const ContactInfo = sig.gossip.data.ContactInfo; +const Logger = sig.trace.log.Logger; +const GossipMessage = sig.gossip.message.GossipMessage; +const GossipPullFilterSet = sig.gossip.pull_request.GossipPullFilterSet; +const GossipPullFilter = sig.gossip.pull_request.GossipPullFilter; +const Ping = sig.gossip.ping_pong.Ping; +const Pong = sig.gossip.ping_pong.Pong; +const SocketAddr = sig.net.net.SocketAddr; +const Pubkey = sig.core.pubkey.Pubkey; +const Bloom = sig.bloom.bloom.Bloom; +const Packet = sig.net.packet.Packet; +const PACKET_DATA_SIZE = sig.net.packet.PACKET_DATA_SIZE; +const Hash = sig.core.hash.Hash; +const EndPoint = @import("zig-network").EndPoint; const KeyPair = std.crypto.sign.Ed25519.KeyPair; +const AtomicBool = std.atomic.Value(bool); -const _gossip_table = @import("../gossip/table.zig"); - -const _pull_request = @import("../gossip/pull_request.zig"); -const GossipPullFilterSet = _pull_request.GossipPullFilterSet; -const GossipPullFilter = _pull_request.GossipPullFilter; - -const Hash = @import("../core/hash.zig").Hash; +const gossipDataToPackets = sig.gossip.service.gossipDataToPackets; +const getWallclockMs = sig.gossip.data.getWallclockMs; -const PacketChannel = NonBlockingChannel(Packet); -const GossipChannel = NonBlockingChannel(GossipMessage); +const SLEEP_TIME = 0; +// const SLEEP_TIME = std.time.ns_per_ms * 10; +// const SLEEP_TIME = std.time.ns_per_s; pub fn serializeToPacket(d: anytype, to_addr: EndPoint) !Packet { var packet_buf: [PACKET_DATA_SIZE]u8 = undefined; @@ -241,20 +227,19 @@ pub fn run(args: *std.process.ArgIterator) !void { const allocator = gpa.allocator(); // use std.testing.allocator to detect leaks // parse cli args to define where to send packets - // zig build fuzz -- - const maybe_entrypoint = args.next(); const maybe_seed = args.next(); const maybe_max_messages_string = args.next(); + const maybe_entrypoint = args.next(); - const entrypoint = blk: { + const to_entrypoint, const fuzz_sig = blk: { if (maybe_entrypoint) |entrypoint| { const addr = SocketAddr.parse(entrypoint) catch @panic("invalid entrypoint"); - break :blk addr; + break :blk .{ addr.toEndpoint(), false }; } else { - @panic("usage: zig build fuzz -- "); + // default to localhost (wont actually send anything) + break :blk .{ try EndPoint.parse("127.0.0.1:8001"), true }; } }; - const to_endpoint = entrypoint.toEndpoint(); const seed = blk: { if (maybe_seed) |seed_str| { @@ -263,6 +248,8 @@ pub fn run(args: *std.process.ArgIterator) !void { break :blk getWallclockMs(); } }; + std.debug.print("using seed: {d}\n", .{seed}); + var rng = std.rand.DefaultPrng.init(seed); const maybe_max_messages = blk: { if (maybe_max_messages_string) |max_messages_str| { @@ -272,9 +259,6 @@ pub fn run(args: *std.process.ArgIterator) !void { } }; - std.debug.print("using seed: {d}\n", .{seed}); - var rng = std.rand.DefaultPrng.init(seed); - // var logger = Logger.init(gpa.allocator(), .debug); // defer logger.deinit(); // logger.spawn(); @@ -282,37 +266,94 @@ pub fn run(args: *std.process.ArgIterator) !void { // setup sending socket var fuzz_keypair = try KeyPair.create(null); const fuzz_address = SocketAddr.initIpv4(.{ 127, 0, 0, 1 }, 9998); - const fuzz_pubkey = Pubkey.fromPublicKey(&fuzz_keypair.public_key); var fuzz_contact_info = ContactInfo.init(allocator, fuzz_pubkey, 0, 19); try fuzz_contact_info.setSocket(.gossip, fuzz_address); - var fuzz_exit = AtomicBool.init(false); - var gossip_service_fuzzer = try GossipService.init( - allocator, - allocator, - fuzz_contact_info, - fuzz_keypair, - (&entrypoint)[0..1], - &fuzz_exit, - .noop, - ); - - const fuzz_handle = try std.Thread.spawn(.{}, GossipService.run, .{ - &gossip_service_fuzzer, .{ - .spy_node = true, - .dump = false, - }, - }); - - const SLEEP_TIME = 0; - // const SLEEP_TIME = std.time.ns_per_ms * 10; - // const SLEEP_TIME = std.time.ns_per_s; + var exit = AtomicBool.init(false); + + var gossip_client, const packet_channel, var handle = blk: { + if (fuzz_sig) { + var client_keypair = try KeyPair.create(null); + const client_address = SocketAddr.initIpv4(.{ 127, 0, 0, 1 }, 9998); + const client_pubkey = Pubkey.fromPublicKey(&client_keypair.public_key); + var client_contact_info = ContactInfo.init(allocator, client_pubkey, 0, 19); + try client_contact_info.setSocket(.gossip, client_address); + + var gossip_service_client = try GossipService.init( + allocator, + allocator, + client_contact_info, + client_keypair, + null, // we will only recv packets + &exit, + .noop, + ); + + const client_handle = try std.Thread.spawn(.{}, GossipService.run, .{ + &gossip_service_client, .{ + .spy_node = true, + .dump = false, + }, + }); + + break :blk .{ gossip_service_client, gossip_service_client.packet_incoming_channel, client_handle }; + + } else { + var gossip_service_fuzzer = try GossipService.init( + allocator, + allocator, + fuzz_contact_info, + fuzz_keypair, + (&SocketAddr.fromEndpoint(&to_entrypoint))[0..1], // we only want to communicate with one node + &exit, + .noop, + ); + + const fuzz_handle = try std.Thread.spawn(.{}, GossipService.run, .{ + &gossip_service_fuzzer, .{ + .spy_node = true, + .dump = false, + }, + }); + + break :blk .{ gossip_service_fuzzer, gossip_service_fuzzer.packet_outgoing_channel, fuzz_handle }; + } + }; - // wait for keyboard input to exit + // wait for any keyboard input to exit early var loop_exit = AtomicBool.init(false); var exit_handle = try std.Thread.spawn(.{}, waitForExit, .{&loop_exit}); + exit_handle.detach(); + // start fuzzing + try fuzz( + allocator, + &loop_exit, + maybe_max_messages, + &rng, + &fuzz_keypair, + to_entrypoint, + packet_channel, + ); + + // cleanup + std.debug.print("\t=> shutting down...\n", .{}); + exit.store(true, .unordered); + handle.join(); + gossip_client.deinit(); + std.debug.print("\t=> done.\n", .{}); +} + +pub fn fuzz( + allocator: std.mem.Allocator, + loop_exit: *AtomicBool, + maybe_max_messages: ?usize, + rng: *std.rand.DefaultPrng, + keypair: *const KeyPair, + to_endpoint: EndPoint, + outgoing_channel: *sig.sync.Channel(std.ArrayList(Packet)), +) !void { var msg_count: usize = 0; while (!loop_exit.load(.unordered)) { if (maybe_max_messages) |max_messages| { @@ -322,23 +363,20 @@ pub fn run(args: *std.process.ArgIterator) !void { } const command = rng.random().intRangeAtMost(u8, 0, 4); - // var command: usize = if (msg_count % 2 == 0) 2 else 4; - // var command: usize = 4; - const packet = switch (command) { 0 => blk: { // send ping message - const packet = randomPingPacket(rng.random(), &fuzz_keypair, to_endpoint); + const packet = randomPingPacket(rng.random(), keypair, to_endpoint); break :blk packet; }, 1 => blk: { // send pong message - const packet = randomPongPacket(rng.random(), &fuzz_keypair, to_endpoint); + const packet = randomPongPacket(rng.random(), keypair, to_endpoint); break :blk packet; }, 2 => blk: { // send push message - const packets = randomPushMessage(rng.random(), &fuzz_keypair, to_endpoint) catch |err| { + const packets = randomPushMessage(rng.random(), keypair, to_endpoint) catch |err| { std.debug.print("ERROR: {s}\n", .{@errorName(err)}); continue; }; @@ -349,7 +387,7 @@ pub fn run(args: *std.process.ArgIterator) !void { }, 3 => blk: { // send pull response - const packets = randomPullResponse(rng.random(), &fuzz_keypair, to_endpoint) catch |err| { + const packets = randomPullResponse(rng.random(), keypair, to_endpoint) catch |err| { std.debug.print("ERROR: {s}\n", .{@errorName(err)}); continue; }; @@ -363,7 +401,7 @@ pub fn run(args: *std.process.ArgIterator) !void { const packet = randomPullRequest( allocator, rng.random(), - &fuzz_keypair, + keypair, to_endpoint, ); break :blk packet; @@ -387,7 +425,7 @@ pub fn run(args: *std.process.ArgIterator) !void { } // send it - try gossip_service_fuzzer.packet_outgoing_channel.send(packet_batch); + try outgoing_channel.send(packet_batch); std.time.sleep(SLEEP_TIME); @@ -395,14 +433,4 @@ pub fn run(args: *std.process.ArgIterator) !void { std.debug.print("{d} messages sent\n", .{msg_count}); } } - - // cleanup - std.debug.print("\t=> shutting down...\n", .{}); - fuzz_exit.store(true, .unordered); - fuzz_handle.join(); - gossip_service_fuzzer.deinit(); - std.debug.print("\t=>fuzzy gossip service shutdown\n", .{}); - - exit_handle.join(); - std.debug.print("fuzzing done\n", .{}); -} +} \ No newline at end of file From becfee96551d17ac1c612d22326097367284a1f7 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Wed, 10 Jul 2024 13:50:06 -0400 Subject: [PATCH 03/28] fit formatting --- src/cmd/cmd.zig | 2 +- src/fuzz.zig | 2 +- src/gossip/fuzz.zig | 13 ++++++------- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/cmd/cmd.zig b/src/cmd/cmd.zig index 5f8d752f3..d149d2e40 100644 --- a/src/cmd/cmd.zig +++ b/src/cmd/cmd.zig @@ -405,7 +405,7 @@ fn gossip() !void { var app_base = try AppBase.init(gpa_allocator); var gossip_service, var gossip_manager = try startGossip(gpa_allocator, &app_base, &.{}); - defer { + defer { gossip_manager.deinit(); gossip_service.deinit(); } diff --git a/src/fuzz.zig b/src/fuzz.zig index f66fae661..1f1624618 100644 --- a/src/fuzz.zig +++ b/src/fuzz.zig @@ -29,7 +29,7 @@ pub fn main() !void { try accountsdb_fuzz.run(&cli_args); } else if (std.mem.startsWith(u8, filter, "gossip")) { try gossip_fuzz.run(&cli_args); - } else { + } else { std.debug.print("unknown fuzz filter: {s}\n", .{filter}); return error.UnknownFilter; } diff --git a/src/gossip/fuzz.zig b/src/gossip/fuzz.zig index 088e3a3c9..7239ca278 100644 --- a/src/gossip/fuzz.zig +++ b/src/gossip/fuzz.zig @@ -1,5 +1,5 @@ //! to use the fuzzer run the following command: -//! ./zig-out/bin/fuzz ? +//! ./zig-out/bin/fuzz ? //! to stop the fuzzer write any input to stdin and press enter const std = @import("std"); @@ -272,8 +272,8 @@ pub fn run(args: *std.process.ArgIterator) !void { var exit = AtomicBool.init(false); - var gossip_client, const packet_channel, var handle = blk: { - if (fuzz_sig) { + var gossip_client, const packet_channel, var handle = blk: { + if (fuzz_sig) { var client_keypair = try KeyPair.create(null); const client_address = SocketAddr.initIpv4(.{ 127, 0, 0, 1 }, 9998); const client_pubkey = Pubkey.fromPublicKey(&client_keypair.public_key); @@ -298,8 +298,7 @@ pub fn run(args: *std.process.ArgIterator) !void { }); break :blk .{ gossip_service_client, gossip_service_client.packet_incoming_channel, client_handle }; - - } else { + } else { var gossip_service_fuzzer = try GossipService.init( allocator, allocator, @@ -353,7 +352,7 @@ pub fn fuzz( keypair: *const KeyPair, to_endpoint: EndPoint, outgoing_channel: *sig.sync.Channel(std.ArrayList(Packet)), -) !void { +) !void { var msg_count: usize = 0; while (!loop_exit.load(.unordered)) { if (maybe_max_messages) |max_messages| { @@ -433,4 +432,4 @@ pub fn fuzz( std.debug.print("{d} messages sent\n", .{msg_count}); } } -} \ No newline at end of file +} From 44b64b8ee3a8a946f9f20920846cde5eba4e19db Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Wed, 10 Jul 2024 14:16:21 -0400 Subject: [PATCH 04/28] polish up fuzz code --- docs/fuzzing.md | 8 ++++++- src/accountsdb/fuzz.zig | 53 ++++++++++++++++------------------------- src/fuzz.zig | 44 ++++++++++++++++++++++++++++++++-- src/gossip/fuzz.zig | 34 ++++++++++---------------- 4 files changed, 82 insertions(+), 57 deletions(-) diff --git a/docs/fuzzing.md b/docs/fuzzing.md index 066c0b4e4..73a6f3b87 100644 --- a/docs/fuzzing.md +++ b/docs/fuzzing.md @@ -34,6 +34,9 @@ example commands: # (option2) ./zig-out/bin/fuzz gossip 10 4_000 + +# (run with random seed for inf) +./zig-out/bin/fuzz gossip ``` ## accounts-db @@ -45,7 +48,10 @@ the fuzzer does a few things the goal was to makes sure accounts-db was thread-safe for parallel access while also flushing/cleaning/purging example command: -``` +```bash +# +./zig-out/bin/fuzz accountsdb 10 4_000 +# (run with random seed for inf) ./zig-out/bin/fuzz accountsdb ``` diff --git a/src/accountsdb/fuzz.zig b/src/accountsdb/fuzz.zig index 2f5e02973..e3f7a0af7 100644 --- a/src/accountsdb/fuzz.zig +++ b/src/accountsdb/fuzz.zig @@ -7,8 +7,6 @@ const Account = sig.core.Account; const Slot = sig.core.time.Slot; const Pubkey = sig.core.pubkey.Pubkey; -const MAX_FUZZ_TIME = std.time.ns_per_s * 10; - pub const TrackedAccount = struct { pubkey: Pubkey, slot: u64, @@ -37,10 +35,15 @@ pub const TrackedAccount = struct { } }; -pub fn run(args: *std.process.ArgIterator) !void { - _ = args; - - const seed = std.crypto.random.int(u64); +pub fn run(seed: u64, args: *std.process.ArgIterator) !void { + const maybe_max_actions_string = args.next(); + const maybe_max_actions = blk: { + if (maybe_max_actions_string) |max_actions_str| { + break :blk try std.fmt.parseInt(usize, max_actions_str, 10); + } else { + break :blk null; + } + }; var gpa_allocator = std.heap.GeneralPurposeAllocator(.{}){}; const allocator = gpa_allocator.allocator(); @@ -49,35 +52,13 @@ pub fn run(args: *std.process.ArgIterator) !void { defer logger.deinit(); logger.spawn(); - // open and append seed - const SEED_FILE_PATH = "test_data/fuzz_seeds.txt"; - { - std.fs.cwd().access(SEED_FILE_PATH, .{}) catch |err| { - switch (err) { - std.fs.Dir.AccessError.FileNotFound => { - var file = try std.fs.cwd().createFile(SEED_FILE_PATH, .{}); - file.close(); - }, - else => { - std.debug.print("failed to access seed file: {}\n", .{err}); - return; - }, - } - }; - const seed_file = try std.fs.cwd().openFile(SEED_FILE_PATH, .{ .mode = .write_only }); - defer seed_file.close(); - var buf: [32]u8 = undefined; - const seed_slice = try std.fmt.bufPrint(&buf, "{d}\n", .{seed}); - try seed_file.writeAll(seed_slice); - } - std.debug.print("seed: {}\n", .{seed}); - var prng = std.rand.DefaultPrng.init(seed); const rand = prng.random(); const use_disk = rand.boolean(); const snapshot_dir = "test_data/accountsdb_fuzz"; defer { + // NOTE: sometimes this can take a long time so we print when we start and finish std.debug.print("deleting snapshot dir...\n", .{}); std.fs.cwd().deleteTree(snapshot_dir) catch |err| { std.debug.print("failed to delete snapshot dir: {}\n", .{err}); @@ -89,13 +70,14 @@ pub fn run(args: *std.process.ArgIterator) !void { var accounts_db = try AccountsDB.init(allocator, logger, .{ .use_disk_index = use_disk, .snapshot_dir = snapshot_dir, + // TODO: other things we can fuzz (number of bins, ...) }); defer accounts_db.deinit(true); const exit = try allocator.create(std.atomic.Value(bool)); exit.* = std.atomic.Value(bool).init(false); - var handle = try std.Thread.spawn(.{}, AccountsDB.runManagerLoop, .{ + var manager_handle = try std.Thread.spawn(.{}, AccountsDB.runManagerLoop, .{ &accounts_db, exit, }); @@ -115,8 +97,13 @@ pub fn run(args: *std.process.ArgIterator) !void { const Actions = enum { put, get }; // get/put a bunch of accounts - var timer = try std.time.Timer.start(); - while (timer.read() < MAX_FUZZ_TIME) { + while (true) { + if (maybe_max_actions) |max_actions| { + if (slot >= max_actions) { + std.debug.print("reached max actions: {}\n", .{max_actions}); + break; + } + } defer slot += 1; const action_int = rand.intRangeAtMost(u8, 0, 1); @@ -183,5 +170,5 @@ pub fn run(args: *std.process.ArgIterator) !void { std.debug.print("fuzzing complete\n", .{}); exit.store(true, .seq_cst); - handle.join(); + manager_handle.join(); } diff --git a/src/fuzz.zig b/src/fuzz.zig index 1f1624618..60342ad38 100644 --- a/src/fuzz.zig +++ b/src/fuzz.zig @@ -5,6 +5,9 @@ const accountsdb_fuzz = lib.accounts_db.fuzz; const gossip_fuzz = lib.gossip.fuzz; const logger = lib.trace.log; +// where seeds are saved (in case of too many logs) +const SEED_FILE_PATH = "test_data/fuzz_seeds.txt"; + pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; const allocator = gpa.allocator(); @@ -25,12 +28,49 @@ pub fn main() !void { } }; + const maybe_seed = cli_args.next(); + const seed = blk: { + if (maybe_seed) |seed_str| { + break :blk try std.fmt.parseInt(u64, seed_str, 10); + } else { + break :blk std.crypto.random.int(u64); + } + }; + + std.debug.print("using seed: {d}\n", .{seed}); + try writeSeedToFile(seed); + if (std.mem.startsWith(u8, filter, "accountsdb")) { - try accountsdb_fuzz.run(&cli_args); + try accountsdb_fuzz.run(seed, &cli_args); } else if (std.mem.startsWith(u8, filter, "gossip")) { - try gossip_fuzz.run(&cli_args); + try gossip_fuzz.run(seed, &cli_args); } else { std.debug.print("unknown fuzz filter: {s}\n", .{filter}); return error.UnknownFilter; } } + +/// writes the seed to the defined seed file (defined by SEED_FILE_PATH) +pub fn writeSeedToFile(seed: u64) !void { + std.fs.cwd().access(SEED_FILE_PATH, .{}) catch |err| { + switch (err) { + std.fs.Dir.AccessError.FileNotFound => { + var file = try std.fs.cwd().createFile(SEED_FILE_PATH, .{}); + file.close(); + }, + else => { + std.debug.print("failed to access seed file: {}\n", .{err}); + return; + }, + } + }; + + const seed_file = try std.fs.cwd().openFile(SEED_FILE_PATH, .{ .mode = .write_only }); + defer seed_file.close(); + + var buf: [1024]u8 = undefined; + const now: u64 = @intCast(std.time.timestamp()); + + const seed_slice = try std.fmt.bufPrint(&buf, "@{d} - seed: {d}\n", .{ now, seed }); + try seed_file.writeAll(seed_slice); +} diff --git a/src/gossip/fuzz.zig b/src/gossip/fuzz.zig index 7239ca278..6a683b641 100644 --- a/src/gossip/fuzz.zig +++ b/src/gossip/fuzz.zig @@ -222,12 +222,13 @@ pub fn waitForExit(exit: *AtomicBool) void { exit.store(true, .unordered); } -pub fn run(args: *std.process.ArgIterator) !void { +pub fn run(seed: u64, args: *std.process.ArgIterator) !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; const allocator = gpa.allocator(); // use std.testing.allocator to detect leaks + var rng = std.rand.DefaultPrng.init(seed); + // parse cli args to define where to send packets - const maybe_seed = args.next(); const maybe_max_messages_string = args.next(); const maybe_entrypoint = args.next(); @@ -241,16 +242,6 @@ pub fn run(args: *std.process.ArgIterator) !void { } }; - const seed = blk: { - if (maybe_seed) |seed_str| { - break :blk try std.fmt.parseInt(u64, seed_str, 10); - } else { - break :blk getWallclockMs(); - } - }; - std.debug.print("using seed: {d}\n", .{seed}); - var rng = std.rand.DefaultPrng.init(seed); - const maybe_max_messages = blk: { if (maybe_max_messages_string) |max_messages_str| { break :blk try std.fmt.parseInt(usize, max_messages_str, 10); @@ -259,10 +250,6 @@ pub fn run(args: *std.process.ArgIterator) !void { } }; - // var logger = Logger.init(gpa.allocator(), .debug); - // defer logger.deinit(); - // logger.spawn(); - // setup sending socket var fuzz_keypair = try KeyPair.create(null); const fuzz_address = SocketAddr.initIpv4(.{ 127, 0, 0, 1 }, 9998); @@ -287,7 +274,7 @@ pub fn run(args: *std.process.ArgIterator) !void { client_keypair, null, // we will only recv packets &exit, - .noop, + .noop, // no logs ); const client_handle = try std.Thread.spawn(.{}, GossipService.run, .{ @@ -306,9 +293,11 @@ pub fn run(args: *std.process.ArgIterator) !void { fuzz_keypair, (&SocketAddr.fromEndpoint(&to_entrypoint))[0..1], // we only want to communicate with one node &exit, - .noop, + .noop, // no logs ); + // this is mainly used to just send packets through the fuzzer + // but we also want to respond to pings so we need to run the full gossip service const fuzz_handle = try std.Thread.spawn(.{}, GossipService.run, .{ &gossip_service_fuzzer, .{ .spy_node = true, @@ -320,15 +309,17 @@ pub fn run(args: *std.process.ArgIterator) !void { } }; + // NOTE: this is useful when we want to run for an inf amount of time and want to + // early exit at some point without killing the process + var fuzzing_loop_exit = AtomicBool.init(false); // wait for any keyboard input to exit early - var loop_exit = AtomicBool.init(false); - var exit_handle = try std.Thread.spawn(.{}, waitForExit, .{&loop_exit}); + var exit_handle = try std.Thread.spawn(.{}, waitForExit, .{&fuzzing_loop_exit}); exit_handle.detach(); // start fuzzing try fuzz( allocator, - &loop_exit, + &fuzzing_loop_exit, maybe_max_messages, &rng, &fuzz_keypair, @@ -357,6 +348,7 @@ pub fn fuzz( while (!loop_exit.load(.unordered)) { if (maybe_max_messages) |max_messages| { if (msg_count >= max_messages) { + std.debug.print("reached max messages: {d}\n", .{msg_count}); break; } } From 370b8972d1066e45a2071515b3ec8bb79f49108c Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Thu, 11 Jul 2024 13:46:52 -0400 Subject: [PATCH 05/28] ci test --- .github/workflows/check.yml | 32 +++++++++++++++++++++++++++++++- .gitignore | 2 +- parse_kcov.py | 28 ++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 parse_kcov.py diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 11448fd55..fbf127787 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -4,7 +4,7 @@ on: push: branches: [main, pre-release] pull_request: - branches: [main, pre-release] + branches: [main, pre-release, 19/kcov] jobs: lint: @@ -52,6 +52,36 @@ jobs: - name: test run: zig build test + kcov_test: + strategy: + matrix: + os: [ubuntu-latest] + runs-on: ${{matrix.os}} + steps: + - name: checkout + uses: actions/checkout@v2 + with: + submodules: recursive + + - name: Set up dependencies + run: sudo apt-get update + + - name: Install kcov + run: | + sudo apt-get install -y cmake libcurl4-openssl-dev libssl-dev + git clone https://github.com/SimonKagstrom/kcov.git + cd kcov + mkdir build + cd build + cmake .. + make + sudo make install + + - name: Run kcov + run: | + bash scripts/kcov_test.sh + python parse_kcov.py + benchmarks: strategy: matrix: diff --git a/.gitignore b/.gitignore index ce82abb26..56ba668f7 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ zig-out/ data/ index_storage/ -kcov-output/ +kcov-output /gossip-dumps diff --git a/parse_kcov.py b/parse_kcov.py new file mode 100644 index 000000000..cef72c464 --- /dev/null +++ b/parse_kcov.py @@ -0,0 +1,28 @@ +import json + +coverage_path = "kcov-output/fuzz/coverage.json" +with open(coverage_path, "r") as f: + coverage = json.load(f) + +max_path_length = max(len(file_info["file"]) for file_info in coverage["files"]) + +output = "" +for file_info in coverage["files"]: + path = file_info["file"] + path = path.split("sig/")[2] + + file_coverage = float(file_info["percent_covered"]) + + # Determine the color based on the coverage percentage + if file_coverage < 50: + color = "\033[91m" # Red + elif file_coverage < 75: + color = "\033[93m" # Yellow + else: + color = "\033[92m" # Green + + # Reset color + reset = "\033[0m" + output += f"{color}{path:<{max_path_length}} --- {file_coverage:>10}%{reset}\n" + +print(output) \ No newline at end of file From 16945d3543865732bf6f3a087c646beb32edaeeb Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Thu, 11 Jul 2024 13:48:34 -0400 Subject: [PATCH 06/28] fix yaml syntax --- .github/workflows/check.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index fbf127787..0830bced6 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -63,24 +63,24 @@ jobs: with: submodules: recursive - - name: Set up dependencies - run: sudo apt-get update + - name: Set up dependencies + run: sudo apt-get update - - name: Install kcov - run: | - sudo apt-get install -y cmake libcurl4-openssl-dev libssl-dev - git clone https://github.com/SimonKagstrom/kcov.git - cd kcov - mkdir build - cd build - cmake .. - make - sudo make install + - name: Install kcov + run: | + sudo apt-get install -y cmake libcurl4-openssl-dev libssl-dev + git clone https://github.com/SimonKagstrom/kcov.git + cd kcov + mkdir build + cd build + cmake .. + make + sudo make install - - name: Run kcov - run: | - bash scripts/kcov_test.sh - python parse_kcov.py + - name: Run kcov + run: | + bash scripts/kcov_test.sh + python parse_kcov.py benchmarks: strategy: From bfd9913ab01a2e753b31c19fd892fe90719f0616 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Thu, 11 Jul 2024 13:50:52 -0400 Subject: [PATCH 07/28] update deps --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 0830bced6..0e776409f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -68,7 +68,7 @@ jobs: - name: Install kcov run: | - sudo apt-get install -y cmake libcurl4-openssl-dev libssl-dev + sudo apt-get install -y binutils-dev libssl-dev libcurl4-openssl-dev zlib1g-dev libdw-dev libiberty-dev git clone https://github.com/SimonKagstrom/kcov.git cd kcov mkdir build From a3c4c2f2c9905910a40a5585382213a317eb1dba Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Thu, 11 Jul 2024 13:52:33 -0400 Subject: [PATCH 08/28] add zig deps --- .github/workflows/check.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 0e776409f..9c8070384 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -63,6 +63,11 @@ jobs: with: submodules: recursive + - name: setup-zig + uses: goto-bus-stop/setup-zig@v1 + with: + version: 0.13.0 + - name: Set up dependencies run: sudo apt-get update From 2b79b6e81328a2d16f0e2bd1be41b7609ab84c1c Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Thu, 11 Jul 2024 13:59:03 -0400 Subject: [PATCH 09/28] update script to not fail if open fails --- .github/workflows/check.yml | 3 +++ scripts/kcov_test.sh | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 9c8070384..af75d8833 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -85,6 +85,9 @@ jobs: - name: Run kcov run: | bash scripts/kcov_test.sh + + - name: Print coverage report + run: | python parse_kcov.py benchmarks: diff --git a/scripts/kcov_test.sh b/scripts/kcov_test.sh index 363338f82..34f649598 100644 --- a/scripts/kcov_test.sh +++ b/scripts/kcov_test.sh @@ -26,4 +26,4 @@ kcov \ ./zig-out/bin/test echo "=> Opening kcov-output/index.html" -open kcov-output/index.html \ No newline at end of file +open kcov-output/index.html || echo "=> Failed to open kcov-output/index.html" \ No newline at end of file From c78a94d1c0c03396ee6e7074624b6eac89a83ce6 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Thu, 11 Jul 2024 14:04:48 -0400 Subject: [PATCH 10/28] fix paths --- .github/workflows/check.yml | 2 +- parse_kcov.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index af75d8833..b73e8f5e8 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -88,7 +88,7 @@ jobs: - name: Print coverage report run: | - python parse_kcov.py + python parse_kcov.py kcov-output/test/coverage.json benchmarks: strategy: diff --git a/parse_kcov.py b/parse_kcov.py index cef72c464..8c46d4351 100644 --- a/parse_kcov.py +++ b/parse_kcov.py @@ -1,6 +1,12 @@ import json -coverage_path = "kcov-output/fuzz/coverage.json" +# read path from cli +import sys +if len(sys.argv) != 2: + print("Usage: python parse_kcov.py ") + sys.exit(1) +coverage_path = sys.argv[1] + with open(coverage_path, "r") as f: coverage = json.load(f) From 2b4c9be9c7f316dd8e6cc8f0167825f08ff7429a Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Thu, 11 Jul 2024 14:13:44 -0400 Subject: [PATCH 11/28] sort based on percentage covered --- parse_kcov.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/parse_kcov.py b/parse_kcov.py index 8c46d4351..c25dad585 100644 --- a/parse_kcov.py +++ b/parse_kcov.py @@ -12,11 +12,13 @@ max_path_length = max(len(file_info["file"]) for file_info in coverage["files"]) +# order by coverage percentage +coverage["files"].sort(key=lambda x: float(x["percent_covered"]), reverse=False) + output = "" for file_info in coverage["files"]: path = file_info["file"] path = path.split("sig/")[2] - file_coverage = float(file_info["percent_covered"]) # Determine the color based on the coverage percentage From 13247b64598fcda0e745882a65dd477754e15752 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Thu, 11 Jul 2024 14:17:24 -0400 Subject: [PATCH 12/28] remove test branch from action --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index b73e8f5e8..9474b8ca5 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -4,7 +4,7 @@ on: push: branches: [main, pre-release] pull_request: - branches: [main, pre-release, 19/kcov] + branches: [main, pre-release] jobs: lint: From a57378f717d00fe9de0abd1d040245957419863f Mon Sep 17 00:00:00 2001 From: x19 <100000306+0xNineteen@users.noreply.github.com> Date: Mon, 15 Jul 2024 19:43:37 -0400 Subject: [PATCH 13/28] improv(gossip,accountsdb): improve test coverage on important methods (#195) * running kcov on the unit tests lead to finding important code paths we werent testing - this pr adds these units tests - this includes tests for both gossip and accounts-db --- .vscode/launch.json | 14 ++ .vscode/tasks.json | 13 ++ docs/CONTRIBUTING.md | 47 ++++ scripts/kcov_fuzz_gossip.sh | 2 +- src/accountsdb/db.zig | 45 ++-- src/accountsdb/download.zig | 24 ++- src/accountsdb/index.zig | 84 +++++++- src/gossip/data.zig | 52 ++++- src/gossip/fuzz.zig | 34 ++- src/gossip/service.zig | 412 ++++++++++++++++++++++++++++++------ src/sync/mux.zig | 4 +- 11 files changed, 632 insertions(+), 99 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..f90dbd997 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "lldb", + "request": "launch", + "name": "Debug Tests", + "program": "${workspaceFolder}/zig-out/bin/test", + "args": [], + "cwd": "${workspaceFolder}", + "preLaunchTask": "zig build" + } + ] + } \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 000000000..be24a0792 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,13 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "zig build", + "type": "shell", + "command": "zig", + "args": [ + "build" + ], + } + ] +} \ No newline at end of file diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 09284158e..3e04b036c 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -10,6 +10,53 @@ See the [readme](../readme.md#-setup). ## Style Guide +### Imports + +#### Sig Dependencies +By convention, all internal dependencies should be defined as aliases of fully qualified paths from the root module. For example, within 'src/gossip/message.zig' we should import types from 'src/gossip/data.zig' in the following manner: +```zig +const sig = @import("../lib.zig"); + +const GossipData = sig.gossip.data.GossipData; +``` + +#### Grouping +Group import statements and alias definitions into the following categories, separated by a newline: + +1. @import statements +2. namespace aliases +3. struct aliases +4. function aliases +5. constant aliases + +If it improves clarity, split groups into external and sig imports/aliases, otherwise list external imports/aliases before sig imports/aliases. Within groups, try to follow alphabetical order with respect to fully qualified namespace i.e. +```zig +// Import statements +const std = @import("std"); +const sig = @import("../lib.zig"); + +// Namespace aliases +const bincode = sig.bincode; +const pull_request = sig.gossip.pull_request; +const pull_response = sig.gossip.pull_response; + +// External aliases +const EndPoint = network.EndPoint; +const UdpSocket = network.Socket; +const ArrayList = std.ArrayList; +const AtomicBool = std.atomic.Value(bool); +const KeyPair = std.crypto.sign.Ed25519.KeyPair; +const Thread = std.Thread; + +// Sig aliases +const Hash = sig.core.Hash; +const Pubkey = sig.core.Pubkey; +const Entry = sig.trace.entry.Entry; +const Logger = sig.trace.log.Logger; +const EchoServer = sig.net.echo.Server; +const Packet = sig.net.Packet; +``` + ### Optional Values - optional values should be prepended with `maybe_` and unwrapping should follow the `if (maybe_x) |x| {}` format diff --git a/scripts/kcov_fuzz_gossip.sh b/scripts/kcov_fuzz_gossip.sh index 9d2e5c022..5d34c2401 100644 --- a/scripts/kcov_fuzz_gossip.sh +++ b/scripts/kcov_fuzz_gossip.sh @@ -23,7 +23,7 @@ kcov \ --include-pattern=src/gossip/ \ --exclude-pattern=$HOME/.cache \ kcov-output/ \ - ./zig-out/bin/fuzz gossip 19 4_000 + ./zig-out/bin/fuzz gossip 19 50_000 # open report echo "=> Opening kcov-output/index.html" diff --git a/src/accountsdb/db.zig b/src/accountsdb/db.zig index 7f7372b69..909e7a13c 100644 --- a/src/accountsdb/db.zig +++ b/src/accountsdb/db.zig @@ -428,8 +428,13 @@ pub const AccountsDB = struct { } const counting_alloc_ptr = try self.allocator.create(CountingAllocator); + defer { + if (counting_alloc_ptr.alloc_count == 0) { + self.allocator.destroy(counting_alloc_ptr); + } + } counting_alloc_ptr.* = .{ - .deinit_self_allocator = self.allocator, + .self_allocator = self.allocator, .references = references, .alloc_count = 0, }; @@ -2074,7 +2079,7 @@ pub const AccountsDB = struct { /// multiple different ArrayLists -- alloc and resize are not implemented. const CountingAllocator = struct { /// optional heap allocator to deinit the ptr on deinit - deinit_self_allocator: std.mem.Allocator, + self_allocator: std.mem.Allocator, references: ArrayList(AccountRef), alloc_count: usize, @@ -2099,7 +2104,7 @@ const CountingAllocator = struct { } self.references.deinit(); // free pointer - self.deinit_self_allocator.destroy(self); + self.self_allocator.destroy(self); } pub fn alloc(ctx: *anyopaque, n: usize, log2_align: u8, return_address: usize) ?[*]u8 { @@ -2132,7 +2137,7 @@ const CountingAllocator = struct { } }; -fn loadTestAccountsDB(allocator: std.mem.Allocator, use_disk: bool) !struct { AccountsDB, AllSnapshotFields } { +fn loadTestAccountsDB(allocator: std.mem.Allocator, use_disk: bool, n_threads: usize) !struct { AccountsDB, AllSnapshotFields } { const dir_path = "test_data"; const dir = try std.fs.cwd().openDir(dir_path, .{ .iterate = true }); @@ -2142,7 +2147,7 @@ fn loadTestAccountsDB(allocator: std.mem.Allocator, use_disk: bool) !struct { Ac .noop, "test_data/snapshot-10-6ExseAZAVJsAZjhimxHTR7N8p6VGXiDNdsajYh1ipjAD.tar.zst", dir, - 1, + n_threads, true, ); try parallelUnpackZstdTarBall( @@ -2150,7 +2155,7 @@ fn loadTestAccountsDB(allocator: std.mem.Allocator, use_disk: bool) !struct { Ac .noop, "test_data/incremental-snapshot-10-25-GXgKvm3NMAPgGdv2verVaNXmKTHQgfy2TAxLVEfAvdCS.tar.zst", dir, - 1, + n_threads, true, ); @@ -2178,7 +2183,7 @@ fn loadTestAccountsDB(allocator: std.mem.Allocator, use_disk: bool) !struct { Ac try accounts_db.loadFromSnapshot( snapshot.accounts_db_fields, accounts_path, - 1, + @intCast(n_threads), allocator, ); @@ -2191,7 +2196,7 @@ fn loadTestAccountsDB(allocator: std.mem.Allocator, use_disk: bool) !struct { Ac test "write and read an account" { const allocator = std.testing.allocator; - var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false); + var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false, 1); defer { accounts_db.deinit(true); snapshots.deinit(allocator); @@ -2228,7 +2233,23 @@ test "write and read an account" { test "load and validate from test snapshot using disk index" { const allocator = std.testing.allocator; - var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false); + var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false, 1); + defer { + accounts_db.deinit(true); + snapshots.deinit(allocator); + } + + try accounts_db.validateLoadFromSnapshot( + snapshots.incremental.?.bank_fields.incremental_snapshot_persistence, + snapshots.full.bank_fields.slot, + snapshots.full.bank_fields.capitalization, + ); +} + +test "load and validate from test snapshot parallel" { + const allocator = std.testing.allocator; + + var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false, 2); defer { accounts_db.deinit(true); snapshots.deinit(allocator); @@ -2244,7 +2265,7 @@ test "load and validate from test snapshot using disk index" { test "load and validate from test snapshot" { const allocator = std.testing.allocator; - var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false); + var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false, 1); defer { accounts_db.deinit(true); snapshots.deinit(allocator); @@ -2260,7 +2281,7 @@ test "load and validate from test snapshot" { test "load clock sysvar" { const allocator = std.testing.allocator; - var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false); + var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false, 1); defer { accounts_db.deinit(true); snapshots.deinit(allocator); @@ -2280,7 +2301,7 @@ test "load clock sysvar" { test "load other sysvars" { const allocator = std.testing.allocator; - var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false); + var accounts_db, var snapshots = try loadTestAccountsDB(std.testing.allocator, false, 1); defer { accounts_db.deinit(true); snapshots.deinit(allocator); diff --git a/src/accountsdb/download.zig b/src/accountsdb/download.zig index a347c0cea..4d9d010f5 100644 --- a/src/accountsdb/download.zig +++ b/src/accountsdb/download.zig @@ -2,14 +2,15 @@ const std = @import("std"); const curl = @import("curl"); -const Pubkey = @import("../core/pubkey.zig").Pubkey; -const gossip = @import("../gossip/service.zig"); -const GossipService = gossip.GossipService; -const ContactInfo = @import("../gossip/data.zig").ContactInfo; -const GossipTable = @import("../gossip/table.zig").GossipTable; -const SlotAndHash = @import("./snapshots.zig").SlotAndHash; -const Logger = @import("../trace/log.zig").Logger; -const Hash = @import("../core/hash.zig").Hash; +const sig = @import("../lib.zig"); + +const Pubkey = sig.core.pubkey.Pubkey; +const GossipService = sig.gossip.GossipService; +const ContactInfo = sig.gossip.data.ContactInfo; +const GossipTable = sig.gossip.table.GossipTable; +const SlotAndHash = sig.accounts_db.snapshots.SlotAndHash; +const Logger = sig.trace.log.Logger; +const Hash = sig.core.hash.Hash; const DOWNLOAD_PROGRESS_UPDATES_NS = 30 * std.time.ns_per_s; @@ -463,9 +464,10 @@ pub fn downloadFile( } } -const ThreadPool = @import("../sync/thread_pool.zig").ThreadPool; -const LegacyContactInfo = @import("../gossip/data.zig").LegacyContactInfo; -const SignedGossipData = @import("../gossip/data.zig").SignedGossipData; +const ThreadPool = sig.sync.thread_pool.ThreadPool; +const LegacyContactInfo = sig.gossip.data.LegacyContactInfo; +const SignedGossipData = sig.gossip.data.SignedGossipData; + const KeyPair = std.crypto.sign.Ed25519.KeyPair; test "accounts_db.download: test remove untrusted peers" { diff --git a/src/accountsdb/index.zig b/src/accountsdb/index.zig index 9778d3801..96066d911 100644 --- a/src/accountsdb/index.zig +++ b/src/accountsdb/index.zig @@ -227,6 +227,8 @@ pub const AccountIndex = struct { } /// adds a reference to the index + /// NOTE: this should only be used when you know the reference does not exist + /// because we never want duplicate state references in the index pub fn indexRef(self: *Self, account_ref: *AccountRef) void { const bin_rw = self.getBinFromPubkey(&account_ref.pubkey); @@ -1059,7 +1061,81 @@ pub const DiskMemoryAllocator = struct { } }; -test "tests disk allocator on hashmaps" { +test "swissmap resize" { + var map = SwissMap(Pubkey, AccountRef, pubkey_hash, pubkey_eql).init(std.testing.allocator); + defer map.deinit(); + + try map.ensureTotalCapacity(100); + + const ref = AccountRef.default(); + map.putAssumeCapacity(Pubkey.default(), ref); + + // this will resize the map with the key still in there + try map.ensureTotalCapacity(200); + const get_ref = map.get(Pubkey.default()) orelse return error.MissingAccount; + try std.testing.expect(std.meta.eql(get_ref, ref)); +} + +test "account index update/remove reference" { + const allocator = std.testing.allocator; + + var index = try AccountIndex.init(allocator, allocator, 8); + defer index.deinit(true); + try index.ensureTotalCapacity(100); + + // pubkey -> a + var ref_a = AccountRef.default(); + index.indexRef(&ref_a); + + var ref_b = AccountRef.default(); + ref_b.slot = 1; + index.indexRef(&ref_b); + + // make sure indexRef works + { + var ref_head_rw = index.getReference(&ref_a.pubkey).?; + const ref_head, var ref_head_lg = ref_head_rw.writeWithLock(); + ref_head_lg.unlock(); + _, const ref_max = ref_head.highestRootedSlot(10); + try std.testing.expect(ref_max == 1); + } + + // update the tail + try std.testing.expect(ref_b.location == .Cache); + var ref_b2 = ref_b; + ref_b2.location = .{ .File = .{ + .file_id = FileId.fromInt(@intCast(1)), + .offset = 10, + } }; + try index.updateReference(&ref_b.pubkey, 1, &ref_b2); + { + const ref = index.getReferenceSlot(&ref_a.pubkey, 1).?; + try std.testing.expect(ref.location == .File); + } + + // update the head + var ref_a2 = ref_a; + ref_a2.location = .{ .File = .{ + .file_id = FileId.fromInt(@intCast(1)), + .offset = 20, + } }; + try index.updateReference(&ref_a.pubkey, 0, &ref_a2); + { + const ref = index.getReferenceSlot(&ref_a.pubkey, 0).?; + try std.testing.expect(ref.location == .File); + } + + // remove the head + try index.removeReference(&ref_a2.pubkey, 0); + try std.testing.expect(!index.exists(&ref_a2.pubkey, 0)); + try std.testing.expect(index.exists(&ref_b2.pubkey, 1)); + + // remove the tail + try index.removeReference(&ref_b2.pubkey, 1); + try std.testing.expect(!index.exists(&ref_b2.pubkey, 1)); +} + +test "disk allocator on hashmaps" { var allocator = DiskMemoryAllocator.init("test_data/tmp"); defer allocator.deinit(null); @@ -1076,7 +1152,7 @@ test "tests disk allocator on hashmaps" { try std.testing.expect(std.meta.eql(r, ref)); } -test "tests disk allocator" { +test "disk allocator" { var allocator = DiskMemoryAllocator.init("test_data/tmp"); var disk_account_refs = try ArrayList(AccountRef).initCapacity( @@ -1121,7 +1197,7 @@ test "tests disk allocator" { try std.testing.expect(did_error); } -test "tests swissmap read/write/delete" { +test "swissmap read/write/delete" { const allocator = std.testing.allocator; const n_accounts = 10_000; @@ -1172,7 +1248,7 @@ test "tests swissmap read/write/delete" { } } -test "tests swissmap read/write" { +test "swissmap read/write" { const allocator = std.testing.allocator; const n_accounts = 10_000; diff --git a/src/gossip/data.zig b/src/gossip/data.zig index f285b49f5..304aee915 100644 --- a/src/gossip/data.zig +++ b/src/gossip/data.zig @@ -94,7 +94,10 @@ pub const SignedGossipData = struct { /// only used in tests pub fn randomWithIndex(rng: std.rand.Random, keypair: *const KeyPair, index: usize) !Self { - return try initSigned(GossipData.randomFromIndex(rng, index), keypair); + var data = GossipData.randomFromIndex(rng, index); + const pubkey = Pubkey.fromPublicKey(&keypair.public_key); + data.setId(pubkey); + return try initSigned(data, keypair); } pub fn sign(self: *Self, keypair: *const KeyPair) !void { @@ -159,6 +162,53 @@ pub const SignedGossipData = struct { }; } + pub fn wallclockPtr(self: *Self) *u64 { + return switch (self.data) { + .LegacyContactInfo => |*v| { + return &v.wallclock; + }, + .Vote => |*v| { + return &v[1].wallclock; + }, + .LowestSlot => |*v| { + return &v[1].wallclock; + }, + .LegacySnapshotHashes => |*v| { + return &v.wallclock; + }, + .AccountsHashes => |*v| { + return &v.wallclock; + }, + .EpochSlots => |*v| { + return &v[1].wallclock; + }, + .LegacyVersion => |*v| { + return &v.wallclock; + }, + .Version => |*v| { + return &v.wallclock; + }, + .NodeInstance => |*v| { + return &v.wallclock; + }, + .DuplicateShred => |*v| { + return &v[1].wallclock; + }, + .SnapshotHashes => |*v| { + return &v.wallclock; + }, + .ContactInfo => |*v| { + return &v.wallclock; + }, + .RestartLastVotedForkSlots => |*v| { + return &v.wallclock; + }, + .RestartHeaviestFork => |*v| { + return &v.wallclock; + }, + }; + } + pub fn wallclock(self: *const Self) u64 { return switch (self.data) { .LegacyContactInfo => |*v| { diff --git a/src/gossip/fuzz.zig b/src/gossip/fuzz.zig index 6a683b641..038b6dd10 100644 --- a/src/gossip/fuzz.zig +++ b/src/gossip/fuzz.zig @@ -126,16 +126,17 @@ pub fn randomPullResponse(rng: std.rand.Random, keypair: *const KeyPair, to_addr return packets; } +/// note the contact info must have responded to a ping +/// for a valid pull response to be generated pub fn randomPullRequest( allocator: std.mem.Allocator, + contact_info: LegacyContactInfo, rng: std.rand.Random, keypair: *const KeyPair, to_addr: EndPoint, ) !Packet { const value = try SignedGossipData.initSigned(.{ - .LegacyContactInfo = LegacyContactInfo.default( - Pubkey.fromPublicKey(&keypair.public_key), - ), + .LegacyContactInfo = contact_info, }, keypair); return randomPullRequestWithContactInfo( @@ -261,8 +262,9 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { var gossip_client, const packet_channel, var handle = blk: { if (fuzz_sig) { + // this is who we blast messages at var client_keypair = try KeyPair.create(null); - const client_address = SocketAddr.initIpv4(.{ 127, 0, 0, 1 }, 9998); + const client_address = SocketAddr.initIpv4(.{ 127, 0, 0, 1 }, 9988); const client_pubkey = Pubkey.fromPublicKey(&client_keypair.public_key); var client_contact_info = ContactInfo.init(allocator, client_pubkey, 0, 19); try client_contact_info.setSocket(.gossip, client_address); @@ -284,6 +286,27 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { }, }); + // this is used to respond to pings + var gossip_service_fuzzer = try GossipService.init( + allocator, + allocator, + fuzz_contact_info, + fuzz_keypair, + (&SocketAddr.fromEndpoint(&to_entrypoint))[0..1], // we only want to communicate with one node + &exit, + .noop, // no logs + ); + + // this is mainly used to just send packets through the fuzzer + // but we also want to respond to pings so we need to run the full gossip service + const fuzz_handle = try std.Thread.spawn(.{}, GossipService.run, .{ + &gossip_service_fuzzer, .{ + .spy_node = true, + .dump = false, + }, + }); + fuzz_handle.detach(); + break :blk .{ gossip_service_client, gossip_service_client.packet_incoming_channel, client_handle }; } else { var gossip_service_fuzzer = try GossipService.init( @@ -323,6 +346,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { maybe_max_messages, &rng, &fuzz_keypair, + LegacyContactInfo.fromContactInfo(&fuzz_contact_info), to_entrypoint, packet_channel, ); @@ -341,6 +365,7 @@ pub fn fuzz( maybe_max_messages: ?usize, rng: *std.rand.DefaultPrng, keypair: *const KeyPair, + contact_info: LegacyContactInfo, to_endpoint: EndPoint, outgoing_channel: *sig.sync.Channel(std.ArrayList(Packet)), ) !void { @@ -391,6 +416,7 @@ pub fn fuzz( // send pull request const packet = randomPullRequest( allocator, + contact_info, rng.random(), keypair, to_endpoint, diff --git a/src/gossip/service.zig b/src/gossip/service.zig index 0ca08f177..53f844b84 100644 --- a/src/gossip/service.zig +++ b/src/gossip/service.zig @@ -274,8 +274,8 @@ pub const GossipService = struct { } pub const RunThreadsParams = struct { - spy_node: bool, - dump: bool, + spy_node: bool = false, + dump: bool = false, }; /// starts gossip and blocks until it exits @@ -1241,6 +1241,7 @@ pub const GossipService = struct { const result = try ping_cache.filterValidPeers(self.allocator, self.my_keypair, peers.items); defer result.pings.deinit(); + try self.sendPings(result.pings); break :blk result.valid_peers; @@ -1253,7 +1254,6 @@ pub const GossipService = struct { // create the pull requests const n_valid_requests = valid_indexs.items.len; - const tasks = try self.allocator.alloc(PullRequestTask, n_valid_requests); defer { for (tasks) |*task| task.deinit(); @@ -2075,7 +2075,74 @@ pub fn chunkValuesIntoPacketIndexes( return packet_indexs; } -test "gossip.service: build messages startup and shutdown" { +test "handle pong messages" { + const allocator = std.testing.allocator; + + var exit = AtomicBool.init(false); + var keypair = try KeyPair.create([_]u8{1} ** 32); + const pubkey = Pubkey.fromPublicKey(&keypair.public_key); + const contact_info = try localhostTestContactInfo(pubkey); + + var gossip_service = try GossipService.init( + allocator, + allocator, + contact_info, + keypair, + null, + &exit, + .noop, + ); + defer gossip_service.deinit(); + + const endpoint = try allocator.create(EndPoint); + defer allocator.destroy(endpoint); + endpoint.* = try EndPoint.parse("127.0.0.1:8000"); + + // send out a ping to the endpoint + const other_keypair = try KeyPair.create(null); + const other_pubkey = Pubkey.fromPublicKey(&other_keypair.public_key); + const pubkey_and_addr = sig.gossip.ping_pong.PubkeyAndSocketAddr{ + .pubkey = other_pubkey, + .socket_addr = SocketAddr.fromEndpoint(endpoint), + }; + + const ping = blk: { + const ping_cache_ptr_ptr, var ping_cache_lg = gossip_service.ping_cache_rw.writeWithLock(); + defer ping_cache_lg.unlock(); + + const now = try std.time.Instant.now(); + const ping = ping_cache_ptr_ptr.*.maybePing(now, pubkey_and_addr, &keypair); + break :blk ping.?; + }; + + // recv and matching pong + var pong_messages = ArrayList(GossipService.PongMessage).init(allocator); + defer pong_messages.deinit(); + + const pong = try allocator.create(Pong); + defer allocator.destroy(pong); + pong.* = try Pong.init(&ping, &other_keypair); + + try pong_messages.append(.{ + .from_endpoint = endpoint, + .pong = pong, + }); + + // main method to test + gossip_service.handleBatchPongMessages(&pong_messages); + + // make sure it passes the ping check + { + const ping_cache_ptr_ptr, var ping_cache_lg = gossip_service.ping_cache_rw.writeWithLock(); + defer ping_cache_lg.unlock(); + + const now = try std.time.Instant.now(); + const r = ping_cache_ptr_ptr.*.check(now, pubkey_and_addr, &keypair); + std.debug.assert(r.passes_ping_check); + } +} + +test "build messages startup and shutdown" { const allocator = std.testing.allocator; var exit = AtomicBool.init(false); var my_keypair = try KeyPair.create([_]u8{1} ** 32); @@ -2127,7 +2194,7 @@ test "gossip.service: build messages startup and shutdown" { build_messages_handle.join(); } -test "gossip.service: tests handling prune messages" { +test "handling prune messages" { var rng = std.rand.DefaultPrng.init(91); const allocator = std.testing.allocator; @@ -2204,7 +2271,7 @@ test "gossip.service: tests handling prune messages" { as_lock2.unlock(); } -test "gossip.service: tests handling pull responses" { +test "handling pull responses" { const allocator = std.testing.allocator; var rng = std.rand.DefaultPrng.init(91); @@ -2264,14 +2331,143 @@ test "gossip.service: tests handling pull responses" { lg.unlock(); } -test "gossip.service: tests handle pull request" { +test "handle old prune & pull request message" { + const allocator = std.testing.allocator; + + var random = std.rand.DefaultPrng.init(91); + const rng = random.random(); + + var exit = AtomicBool.init(false); + var my_keypair = try KeyPair.create([_]u8{1} ** 32); + const my_pubkey = Pubkey.fromPublicKey(&my_keypair.public_key); + var contact_info = try localhostTestContactInfo(my_pubkey); + contact_info.shred_version = 99; + + var gossip_service = try allocator.create(GossipService); + gossip_service.* = try GossipService.init( + allocator, + allocator, + contact_info, + my_keypair, + null, + &exit, + .noop, + ); + defer { + gossip_service.deinit(); + allocator.destroy(gossip_service); + } + + const prune_pubkey = Pubkey.random(rng); + const prune_data = PruneData.init(prune_pubkey, &.{}, my_pubkey, 0); + const message = .{ + .PruneMessage = .{ prune_pubkey, prune_data }, + }; + + const handle = try std.Thread.spawn(.{}, GossipService.run, .{ + gossip_service, + .{}, + }); + + try gossip_service.verified_incoming_channel.send(.{ + .from_endpoint = try EndPoint.parse("127.0.0.1:8000"), + .message = message, + }); + + var dropped_old_prune = false; + for (0..10) |_| { + const v = gossip_service.stats.prune_messages_dropped.get(); + if (v > 0) { + dropped_old_prune = true; + break; + } + std.time.sleep(std.time.ns_per_s * 1); + } + try std.testing.expect(dropped_old_prune); + + // send a pull request message + var pull_requests = ArrayList(GossipService.PullRequestMessage).init(allocator); + defer pull_requests.deinit(); + + // only consider the first bit so we know well get matches + const Bloom = @import("../bloom/bloom.zig").Bloom; + + const N_FILTER_BITS = 1; + const bloom = try Bloom.random(allocator, rng, 100, 0.1, N_FILTER_BITS); + + const filter = GossipPullFilter{ + .filter = bloom, + // this is why we wanted atleast one hash_bit == 1 + .mask = (~@as(usize, 0)) >> N_FILTER_BITS, + .mask_bits = N_FILTER_BITS, + }; + var rando_keypair = try KeyPair.create([_]u8{22} ** 32); + + var ci = try SignedGossipData.randomWithIndex(rng, &rando_keypair, 0); + const addr = SocketAddr.random(rng); + ci.data.LegacyContactInfo.gossip = addr; + ci.data.LegacyContactInfo.shred_version = 100; // DIFFERENT SHRED VERSION + try ci.sign(&rando_keypair); + + try gossip_service.verified_incoming_channel.send(.{ + .from_endpoint = try EndPoint.parse("127.0.0.1:8000"), + .message = GossipMessage{ + .PullRequest = .{ filter, ci }, + }, + }); + + var dropped_old_req = false; + for (0..5) |_| { + const v = gossip_service.stats.pull_requests_dropped.get(); + if (v == 1) { + dropped_old_req = true; + break; + } + std.time.sleep(std.time.ns_per_s * 1); + } + try std.testing.expect(dropped_old_req); + + // DIFFERENT GOSSIP DATA (NOT A LEGACY CONTACT INFO) + // NOTE: need fresh bloom filter because it gets deinit + const bloom2 = try Bloom.random(allocator, rng, 100, 0.1, N_FILTER_BITS); + const filter2 = GossipPullFilter{ + .filter = bloom2, + // this is why we wanted atleast one hash_bit == 1 + .mask = (~@as(usize, 0)) >> N_FILTER_BITS, + .mask_bits = N_FILTER_BITS, + }; + const data = try SignedGossipData.randomWithIndex(rng, &rando_keypair, 2); + try gossip_service.verified_incoming_channel.send(.{ + .from_endpoint = try EndPoint.parse("127.0.0.1:8000"), + .message = GossipMessage{ + .PullRequest = .{ filter2, data }, + }, + }); + + dropped_old_req = false; + for (0..5) |_| { + const v = gossip_service.stats.pull_requests_dropped.get(); + if (v == 2) { + dropped_old_req = true; + break; + } + std.time.sleep(std.time.ns_per_s * 1); + } + try std.testing.expect(dropped_old_req); + + exit.store(true, .unordered); + handle.join(); +} + +test "handle pull request" { const allocator = std.testing.allocator; var rng = std.rand.DefaultPrng.init(91); var exit = AtomicBool.init(false); var my_keypair = try KeyPair.create([_]u8{1} ** 32); const my_pubkey = Pubkey.fromPublicKey(&my_keypair.public_key); - const contact_info = try localhostTestContactInfo(my_pubkey); + var contact_info = try localhostTestContactInfo(my_pubkey); + contact_info.shred_version = 99; var logger = Logger.init(std.testing.allocator, Logger.TEST_DEFAULT_LEVEL); defer logger.deinit(); @@ -2289,76 +2485,97 @@ test "gossip.service: tests handle pull request" { defer gossip_service.deinit(); // insert random values - var gossip_table_lock = gossip_service.gossip_table_rw.write(); - var gossip_table: *GossipTable = gossip_table_lock.mut(); const N_FILTER_BITS = 1; + { + const gossip_table, var gossip_table_lock = gossip_service.gossip_table_rw.writeWithLock(); + defer gossip_table_lock.unlock(); - var done = false; - var count: usize = 0; - while (!done) { - count += 1; - for (0..5) |_| { - var value = try SignedGossipData.randomWithIndex(rng.random(), &my_keypair, 0); - value.data.LegacyContactInfo.id = Pubkey.random(rng.random()); - try gossip_table.insert(value, getWallclockMs()); - - // make sure well get a response from the request - const vers_value = gossip_table.get(value.label()).?; - const hash_bits = pull_request.hashToU64(&vers_value.value_hash) >> (64 - N_FILTER_BITS); - if (hash_bits == 0) { - done = true; + var done = false; + var count: usize = 0; + while (!done) { + count += 1; + for (0..10) |_| { + var value = try SignedGossipData.randomWithIndex(rng.random(), &(try KeyPair.create(null)), 0); + try gossip_table.insert(value, getWallclockMs()); + + // make sure well get a response from the request + const vers_value = gossip_table.get(value.label()).?; + const hash_bits = pull_request.hashToU64(&vers_value.value_hash) >> (64 - N_FILTER_BITS); + if (hash_bits == 1) { + done = true; + } + } + if (count > 5) { + @panic("something went wrong"); } - } - - if (count > 5) { - @panic("something went wrong"); } } - gossip_table_lock.unlock(); - - const Bloom = @import("../bloom/bloom.zig").Bloom; - // only consider the first bit so we know well get matches - var prng = std.Random.Xoshiro256.init(@intCast(std.time.milliTimestamp())); - var bloom = try Bloom.random(allocator, prng.random(), 100, 0.1, N_FILTER_BITS); - defer bloom.deinit(); + // make sure we get a response by setting a valid pong response var rando_keypair = try KeyPair.create([_]u8{22} ** 32); const rando_pubkey = Pubkey.fromPublicKey(&rando_keypair.public_key); - var ci_data = GossipData.randomFromIndex(rng.random(), 0); - ci_data.LegacyContactInfo.id = rando_pubkey; - const gossip_value = try SignedGossipData.initSigned(ci_data, &rando_keypair); - const addr = SocketAddr.random(rng.random()); - var ping_lock = gossip_service.ping_cache_rw.write(); - var ping_cache: *PingCache = ping_lock.mut(); - ping_cache._setPong(rando_pubkey, addr); - ping_lock.unlock(); + var ci = try SignedGossipData.randomWithIndex(rng.random(), &rando_keypair, 0); + ci.data.LegacyContactInfo.gossip = addr; + ci.data.LegacyContactInfo.shred_version = 99; + try ci.sign(&rando_keypair); + + { + var ping_lock = gossip_service.ping_cache_rw.write(); + var ping_cache: *PingCache = ping_lock.mut(); + ping_cache._setPong(rando_pubkey, addr); + ping_lock.unlock(); + } + + // only consider the first bit so we know well get matches + const Bloom = @import("../bloom/bloom.zig").Bloom; + var bloom = try Bloom.random(allocator, rng.random(), 100, 0.1, N_FILTER_BITS); + defer bloom.deinit(); const filter = GossipPullFilter{ .filter = bloom, + // this is why we wanted atleast one hash_bit == 1 .mask = (~@as(usize, 0)) >> N_FILTER_BITS, .mask_bits = N_FILTER_BITS, }; var pull_requests = ArrayList(GossipService.PullRequestMessage).init(allocator); defer pull_requests.deinit(); + try pull_requests.append(GossipService.PullRequestMessage{ .filter = filter, - .from_endpoint = (contact_info.getSocket(.gossip) orelse unreachable).toEndpoint(), - .value = gossip_value, + .from_endpoint = addr.toEndpoint(), + .value = ci, }); try gossip_service.handleBatchPullRequest(pull_requests); + { - var packet_lg = gossip_service.packet_outgoing_channel.buffer.lock(); - defer packet_lg.unlock(); - const outgoing_packets: *const ArrayList(PacketBatch) = packet_lg.get(); - try std.testing.expect(outgoing_packets.items.len > 0); + const outgoing_packets = gossip_service.packet_outgoing_channel; + const response_packets = outgoing_packets.receive().?; + defer { + for (response_packets.items) |packet| { + bincode.free(allocator, packet); + } + response_packets.deinit(); + } + const response_packet = response_packets.items[0]; + + const message = try bincode.readFromSlice( + allocator, + GossipMessage, + response_packet.data[0..response_packet.size], + bincode.Params.standard, + ); + defer bincode.free(allocator, message); + + const values = message.PullResponse[1]; + try std.testing.expect(values.len > 0); } } -test "gossip.service: test build prune messages and handle push messages" { +test "test build prune messages and handle push messages" { const allocator = std.testing.allocator; var rng = std.rand.DefaultPrng.init(91); var exit = AtomicBool.init(false); @@ -2446,7 +2663,7 @@ test "gossip.service: test build prune messages and handle push messages" { try std.testing.expectEqual(prune_data.prunes.len, 10); } -test "gossip.service: test build pull requests" { +test "test build pull requests" { const allocator = std.testing.allocator; var rng = std.rand.DefaultPrng.init(91); var exit = AtomicBool.init(false); @@ -2470,17 +2687,25 @@ test "gossip.service: test build pull requests" { defer gossip_service.deinit(); // insert peers to send msgs to - var keypair = try KeyPair.create([_]u8{1} ** 32); - var ping_lock = gossip_service.ping_cache_rw.write(); - var lg = gossip_service.gossip_table_rw.write(); - for (0..20) |_| { - const value = try SignedGossipData.randomWithIndex(rng.random(), &keypair, 0); - try lg.mut().insert(value, getWallclockMs()); + { + var ping_lock = gossip_service.ping_cache_rw.write(); + var lg = gossip_service.gossip_table_rw.write(); + defer { + lg.unlock(); + ping_lock.unlock(); + } + var pc: *PingCache = ping_lock.mut(); - pc._setPong(value.data.LegacyContactInfo.id, value.data.LegacyContactInfo.gossip); + const now = getWallclockMs(); + for (0..20) |i| { + var rando_keypair = try KeyPair.create(null); + var value = try SignedGossipData.randomWithIndex(rng.random(), &rando_keypair, 0); + value.wallclockPtr().* = now + 10 * i; + + try lg.mut().insert(value, now + 10 * i); + pc._setPong(value.data.LegacyContactInfo.id, value.data.LegacyContactInfo.gossip); + } } - lg.unlock(); - ping_lock.unlock(); const maybe_failing_seed: u64 = @intCast(std.time.milliTimestamp()); var maybe_failing_prng = std.Random.Xoshiro256.init(maybe_failing_seed); @@ -2494,7 +2719,7 @@ test "gossip.service: test build pull requests" { try std.testing.expect(!std.mem.eql(u8, &packets.items[0].data, &packets.items[1].data)); } -test "gossip.service: test build push messages" { +test "test build push messages" { const allocator = std.testing.allocator; var rng = std.rand.DefaultPrng.init(91); var exit = AtomicBool.init(false); @@ -2571,7 +2796,65 @@ test "gossip.service: test build push messages" { try std.testing.expect(msgs2.items.len == 0); } -test "gossip.gossip_service: test packet verification" { +test "test large push messages" { + const allocator = std.testing.allocator; + var rng = std.rand.DefaultPrng.init(91); + var exit = AtomicBool.init(false); + var my_keypair = try KeyPair.create([_]u8{1} ** 32); + const my_pubkey = Pubkey.fromPublicKey(&my_keypair.public_key); + const contact_info = try localhostTestContactInfo(my_pubkey); + + var logger = Logger.init(std.testing.allocator, Logger.TEST_DEFAULT_LEVEL); + defer logger.deinit(); + logger.spawn(); + + var gossip_service = try GossipService.init( + allocator, + allocator, + contact_info, + my_keypair, + null, + &exit, + logger, + ); + defer gossip_service.deinit(); + + // add some peers + var peers = ArrayList(ContactInfo).init(allocator); + defer { + for (peers.items) |p| p.deinit(); + peers.deinit(); + } + var lock_guard = gossip_service.gossip_table_rw.write(); + for (0..2_000) |_| { + var keypair = try KeyPair.create(null); + var value = try SignedGossipData.randomWithIndex(rng.random(), &keypair, 0); // contact info + try lock_guard.mut().insert(value, getWallclockMs()); + try peers.append(try value.data.LegacyContactInfo.toContactInfo(allocator)); + } + lock_guard.unlock(); + + // set the active set + { + var as_lock = gossip_service.active_set_rw.write(); + var as: *ActiveSet = as_lock.mut(); + const prng_seed: u64 = @intCast(std.time.milliTimestamp()); + var prng = std.Random.Xoshiro256.init(prng_seed); + try as.rotate(prng.random(), peers.items); + as_lock.unlock(); + try std.testing.expect(as.len() > 0); + } + + var cursor: u64 = 0; + const msgs = try gossip_service.buildPushMessages(&cursor); + defer { + for (msgs.items) |*msg| msg.deinit(); + msgs.deinit(); + } + try std.testing.expect(msgs.items.len < 2_000); +} + +test "test packet verification" { const allocator = std.testing.allocator; var exit = AtomicBool.init(false); var keypair = try KeyPair.create([_]u8{1} ** 32); @@ -2709,7 +2992,7 @@ test "gossip.gossip_service: test packet verification" { packet_verifier_handle.join(); } -test "gossip.gossip_service: process contact info push packet" { +test "process contact info push packet" { const allocator = std.testing.allocator; const gossip_value_allocator = allocator; var exit = AtomicBool.init(false); @@ -2813,7 +3096,7 @@ test "gossip.gossip_service: process contact info push packet" { packet_handle.join(); } -test "gossip.service: init, exit, and deinit" { +test "init, exit, and deinit" { const gossip_address = SocketAddr.initIpv4(.{ 127, 0, 0, 1 }, 0); const my_keypair = try KeyPair.create(null); var rng = std.rand.DefaultPrng.init(getWallclockMs()); @@ -3110,6 +3393,7 @@ pub const BenchmarkGossipServicePullRequests = struct { for (0..bench_args.n_pull_requests) |_| { const packet = try fuzz.randomPullRequest( allocator, + LegacyContactInfo.fromContactInfo(&contact_info_recv), rng, &recv_keypair, address.toEndpoint(), diff --git a/src/sync/mux.zig b/src/sync/mux.zig index d6e2bf934..f5670843b 100644 --- a/src/sync/mux.zig +++ b/src/sync/mux.zig @@ -252,13 +252,13 @@ pub fn RwMux(comptime T: type) type { }; } - pub fn readWithLock(self: *Self) struct { *const T, RLockGuard } { + pub fn readWithLock(self: *Self) struct { Const(T), RLockGuard } { var lock_guard = self.read(); const t = lock_guard.get(); return .{ t, lock_guard }; } - pub fn writeWithLock(self: *Self) struct { *T, WLockGuard } { + pub fn writeWithLock(self: *Self) struct { Mutable(T), WLockGuard } { var lock_guard = self.write(); const t = lock_guard.mut(); return .{ t, lock_guard }; From 2207b6014efae918785b89183078dde387443d1a Mon Sep 17 00:00:00 2001 From: x19 <100000306+0xNineteen@users.noreply.github.com> Date: Mon, 15 Jul 2024 19:45:47 -0400 Subject: [PATCH 14/28] feat(gossip): add GossipTable fuzz testing (#197) * add fuzz testing for the gossip table --- docs/fuzzing.md | 33 ++- scripts/kcov_fuzz_gossip.sh | 2 +- scripts/kcov_fuzz_gossip_table.sh | 30 +++ src/fuzz.zig | 10 +- src/gossip/data.zig | 24 +- src/gossip/{fuzz.zig => fuzz_service.zig} | 0 src/gossip/fuzz_table.zig | 294 ++++++++++++++++++++++ src/gossip/lib.zig | 3 +- src/gossip/service.zig | 14 +- src/gossip/table.zig | 29 ++- 10 files changed, 396 insertions(+), 43 deletions(-) create mode 100644 scripts/kcov_fuzz_gossip_table.sh rename src/gossip/{fuzz.zig => fuzz_service.zig} (100%) create mode 100644 src/gossip/fuzz_table.zig diff --git a/docs/fuzzing.md b/docs/fuzzing.md index 73a6f3b87..a05fa7736 100644 --- a/docs/fuzzing.md +++ b/docs/fuzzing.md @@ -6,7 +6,8 @@ supported components: main code paths: - `fuzz.zig` <- main entrypoint -- `gossip/fuzz.zig` +- `gossip/fuzz_table.zig` +- `gossip/fuzz_service.zig` - `accountsdb/fuzz.zig` - `scripts/` <- kcov + fuzz bash scripts @@ -21,6 +22,8 @@ kcov will give you coverage information on what was and was not fuzzed ## gossip +### service + gossip supports two types of fuzzing - *option1*: sending fuzz packets to an arbitrary endpoint - *option2*: sending fuzz packets directly to a sig client @@ -29,14 +32,27 @@ gossip supports two types of fuzzing example commands: ```bash -# (option1) -./zig-out/bin/fuzz gossip 10 4_000 127.0.0.1:8001 +# (option1) +./zig-out/bin/fuzz gossip_service 10 4_000 127.0.0.1:8001 -# (option2) -./zig-out/bin/fuzz gossip 10 4_000 +# (option2) +./zig-out/bin/fuzz gossip_service 10 4_000 -# (run with random seed for inf) -./zig-out/bin/fuzz gossip +# (run with random seed for inf) +./zig-out/bin/fuzz gossip_service +``` + +### table + +you can also fuzz the `GossipTable` (see `src/gossip/table.zig`) for reads/writes/trims/remove-old-labels using the following: + +example commands: +```bash +# +./zig-out/bin/fuzz gossip_table 10 4_000 + +# (run with random seed for inf) +./zig-out/bin/fuzz gossip_table ``` ## accounts-db @@ -58,5 +74,6 @@ example command: ## running with kcov commands to run: -- `bash scripts/kcov_fuzz_gossip.sh` +- `bash scripts/kcov_fuzz_gossip_service.sh` +- `bash scripts/kcov_fuzz_gossip_table.sh` - `bash scripts/kcov_fuzz_accountsdb.sh` diff --git a/scripts/kcov_fuzz_gossip.sh b/scripts/kcov_fuzz_gossip.sh index 5d34c2401..5c52f84c1 100644 --- a/scripts/kcov_fuzz_gossip.sh +++ b/scripts/kcov_fuzz_gossip.sh @@ -23,7 +23,7 @@ kcov \ --include-pattern=src/gossip/ \ --exclude-pattern=$HOME/.cache \ kcov-output/ \ - ./zig-out/bin/fuzz gossip 19 50_000 + ./zig-out/bin/fuzz gossip_service 19 50_000 # open report echo "=> Opening kcov-output/index.html" diff --git a/scripts/kcov_fuzz_gossip_table.sh b/scripts/kcov_fuzz_gossip_table.sh new file mode 100644 index 000000000..8f68451fa --- /dev/null +++ b/scripts/kcov_fuzz_gossip_table.sh @@ -0,0 +1,30 @@ +# to install kcov follow the instructions at: +# https://github.com/SimonKagstrom/kcov/blob/master/INSTALL.md +# to build on mac the following should work: +# ``` +# cd /path/to/kcov/ +# mkdir build +# cd build +# cmake .. +# make +# make install +# export PATH=$PATH:/path/to/kcov/build/src +# ``` + +echo "=> Clearing kcov-output directory" +rm -rf kcov-output +mkdir kcov-output + +echo "=> Building Sig" +zig build + +echo "=> Running kcov on gossip spy" +kcov \ + --include-pattern=src/gossip/ \ + --exclude-pattern=$HOME/.cache \ + kcov-output/ \ + ./zig-out/bin/fuzz gossip_table 19 50_000 + +# open report +echo "=> Opening kcov-output/index.html" +open kcov-output/index.html \ No newline at end of file diff --git a/src/fuzz.zig b/src/fuzz.zig index 60342ad38..10d93b83c 100644 --- a/src/fuzz.zig +++ b/src/fuzz.zig @@ -2,7 +2,8 @@ const std = @import("std"); const lib = @import("./lib.zig"); const accountsdb_fuzz = lib.accounts_db.fuzz; -const gossip_fuzz = lib.gossip.fuzz; +const gossip_fuzz_service = lib.gossip.fuzz_service; +const gossip_fuzz_table = lib.gossip.fuzz_table; const logger = lib.trace.log; // where seeds are saved (in case of too many logs) @@ -40,10 +41,13 @@ pub fn main() !void { std.debug.print("using seed: {d}\n", .{seed}); try writeSeedToFile(seed); + // NOTE: changing these hardcoded str values will require a change to the fuzz/kcov in `scripts/` if (std.mem.startsWith(u8, filter, "accountsdb")) { try accountsdb_fuzz.run(seed, &cli_args); - } else if (std.mem.startsWith(u8, filter, "gossip")) { - try gossip_fuzz.run(seed, &cli_args); + } else if (std.mem.startsWith(u8, filter, "gossip_service")) { + try gossip_fuzz_service.run(seed, &cli_args); + } else if (std.mem.startsWith(u8, filter, "gossip_table")) { + try gossip_fuzz_table.run(seed, &cli_args); } else { std.debug.print("unknown fuzz filter: {s}\n", .{filter}); return error.UnknownFilter; diff --git a/src/gossip/data.zig b/src/gossip/data.zig index 304aee915..80e80512d 100644 --- a/src/gossip/data.zig +++ b/src/gossip/data.zig @@ -1100,22 +1100,23 @@ pub const ContactInfo = struct { }; } - pub fn initDummyForTest( + pub fn random( allocator: std.mem.Allocator, + rng: std.rand.Random, pubkey: Pubkey, wallclock: u64, outset: u64, shred_version: u16, - ) ContactInfo { - var addrs = ArrayList(IpAddr).initCapacity(allocator, 4) catch unreachable; - var sockets = ArrayList(SocketEntry).initCapacity(allocator, 6) catch unreachable; + ) !ContactInfo { + var addrs = try ArrayList(IpAddr).initCapacity(allocator, rng.intRangeAtMost(usize, 4, 10)); + var sockets = try ArrayList(SocketEntry).initCapacity(allocator, rng.intRangeAtMost(usize, 4, 10)); - for (0..4) |_| { - addrs.append(IpAddr.newIpv4(127, 0, 0, 1)) catch unreachable; + for (0..addrs.items.len) |_| { + addrs.appendAssumeCapacity(IpAddr.newIpv4(127, 0, 0, 1)); } - for (0..6) |_| { - sockets.append(.{ .key = .turbine_recv, .index = 20, .offset = 30 }) catch unreachable; + for (0..sockets.items.len) |_| { + sockets.appendAssumeCapacity(.{ .key = .turbine_recv, .index = 20, .offset = 30 }); } return ContactInfo{ @@ -1386,7 +1387,8 @@ test "gossip.data: contact info bincode serialize matches rust bincode" { }; const pubkey = Pubkey.fromString("4rL4RCWHz3iNCdCaveD8KcHfV9YWGsqSHFPo7X2zBNwa") catch unreachable; - var ci = ContactInfo.initDummyForTest(testing.allocator, pubkey, 100, 200, 300); + var random = std.rand.DefaultPrng.init(0); + var ci = try ContactInfo.random(std.testing.allocator, random.random(), pubkey, 100, 200, 300); defer ci.deinit(); var buf = std.ArrayList(u8).init(testing.allocator); @@ -1660,7 +1662,7 @@ test "gossip.data: LegacyContactInfo <-> ContactInfo roundtrip" { test "gossip.data: sanitize valid ContactInfo works" { var rand = std.rand.DefaultPrng.init(871329); const rng = rand.random(); - const info = ContactInfo.initDummyForTest(std.testing.allocator, Pubkey.random(rng), 100, 123, 246); + const info = try ContactInfo.random(std.testing.allocator, rng, Pubkey.random(rng), 100, 123, 246); defer info.deinit(); const data = GossipData{ .ContactInfo = info }; try data.sanitize(); @@ -1669,7 +1671,7 @@ test "gossip.data: sanitize valid ContactInfo works" { test "gossip.data: sanitize invalid ContactInfo has error" { var rand = std.rand.DefaultPrng.init(3414214); const rng = rand.random(); - const info = ContactInfo.initDummyForTest(std.testing.allocator, Pubkey.random(rng), 1_000_000_000_000_000, 123, 246); + const info = try ContactInfo.random(std.testing.allocator, rng, Pubkey.random(rng), 1_000_000_000_000_000, 123, 246); defer info.deinit(); const data = GossipData{ .ContactInfo = info }; if (data.sanitize()) |_| return error.ExpectedError else |_| {} diff --git a/src/gossip/fuzz.zig b/src/gossip/fuzz_service.zig similarity index 100% rename from src/gossip/fuzz.zig rename to src/gossip/fuzz_service.zig diff --git a/src/gossip/fuzz_table.zig b/src/gossip/fuzz_table.zig new file mode 100644 index 000000000..2b6ba9cd0 --- /dev/null +++ b/src/gossip/fuzz_table.zig @@ -0,0 +1,294 @@ +const std = @import("std"); +const sig = @import("../lib.zig"); +const network = @import("zig-network"); +const bincode = sig.bincode.bincode; + +const AtomicBool = std.atomic.Value(bool); +const KeyPair = std.crypto.sign.Ed25519.KeyPair; + +const GossipService = sig.gossip.service.GossipService; +const ChunkType = sig.gossip.service.ChunkType; +const LegacyContactInfo = sig.gossip.data.LegacyContactInfo; +const ContactInfo = sig.gossip.data.ContactInfo; +const gossipDataToPackets = sig.gossip.service.gossipDataToPackets; +const getWallclockMs = sig.gossip.data.getWallclockMs; +const Logger = sig.trace.log.Logger; +const SocketAddr = sig.net.net.SocketAddr; +const Pubkey = sig.core.pubkey.Pubkey; +const Bloom = sig.bloom.bloom.Bloom; +const EndPoint = network.EndPoint; +const Packet = sig.net.packet.Packet; +const PACKET_DATA_SIZE = sig.net.packet.PACKET_DATA_SIZE; +const GossipMessage = sig.gossip.message.GossipMessage; +const Ping = sig.gossip.ping_pong.Ping; +const Pong = sig.gossip.ping_pong.Pong; +const GossipTable = sig.gossip.GossipTable; + +const SignedGossipData = sig.gossip.data.SignedGossipData; +const GossipData = sig.gossip.data.GossipData; +const GossipKey = sig.gossip.data.GossipKey; +const Signature = sig.core.Signature; + +const GossipPullFilterSet = sig.gossip.pull_request.GossipPullFilterSet; +const GossipPullFilter = sig.gossip.pull_request.GossipPullFilter; +const Hash = sig.core.hash.Hash; +const ThreadPool = sig.sync.thread_pool.ThreadPool; + +const TRIM_INTERVAL = 2 * std.time.ns_per_s; +const MAX_N_THREADS = 2; + +pub fn run(seed: u64, args: *std.process.ArgIterator) !void { + const maybe_max_actions_string = args.next(); + const maybe_max_actions = blk: { + if (maybe_max_actions_string) |max_actions_str| { + break :blk try std.fmt.parseInt(usize, max_actions_str, 10); + } else { + break :blk null; + } + }; + + // setup + var gpa = std.heap.GeneralPurposeAllocator(.{}){}; + const allocator = gpa.allocator(); + + const logger = Logger.init(allocator, .debug); + defer logger.deinit(); + logger.spawn(); + + var prng = std.rand.DefaultPrng.init(seed); + const rand = prng.random(); + + // init gossip table + // MAX: 2 threads + const n_threads = @min(@as(u32, @truncate(std.Thread.getCpuCount() catch 1)), MAX_N_THREADS); + const thread_pool = try allocator.create(ThreadPool); + defer { + thread_pool.shutdown(); + thread_pool.deinit(); + allocator.destroy(thread_pool); + } + thread_pool.* = ThreadPool.init(.{ + .max_threads = n_threads, + .stack_size = 2 * 1024 * 1024, + }); + + const gossip_table = try allocator.create(GossipTable); + gossip_table.* = try GossipTable.init(allocator, thread_pool); + defer { + gossip_table.deinit(); + allocator.destroy(gossip_table); + } + + const Actions = enum { put, get }; + var put_count: u64 = 0; + var get_count: u64 = 0; + var total_action_count: u64 = 0; + var now: u64 = 0; + + var insertion_times = try std.ArrayList(u64).initCapacity(allocator, 100); + defer insertion_times.deinit(); + + var pubkeys = try std.ArrayList(Pubkey).initCapacity(allocator, 100); + defer pubkeys.deinit(); + + var keypairs = try std.ArrayList(KeyPair).initCapacity(allocator, 100); + defer keypairs.deinit(); + + var signatures = std.AutoArrayHashMap(Pubkey, Signature).init(allocator); + defer signatures.deinit(); + + var keys = try std.ArrayList(GossipKey).initCapacity(allocator, 100); + defer keys.deinit(); + + var timer = std.time.Timer.start() catch unreachable; + + var seed_buf: [32]u8 = undefined; + + // get/put a bunch of accounts + while (true) { + if (maybe_max_actions) |max_actions| { + if (total_action_count >= max_actions) { + std.debug.print("reached max actions: {}\n", .{max_actions}); + break; + } + } + defer { + now += 1; + total_action_count += 1; + } + + const action_int = rand.intRangeAtMost(u8, 0, 1); + const action: Actions = @enumFromInt(action_int); + switch (action) { + .put => { + const new_keypair = rand.boolean(); + var data = GossipData.randomFromIndex(rand, 0); + + const new_contact_info = rand.boolean(); + if (new_contact_info) { + data = GossipData{ + .ContactInfo = try ContactInfo.random(allocator, rand, Pubkey.random(rand), 0, 0, 0), + }; + } + + if (new_keypair) { + rand.bytes(&seed_buf); + const keypair = try KeyPair.create(seed_buf); + const pubkey = Pubkey.fromPublicKey(&keypair.public_key); + + data.setId(pubkey); + var signed_data = try SignedGossipData.initSigned(data, &keypair); + signed_data.wallclockPtr().* = now; + + // ! + try gossip_table.insert(signed_data, now); + + if (new_contact_info) { + try keys.append(GossipKey{ .ContactInfo = pubkey }); + } else { + try keys.append(GossipKey{ .LegacyContactInfo = pubkey }); + } + + try keypairs.append(keypair); + try pubkeys.append(pubkey); + try signatures.put(pubkey, signed_data.signature); + try insertion_times.append(now); + } else { + const index = rand.intRangeAtMost(usize, 0, pubkeys.items.len - 1); + const keypair = keypairs.items[index]; + const pubkey = pubkeys.items[index]; + + data.setId(pubkey); + var signed_data = try SignedGossipData.initSigned(data, &keypair); + signed_data.wallclockPtr().* = now; + + const should_overwrite = rand.boolean(); + if (should_overwrite) { + signed_data.wallclockPtr().* = now; + } else { + const other_insertion_time = insertion_times.items[index]; + signed_data.wallclockPtr().* = other_insertion_time -| rand.intRangeAtMost(u64, 0, 100); + } + + // ! + gossip_table.insert(signed_data, now) catch |err| { + switch (err) { + GossipTable.InsertionError.OldValue => { + // std.debug.assert(!should_overwrite); + }, + GossipTable.InsertionError.DuplicateValue => {}, + else => { + return err; + }, + } + }; + + if (should_overwrite) { + if (new_contact_info) { + keys.items[index] = GossipKey{ .ContactInfo = pubkey }; + } else { + keys.items[index] = GossipKey{ .LegacyContactInfo = pubkey }; + } + // should over-write the old value + insertion_times.items[index] = now; + try signatures.put(pubkey, signed_data.signature); + } + } + + put_count += 1; + }, + .get => { + if (pubkeys.items.len == 0) { + continue; + } + + const index = rand.intRangeAtMost(usize, 0, pubkeys.items.len - 1); + const pubkey = pubkeys.items[index]; + // general search + const search_key = keys.items[index]; + + const versioned_data = gossip_table.get(search_key) orelse { + logger.errf("failed to get pubkey: {}\n", .{search_key}); + return; + }; + + if (!versioned_data.value.signature.eql(&signatures.get(pubkey).?)) { + logger.errf("hash mismatch: {}\n", .{pubkey}); + return; + } + + // via direct method + _ = gossip_table.getContactInfo(pubkey) orelse { + logger.errf("failed to get contact info: {}\n", .{pubkey}); + return; + }; + + // via iter + var found = false; + var iter = gossip_table.contactInfoIterator(0); + while (iter.next()) |contact_info| { + if (contact_info.pubkey.equals(&pubkey)) { + found = true; + break; + } + } + if (!found) { + logger.errf("failed to find pubkey: {}\n", .{pubkey}); + return; + } + + get_count += 1; + }, + } + + if (timer.read() > TRIM_INTERVAL) { + defer timer.reset(); + const size = gossip_table.len(); + + if (rand.boolean()) { + // trim the table in half + const max_pubkey_capacity = size / 2; + const did_trim = try gossip_table.attemptTrim(max_pubkey_capacity); + if (!did_trim) continue; + + logger.infof("op(trim): table size: {} -> {}", .{ size, gossip_table.len() }); + } else { + // NOTE: not completely accurate, but good enough + const middle_index = insertion_times.items.len / 2; + const middle_insert_time = insertion_times.items[middle_index]; + try gossip_table.removeOldLabels(middle_insert_time, 0); + + logger.infof("op(remove-old-labels): table size: {} -> {}", .{ size, gossip_table.len() }); + } + + // reset the pubkey list + const available_keys = gossip_table.pubkey_to_values.keys(); + var index: u64 = 0; + while (index < pubkeys.items.len) { + const pubkey = pubkeys.items[index]; + const still_exists = blk: for (available_keys) |*key| { + if (key.equals(&pubkey)) { + break :blk true; + } + } else false; + + if (!still_exists) { + _ = pubkeys.swapRemove(index); + _ = insertion_times.swapRemove(index); + _ = signatures.swapRemove(pubkey); + } else { + index += 1; + } + } + + logger.infof("put: {}, get: {}", .{ put_count, get_count }); + put_count = 0; + get_count = 0; + + if (maybe_max_actions) |max_actions| { + const percent_int = (total_action_count * 100) / max_actions; + logger.infof("total actions: {} / {} ({}%)", .{ total_action_count, max_actions, percent_int }); + } + } + } +} diff --git a/src/gossip/lib.zig b/src/gossip/lib.zig index 117c63f31..e6b4ee9c2 100644 --- a/src/gossip/lib.zig +++ b/src/gossip/lib.zig @@ -1,7 +1,6 @@ pub const active_set = @import("active_set.zig"); pub const data = @import("data.zig"); pub const dump_service = @import("dump_service.zig"); -pub const fuzz = @import("fuzz.zig"); pub const message = @import("message.zig"); pub const ping_pong = @import("ping_pong.zig"); pub const pull_request = @import("pull_request.zig"); @@ -9,6 +8,8 @@ pub const pull_response = @import("pull_response.zig"); pub const service = @import("service.zig"); pub const shards = @import("shards.zig"); pub const table = @import("table.zig"); +pub const fuzz_service = @import("fuzz_service.zig"); +pub const fuzz_table = @import("fuzz_table.zig"); pub const ContactInfo = data.ContactInfo; pub const GossipService = service.GossipService; diff --git a/src/gossip/service.zig b/src/gossip/service.zig index 53f844b84..561217272 100644 --- a/src/gossip/service.zig +++ b/src/gossip/service.zig @@ -742,7 +742,7 @@ pub const GossipService = struct { var gossip_table: *GossipTable = gossip_table_lock.mut(); var x_timer = std.time.Timer.start() catch unreachable; - gossip_table.attemptTrim(UNIQUE_PUBKEY_CAPACITY) catch |err| { + _ = gossip_table.attemptTrim(UNIQUE_PUBKEY_CAPACITY) catch |err| { self.logger.warnf("gossip_table.attemptTrim failed: {s}", .{@errorName(err)}); }; const elapsed = x_timer.read(); @@ -1639,7 +1639,7 @@ pub const GossipService = struct { var gossip_table: *GossipTable = gossip_table_lock.mut(); try gossip_table.purged.trim(purged_cutoff_timestamp); - try gossip_table.attemptTrim(UNIQUE_PUBKEY_CAPACITY); + _ = try gossip_table.attemptTrim(UNIQUE_PUBKEY_CAPACITY); // TODO: condition timeout on stake weight: // - values from nodes with non-zero stake: epoch duration @@ -3133,7 +3133,7 @@ test "init, exit, and deinit" { gossip_service.deinit(); } -const fuzz = @import("./fuzz.zig"); +const fuzz_service = @import("./fuzz_service.zig"); pub const BenchmarkGossipServiceGeneral = struct { pub const min_iterations = 1; @@ -3234,13 +3234,13 @@ pub const BenchmarkGossipServiceGeneral = struct { for (0..bench_args.message_counts.n_ping) |_| { // send a ping message - const packet = try fuzz.randomPingPacket(rng, &keypair, endpoint); + const packet = try fuzz_service.randomPingPacket(rng, &keypair, endpoint); try packet_batch.append(packet); } for (0..bench_args.message_counts.n_push_message) |_| { // send a push message - var packets = try fuzz.randomPushMessage( + var packets = try fuzz_service.randomPushMessage( rng, &keypair, address.toEndpoint(), @@ -3252,7 +3252,7 @@ pub const BenchmarkGossipServiceGeneral = struct { for (0..bench_args.message_counts.n_pull_response) |_| { // send a pull response - var packets = try fuzz.randomPullResponse( + var packets = try fuzz_service.randomPullResponse( rng, &keypair, address.toEndpoint(), @@ -3391,7 +3391,7 @@ pub const BenchmarkGossipServicePullRequests = struct { bench_args.n_pull_requests, ); for (0..bench_args.n_pull_requests) |_| { - const packet = try fuzz.randomPullRequest( + const packet = try fuzz_service.randomPullRequest( allocator, LegacyContactInfo.fromContactInfo(&contact_info_recv), rng, diff --git a/src/gossip/table.zig b/src/gossip/table.zig index 992e0fce5..fe850da2b 100644 --- a/src/gossip/table.zig +++ b/src/gossip/table.zig @@ -30,11 +30,6 @@ const PACKET_DATA_SIZE = sig.net.packet.PACKET_DATA_SIZE; pub const UNIQUE_PUBKEY_CAPACITY: usize = 8192; pub const MAX_TABLE_SIZE: usize = 1_000_000; // TODO: better value for this -pub const TableError = error{ - OldValue, - DuplicateValue, -}; - pub const HashAndTime = struct { hash: Hash, timestamp: u64 }; // indexable HashSet @@ -103,11 +98,17 @@ pub const GossipTable = struct { // head of the store cursor: usize = 0, + // NOTE: this allocator is used to free any memory allocated by the bincode library allocator: std.mem.Allocator, thread_pool: *ThreadPool, const Self = @This(); + pub const InsertionError = error{ + OldValue, + DuplicateValue, + }; + pub fn init(allocator: std.mem.Allocator, thread_pool: *ThreadPool) !Self { return Self{ .store = AutoArrayHashMap(GossipKey, GossipVersionedData).init(allocator), @@ -275,10 +276,10 @@ pub const GossipTable = struct { if (old_entry.value_hash.order(&versioned_value.value_hash) != .eq) { // if hash isnt the same and override() is false then msg is old try self.purged.insert(old_entry.value_hash, now); - return TableError.OldValue; + return InsertionError.OldValue; } else { // hash is the same then its a duplicate - return TableError.DuplicateValue; + return InsertionError.DuplicateValue; } } } @@ -712,8 +713,10 @@ pub const GossipTable = struct { return (10 * n_pubkeys > 9 * max_pubkey_capacity); } - pub fn attemptTrim(self: *Self, max_pubkey_capacity: usize) error{OutOfMemory}!void { - if (!self.shouldTrim(max_pubkey_capacity)) return; + /// removes pubkeys and their associated values until the pubkey count is less than max_pubkey_capacity. + /// returns true if any values were removed. + pub fn attemptTrim(self: *Self, max_pubkey_capacity: usize) error{OutOfMemory}!bool { + if (!self.shouldTrim(max_pubkey_capacity)) return false; const n_pubkeys = self.pubkey_to_values.count(); const drop_size = n_pubkeys -| max_pubkey_capacity; @@ -737,6 +740,8 @@ pub const GossipTable = struct { for (labels_to_remove.items) |label| { self.remove(label) catch unreachable; } + + return true; } pub fn removeOldLabels( @@ -1021,13 +1026,13 @@ test "gossip.table: trim pruned values" { _ = table.pubkey_to_values.get(origin).?; } - try table.attemptTrim(N_TRIM_VALUES); + _ = try table.attemptTrim(N_TRIM_VALUES); try std.testing.expectEqual(table.len(), N_VALUES - N_TRIM_VALUES); try std.testing.expectEqual(table.pubkey_to_values.count(), N_VALUES - N_TRIM_VALUES); try std.testing.expectEqual(table.purged.len(), N_TRIM_VALUES); - try table.attemptTrim(0); + _ = try table.attemptTrim(0); try std.testing.expectEqual(table.len(), 0); } @@ -1174,7 +1179,7 @@ test "gossip.table: insert and get contact_info" { // test re-insertion const result = table.insert(gossip_value, 0); - try std.testing.expectError(TableError.DuplicateValue, result); + try std.testing.expectError(GossipTable.InsertionError.DuplicateValue, result); // test re-insertion with greater wallclock gossip_value.data.LegacyContactInfo.wallclock += 2; From 6164dabea27e1c991d89338f3e0b8c0ff11f1db7 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Mon, 15 Jul 2024 19:52:46 -0400 Subject: [PATCH 15/28] fix lint --- src/gossip/service.zig | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/gossip/service.zig b/src/gossip/service.zig index af6e7730d..baae7e8d3 100644 --- a/src/gossip/service.zig +++ b/src/gossip/service.zig @@ -2826,9 +2826,7 @@ test "test large push messages" { var keypair = try KeyPair.create(null); var value = try SignedGossipData.randomWithIndex(rng.random(), &keypair, 0); // contact info try lock_guard.mut().insert(value, getWallclockMs()); - try peers.append(ThreadSafeContactInfo.fromContactInfo( - try value.data.LegacyContactInfo.toContactInfo(allocator) - )); + try peers.append(ThreadSafeContactInfo.fromContactInfo(try value.data.LegacyContactInfo.toContactInfo(allocator))); } lock_guard.unlock(); From faf8588426504fb9f48d615570e5e956fa8b7623 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Mon, 15 Jul 2024 20:00:40 -0400 Subject: [PATCH 16/28] test fix --- src/gossip/service.zig | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/gossip/service.zig b/src/gossip/service.zig index baae7e8d3..ba4731801 100644 --- a/src/gossip/service.zig +++ b/src/gossip/service.zig @@ -2821,14 +2821,16 @@ test "test large push messages" { defer { peers.deinit(); } - var lock_guard = gossip_service.gossip_table_rw.write(); - for (0..2_000) |_| { - var keypair = try KeyPair.create(null); - var value = try SignedGossipData.randomWithIndex(rng.random(), &keypair, 0); // contact info - try lock_guard.mut().insert(value, getWallclockMs()); - try peers.append(ThreadSafeContactInfo.fromContactInfo(try value.data.LegacyContactInfo.toContactInfo(allocator))); + { + var lock_guard = gossip_service.gossip_table_rw.write(); + defer lock_guard.unlock(); + for (0..2_000) |_| { + var keypair = try KeyPair.create(null); + const value = try SignedGossipData.randomWithIndex(rng.random(), &keypair, 0); // contact info + try lock_guard.mut().insert(value, getWallclockMs()); + try peers.append(ThreadSafeContactInfo.fromLegacyContactInfo(value.data.LegacyContactInfo)); + } } - lock_guard.unlock(); // set the active set { From 73f56be78b531ffddac67d12b628283493ce460a Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Tue, 16 Jul 2024 09:10:36 -0400 Subject: [PATCH 17/28] fix unnecessary var --- src/accountsdb/fuzz.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/accountsdb/fuzz.zig b/src/accountsdb/fuzz.zig index e3f7a0af7..789c0be0b 100644 --- a/src/accountsdb/fuzz.zig +++ b/src/accountsdb/fuzz.zig @@ -77,7 +77,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { const exit = try allocator.create(std.atomic.Value(bool)); exit.* = std.atomic.Value(bool).init(false); - var manager_handle = try std.Thread.spawn(.{}, AccountsDB.runManagerLoop, .{ + const manager_handle = try std.Thread.spawn(.{}, AccountsDB.runManagerLoop, .{ &accounts_db, exit, }); From 308f6294207808bac95c158534124563ba47e3c8 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Tue, 16 Jul 2024 15:52:39 -0400 Subject: [PATCH 18/28] fix table fuzzing bug --- src/accountsdb/download.zig | 4 +- src/fuzz.zig | 27 +++------ src/gossip/active_set.zig | 2 +- src/gossip/fuzz_table.zig | 83 ++++++++++++++------------ src/gossip/pull_request.zig | 2 +- src/gossip/pull_response.zig | 4 +- src/gossip/service.zig | 32 +++++----- src/gossip/shards.zig | 2 +- src/gossip/table.zig | 68 ++++++++++----------- src/shred_collector/repair_service.zig | 6 +- 10 files changed, 114 insertions(+), 116 deletions(-) diff --git a/src/accountsdb/download.zig b/src/accountsdb/download.zig index f867d935a..c493eaa4b 100644 --- a/src/accountsdb/download.zig +++ b/src/accountsdb/download.zig @@ -502,7 +502,7 @@ test "accounts_db.download: test remove untrusted peers" { var data = try SignedGossipData.randomWithIndex(rng, &kp, 9); data.data.SnapshotHashes.from = ci.pubkey; try trusted_validators.append(ci.pubkey); - try table.insert(data, 0); + _ = try table.insert(data, 0); } _ = try findPeersToDownloadFromAssumeCapacity( @@ -593,7 +593,7 @@ test "accounts_db.download: test finding peers" { var kp = try KeyPair.create(null); var data = try SignedGossipData.randomWithIndex(rng, &kp, 9); data.data.SnapshotHashes.from = ci.pubkey; - try table.insert(data, 0); + _ = try table.insert(data, 0); } result = try findPeersToDownloadFromAssumeCapacity( diff --git a/src/fuzz.zig b/src/fuzz.zig index 10d93b83c..04c117a4e 100644 --- a/src/fuzz.zig +++ b/src/fuzz.zig @@ -39,7 +39,7 @@ pub fn main() !void { }; std.debug.print("using seed: {d}\n", .{seed}); - try writeSeedToFile(seed); + try writeSeedToFile(filter, seed); // NOTE: changing these hardcoded str values will require a change to the fuzz/kcov in `scripts/` if (std.mem.startsWith(u8, filter, "accountsdb")) { @@ -55,26 +55,13 @@ pub fn main() !void { } /// writes the seed to the defined seed file (defined by SEED_FILE_PATH) -pub fn writeSeedToFile(seed: u64) !void { - std.fs.cwd().access(SEED_FILE_PATH, .{}) catch |err| { - switch (err) { - std.fs.Dir.AccessError.FileNotFound => { - var file = try std.fs.cwd().createFile(SEED_FILE_PATH, .{}); - file.close(); - }, - else => { - std.debug.print("failed to access seed file: {}\n", .{err}); - return; - }, - } - }; - - const seed_file = try std.fs.cwd().openFile(SEED_FILE_PATH, .{ .mode = .write_only }); +pub fn writeSeedToFile(filter: []const u8, seed: u64) !void { + const seed_file = try std.fs.cwd().createFile(SEED_FILE_PATH, .{ + .truncate = false, + }); defer seed_file.close(); + try seed_file.seekFromEnd(0); - var buf: [1024]u8 = undefined; const now: u64 = @intCast(std.time.timestamp()); - - const seed_slice = try std.fmt.bufPrint(&buf, "@{d} - seed: {d}\n", .{ now, seed }); - try seed_file.writeAll(seed_slice); + try seed_file.writer().print("{s}: time: {d}, seed: {d}\n", .{ filter, now, seed }); } diff --git a/src/gossip/active_set.zig b/src/gossip/active_set.zig index e2f8f6aef..99bc03261 100644 --- a/src/gossip/active_set.zig +++ b/src/gossip/active_set.zig @@ -149,7 +149,7 @@ test "gossip.active_set: init/deinit" { const value = try SignedGossipData.initSigned(.{ .LegacyContactInfo = data, }, &keypair); - try table.insert(value, getWallclockMs()); + _ = try table.insert(value, getWallclockMs()); } var active_set = ActiveSet.init(alloc); diff --git a/src/gossip/fuzz_table.zig b/src/gossip/fuzz_table.zig index 717158b04..ad7bde255 100644 --- a/src/gossip/fuzz_table.zig +++ b/src/gossip/fuzz_table.zig @@ -83,7 +83,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { var put_count: u64 = 0; var get_count: u64 = 0; var total_action_count: u64 = 0; - var now: u64 = 0; + var now: u64 = 100; var insertion_times = try std.ArrayList(u64).initCapacity(allocator, 100); defer insertion_times.deinit(); @@ -108,7 +108,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { while (true) { if (maybe_max_actions) |max_actions| { if (total_action_count >= max_actions) { - std.debug.print("reached max actions: {}\n", .{max_actions}); + logger.infof("reached max actions: {}", .{max_actions}); break; } } @@ -121,15 +121,12 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { const action: Actions = @enumFromInt(action_int); switch (action) { .put => { + defer put_count += 1; const new_keypair = rand.boolean(); - var data = GossipData.randomFromIndex(rand, 0); - const new_contact_info = rand.boolean(); - if (new_contact_info) { - data = GossipData{ - .ContactInfo = try ContactInfo.random(allocator, rand, Pubkey.random(rand), 0, 0, 0), - }; - } + var data = GossipData{ + .ContactInfo = try ContactInfo.random(allocator, rand, Pubkey.random(rand), 0, 0, 0), + }; if (new_keypair) { rand.bytes(&seed_buf); @@ -141,19 +138,20 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { signed_data.wallclockPtr().* = now; // ! - try gossip_table.insert(signed_data, now); - - if (new_contact_info) { - try keys.append(GossipKey{ .ContactInfo = pubkey }); - } else { - try keys.append(GossipKey{ .LegacyContactInfo = pubkey }); - } + logger.debugf("putting pubkey: {}", .{pubkey}); + const did_insert = try gossip_table.insert(signed_data, now); + std.debug.assert(did_insert); + try keys.append(GossipKey{ .ContactInfo = pubkey }); try keypairs.append(keypair); try pubkeys.append(pubkey); try signatures.put(pubkey, signed_data.signature); try insertion_times.append(now); } else { + if (pubkeys.items.len == 0) { + continue; + } + const index = rand.intRangeAtMost(usize, 0, pubkeys.items.len - 1); const keypair = keypairs.items[index]; const pubkey = pubkeys.items[index]; @@ -164,38 +162,41 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { const should_overwrite = rand.boolean(); if (should_overwrite) { + logger.debugf("overwriting pubkey: {}", .{pubkey}); signed_data.wallclockPtr().* = now; } else { + logger.debugf("writing old pubkey: {}", .{pubkey}); const other_insertion_time = insertion_times.items[index]; - signed_data.wallclockPtr().* = other_insertion_time -| rand.intRangeAtMost(u64, 0, 100); + signed_data.wallclockPtr().* = other_insertion_time -| rand.intRangeAtMost(u64, 10, 100); } // ! - gossip_table.insert(signed_data, now) catch |err| { + const did_insert = gossip_table.insert(signed_data, now) catch |err| blk: { switch (err) { GossipTable.InsertionError.OldValue => { - // std.debug.assert(!should_overwrite); + std.debug.assert(!should_overwrite); + }, + GossipTable.InsertionError.DuplicateValue => { + logger.debugf("duplicate value: {}", .{pubkey}); }, - GossipTable.InsertionError.DuplicateValue => {}, else => { return err; }, } + break :blk false; }; + if (!should_overwrite and did_insert) { + return error.ValueDidNotOverwrite; + } + if (should_overwrite) { - if (new_contact_info) { - keys.items[index] = GossipKey{ .ContactInfo = pubkey }; - } else { - keys.items[index] = GossipKey{ .LegacyContactInfo = pubkey }; - } + keys.items[index] = GossipKey{ .ContactInfo = pubkey }; // should over-write the old value insertion_times.items[index] = now; try signatures.put(pubkey, signed_data.signature); } } - - put_count += 1; }, .get => { if (pubkeys.items.len == 0) { @@ -204,23 +205,26 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { const index = rand.intRangeAtMost(usize, 0, pubkeys.items.len - 1); const pubkey = pubkeys.items[index]; - // general search const search_key = keys.items[index]; + errdefer { + logger.errf("pubkey failed: {} with key: {}", .{ pubkey, search_key }); + } + const versioned_data = gossip_table.get(search_key) orelse { - logger.errf("failed to get pubkey: {}\n", .{search_key}); - return; + logger.errf("failed to get pubkey: {}", .{search_key}); + return error.PubkeyNotFound; }; if (!versioned_data.value.signature.eql(&signatures.get(pubkey).?)) { - logger.errf("hash mismatch: {}\n", .{pubkey}); - return; + logger.errf("signature mismatch: {}", .{pubkey}); + return error.SignatureMismatch; } // via direct method _ = gossip_table.getThreadSafeContactInfo(pubkey) orelse { - logger.errf("failed to get contact info: {}\n", .{pubkey}); - return; + logger.errf("failed to get contact info: {}", .{pubkey}); + return error.ContactInfoNotFound; }; // via iter @@ -233,8 +237,8 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { } } if (!found) { - logger.errf("failed to find pubkey: {}\n", .{pubkey}); - return; + logger.errf("failed to find pubkey: {}", .{pubkey}); + return error.ContactInfoNotFound; } get_count += 1; @@ -248,7 +252,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { if (rand.boolean()) { // trim the table in half const max_pubkey_capacity = size / 2; - const did_trim = try gossip_table.attemptTrim(max_pubkey_capacity); + const did_trim = try gossip_table.attemptTrim(now, max_pubkey_capacity); if (!did_trim) continue; logger.infof("op(trim): table size: {} -> {}", .{ size, gossip_table.len() }); @@ -273,9 +277,12 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { } else false; if (!still_exists) { - _ = pubkeys.swapRemove(index); + const pk_removed = pubkeys.swapRemove(index); _ = insertion_times.swapRemove(index); _ = signatures.swapRemove(pubkey); + _ = keys.swapRemove(index); + + std.debug.assert(pk_removed.equals(&pubkey)); } else { index += 1; } diff --git a/src/gossip/pull_request.zig b/src/gossip/pull_request.zig index cb8b5d7d1..9069ab362 100644 --- a/src/gossip/pull_request.zig +++ b/src/gossip/pull_request.zig @@ -278,7 +278,7 @@ test "gossip.pull_request: test building filters" { .LegacyContactInfo = legacy_contact_info, }, &kp); - try gossip_table.insert(gossip_value, 0); + _ = try gossip_table.insert(gossip_value, 0); } const max_bytes = 2; diff --git a/src/gossip/pull_response.zig b/src/gossip/pull_response.zig index a361c1754..155f1fec8 100644 --- a/src/gossip/pull_response.zig +++ b/src/gossip/pull_response.zig @@ -91,7 +91,7 @@ test "gossip.pull_response: test filtering values works" { var lg = gossip_table_rw.write(); for (0..100) |_| { const gossip_value = try SignedGossipData.random(rng, &kp); - try lg.mut().insert(gossip_value, 0); + _ = try lg.mut().insert(gossip_value, 0); } lg.unlock(); @@ -125,7 +125,7 @@ test "gossip.pull_response: test filtering values works" { lg = gossip_table_rw.write(); for (0..64) |_| { const v2 = try SignedGossipData.random(rng, &kp); - try lg.mut().insert(v2, 0); + _ = try lg.mut().insert(v2, 0); } const maybe_failing_seed: u64 = @intCast(std.time.milliTimestamp()); diff --git a/src/gossip/service.zig b/src/gossip/service.zig index ba4731801..e29661573 100644 --- a/src/gossip/service.zig +++ b/src/gossip/service.zig @@ -738,7 +738,8 @@ pub const GossipService = struct { var gossip_table: *GossipTable = gossip_table_lock.mut(); var x_timer = std.time.Timer.start() catch unreachable; - _ = gossip_table.attemptTrim(UNIQUE_PUBKEY_CAPACITY) catch |err| { + const now = getWallclockMs(); + _ = gossip_table.attemptTrim(now, UNIQUE_PUBKEY_CAPACITY) catch |err| { self.logger.warnf("gossip_table.attemptTrim failed: {s}", .{@errorName(err)}); }; const elapsed = x_timer.read(); @@ -1206,7 +1207,7 @@ pub const GossipService = struct { var gossip_table: *GossipTable = gossip_table_lock.mut(); for (pull_requests.items) |*req| { - gossip_table.insert(req.value, now) catch {}; + _ = gossip_table.insert(req.value, now) catch {}; gossip_table.updateRecordTimestamp(req.value.id(), now); } } @@ -1380,6 +1381,7 @@ pub const GossipService = struct { ); const insert_results = try gossip_table.insertValues( + now, pull_message.gossip_values[0..valid_len], GOSSIP_PULL_TIMEOUT_MS, true, @@ -1391,7 +1393,7 @@ pub const GossipService = struct { const timeout_indexs = insert_results.timeouts.?; defer timeout_indexs.deinit(); for (timeout_indexs.items) |index| { - gossip_table.insert( + _ = gossip_table.insert( pull_message.gossip_values[index], now, ) catch {}; @@ -1506,6 +1508,7 @@ pub const GossipService = struct { var n_failed_inserts: usize = 0; var n_invalid_data: usize = 0; + const now = getWallclockMs(); for (batch_push_messages.items) |*push_message| { n_gossip_data += push_message.gossip_values.len; @@ -1518,6 +1521,7 @@ pub const GossipService = struct { n_invalid_data += push_message.gossip_values.len - valid_len; try gossip_table.insertValuesMinAllocs( + now, push_message.gossip_values[0..valid_len], GOSSIP_PUSH_MSG_TIMEOUT_MS, &failed_insert_indexs, @@ -1642,7 +1646,7 @@ pub const GossipService = struct { var gossip_table: *GossipTable = gossip_table_lock.mut(); try gossip_table.purged.trim(purged_cutoff_timestamp); - _ = try gossip_table.attemptTrim(UNIQUE_PUBKEY_CAPACITY); + _ = try gossip_table.attemptTrim(now, UNIQUE_PUBKEY_CAPACITY); // TODO: condition timeout on stake weight: // - values from nodes with non-zero stake: epoch duration @@ -1719,7 +1723,7 @@ pub const GossipService = struct { var gossip_table: *GossipTable = gossip_table_lock.mut(); while (push_msg_queue.popOrNull()) |gossip_value| { - gossip_table.insert(gossip_value, now) catch {}; + _ = gossip_table.insert(gossip_value, now) catch {}; } } @@ -2183,7 +2187,7 @@ test "build messages startup and shutdown" { var value = try SignedGossipData.randomWithIndex(rng.random(), &rand_keypair, 0); // contact info // make gossip valid value.data.LegacyContactInfo.gossip = SocketAddr.initIpv4(.{ 127, 0, 0, 1 }, 8000); - try lg.mut().insert(value, getWallclockMs()); + _ = try lg.mut().insert(value, getWallclockMs()); try peers.append(value.data.LegacyContactInfo); // set the pong status as OK so they included in active set ping_cache._setPong(value.data.LegacyContactInfo.id, value.data.LegacyContactInfo.gossip); @@ -2228,7 +2232,7 @@ test "handling prune messages" { for (0..10) |_| { var rand_keypair = try KeyPair.create(null); const value = try SignedGossipData.randomWithIndex(rng.random(), &rand_keypair, 0); // contact info - try lg.mut().insert(value, getWallclockMs()); + _ = try lg.mut().insert(value, getWallclockMs()); try peers.append(ThreadSafeContactInfo.fromLegacyContactInfo(value.data.LegacyContactInfo)); } lg.unlock(); @@ -2496,7 +2500,7 @@ test "handle pull request" { count += 1; for (0..10) |_| { var value = try SignedGossipData.randomWithIndex(rng.random(), &(try KeyPair.create(null)), 0); - try gossip_table.insert(value, getWallclockMs()); + _ = try gossip_table.insert(value, getWallclockMs()); // make sure well get a response from the request const vers_value = gossip_table.get(value.label()).?; @@ -2618,7 +2622,7 @@ test "test build prune messages and handle push messages" { .LegacyContactInfo = send_contact_info, }, &my_keypair); var lg = gossip_service.gossip_table_rw.write(); - try lg.mut().insert(ci_value, getWallclockMs()); + _ = try lg.mut().insert(ci_value, getWallclockMs()); lg.unlock(); var msgs = ArrayList(GossipService.PushMessage).init(allocator); @@ -2702,7 +2706,7 @@ test "test build pull requests" { var value = try SignedGossipData.randomWithIndex(rng.random(), &rando_keypair, 0); value.wallclockPtr().* = now + 10 * i; - try lg.mut().insert(value, now + 10 * i); + _ = try lg.mut().insert(value, now + 10 * i); pc._setPong(value.data.LegacyContactInfo.id, value.data.LegacyContactInfo.gossip); } } @@ -2749,7 +2753,7 @@ test "test build push messages" { for (0..10) |_| { var keypair = try KeyPair.create(null); const value = try SignedGossipData.randomWithIndex(rng.random(), &keypair, 0); // contact info - try lg.mut().insert(value, getWallclockMs()); + _ = try lg.mut().insert(value, getWallclockMs()); try peers.append(ThreadSafeContactInfo.fromLegacyContactInfo(value.data.LegacyContactInfo)); } lg.unlock(); @@ -2827,7 +2831,7 @@ test "test large push messages" { for (0..2_000) |_| { var keypair = try KeyPair.create(null); const value = try SignedGossipData.randomWithIndex(rng.random(), &keypair, 0); // contact info - try lock_guard.mut().insert(value, getWallclockMs()); + _ = try lock_guard.mut().insert(value, getWallclockMs()); try peers.append(ThreadSafeContactInfo.fromLegacyContactInfo(value.data.LegacyContactInfo)); } } @@ -3365,11 +3369,11 @@ pub const BenchmarkGossipServicePullRequests = struct { var table_lock = gossip_service.gossip_table_rw.write(); var table: *GossipTable = table_lock.mut(); // insert contact info of pull request - try table.insert(signed_contact_info_recv, now); + _ = try table.insert(signed_contact_info_recv, now); // insert all other values for (0..bench_args.n_data_populated) |_| { const value = try SignedGossipData.random(rng, &recv_keypair); - try table.insert(value, now); + _ = try table.insert(value, now); } table_lock.unlock(); } diff --git a/src/gossip/shards.zig b/src/gossip/shards.zig index 800c397b2..390708296 100644 --- a/src/gossip/shards.zig +++ b/src/gossip/shards.zig @@ -125,7 +125,7 @@ test "gossip.gossip_shards: tests GossipTableShards" { fn newTestGossipVersionedData(rng: std.rand.Random, gossip_table: *GossipTable) !GossipVersionedData { const keypair = try KeyPair.create(null); var value = try SignedGossipData.random(rng, &keypair); - try gossip_table.insert(value, 0); + _ = try gossip_table.insert(value, 0); const label = value.label(); const x = gossip_table.get(label).?; return x; diff --git a/src/gossip/table.zig b/src/gossip/table.zig index 9a006012c..c330430e2 100644 --- a/src/gossip/table.zig +++ b/src/gossip/table.zig @@ -24,8 +24,6 @@ const Transaction = sig.core.transaction.Transaction; const Pubkey = sig.core.Pubkey; const SocketAddr = sig.net.SocketAddr; -const getWallclockMs = sig.gossip.data.getWallclockMs; - const PACKET_DATA_SIZE = sig.net.packet.PACKET_DATA_SIZE; pub const UNIQUE_PUBKEY_CAPACITY: usize = 8192; @@ -157,7 +155,7 @@ pub const GossipTable = struct { self.store.deinit(); } - pub fn insert(self: *Self, value: SignedGossipData, now: u64) !void { + pub fn insert(self: *Self, value: SignedGossipData, now: u64) !bool { if (self.store.count() >= MAX_TABLE_SIZE) { return error.GossipTableFull; } @@ -219,6 +217,7 @@ pub const GossipTable = struct { self.cursor += 1; + return true; // should overwrite existing entry } else if (versioned_value.overwrites(result.value_ptr)) { const old_entry = result.value_ptr.*; @@ -269,6 +268,7 @@ pub const GossipTable = struct { result.value_ptr.* = versioned_value; self.cursor += 1; + return true; // do nothing } else { @@ -282,18 +282,19 @@ pub const GossipTable = struct { // hash is the same then its a duplicate return InsertionError.DuplicateValue; } + + return false; } } pub fn insertValues( self: *Self, + now: u64, values: []SignedGossipData, timeout: u64, comptime record_inserts: bool, comptime record_timeouts: bool, ) error{OutOfMemory}!InsertResults { - const now = getWallclockMs(); - // TODO: change to record duplicate and old values seperately + handle when // gossip table is full var failed_indexs = std.ArrayList(usize).init(self.allocator); @@ -311,13 +312,11 @@ pub const GossipTable = struct { continue; } - self.insert(value, now) catch { - try failed_indexs.append(index); - continue; - }; - - if (record_inserts) { + const was_inserted = self.insert(value, now) catch false; + if (was_inserted) { try inserted_indexs.append(index); + } else { + try failed_indexs.append(index); } } @@ -339,12 +338,11 @@ pub const GossipTable = struct { /// For simplicity and performance, only tracks failures without `inserted` and `timeouts`, pub fn insertValuesMinAllocs( self: *Self, + now: u64, values: []SignedGossipData, timeout: u64, failed_indexes: *std.ArrayList(usize), ) error{OutOfMemory}!void { - const now = getWallclockMs(); - failed_indexes.clearRetainingCapacity(); try failed_indexes.ensureTotalCapacity(values.len); @@ -356,10 +354,10 @@ pub const GossipTable = struct { continue; } - self.insert(value, now) catch { + const did_insert = self.insert(value, now) catch false; + if (!did_insert) { failed_indexes.appendAssumeCapacity(index); - continue; - }; + } } } @@ -588,9 +586,7 @@ pub const GossipTable = struct { /// TODO: implement a safer approach to avoid dangling pointers, such as: /// - removal buffer that is populated here and freed later /// - reference counting for all gossip values - pub fn remove(self: *Self, label: GossipKey) error{ LabelNotFound, OutOfMemory }!void { - const now = getWallclockMs(); - + pub fn remove(self: *Self, label: GossipKey, now: u64) error{ LabelNotFound, OutOfMemory }!void { const maybe_entry = self.store.getEntry(label); if (maybe_entry == null) return error.LabelNotFound; @@ -719,7 +715,9 @@ pub const GossipTable = struct { /// removes pubkeys and their associated values until the pubkey count is less than max_pubkey_capacity. /// returns true if any values were removed. - pub fn attemptTrim(self: *Self, max_pubkey_capacity: usize) error{OutOfMemory}!bool { + /// + /// NOTE: the `now` parameter is used to populate the purged field with the timestamp of the removal. + pub fn attemptTrim(self: *Self, now: u64, max_pubkey_capacity: usize) error{OutOfMemory}!bool { if (!self.shouldTrim(max_pubkey_capacity)) return false; const n_pubkeys = self.pubkey_to_values.count(); @@ -733,6 +731,7 @@ pub const GossipTable = struct { defer labels_to_remove.deinit(); for (drop_pubkeys) |pubkey| { + std.debug.print("dropping pubkey: {}\n", .{pubkey}); // remove all entries associated with the pubkey const entry_indexs = self.pubkey_to_values.getEntry(pubkey).?.value_ptr; const count = entry_indexs.count(); @@ -742,7 +741,7 @@ pub const GossipTable = struct { } for (labels_to_remove.items) |label| { - self.remove(label) catch unreachable; + self.remove(label, now) catch unreachable; } return true; @@ -758,7 +757,7 @@ pub const GossipTable = struct { for (old_labels.items) |old_label| { // unreachable: label should always exist in store - self.remove(old_label) catch unreachable; + self.remove(old_label, now) catch unreachable; } } @@ -813,6 +812,7 @@ pub const GossipTable = struct { versioned_value.timestamp_on_insertion, ); if (value_timestamp <= self.cutoff_timestamp) { + std.debug.print("removing old label: {}\n", .{versioned_value.value.label()}); self.old_labels.append(versioned_value.value.label()) catch unreachable; } } @@ -962,7 +962,7 @@ test "gossip.table: remove old values" { &keypair, ); // TS = 100 - try table.insert(value, 100); + _ = try table.insert(value, 100); } try std.testing.expect(table.len() == 5); @@ -971,7 +971,7 @@ test "gossip.table: remove old values" { defer values.deinit(); // remove all values for (values.items) |value| { - try table.remove(value); + try table.remove(value, 200); } try std.testing.expectEqual(table.len(), 0); @@ -991,10 +991,10 @@ test "gossip.table: insert and remove value" { GossipData.randomFromIndex(rng.random(), 0), &keypair, ); - try table.insert(value, 100); + _ = try table.insert(value, 100); const label = value.label(); - try table.remove(label); + try table.remove(label, 100); } test "gossip.table: trim pruned values" { @@ -1018,7 +1018,7 @@ test "gossip.table: trim pruned values" { GossipData.random(rng.random()), &keypair, ); - try table.insert(value, 100); + _ = try table.insert(value, 100); try values.append(value); } try std.testing.expectEqual(table.len(), N_VALUES); @@ -1030,13 +1030,13 @@ test "gossip.table: trim pruned values" { _ = table.pubkey_to_values.get(origin).?; } - _ = try table.attemptTrim(N_TRIM_VALUES); + _ = try table.attemptTrim(0, N_TRIM_VALUES); try std.testing.expectEqual(table.len(), N_VALUES - N_TRIM_VALUES); try std.testing.expectEqual(table.pubkey_to_values.count(), N_VALUES - N_TRIM_VALUES); try std.testing.expectEqual(table.purged.len(), N_TRIM_VALUES); - _ = try table.attemptTrim(0); + _ = try table.attemptTrim(0, 0); try std.testing.expectEqual(table.len(), 0); } @@ -1078,7 +1078,7 @@ test "gossip.HashTimeQueue: trim pruned values" { defer table.deinit(); // timestamp = 100 - try table.insert(value, 100); + _ = try table.insert(value, 100); // should lead to prev being pruned var new_data = GossipData{ @@ -1088,7 +1088,7 @@ test "gossip.HashTimeQueue: trim pruned values" { // older wallclock new_data.LegacyContactInfo.wallclock += data.LegacyContactInfo.wallclock; value = try SignedGossipData.initSigned(new_data, &keypair); - try table.insert(value, 120); + _ = try table.insert(value, 120); try std.testing.expectEqual(table.purged.len(), 1); @@ -1110,7 +1110,7 @@ test "gossip.table: insert and get" { var table = try GossipTable.init(std.testing.allocator, &tp); defer table.deinit(); - try table.insert(value, 0); + _ = try table.insert(value, 0); const label = value.label(); const x = table.get(label).?; @@ -1131,7 +1131,7 @@ test "gossip.table: insert and get contact_info" { defer table.deinit(); // test insertion - try table.insert(gossip_value, 0); + _ = try table.insert(gossip_value, 0); // test retrieval var buf: [100]ContactInfo = undefined; @@ -1146,7 +1146,7 @@ test "gossip.table: insert and get contact_info" { // test re-insertion with greater wallclock gossip_value.data.LegacyContactInfo.wallclock += 2; const v = gossip_value.data.LegacyContactInfo.wallclock; - try table.insert(gossip_value, 0); + _ = try table.insert(gossip_value, 0); // check retrieval nodes = table.getContactInfos(&buf, 0); diff --git a/src/shred_collector/repair_service.zig b/src/shred_collector/repair_service.zig index 74b03550d..6be576b26 100644 --- a/src/shred_collector/repair_service.zig +++ b/src/shred_collector/repair_service.zig @@ -460,7 +460,7 @@ test "RepairService sends repair request to gossip peer" { var peer_contact_info = ContactInfo.init(allocator, Pubkey.fromPublicKey(&peer_keypair.public_key), wallclock, my_shred_version.load(.unordered)); try peer_contact_info.setSocket(.serve_repair, SocketAddr.fromEndpoint(&peer_endpoint)); try peer_contact_info.setSocket(.turbine_recv, SocketAddr.fromEndpoint(&peer_endpoint)); - try gossip.insert(try SignedGossipData.initSigned(.{ .ContactInfo = peer_contact_info }, &peer_keypair), wallclock); + _ = try gossip.insert(try SignedGossipData.initSigned(.{ .ContactInfo = peer_contact_info }, &peer_keypair), wallclock); // init service var exit = Atomic(bool).init(false); @@ -605,7 +605,7 @@ const TestPeerGenerator = struct { if (peer_type != .MissingTvuPort) { try contact_info.setSocket(.turbine_recv, SocketAddr.initIpv4(.{ 127, 0, 0, 1 }, 8004)); } - try self.gossip.insert(try SignedGossipData.initSigned(.{ .ContactInfo = contact_info }, &keypair), wallclock); + _ = try self.gossip.insert(try SignedGossipData.initSigned(.{ .ContactInfo = contact_info }, &keypair), wallclock); switch (peer_type) { inline .HasSlot, .MissingSlot => { var lowest_slot = sig.gossip.LowestSlot.random(self.random); @@ -614,7 +614,7 @@ const TestPeerGenerator = struct { .MissingSlot => self.slot + 1, else => self.slot, }; - try self.gossip.insert(try SignedGossipData.initSigned(.{ .LowestSlot = .{ 0, lowest_slot } }, &keypair), wallclock); + _ = try self.gossip.insert(try SignedGossipData.initSigned(.{ .LowestSlot = .{ 0, lowest_slot } }, &keypair), wallclock); }, else => {}, } From 4af13cea21d8f0b24b2feca132bd90c7cbe6a56c Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Tue, 16 Jul 2024 15:59:16 -0400 Subject: [PATCH 19/28] remove double returns --- src/gossip/data.zig | 172 ++++++++++++-------------------------------- 1 file changed, 44 insertions(+), 128 deletions(-) diff --git a/src/gossip/data.zig b/src/gossip/data.zig index 8026efac5..ba5580f3b 100644 --- a/src/gossip/data.zig +++ b/src/gossip/data.zig @@ -141,147 +141,63 @@ pub const SignedGossipData = struct { pub fn id(self: *const Self) Pubkey { return switch (self.data) { - .LegacyContactInfo => |*v| { - return v.id; - }, - .Vote => |*v| { - return v[1].from; - }, - .LowestSlot => |*v| { - return v[1].from; - }, - .LegacySnapshotHashes => |*v| { - return v.from; - }, - .AccountsHashes => |*v| { - return v.from; - }, - .EpochSlots => |*v| { - return v[1].from; - }, - .LegacyVersion => |*v| { - return v.from; - }, - .Version => |*v| { - return v.from; - }, - .NodeInstance => |*v| { - return v.from; - }, - .DuplicateShred => |*v| { - return v[1].from; - }, - .SnapshotHashes => |*v| { - return v.from; - }, - .ContactInfo => |*v| { - return v.pubkey; - }, - .RestartLastVotedForkSlots => |*v| { - return v.from; - }, - .RestartHeaviestFork => |*v| { - return v.from; - }, + .LegacyContactInfo => |*v| v.id, + .Vote => |*v| v[1].from, + .LowestSlot => |*v| v[1].from, + .LegacySnapshotHashes => |*v| v.from, + .AccountsHashes => |*v| v.from, + .EpochSlots => |*v| v[1].from, + .LegacyVersion => |*v| v.from, + .Version => |*v| v.from, + .NodeInstance => |*v| v.from, + .DuplicateShred => |*v| v[1].from, + .SnapshotHashes => |*v| v.from, + .ContactInfo => |*v| v.pubkey, + .RestartLastVotedForkSlots => |*v| v.from, + .RestartHeaviestFork => |*v| v.from, }; } pub fn wallclockPtr(self: *Self) *u64 { return switch (self.data) { - .LegacyContactInfo => |*v| { - return &v.wallclock; - }, - .Vote => |*v| { - return &v[1].wallclock; - }, - .LowestSlot => |*v| { - return &v[1].wallclock; - }, - .LegacySnapshotHashes => |*v| { - return &v.wallclock; - }, - .AccountsHashes => |*v| { - return &v.wallclock; - }, - .EpochSlots => |*v| { - return &v[1].wallclock; - }, - .LegacyVersion => |*v| { - return &v.wallclock; - }, - .Version => |*v| { - return &v.wallclock; - }, - .NodeInstance => |*v| { - return &v.wallclock; - }, - .DuplicateShred => |*v| { - return &v[1].wallclock; - }, - .SnapshotHashes => |*v| { - return &v.wallclock; - }, - .ContactInfo => |*v| { - return &v.wallclock; - }, - .RestartLastVotedForkSlots => |*v| { - return &v.wallclock; - }, - .RestartHeaviestFork => |*v| { - return &v.wallclock; - }, + .LegacyContactInfo => |*v| &v.wallclock, + .Vote => |*v| &v[1].wallclock, + .LowestSlot => |*v| &v[1].wallclock, + .LegacySnapshotHashes => |*v| &v.wallclock, + .AccountsHashes => |*v| &v.wallclock, + .EpochSlots => |*v| &v[1].wallclock, + .LegacyVersion => |*v| &v.wallclock, + .Version => |*v| &v.wallclock, + .NodeInstance => |*v| &v.wallclock, + .DuplicateShred => |*v| &v[1].wallclock, + .SnapshotHashes => |*v| &v.wallclock, + .ContactInfo => |*v| &v.wallclock, + .RestartLastVotedForkSlots => |*v| &v.wallclock, + .RestartHeaviestFork => |*v| &v.wallclock, }; } pub fn wallclock(self: *const Self) u64 { return switch (self.data) { - .LegacyContactInfo => |*v| { - return v.wallclock; - }, - .Vote => |*v| { - return v[1].wallclock; - }, - .LowestSlot => |*v| { - return v[1].wallclock; - }, - .LegacySnapshotHashes => |*v| { - return v.wallclock; - }, - .AccountsHashes => |*v| { - return v.wallclock; - }, - .EpochSlots => |*v| { - return v[1].wallclock; - }, - .LegacyVersion => |*v| { - return v.wallclock; - }, - .Version => |*v| { - return v.wallclock; - }, - .NodeInstance => |*v| { - return v.wallclock; - }, - .DuplicateShred => |*v| { - return v[1].wallclock; - }, - .SnapshotHashes => |*v| { - return v.wallclock; - }, - .ContactInfo => |*v| { - return v.wallclock; - }, - .RestartLastVotedForkSlots => |*v| { - return v.wallclock; - }, - .RestartHeaviestFork => |*v| { - return v.wallclock; - }, + .LegacyContactInfo => |*v| v.wallclock, + .Vote => |*v| v[1].wallclock, + .LowestSlot => |*v| v[1].wallclock, + .LegacySnapshotHashes => |*v| v.wallclock, + .AccountsHashes => |*v| v.wallclock, + .EpochSlots => |*v| v[1].wallclock, + .LegacyVersion => |*v| v.wallclock, + .Version => |*v| v.wallclock, + .NodeInstance => |*v| v.wallclock, + .DuplicateShred => |*v| v[1].wallclock, + .SnapshotHashes => |*v| v.wallclock, + .ContactInfo => |*v| v.wallclock, + .RestartLastVotedForkSlots => |*v| v.wallclock, + .RestartHeaviestFork => |*v| v.wallclock, }; } pub fn label(self: *const Self) GossipKey { - return switch (self.data) { + switch (self.data) { .LegacyContactInfo => { return .{ .LegacyContactInfo = self.id() }; }, @@ -324,7 +240,7 @@ pub const SignedGossipData = struct { .RestartHeaviestFork => { return .{ .RestartHeaviestFork = self.id() }; }, - }; + } } }; From 1ddc1ebc14408552bc905aa43b6b7a745230f374 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Tue, 16 Jul 2024 16:03:08 -0400 Subject: [PATCH 20/28] fix action switch in fuzz --- src/gossip/fuzz_service.zig | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/gossip/fuzz_service.zig b/src/gossip/fuzz_service.zig index 038b6dd10..2847df8fd 100644 --- a/src/gossip/fuzz_service.zig +++ b/src/gossip/fuzz_service.zig @@ -344,7 +344,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { allocator, &fuzzing_loop_exit, maybe_max_messages, - &rng, + rng.random(), &fuzz_keypair, LegacyContactInfo.fromContactInfo(&fuzz_contact_info), to_entrypoint, @@ -363,13 +363,22 @@ pub fn fuzz( allocator: std.mem.Allocator, loop_exit: *AtomicBool, maybe_max_messages: ?usize, - rng: *std.rand.DefaultPrng, + rng: std.Random, keypair: *const KeyPair, contact_info: LegacyContactInfo, to_endpoint: EndPoint, outgoing_channel: *sig.sync.Channel(std.ArrayList(Packet)), ) !void { var msg_count: usize = 0; + + const Actions = enum { + ping, + pong, + push, + pull_request, + pull_response, + }; + while (!loop_exit.load(.unordered)) { if (maybe_max_messages) |max_messages| { if (msg_count >= max_messages) { @@ -378,21 +387,21 @@ pub fn fuzz( } } - const command = rng.random().intRangeAtMost(u8, 0, 4); + const command = rng.enumValue(Actions); const packet = switch (command) { - 0 => blk: { + Actions.ping => blk: { // send ping message - const packet = randomPingPacket(rng.random(), keypair, to_endpoint); + const packet = randomPingPacket(rng, keypair, to_endpoint); break :blk packet; }, - 1 => blk: { + Actions.pong => blk: { // send pong message - const packet = randomPongPacket(rng.random(), keypair, to_endpoint); + const packet = randomPongPacket(rng, keypair, to_endpoint); break :blk packet; }, - 2 => blk: { + Actions.push => blk: { // send push message - const packets = randomPushMessage(rng.random(), keypair, to_endpoint) catch |err| { + const packets = randomPushMessage(rng, keypair, to_endpoint) catch |err| { std.debug.print("ERROR: {s}\n", .{@errorName(err)}); continue; }; @@ -401,9 +410,9 @@ pub fn fuzz( const packet = packets.items[0]; break :blk packet; }, - 3 => blk: { + Actions.pull_request => blk: { // send pull response - const packets = randomPullResponse(rng.random(), keypair, to_endpoint) catch |err| { + const packets = randomPullResponse(rng, keypair, to_endpoint) catch |err| { std.debug.print("ERROR: {s}\n", .{@errorName(err)}); continue; }; @@ -412,12 +421,12 @@ pub fn fuzz( const packet = packets.items[0]; break :blk packet; }, - 4 => blk: { + Actions.pull_response => blk: { // send pull request const packet = randomPullRequest( allocator, contact_info, - rng.random(), + rng, keypair, to_endpoint, ); @@ -435,7 +444,7 @@ pub fn fuzz( try packet_batch.append(send_packet); msg_count +|= 1; - const send_duplicate = rng.random().boolean(); + const send_duplicate = rng.boolean(); if (send_duplicate) { msg_count +|= 1; try packet_batch.append(send_packet); From 3adcaa515b6459d83aaf6135a80fb0a3e763da8b Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Tue, 16 Jul 2024 16:03:57 -0400 Subject: [PATCH 21/28] remove else prong --- src/gossip/fuzz_service.zig | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gossip/fuzz_service.zig b/src/gossip/fuzz_service.zig index 2847df8fd..5e2d508c7 100644 --- a/src/gossip/fuzz_service.zig +++ b/src/gossip/fuzz_service.zig @@ -432,7 +432,6 @@ pub fn fuzz( ); break :blk packet; }, - else => unreachable, }; const send_packet = packet catch |err| { std.debug.print("ERROR: {s}\n", .{@errorName(err)}); From 35ecaacb2437428f28a174389769af23179f1d21 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Tue, 16 Jul 2024 16:05:02 -0400 Subject: [PATCH 22/28] change to random enum value --- src/gossip/fuzz_table.zig | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gossip/fuzz_table.zig b/src/gossip/fuzz_table.zig index ad7bde255..e889bdd31 100644 --- a/src/gossip/fuzz_table.zig +++ b/src/gossip/fuzz_table.zig @@ -117,8 +117,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { total_action_count += 1; } - const action_int = rand.intRangeAtMost(u8, 0, 1); - const action: Actions = @enumFromInt(action_int); + const action = rand.enumValue(Actions); switch (action) { .put => { defer put_count += 1; From acb760d4a2e13e4f14b8fe4651f59591e29043a0 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Tue, 16 Jul 2024 16:07:02 -0400 Subject: [PATCH 23/28] change null check format --- src/gossip/fuzz_table.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gossip/fuzz_table.zig b/src/gossip/fuzz_table.zig index e889bdd31..1a0ac6344 100644 --- a/src/gossip/fuzz_table.zig +++ b/src/gossip/fuzz_table.zig @@ -221,10 +221,10 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { } // via direct method - _ = gossip_table.getThreadSafeContactInfo(pubkey) orelse { + if (gossip_table.getThreadSafeContactInfo(pubkey) == null) { logger.errf("failed to get contact info: {}", .{pubkey}); return error.ContactInfoNotFound; - }; + } // via iter var found = false; From f0716232a1a4fa4f996a0f43fe02b09a58a242cd Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Tue, 16 Jul 2024 16:08:15 -0400 Subject: [PATCH 24/28] update loop iter --- src/gossip/fuzz_table.zig | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/gossip/fuzz_table.zig b/src/gossip/fuzz_table.zig index 1a0ac6344..7d00cc40a 100644 --- a/src/gossip/fuzz_table.zig +++ b/src/gossip/fuzz_table.zig @@ -227,14 +227,12 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { } // via iter - var found = false; var iter = gossip_table.contactInfoIterator(0); - while (iter.next()) |contact_info| { + const found = while (iter.next()) |contact_info| { if (contact_info.pubkey.equals(&pubkey)) { - found = true; - break; + break true; } - } + } else false; if (!found) { logger.errf("failed to find pubkey: {}", .{pubkey}); return error.ContactInfoNotFound; @@ -269,9 +267,9 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { var index: u64 = 0; while (index < pubkeys.items.len) { const pubkey = pubkeys.items[index]; - const still_exists = blk: for (available_keys) |*key| { + const still_exists = for (available_keys) |*key| { if (key.equals(&pubkey)) { - break :blk true; + break true; } } else false; From 11ed5387ba6f6a0c27a1636382caab1a85677251 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Wed, 17 Jul 2024 08:32:14 -0400 Subject: [PATCH 25/28] move buf closer to its usage --- src/gossip/fuzz_table.zig | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gossip/fuzz_table.zig b/src/gossip/fuzz_table.zig index 7d00cc40a..6fa9cd6da 100644 --- a/src/gossip/fuzz_table.zig +++ b/src/gossip/fuzz_table.zig @@ -102,8 +102,6 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { var timer = std.time.Timer.start() catch unreachable; - var seed_buf: [32]u8 = undefined; - // get/put a bunch of accounts while (true) { if (maybe_max_actions) |max_actions| { @@ -128,6 +126,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { }; if (new_keypair) { + var seed_buf: [32]u8 = undefined; rand.bytes(&seed_buf); const keypair = try KeyPair.create(seed_buf); const pubkey = Pubkey.fromPublicKey(&keypair.public_key); From eb28c8ee3c838d267f237e6f1e1712b1d259b2d3 Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Wed, 17 Jul 2024 14:54:43 -0400 Subject: [PATCH 26/28] address ink comments --- src/accountsdb/db.zig | 2 +- src/accountsdb/index.zig | 4 ++-- src/gossip/fuzz_service.zig | 14 +++++++------- src/gossip/fuzz_table.zig | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/accountsdb/db.zig b/src/accountsdb/db.zig index 5b733a152..236159816 100644 --- a/src/accountsdb/db.zig +++ b/src/accountsdb/db.zig @@ -2369,7 +2369,7 @@ fn loadTestAccountsDB(allocator: std.mem.Allocator, use_disk: bool, n_threads: u try accounts_db.loadFromSnapshot( snapshot.accounts_db_fields.file_map, accounts_dir, - @intCast(n_threads), + n_threads, allocator, ); diff --git a/src/accountsdb/index.zig b/src/accountsdb/index.zig index 77b8b110f..9e39e0802 100644 --- a/src/accountsdb/index.zig +++ b/src/accountsdb/index.zig @@ -1096,7 +1096,7 @@ test "account index update/remove reference" { const ref_head, var ref_head_lg = ref_head_rw.writeWithLock(); ref_head_lg.unlock(); _, const ref_max = ref_head.highestRootedSlot(10); - try std.testing.expect(ref_max == 1); + try std.testing.expectEqual(1, ref_max); } // update the tail @@ -1115,7 +1115,7 @@ test "account index update/remove reference" { // update the head var ref_a2 = ref_a; ref_a2.location = .{ .File = .{ - .file_id = FileId.fromInt(@intCast(1)), + .file_id = FileId.fromInt(1), .offset = 20, } }; try index.updateReference(&ref_a.pubkey, 0, &ref_a2); diff --git a/src/gossip/fuzz_service.zig b/src/gossip/fuzz_service.zig index 5e2d508c7..46675ea74 100644 --- a/src/gossip/fuzz_service.zig +++ b/src/gossip/fuzz_service.zig @@ -371,7 +371,7 @@ pub fn fuzz( ) !void { var msg_count: usize = 0; - const Actions = enum { + const Action = enum { ping, pong, push, @@ -387,19 +387,19 @@ pub fn fuzz( } } - const command = rng.enumValue(Actions); + const command = rng.enumValue(Action); const packet = switch (command) { - Actions.ping => blk: { + .ping => blk: { // send ping message const packet = randomPingPacket(rng, keypair, to_endpoint); break :blk packet; }, - Actions.pong => blk: { + .pong => blk: { // send pong message const packet = randomPongPacket(rng, keypair, to_endpoint); break :blk packet; }, - Actions.push => blk: { + .push => blk: { // send push message const packets = randomPushMessage(rng, keypair, to_endpoint) catch |err| { std.debug.print("ERROR: {s}\n", .{@errorName(err)}); @@ -410,7 +410,7 @@ pub fn fuzz( const packet = packets.items[0]; break :blk packet; }, - Actions.pull_request => blk: { + .pull_request => blk: { // send pull response const packets = randomPullResponse(rng, keypair, to_endpoint) catch |err| { std.debug.print("ERROR: {s}\n", .{@errorName(err)}); @@ -421,7 +421,7 @@ pub fn fuzz( const packet = packets.items[0]; break :blk packet; }, - Actions.pull_response => blk: { + .pull_response => blk: { // send pull request const packet = randomPullRequest( allocator, diff --git a/src/gossip/fuzz_table.zig b/src/gossip/fuzz_table.zig index 6fa9cd6da..de13a761a 100644 --- a/src/gossip/fuzz_table.zig +++ b/src/gossip/fuzz_table.zig @@ -79,7 +79,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { allocator.destroy(gossip_table); } - const Actions = enum { put, get }; + const Action = enum { put, get }; var put_count: u64 = 0; var get_count: u64 = 0; var total_action_count: u64 = 0; @@ -115,7 +115,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { total_action_count += 1; } - const action = rand.enumValue(Actions); + const action = rand.enumValue(Action); switch (action) { .put => { defer put_count += 1; From 889f9885487a349037faac6f028f47543f5eca6e Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Wed, 17 Jul 2024 15:12:17 -0400 Subject: [PATCH 27/28] address yewman comments --- src/gossip/fuzz_service.zig | 6 ++++-- src/gossip/fuzz_table.zig | 7 ++++--- src/time/lib.zig | 1 + 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/gossip/fuzz_service.zig b/src/gossip/fuzz_service.zig index 46675ea74..3e3c2f035 100644 --- a/src/gossip/fuzz_service.zig +++ b/src/gossip/fuzz_service.zig @@ -30,7 +30,9 @@ const AtomicBool = std.atomic.Value(bool); const gossipDataToPackets = sig.gossip.service.gossipDataToPackets; const getWallclockMs = sig.gossip.data.getWallclockMs; -const SLEEP_TIME = 0; +const Duration = sig.time.Duration; + +const SLEEP_TIME = Duration.fromMillis(0); // const SLEEP_TIME = std.time.ns_per_ms * 10; // const SLEEP_TIME = std.time.ns_per_s; @@ -452,7 +454,7 @@ pub fn fuzz( // send it try outgoing_channel.send(packet_batch); - std.time.sleep(SLEEP_TIME); + std.time.sleep(SLEEP_TIME.asNanos()); if (msg_count % 1000 == 0) { std.debug.print("{d} messages sent\n", .{msg_count}); diff --git a/src/gossip/fuzz_table.zig b/src/gossip/fuzz_table.zig index de13a761a..589122f88 100644 --- a/src/gossip/fuzz_table.zig +++ b/src/gossip/fuzz_table.zig @@ -33,8 +33,9 @@ const GossipPullFilterSet = sig.gossip.pull_request.GossipPullFilterSet; const GossipPullFilter = sig.gossip.pull_request.GossipPullFilter; const Hash = sig.core.hash.Hash; const ThreadPool = sig.sync.thread_pool.ThreadPool; +const Duration = sig.time.Duration; -const TRIM_INTERVAL = 2 * std.time.ns_per_s; +const TRIM_INTERVAL = Duration.fromSecs(2); const MAX_N_THREADS = 2; pub fn run(seed: u64, args: *std.process.ArgIterator) !void { @@ -100,7 +101,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { var keys = try std.ArrayList(GossipKey).initCapacity(allocator, 100); defer keys.deinit(); - var timer = std.time.Timer.start() catch unreachable; + var timer = try sig.time.Timer.start(); // get/put a bunch of accounts while (true) { @@ -241,7 +242,7 @@ pub fn run(seed: u64, args: *std.process.ArgIterator) !void { }, } - if (timer.read() > TRIM_INTERVAL) { + if (timer.read().gt(TRIM_INTERVAL)) { defer timer.reset(); const size = gossip_table.len(); diff --git a/src/time/lib.zig b/src/time/lib.zig index 2a44d7c05..7572f859b 100644 --- a/src/time/lib.zig +++ b/src/time/lib.zig @@ -2,3 +2,4 @@ pub const estimate = @import("estimate.zig"); pub const time = @import("time.zig"); pub const Timer = time.Timer; +pub const Duration = time.Duration; From 3e847387db56c77035a0d4556a55c423bb2b453f Mon Sep 17 00:00:00 2001 From: x19 <0x39015319@gmail.com> Date: Wed, 17 Jul 2024 15:13:50 -0400 Subject: [PATCH 28/28] update duration comments --- src/gossip/fuzz_service.zig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gossip/fuzz_service.zig b/src/gossip/fuzz_service.zig index 3e3c2f035..f3815eab7 100644 --- a/src/gossip/fuzz_service.zig +++ b/src/gossip/fuzz_service.zig @@ -32,9 +32,9 @@ const getWallclockMs = sig.gossip.data.getWallclockMs; const Duration = sig.time.Duration; -const SLEEP_TIME = Duration.fromMillis(0); -// const SLEEP_TIME = std.time.ns_per_ms * 10; -// const SLEEP_TIME = std.time.ns_per_s; +const SLEEP_TIME = Duration.zero(); +// const SLEEP_TIME = Duration.fromMillis(10); +// const SLEEP_TIME = Duration.fromSecs(10); pub fn serializeToPacket(d: anytype, to_addr: EndPoint) !Packet { var packet_buf: [PACKET_DATA_SIZE]u8 = undefined;