From 2f321dcb0604880d80d83e9afc49daac03255475 Mon Sep 17 00:00:00 2001 From: Caballo <1076318970@qq.com> Date: Sat, 21 Oct 2023 11:59:04 +0800 Subject: [PATCH 1/3] done --- README.md | 140 +++++++++++++++- img/10AEdge16.png | Bin 0 -> 1050938 bytes img/10AEdge32.png | Bin 0 -> 861079 bytes img/10AEdge4.png | Bin 0 -> 972551 bytes img/10AEdge64.png | Bin 0 -> 647959 bytes img/10AnoEdge16.png | Bin 0 -> 942962 bytes img/10AnoEdge32.png | Bin 0 -> 678979 bytes img/10AnoEdge64.png | Bin 0 -> 376312 bytes img/10GEdge64.png | Bin 0 -> 840227 bytes img/10GnoEdge16.png | Bin 0 -> 667347 bytes img/10cornell.png | Bin 0 -> 1098697 bytes img/10ori.png | Bin 0 -> 976890 bytes img/150de.png | Bin 0 -> 803926 bytes img/300ori.png | Bin 0 -> 841099 bytes img/alg.png | Bin 0 -> 157278 bytes img/alg2.png | Bin 0 -> 7904 bytes img/chart1.png | Bin 0 -> 27687 bytes img/chart2.png | Bin 0 -> 24389 bytes img/chart3.png | Bin 0 -> 26166 bytes img/diffuse.png | Bin 0 -> 630198 bytes img/imperfact.png | Bin 0 -> 651182 bytes img/nor.png | Bin 0 -> 44222 bytes img/pos.png | Bin 0 -> 646482 bytes img/time.png | Bin 0 -> 534524 bytes scenes/cornell.txt | 22 ++- scenes/cornell_ceiling_light.txt | 18 ++ src/interactions.h | 280 +++++++++++++++++++++++++++++-- src/main.cpp | 10 +- src/pathtrace.cu | 238 +++++++++++++++++++++++++- src/pathtrace.h | 2 + src/preview.cpp | 7 +- src/scene.cpp | 6 + src/scene.h | 2 + src/sceneStructs.h | 2 + 34 files changed, 687 insertions(+), 40 deletions(-) create mode 100644 img/10AEdge16.png create mode 100644 img/10AEdge32.png create mode 100644 img/10AEdge4.png create mode 100644 img/10AEdge64.png create mode 100644 img/10AnoEdge16.png create mode 100644 img/10AnoEdge32.png create mode 100644 img/10AnoEdge64.png create mode 100644 img/10GEdge64.png create mode 100644 img/10GnoEdge16.png create mode 100644 img/10cornell.png create mode 100644 img/10ori.png create mode 100644 img/150de.png create mode 100644 img/300ori.png create mode 100644 img/alg.png create mode 100644 img/alg2.png create mode 100644 img/chart1.png create mode 100644 img/chart2.png create mode 100644 img/chart3.png create mode 100644 img/diffuse.png create mode 100644 img/imperfact.png create mode 100644 img/nor.png create mode 100644 img/pos.png create mode 100644 img/time.png diff --git a/README.md b/README.md index f044c821..951c1d8b 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,141 @@ CUDA Denoiser For CUDA Path Tracer -================================== +================ **University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 4** -* (TODO) YOUR NAME HERE -* Tested on: (TODO) Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) +* Xiaoyue Ma + * [LinkedIn](https://www.linkedin.com/in/xiaoyue-ma-6b268b193/) +* Tested on: Windows 10, i7-12700H @ 2.30 GHz 16GB, GTX3060 8GB -### (TODO: Your README) +# Overview +This project implements a CUDA-powered pathtracing denoiser that utilizes geometry buffers (G-buffers) to steer a smoothing filter. Drawing inspiration from the study "[Edge-Avoiding A-Trous Wavelet Transform for Fast Global Illumination Filtering](https://jo.dreggn.org/home/2010_atrous.pdf)", this denoiser enhances the appearance of pathtraced images by producing smoother results with fewer samples per pixel. -*DO NOT* leave the README to the last minute! It is a crucial part of the -project, and we will not be able to grade you without a good README. +
+
+
+
+
+
+
+
+
+
+
+
+
PJBb6 zU)Hr5LNL?GEIA=t;(LK#?!{6af&?D&81Jvsa|G=)he}2*di3>cebwA5*pdhaRz;HQ z7)^PVa-^J7zplI+()mN4Pd}<3!!|I|IVe8l(83CiiKpqyEx5MybjU&QsOx5OCtx$n zlb4<#?+rV8kuV2b8jdp3MI|G>wbLK2h^^VK;V}ZI_7&9~!0B$ULrOAi4mEcE34rxH z_<2wNU8Cp<`QeR$sL5aZO$TA>phbraiV{Fo_4IH0f=hpq6hiD4sTfm zt*MV&LMQq%8^CT>pWD9-X2fPDdc*6hmKT>?6~zBsB$`fm3Q+;50~;q8vo~r_ (=< z-lnYImT16}+tZz$<{zG;Fz{88x;ARIcbZ9NqvAJ -|k zpp@V#H1=NRYO#jbHNsMOk6(78DU+p&{ zBmOKIcr$`P%Q)^UdQ5x&GNp+&9l*bj=_wahtF+BVI4-k;ow6?2aEyv~xd;=?b>ZTZ zx%tvrK0v6D1j@kq*;d6%W`~g|S$ P{t z S6LPqGto-n(VcIKJVo~ZA|(}%vI@o zr4hky5Xq7|R&=Ml)g;B>)o6RI`*z7n;bE?IN(B+DSx4bN9Q}51VGv^MA6!iQTZKX~ z`2JhP;5_DSz&l5ddJ-FzX1_T$n$zlMm=?(oS`e6-jNr(!gy5l#n|!-$2}ibbUf6jQ z-i(b0p!|j)ap#1^W(g48UGEH~hXhmlBmz&kW&?>%?y93V`s(iWIP1y{T%~YQI$2Ws z6?uD~kbG|=&0mwg?!qy W=^$F&rw|Pl9aS!iMA4G4RQ6H^&aZWdr%Wak*Kvun6 ziyxa|J{fIwUgZ&pSvul7I4iD<$|9-!xj+l5jOGrANXFNZ;{9M7e09He)TYOxD_* p+P(jap05TJ}vEoQIn%&oIirM?)rkB$o^ zZ#YXEZZ%Wb*qNi}BMC0F@ZZZNdKR1mGQ$1Q ddy!8u!s5 z>gx$V+}+mr3xf|eN9~hk{o;+#_dP9(=DR0w_n7`Rmr4VoGlvcmy>VgwcZ6Lt_c&ip za=K$vQ4>viNH;3P4HLn=(=pp8?_wEX@bd;&pfL8tu%Y8|{h0i?` R+c*-POARaOD6xMIo}F z- Rz5XGAl#uF)fjR&l;52H`K5;ZrQQg?NDU8s3w{x9yn z- ^i`UWw}xucq8_zZLRM%0(<7>n+ 04&*2{RE#QqkSrOR2>IzvN{p^>O`_k4?)xLrV%r$4*-?2PhYDLlQi!k0l(Zl|c; z8@P}vI{GkE{m_wiUQRSFCMRW7-$n3jRNa1VRlcY~Gcw(yuiCLUf;^ILI|VXnH{` $fb!0AzX_bEPEC!Q^XB;uzHXcIN=4*;7Dk02;Xnz4XIJm? zByd#-TGO8ZKRsy1k!S>PV;*eJ9C%TdzfaAutu`VAAg>;6o*491r|B;5kJB9yG?OPc z%O!|69g2B{18 7&>uY2_%C;4SNWm gzVaa$KUlmxEy} z^DVB!C*Mb8bRQ9y1BmFqZpwJ`p_$;^e3^CRU3oNJ=ElrBi*K+n7lBV74W0f23<;V8 zKuVpxY4*VRE$y$5puYrsoi5f{AHdRdDL{FzG>b)5&`H$4MHzf+-cn0!IcuPq#B}}B z(PJ=s!^B}_h1`i+u4f6jxzx+US*~;jFVKs@+1RSG6)_6fvLs~$b) QnS zOCCt(Sw)*_WQvhaE>_2dHeCwRul65G!TkZG0HxwQ?F5j$G;KEJ2S|Ch8V4%wq;#Pk zwv xTk`{}ox8UBGowQ|&bYQrROHA)sek)?fQ z;@9w}2Jp^zr5S~xIn~s^)`RMh4pgFx7B%Gr-^79C(<@l3G@E>}UN6)3K$Xc{$xzr9 zZ}X#JmBqdWoD(~jy*9g+wKdieW F>=D<#%7GH)XGp9voqCC6P*%pE%0_ z`|UX?4pu4ysi=0tD+;DzKP_fTZM wb^n?voo^eKN(8z^_3w|%N^h<`b3gPsKRG+^aoHk~-1@A)xwPYi~- zFbSolx!@3-6LckQ<5B~ M(9|7&9zE@Qu>HV_Y(vq8eV&+YjGW1XX_f zD01aLe%0;nDZN6Rv3# 5;J-0kVdPI55k zYLO8Nc+g*c#QH0_e0sv4aF!I(HVgmTu)2z4_ =ZE>^wRS2?^L`Zm#@QxSZ7UR4fELYs<)R_3o!F8gofpx@p zX$Py GHaT9b*O+qV0nZ3;-fO0! zOxrAaJvMEr{y;2Q^GU2}juXP#@U;yE_3hnID(cs-uAWMNjqtVB5aL}+QiDo^|E^3d z(&cYoReq{B(| Syq6*my9Ip&?56t@mGf5IA`(r89l2__ z+S8F%pL!Q@pXVhsX;z4n6rVR~6l%vNq){PY-b)^O{>!^FP)Z)HuDA(LT>w-s^ydxW z*-b}?L!g}OfaRv2qA;t_hZu2rsCYZ<(Zr@wK~SlwFsS0EBeS{`E`5)%XeJjNWQz#~ zLA*dr=W|BG-|Mw7K+@`Qe*H5)6R&enkS==PE8H)S=jgAz1kmZ8Bf?uMV)-tSJ3=Hv zyrAi=n7B6dtR^+IGn3YA_}vZdRMqXCL@J&ss*ly$p85X5pj^4o`n~Fa @dXp|=~{iP(YAC5=oyj8VDFZ?;vKqQEzN zZaWh`Rl2CN?qgY#?H#uWbcR5HGD{Rn>7{T4A{Sj}>Ee3^Xw3lOMAI_~ZVsPCpYg$cXwSbSyx-+Zm1rV JSJiR`noQ_cmZJP216d$K$t4Y;=0t`_ z+7=H?aRA5*)ZP^#YnIK|ea%80S{Y+)$%jK8`tiH@)-hS=fE+Mo(m<1?$ZTlP*$HT- zx{nC2)$c306j?oOBICkb6eU-0wKnK2gr;+#Zv@rRHzwa>?PJ!aPp6+z9X`TiE-{gE@q8&;GbY)eS7 zt3kPK&|b9<0iJi($goK{^UyPs4OEIQWZ46ddfmMue;Cs|+eiyh@M}g4>!RU2Q|pha zz0i7U)u*ki1fKnkjh?=~U+eEtnY@%?+lh0pM6}oH9NO$xb&X7lf634dg%{Fk-?o3m z^Gs5aqc^&aZ8x`?xw$*aK;;D2BuS>~>!ux8dFMhb-t0|jiW?|$L9uiJEyX+wh(;88 zs~0X0EuPTdPz0nW!l+KprFOmxe=0QEyXNOnum>F^8xAQcjd&~r)b(nouea*gb=qS< zXzRK*=P7h!A{Y|f3+S}a$Iy%DJlNX=CuEt*qSjjrUIM1p2^(2iN?11d4zu##F&+iz zK!CCC4LDle`mKNHod-YuJvNMbP5HO##StJP!*BBM6U?s@Zp}z%=KvsfgwwQQIciSn zH|5?Do+|oYNIFvxQEdlH6_sGJcE}wshAMBbKQhLy-8KGsc oAxwEY(auXggeVzwyZiA%^d8mJne4c>6-**`%%@T6iBx@g&CAU@X6iF08w~lA z{-;i7JW2FM!5e|ns}5Ej#@D-Q=q051Xk 16#LCzuyMOv6)gg}IQ>iNdrTX{aE}6 ys+4bR!>ebGb#tV-Mcly+BbeZ=>Q_j8Oj@CSs6Oi9y xt;0!qTO*@{&E;E2MY=WK(JKk=rI`TJD9-`JP86qVx_PHOnk9y}*J=&y4QQg4JD zZ LcJuvc 6CCAF-m`*Z84(=|r*Nb~cBh z^ws}jc&(WR1MUJ>pin ;o1`y=P2e(=+OgjDnl4G@`7u+G!!6jX3&{F0R@+C<)3| zV}oQt=zPC>70Pc`6WnOPj^TO^3HCYwguw3ZfrO5_PP3keG{2a1UB8J^om@mMf@zF! z2M8IGX;6#@9e-9jsYAF>b~xM$B6 4+vrIgHL-`D{%J+beo&irT$$Mvcf8KBYv-@#0>?Q~Whj{XG0WCPiN}8nAkz{Qf1` zz^U- DaFV`0lsuE+ 8oF`Gb8IXygF1&N0bIr7YT*-`P%h6lQm z_M>^-;rNE4hzmAa@O)bQ$Tbp12gC%~=hKQj!=<(rB|+o`3#LgNAWoPz08sYC&YTSg zUqHU+DRb*aOQZ) Jxm`x~!q4_~hqJSOwt8@!M;VW5}7(*65 znWcU^;9NQ@u@mMM{zNur0fbf&-uQbnM-n`tt1bQ}b-ub>dHm!P&N#2_euPVVN-IoJ zehR2p`sgxoBF)5`W{p$iQE{SRYTY9 0sX9~RCj-U0Lu99f_IqDX>62Afn|}$z{Q<`1@CP+hS6D? zgPdy90h^*H!GWt2WPfF$jn%s|8g7q2K2OqJBNYcYw8UPqB*ANf4+gdh`rhsActV(3 z*~2pzOTOEV>*Sfs!sf&M%(-}bp5$bvh=hVf_0C+#Wq|<6px-hej~GM{_R?Ctw-bRH zJ1AN4^%77hUvZlOs9>4)aMKM>Ee!9sT%jfvpmZ*4p{@@P)U)LmUW YfE# zJMpNjkn%0_{7eg7xHJGH&qNGT0F|B(CvUZHEo-w{je?m#b#*&j_HtPPuxdst7~t5# zDU6}j%qYcDmQxQPO>_Z6l@GJ_YGcfo(sZwcM3%vTWOv7)?$qlLN2Dxl@@!o%jCr?Q zqjwCkhpg69NHvpBW tFO#BrUZO}?zpSbAx4RAjK(p&wXvPh5E=w}M^lr5Rz zeHn&H-Ugo235$Mq|Huz)JUg^xl=$m*hqy6~J%-G;ur+Ca`XUhVw0##&iWi#bwl=bF z(4Ro?zmi#(CU>LghCz08oL^CdWzKv@EYx8~o1G%wfAq>7)$xOCglxqFoX)4zP08}@ z)WKtZGq0_ D=U?WY4_Xp=>^IVDl3KFd)nf2JAV5~%bwLd{>4DUpl(IB%%1ZZa@5Z=UgE7U z? &Cew06{u0K}{HLEeRla9O_?7XV8b}vhLN%bHi{-Q?aL&IG{N$W~y`NfTbLl3Ms z^o$fNZ0*87%S*SnwBKnk<_D`YZh&5_U{_=ew qbH o#{nHQ)UXo@rlTRkmP8hn$R0iaplgG##alR4i_P>#$02rm4A%uRKE2s?6 {OB(`)8L6 zVvuDpH}46|`fE;FNO`bU-6?H!J}i3~Ae~tw^;hy5A2N>sda~M`+$iXPnuWB~T4mVd z*-h5zu4cm^TPim#?GZu8LWZ|?T6Y 2^Tr$ao!tFu4OPfok<5$^3_ zxTM^t9~5_J3H_vg>$&=pT1|QceL8JCyGm~Cr%Joq^Js4e2DTrFJ@hyKv1Av3V!Z_b zCI9GnL(O1seT(EP1QueVJD;Q?OJ?Yqy4bMfCtH?7xRFR>L}rc`u@PWRQ J80hU>=A z@}?FWNVyM5TEO{GAco0InrIrm>94K}iqRgE)pi})2-@{E&QatlNRb#cDrEv`F1f @bw#p`!s>fFz?5&m`rwQs9?;u1vzt%|SMr5#?fSbE zUy++ztkv7g*1ga)DaVDjCvm1@%9s4H(268)&IEZz1G7f+Q-4eGX?{_YvS{#iNqy`1 zj`sYkO8NXz!JUo?>f;BSKLtLxN3*I&M$M0pZ}`6+t25lv*DxJyT7Fu;Cqqqja6_jZ zh&LYor;{(;*La(dG9CUsT7Fdb&RN+Y7i*PC`;*HD%+9ZFjjo7)k V#&8r4g8X=IZ*LIL6hA*c{6S|;vlONmPS|c400RN zmQJEK{4Bd@MK=S)@jAJBgYQmNvgM;I`rAfHyT2RtzARmrCy$uZ3N2{FRU0`#`kAhW z_dB3w(<3YF9D3e*BM)z|IJ;RJVGc;~X=b@tnt->}Y}f`c{!T095hcW*pqecUGff-o z F8t zXlDE;Sl-l6HN3z2Pjp#Iza5FCk=Zcf_T 38{5hqBpZ{ewUJkQgxLo14=RixVj-o zSlFkU&qdw?ulK*W|4wQUsbe M=X)G%uy+HY DKsf7?zZ!>qx zqa`$+ap|tvkyXgS#?FGGpF6>ZJ@_K`jS>k!&|K!=jV=o#zHh(Cb#ToGMD>PNGp{k# z_H{rLN(iwrkv*^~f#6Etf<6J1y!K_0otn9g#pH#f+SIe!P)hvhPG^FD2@PRI*IX=M z18T56a~^3J5_}E{RE~A*>O`nsWR6ZQ`XGXvAX2 69$4mr?R@n$ymixe-juJF{i9!Vm5e;n$>7c3os)=yhk zzVHHCfMohFQ4H9oRR)Spjb={OAKu&2q%uwy2Qj_S>b-91KLi3}Ei}tRy^lG%o^euj zS{&bfBmo<6A2H=Ojh?#h*F0+GX5d6Js%U&@OrBksT(nMC?W>npEwB+jaaEmweq>md zsCL(%=qM0L+y;OsSM6oq(tcuq5b3YZs7WyIdV%X|*Hhma))Xsd$8FTbaX6f(F&C{x zm&?L-yn3NQ%sh85dI9XOUh}dk__1*l^2!*x(e~f0?aQ7(<5JxY(?vj@Z3?s%wM &;SVI3O)Ph~_$GtBnE8 z6vgY#uxvo!F0jqMoG)R@>;!5bx)E~WH62*@1PeOjSnnPD+J8+eva1}2jv_W5p6fF( zlBM|=U(-vnZHcP@Vv{RY9#8+LX6q=>Qqk*Eg!0h(9mAAvQd7+#up&=jCmRo%0s@;m zgT*Po+ud{%KsH(kUY~4N(hjzze#vpJS;DUMEdNXB1GgZe=8i|}Ly`1mNCY52`|qnd zx*+~$9yS6!f(}O*>u*oNmBLD;K5Ts|dwQ1_g}C7>ulIF{USJS5El$%g2`hNzPjNLu zJ>BNb0`mB>;vnT;p3|NuI!5d~uZ*pWZ)=c8>XC`+TaZw|=7I-*g}MUWT;hQlzpS$Z zr-S15EOuL$6?+GZOVR?Q3`8R}|6HM8ko9jBjz7>(7AV*Vk~01>ibHhAWhkmnT*?%e zm8U4o-|uf aCS7)ExG(KHxW%b!2pWfI| zrEO*f)F9f~3sYGkwD+BX>6d~JHe_@wi%$&G4DyL=KqUB`S_|_gq%++Bfk1L;5AAL; zF5<(?SaoEM|K2n-L(xH84oH n(IW^o*GLZ-hd~OO#~6>cWQO?A=aXHf_2qe#9gB zOlAcwH^a!QQ#Yu4rSzPvk)&ht5bB+foWuObc8MR+*WNIdg|mEyxtbN?evH-O0F `@o7EM*9 z%p}M&ptUPzPdhx7;0I?=Db*FB%Rkl)cA=+Qx%U=b6+Bk%J3VpB`k3#%5wJ$a48U>T zU#0L!!bMNkb#%g$G >+zR1a8rj=u; zK3&h~% RnI#Yuyz%S0~VWI zE99#YKbQ_#+_7)AEp-v$Ri DCK2!d$#+Zh)@;!r(QPT2Ik2}U@(V|-itXDVY@SK-BdH>RugN8Bft zh_1=$-x+kNF3P;7n>B6JW=9Eo8oPo$= MKK8%eWZa<$PU+kg~c)#^R zb*&8c6Y2_DqvO(R3O~f-(fQ}LCLJPc(%aYmLQ|!}u)A$6Z Xq8Uj}&>fQH0)qpu$>bPZuSo9%Sy zr?(eZT@!W) lY5+jyl9yWJ%k8cheHq#DK@vOGb2g0?x z%3@H~ds*V`c__&}kCzBKEo^Zf23ppj`asbmaB5Nua-{rD=Rhyhbw1=fbTpnR;<$mO zgMR#Q3;t |VlC<$~V1UjMfIRG*4`sCk%IUC|xYcBb83hk2rNB)^3>K$z;ML|MJoSEUy zfarH1Bg|M6d(OUi;F@PNI%RL&p~pYN;#-A9N&7eve!(LKt4%2W92vl)QKP?JsJg{Z zH#{zxs!3q$TTS!21Kr)8cxNep5Pf<&uUC_JXKSzxmV!rude>oQ_4TZB6&X$dnzP>R zIweJwR2{G`5!Kqb7DKjsr>n-@i9j0O8u!vjLwGD9@4an`Q8@5k;DBFu7m{e_x}^mK zx$nf|j99m|1@&DQA45O)`AmYJ2x?R(sAi_lTlRX&eB8IS_jvp5uj>&&px;}5XUJzY zOHOX3e8H%#fz;hX3Jl)L=wPh17#d{=Y+JmAKR8eb4XdS2AtRS7Ydv*O(6EK8B4aE| zG2#dH!v;BJp+0q^tN~~T7N6y--?u9hRH9nCItDFtQPK+pFWsN@XEVLzx7iA;t#O~A z99dd~y0DeApS)}quul2hg}O-NP*>YtPj)KXMVuwjKLgt4tT<6}8shZJOQ>DK@s-2V z#c6CU9GLsE7XCaUutxIB>}7dD?T5jrIG-oW6H0YScR4{FeNu)RSufP*p4O&aPZoO% zx)nYwd8mI6y}g5}q?vr2Kg*UGxY gKe{#%)7w@>|cavl{M7G4(T>>BtXGg1*5kNxbk;enp%;NwO Pa2h5(IU#A_o*0rVjsAoF|^fp&K-LL!*Q{?Is58lcm2 zqEsB#EyYYX^^&K8!v^iGZZXm-caz*t<)VA5BYSI+!9TSyxd>W2v&7R9&X2Y8H}`+3 z=#Y(W=Q)+-RPXoB7JvXI(>TfTmOERP|HE>+&n^6bH<}G(lz?ipjJ~J{%nV3sOx}DL zs9sj>8Wtm7;~*yqw%cIL;0HJUTCthAWximJY)RB7=!3sqtv&KUee@D2>fCG!@9^y1 zV7*rmBq!exSm%Phwx8pLUTduWq$`;+znMg(Y(_&U4IcC(_Kty7bQ%s?Blm4=%qr0r z6>+ay_-UBhWavhw&UH{G+Sm76mr( Hh!!pN^D-T#_a;Q?9sB *1ToEb&Vr%8sf&F1&&d;9$ZyKT3<56{=*`FPwP`MSkX z@}^9?sbQwEb<|s5I2nEH>p|VAdB*g$z|nvNe@X%ctEwTy-jlM7z$)e$hacc8GS3_a zZIoD!Yj0w;zNj3=Tde}$@ITUF(oCcFT3)}4Q To))p1kSviyy1G9 zOo)y_!!(?sI5Usjs``Gi64MwMgjAMS7k$V#?Ef!*CrukI4OtFf>TcYA_Em&|J~@gY z2(3r~os|}QRpU6b8{c_av2DWo=Ja(PV@(>D(`Sz3%!w$4;hU*vUy}OwaK91Cb|&vP zTBRoRn=qGusqh!ZqrnVc-}#g$sK^5{EA#|!q7$B>$ZOb;=(hPyF_$|`QmI@tBf%Fw z>V _bqZAuci~4TcD^Zv7 z1b`Qaptz8U_*EYtpZQ(4Zbn7*B72lmk@cPUkp;y)K8!cDQ9BrnqD@H{v=Rh0CXcW= zKCnB_WKB{Loh20@n;lF$A&mzMe0|fRI=cfK;sYQ@cn?oBnb2SU?r8~4M%-OI-DbB7 z-YPktvW;^;b)VHCgoJh%K5c*365Xd*>jtn5^#_uel^{P2z3)ixIxic;oGPGo*fp(< zNCXH-;w1}*u6{iqvW9;m353Qjn)0$REa(x8d6J4?x`5c6Cn+Rn*_!^!dpPwpYB$sT zub@ZdKLKdz9Gcd?#knrG1XA=za}^yOB|#Mvk|+?Qa~R&^sA*t%6*5|NB;+wvQrDF@ z=%4-0W=(3*xb=)y0(j=ojL&bkbmlp(lo5rOt>w2bIvN*{CC~%bthsD{imjbDdSu5H z^@HEZW%AapJQyNae0j#Ps~{>T#?2>@qA8Bre4fVlW@FR?P6qqwUB+17;0)ClqCK 8;Xrii?Ez8+E5UjAJoPG^% Q$?F^8 z6Uq2bKb-OUm8}Fh0i}O1sH)QrRvd3{WnYI*YNlR$IdJ7`lXsMYfS=X9gGGb4&v5^O zk#Y6+`dcUB<5R2b@Kw #%l=J|Z4|02gyhYS<9 zeNcGSrp=dK9AYo!Td=t*Gq;zRpH#HB;c|TsVzwO9fn+z%`2I=7;b+yimg$c=0z+D> zuo2z%q@E?~ljTiNpv7Etqi4C%m+6~}_)dfHYBq}fcTQkYi{JFj<3Vi1T77lhPV`lL zHda4w6U>_xtZ}JnG5 ?Bg50NCux0Xk!zM|)MF)a?)Kk?-CmU)*>C3poO>q`vfL&Huh zsdB2YCSsSJ*t>7_Yrr_)ek`xA{dSk48|RHMRZjWlvEDX)(Xk2GeC8H?c(sH?T9Omr z5Z`f>Ph8-j;ZnR=C5u5bUAu-8oyt+cC)gZ)hxsp)|4?75O-M&Z>nYOCQzL;gQ85!1 zan%cPO&1}|GE%XlT&ZxWSNn+|nuW+H2UW=38$=Ao5WMUp?teaTsMyoYgX?N@u16;$ zK9<>%0?or_-j%!fYCAb g3ZbZ1S=C1V3wmQd=Y3e=aLp!6o_C`Ve z2OUZ|EfihJ9ZHh%6CfMuV3M`tUaRNYD;6 C6*6Gk zq`f69zG?yQKvj)B|EobN|68ChSau>_#>d2V`d&I4sd=NS_on`&ZtTDKfw!#5P*M#| z5HdKN(U&j3;|lRBbc1}|Ff%-# GScTg>CvbQ6`dsyTpR1oso<>)CLyn@qy>S<~NpIsNj*4nyt zudY68AH Z!T9{;yx4xd0)s+i3dhA;frOf-?2P3po!2Cpo~_u-$O3#!5^9$Ien zZc`RQpC4-C8^#PywK%HaC#N7HKYl!ML~xASrydCY6#Hn@-$;a0$n~o07rT~UFu yzyrrTNn zUSwQ$vtUYYOJa4j?_%#3NVm7UA^jeHJ?}*k0P;q+{k`^%bRQuNNNN@Eng)=^R6ih? zy+^LYqDxSsJHRqz70lZrp lR8w^A8U0!%2nMwRDGhFRy8xxrK~GtbYF%xq*y+^uS0^ 8%zgXqm0n_6X^h9M$%$(}%4hGv zdv=gul_je;gyIg3>q)Q)2zxBw&ErTK-jLncWbPyU&8{xL6gPjw* 6Pw9YUqNm%;kejpS7{zimIkdyG!mfWC zO$g7d-o?3u2rgSp+htb+K8=n~Aapr7KCfWYA #oxD8pER1pcB zJlQTpv)M8g|K32Xf#_kjvg})8_dVDFaw%uga =L8>-P5)s?J!Sq#@_R2S $Nm32||=w&}3+-pFazPE7#-79bO5F5gkDcH06*nH=m+3mgTHl*I3M18SyXH z(+7Rx4I9|*-=~ZCh!oNl7p7=R>1Q2{FEd^F!Gm}KdZ8pj*o;*uXH1|uT|qX$+K?3< z-1PFqxlWw0ZVhZd!7u1DY*^j7l`B4$6};$ ^a^drLCmnm&<7$E_n$_zm{DFhl zWej!N<`?y441%U26WxhFIV%f!rW|Rh7CIj|G2_W^$Az117gXVs_6_QYf`0XlDaGb+ zXYm j|wJMpKuJG zu~ys@J{;S7kixPPUB3J0z-WyS_>(;0YRgi1dfJVSdQrB?>hR8(tf!!~jpDd$T{3i} z^ub1Yr7GlfxjF!*IpR^pEmg0)KcHW%1tTPdK$tQ$denCf?BzncmEh eVoVtHefM;I2yJ$7lTk^ZUUnd!qSwg_issvf8MuYWBl6Fd(0XF) zhPXC>7xd{)_J%Ed%IW6RvfYdeO%NBxzg@=XGkMeKKxh7k{(I=uB{wHX?sPuKRFsll zhNUPURlYl3kuTeNZxx=5dbKSL2^mb3q%j0>HrQ^%IzFGVJ5!e2*!sXx^HyvV8mFm) zBGHtO92Yy-XZQcsVB{MY+iXAJUP$v)a+93qUGb%&KdlNeBeRpaB|8(IUP&65>DxzG z=|4B77O 97CtfSc>QbBSvv%+fB& |~(aNBCl zj~I|jdBSXc=)!jaTIz|P1qQ)EZG71g(W@;WcrFUlBLV^#(chM@*7*NDVo(tNaThIx zPqsG=Dn3Zma?zD^{#-#WOm!NsJ%NkINL`t7ga##n$HuPLEuOWv0K-+g+8A!vJ7NdC z9zC@4H)LoJ1-(qGOv6F230c%w1+ofA9YHUO_Ozv ?cw9T#~#Cmw1`BCsST=@NWG8(@tw5Ud&)N{-Qw$ 9!rKb RUP7n`|RrUI`^${#ur zROgc02q+xV&;(XcOQ;KLIZu! sEL`9nLC}3a5PETTVgq8^2L6Ru&S1w=Je- zJ}*kcjno|~6nRF q2VEEH)SWstIb>b%B zQ8}}Xms5E`2$J**$aIT_-n{OUx}ubYgSd9xPf#ml$7-X#`>{~NVLWS&t(>=+1@yTi zxwT M!0~@`npv3M`9w4M$ct_q9=w4IY=a zvMC$V5 1nE8|KjUX74YL!7SHg2Cp@(>`@N_m-o`uzAFGM^NNwnYC(GtwVN}Fe_9f@w zo}zQLCy-FDu_L1#RTWhHo8MWlC{PtEhF0dNNbvzx1b|buGq+D$sg5qA${y+v{&<<* zB>wSmjmjplKA_Imw%g?@^13Afh)I>SI6MG&fJ=dv(|HlVv?Q%_syvL6lbbnemz9%} zo5MeX{C!Vev3Js0XN+NZwmsNU3Vbd6vwBt(7(Ef>Hu~!0?hg4pXEUP>Jjl@}bB9wC z&WyTz?r 8W@s;TK=qsttZZgR z Xk4r>nbCs52Z{Sz@& q{`?b)sXyJdzjQRO5G70sB07!mWxk$-|oE z(zQ(atWWXa&V3TD$QLCqux862a!gPz?cXYZgQ9;&1cpU=0&tWf@zKI0r^0dJyuN}i z>Fj@r7}SHqgGs|G9-MQqW*wi4q3rwgJ8@9Er#2Li<`*{do;-3~DiHy?-M%wI(0qr2 z+OXSuf@9-N_xqfA40rN_KSOEOx_PkK9jo}ay0m67?(6z{3GIVRe9};43G91s=TdL% zMoPT5#&=X+Z>pxh?nl_{zNVX^|M$ TGIZxy+H*4Y*GOd~!< zVOo (TKTfniFKaiRoFXp(kCLlfa&Tc## dc(GnOQATTz)Qmt%@7@DYh#&P%=x$N3@@8 z3U2qAXuw2VVq6^&L42}wwtezw72rCk1YTfyuGNV hv+tflo#5D>wNmG-^++PAQKy z8xu#mcux`QuiJ+CX9j-$4)YZ0!?4B6cs?&f`R1RW^&0{|b_9RIy?{1(ubX|IX8h-( zPjKD-A1?8ik6|^RM`40iQ=0mmtQK`g)wCFkp$vi;O*1>Kr!|>x1GhdFS&MA|^ehnb zPzh1G0E_qs>*C}M$qk>s4sVa$eC3R7H&h<=;FOy`xKPib9WH9N7!nY_3Y!Y?ODv`B zW_a1HMmX!fYi#N|@azKG{@A(FpGJQNrjyB6YT~~;g*``a_)-2_n!Bvi!@)D9^#w-T zdAj|M!Eq(QJKL>D)%e3VHH6>7zx%*bX=T)qx@vaIh}4$2x#7!f@(KEMNHDco&;MVb zx!mE2(u6;brz*Tyf8Ys9wdM-l`S7Fc{4jM?V<0tlATmDt54f7r^RFb76FM4tn*&$_ zl4p?Ujw(99GUyZqC+vBSYq*nlg}YR1&A(({29MAqyXMwjJR_EXT7$SIP*kT9@~Hz5 zLGS`7l=%#|ZGk121O%CAkOCpgf>gs2;{;#{mWVi8N98?vM1R#?xSZUgGtp{*F^6`2 znpPnQ&3-u7wR}3Mxtrgs*0OhSaYEVc-XC6|8TQW`sLD;xXael-{wx_8YngkY11=@r zM||nOW1=JHGrbnL;oo~(T+iV792pfJbY=86&KnD(VYi^jX48<61&v{KRn*s3IsJqZ zG2LVj=I<>`O-icPdlj|Sx+feuXKo!HIX>xK*D<_;&}eI!-&%_2*(PAl;7>Wxi=B0= z>V1D)sKY&H9#hzHnDJl$tmu!=iUx0dKJ`IxAe`RcSIC1Nw(u`&&!oKl(0N<2d9)^K zzx^hBg4b4ZVuk3vkimyWe%w^}k#he1fdl-b5pUp^s7)5HE4-s=<@xp) 5<{KQb zBRT;@rx0FRaBu%}&4ZG3`Q|XLIGd=Zz5`6qsi)gc&Z6Q|ve$swOE6>R$dP5u Do_|s%!BH%V1Mx(wbZr4*OblH#x?MqMrcp z+aADM&ppfDlw4Z4hmT?O^(-_-ZF2NOX1*FEDgC~;a9E7pzWFnsF#};e^v5gwn&F=# z?fbD+idq7bXR3^PtLVG+{jbfTxW2BsY+s%~cmiO8pe!$}&NgicnE{In^Vf*4=bs23 zmTSKu1Umn_Y4p|dpvQKOZCk(5!3+0bCWrYi37j}&)umSitm0Do7Wkk)+(5QL?YU )C}=&_n(06FU8*44!CGpQqTP0siOr;nKa`@LWDj`J^HWDI0e zXQkp3+zA#L@rkSDkg?`B%{|p?AhLZdSNix|^Y*1-%s4tV5d-nFW(SEYVvCnzyjlzC zc9;M_hln`PDTUSB%js~_3pj$C4jQhbLs(T)C04_ysSnliolISr_u##x3)dqD?z@2e zM1G>Tm0`n~Z|%1nOYRTr_7&(^=|2j8zWE4%JuaSNBb%XBXk=f>zbG `Dq#W$V%Z}v&-!~?wXt;LhDloGB&(`q&l3%IO@y&mrQ<8O)mX)ED*2(A(Xst|h zL0}F^*#N*(uv?YgF$1r0sxyAAEX0%G9rP%d`XN9dxwf8a0UqReF7XGzzV|2>$eN`G zazP;~Kmz9iaEWTuX-fcc24nfvV9|rp%p{Y+s>OyT5>4xlX1H)ZNK@FIiE0=C$#jh{ zQWaa&@rK1lkB-yw(nkCLG)&3bi>Se_nPcqZs{A_Vle}fbv)Syn;17)n`woXSd~3Qg zl5(&x`k3!Ul|miXU(zrGlQx$21^6Jc_*>)Q%MB0N%I`aNx`jVF%7Dw&reZ-GLe)ua z3{$rAzVQ-6NPGlH22Q233k9{u iEwF-mIU>7~2lI3y&Hb|-=B z>#tFt$vd$h-^NJRX&Rz_Og{LAXkrXKo*G+vj8C*JjQQ^JKGjoEPw1sF*QsHB(Vxhi zRlgAGzvEAk)g_8f`SIy%*To@K=(p{|L0<#-ur(cF$-GtwI|aErQyf8(<8279h5f`I zmk5tFtKFO@X}s<-x^iPYI>whT<@MJjj2kzMa5@xyV)!|VoTKl1UaC42-o;ClrGImqg9ps#qK#HbCU?kg;mj;rTz`MG8 z5gLWEleYo~VQ*Npg;9a;;@x6f7S)cF^8~1&?Z-wv&;a%=*P=ztU;oQ0WW{=@^__hI zfZi3N!E!bUSxgDC_ aiX`)}B3B3kuCTo4sWxH8d zk-F8oM &>n!#i@ht2P}9|2r%jAa!~i+pDs7MQ@F%Q1y!?HXiT7TGSm zO^LjtmZJZr?{b@3tc`A!&{QXqZ&E{aGQqpQK8^c6_bHyQr*E;->DM(gZYvS~Y$!k` z!4WowY~RXHH zH>5Gd0qcD^G(bL0oWjc%jH5-k@pPUNw|R~pq}9~$#_$BrXdrejgp9Y+)I`ZUUL13> zW`+QDJWzWuTG6$ TGutEMr#5jFeaC)Ia^mS6;&}8 D}Fj-sH6~xGWq7QH?ejv=y)A6zdl>@+E78KzcYWVSh8C_bBidEp!3a|@wD-nQC zK$oRcDu35n>q#lm(1t#423`OP=P-+;qSmBC|207oRwGIzIgreGU7RkY)&qim^(+S= zc=NP`G1qIpMT|(P!<(oL7F7&0&g +a?;~TebHf_3x0LJ*ByCYZp8OpNTY4N zNJcHQeW1 St29vtrpuH8M-_)q}?Q+)#82MfG>VJhg=nOt5k$2j2w*pEBK`cE=h{VBHNEGrn z`rMVGG#;_;6W%mL(}vd7zfR3MEf=QPv3~DKp(^*)r7fW=@z=PIL!_a+Ph@lv#|ITJ zg%GcO?OD{1l50!79#Rv2?cs5##N>iJM8NaPJ5kbPc1+wf$>-~0=Uyz5`Tm@m?x!EF z&Y2IW+hJ-ggw!~@#|ejdOT?UJ;zw!hC}4P9RN|N=T<>Y)5Yr#eG$Ww~qkBH7AT+{! zWnI@YGC%AOtXk1QPHnx2O&3lb>O>^4j;_t<%33ZIQ^8O!Y0owK3_$; GCw`nJ@2}BUR|fdJfL^efYq5G2p_o(X)|7Oa(35W&aP6WM4223{v$*8^8U6H!snH z7|i+ENlpA2OLyq?`+Y7QaCk@Oj*+I19=*JE>vcfKudM|Yy^O1(2^5J7jrH>jsTRDT zY$ag(0gfrE|E2^TY_HTzzS6c2m(zdwEKOWTqz&CbG29i>G3Ke;bJqOVc{1v{xo2VY z^L9v8Z>yYAylJ6)a(uV4UrhpUr;~yRDnD_RL{JfmY|@?U6q-DLSc|K)4O1b<|N5os z5ph>Hljx|kn=Ws5^P}HvLJFjDW#9HKA>)! )mLAFX1jl7oJ2e_5fJ zF;~}HTHmHnZlO}f)hjju&fT4$mEt_Vk^UvUNvUQ17xvW$ypQZK&S#(tslHTiRVM&2 z;Kf*J?Z+Q+^%^E=AoS(?zb!RBnKZn>(G`BHOY!|hwJp<$XCf-ssE@?6pWoaSlo8MQ zBWjd{0pM!_3#pTmTQ>&uk^!}PVC(b(FzWT!j1#4(KZ1Hr-2-z#PhGzKR}yGcu-|>% z46Jd)Y?*a16Ci@(nkPdiw=aT#m!v0XbBLG(q})nR5>vSoai`84Sb1*C1=W3d7e6V5 zFC!s *fI5>6|K %zu)~hr%-j_|zmiPr-L%)tQSO z?cq1Oe%Brbt%*ZaFo*8SjMs^4dpKkU-t^$wo8Ir ECY zjf1oquQ+)t)yH`EqS~BzhRAwld6=CS^uK3^v +lCk`C)ql(32Y3L+s0T=%$5j z0&E0{CrsHu5cPh6`(HcKO$Bm)%y;0n77e1R>fo%2y>87%%d3-bu>0c+N v%W RNX z4njk7pvsMftmq!ww$%HT(8xLC;)wA4hw0Y9xuO}VGV_ZLFzodLMa6T;+EQnmm&UgL zT4G4QI$*gF{l@ks^~cNBa|M(no`NPIJiAV-Uu6%n@6l4d1R9XWZ!Y1vN{7M5Imp<2 zGPqn&P?+^*9vT-ZrLNi w7y5Z#0i3*oojm z_jPJshojY2!O7+PIrugQvStvA)$YX$S?kjJOm-(_ucUiJ(h5`3)ps1^Z#u7c+*^jT zx=1cvHx<6y$GrDBUd6(3W4$|Mb#?N5$-i5?EC{al^@?TK_WlGEX9FF?{yd&(R}rgP z5a0jRW2nOWjRZsgH5;Ur)~yn|Gri$8nI2a|6NW$cEp}St&gc$7Z;0J7-MMqcCggo5 z#J=?BbcT ^+l&5NUt7`cHbFG0S(l0!DUo~JJCTCdwR(zY &!7;NT~MJ>fZw9WKEPEk^oE!%i+p{ScHxAdIVBSf zEPHOuk;bpW_;`Lsa1gQFMHe8URYxrmLehtsQcfn1ZpzwEEG^k|XrikCOBT5424Yr^ zXbJ#?_-Wi=Q@Kqpp33D+?8bH@IL!Rq`qVfW%wuMM)@gOr9jaGm#Y2t&O^zh&nBQ3y zss4-h?O`&67nrz`ejw^f6?^w|2@rIk+!93Pi*YlT!ac-HUf56VMLIN9^&PtbXxMyh zoB^>v^W|8x?-G_lU_*@@(IEdRUSvZ;l=wM2(!f)6ci|`OA|V?!$oI03;$`<7?cFJ> zuk)rpR$V@u=f2V93`=p?0QoO z8J6Mq0@(`durYa`l5W9Yn0;3u{^3-tNGw-OywKIc@${>(oyfxp8nQm{)|;k;0Dpr~ z1~+`Nw|5DGY= u6wXq=M&D9!o5Cim(fntm`L8-eK{fVy? zpd17_vwaLuR;!Fz+aLyK6{4~5AYm`aBFy+Eh)f22if{&uSn6qH(K*%dwNV}<=$Dbc zRxsQEDu>3J2zndQ-j;wC>7OlW2Q(mCYXtZqy6`G?*BO4@Y1N(AFkV-Jj=bY$=lnhb z|37MJqJyhl2GOzscbDnOHu*B6`BVo(o#H38%C93k;!Dt)AljKCgmX7LB0)6ezJ4EY z1brY04p#b2M{(?{Q<}~Q9$y|cWd5cCo hVCrgN*r;9En zJndP2pLq+8Z&WYy`!-0kHo6-6PS)^16;(NC_MhwVpU0-AdoUi%(n^Vp+caYcq?J2k z9WkRSqZKmEsaRdL`nC`>51s_Dmgv~Y&!aoYYOwK5g-!BYoLzJflF__hzO;4GP*ohF zV}w OXhgWEf_K$HooI=_`OT^Xywvkm*@)eKiEJbKh>CdDvVL2 zp983Io9U$rZOl_}dfRgz+Unr%o|{vr1Vz%SjUlH;eP#59Jaq&z0>8)d9+W3iH0@Pv z4+J2C%oyb-7CTg%zYx)z_HDkbzlo99xIq-fI?$SNx@X^HHqRf>HPx8YfglxMnu%)3 zMO5OWKTxD?yX4$KbYZ+2gLG$EglCf@ot-g@`KeWII|tkK)~V}7sq1)FX@g74k8UNU z&W9|4mBP8vY)rL} w3n`4ZTO zjY-X@?B5KsVQr!>R dI%EBgCjJgeTreZgmR>J2SR1YH? z=y&jBlP}3C53#qx_`H_xW$eSR?U+MCr=6_2=9iqrh3yR$^`3P`DLPLv>jpJF^}dVy zdt)O@s~0OZFq1pBpD*}5l_R =Sjos3+bnCj5?N1);xZkmf#^)^HQsBQ%*yXb9*m#K_?ydDZy{Y z-ik RlX10gM7~ypfFi6Pe~oC4fsT)V`x}dT zXy}uu0BL;eZ6!gs*SOR%-!vyuUD^6ZwQtVQkzH`8TN7~(){onu1GQ!tMcHnQblFJ4 zq9yK#uJ3$*^Sh@w;53dfQ2oKDyQs>m?AIT+{n?SC#gtt#QLqRRbQT~2sC{?wO_s&R ze2nh%oYp<28=p*aqd$my2jVaQ7aXS1Qx%meX?jP{YYae~DbTKEtve}B$3|ORES*_N zScH(tVZhu5)RIjf2_NIZW^FA44-AM+uwHAPo)^zRc*BXY+uIzT?z_)jN#7KYXC{W& zToK=#eyfJK!`yl1By~D4u((53E&XnR>-{LxlMZ^&a Cb2C7YlvD)obD?R4TC8{48+>mSQK-{&o8XiW9qO^J1Ry zXhyW+`|nYz$AvYm%oTx-TQO;qKp|BOih;By=XJre9*6&WL&Y ^#jv*6Zr3nwa zl+6r_W#AxW_)nC|{9(gis|16KFo`%nw9((N efg8?O=E> z@-tn-NObo80u-03+x?BpFR~34;XGW8yLO)UT=pT=9P4*X!`9{4%4m_QCE(p51y{&g zn`P|46Q2kJ(ck= 0U@aMcxS{BEP6Kw200Fn|KpbHRV&@JeG> zGXS(GgL(qcX=bwjrm76YoI)b#nfJ)ZdLx?-0|7M-vTREU0~p~Bq-qYV*g|A{t-uEc z;QgNbYDdSr@hC?EuoOd!WC|AeA7e>>l{P#;ogH KmKNNayz! zNd`~wX3~dg@>X)ZHN~i%%&bWZ^*Ju|vJdSIh&uxSZNZGPkGgS5FP-htbwixK^}|+z z!b`2hIL8){E@FckN`&RD;w9xaL=!x%%!*$aeD2)a>!=Kw0Y!hZisfR+FO31G5)Z5S z7J1H#XDB8Ligwhspl{TL+`UwU3)@wRVf{A;NuX#x_-Cf*4I7J{v(nTZn7JNmb2x$) zoy=TaeU!VKvh&Y?%_vxeU&Zi%i$Rw7%er_@{)VZYcHF7MGLGC~b5?1pmH?y+v~OkT zU;@mMb;&Y%q{?^&nvk@HdwY0=%ZDA{TfM7^>tS47XedebUKW0HJ?YN%MF?%IUaQW$ zrF DFG!I?PEonxeLHs`uYv7h2t!?m6Kw41!{0ulK$8WQ$Y)zR zr2ol-BlIAMsF(tWP3zZXy|8YI-^?dWc5RCsPm`p &h%US|oU4`efrS#hfQ*u~q5BbJcO2Sg{ zbNO3gv;+=ZlmCB-2p>uE3ZLY7f@hbKB6P~lOa1lP{|XG!xnhuoiEb2%&!sx-C`DFi zusvi??Bpfj&@3#mBUZY@Lc`?u(r+sqpOy$u#r3>HFRyC!xNT`F9%UDKnKreH2YvZ= z>wB<%F*uN93h%cnWHySP@^D+Q*E+mkN6TTPzyi#LKiodC+jrNRwhk6?A_Ky}F0(DX zU}KIRGj|&`CIiUv?Ucb7C+>U2ztn-B-Evu_62$^xR3zKa!kR(JX`7qd%lT!D}_6 zo>E!b{KNuqnS b?AN1%87__^ znzTPT{~nd2%{HJ2M#WdE&<&^;Bzqr~XB1sL7;V87Q9~^)Uo^{2g5PcbU|$!^>?FiT znnlT%i^#?fYs5{fK9=jtewy(18Bdm;*=t%%Om9!&r8Z8=?0P A$Z7+ea1Ct@cbtQi9TdG?8m Pi?S z&!-aF@;^Gcr**Q(=($A}@ao*L (x( !A1+*0(i$o$e# Nu)TA^E05+^U0P^uh7d_QVGQbr2a zkQ&JbHKW}U>pFh{p5sWN6z2@@=pu&8lLw0%)<{(awM9&2(1Pfe!xX8q&wK)|852wu zXdC`BPqg&h)*o9{>0F)U56`Z)Hx$K(GD^aX$6qkQoskHTx~`{%uG!qGtG!Dvt|;PJ zB_lzrB|wElR)B=`UGj*;)EBws#=0gR5SG!<7(mqlaST}IwF}~#qt~8*IM_s|s->Vi zdBh->_77;tc_ YCs=me_oJ2N$jr*$Ci M#QragFJz@fKYVgwN*}P^6MQ@NR2=Ft2|kk=9WimA!GTR2@{+rxp!wKb zclKZ)u#uV{SBw9l73~2Dwb6ZnR|?&i;|rtll#bNI{UpVDS*bP6c?ZiF4Si-U&E{%q z9ecQZL|CLF_v?lr#CS6WA}tXH^=IWR<_u}{4 OkkCirsN*=!B0VL6uNXf{&?v(M^WKf|T7t>{# z3wqSf`@m#~2$49UdXB`11OLFmE;&K&K+cX+TM$=y6*)Ov7VS+wev L zMSQh7#1C6$2XXj;>7qW!H2vFQjT1Ae`LRi}PJL6Dn?v6}%W$fG1%Kt&7em00LntOl z?&WDtG0XZ)xH!zcu}hiL9+D$A&NtM+Ip={qUznv3Y!aDU9~ m8-| zKKZnqAS_Ms<=y6`%5>5r8xcffNMJ*IztQDfVtR{r>5P$3=sW&Sb)PN;X_yf#*OVy) z-{8bdY)Qi1M3Q02oleCj+nn6saQt@fAwqH@!G%-xcxICPJR3xijUb^fhGUF(( Mr#BdW*R)31Ro#~wP- z6r+eW<;13yU~HuTid8t!!>_oTwm!3+@pWYH2G&knO5gHkf!U6~X%>l#8lHKgr(?IJ zfYB}6p9EN(ckz@dRX5PN;k)=hayI4|z#>ecrcZlX9;#FV^YD*Mbqyvm mOMBOg?W+CEu$AU}c!VT8actSGa7PX24W!sfiNd)9WT zI~j?`RBZ|)E6uaBvrsDm(Bc5IyN4FuE89U}--WP?uj3IcL=T*Ee80Dl;&g}eecElg za#6(CW;kp1=inuY{*cu~zmSA&`_xU8eypJ0q(sDpZ?uq&qJKDa?wo3#IDZGfdqjL{ zt|Z#*>WsW&j~*}Qjr{+4XgC<rbkneZCjj+2QRG)-+C!hfmEjJ2Vo2{aLWelhoJO72D#o^$2uNY(othFYn?aX?mTd +Tr&3jUl9Nnn zX7u(FK4#x!w|O7u#*!{?C_#G?(AAhUw6qbXhy&p3; yw;NKuWG{tgKCNZjI95z`Ena)l_?+n=W|MJgc0#N%_BHC zk}iz!eLuk|`(AkxA=;kcjlDGF7-y&Q+raT`Z%PTwq!)*Ts|(MwHHBX*$twSPtTMzY z8~<(p9Urr DAf|%sBD`Yzkk$i@L(=1*l+cTcOW&D^#j=#?o~B@qC^P0_+E}Jurf$ zILy!Wtq`A{92bdGmp>NV^iSh#^Uy-UMH7K60~gW%nnpNZ)22P)6Q&uwJg*Bs86PS- z?WH~gxXjZg0uX=GcF57qe1?&!iwM5q%q>mjmQ3u;CyWK>d(8+cjj!v5(?PK}@tKYQ za{%vcz_W@S@7l!^G%m59FFK>IOovp99de!Av9AJF!cW~2PLE>OoCxcg4YAo9VmU *pz;Mnt0XC&Dz90oUBYxwe((gyLOdE-024T{vL&Nb~eI>aG0OC z2D%l;G_m9 9s`J758 zYT^e%w5_9-uZ3Q7l1Qn4^UndSd4KSVP63!;M|~uhdw;|w^Xsqq!4fyMqhOOO4gY*Y zdt0e1>n8A(&LKaPJl=kp&+j)JDDWc$5|;KFzT;rlUTB~3hi{SaWb%G$537IhL1P3G z^ ^8%=3V2ZL;*;_f}rI8$j6;u){7{$fplY{>!$fwHF{$dm%AosG*SOU?e& z9SEi0VVM^pLT}GZS-Op$SYnjQY(6nBw%4y~2VL6H-ox_6v~u%M8FBDgd0j!a)n|b< zhb0BNUZ(yc7rNP+%LUQOVlX6GrX>IbC2y1tgHtw{xX1x=Xnc@Q-e$$Vb)nsWto=vF z2b @3bKPDE06EH`Y`1socNe-k9xZ;pca}fJ zEOuWN$0Jug7KIl%GUm)HUQ3Ub+u_w>SjguuBnct%oAz*C%+soK4W4FIg^HKYc0pm> zB1R4DTYHoB-Ne% `@>neby7pc?pZ^1?1kC<`0g`&Bl6eK{7s@w;GtyO71HWI1BAG*>PX6* zL-NPke8O)HlK;Ke oadm= FUW#3y}Ol3FEKG$mNo4x3~AyNZ)s z+bC;}uha8a3h_LH5m&iuD?~qPINX?8V`CQ`e|I-Y-CSmoB$aJHf4IT3e6o*3jJNi* ztPkR&Wp*HVPF@16yWL9%gOzxi{~D|GekaBqDe bmM`@JEblii&KE1?&4ge zzjWewUvcI%k 8~n}MC8WEseLT-3c3QY*CY~2zC24Z*DP_;;&OAC8VLpG zcD5(}CCs)a%K7v6v-Q`SyoE=OJoImtqySt7tWl*+drg!J;pM=pvfc&g# TSZ9)W14FslhU_$im(#mAh@G4O&Q?4iAC z7{knWf}Qn=nVy%AKLub!&&P~Tt{fYd>1~JvDR#loxkaP3s-)Ud*dKd}>`8!0>QV+0 zbR8A#3}Aj$cWpkY<*ohkf{!r>KSxY{ntZ$Z4*94Akgh?ve*i=`rE_8I ?8#7nZrrmsF>z<;Q?6uFpSekg8ky6l 9duT~koXpN6z*6pXKtRTmKM6f)4|Sf>b(zJ`7}3WP4O|+h|BVfow-HhsteCK zb<_p*5B{ayyeHbMbK(!LIgxdmwJq<{?g&~5&S*AZm+h@j|K C xdq18Tr=ihH#D5Pb7j9SK~nLEiAX9^Ee_Hs;Uol7Zu2tPnP}gb z(U7M}-YpG-W6E^&D?7>W&m={Nb{}J+8`kPmCm0zr3&9U4(r~W(q`W+@z}`jQX1fm% z;$0W5NDq6Ddo6BM01#7zvzQ@>B-t 8$k3GnoB!vtI%AWPRDe9C|Furn*mNFfoX|uUqMOrg+hGy`#Td?s&&0XaYlK z3m<=N8q{`39+2C&BX#-)aq?=23}Vjw$;qN#o^7?;ZnSq;CJy_t^#_K}op@wdr#x7S zgEG$-+KE*V>=6Q aiAaj`aP8iB+9~P51xXV5T zn>@MA7rW`-8<5I-ke;xgW6WhmS>|)d>5Cx|spZKE^4A#0Ua5?9H+26BlA}lts(0JK zP?gtK>ErgJtHWCl#ysa52g(_(GYHj;z=IA78+`E~$7MsS1Z))d#PqUiEylH{jugVT zOV*yg&s55x^jtJ`qD!`54RsY}qru*`ICeT~JPLO1CD$;vg7OC-dFeOwFsx2~pF7Ym zMfZT%u8kYar OQ9osD7cH5)fS zoAfSQaA(0dT)ce-pN3#h^&r^UrSYuKa}Bi%{AByJ+!9bKb<>cb(D_6IV^l5fj~F`G z|D2UJed!EeCQyu>z};`1uJayZ(^gL(XV4T)cJeEL%)u51w^0lGiOW?xCz)QOt|2^( zJ$k<66p@l2)QE_81=HLIk)td;mvFT^23RmXs&|lhcR}-J>DBhiDxWoAZ&*o7ye7`- zXWL#l5j7(=zXP(2#j&v}4_Lp5nyzr_na-U!Uz!yMDxP)ktfiTQ$6708x$`(>nW911 zl+t$IgyAvouD=gzus4^LbH1W&EM}NBQ?O07z5iX#LGQD1B^0S-@lR+#?#vG+YRbyC zR&4{$!DhUrvd!RqFzE$7p|?oaZL@i>RE(^u7X|{_4y`=4Bp3a)E1sU!tKe{SQld^5 z7hodxfKS{Ht<-TZ=X;Wm9qo9oMJWo%bsh|FE~NYu=LOGgH6g8yy8p~hm>E5ZM 9$M&_6WUtbJTxq7R1))} k@hH#$&L!s*MZxDPP9z-c`;4PxaJ$S zgCmENLR&iHSx%OVozR+3gqnUHIlGeSHSRvxY#rByDt}O1Q{|mR?GWRl;Kdu*RaHJ~ zPD#4%BBAu_|IkRWF+)DbE?IeiFw+(3WJlrt^)g#{b(!U8iZ-Ln#lqKZSCdC`QWWRG z-8@y9pNDK0b=$-><(ApM_kD)p6q-mLg)Ha$-vtF=tASln%EFThPY%ax65NtNYyFVt z-!qH1<5#@UsVsD|pA7Vnz0}sG%U8Rbxqm7>jVoIe@o!%_{0D>W>@ZPr;b18p$csVZ zX|0j?IKY5NzWHk4J`({@zRy91-Ny9&WyAA-?iKe;!B?=(3`0EyBBcQsv7y@f>R9Zm z1zuixiPEpi+1Lb_=(N16&i~Puqma`b)HPCHwx9C4tPj4esF%&y0T&e@2-jLdz?T-_ zOt!I4af6b1 psNBWCYo_}ZsDIm(2@!zMrV#{a(mZgqrj%%eErw4KSXVuv%ZY2=(2XOLS1 zPi+#QO^5)8=7{(m)zab7i?};tPY$x4cM^>=;|X6ToEg*KlQ-p|T_uwa8hO;2j>o|L zMIR>glbz?Y({lPaAnDrGy}XZ;R-1c(F9FUe^6dW;reTc@t7FblB5X_!8#EsM0!+nk zm7^gO20m%i`=b2AuP1xBoN+SbVVJ5@ltuKtAaF!E+=_p-u|I=wZL;rHyLNDa)0Fb8 zVsE9E1EYl~$fVY#mp{4f%6m~xCd$={F9f&_xYW|;b-mLy>`V3Z4TFyV` lxQYawfU5H|Ygqvv)=hO#?Y=!1*&lkB$&CNU^4 t`L!YK@p=?bQd4Iyv2XUT#qX^yOblI?IFzLRpRNGn9 z-TULD|00mT-k^~=N`9H+VBmGBrvIm?9msS$+?7YhlI~rE06Z1)mFZRa1j?m+hRJHx z5?=hS=parUxv200&Lfi| R;5waLd1e!elkCDRn3>|O^x@b@KL_pn~ zzM1IqeMuVSLgs%PE#106(*zm5=&Cnr$!ZsWE*5s3d0IWtT@oLDn5h8bNUr4z3S9%K z*sCPAMTOK14O00HFXMmC%phI$mgT?X8p6vmn}MP}^`P>Ax*WN}mdeSABRCr!d4y46 zbP>t?OhjSoW|XXm$y$Zck#jEQ(|aUNUHNb&Gx_%&S*Q0;&9+`2x3Ng{b_O3#QR$ z0`ZYKm_(IW3fFlU(qMt5qKfBh UEF_m4C!N)@45N^w&Rt>gZ8He&3Q4+7zg0 z&j9Y!l7LT<`cQ(^8TnVIsYW1j`>?82FqC~1Q5_#=;4gv`i4m>^Q-JlzVh#qCh|JNy zzYA)L@vHtcb`W$w0DO7d@ 3~C(%U&IaR^*%CDJ}zZeIsjc2gRyLI7j zdb^)z!2D;h^`$!eS|a;_yZ&9Yfc$kPdQ=FntMM1)v_KG$z|nI4KzJ%9+Zpin!6GQb zuHWH!&xaWdv94KC;Y~BF KoC z1Np4=Pu_RM_vfZ3P-dY%+kz3T |Rq zUlSf^`HyBQ{8a& %1+$-^IzX! ze)>c}Z>KhgKxI%8XpC-%?YS=T2jy2!4LWfR{c?>0C~sfj?Gc<=;?e`X4Zj*=3SefD z6Wayl4Lo=sF_gBg%^y&f4+a`jV_@LTp *l!$6zlZ7vY9_!ufVKLjVw)7##Z^m}FjhV-Cu&1`{;#n2jFRA>DVHLR z3jv? ovD!UgCs4AhM@XuutoGS4xC`+`~#V;>JPpb*IxkObno1h ;P{|vS}3O%3;j+j(! zhfK<3yrNB<+tTHzLGVs!fjfGT8)%drs${w~1RT8>75-k-Lv$%xy!x^j6US)isVPGR zN`U&xrMKXvJd^AeHp{U*$l1EeH@gi93;wZJm7E0FIFqz_ztuSnt$zD};%uDATK7;% zh?bK;txmkhN6Ks@L7PScsRc4_^X=Y{u)Xu&Qe<5;SNdSyT9AE^zrZS3&o5R4geC+I z7sO>H1XW<`%}~zfQSI?J2we_twE5asFC_FxG5VEP>dO>&4OQ7dlp9ai4zn~3j0Wlx z{ji*e$|t$6-y_YXhKw4T_H$P m~b(Cay%dLPntUn_9t1& zyH$Ly3RD`GX6@=MB{4aKr_FCSP5sr2C`CzJ?TxAwHEvUwe*xm&5BNaA((_z+S>cS! zX{F?v{RZol()dT%)8lTtTz?P%!?jgZ%GQ_Zir)g%7sCW^&qZVSDtJyM7Ls<#2YqHi zS;(zOzf^JD5sWvDDzDt~=i+R_ q7O3=5luMzuoOH~5Cw@;u&^wn z@taQKB)X9{Eaf9()SYFn5PCTuc{zLWnq8F-Boz++CMFNGCFe^!vb4B*Vx-Si6B*uP zCQCQ{nm2Cze+~>q{u(Rq=^3Rrg%J;r^H;#7#HhYMUbcMuOS}nJrEo(@PUdFgU_BJ0 zbtitVU1|$uBPQb)4qD!e2n-U2&$5lYJIeh%95MYkHp)Ml1Jk UJ C>55 !Ph$= z$hLuT`+UC2j6Kk;FsGZph3|m~h=^eNO95OzXy0I-$W}oCu2Nl_#w5x-I;0Icmn=$a z;D6jL0)XBXYi187y()*IY1fUBs**p23Pyr)MK#H8<6BKDXk1ODw7@_!#cZSAnced( zE`XByDWrE6oLRt{K~ml_1ApiQ7!cc^)}9&i=smYV-<=R=A~V-I2joTr1R!1AHb|Y} zFFAsXSAfdO|Ep&s-Nx+<@Q#D!e&L|-W_~9%+R)kpJd@;Tt{M2UAuY0^#>k-g?KB?@ zd``Cfjd5GaIrjV8IOXID8qWbyB$2vb_59m5&mCXMZjikZ8aM``?2l<~FP*-L&J?a| zbZxQube2g5ii=d`%q9WwCBSWJkR8{j>Olf6G!Le|#wewuK!>26Va;0X p~emaBa`5T|X zyH|1UimlW1&cI(oN9j*-mju6hIU+JK|7&l4P5(jcXaD;2lCd}x$eQU4Xur-#So_lF zs`g7LCV+fUz5gIdoP8l8HRFv)54}%Bdqz%@v+xv?5qD;uBYgr{7m?2MHa7hgP;CU9 z-sLC$Z3_9RU L*HV~wF< zZi=S&MgrX$V#RSod=&0NLOv!2yi>b$!&T&>jg3|1r9*RX_CFq0pf&ZV=v)I4qTtR_ zDlZ-ykd97(3+Ar1poc~pbLCjedtqa8R$w{Y^mg-S@%`kX%U(Qs7u8!Zy^Vi>sSZ6* z9z(+1AMard(=Jj4kb_K9z&d}tQL9S_z7yoyY XZO76Mw|i-aqb@3SZ-kH41)Hjg zg|a#xx=U(@`>XV^_rG?eBAgl_R`>HTF3S_| )K zSVpZWQDiEQn!22ko-Da6;b1%quOqWsC0!`KMZDGDu&tL;`$gN(p|{_Oh@lzPc++A_ zqH_w$O4?!Li2F6dO;NTgcjWI JV=@9w z--qz`WjEj`$bV)L=eJTsw0TFE)~Wj$UPiu33OzqD&EB2lPGm4X>5clxhPnD6;sso< z?1sKvSI(w90GZ@O{HIzC=^4(xq=K+qg@( q+6)KumGLuxM#pUE+~KK|3)H_tKI!^qN1p1rid2lQF0zE zdM*tamHj`3Y&fnUP;ox?_H%KgNfVf&!G5|1&@%opVsZeBo}5H*4-atl8lnR)f!KRE zz?~QZiOU2yN= %8GlNRoGk62OGHX5@`%0I+hsWE;p{ zvsmSHf%LTclZ6w&qUoL49Bp%0Oj-8B@?xZhkl{Vt&E^$^QVS92Ii@Xy(B2lkbyoA# zKbP>#&}4mzVxgc-?)~BLVBC#S237TGn!AS1XzQR?3IpY<>InXRAvX>Q^3=jB0v&(X zI@@3-@$v(HER2y8LnM%8S*du6V}_scqnlZk{*sKM;>3~L=xPm#enuQH7^FKy zX6m9R8)Y15gRN_^-A5LtufH^+_1GKTBv!0<{)DP?%oNQmb)W)7;6)AWPI$m~BtP1D z>8wz)PXO?4`nrpwNpk$tC{?kWoq`W&pt_}CA>((r$lp2~pP`%z>8|t4wfn#=VU{i+ zB# $pwkiH0kNug5 zU(L%Hpv42!&cBnZC;}mV?~#m-N`vOXut)2Zl}O;y_z0uK&dIz IOYh=# z<)6ae#3?d%E0<<1t705zB@%Z?<36j$>eKgHkX9<~twO(WP%74ZEU8s=P(6H_*dofa zb5kWBGTGOJPn%%mkSn={1bbornK{#)6b?4E836(YGF2DxYJXT<=}8eZzg0Vv*#p!E z?EOZ4xpDU@Au(l;metQqr5^B>Ec+!8GU8)+Aal_6ht;*>#3qmd{9owj+-)^A62Bb4 zy+-Ro8ZA8%@=eQ$PzD*9-~_uwxEADlUEtlD)-6MycaoiOgf|kyQOz4S#xyuJ6^4K7 ztM}=MiAg-UTyj7^9Kk#KRMic-M3we8#ia fw$717;fN65*5{ zRyF8hS<)XmX{X&q14B2=Tv3T!9(hVpLmtjYrz@& g%a7p>X9 wrMda8)P1PoOlNCMAmAcKeVu6%Uayrhr@-I&`@i|7oOJ@<1dVdS{> z3NAHCA2>*NfRfiPtJBt?IsRJfJOzey2OEC_M4(n$l67C`v@Eh*Ow@x_&&p4c0n~{8 zv?M6?uMq4abxc~zovAnz{a%Enmw}b)v~a1l|AllQB9_ry#-e;7Ci-*yQh|3UNG$x& zF#B+iA`tgXIVKqAZvjP)q3j^Tb22W=zlgPQN0J;&Ux>yqLQPrvp?p*BgZX+RkmKW& zJK^4ukNqVk#y?`I`X$Q3%*^2HM(ZkO8M>TyMLG$-zEWI549 u%Dw?R5`lqT85 gvaVE zs$Y*VbVGxk4>L~b6$W+2IIj&{b;*8IBA$`$ya<`v<=7yFC(QD;9vMj8Ld|Q~r1wa( zXfhE7ARAiO+(VrG$-fN7&KSb7ViF+=XAB!9^q2Fszw~}84lSj=z4m4Dluh`N@}M!# z7FUk)X?f-SE^{OG)3Q?Y6Vd0HlmO-Y*8s$?3LiXV2V6;h*$4D@SPB}R0ZDM9Gy9b8 zFvgt$z|b!p)0G`v8QU; {z;dHBj5Y)`%M7c))L%E{ zBzj2PN*_6iVZ=3aQ697jM)z=E10(%7#i-iNx0{&O`_$jBH-qluVEO-(=Sq*JxSc)@ zi5OTs=q(1p|MU}KumMHF{`}fr4P?op>R-Bf77`)Iogl2Fx#K;|L&FR<4&94al3eV= zcs2$|bHm7{iXf4S!ex2Nzc9{#NGXMK)x^ht*3x9137ES}(VEKr9js%t{PG-R^3a?i z+TIzNu-omL@|C E&XUkywuKzm zf{3XxQ!~q75wRz>8bMI1Y0FlRe!6&r?;B&CI`J|hqJj;CjxKw)Ji#z#WCaarM5h`6 zZ<68|p3q6GF0h%%+S3Q`NuF>>(ld8P3QJUStn+?BnU_zZJjIMgdM=fPE5OatQncGl z8^+_---i)i_Fj6~#TNWQU%P}cGvVzC`$kcH=x_*=Nt6iHNyiWOXqv)wT7D+y0kh)5 z?|oOdECAZj8os(Q8#oo%OLyz&xm7_|MnmG7D4QB#<3~;W{b`N$-S^z?M?p<^uQ!7@ z$uZ~hq4TNIM8H1_VepMOABBQACo@rMB%{AbBm24C{qA)sbJVhoo qw=eH4;+)>=H5CV$l3$mD_Fxd!ALlkD^gcZprS7 zQ{GywGpxQVyFOV64H!l_G3Gkq1no21x`5U82BsQ0aALw