From caaf8d142383db4bdadbd214e8a200f7385af172 Mon Sep 17 00:00:00 2001 From: gnikoloff Date: Sun, 14 Jan 2024 13:07:20 +0100 Subject: [PATCH] add bvh view to readme --- README.md | 2 ++ bvh.png | Bin 0 -> 38276 bytes 2 files changed, 2 insertions(+) create mode 100644 bvh.png diff --git a/README.md b/README.md index 2e95fc1..a338183 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,8 @@ There already exist WebGPU raytracers that do all the path tracing in a fragment Testing each ray against each triangle compromising the scene is naive and slow. That's where accelerated structures such as BVH come into play. You wrap each object in a box and then recursively add more boxes for different parts of the object. Think about a person: you add a box surrounding them, then one box for each limb and one box for each finger. If the ray does not intersect the person you don't check any triangles in the libmbs or fingers. If it hits the right arm, you don't check the triangles in the left foot and so on. This significantly sped up the render times in this app. +![Bounding Volume Hierarchy visualisation](https://github.com/gnikoloff/webgpu-raytracer/blob/main/bvh.png?raw=true) + #### No textures, storage buffers instead In order to store all the state that the raytracer needs, such as random number generation and image state, it's easier to use WebGPU storage buffers than textures, as you can place arbitrary data in a storage buffer. diff --git a/bvh.png b/bvh.png new file mode 100644 index 0000000000000000000000000000000000000000..1409e486411a71faaeabb59f34997567101e078b GIT binary patch literal 38276 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%0ADf74>MyYa&1p4CNoRU6IEX2XGOc{xg2 zf6}&ABx?-WAf5mB>Fo;ptS1CA&de$5>ul;Z&e^cm9Z)=r!qzwwBi3+6x;AP&TWqf}@A?L-H5h3q`^MaBcMFww6Cwi5T4+%{3 z4vnr{uESpJOl{6Ry~>X7qeiPRzZ$sOJ$EcG&RK7KiNQ+i-YZTKp%e7tzu`xVIsHl5 z4%Fn8FiCEhxRc9-z8+;`Ph4;<>Cfp&O*PEYH@rN~v#Rh_#@N-ha&{%BNzd57%yv_N z>-N<|F-P0dA*IMS?PpEX9yLB}UvAu{kCx8x9J=O5Gj%PC+H5G8?KY{xTd%@a8)B{%o~b9QgOAa)T{IjqDJYJ6z7`+*$jkxoD%<yQ4HOuC`i*f(C)%^r@EEFT5H~-;oboReJJzgs(d`2TA7^NCum8$3t~RN z5(Gv_;gJ%12>&IEZRzWj3I&O7~Pxx4FX zw+)xgcgbtkyGM{7((pKHl7V^r6oq9gWMF(%9a5 zs3I-16EK<>tB=ys9>0P4uB@=m726^kUtB5=w!8ee>RzSlf9I@dLy)C+=uCVz#K4{qhA z6;RS4-lAaG?jes?f9Xv(1wNJvS;O&ajrF&_O?R$qL5tII;d>CzbNx%c;d$EB>Va|k zm9CE^+u+)8vrZZqc8qnNl$9E5bpK@OXSEyg^|q`+P{m_)yhI$et*r_Tz7FAhqABL14H{LQPLUHe zMym~B<%|w$TUpQ&=_hlwGLIy(hQX;>%XE?bz z0ozX}++L;K6?f47Le@s3U6zL6=3l1%JL`2iDc)m~50AQYnju(E6%FZRLY32z?i2*d z?Q_`Gqx+&U;Uh>&A4HX~DV#w_=CW<896Zi7D&}urTm*>why5AP*B2{&eJ9Q(pgU$* zfGE@4#bk0Pg|ZGr$@^r?JW{NxVB6*@zB4U#5ph;6bgq6FwCZVc!P6e!Cf-%{_{w+e zI_!8)C;5~$_x;M_T$cAuv60gA*g~~0M}c4btcTxxQN3@Pdq$}bWPqMg#ruZRO@pR+ z&#s~hYF9Lu?aZg01VolC5IXL+>`l!==unouZo= zWve0Ac&p)EMkzIgA!rm`TU~XDN7P}tq}}GG=jqc&(5ckC9*Ny@)x<=`6TRKy(UAkz z8ZTXue#E>Kv;V~TaL544iE?7e7{=c~%PJ%U3Mw&fvWe_BJ^rPFCCGps4o)Q{(YGL0 z;9L?fcqYQtlfq%idH7V)1*2(naWaawhW(Uo8^ZowcfXY<`&zT9CZvpa6`Aj!!C-*4y+NqWrA|NoBrOqBd zxhoOq&qr#cbT#2WPlF#GLic1|5Y%)X(znDI8<1m~hLRpZ1q;|V(a&yim?C<^nL;9B zE9K~FT0cv}x#x#+T6o$rWL93TG3#Q%#)a5g`_ivlsHGJK?<8q2)WzRowUpyIJTME~Yd)17dK10PY2I^-+tQ0I$0?r1E%X)#tZyM_I zZkkAfj>76tjFR#@s)`Vixq!oyO$f2W2>YEo2#*mvjHIQi#;2iT#B%Y3q@4a!)FDvb zz5b^0W2anUzK(iDztv?KX9h*l45@xdGqLEyUJxKgnFH0(s;ygG4qSb`JGOTAQQ1fowR>V_G7}7H6bP`Ji^Jx=YcuAHUkIWUd z+Drs`1Mho;j+@UMxhmX&2POwL$2EGmkJn7(4&#t&9)a76MtqN=O+2@5X$IEKHa>J> z*KuLNGv6O*tOeq8YVZvzOKgjw@I>Nw$SmO!gK;a_h1~h^uf11?a|)Cr@-LpV;T|1T@Zz+Z*4)*A3j(~e)U|$cbDR*XRhNT z5vNVTNeWdPX1$yiQ}Pb3scqvQgEa#lX+Cyr)5OpeC7|`WCzsCtU&V#gQO1z7!EeX` zf2ff#bK!>B1F|SzT0XCSwL@j&#?j69I&nt$$od-TVO!#2pKgP@vH_Ns@PZor)^va5L?y>F+2Yfl%}(HT^NL}}U&$C=k)wqCO{zq52^TEm z=Eva*V)RGlOa#x)Dwux!@)mEhS^?551~Q-R`?PjGCz8lU%!P^p@Xo#x;+g(LN4x8F zq7v^_*3Y$f^tfjKcrqt=H8!V_4pXLkTw4J9z3_I^gA7D1ll{3+kJF0H0~9)>JTCFeGqL?38T0AawIE729QdVSX~ z=0#ZS$bJ}UL4n_Dah(WRdc<}PwRr)Ybr(3pC-LaGAVQsOBqM;rq{&X$yuT{W*@1{g zv4?!stYpCw+gmzOBEPeF&0;4m?!iU-{E;CG`sd*hk59nL8EoJ2m%D}I+N_1X^6Sv4 zcLO7fn&5h_62_X4^vN=VXa_FyM2q^Gj6@-uoc*ZnJjK15Gu4draUN@hq!&IC{<(}7 z4%UY!1NJI}-w!6_%5h08Qpon-0C}Vzdm^*HS6BorG`$UKmONGDoZGtF`_x?>)3P<5 z%ql(s$QEdNX`V1j%KaG<$L!T^U~33Yt1zUGjb$joHTrL7gcL)EYcz zPm~je1Y9{uY$KyNw#a5yA z7CVH7PBlEVIgeGm?41cE_{!S{5_3&Mg7geU|Gb*iGb0)3)u?u1-AY+|HPq*2=4IHl zde5Vu(_>R6^TYL<{CZ}7c zZ%MqQNRqdp3pI)2m^oS{TX9`fJePIzon9ezwYS}zyqpaxXf<(7+iy99d>}d$5g@Dg zbQWBg^M@nOm=a2r&>1zR9y@6B_2)mg=YY(3-OC>+sQwItfMsKu``mm6gjiP)ZRcHU z9_?O2>K;ogh6QZ$7g~u|77m~J0y7uQR~QbL4Bb8Gx2xw$*Rb5P=0#d#&@vyR+n(;S zrdb3{RX6yM_QRkH=MoITeuX_y109@gFOy(r=AwJ)B0 zTKV_W;XuN(JDI*q1e)NTrr|w4)B6vA>|5}#5arwb)-_GMqQ7uow~U(^rI512QV#Cv zK8W1;CBLSYCS38d#8fb>Z&RtfpoaDE}x zc8)HMyBR?p#SX6yf-_ep5rCPdgN%Rg#me>8p9hp&H*uOv8>KWm-r< z?;~gp+fPF@iri&g0o}g)!g*n|S;}edDKvB`beH&XG$Vn*3h;XHO*dM(K8r04eew3m z-2tYX>-)xLGjE#DH}uaeA7%}pLFP(GCGCr zDtvTjh9@v-rz4u(=)f%wJhV1?fCXFW&JrbKJ4A+K8kIN8i8?EypfWIMUx|8THQZy_ z!4|s`p2+n;vWSMOTI1)gA>B;;%fe|CguJi!w8B5aR|TSlNAiUG@|5{;XZpX*;OFV> zNRpzF=-7b4U$o;#%wjYu^tV7(FCi1z_fcO^TH^5Vp;_wwhyWW_yb4D?ZO(PwSv=6E_EPH4wz1Tayr zY#%rM=B-$%SteWTEJC4<3wZh7n`_LqTwGs&;rMWDt=RScc?dCDE!&cT#F9#WVUd$a z_@Vw`v>s>->|La>r++|kN?=x0G?}V)ubXXSJrukdoo!?)H59j3RW|9Xg?#&#t|f;p znF`}Hx4jtgH05RLmB({k)OA|uE-%a-rM%yE%(%^ZIqv|UsIh+5IFVf6-9Bw;Gr7O) z%VX)^KBt64<8)Bo5?t(I2}^%Z;(`NUcPj?X_hhFn1=_8I-Kmg$`}>+~P(ExQta&59J0ZZR~_hr0K@`gUTc$8kzsU5H8?OKD|EO@J$ zNe=(A*(hstYC3I~F{&9UGL(Bv%Z*8i4C|2o#fFu8`SAX&V;9uJGAr?J;H}p<4o0}h z)mb7ZYBs5^fYU}+ zO%2Hoxg6pKAGO+mQ||}|jo$QT4V~X;EG&^g=RXbcv2R~L!fwtV+ADFUcCB9#-aC- zY*Gl*HnuzC_PSW}lTlFKKMD#7!{ReOune(MzH=B5$j6m?e9Hb_#plA1{JcroXWx~f zq#U*E*!YqzxCBi!!g+Z5!aY5Buy}nkRNgNVM_|j!umJa|gOFx10p@wlAdKOB&=D@5HTJcIBJYW- zI{TjJLzlWDKiBVkHDti^uPU72OkqX)*~KmrZslJzD#H|u^i(`$3DG+H-P_V*+ufsJ z4-h|?D=zi*(kX54kI~g~gsmYM>r?K7SAy;_>ek9up{M9Vc$z52yL{h*v^TkE5{(Aw z_KN!BSNC__tPf3t5v)y5YKF_V$qAfGU};`W3+Ut34Tz<^{q7Fj{veus0e;ST0b!zT zwt7@dZN8BOoBzxbsW4469~PQ15Y$UOkve{NFYd<6dLykTFS@j=*X}2VD`dd2*Lb%% zb7}R1Kk{>OC@~cedlfsuz8Ek^H|WoW+%?~FzRdY`1f(!-%}D>561GekbrN@SU4OCi zym)Gy|8iACrg&h&3Q8kP^Rg)P=FJahRAe*ubWkk>imD?VQ|6uYv-CwD3=uB6jJoMQ zg7&*#o)%)pGmmdx8uoYxIUg>^?iYnV><;c{x@>nFvj6F9y9~I}$(+cw{!Y0lph&Tz zUv(ik9kj5#8usvBc_##T=hLzBshXI`LGRaBN%Ck#oT2 zxzY=>%4N!}6#TKlz%HDwplg~oPj0u|cKpqa}ruQjmL@`k+ zg+vc+qL|?t8Gdpqj~5ozwbrv8KUtCM%+K#*iXOUK1BctQJWF^-`mwwqZ)lLYf@qP7#SEXcju~c z`}DCbS&IE`xg_}1fbVz0dXmy)d{|C#nmTg2YI$%}pTCr;%knX&A_#Jkb0J#P0!A{q z-k#l*IUiiS&xKmN+m-Bwcx#&9Fo;H#tnktCZ)o&F1je@IF z+Je-yy5{@sTPRM)dvL+Z)Oqbv274Px8<@nhGD*isOPml0_i_moEjgsuTaZ5ZO1yi0 zRn*Ema^TssF#Yf{T7HxvD?>~xvK50>!7P#e_qjQWZ|0@SssS7@ZHdj`FhsgJ@%=}Rn#X_ zDE0X1(PQQshR`5Bqk?|AM0mhpiX~8yi3A|#-^*T{!Xoy}bNc-V3auA&yy; zqI}h_mETaAt{Kl~!`FT|>V7HRAbT|mySm4Y(5-n+jq7xl3ExS`>-P0R2cWYR6hCmv zWr_$epYxQ7LW<^?<^)uAM|*KS{fj{LG3eHPn$*x4aUjozj?5%Lrmnx4u%>R6K(Aj zHRe2d_6NR4{9P;u5`$oxdOWL*iv=@rs@?YmBn- z!i&jS57KEXFjGX;^b@H(koZO8<-{Y_p2!iF9=I+1x6Ece`x~Fl=Wl#Hosf~N#7T+_ zFU;<-0Mgx&k;A?gf2B!^Xg1EDyw86eKVi1pzHULvl((?=Lz$9;#@lTS*yT(fZS}Ju z-0fGpSNEh4{+5~*&4UYLkB6VokAr*$JKP6PGq&HpNZlYO9h9)x1w6U7a@rXy_647d!*v#njVl+z5KjeR{5 zUd~t{rj3N%GBVJW52fzh{S(1l#OHO~V{XF*@Fcq_!j$%%ghb2U7MX`%8RmCUQew}B zSqqHYavcznvWl z3X0^&NCld=gn=~SW-HBl!fh@(8JuzMF_%TT^uBU!<(GMdu{&f2JKtabN#+eKDJ?D4 zVS0-gU`CA_8W|aRdg{nKhagM9N);h&P_}_|Ef$D~MNEt<%3A|TPc<3@B|f?*-b@-p z84Y+6V&vo}=O<)8Mly-%@o_C|to9=k8JcOZwWymVO-jt|p&B2=A#yj`=BN6MjSf$~tLhF9Jt(KpI!8uFYZ#kMN%IBI# z=~L@&x8AK4Uj0SCnI43n7Dz+}=+m<$)B(_i-}5`SO-I>wewSdTnNKz3YwXzPxb{JP zYP?Nb%fIkpxofM<8rxxL$rw9o(3=)&zmhtFkMy(DFzlf~{EeS$&gh|gONXA;X;nZH zSzApLi8ugZ`3zj-uBwdsTwJ{n_;+4O|~QHi6Pnavz*aa5e&2r25n z)^Grqk^}>^J;Lu1g@nOANu`Kf_8+4oKTxrW(TE`f2Hs?VM9^K7pK~tWj?hAquiaBw zdaeDA?QfNvD!|E0Kv@O6iYXnvJ{DvhWE{Fwn_b^9NfFHs;GJQb!f)e)TXIWk+#38xN=pIu+xC90^Y|D z0r{y9Oci%Vm~b>&BZ|QpHS(MKdrvqj8u*38-7S9l&6IH6&VdG; zJr<2AK|s~D*j9iL0OuB_Vu$H7fM|67kOUtY7Ukl%o3@HZg%=l?^`wch#X?znb>i%r z&#EM;Jdw272*>Db>a5~VoX)SAz<_GD@YSvickldaWVvX%6x%Cx^^@*RYWt#QfsXBx zHr6aPIw?_1_F#t;5!b0j-<)cpn zdwP9I)=4mc1-x zFrT5wN56*{ps`X&Gq!9@dSXpH5xR*%X=S#|Vq4-)t+b<3=p!7ba$4$gQK^`RUs=o9 z?rEP_!w8*N3#}1yX7Ar@zx=ne{DxjnmV>UT|Nh3J$V6V*6zFvT4tfb)2tm(05C^ml zs-D6n2S-SO;~=exWzU64m1o=q5@I0$0OT`qxTELmHy8jn?A`OhZ{jGJH^J{ayX*V* zH1Jz}0JH7#9~aGTCDJd>a3OT@pZ~k?f1&?I{;&TN2ET{h*khcItyfH@CXy&I*P^j! zMi+OoL;Ew5I;+x28F!hz8<*Q8D5*2UMI#$T+&inJu9mhvtQ3h}9}LQ=!PqpZSP5Hm z>7+WWVNq3Ns;~aGybDM7b_xy9L)5>{E#w3Nkwij}=p@>8D6EVS$O2-UVGZD6Zi)?U|TRlTOhL&@?ndYk^8DZDMVM zVo2OgB;FW@KD)Kz8uPGAM&E8%+#y`-?cd9 z(Z?qnFxK75n(f9CU~P6Gr+RWN-KcNO(16g^WN5TR)s*57WkYc)k*dC>cKUUHc2rIE zY+-tU;Mf25pzDu5M-|V1r>g%e+xh2i^p#Pscl3e-VE{m~lqwK`m6G=%f$h4UyjmfU zXPy&4pw={&oS>7SDI-Ug>PaQNF^n6=@oA6Co+sD?1MgVy?&QI5WTy3H{`*#%wH!dj zHqa+`3?BT|?-s?U<>C|ir4>f40+9s;Vul&lIcx{toV%{HXqNQr||o z_(KS%L5Hi?ZLGHf0H8axQnwnk#MnA(U;H_8+z8c}P&)xNj5GjPfh3ss3|#Q^+V5W+ zW9NYZm=8RPzU23<3?B?RfWsvLR1aZN$4y#>?1ucWdU@rOGj?a|E(!N#ynl4U;2))_ z{cqw%9mQ!-6% zpUiDdCDeKWoMX+ix|wM^1AzeEV!}cXkiDizZ-X8HENK}4fZ;9xd`i4wNE`qVz=2&$ z(7>HjYs@~dH@y3W$Fv9)Uu`4AkEgkDOU8x3|H83*n>eqGDg z1f!3T2{3>ldjRgDKtkXM2$7#F%7h>|lLS#6OJf2Kk!Xen$df_r0eiyUvj7|;PaYU> z2kP<3-hp`Z1qTieo(-ZuD1tBj@7tTRyYos1=%53DF9kpea8@?Z+?ULm#@5gRS!h<9Acd5}Y-=rbdL`($hU1-JwcIc#Oscx3l{REM z06;DXx_|%>0zqUXLaZo? z8kCLV2!KQbpafJ1+~f<2z;giVJvfGsg5}2`lXt+e3q|`(a@m6deaY`7u0N@nz&-U= zc8?AbS)RY3z%}avPTW}P0Kl(dQb?32`t)wK7^k($8X@FFl{yRJ%w`Fy=`_ZTPQld( zh2?{+9TKx>p^Q+~=LiOm_!SJ$y)d8d|k2jJ7tF)AGB~^X6 z$=x5P2!_gHFu8gvk#%W@RHxR(~zBek(c;6qsST!4h+f$YZnj# z7DlEu)pgu7jaB6Yr@9$wS0FbtggSxBQkoBs;=w>wI1Y_GN#{0MFPE8+F)Sej01m(% z2L~;M9eDn{Qt(oMpN(VOKs2h0EC7Q941f?qSQZH+0jcK%fZM`Km1}H-51QCEW0R1G z(_dWwWVz9Ab={IpJ8Yr*+>U;A`yUL#+Dk+0poggI&*cH;0f0MT9@Gnq-G|U0{6_e_ z9J}$lQrgQMum^Db<+suF%9*Z9dR6sc)`0=(x(bvq_vHkdI-V{TX=AH>NGh=VH7Xor zAfnA?a3#TUpn~Sw?5~b-g^`B!;9sO$R*AvxQByu52qUC+0R-eY2ZSCVZ~$Ol)@0zB zKaUPnmMV#vwjeA43Yk;6JC`+CN>5fwKuL-asWS0)Wg43|Z9p}Od7k&=P>Qyn)$Nh& zeI0RhO{@FCjW0@V$o7sw@4&d%vSVmKvyM zw`LPB9}ZnU+{P%3t~DuO9Q77h>+&;u@^^tZuIeHf{j8Yx1Jr1o2Vk9O0jPI@BO-DH zbWSJ99sv5}JF$qS_h9G7HK z>k%^uIIsp|LUWpeiLc*U&O-4}#9dI>wG`+!IEa7uf3DVn=%oA8id^3!g5N~>^Bd>) z(iQ(8_Wb-*ki7_G4?O@UV~HF9xV6ScDA62RYs%fbszu==be2TM63T1h{RR#`;^x*_ zB{l`~)^)}57{umaQpwqiMA`x8R_9~|K|v9 zFKx}6ARR0s#iCu7youzMGEMRkC9> zu9?@A#NJGV=`&vD6?pK5$)5d*3*GzdgD?H>Tk2ieGuXcH0#?c(0D#00xwMZTBgX9# zz)EWXgkE1cW5PseQ`p^IJG5+tUV_VENC z^6v`4Z=`(klHa$KU-aKm%kV}23-Y`mvG-(pr}QIHiJ3mZ(tv<@8SCc6!aCH};c3*< z!S%&fsIpQ|@6U}mn&THYR`zg`9u?{5-BE)eI;kD>0MH>p>zD_ljHAaflw*%;PhN~+ zi~nPiZu8an9-N5wvrj(1cl5u79Z-0s5Cmas#8CsWwZ@_~AW3Mc$&x7SwPKl!kEo60 zGD6wZquJ-t#<~iu3{S&TN)wZqu3HxK3JE#_aBB#lhXB9<1U-LLs_`ry?Aa5>-(Mfh z-^^Nb;g>(XMeS49#NGLq3;>`Vw*Y|tN4WZ^MgQbdUS^5GC+5k&Xw3D{dk?@Jg7QuY zA%qYz76Zk6AaQ5l_f!<7rYoE(huu0`>>g>h$nKfCf7rJ?zn|-{51N}aRdTFp+1svv z?9Yg#WdPvuyw3Q^?eN?K1OG@`!^iG#SbAdvLG5JpZ_+)Sd<#2&Sa#hB<15_}+1@eJ zy4J6?tMuA;_1bk^-$SDVWNe#jp$4IlfQO$S##`GfZEOoEhErpwfkis|l2uN5;wlV4 zf})j7kGrnWUH8?MyWYiz>9^TGMsxX1ck=(* zFQZCi1db~a^}`GA<`om1$(m*1b7;5P%p2b}-*-2D{#I0NK#UZ8Ovg2JO_ zoTukIK@dDvcH!a+G`ma0^JOT|uzvDGrnJ^F=gFi^)#OLNT>ECq@_v;nTTUKKn$^Kp zv%V**Wp2!&$G`l8q3QI>!l)4Q&(7biQq&q%(gS zSsnlo4WVY>Ie7qsuh$#(z7hOp_= zGIt>G(Gfzjk3X}eDN+C8!2VHi1FIsnWENT6H5r1LSKn3|k3cNaxQf9(cinWseLDBR z+`Zs{?@ZiL5Cov(o9rx&)F{D#mFl)JCB8eA#bBz`D^D zb~PYi@@m1{Mm~JJwskT90Pt?I!8cqdKCAxFAbvEjQj=EL1EkJy*>fNe>(^{pc)tk# zfc@`lGyt>b8*nZTb}wM`&D#>5_+R(56Lx*@sN(=7lpByQKsJ?*5kOD4Fk(Eow%vq= zY?kcCCbMO(A(K$k3m(if2ConBLh4jr6SwY)G0i6Vft<-^A$IPP!^Z4_LWnvXiw$`# zrFcV}rFs?ACwl5J#@Sv#EpMx_6{o{mJf8HCo&WY(R;=<#S>;j&OYZsb!I6OZLX!qJ zE-^9K6F?8C?am((1^ov?@SD-E-X#HxAuz^R(lW-FAjVh#k5wbY;91?sgCinqt+noX z^RLTp)P2AH9CqKk{Dfd1<An?7cqlPzgzdTzX7181> z&X+8y`H5TBL_V^4$itnG{03ij12)M0AWB;k-YJ)>7#LE>`h3Cw0Bj>q9)WC9#%#lE zQY0}dFT*ZV*+=3UHy*;c#~=s;CzxZ2^bvRh?)a->te-;3;+ORsKQzoB0Z>CgPx8_8 zdO-f2BYh{!KcDi(IuQ34no@nO+|NuJ7gKsT+nCxN^rK}2D?y^M^F~9d71}3tRSWlG)D@XrpVkW?MEv(KafWX!orFg zq@0ztjvCi;Wta!hENmS};}{ToRWS6v_}~wiUsgeX-ZSH$2uAKAN$8!kC+7nqrb{gi z!Z^1xwQuXpe6%^mwX|b1o^96CS=?M*c8_0a3m~kp03iGBLb>3=HiD5E z+o`p7Y-O`OkF}guG#g)sQEZ1g9?QLtSHs|!)LZi~aC${3{HZxS-ofBh(KHCkoOG2^ z(Yuw8lUY*s{c`2@mq}U6zG)k2vBrKgFH31AZYaCSFOR;2d4rLa=l;#>Oq-qunvneW z5&Rwi`~k<$?6Hu=zWdIPQ^4_q#LpmJ53(b6I*c zhI|yLIO#}sAeyNl6Uc9tEAz;#wY}}Fwbos1l9+7`vg+$A6Z)lKbvSq&Gg+rZ?@>60i4{S1zgibHEe`TKKdWn!f7<_l zkq7?Gz8;G@ra6k)qLi`WsZE-xxK?W$i;>$-qN}Upjh+qS#Zv5?;d~laxx1IK;Aj(~ zHJqHGck6Lk4LjN9(EP_+)CiT@E~suE8!yTsmkwwh(n@Zo$2(c#{&sasxi#3w^Qpb& zO01o9j$Jf%_8F(8`ghz1iw_##cfGlh!wdUI(YXTq2<<>rCuX8#oZia$XDOWlzjk z<#DBRfbH_sJo5nFgg%d-0VImf3G!zVH*hTX}qi4E=J-W?HML%yt2nK`wb+X)%BG~TukSBOW`wgrXdZmxn`5YKzV;+sf)s$#! zW>B(390qzab3XkpF$#+xD4f@4#q* zmp^k408oGbM_J3J*%Y=)vChj$9gCp<&AAsax zm+7o@BU*f7xAj8NJT1f1%=Ftw4YyXt8^M6~>XHmjYJ;lLO&t%v9b;y)fuN0RU7>Dk zgDtOMfEEb|7)j@VU2yu!dt)DF{EY5x$CnuV5XB&zVj9I7DJniy<;VA~e-r(2SN{TT zk9QT_zq4NHFZRnZQ5s|$_%-KG#g>k_@4rJ&02YrVGeVO|L2-jYZD0oFt|q7ep%VS< zvxb!}Op=tg4@$D}xK=VQggAh-yd%(vX)P4pmXPMK*emlhV~qWh8Z&{3HT-Ki6;cvZ zY9Wlw;=%g9nZazM&qhs9E@|4#iY&z-av-E94*-TS@C@Exfuo=E`<^=nF{wRj2{Dxk3w$)QyQnb zN-I%nBSFTwwa}zW*zH{z=YluUb+Zv{mrY%ADC8XPZ<(e_vjS}_Ytf`B0g=_Sx)4o4 z>11(~i9#2$OtC~|Q>rZ%)>J<`GonF64;wU@4&B2W`Qew^D)0!{XKVK;QhBclepC7T zTbcl$XPwV!S3i0K|7+yG!oL2UW-q(UFqD52@Stgi-N*F#2tS68^qvrAZk#(U>Xy$Z zs<@hLY^OWfAWgqsm=}_a@4W@*Ik3{)o*%4j&qO;sSf65irb66kepVnc;k{n0y_;9z zpqw^0PyKvnJ*WaADn~l$ni1!UdAt|9c(6cP)^RYTpr_dR@PMQ%QlG7xJohl1^%nJx z@ZJu}-u5SOcI1wkXuDdsY3pn06*89S^V(PTXaQo(U-&`Z_5AlkYcM!2|n%z+!L0NUi^);m&FhFanLz%FR2*g zW|4mc+rR#3;bTZ^O#4h_R#O+U!)r%dDvjMPbq%c#_gHBTUsNGq=K{{}nd|_9o*_B~ z0I`l!36P5%FxP0^)GA@WHaBCMeROF2=FMmzr_HRW1YkPnj*&bF{vxU*(&?r(2=4KzOy|+_ zPby@+p@i)Nk( zOZva}z1FAE!A7z3QJSx!SqzocW33uFR$}XZDU59d9FJ1nS-dk&o0gNRPF7hgtocQK zM@rD8OtGAn#dy%%JPHC)pY5w~UB@ccxiKQJE)_Lzk^1kJ?F-W2cfN%31LN1E=S$(A z{M=sZOr0x!+K==q#2iPk(=!oM4~416aq;PCT)R|mdDDDtgqajut8!PP85K~hF8a4$ z17OD;fHBMyco2LQ7vtTd4C_=9jjK4WM5*LLXxTJMW(ID{L$M5Y*e98X6MmpfEw`(& zv1Yt5W4~>UGN5v?;L%1luIfB4izszb!x5~ny zUb|XI=&h~-wEa`@F?-^Me+nP`W~Rq}fbsLWc1169rn!ah>i?hm^5xF-?Y6tu7-^K* zjtR=?P^vJtW_INtVDHQSG1Gr-6#U`8fAGmdEqlJ0*$Wqk*NCAV2k5zD;2A;Nj{f>c z?pDnNjaR>LHyTq*rH!4`%{O&gY*p1*ZT9<#*)Q})Vx^ex7R{oplxUD(Hcd*4|%r{;citd%Qp<*0Jl*dK2p>n$>qh zG@lZ(-gWuvjq&^3%)+a>(uSA$tn zrEZmAxiJW`E}R<99?sH+RL8#^%udx;?9TB?@nCc9E{s=Rc_oY^B1&n%bMFC(CAD=_ z_v^Sz%h<6&ygArq`Oe8_jU@>G7h7jJFsCtH)) zi~}|pl!i@e)>bY#DSF=rgrdKKw7)aFqOT?l22s2geN*)8v>--HoMV?8(KFi%i_AOD z(7)hOo-`)C^Zb5T@iX%X7msur|H$F-5BUGRGQzFkSRZsn{MEI?Pdd%wZ+;avxcq$G zURjho-+mL@-{$jKbz79I19S1ePUq6;OIG^xk(EY2I-8*j*ReFJz}dEpi_aE{nyaTY zGq%^u#r{EF7^-Yj*`_d64o7O7-_AUR5gYJ~2aC-ijdT#~prYeuQk9?jW|5)Vx?g6y zVHcyMIP^n#uU>Ddzp7g_s}f~&I#TT_U7T2GsEbIWXmeZx=YY&Hd?8$ZkLo$ZhlMZT z>tsJqi8en~m8DaEio*8tR!E(;Ghx6ENevnk2>*g#`)IVr)GeOc1&Yv1r1Yh&uX*wrR(?&|5` zd~PA$`(%ON)P)^2i&Ie3D3H3qEWP#H$faTOKm3ttoUot&{*X-QSzX0lY*aVfYHM5Q z-Qp-c*i*GcwO!jdu27=Qd@n5k^B3$1{)9r-CBJ`Gx?nHHcU-)$pSZ>{(^`T7aR`ls z-zr?oqc7$eAv<_l#*+YG0igRcUTVh)2(2j$Q3`2ejwZ8x(AO67U{^FCaz&epw)19+ zyJHkHVU(z3Z9wWfhj|s(@Vo7e)>taSiC&$k(i0|H#WsZ499~!>UC7|I+ zXsiJ=0!Wy^>6>^ej^m&kOn-4#Vw2Vu$;K+@Hk$7RyT2N%MG8WR>7mVL2MbCaujYso_F*$t$({|P^ep4G+QUH_=7r{mxn z{Y6>=R@0_YO4#{zE`G7fn_@xct~lMQjv8(3Cm_bNaW+|05&=@7b^Tukg2shjWLZjI z|FSRew)!utMHbI+erMYq3!~zNxNVfRMwU{VG%lNNNw{BUpi(J!mDxWqSub^10$4Ii zK0c!mfSZfbsZ0O+ZsB|Jx3(TW38XlIe|mr&d;9Qx(UEWt0f2rhuFmPmR+NwNC@o7O zTYokaQl3Spx;eO3Y-eiwcDmTjpc&6>WfVyvNehm$ml$zVp-pRRG5g(uNCvo}XH<&AQogqmkybZ*FuL040XjBQ{Rn;sB)_c(K>pBCRY%(lR%FLFXQ`p{_h7AKjTa0UA^kyoHw#Y7vtsk|4{#qre++$=4C2q zq0K_2P5o6N#>G{CT1B_BIcUmk+{g^FaW`lvn28lMlqrf!)d5F;p_e8w)F^ zsitag5i4ord|F?VO{`4bkcHHUd~vHJt!v5^RUjstfI`g5iEU;|8v^j|@&4~+|L>pT z?=JlEr*yv_n1A*FhI1P|-O2ZC1K}GAv7&DDy@Hv4r`|SUAKx<0$oB*0NyiaR$JhDi z=`!oi8Z7nj=CEssYgAv2OE`N+jAi>B4hQIwAdF8QO?B8@3>L*%H=M;GoO6Fv%i>)L^N{9qaT$@qm!e*b)Y z{RR9!i|@1izNuC7{pQySY4;(dao3F=q7V7bWJ~SYn?sj8kmyc&9lnpoxgooQ;>f?@~7OgXTs>-6Fw$KN=)78Kh|{TbZytivlM+NtO*O zVFM9%u{`A+O6}vGrk#k`uugcfS{_YnW^nT)uzhcay(cwsAf+4l+@u=?*G!CWx!r7< z+9c^+PsTYQK>y5ZDGglm`ws96-wn)p&H+E?ejklY& ze0Y>L)fVqYh6YJDS8adxaN$l9tAaKW&A%@-PfWviHl6Du(bP8|xXu|TRCMBkTA;mF zOOtRTqLy^k!n$kEB50Wp)G!Tc=oM|zeiIb^h$ihpp0p-d9i`l#BoBg{y+tX{#9%t0 zXwZTH$MEUo=tt8C-)Vk-YJi`f)&3m6&*S^Z0kb!I+3zF2-@Q;K;b}H#lGBA;YF_QR z#HWc#_~rwCoTlrWN6d#lY!})&R=HVeeIG^#h3R^>8rCIx+mUgrK43<&uxIO4OS(tw zRL7JbR6%?iv)-CB)a`lX00JtT(To-Vh>4JUGXh z@84Ky>F#i^G&4 zj+5*8#v;|Lg(!=x?pt5GBT;Rckt~|U%`V+s?l0?jIFKoqk&AnePv&aA`~1HD`@c^m zzc1K}?)TFEOv4^vo%*~{MwKvuGFo+Az6`gI;`#N3xSOSMDpNu`*4413v?2;pR05Qh zFHUur1a7^yb=$4##k{vx$6ImI z$#5WpSV5Gl<+$5oe7R$iAq1>qfqT@ze;Gf&?ffzi&klQjn%@_r=kNG^lhv^iU%$8f za_<3w@oy&jFYEmw@Xgv(VDNWmbT7E8>TYpA_Rf$O8ly0*))2Ox7#>SB+mZsJ%b!ES-yR!}1T{-L1$-pP6U5#h6(}}H1&etIi z5B8f1xIAmAqtV9PN%S-(3|$v+V9ft`{BpYF_g{Gx?AhS?DSj`Eo}cjhgI)zYA2ajF zQmo%^emRfNh%MTO_1S$~ofuo~o-jTL^F-#!=^z+v_+UL++Q?R|H)wqRz?^%2j6GXIuV>c+sT50f7sWwjyJ`rfvi%ws_u&d&%O`?o4`JX} z2AgHRXxU*9XCUm+j;nhSI|@87*9*_xkH;^*d-Ydu#Rk%|+SRlCUYz_s+5rAny5HwO zeQX}!=_4#d*S_ccMm_ATKB1eF&173EyJOXrLap<7e&t( zoS^bjP%k3&IZ!V+a25a{g7=%>Pz;&(!$KNP#@kZaCjH&OEcgoLisqpcOsFPsX%zRp zbbUqUh*ph5?d!VtZD(!WoO**?;jLalCVV(poV6#VTCG=on>py>E*RD>CU)PrveDaJ zruwe_=5Eg%^FfmwJ}6_&I_l$$f%@b6}_TU8hJJ2Hd{;%IcY$}R4H1(?rysM z<@C(vC%<3Zu-iIfb_h54A8WmcF{ij`@>)`;v+BKAINxi0U)nSH5`5WXrQxaRu5=0N zpKMw^9NA`EyN^$%z=soeW`wdL&JN{4GZ%bSN!utFf>c5gs5K%V+x6 z0zrtTLQ!`zX*J54^Tqhuq)VWQ$9F#wJFw6g)F zJQ8}ZxDo4Gb`-rAcl$@le}9?;_(kpNDbG4yyh-^V%<6JaJJ$O)V9uAt@ z$E&jICw^yfqAFUa{h5N*F4VSI^Ak}$tg5r_WLcdxZPI#Pvd%J2VHxQVHeFb+%)!Bf z_RN@_Mc>Lgj%tp?qCr&4$r92=tTCF2XxydAYQR`NOnbkTJ>>aWaMlhNrZXpJpkwGe zmy$1rRd=jvvvwf6_n`ggJ?8f%$?rM8FCRFG{>?wuog;XE`6c33TFW6!qFad=mywfu zXv|HPtLrtLxP#aP zyX5z+=J#dVRXc70B$!w5`^KaF(b@aVFL=%Z$59%ACrSHt8sA@0aGUPJa^2COi7BoV zTr&?shRy{FCF~juMdYJF2gIB(k@qbZEk)>?CTtj4L8gsE7Ay8qi9XCX1mS8!H8G{x zymJrFPLeXtPz*8M{b;ucx!ZzXJ!EXTYWm6su?!-$^4nbU>+HsA@t*MezUo)6)UF_X zW&Pq0JL*h9{QO^)?{W6q0|1FmG?_#*DIxzw$R-+K3ZEYD78OkkEmdk&WTMUjBrB6y zu%}QcYAWL@a1jtEK}G=sGmcx(v7lVofUF`R>bp!s2{uPGMooHaEtp9ljo_VC4QUGX zMA*9m9weG7Cb$P<=kacRce|v6SZC{lG`n8FkJ$bTm;C-~w5yldtH-tfs~6=9NCkif z-rwQyFEJ0oNPt;-RHy%GeoITKAl>YC&M2)HqIIg4`^{v|YcN?>c_hmS2vI0V8?X*d zR;MVC6iLh%%1EQr$s7U57!qb%XK`wNhGQd4c6Vaa>D($+FNIi)#%14{X0|^C8DWf| zjbda^Pq**<^3aOd{KBpKJpJ0L?nk^KZ*KVI8|3$=Ja^%hJHM~Q*YQhI|7^1oQQ1$L zkIwWpgLx%vSZM;Z&3;)8tPF$|hp=!%oY&JrrVVN%y9wI7l)?zh^GXT?Fw(5Kq|_*7 zj{~EHPPMdkaMo{B`Y3WXT&lbgMHQC>Ii|v#4Pc{|SzM*NGXRTZVGSc0HFs{bd!PJE z#22s-6Fsx<$M(^C>VIE}@ApN3&&)yR!6m7GN}7iV1RzMpf*yYCr7nb3i%k8o-kmL) zpf9IFn}@uyg^|+Qu}sA;zcs0xN;HjvT3Qu1C`BwJfO9CIEGd4{Fg~0%HZS8Fcj}Z~o9QM_vJupUqK%a5QY|=0-f+O-TE-*NlWi-+qKXM(ntfFrrKA?S z>Hpu}nLW30Wcm8!Qduhs3qf!ZCChvF+@39F9`67Dcw=r%MBnMnZp*S3iUhG1YRNtC z11VW@+geGApw9P1g&Y)MEygzaKVyB&r7pyD(t_5sDiR5HG2uy>WrcTR z50Fx5$5K#Vb;(x`RUzQMC^+YQAxb-HNtV?mpUemo6!x1xcy9|qA+g#QCk(8XVy>{eY@;sVfc8SY0v*}3!Zm!m5)`{v) z?QP3?WO`Cl(8r1`E$h0V8_`9j$kcE+GMS4~z3^ED++N#U0R6p=*%k8M{$4!XfO!fe zPzzBOli@BbTbl7Tp?2+8X632t$8E1NG3i*kAapmf2R4u%NoArU+wjej+i0HgkcO1_ zR5Z*u7YDM0v(@pYaUAk>;nGxyo{txHX}sy6AXTNcCz^Al%^)#&dH^cVI0Nd8`&DCIo~z=MliV0`%vX?U^Lrb`z&G)63v zY2sW=Noom?G_^_1E8Ut6ZDUQiD``p?mHzIEE5ZZVUS=Hc7^6u&-1x+_dhIIXyj?Wb zY|@Gj7)g0-vSe5s>4G=)XQWx|Ry`&~?-^f{Rc2ivgE(PT<_U~O`{mBw>Ds1ZiT>U^ zfB)gUE9AQT1#)rwB>^6SFLd{Lu{o)N=epR5NMXM$)65nF?wb$;W6Y5(PY=@GCdtVG zOU#&RVzqBWBO(d4HnnejT?<}=j(DvX$^&?+iSjg2F8?R$ zoxn=;`7u8OP<0`bXcP~}clSiEAy5AD!=u%Yf0GS)47b7GtDIkbgbf^Tm|Y=PI>Wly zxfTf5EJ=>4BTY3g?X0!*E85CM>#dh^<3MLcl1=?QRx$sb&T1IQBk41`Kk#<67}T_& z3lRgS9GK)flVUS$Ma$d5Ch3xT&?%jcN7~k$+Zu$mqAetNh^+X}lK*G@U)f6B1CszR zWSjvcgG_bBaYc)=ZEF}*U~kD6=k||w)D|yciL&#Y^opsSpln*Cqa=6Irby)i!?R0r|C?5S(Ju{(d9AS{C-Hjnk z-qT^%#3o8j(T+C4r<}Xkv4*ua%S}Xfbzh7ploi=QHG2?0S~U4g-cK6=u`OJd527!) zu9McfdT5M#)_Ug^VEug4{Ke+?V@0oa&N=IR(9SuVZUW~N%FS-JDU{jh_Wq{K_dD)c ze?v^jib9MH?|fY)cW28g&BPb9w@XDq(?q2i+1Ju~m9V3wu5%aUq>H4Rs?^Z|k&N3c zR(I+mGKvQ8th2Ri$by`yw)N2U=mIjy^3$SSYfDr{$N8YgN|wQhK**1!bFsZff0;*r zQQw=46X&Hfi5vic(1f{Q5B9RLm5kNMw;Pi zdsZnp4LX@geiDJAYpPV*vLX}u_dkV^O5#LR;4({Fu2@J`-P%iQEM+QIwH&;ffxC#)!D4b^Urjrc-{5ewt$Xm=38OrY(?4?@m(u(mSrR7xF{mt6FeKMQ5Jex zk$Y}S%i7_|fX7bAIyh-y-BQ!`)>+gg!<71*-H|(bH|qOQ#$)h@Y;`jHOJ2^U8@L{g zdUx)Z@qvw&NzpT@uN!DLEa+?V_bLPBn*6;EsV)v`$N2rYB8LzH?c|2koytS~V~=Xx znBFrfFuSAes-Zkv*{JOIbEO7xVl9tyRt$ZtATA|1_1U>nxR^dXtgxm!eXT;`DV%A?sV7EPI@_mh#X4>fIzGUYv` zPrD$4W!L8~pucaYFILYVuLC|0;PX;3QH&-1G(PepgjHZC zv&PsN_@sy?ik7`EMy+VM6cfiBPlJM02VEQ)xgI)J$Fxi-P0n_nR;NSS^@52C<@i&U zgr<&ETy;_~;bT4FwLLPAzftqu5jnJ`86WJ~D4~IcgVZ*yckZP1Ko!-r*8=)`bNoep zZ$Jfoar`~^JQ&&O#|J+)q-y0LU&MFebEbD(5=WjSWLT7m81H6oxHCvrpyu_?!kQ@Q z%W1uWrjR^|qn*Y)GO-o?kjO9lsp~Jww3m7MG?G)(`qp(O_ZhjfAyK|Z@3OJz-T4FE z+f7zqoq73m`Hhe}@!g%CrF5^Zs#%afo;{mS6{#q7fl&1K#`ue~s~aKkxxX}6M@d8( z7^3MiiP^vY(6q!nQ^#J#AZaliu5udROI5y^1wjJrk$(G(xz(O2vOAphZ2}cfN(&?@ ziS_IDSp7&F()qx`I_AQ+V=6ipw{hKPfo9XVUUhmcPoJEq^18af>F z++-$jKbrr`4-qSd^+63$O3LQTUb~xQG} zf&RYLD<@a3FV3!RLJLd-qcn~Hiint=S9iWoH}*Rd$bXL(v*aw6>rhO<6=S~VH)kEt zX61JHx9gl$d+Mj?QQLIdWnJE@_an!5ZL?{plcGzRuNxmPNx^q{oJ~k=_HA-fTA%we zOu9Bvqkfu=55+g(&VEU_95<4;U(N3Cq*m~Vn1_FR=pV>+yP9_$?;r%=7QkIY1f#z= zyV{ltx@TPoL3yX+j;cJ;Mh=%s9PC%&iz3@O8m7ga!_nZgG~eNQJn*~F#%}yqx142< z{(ZITbrUyMciLT@wQJp}w5)lQ(IREzX!DgIc@~ocm?fDlCyn?Wrvnz;YG-Anw256k zS{$!`Snba0!v((^6_dlbmpJm2w|wT^f}PE$s#|O3!2vz@7p@_K(O;ZhZHvGy4Hsu< zlYSM&$#DL^n?KAy?;RBdyGK=TDAx0;+C2W-$^XPZ(nnJ-R88t(I@xT@qw&JECt0r= zv>TICUF`O|1C@U{?)Td=JMzldNK;_Uw23s0+qjuIC7Q!v$)ZxTB+2i8868c&7#Y4d z2sMZ{dr)>=n#@a)^p`Yrri~&^ePmzwdkqnc{^IOvYw#=p4M4y$XhmzMJNhR@7pDDT zG2j2Ab;XR<(N1k+Ix9oW4M0r7aj9t@mw)|dFZuB6Xh%gt_s%*xaC5)eJbQXNoz`cM z|GJcG=;TnYV=wm-*>i&TU8HrEEq%Ac7OYHX+41avry;;Usoju~j1t~0qmFJ)x=u+j zZsWm+@RGk*9>G_*eezcLd#*3eu5LyP99WJ<$@%q0%p!h`gf)O&RVr;!9oD~ioaJK z!8B~YzgK7%Ie$nQ#_tVjfoX^xA;5?{Bt7B=itO_HeOn&V;h;!EDd@_HKZlmCqqsCZ z-L2Hq<-C40T|au(m|0z0T5p<+Za{I7wq25hbZ?jsd=c5aR?>78uv|4{;G&xCjk4&A z&iUnfqQ(#6X+b{Ezl_2}9r97r(-|SXK{l$!kIbfBgR;~C`3HZmHiFS#oLy~^z?NAE z03otkL{c;B+}Dd?l=Y2UTmJC7VPmPH_gWV-MZbR5cC6RY)QwCM?^XMQ6`4mg>n53^ zz3gB|rZf$z>FzIPTvU@1t> zozr$bI_v82Y@j5MQpaQ05ysOVwZpqzZ#}c-*o#mZn=j{4-!#dpVuYB~5(0y@aYCiE zZ0%!PPqR?2)OwM2BoX(_W~U{kx-W@J6A16`U^;~uISV_OOqz*s; zXrSSj+n<9I5UyAP^cQDWHy-Akup|I@@LZU^G~M?zZFi|1Nc}K2ahi;I(3&LL@L&tI z_H5(M_P>vf?iHrLuVUVnq@`R3Se`lC)J0@cSgX#(GqQ+%4K(rv7qPuv2UinYv<{(2 z5$VN?(gmdjkltHBng~d*QUp=D)BvGc=!k%b6hXi%HT0U$K|q@H7D@;ZN{|)$IvroR48`5P6jJ6QzSw=7 z7vA{!qW_(1mAP_u z^gw)yNqH7Wo=CBX`tp9bl*+5LVy4VG=o1>gVR9wTD-oweDmw@(Y|otD4czXj@lppijTnDJ(H=6>GH+XbvuG7d|?PH zwdjF`nP04bH&i_Nz8u;aCkrE9GMBbS6jykiyW!pge{0>XQWuTS==F*ir#B00x~_Cw znoVP))GfJ(H*wiW^!Dsv5^=C7eUm?mof+-Zxfe5eMjU>wufnNny`N9DSVFF_$;dyM zx-+B>3=J)_lgp`ZWcC(LPU_B=M<6hu=n~eePBo~1aF90TY!4G)!vOrjdg58c_3rxf zp`b7?Z6};Qa+yg>(%-sK_XSzS+4{%c-Tiux{d%(8*I$$9@1AVA)$dvq>D)r_gtQ7} zwt=+H0ki&|N?hY{F0!ny2xK|(9DDlJ`jo*{OX<4PR6R08Ddpg|%WBnaV=tSjR2#1Q zfNNtY-;<~X62=w7?MM#=IQskhstt`zbKcCRgL3g_UGZdl$AjVO9}(J%5&Z#}-7>pd>Hg7dQke-FwOZC*9=vbL&!H%2FJ(G z_Y9oOQVrGPBkzkoyHi-o6)E@krKyls>Cbnp|DqPc9}?7LOnB1u#w^Nv=IXM>-erB; zNJV#tm8+BwOj%?I_X_fTy)Rh!`u5L)Rfl+CC)JmPHCSAVUHy4?rtY|1zkGP9hL?zZ z6kpXX0N)oR`WUl?6ip%dKwmGKjO1DbW-@Z+8)maCQK;VeaX6m8bDA;pXcXCA*if;JkjoR^Ibe90}n~ZTUw(S<%%8J+3kYWw)rZEN3&>F40DFF#D19dB z?;}VQUkQ_}T^DA2s`eq5RhB1-lIO{UMz^^w&*MF^svCX^gp2iQhUf9d{Vl6s)t@HW z(3O0OzI*4gx4Uv{3$+@OZKf$)-Kw4N%|42uBSJb1z-E;CEaS;m+wyOEzJZE(pq)xa;tQLj|f022+BAw+Xa68pT=ktCFW5u3${HEIieSvkO;m+pYee7hh{Xm7Lc)PLt=ccUeVErS& z`&f=EY`<4T?=CE7hSKSPcEyr}9gXzje$(bsuKa+9d$yS1v;7_YvXOKn+NG#Q_L*r0 zK4aG?-|MA`m&fN~2IEv?*~(mFxy!qGN9F8n6Ar|C2+k-P-;qsj9MjLaF zUz7y0fHi1E%W7*y5-GQAR42oF7k$xr`ND}}u~u1MSwO9!V5KIP`dQT(nmz$}=U;e!LRN32;SbZS|8@4)&LpCt%l_pw_# zk{6eIzd&W!6oxfwH*Q$$y$s(hIq7+0;_DsDT*v4BpR8~g1LM8%su-4?#s_vOqO<1+ z$2*g)pT5khIbd_lvDt|a(!mh*v=C|b80Pc_A#|Yp&sJh(^WX=^VUe?~-nY843r1md znln|lv|AQ_F?g{Zt3o>C)x%x79LDY)676cTa6Xz1&Nr8+*C3BJpRHVZnpqF7ddxni z`{AYsqELG=1UIEDg&4W46EAE!q`{7Vvm+qFWv#f15!J_9qf>uD0gYZB&s~c1C%f(C zoK&A5^!cig2`rk|pUTetRN@!<-J0_6rYevrsJq2aO&T9Y*}3xDTutTwXpMNE6q=W! z%mF~%r~QaMF6C9y`wqIvIUEIxvMFL!K#c7KzhUE5xA5qJhXrD0P5wXWMsRH9XkR8mm;S`lez*%aIl{Z+Q-et8w3SVNzq zV^(bj29g1aA*=Z{Y{ygl5jUXfGO@l%qum1D&{uY^}f2jcco8HCUapcg!Y!{;QPA4-w~ZSNhurH+}#+0Q5i&H zbg}Us;NFrZc6qXKdLL=~c<>Nr;QC#76s3cwxfUI3tpq11|f z5POY328D${)ls4CqASFXAR>H%V>1L|>pWoZH_GHfqkxW0(SF&G)vaIC`R%1ukbQNT z>hW~0y^!)1+mgA>b3MolR$1ks*UgRrES^+Vn0&XOUV10hfRmYeCDpwi`{wvZdW|6f z?r2j3zOtLtj2JSF(!=egG>NFt-t(V^Nu(G%gM548vwkxvyhqi&K$?eg*xs2N7_`jv z=NrI=OTJwRpx#95*nORHO#dchy1hbIFm|8BY!0$O@+)-|8F<(E>`6dd}@4 zV`ht1MDtlPc>)1s0O~W%X!3080;$cbwY<#P5fsr=WKoXgnyBsGYAiHU8GE%z94u@Y zyI)h@-!s)`?CSK_0{FhFK`2J!TTFZo_LJhZ2lbgoIliH1&ns#cj+|7v1#sF?N8h9P*`ZDsj`aFKz0p!be1BQyl8T( z4d`xrKHg*7(b2wRIMj8_1^_hMlXr#PAbc4DboKv;DUJ$T@5n)5xk>1Uf!K+7^2R7q zrK;dCr3rjDgKqM=`?Hbjw0Q!wvKz81Sofu+Z<^g}kXHq!Dgug@y=anKALTP7c9Bn5 zohEP~nQu{Rm|z&raSj5USCP9`U*SvQM}g4Z3J~DsOMnd+jmzcz66!7QGz#mz3Hw1z0JO$u$JqtX$+ zh`W1U%}x%Th@8M1d>DwRt+UCyGy?t>DrvKwESgzMp){H72p|)E;`mnnT0Sq)6_$91_GuajPfBwLqE!pJQvu0CF-6@AV+4obQA^G@7{- zd#@8UM8I#)9it`wCJv6`u9@-1;qQyX0=A3q~mM_(pdC6K>6OgRkpGah{iZ8vW9~AG3$g1(3 zjDfdz+$`p}9ihlZdD$}Zp#(k@M0=A-5@+@*YUrWCs+Kc*=doU({vw?4&-`Eqdqn=( z3FM!5^%Zs&nwc6B*jv(6hw|j-_SPY1zKM9G#0OXuX$^QlyXKdhvCiCriSArrir75i zsMxm4=^Bk3D#wq!Sy+h=Im=@r{JTwh|LN@37?@{Q`a;eo`9Ikw#bWbGE{flDJ`R8H z>(&MLrKlH;I+KTAlk`{zKyQWkQT9dnL;ku*iX)lxbFdm1bmnNgLt zCOYnvc#U8}N&CyVG(UK~3W7>SWgMifEzMlRPfa^l(&7(3A7a+Zg&0`N*iyHPrPAxa8rj31<#}?@{U2Z-eAbE`83DE zW7qY5at0`IQ#c3l9aPsjz}zzH4(TMqfBjk_1uNmv;#VUs{(d3H=Lf0a;A#_rQOeE)09@ z24rG8Af`rZ=kC2Jdr*?OMAd!xRsXW_F-M*gMbbvq8R>|M&l3mF3C>r7JUXcPM1tsD|b7bee})FrJ%k!H-9K35VGB=air#9L3Hy{DLSVe!AN z+53lP|5G9CSYXzy&~W01==zE!W|-%GxwU!;oD(*bO==ZQwnhcO9ctRTud>qn7iQ?? z*%SH+k#vowPGX4}-X|oAV9hE(`p4s(&zeT0luO3JC`q<-aPKRIkwlK2q(6{duoRgL z`&H*L8aKnkNHP-tLo(vwgn5cxT*9n`tJRaO-MFqu38-d%_7w0cc8NHwyiy1y#Ggfa z_o;<&YWnyQqip}z6H7c~&%>(bAv@@RcWDa?l6UT$z_C0?oU}#-&x|)0;roj@@iJE{ zQwwamVzI=6J+2|Sog}8DBE?+H=Z_=6q|A+_=L(b$$92CK*k246JpB$LP5}8nS!wWAnamDz1 z)8^N9U@4N1%a5QWl*aHeQY$>rO+Pr!2?x*u0Ne>+MheaU*BvEGfFgpH*6>H*QUGbw M2S3)S)^d*hAFgra+5i9m literal 0 HcmV?d00001