From 5db427c549045523619c93b590e89a86f315e186 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 22 Mar 2021 16:06:15 +0100 Subject: [PATCH] kernel4: compute and output alpha Signed-off-by: Elias Naur --- piet-gpu/shader/kernel4.comp | 20 +++++++++++--------- piet-gpu/shader/kernel4.spv | Bin 36600 -> 36716 bytes 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/piet-gpu/shader/kernel4.comp b/piet-gpu/shader/kernel4.comp index b0c2a60..b7834cf 100644 --- a/piet-gpu/shader/kernel4.comp +++ b/piet-gpu/shader/kernel4.comp @@ -97,12 +97,12 @@ void main() { uvec2 xy_uint = uvec2(gl_LocalInvocationID.x + TILE_WIDTH_PX * gl_WorkGroupID.x, gl_LocalInvocationID.y + TILE_HEIGHT_PX * gl_WorkGroupID.y); vec2 xy = vec2(xy_uint); - vec3 rgb[CHUNK]; + vec4 rgba[CHUNK]; for (uint i = 0; i < CHUNK; i++) { - rgb[i] = vec3(0.5); + rgba[i] = vec4(0.0); #ifdef ENABLE_IMAGE_INDICES if (xy_uint.x < 1024 && xy_uint.y < 1024) { - rgb[i] = imageLoad(images[gl_WorkGroupID.x / 64], ivec2(xy_uint + chunk_offset(i))/4).rgb; + rgba[i] = imageLoad(images[gl_WorkGroupID.x / 64], ivec2(xy_uint + chunk_offset(i))/4); } #endif } @@ -187,7 +187,7 @@ void main() { vec4 fg = unpacksRGB(color.rgba_color); for (uint k = 0; k < CHUNK; k++) { vec4 fg_k = fg * area[k]; - rgb[k] = rgb[k] * (1.0 - fg_k.a) + fg_k.rgb; + rgba[k] = rgba[k] * (1.0 - fg_k.a) + fg_k; } cmd_ref.offset += 4 + CmdColor_size; break; @@ -196,7 +196,7 @@ void main() { vec4 img[CHUNK] = fillImage(xy_uint, fill_img); for (uint k = 0; k < CHUNK; k++) { vec4 fg_k = img[k] * area[k]; - rgb[k] = rgb[k] * (1.0 - fg_k.a) + fg_k.rgb; + rgba[k] = rgba[k] * (1.0 - fg_k.a) + fg_k; } cmd_ref.offset += 4 + CmdImage_size; break; @@ -205,10 +205,11 @@ void main() { gl_LocalInvocationID.x + TILE_WIDTH_PX * gl_LocalInvocationID.y); for (uint k = 0; k < CHUNK; k++) { uvec2 offset = chunk_offset(k); - uint srgb = packsRGB(vec4(rgb[k], 1.0)); + uint srgb = packsRGB(vec4(rgba[k])); float alpha = clamp(abs(area[k]), 0.0, 1.0); write_mem(scratch_alloc, base_ix + 0 + CLIP_STATE_SIZE * (offset.x + offset.y * TILE_WIDTH_PX), srgb); write_mem(scratch_alloc, base_ix + 1 + CLIP_STATE_SIZE * (offset.x + offset.y * TILE_WIDTH_PX), floatBitsToUint(alpha)); + rgba[k] = vec4(0.0); } clip_depth++; cmd_ref.offset += 4; @@ -221,8 +222,9 @@ void main() { uvec2 offset = chunk_offset(k); uint srgb = read_mem(scratch_alloc, base_ix + 0 + CLIP_STATE_SIZE * (offset.x + offset.y * TILE_WIDTH_PX)); uint alpha = read_mem(scratch_alloc, base_ix + 1 + CLIP_STATE_SIZE * (offset.x + offset.y * TILE_WIDTH_PX)); - vec4 rgba = unpacksRGB(srgb); - rgb[k] = mix(rgba.rgb, rgb[k], area[k] * uintBitsToFloat(alpha)); + vec4 bg = unpacksRGB(srgb); + vec4 fg = rgba[k] * area[k] * uintBitsToFloat(alpha); + rgba[k] = bg * (1.0 - fg.a) + fg; } cmd_ref.offset += 4; break; @@ -234,6 +236,6 @@ void main() { } for (uint i = 0; i < CHUNK; i++) { - imageStore(image, ivec2(xy_uint + chunk_offset(i)), vec4(tosRGB(rgb[i]), 1.0)); + imageStore(image, ivec2(xy_uint + chunk_offset(i)), vec4(tosRGB(rgba[i].rgb), rgba[i].a)); } } diff --git a/piet-gpu/shader/kernel4.spv b/piet-gpu/shader/kernel4.spv index 71b31937dda593380e33cdfe00e1252aa3dd9c7d..af7fe183c6b89ca9d5e0c89b172b53b55c6baba7 100644 GIT binary patch literal 36716 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 literal 36600 zcmb822Y_8wxwbdVBtbwzFG>p?fzZ1ULJK{iR~;tFBpFC%!ekOcC-mNXGk`Sd7Nm$$ zZGfOs?1G9QiVcw_aG&R#{U&S9fA7z|TbAp6-|t)BTI*YDm$T>0q;1}nhg8)()%?|b z)r*6w#<55>FG^Ke-?wJuw_h`6l-m3Z~WntQ@FG87*BDPH% z|HE8825HAKYPZG^dU|`N_jFI_?VHkZ#PrU|-4nXI`moQhebngDqjuY&W8BoK9n<=c zn%vbfxx1&UV|;gC*SP-f8C`SY)PCJP<0elZUpfpTQaMJsV;VVma_>0m!OTML(K}(n zw66XNWk|Ikyr=8Pj!ym7n7;m&{HKrY=O5tPPQI#YTKCb6M*IBLV$}V;)5lHfn9?<6 zjcNUT)5rC%)97%W>Fd{#jAMQp@f+>ht3|2jj$wgn8TgTX-ThtvW1QxojJ0G-tfdCT zYO9up&*+@o7~k^XzOK&k|6^F}#$1-V9N%*Aa(t`6r%mo2_sQdHtA-hiV%(Jm#A&Zq zHcpYhHT5;`9ggz9Pv9W-((3wAjJXE&+_4R=)`D+0W&Ga#eZ7Zw?bS5_+E{CKkGZ~s zs^RcCzTm<9PtBvhn@!i3_D!AbTTSYmJfY*r?(zMT?0=DJ1GG6Y{)chbJ7JC+!)j~@ z`*A*=WX<`sRqKQ8b`byD2u!0LyC+X>%)~vb<}r63?bW96+OIJOxku|9)SbiF&T)s2 z@9Uka&mhiPH+bFt6K7BlX2AG2r+vo11vum1su_2?-pRdvPQdZ2dCVREplSr1{u_SU zTn9CezKLTyJH{EIIo9pa;`@n%P0#gc&GksyXRO;Azs~gz&A2;H>73ZuHjY)zqa5o_ zaQbifY12>5qj4dnj%Kdswq3Z|4W722IQERB82c`?&)9bbXY6}4by8>YtmZMd z|3TFlIQ=*Lv^h>Sk4_s?yC3$Uj^8JaGrbn$+{<{4SZ&qb)EVb~&A7WvpEA{9Hu_id zm^;q)>Hs+X>(}s+dw5-L##*>K1YY}m;t=Z&2khB{XrD123~t74ufEufJ7;`yk8*s6 z!s&aT&WX;Uy^?$MBbd`e!ShfiOzxaGje1b^>1sSRZ94Gze=lrvFA((G9Hx79ENwEz zap2|{hgRKnEYHPHocx@Kj-#z&$a7+H37ZqMr;gdYaQ^S38gp_Hb4n4@xjW~^7Wve}WA||K)oN>;qV>V9h|6|Mig=G3GHv%wvm~C)F|Cd;f=!jk%v# z#GExJ=Ah~n@IKs^_U@WEXMd`Bl>75^c-hiwsm&eifOGFm+Gk&%1#a%^LDhxe{@!VOjoNmN z851_#vXP4mv`-uh9$Z}lp3v7jWv++gX|FCupQaOsepgaY@0rS7uHo5uSkmu`+OOI7 z;OaW~9IqJ@Hu65G-?h}x$XeV$tH>g#ja@gCIhpSP(uVmP)Z;2!q(L+Y~s zrw8!1>Up^5mcG9oU~8{lZsD)O%V*2iTkLNP;BD34;oY3{#{L($uk*T+D~ zweSz%`1?rJ@c+2QJ`c&5+rF)8hc~a+ZPie4`dtiM_PgYOcJ0;DE&MZ0|2h3G*J58` z0B@^Sf~ViL!RdEBaM|yM1KPD$8xP=Z)n@R-*&3WU+k(qDI}B*oUX5zuJ2(C3jDNQl z`yK;$TQvrremlYGw+meMJ83|>_Uf>m;>-k>agG_#uDv>L0B@^Kgg4_1 zu1*7U&+X{!8Q(GYe%xN2HK0v#{DBt!Pz!&&g+JNC zpK0OG4&ZIoPvObmOW-npzZl@#Uj3?t|EB3bXZ>GkvH!k>zuNTQAm`biTI_#r;cqtm zH;n&3TI_GN@VA@(8^!o@do}L>-c}8QH}^|>wE}qD^nNb% z&1=Rg@UdN!dwpK;8nh<7b8N4#AR2s&7XJ|~{@b?rkJi8Wai-CJZ+JPjjsd)_IuhQz zzqC~+fTwezbsVz>__bGO!Y54ZXxz56pKCim%rG(er7ix~z~|oM+N;~){eI?U(|8Z{ zozBF`9sBq89X_hBcly+ww{OPzD*DLc9g5teeE#?v+IGD?6S^lh?>lmjo{p}`T~oSx z`Wch=DRq_#eQIa_q-kBaqYi24Hfem!=JiyE18cNt+I$|F)YUz4QvY0I;+G3U8~hCa^*OoN zcDgSkyx*#Mj3YRC8%{5t!2 zJ5|PguBF{iTKF&EGmq++-rdvB$mVOj=VM>&);q3q^3FXosQSBmd)yt(dA!l^Z{jz> z*}Lz6eMECELs`JNa~V`E3m-SRdnzv_r#9cKa8E?@^OXK85AbiVR&C*%!+Fx;g->&j zZqZ`@`~coojes9sk9TMA_{O>aiu54LmGW`A^dr(-z~Ja_Ev)gdkXi!Hok z03TG1g*V=1^5C7Eb)hxK(_T#hkDuD><*3nLKYVU~ZPn56{(9_J6zyh%J9%xEc3*@0 zEE@iG_}n<{)qMkaTlD}uIe8YG`93$muf6(d3xA=7zc_%mRX>MkZm)o+9M$0?Z)0x1 zAK=?wy$+w&-`SV>y$SE?8Q<{zC-_KSuy`T%e3_RMJ$?&jAv2dKsR+Uk7vlsrzoP+PL73?VMKMPui-*;PL$|xV&F1 z3omoG0(|c0x%O)H7Wt`JH?PUuQ^Y*_kcEKW^ zb5&co&`4iHTfETBpMH)v@qE@$^XD$n%#+%Rh34~x+A0mLea>@4V&%C)9}n}a*4DsW z^T8`MEX_R2&7<=+@BR$W+eKEvqQzQs!r-?^_y z@mLY=ye;a>8EDD>rxM=*oWJ=&TP>i=JwZ7`c+l*Sxc(yg3KU+z>t-;1q)8@}pwApqWYPoIo)4l_B+U^Lpt=dxb zJ&M|X&8K78iCSNEez@1#DIVtaknCQv7@(GEu&PAUDS!ZYspO-CEi z;&(JWxryHiXc@Pf<35Et<31JaxYf-6Y1HPcng79!ceiTM^>gfJP@hh5oW`*2xzx7x zJao^VM{R8NVes>7tgioM)cUtmv|moGW*ggIU1K%v*HAldb=%LbxntFSJ+)fe-&A8Y z!RShrB-qbv)*mD;}4oa1fOYR0jxZ8o94o8qx1GaX9(4a#!hN2!guJZ&GV zv0UB$AE$P#+P19u6SbDuPu5)j@7LHE8ShWP9^oH?=b`A|25|1fYrA6|f)@MywcVWS zKdk2NLHX)6x1D^`n!C?3zJ1UZuI-1^_E9yTTyyuT?N6w=`!C}?AMN9h=khDyu7B*W z!Ochw;Kpyq(fOWU^95>tTJ7&VmPE6?`(-(>>y`bveC@ApeDg94yzKDZ zw_KZ*bl9`Y@!JvYsw?syj5+>rVK z2XbTW-1}!k^mAR#(ZHeRK9~C(<)Qt88pr=?xa;V-<~rR0ch6^??u6U7y7A;bd#M@k z?i$<1>zmJEO}t>^`Ab|D?f+e|t{sq{jGFm#e|;NbY`OI#8rjgc zf4ug!uZ-L09>*R3-@rYey#BlmcF)~HvHic{=0!d0^&XgG&VG6yu9lLx^OL-7aFjdF z#o?Z3_A?6XdZwS9;P#`Qes%?~ad^)jiFW{eX?)h^>^qIR7hd*hypzy86653sKXF82 z+zIzNHujYn(8HUawz0W!Pxy@I;a+sDea>@?UL(BDZ9?D3jd@Tt_Q$&@HZz8ExE%*; zx%VdDZnz`EDzAx$m^Xt$$MRo8Z3FihTj_8wFQ?v*50` z@2=u+?fa{e`~IrrzPk!{JifmQcl^G;3itlt`>SyMeSa0MzwfWYt$lwL?mqDyR`{vd zeUBCH_1O1U;nu#xD!K2l!tLL8SmDO=9agyc@*P&VwePROwfhb$+}d|o;ok3jhZSz^ zd#rHhGrQp44}F&vyW{g+R=D}`T~@fY@3O+3zwfict$n9ea^Go%8{c8#KNt8Cl+pd z--(60-o6tHxAvV_$$bwNejaw;gULs7SM&M*Cich^)IP^=#XZeujGNKaZ^y^y*;~MB zel~cAyW(wNkN5G{b}L2Ad!_h8oiYX!BHx@m8S4e`n$*V8rjO4y>WTRxxHaZWXzE$BpMlkGAy(S`9G-T@mFuV7 zz4j}L&%xzh_;szv=eO|I{qi!Jde;9Hu+Pux8PD&)#?qEpzX#i2xwroSSC7xDVEZe5 z{s>o3f3JbuS*|*-=U~GHu?J$?e6XWfSpshrXRx9)Bi_cwMQskr~J>uv1t34qUKn{i9HXR zvCFlY7fn5}+rVnZHXn&&{Wc?X{_SAkLQE8 z?$J-7sh>t(ycRA1R`c_i^SOX_3xdz3)@JOpz@G-I%V*PWA+U2!-wVU-+uZw^K)yNg z^j!peBelBwQf*PNF|-{^%u#5Ifz{oo@+H82F0`CpYfFOl)8J6v|QEy1?{@#e% z^M7M%bF>MyKTp||+Hn{s`P&kl{Q0?4p8RbEPX7E1DmQ<_iM2JjhuSvU%+==BH6B5o z_1*?-zt*nzw$$5EJj}=TwcR@T*a2*eTuXKYtKC8yb1NT7F_y8#X}b&9ww~KQAMXa< znWFAE<-1bs+i}?5I_-A{+dlhz53pMHxi&T1XKs!o*Tykmb5Y*+_k^qaOmPZx*bA)Y zct%spjkh>m@zB0cZMRN;2Z4=I_IEH`-S`Jm%f)`yKY)^FjxT_H|D%sK zeZEMoZay6Ap!6m~{&Z}e;IpZ1qfMXvsns3d0&LuIV6{9idw(4dSJ!_mwOrgq zoqaO_Y%Z+L#U$!(iif#4thQTc?G6VUBl~7DSS|ZTK9OQ9V~cI;n0mn8>t``;`Bb=C zFC}w10_L=Ijrh#p%?wqDjt7VMS!H!W|KeasfjTzt@iK(7vkt4zC8Rtx} zF*DAiz-s!XKehND12)Iu$AWEt3FGx0;c;Mn)Z=qJxNLJm&C}*YxIXG<)Ny8kjiqft zt~|y*1?)A;pOI=miE=W{#^6crO4u zUgza}<@&pKyQ$rO)|u~xVCSFf&P8CgTz9mo**@on``G?YrT>e;?#(6H!^ZU7y#%gq z|DMBg+j~v1e{0)&zqk~vPxiKJav5AbpKC7%t9g!k9hUD+*_UEGYx}x_I_L3~wawb| z_-g8FC?1aG+S+cNTwDh>M$Y3efz@&z%dess%YMaadp+2;S%(|In^SWAaoui&tIuNY z@-Ktc-m7!x+;4)Hac+jYp6d2xyIa8O?j8B9U}LH09Jmdfb3l8}fsF4fXtODf+uX@* zV{Xio^Rv$UZU;NA?2|jdYS|~+)NG&Jo2RVvU10C)Mt8-9D|;=Xb&OnYH;ISS{95=LKqY^Win^C9v_ey+|$3^T^M@K9AT&n?BD{tBZe5oxSr5 zuyeC^Zoi`bHO0fZ{ie2CXDxmUHb(Z&%V4$a9r-UQ#xl0pwmv8P4(#(qV*LSbEXVbG zYI&XmUIpJs8}&Q~{1L1^i@j&O*TBY9H^wW}YOaINU4H^Q_pG~Z-hiuTOn(O3F898_ zfb~%~=IhjI@&7AWEq(kAY#-VG_VIVPddB$=uppgP&X%uhEYAeR!_X#<87#j`yF`+B239z-sOz z^Wu2_16PmFhqX^R-jC4KzsY!q(&l5Z?bQ9;H%~hvhxb)&R1M92B+eSNf$cwiwZmKU zHwaBVa~=#sXdRQ;*M* z;MTD$g{B^#rNNG+%+)e*^^D~+;EcsSjG<3*`B|{z)z7^7^FFoou^d>fobU2*_4uq% z`;_BY5v`%u&#J@Vj>BhF+iTBr>`H}AzsC8&y1KVlfou1>0glg~KdPng)xfReTOCb3 zK5NuI<@nY_Yv}d(J_mPvYfx;j-TwUfrna1GYlGD?_I1FSmo~?4JAV$UE$!9?tEJs~ z;Pj`>>xAw6d8xLv+W_pG({4j>+G$HWf3B)6?KTG6U-%|qeZn`b`KfiDH-qb=9-qy@ zjwgJJny1Z{aDCMC4ElMnv9!f+E3nVD+Gf@LZ4Gve+7f>R*tsUwHemhK<1-R${=>Hg zmu!Y5}hTDUUrOh1sGiNnp3}(G|0DCV?%pKwSWdDo;w_bC1LQ{{=&b3du$96$e z&wO?T+fF^X*$r%e+7fGb@NCB8xH6_a!0O50Xt0{?({2nn?VP7vKc6S&q4rvCoq6vG zcHX)E?gh{Fw>;nXM%R|lqx*o}gXT_K`rjAq{k+VAh5dUSFUXb!ySj8@3ng_XishrL36D7rT;I0&5?6Y|6c^Fr>_pMn(fo>P;lCr zTe*Jb*5@{JYn|M7Vl%gSZXOF)%X70fHQVP|(C0S$^YipLZ04!_JUt#w-Tp^oliS{B zV*9tYy`QJMu<4WMFV|`UntDD@PXw#E*53E!K5IWy$FsJtNwtrCb%X88+UM58sV7rB zv`?w+*2zT=*ckUPHlICu!D@MKl^;eima)ZYI~8o(@FQxTb?Jkf6*Shy4ecU^VI|FW9`!@%2{hg!pb)422*O6eynf0CtR?B*8Q!8`me6wCh zf%Ew`F^@)5Pt0S$YIoM-be)fdr=8=J>t{ck;paHlr`C2nx@)cN1h6)1*Krp0NfZz5 zC)alCjOP@vF|v-Qg4ME)@)Ie>GPXEvPXpUF`8^$Me$^eD-2B_Oa5*mVDn?`+Fe0?CB?&WT~*ty zGuNxZ#>m=T16Ir0$uFlE%h=+yy%ucStlf2B$Chi0=iHaz>hYNko=skC>-gpRI6lW} zAJ*yPda!+DEp7m-Wqq}&**^1ktXZcU!C9xo{4$z)V%`K+bIxgZGd%4ar(C~seK#!D z_bb@4zPEwp_UHQE0nYl~4wk#VBe2~Go=I&RZT595wR*;K4_GaE^_qPzTwVXWspWo7 z_vf%*1z$<6uKg}*HSyP|vtParHs99nm;0!{N%3%=_t$po|IBqwahjqE<`HN5RGnf2`*A z;rA0Bhx_wpb$!l7djhPUaXbk&uD?@|aeNo9o@bHoi5aW9V>8b8!N$^NJIDJ2u(9&< z@E?NJEFRu}7*69E!x&GY8%Mv4`Dw6Yc5cpDuAghnOmUHF>u-yJUXMP6G zIr9=&?m4p)wx5HKqqdDU`+A;Q-S)Gw{R-^&BDDPyEZ1iH-+=Yk_G@anv2VrpTksv! zw$Y}~FR0bUFH`6Ic?E3ltv!E!PyGjqhjV_lwp%BUe*_yN=g(_kwVXfl-%*TZY;oHD z32a-}$?q7x0d{Qa`nccz3|3E@zkt)mcPVeeXR`+C`go506|A0f>~CP>s5|G^snrtm z?_gtw|D)#Fum6O*U)A+-U%v%b*T-@E3*3lXoMUgJsplN~x0tc2=Nx+nY%FcYcFymD zjg@okJ+PX^qxBqnAKf_mWy~L_F=prHoaOqtj;^U|VVybu2W$>b^&Gy+R zuBrWbj(r5qxssS4qp2q*u9aH(TsIF|+Br_Se&so~F*!>=?bx1WUgf=G5Ssd9H1u9F z7_9arIAa+CUzRxePTPENHNV#u?Ne}dHT(0sPV>WCzq7XhntJB7AlSC*Y4>Sx>v!)K zLQ_wFL&5f?o>&Wmji)Vsi-2Ea(Y3{IQLyvWX5Re%vzplNKIfcX9PCZRRYON8D=g=XI^K3OV+v~60bJKD8 z-EVD<+x@f#_&REJ?S5BWE#v+iIOFzOuoiqavDEc(oNI&C^I2^ju;b%&XxQ>ue|W9? zSzn)g*0*23gRVXOt_ybEvnSRAtGV{((DQPAxOrAfyA9y#@!7EU$@>iFyb+pu_Ta`~ zHTP@!+XQYbZSmU_>|WItzsz3m!y;yeBk@G>{sz}1{%<~V?NjDvdo=aTc?YmsnVTKq z#?ltQQDAeUExFkV?AWw9XZOm^VAtC3FFKc9z-r0eZs6o@SFqgt>`rYw@gCH+ORh$P z&6WQ8Y4`m1THrZsot%#WyPq@0J;7?Z7id$neXcKF3(|fsu-DqO-y5!$_S)2v<9)!n z2PDS6XzGcvA6TvY%(_23?VPh*zw+L(34JBzf!OT(B+d=%C?yntJju4s2WXv>Oj@z1MW1 zsi(gQVEa-}tchUbX^Y<^uzOTn{JO!;Q=55iqgE3iMxA@j;b8ZYwfCAS)IAgr*QB?$ zTPIgj!N$nF<_NG_?ltns6k{1%oVNX7+d7VE)biYGrh{*!Uv=$$)M{yaB-nXmjx)h( z<+bxDxb4bo=h1NW?2%(?pYr-}ESh?9dK_4-ygnQcH!VGd8Pw{@!)f3$52wS`%IoAA@YXz>iKd=BoK^dj zc{m$QJ@Y#UtXAgXT)45c#qT_@dC-jkZgv<$3>bIoS6P>e?@%R!iF}!0to2&+k`)^~v-5RbVxX2UBAw&uxD- zy6w%S&pp?GeeO{=rq4asg4NUKb>Ot|nd3|F*<9Py_3=J38?2r-*Mpt6_Z96ofEyb9 z%5Q|*MtuxB$bP>JR!{LcMg1l;=i$$OouA{=H*>fd>>SLEIg{JQ>wwn;&t>b3?G~`} z$$H-kR?D?no0{!&o$;EG{dXHU_kzUy3YvOi-VRnP?;&@<)6Q|q^(*foo7VRb&%L{` ziJkaoGgKLoa|wb%EDslQF} zuEw-({8}c~#v6|1Ok0-$8?}mIAZfwW-B(*%( z|L=isq>Z}kZ~O0qjiD{S8}b9NddB-hurafbp9Z^+)%9`jKLb{8tPi!^ezpAwd?EEy z)cNf3ELhzm+H3wMKVyKBN2u&G!0h_cO{k#$j$8yLNN$I+#D}%;l$G=aT*Z zJXkH~lr}ZnXKh^ve@}8Vihp;&J@0qLJQ}~>K(75fffQHP)UwzvHTwKEDgL&+zYoomYOp z^#|Z5C{I%Kb!=+-m3zTw3h$#HpQR*s{!KNpIarS3SXQ7;zWm$f+LEuQTln)e&)Po) zH>TsTtvq9Y25cYNj3ZC}egrmuw$YaSJqy-m{(emDVgA&gqo_G%vHQjAom@Trz5ur0 zSh zS)JlMj3*ZxOMmC&-v2Yj{jZO<^(LANW9<{>+KoSms0j^fxcu{`AqNk2zIOe}lk|AvqfiH;>sPa(&`I zAJ`aqHvbe{&GtUuFF{`(B!?iv4mhH&epTe$x|L+twd?=ys3`|mS^4+F1M^W)w0JNvs!YxI9M%vYzeShxyP1*n+tR5oaAEXqkq>{jI2t{`AqNk2zIOe=CC>LvpqX*gR&B$@PiZ7A7eBWt`h^|loE*!I-fV`~#5 zd%)U%izD1Uvthy2{kJ$`_ix;6R`bk%9k~6JduBMAdiKn^V72TS$Do!Rtq)eqp4kAb zR_>XN;3MhB963h0*zxI~HQWU38tS7>ALpo^{x%1zWe!__ombXSu8;oadCS`F8Z+io~ zlK3~n$J9LY9RYV-<(h4Srk*t$30BLRIcBxwa67PC)@*yQTDfLB!p((i;GE=Q=c9kt zY$vd5rjIs#%!zvX+eMv{{&oecmFM~HYIT3+L~bnep?~@t4YoghwCQ6`)zjaeV8@W0 z?FBZE*&}j&;=ec87*DV-d~VqnthNs&=l*_R^~dq?TChJ@O`pU$0BoGJIS{OtHV1*# zY%_*9qlj}b*jU;euYW7^3zWvXQ#(Joe)i+O{bFr*Pm6P18G~&fipQRm?CHH~JeqoM zihFur>g?%GVr0)*cNN?{I;r5=4=ea&@RXV--(%tSQ|{4mXzJOcxtsu2 z%buACRx9^tH{7|IBgZHgJ3jrhXATFuXY|pgk8@N{e?4HeJWuq3)tuA()Ke+WGkZv` zkL}I-5w+bl5ob*fz;+15<3LK*E;hdY$=SJJbEc0r zeH^2Da&{hA?R)H7uVoj2)y}8H=R&YP8Pi2zwOp4DrQOAF+iEkP^5oNJn{JB71WNKb zvBu_e62*KTMr}UL-_^uOK7Ee9w&uy-WpLY-`MVrVJ$vp-u-X+A-~Voe|5af1Wmzr(A4*`Z`bN@Kvz)KYg@0PqoZ*1h$zJkLi@mb4HDw=aCfWc@%Z#`2aC8 z&#loPs(I%54Y=*fdESSno_T%~td@Chh5!9<_001@uw!v<_9++JpT5r1IeZK3=LdbX zIZw6B(`SU^C>}>sGS6db>^zU9IM3s$Gtb9~k$LWj{$$NF&+ou(SI+YhH1*8$QLtL( zxdZ->!PPU*C%}%yx!I>&Y=8PXPv`Jmu+QlFXmg%wnWxwMlPDf1P%_UGYwSE{QJm+= z)S2fq#K=7NM}M~FndcASwkzlPLp1fw^C_@e=D8pKPs7zS&mVzLM0alXDHq$HzRuG* zJO}m}K_6|-Q!Vp69oyLyk25Hl=b1G=mHI4-^E`*zc{;zJ5+n1peyQLK!GBS3?Z0Z_ zzbUx>uM}MW-?#8r3$Fj43aBe?AEb-3DVwaKU+!JzRxgYdTe}4hnpFZ03aZjnIzrTXZ{{9YE`&;c} zfByuhKlhZ}SZ`75pZ@*@wm*He>EoVMPk;Xgm;Jp1SM$8r$Nt^}r$6_k+*s~M{nOtE zVEfZYn?CMo_4M~4xa{v^xY|dxkNwTVK23k_X}Pi7&-$moHn{!iqfH;r3H9_h80;R( z=bj;OwbmD^t`~qBut5sl|VFu>Ss@tnJr;uSQYV-~QC% zzcyHZe{WL%b>XC_@v~oT!zqci9(XN^K7PMn{|&+F8&Hhz_|+1BBd~pjZw%H)?tC_( zIEUM~IvQ`&TGP+A=31@H^(FXul)1hbZmut-POi70U7707i9l+}5Icu^LIBTMP6vg|RpOHDrIV@p3O(2m1kV^?YaLK(K8+q8(Ig_80BoTGKV( zzdrrI`0GQRn*6K|AxFd>jhbFZt+%t64nCeArfd z@-Y_dbxb|^7zZ|9nUC>k>X~O3*tQi3H@G>k z<~}(Lu4ZZ7C+;zGcsMru-;|=ic~(oFXQSUp@wlFn{e1)2Jb#%w`?rU7>SuE98oL*+ z<}*^h!#NeMeoN8r2>1=~{Egr~xLVn68eHAy5$}()@$ZKlPn+YGXWX}9zk}j&8^v+o zME#W--%Ncw#W~zb?Ot(@97&9vqleJf2?bZ5RdDy)nFaS=b!ow`247Qi*UQ*G5Bt5U znPB_2_B(S&Qy)X|(0*)fw@!YK0~_NW=06m_