From 460235ebd7c3e0cc220b98475e8f8988cab4388a Mon Sep 17 00:00:00 2001 From: shannonbux <32467162+shannonbux@users.noreply.github.com> Date: Thu, 3 May 2018 20:53:50 -0600 Subject: [PATCH] Image Tutorial (#5236) * Image Tutorial Would be nice to add a screenshot of the finished result. Eventually, a really cool image tutorial could include GIFs. * Remove unneeded backticks around code * Add example gif * Fix image links * added Gatsbygram link, fixed assumption spelling * we --> you * Added some more edits of my own wasn't sure whether you wanted lines 153-155 to stay the same * Changed back to previous lines 149-159 I accidentally deleted necessary stuff in my previous commit, so I'm just starting over * Edited comments per Mike's suggestions * Small tweaks --- docs/docs/image-tutorial.md | 269 ++++++++++++++++++ docs/docs/images/network.png | Bin 0 -> 316382 bytes docs/docs/images/slow-3g.png | Bin 0 -> 340413 bytes docs/docs/images/wordpress-image-tutorial.gif | Bin 0 -> 2861896 bytes 4 files changed, 269 insertions(+) create mode 100644 docs/docs/image-tutorial.md create mode 100644 docs/docs/images/network.png create mode 100644 docs/docs/images/slow-3g.png create mode 100644 docs/docs/images/wordpress-image-tutorial.gif diff --git a/docs/docs/image-tutorial.md b/docs/docs/image-tutorial.md new file mode 100644 index 0000000000000..a99e9eb3e09f9 --- /dev/null +++ b/docs/docs/image-tutorial.md @@ -0,0 +1,269 @@ +## The Gatsby Way™ of rendering images + +Using images pulled from a WordPress demo CMS + +### What this tutorial covers: + +In this tutorial, you will install the several image plugins and components in order to pull image data from a WordPress account into your Gatsby site and render that data. This [Gatsby + Wordpress demo site]{https://using-wordpress.gatsbyjs.org/sample-post-1) shows you a sample of what you’re going to be building in this tutorial, although in this tutorial you’ll just focus on adding images. + +### Why go through this tutorial? + +Images are one of the most beautiful and striking ways to communicate to people, and are a key part of creating an effective and positive user experience; at the same time, high quality images can load slowly and cause text boxes to jump around, both of which make it difficult for people to be patient with visiting your website. + +The Gatsby Way™ of creating images is a phrase we made up to describe a set of best practices that help you optimize performance and responsiveness of images. This [Gatsbygram site](https://gatsbygram.gatsbyjs.org/) (an Instagram feed fed through Gatsby) shows off the svg image tracing effect. Here’s an [image processing demo site](https://image-processing.gatsbyjs.org/) exploring how to have fun with images in your Gatsby site. + +### Installing the `gatsby-source-wordpress` plugin + +First you’ll need to install the `gatsby-source-wordpress` plugin that has images ready for you to pull into your site. + +Create a new Gatsby project and change directories into the new project you just created: +```shell +gatsby new images-tutorial-site +cd images-tutorial-site +``` + +Install the `gatsby-source-wordpress` plugin. For extra reading on the plugin’s features and examples of GraphQL queries not included in this tutorial, see the [`gatsby-source-wordpress` plugin’s READme file](https://www.gatsbyjs.org/packages/gatsby-source-wordpress/?=wordpress). + +```shell +npm install --save gatsby-source-wordpress +``` + +Add the `gatsby-source-wordpress` plugin to `gatsby-config.js` using the following code, which you can also find in the [demo site’s source code](https://github.com/gatsbyjs/gatsby/blob/master/examples/using-wordpress/gatsby-config.js). + +```javascript{32-58} + module.exports = { + siteMetadata: { + title: 'Gatsby Wordpress Tutorial', + }, + plugins: [ + // https://public-api.wordpress.com/wp/v2/sites/gatsbyjsexamplewordpress.wordpress.com/pages/ + /* + * Gatsby's data processing layer begins with “source” + * plugins. Here the site sources its data from Wordpress. + */ + { + resolve: `gatsby-source-wordpress`, + options: { + /* + * The base URL of the Wordpress site without the trailingslash and the protocol. This is required. + * Example : 'gatsbyjswpexample.wordpress.com' or 'www.example-site.com' + */ + baseUrl: `dev-gatbsyjswp.pantheonsite.io`, + // The protocol. This can be http or https. + protocol: `http`, + // Indicates whether the site is hosted on wordpress.com. + // If false, then the assumption is made that the site is self hosted. + // If true, then the plugin will source its content on wordpress.com using the JSON REST API V2. + // If your site is hosted on wordpress.org, then set this to false. + hostingWPCOM: false, + // If useACF is true, then the source plugin will try to import the Wordpress ACF Plugin contents. + // This feature is untested for sites hosted on Wordpress.com + useACF: true, + }, + }, + ], +} +``` + +### Installing plugins to help with images +Now you’ll configure gatsby-source-filesystem to load the image directory, add a GraphQL query to a page, add an image to the page, and then view the result in the browser. +First, you’ll need to install a few plugins and their dependencies: + +```shell +npm install --save gatsby-transformer-sharp gatsby-plugin-sharp gatsby-image gatsby-source-filesystem +``` + +Place these plugins in your `gatsby-config.js` like this: + +```javascript{112-121} +module.exports = { + siteMetadata: { + title: 'Gatsby Wordpress Tutorial', + }, + plugins: [ + // https://public-api.wordpress.com/wp/v2/sites/gatsbyjsexamplewordpress.wordpress.com/pages/ + /* + * Gatsby's data processing layer begins with “source” + * plugins. Here the site sources its data from Wordpress. + */ + { + resolve: `gatsby-source-wordpress`, + options: { + /* + * The base URL of the Wordpress site without the trailing slash and the protocol. This is required. + * Example : 'gatsbyjswpexample.wordpress.com' or 'www.example-site.com' + */ + baseUrl: `dev-gatbsyjswp.pantheonsite.io`, + // The protocol. This can be http or https. + protocol: `http`, + // Indicates whether the site is hosted on wordpress.com. + // If false, then the asumption is made that the site is self hosted. + // If true, then the plugin will source its content on wordpress.com using the JSON REST API V2. + // If your site is hosted on wordpress.org, then set this to false. + hostingWPCOM: false, + // If useACF is true, then the source plugin will try to import the Wordpress ACF Plugin contents. + // This feature is untested for sites hosted on Wordpress.com + useACF: true, + }, + }, + 'gatsby-plugin-react-helmet', + 'gatsby-transformer-sharp', + 'gatsby-plugin-sharp', + { + resolve: `gatsby-source-filesystem`, + options: { + name: `images`, + path: `${__dirname}/src/images/`, + }, + }, + ], +} +``` + +### Creating GraphQL queries that pull in images from WordPress + +Now you are ready to create a GraphQL query to pull in some images from the WordPress site. + +Run: + +```shell +gatsby develop +``` + +Open localhost:8000 and localhost:8000/__graphql. + +Here’s an example of creating specific widths and heights for images: + +```jsx +{ + allWordpressPost { + edges { + node { + childWordPressAcfPostPhoto { + photo { + localFile { + childImageSharp { + # Try editing the "width" and "height" values. + resolutions(width: 200, height: 200) { + # In the GraphQL explorer, use field names + # like "src". In your site's code, remove them + # and use the fragments provided by Gatsby. + src + + # This fragment won't work in the GraphQL + # explorer, but you can use it in your site. + # ...GatsbyImageSharpResolutions_withWebp + } + } + } + } + } + } + } + } +} +``` + + +Here’s an example query for generating different sizes of an image: + +```jsx +{ + allWordpressPost { + edges { + node { + childWordPressAcfPostPhoto { + photo { + localFile { + childImageSharp { + # Try editing the "maxWidth" value to generate resized images. + sizes(maxWidth: 500) { + # In the GraphQL explorer, use field names + # like "src". In your site's code, remove them + # and use the fragments provided by Gatsby. + src + + # This fragment won't work in the GraphQL + # explorer, but you can use it in your site + # ...GatsbyImageSharpSizes_withWebp + } + } + } + } + } + } + } + } +} +``` + +In either case, you can add traced SVG support by adding `_tracedSVG` to the end of each fragment. _Note this won’t work in the GraphQL explorer._ + +### Rendering the images to `index.js` + +Here is what your `index.js` should look like with the query added: + +```jsx +import React from 'react' +import Link from 'gatsby-link' +import Img from 'gatsby-image' + +const IndexPage = ({ data }) => { + const imagesResolutions = data.allWordpressPost.edges.map( + edge => + edge.node.childWordPressAcfPostPhoto.photo.localFile.childImageSharp + .resolutions + ) + return ( +
Welcome to your new Gatsby site.
+Now go build something great.
+ {imagesResolutions.map(imageRes => ( + + ))} + Go to page 2 +@Xh>_fG?2fB7UjIH0=wl4RZ= zR|J!;{==NvWm`rXl4wzOH@Xd2^en@2XSvIYnRp>>6c)ujRReWb=cUz)ByU5j#CMi;tpwL~)a=0R0T=pJJJvHs(4@BfR@yIKFr zT0s|nM&T|W(brPI^-%k|OcL|i7JwskwH=4JFB{7i-lM~1YVK*6xRs>f-oH4>z=hK- zV);AR82xXsfk$cVh@6u4v+->*HZvz9Vqap&whW>lPKr93=N?6>`BQy~2gD6izSZq7 zkh*%8v8^Y3{9j7AUs*Jt_&piSCCJ?0xp_4~)JRcY{AMwfx~hzl5$x&|2x1SJL*V9f zAthE)3{j#CcNkcEo2 ~t|%$4;WghAL>NZYKUObAy^n$uf17!nr*s%1&zrfs!#(5KP2Q5$ zSOSmqG^JZQ?ZwZKrnod74h$wp&DJ<6yYRylk6@LgoGe^5)qFtK>fv@|HePK(nSg)C zh*Hw0)@8ii_55aei&*@3R=#N4q#E*;*_!e%1%IXA91);ZJ|&<1B3bN8=4zus?m#ml zk>^5@0}b{bzI^69WT|1RE$7sqv$~cM2V?$5BoWV?-JrI!I&K_#nvbCrFPb)$GSKD^ z0268_8LuFey=b~Qf$MV$_0vwqD)MsF3m2hnEjC|eSL|RB;mDG2yoUQBGl+geRBfNN zww^QfW>>B>>-Dl_%rF-wM^TisNy_`KxGF68Q?=Zo^)B60+X|lJr+Z@kov%73o1+fW zb`O6++D&k^5~xGJdD=b265#t-Ar}xNq9!K3@{^@}_0q~fi%h~3UeqRZWwVK>2Ypp# zRWU6$s*5oOmOpel=`w~_L}U~KDSS*5_LF|UP8K>Tkf;eN2=8-%u74(Q^+25Jq&9q2 zr^70I|5DB^Yxm?d-y8AWDNdg<4q4IMJhrEADOz}f9S@?vQs850A2d6N9}#9^un-`K z!(4Yy{;X%x{7(J@_}-TD=xXx?-&wD&xZ92 WaIv5i7+{-tJbj_YKlobve%M z&CI0fS@=!^xxq<;^5yhCyZVr}Zm0zvLPB-U<0LG<&O|EX0}7S~EnVYtsw!(u_2&Yb zZK1z@$d+ipE>==~uoaoT@=&Sr*~nV$W}Ng>)G@hW(e9`AiiKX}_{q~TPY!M>ZqqLY z_!ngIdaTSytga#_4`ZU;FAH(g{m0NPc=alUN4`Fsi9?^aE!|h)e#BqJYbQ`K_Gmtw zby{<{eN^R-Ij#S4zhmvru 7J7ftBn#>QKDz=|k;@fXdze zq4werC8Vl`DIO4_Rk>VLI}fpg@gE*ib4Ov4RuNc8C9Xz9ROE>#iBb_KL{`l7pPbkT zg;Y)W!dctKn3pa0(;T3OYB!Stru-h$Nx@C|Q5%WHkM55z2iyD2lGRJwe K< ik+OB3j?Z+h$bf|-^s~I8W_;@Mv?``#o@bldUhyr0k-J2&<32qvd9203s|X) zxp6i >&TFGVZ>njP z*&lE$n9Qf9b!cO_YF9MfsYf?8#MET~%>-2Gc0H7>Pw5*`voF Nd_)r|O_i?#WaR zRUkiO-Aphzd6s-RdAdx>9)vnh$g*gzsYLo3j{uzCc%)Lc@9u=-5-zOtRHA&Q0=_Z* zypXBC`n8Ep?hCV1!?;C~o>Qw>^>PhM&2o+zHFOw*6#2L3TJ6y8^QK hwT^TPM^&4nK*#4tyhgpQ z8JuMbcZaHi!gS0X)m|akM+P`+t+`Q*r5#qqjASyqyM& CJ_MT9<+)FPK0~tz*e8MU8xo7Vvkf=-a_O zY|5wt(Ydj)FlD!Sy}nnmsA-f0KgK@_iH70CXP9zGfzM|h^dzUeZ*C{Mi8vg0t@ox6 zO*{muqfN5;nyAhw=MAVx1uT@hb8OY#JJ;AQ305DKB6=m5NVVfzW|6IbLEZsxJ{=uM zxbAOuOb$60Jd#tsVvc`k$7Ooc9b=L*i1jVC>5V+>!oTM*;{qqXYJ_*IQW}2%<(WLi zk4gJENAoM8Xv-Tq)hI9(+od|mM7OX-l{R$TaU@40SgY>G;J6y5;nCdDk0SYt5dF*e zQu@)_>(+||Jr6dM$K`j{V-NNsBKBAL5QbwPd*+8NS}m|%^WtdI?!93#OL)Fc)qOx$ z4LHb4`{T_F7uB1L=KHD`<%SA!$KGbi;;C9=*g=g)pV{C_18Oi88b)v$kDgs3eA2yn z;CNKvD%ZYNaD4Nit3jV$9KY1fXgY>k BlgVaT)q4V326 zKb}AWw` _zdHS!O+quc_;+b8O d#I6jAl4GoZRB{ zbht1yNGc7jGpm` E@mWMH4x0B&{X+4Ql24+4|_EX=-`IXiPM;OSO-h4!F`WU7}@_EcLF!Iv^#1Blyz zDa}yZ8^_PSkpir%Ev@}roe#=q`H7hg>{Q8BpLJ!%Ia==7<`pkYv+apk_g?h^QCd9y zCcP3gKKJ5oE6yX9-hextw-4z;_D@iJtH}hG*jaW8n?Iqk3*F!nzeWmgb7y+1{Vh!8 zB3P-`hZ8fn$G7PtiYGNMCY*j(Tl}j+15L4?Bk*wx0(du#$yHtk7*Uh$kv4OV1tpo! zmBax8)~l~pm5^9ywpl;Xa q^x9q6_z?f6WB_l?sSBu^y}K?F`Dp1PT+jmc<>@U%VF1mW8+ z-BGPwerA5sPagWMYiMtvRYsAqZ@j%7LB D{_<0TM8+Gt7@?y(q-0qh*Kxvst+|3I=1if&?ko%Ef-a+=YRflsqGd?kng?9 zv!He9ri{x0H32l2NrcLYaE|V+c@)(AE&{y>z|Tzg)yr(%v#D2;_w6gn_$&9=cXu?{ zn^ZiOoAC)A< h^4E865#}b{Hhh`Ew%(}5@C9mbLl#J z;nikng}6=Sd8_k}SPLZ1@f-6OUWx9pTl!Pe=n+2MCnBw1 TkGnHtcJjQPBF;6KA5RZe@O-W+ z$8xnA(Ib+BOdRv6Wp2guA2g%yA6qbCPs967Jur?~x>7?|Tc&Q6%Um;*UO()#2HZb> zs(W^zkbjwPWFhsj(ffn&3i_6ip&M(aR>VQcgDW#3NV1CG
cP5U!S9uf7VdGOUc0qui@dY*)_>!6zD`7U@71A&7F zq$CILvYO>S`)l5hGk0OmaxGRsoe(*Jc#Xp{MxP-6cfCo&Z?0N8d|EknYNv{o5#q)O zjHDH=FijiTH=e-+TWNE@!5lK)Hq%>gQ$ebXZ6gE&{%<0hu+8PZ$n&g>N)k&*%>!H& zY2OPC-Orzkjqmz7SqnNj<|q7$2TdX}7}hBRiR~LBFlydCUZu6lH^vem@CfOYF#5y( zklJ6N{mSJ*tybi5`9`qwuR5pr9Bfb#na5fv @#@p8Va-WOh255p-mhRCm#@~Zp zzW*Kcnns>&v50W74%^gM`0S3dwF?bD<(?vfD#6>|nd61ciKZRM$z-hewe5 _PAAL|u3VALdo6!azNEABNiIhHFkG?Hf=AwB%Bh6uTl?#z_NFIU7CSgv6}DK? z)8D~Wb%`qx?;Ryd6t}B<@+AUtX=$y+4PXA;G|~uEU%{|qPeYTo$ vxofcn*B$g-+qxM@f5$VNevY$KK@v!}Tp{~}% zU~STSxj*|2#=$(`CeOHI&_za8>EP)p(G^OBK>#(RQRb@OOhDB-ad(3$mw0y7WE&wt zudEW^vxvMhem&%H +#8+S!CU8gDdIDhf(Vm^Na}~L0@(wUWv=shch=jd`^J_ZoS(-s1t=~tWDbk zTkzgVXKLjo+ErCkM_3w+LxW3tb5nl28%3hSHMs9KlTYyURwW5W#|TZZn=V)1^VDF* z`0h9c7(pV#!*Q`8M}?Pz NZvL1a?*A=1?%J<4F$75 L`fdgjxCmd5 bL66hnHk*`DHsWhOs_NShDk0ffjW#4PiR?DF(z= zt>4=iO~9~Hy>J=@+bXy?Jw4R5q-t`>#^d%4=GLX)0B#_Z=_}Ep=xd9SUA}|YP8UK7 z6PeaGZ?*ik$;K5Mqx;Or2wUhx_D?PhGHUi#d6v9WO(ts3rBOo#Q_wCR4<;Cn2+*wog}jnDHQ! z$6#qq9oap;)wXG?;!=C5DmZ^d7z?V1bXcD6{k`gEIpS3~_0CTfAB$g=xaS@Sf8SvW zauFkEP(CU;UO!;Ety3`-g9hdknk;j`N_OLx9nKO|*43<*op@MzZOCVy=$QOK695WJ z@3-cUiQA0p3+IYJHa9Od8_=u!!W&}A{uLkrdNUF vKW(br|cOyzfw3w3QzWJ zh?*$A=&H?`k|6hTs7wN*_DgUbPiXEJLk$K-Ly~5mu~D~7bgTM9sqveN5}QHm53Da@ zz8W{JjZj+qxbTvCA(K0H-}aTj!VcaGV-;=)Sr_#krp;Gw`57huil6!6o+NZdiLXOt z!d_EI_z`l@y(In(VZq(-+d;ZO_}9{vKwhZ|g5 # }5t zvvKbF+4pbtiXXhXB*?EnGhjL`6ts@}K2Y$Kc;lA0T!q5m-)3*XuvW?HBe)ajdDtxB zMIpHD30u9>CO4~8?~8g_daU;HtbF8% Cjzr(~wOVxhP2anpijL&aROa`7_t*CE*X0wwDGo!gLm76gS zy^KH`607XKM7<1$wKS_{o|{%~ug|5rt&EpjVuQU?>W?I|>-Ao7>8+)NcPbe`zfqW? z*1}x$tJO(Pr|#e?kp&)83}-iAmY$iwWX94|adcSOB@=xh_CuUNwU1wu3e~r^OWC)# zk _MclMk!MHT3-GTOjx^l{B%1E=`kK%;-0 zFy=MzxK_1DY3qbb?>shp;=*l&f9!}6=+Vq4%o%du;EH=N;?dP A`{t6cM6bJ(ga_T-S@=@3_q=g}(u;7H*8I?c=;f;`t@y zUHXE;WRu*C-n4mQ?i#cz=kDEAip0T`WP#f_vrSp }cyB)ZzrHGXCi!f8CX_Me05%9n9Cg76&$ z3{0F-FUp`S>1~EukO=hhlTw@K^U5~Jr9xJ!+GTpB-s7_k3pMuoT5WOkJxs>$?VBkG zl{TXor^8IN6vA0lm598nL7paFXB7bgHlZaTY~4fQXN0@1ciO!|w7t0g9migSZ8Eom zM(2dJkpU;T|7IUWGw6StN8K2N_Uj(D;|G{!+w=l5CV2>;E=4p|)js8ZRGxwQ>3ntcS)h*rm8%1XSg^)&SIUGx95Dr#Op);QGq6b zvy1I9u8}cUX7ooX^ehMgRzO> $F*%qlXjtZ zmD+Z~kqW{$Pl6r{I!u0%@;noxCX!*-S
$z!n@F(FPUEaYgS?QA37%q=6r zD|BVGZzFaNWX>=9p7v9`3J@@`$p0?SMQZcTR8@Y>=G&If=ltmP35#q4v62hRiuZT# zw2FA_NQHi0?R4d= hU#yyl(WeUgXoH=o=1v +j0AL zz3qJ?0RA^d*QRZM7aU7?b;&xk#ErvXR`7OtC+-|2ha#$Y|5tNCM4 1`$* zFXW06OXy=z=elBO+>dSNYR2?S%-Sk)NOkNxy~@@cr!D6TO5Xu<*Y)i_^kxQ zFR{i^a$Pm`S_CxMZU3D;A|p;cdoKE)h_#JeqWr|*M#rrRpdRh{8@-Y>5hiIJ!~(=G z(tHJ-+hL_(L_Y @FY}x-1l@6=(1b}!5^NGdVl3h7%oEt{Ub$;C>fgC1 zU-|zQY@J1K;r0G^Mx3Pn >vI*yw2awmGjR=2P2C~k z-xr&6#+04Zz1FG(Os)=|iX}}@;h*dJMy^m1qo?#AeUWjluj>mu#1q2eSO6skbq?nb z%U@`~S%>Zu+VJZ2AYu$uK-=Mm1n;v fZ`@N+352$}C_w7-GEWA7B^dzBX+4 zdqhF3@OQgv?O|HBjXe;J{ETWu_Y>rOMyCk+CroV;_w__lRRq_UW8l4iaW}n#Mc2v5 zl 6R|pQ-(o;kJwZCn5jbQ~#j!$13#uNiKru{n)%& z0YL|4G>}5NAX@EZW!riAGK+=`hThAQ4CycQzs_V7w6<^wjx|o`ciT(33a$E8SLS8d z%Ku53@87euf4U;U_|@7Yb81Sp1>lnwl$E`;w0wz p`5emUWp6O5dM^S`8O-_kI5N-VKG43Q8;Ea zeLe>?g79o^HRIu&(a3$Rx3||^p8w(wP=k&vRLNhPvnoHB_*B}VzQTfg_y7Mk=?cJY z(ldfX7vPZmLKU;A{>N7RV+;TJ{kADQAhYX;% q~*MR@4dSF`)(Ns8X zEX6kXDu&vB5ldTkgt7J8pO)GmRaLviI|xCCbG1yAzE1y8?2UuicE#q7v*ng`gmZl| zZ3$bFJB#{HCh-50djFd>$s|Js)WDyPkkJ1fNS><#6Zdi|HS(wpkSdEN()r&t6rx#( z)^PgX-riXTBUJx}O8++>vV)#M6mEqcd3gI@8~P8%?|=F#lk@lUkl>Rb{~tC%+Yoqu zUBi`#sQ+ku|EK%=A@ctgQBHgF&ESt?2wXgW56{BFf{OeFHBhX8A@Y<+uTKeN|Oey(W_-rvET_qN#{Y z3Lv)=+6UjuVT8djTB|N3)B;2$e0;jF=eyq>JIK}4?m6g8ryKIPw^AK@12hKhKMuY= zBxRS1D0q&Fn$_LDL^@oXmv8rdN5C=pX4l=c$<8&`r&(;-vrQP9C+|Fdmyxo2g;uK7 zs9LH8D}6i@v3(KZhx+H2Xf5tFa12XPt!0rKCoMa0N1p8B(cC}(*bmiMF4G>#PbIIx z0*|rLB9_r}bs2vv&+UXtO!NUY tIHE24^HC@a_7FWY2u*mM_CY`O%v!V zJ&OapDBFW0Dro+6dbl>du{FT&Y0Iqr>Er#8@9H`_QwcWJln(}7rprjDZ3C+sqJ${o zcQm*my`hb_yRU!`68gw=nKx$0%?6PlbkIO#XigYxZ{a%#mq1Q8|Dovtq9#awx-+~( z7>{`mH^C{F`9zO$sjQ&XjaJaw(~-x@C!b1J5+7}#LJucfb9JQvQO#;gv-XO% l@Dq#i#SL|rq;~;#JC`NO&{6ts*zdMv(qoU@P2wI_l_~vhXi>D^X2xza nZokKu0hBt60h+IOEj3G%Tmq3fOnYmRu#%!yBtKIVFlXRZPNexgb}SKo zo8^QqUCxcadjl9YuE!7kkp)$j??CD%ygA9LQt%z79!Aa@f9|ZWIQ|2uAe_g@$3?lc z6(m2rha^_exeQ3*JpHkSnw=Rz(B$@2hb~Cn3QZpmRF~X#S59 )X3v)Dcfm>TaMPHyHG|lXv%O z;QnUE%yx~aYaz!#FIc23*9L;rrPnO!(RA5L E>v4HJ5s3BygSJD% ztke=`B?O0VVdRJSVjq?7zR&%I+SR;Wd*J+Jp$a1}Y`?m>he&UMrS*KQOsn3OWTE%8 z`s-?zm+25k;M^O>mg1(oJlYOE5$hRtpt5uMb%dYqbz^xddv(S-`|cp`vR9cIBt7az z> b((1ICfmij(-Qw&3tGV-8uH7@Ppi8*6tS0IPzmSzW7|%EjS3cH2aX(*E2B zT-^TFNPa#qmJ8Q=VY$Ao*ATWxFpnFYF%`sjiD_lVlgi16%B}k~8$L7fT#bEN{oI1{ zVSTO@wDrEW7cW!qme=j^Y^}W_8nwa*1(@kClRg@ylk?i9Ht&@+F93BHTFRAR=IV%f z+vWr9z9 fRB{O#66pi z7>g!Ds|>TCL7X_$`V~24V){0d9wKt$xWU|#q_O5`YkFMFmtBJB2PlLO2o;|>d?i*p zk+b_;^d2;WIPx*)&%HD#iuj5E6a@9@^MqS*!qLZum)Aolw)4#{YvI{CDF5)*4Jp;= zv6Vs>?#q=(w;$?bUihP?>o&F^e8P7<`gNLH@w;HZ>{P#NEF5aXj$ZV5c5N=z#o`~S zkqWRvrDBeafJ1^8Y+x5Zx1A|1J7?f@E;QXimpP04&&U{S%b&WQ9xAY5n)-rS>Yc6@ z9HXt~>q_T=s2G_Jz7|f$#o+nM7cADK(-;|6w5{+Srlj{yW2fPmAC2o5d>n6d9Y5qy zh7XVPjC-A=p6?cyBfrs!rWER|izKQ%lX`C2Abuy6v=(@BXP`|X?BzC7RySw)^b+x1 zIz;5L#dG7E)PjP@BxQ4x%farHrWH&5NiSLRFmM`~M@^jXCrZ9gnO!4IfHU3fzLi$r z&zi>L1kBs!X+2+|2?K!3{^{{{x?Ov3sx+lUep2^S!Wq%DX5@WR 2frl-TM>NRulOuA$<*KZo%a0GP^&2rVz3(j#h&+04 zfL1O5$AvALWq1>go$pOUE)M2-BWk_!Bl_m@cBgAu^E!fqP(km(Nj+eRlT<7t)u>Fp z^TWkv(H&@7Rw}SwIa_KF9n*OmA%Om`FLAKTi~-8@&&T0BMepCcV4G(aY3Lt!X;E&R zU-F=kPd~{jzFb2vK>4fpc1_ry7QW^$Zj;&CkGFhl75))Vgy=kL
oxQAW2 z=BGMHW6Kf9z|>fW9Ltj`Ac&qlYw^;3r%c>F-s|!6cBc4n)Zo^~<1Vb9?0xFXfS6rR zNc3n~(ltb#mU$J6gVcM+RV3Kwb|>F9-F*|S_hY!)Az|0c`=U5#$WFUeN#)x{$-#;f zgNR?4JW}NL64}xXU)64XSmaS$|xRvu#UVuM%?#R0~ zqp}MmpR7Yb&1vp2R@2RD@`y8Yp2J3HD-{>%a49cW(t4i2siHhl3fWWDah|LQptDmv zL*S#N#5VRi{)vK#Mbt0)UB_jX-kt9ZqPi@N0jkD*PU6S)16Nm!XVFO|eC+wWL!j)_ z(uoLa&<3epBb4y!dObQAyl7S4y3n*&mU1=5!C>G nO<0w*L+9|GoKDAz={Q${93*jr3QT>l!Fd%>s7W8b7GXA73hOBeEHXzv78 z{1CotgMM-PlQf+?4@x9zfm&Dg5aK!zm=kM=^nCyh5}to !{OHBPK+ o_(5`hrrnZJ8m@Afa(p_ zGTK4ouim-5{b?7Lp1KPh(5VhFM>-Pm8XQjanwyr_UTHmfv8;MW^K *@|pl+E{U)kQLqSsUOI|%(7UME?E6tOMN z-ReyYRbQxrCY~acx+XKt@Vv(hb>w)##wQg7MKzWoJ#G>Ih0?RRYWqpAjd2p0Cs zoZ1`ZvgtMbjc#gT%ZY-Dg}LA7v&|O9)Vty4M9;o5WajYwMH4*1L99&Jxkw`(6wt!) zTo i5)ma4R)vz6~z`srU1~R~>Iq`GzAK4_J9Gmr!C&c(xt4 ze6*ToZ|&69FR*Yj^&WUpL9M(Us?~Q;nyfd0aY;$_RUAB(a>zavM(@W7)U-L=i>AyF z6@hJD=elxI-syb0GiA}5iJ*!nb*tD+6`md}LijTII@ $;l)lQKKFqz}xMNOvuCOr^%pU zm;9LG2UJ?HO)T#c7mnr$f}41cYT$rXkz>!ToKgK%-Wq#$T=-WqHg7i%$&v4pq8-6* zSVyw+*41*e8p3CToQFW}2W#i}WiT {ZyiRFBwlL~t1fA!1l#hVVLLcfMDP3(sql;uC55h#`0E8E%8F21n&<A)6kOfW`Z!Wm*pc;Snd <>6J>ex>-| 76P&WnggqLc+&R&yGqt~VR6^X|5y}U^qi)Xdxh-5-kP)22 zqJ?k4=n?ZwmvT?f6>&a=Ow|O6{anKf-kMZSK+j3zC{tox7Z>!we;Lm6oo5qYI`&B0 zdr#Eo $U3vEc1yx1W{~iofUko1T`{QDiKk^O4l!f|&(^Gv@kx z2jAWZ61-bXBN`jtgEq}Y91!gc&B&Iu>_%H&t*0j|tJ9E%Fv7gL{zVpq2)3m0@=H?n zkcMFWnRZ7*Cl985dzC$Fx=e_k^&ySOo+~tp&0a@((e4l^B+c)5mT?VnJK66e@4nw8 z@rRb55WahU9^nW~q(&4fuaO~vqn1@(0#Etc2hm$GBbKdLn%O!Tcg+4GyLdWKPI}9^ zfyHU) mRMmiH-;aYR20_go4l`bT5_UWIg}LOe)gzdbcc zd!zSe;N*;!>5J(;yJyUf8BcIQ458cAfA%^;L}h{Hl8N?^7j<9y7M0H>6)33w#Ou{A zo?1`Z2j%u!W;2*sFA86jJ@e=?F*~|}kWpy4Ueb!z>0-|$!9jdaVwn4@Zv3n9ai~S^ zs +bK-wi8j9t4?VM8ZuBtFU(3Md@5?S}wkG!}?DO~5vZBHk@ zrzYxFqzM%J67i~}1cibgQ@MsH?9a*%V^?FvdP}`s7;UC|O6QvEDw&J-3MB+O!h2e; zmdJ`4fO7k$+9}OqdFOSg?~uM#Z#oywlPtt;S-X~#x1}xWxH#Dp15D-QQAU1-Xetq* zT6V3@EUWlI3FGntL*A$TjBlvzM 3?Ee&jg3<(xR^$96@3-&3j{B-zUz-Jg zP*f&0l4tJM0f0tm`0p_}Xmn8 s=$K6)?{6_^UAtd*8zom6>yuOi?ssbf_7Ebj zg?HLHs`s(#JCQp2P&sP9PoehE+G$-!xBO6qbvTpKw%gs4)fQL+qgL4!@chM&Px}QM zRU?47LE~@Fs9gSmxC4uSJ9A}~YbX9?)Zkbtu_K9NjQ &q7`q3;BN35()aa@K%mEHhLAnBvgm~Xd&2V z TR?bb^jYKr)IVK_>FdbWn5zq8v@w0AW`9MV?_@-+wbR zR^h#qo4Anq=1b>AcVBX|MMh4oqWR#P92pUA$j|pbaW4c`1MoU=D^V-3f2hy1 _rb9_MaTg@thN{5KIibV)41FZ-#*6oUDuz3RRv$osuTD18@7|q zw+`V XN1dBKP&THF~{w0GOO=JsTFFS-z$cliMt!Pf(|I zo!OOtoVBhVQtsQVaj}DRSWIj0a(*hqMRL*aa4i6i<(l5<3JE vID=P_#{vTpl)2U6Xgr@Le +mugr5uqk$|o*}T+SGMK}|afMkKScXzuqJ;z*Y%WP^}0llTB5 zJ5BQCb)Vkp>u2CLNgcVtKA%dzX&9KbnOR~z5VP0KN8ly?wt^Rgp#*TfSDTAi=E0oY z?(E1 o3G!Rr%e=87gj>3!-= ppk+oNbC(@ YCcM+53)cJZwCQijxc8BKKfF7uplHUSh!QWmn!`=d&zh6gtp%qTqtn( zt5KXuRHvt|@)P`NqDoAgLBX%;?OEgzjqmMII{9|3O{fV&kl^i?EMPz^%;tSo|LsQq zwTZ6$S?Jfb+oLKltHJ)eVl(Cd`E)7$zUBULAzs7hkw^&)pl-(~w6a+D8MCqPUq^a1 z1k{#Uj0A6Rv5TwjsAzM&;Mf=<)ZVXqwq56vLp&ae>U^GjX^15J{>2a{;DTvWE#(ZG zya(PRT->t(0B@&jn?5uv>gGQJJKg*gu`A_%bj(x(F@cRNYScHxF>E6VI2-G^1v5$2 z0Bd3kQIbJ4>MSzwj-%XR7kevlA^IpdR5?Vv6^B(A2xay^s};6uzrU>Qb?nuakgNOP zS^6s!%icXy<>@WpBDKws - C)iT=SM86HSktr7eOI^anL2cFePF}3j%r*= zT%4xf`
V+gdbGcziXm%LFDiGV3OIgHM^IK<4m*V~3mVeR*izEPC^_>JmwPjzr$UM>Bw9 zp!3sxVQg$`SnzBxbxX)4doT6Bv;dfvPYo8hDyi17AsK@Zm%-Eidbv#n!R{~%T757A zjtC^0rH72#@Rt}wyf=^~{n5=u9s?JYr!>m(=S7JPM>p~bE|ch~EQtyoD7Evn{SE4M z3Yj-p|7!joOY3#At$ !zNWtSuA&O$#?1UT{ACKP+a7OtLK~Km?SSUUp%IcQC;20F{gX_$mpqt5Xk*xkQ z$Ax{U3xH)9)aZnN3#JN=a*>NSY(0vox`9Y)!;s@Ke2yq>O5ul~SvQCc_5lz}ojuRG z0ZJUgWfVV;sj_@{aCiv;cd-oBbM$peTx{hJxJKAv fyii2ca(6MZIMRDRUsCFM zkhZefvCVqo6oqI8 ChO2ZFX68VP4{n5*`*5R%R^-bSpbL37# zPRUV3{<(k(cw6Zm#7C4gO80cD!5iu_dmMf`R_C&1ms*{})H1(-{-Cg3UUP9ci!E>O5`A7=5|W4}!2WP` (jc~O|N((u5cMNLO(t-f7 zXK)GWPfASw^jFY#KZiSvn53oWYKGIjt=8vLC1bT3BBM0V;ikygd#(dZ=;B9wzI-F{ zwcMxian_y_Qp*$1q&AYB GI-q3wP_wjlcxGZ@)f2{YX2#zmZF-OEqhf6c2^R17uy_hWLj| zPk0K*v})4{RktDC4^-O~{xtjpy)|RMKE|w|EeBz?H0 QVpD>(HN15JFyT^tI|qOu}L`C?c~iyLXSsMzrLZ({5iadh3%YJ3>_Glz@` zATjk~rmRmo6B_7jA7T7bhzfU#YB(Qp;N>2fu-x2{mtpV}?l|A-YKZsQtZVJw9QE2i zWHZ+ZwdNWk=DTe;%GetCRH|LK$WV>m0;v}6k9Ue^q5B=h`n8+Np9#Ou8#`QlX_2If zS2 aher)figw|2%JiaYuTk69cjd$O z@lV9ch*chKOUL DtJFpP88`u0~-sAZt~Y2 zR!lM@h!D*w*~Oz>fyJ{g$8=o|P;?dex$2g!g;w!Dr%B-$>14FI)djb@`;)wxa82C8 zlVwwU!4f>i&g3)FS u(x$~Nco%N^koM(=NB1IRYlzYGO;9anX~^zc0QY*g>HHUdfC1qG9y5| zvL0}~wJvycg&cd0WPM_ka-{3T2^{4Xu xgnUwd$ekHfO(zwKo;m7_&DTP`e?1-cFb2*@}%p8-`Q4rp}V4Mf|19 zMn>%o$0nif=oaZzJq!{5+$Gz!UV6Sd%ZX1&JVW%Il7biFnYQ}*Eu&BZV?Gp9xtvU_ z;OFELcA;BIRM+O20y{K5W0DZ!u`w2(L1!7yS~zIjZ } zk9Z)1*;t!T!weDhyHk@qC& r zxB}!4TRkOJ&5SVG^Dj!ak=TN!9F^sR9sVN6NW!qLN+#FjQBGH)5)M%n59$QlQ|Ip; zh; WN3M+eLQz+Kcz>YKg7ZP z=@Llu+E1x5*>^J)XC~a%3j7kpu|+*T(J^P6g=qjva^($IhZO}bcAKa{+`jB#WH5P@ zXnY`lyY5M_0=SnSopK%;HgxN`7+kPv L zEnDUVt6oh<`8H=)DAmdq?*_LOc2N4{^Wrs614MCF1vJ;fMA`PckVGN+w!_gS*;XIT z1M6?ve}!ISidU-!O;x+0)x&m?xIIY5a3v3H4c5&PJi1QZJ^<}Q)>qSMWQ0YbCm&?Y zvBryNP@^l1$Er}JsF^_2e23?%q yEDHE);4P)y&;&b!i zeBgD6at{Ns#}=Da&0>60>{}i718UsI)zuR=xjeq9-A0P%;Sea3zLv~U5Ty7?G^7|x zmqz|477*xH!Mo|!5F-ZZ95RjJ1%Q5kjeTCj+;|l9 N0_eH8a z_aQ$j)DlGiUNp~fxTqG36`F*A+s>PqI+wYeb ZC@LHVY*sTUr}OzDAtV z7XIQ6_%+mOb9DKr0*jDlDFj!J8|g+^P4$dl78;{_t9#T4=avLUl6lk-)pOCHk*^~9 zgRHG9-F6C-0FDsiz87HsUP}3xYKjym(S9IYE;l$3RaybVgl3+ >a$Fu!K!tX3#WS=7ic;$|ha6o6$B tY+tJKj`^oR*&GJp9ox_4&zX1yq|9RB9M~#KC;2EsZdzcOkDM({M7sy6|xGN zWoHJDZQoNc?Qa$lx0%#a{?&erbp3>XgJ3FUwBP1%0IvNSPX7pp=A)?1p#XKBR7P2P z!`A|amfJQT1E>rLk(TU%-fKbjTG$@tOaznU nJ-(La^9XQ>`}^hH0M+-z-@sM|3kKmp vA2Im=S(cI&~Du&Gxm4BSMEV}G4aIv(7*UQ&g5 zaZkV0-%NNJ3F()BG~ZdNfb|MYFS}{V#xFZ4x5q57<;=T^uh69|+ttUGS$~EU51t*@ z_uW09fSRx^d#@TX6(-PG_G*vgACj`!XP%es+4B49mF(K5k5m3lNSM3+1>poP$5&(9 zaYGhxP5j-?pecll!4Ogt{qk}~jLi2O_4jP~+KkkBk+238C)^pn&hxvKNPQ{gI(3`a zMN@ma@jUmPQ|spP; ka1}mJri5x=P|kBJOB&=? z=p)ldWsGDYVb9GiSNOP-f*3oS1gNEpS)7{~!x*9OAzi6+Oi-gh{G@Ip{Va#Ks@O5u ze7x$h5I&*3gz-;CEMKV&jYtFVxw=J^J;=ugiZl#)tck;kPECtdZW$RF@mX1O>(3B2 z*h^V7-$Rk{eV%LLpeK3LJ9s`5EkXSp`ee?vExb4QQ+F8Y^iPe#iVylDDfwk|>`{US zq=!BxTE|>BP#*IV5!R`d{og|-9`5KOU2lx5ag{welU*+TYlAy(*wfrw3P@~SMwKf) zRq^0ejkT4gC#QE`FPSa4HD{qU3eqPXs8TEADPXSLoRG(nqV^uzUqA5UzQ?DpR>7ul zhkjF|yB^|iXfqsdMB)SfFi0EZ?)k4v2eF>Yn2of_V&Y2b9iq&tP*{hmxQWv1B~Ev* z@KYiqjV~Jsci~U{odZPbp9FUm*G?ex9Zgfy#ZnkY2DG#*&|)>T&Z$z?GXsl8CdaYE z<2G7S9Y%|Hi`QW48P%!Pdel)z9ukM68vdi-X<^4~<>9;5KfC}gxh~ZlOsN=?T`K5| zR}1HDCeNQ@A8)AmUM^&?*oy9$7$~;gxMzbqtco(~ka(zEd^i6r|5ROt^WLTMO$gaU z{H#d^B^#wK+`yRtCtcvUH#E4~a-?uBw-Vs^yzCHpiON DNo27rxtg21+X%I_%Gs~v}wQTY;w zKXWFs-lX_+<07aa^>I~N<#e+Xb+MerPL-2c!&wm^m|2}WG)}K(SZE&KZDG7|`J=1U z554omz82t)XLxWh-d>8?nb#FXM(8w?IhP9QEO6bmB=I@p=p^~n@q`FdW>wItbzv5N z`%v0a-m|P{eB8Rka3eQ3f0G2k-xP8Baj9qPz*@Uz*Ewm5XZT}5n#~7m)(MQ}L^)#7 z+uUdqT{mKh?MB8#C4u!6P)zkF@{uqN0G>x&CpHGeVq4$XGuot^gXSYMj%zcK@MN_1 zDzrr$6H|h) kb=BrJfWh;=@HlU&}JAhEZPAwKk4?yMU0CZ&fW0;L6 z3l_>eEg>eaNFU7-C89s4=Gw#>W#Egfi;Tnz2^mP3>aaY)B}BmuQ!EQ>CIN&sf3cf! zIf&*{=kCkNnp~BoF3Fk-->Q`790@l_ Mr*(MlKU<*)C1nDVO=pKyEiJX_r;0NHrU>^ zl0l$CikhJCmw#=%&{&lrMy4xwd39w)0`-yA;#f_7C7^`G=A-O6T&K`oY)dP5t@A^F z#SM75rswc5nKJiFjcD6SR`tsgT-$maZqZFsj!#1pV&;_BHyam*hEYQyr~sI%rI7%d zbcE&E*DV3NQVA*Ti}ht~hh)caB5dTf6T2G1^^*;;fla#eL4@}lb+{*aUpu#)!db(S z*LZc~P7;_V2AovJy 65l^=&Uk+8#4rmo^;sNv})vrc@_AUFlW6DY5|)fp@X)K z#&IPNkT8e(I*WJ8Hnr7>CyuJJj^N``yGww`La&OJ9IG$-)K*~xXRgSdr_?ll&xbSj zeoz7ep1#c@P0pAc4Lx9+^c(7!Zei l`kayTsrQF&@)L_I1Qssw*)v5C~nCO^TfI za6V4tV?s1G#y4vG5J}W&7K;e^e}$wD @S9 zU*!L)#v(QGKX7~dKZ0*P4267CYTP?04%z&zeYrzX>NrEJey%m4t@oM#j>GoCMs4*F zh2 mq~Ny<5ibC)Az*=X$I1p6HGe4&hl#5D5uN zdN*BW>_Y&bFDpL(pkZQZt{f?^J|s84pmMx(3Q#1OY~#1M7lRIs=}Iqj{uzO8n*WGE zGDy7Yw1n|{=9P0U9!hct``+-+ZP-3b7}0R0sC0GYmGBs0w==eC&@6hwdM;K|u45%H zbOj`={K|_G->jZr#q0Qe7>r(-3BTEP;wZNpE~&;}c?Nh#n`34fPE;nOY>l}eqJ<9L z_ePf4(vGs*6|fQevgif_P)^qoI2h*qOyRG1l73rR*(mARr;swx nE`(KusB+aK|a%%~)8@UxpQaPxeRX*iI@&xW>rU_XP|vuirmX)zfqyGm$%ewA6C0 zm? MR#s+j?UBoXj&ZJ?s|h2EDJ1|f!Fw%XVjV3hbMF^n{+ z-?kuPOvLydRJkSogry#(fHhD6kXwTe>w)%nX5;j--vIir_ezKDl>hl!Ea+Z5WT_L; zvLxAfG>7^YnA6`6#<{j1#hWRII!<;fBQ1U}zp*+DKxQ4e88LCS_dM4e*9iELoq7 WzDpiqVB@HOhY~|N^GziuWge=lTrr9DSY{Jg~8nYilTI6EZbp> z(BM;UxPSJX7pp#F%At#gY0abAt$u4~(t0G6uSf@jQJ1=GeL{(%O-lIinBB|OPxKV< zZq(9dBFK$IXOyU7@rNnLs+NiCW=c2)Pm~=HRf0KHC9nd$_VyUp=y-jT*2R&-QxlcQ z O~tWQeMR6c*WfiZ3$ zHZnM&@%cq4#O?=vMF362%gaYqej2ofBmNjTwwfivOub20hg_@TKsoC@&3ATS1VR)z zn)4gyDTXo@a&GXs8WAd0LqdP~7vUjXVLqyn%nu%69{%K?p;fE(kI=GjxRXm9F;oP~ zzZ5$>7UM}NE6rX(n_v& dCx#BgKj z%lMX(gQIp$k0JtuY4h?I?wZ+qcCVQ;m1xTC<`lBM%Tc8;Br$f*?;nP@8Zn?ZL{5>u zp0WeKBXCQOv`CS&*KTgTT 0dB{_cOF)C;{0cCafAk?gJ^iS-i2WF`0GSw-(_Gh#_E*1f~W+b_nD Sy4a%oqTn*IL7)ttk zS~muN0>Ew@K^10e9r@a>>6)XFqXdcI0(IifeB <2fd)dz_$c(HVU zWEGHAvm?S=?r8>RG>}s1f^^a(piu*Ar$m#P%9FTSYy4fcN$?mUa|rB&X5(6xG}Fq> z@pN%iB^~pLx4Pn_x2T!L=>HW|W@A-v9(_61i-bhqU~4vFKz7$ypm+;om-C{eFA_i7 zY}PCjr=zL2zCMLK^dyaF_FF><7v=>028AdSo^K6(D}o>wA=6y5L`y}2OH50}`+kOW zetB7TByCvndfSNT-;B|G;}!mkWHtzR`0kei_h%C)HXV$%Jo%nyr=41_n65RvR^1*+ zzEW ?VmraTQR46LWc@g+MZG(WDC^@Ht-4F=cytS0qUS_s2YV4oWGm6ZG zu;;z@0#X2(!a%lnbre0bH_CdZOaWp0Ue+kCOL1q(_Nq_v^TBJWbro;)gEVVMC>a>H z`e7+U$@u8=t5Kmf-1Dr#qQPi}`4H;So_-7bm=#eQ-AAJjW-EZ`yi6PY-|-asKjVo< z6N1M;7`9{(+Se_B=eo`J4xK91dbb3R1*Na}f}GuB@8<*2BA*ibJ7dzMTeBUZd%*%w zL?XW+#cyOY^9d{JI-z%mluBCnHVuKTi0YK{jHgRg=bdlZe$>oJa6UvnXUf4BT2Hku z`yp_UC||EbVx%m}Tvc8Y1+coS2*X6a+=cuwL$;|1PYF_KkrFd~ojt(||H6KnI|==L zvop5ZBG4g{+)%DA HOB>AHkRIIM|% zf_FGqvz+e8?f1$ic*49J@xdcB_numHJSBavhFHQ{UY|Bi_BkV;0-?WtLSqTQ)_yUW zwiwa765SH~-0MM0fHnx_h|BdM4F@!wZ<~M)Lww9{%6P-jgYzXMF<+WGcmLF3t+8T} zfd5yu8q%cIi2RVDC= Y+#mHIYja-Q;)7v*t*(VZ_hT( zLC;BjrOw}*?E~W3ukV2JFqb;SrE6OC0;k+t!uyI7#ROZzMtWkmcB8w0!C7vPhDq8t zJfc}fom%v<^M#$h=A2i~s;9g20@)DHciEUW!wgSnv9n!?x}wq_(IY+Qs|YqZPyLPc z7BsXbmPDFPls)uBZT||JfVfxeD7mw)px3PrO^J!_}~<=J6x9$`Egnh%QIA^LS6p z5&OZX4;B$puRcPe-3A_5Mdo>zw(`$oWD84N&RzS^IQc-ltJFI%+$`EVyv$z~#&8>^ zfZ2GP)RW?Gz>HvgV`fNe*USxD=oiw92$$#W$3R6h{csnMiK~@b-gt>b5)}4%O{5dl zZknYoNM1M*XEzMfiNl#PFM%L1z~>^N<-}NfOAwEXZ$PtA?wYL)`;1-XZlwx2#<=K& z;fuwffky%PM3l#?NpUhAJ8IYC9%Cm0T5-x78iF{jQV8^7GDSnbe8%fEmp8%sDthJI z2-T?e39gZov?8&>@05_ 60rJys0MJ*#>d^&M r8q3Io-W#xsR;(jg7+I||``KVw`;?yJ>9$j9?t`*Um! z`%O9~4VwrXN@OxMlAoQvNtO}Sn?BxYjqY$jEiD#HF;{sQWzglRBAE&qn#Edg=i= TDX3q?&P@~?Wf=MVM$MX{Mi~k&tv46ygVYJT66kOD!XSl;)c5YIN-c-1V_iL zJfdbmIgq+BnseQtlHSG%;ENXWgHmOwX2~$1t|eDTERs8FNVP^N6n}8ps2CY0wT;)t z?UJ^p5r{Y?G0_1qhr$?Rqp7Go0XIfR7jC81CpxtW 0}Pt*M>eXEk~aV_DW>fAyUz8;PFEfK!G9h z69;ON^6(2(e4MzCG8lo1F0v+XKXLm%_O^)WuFPGM0kZt?M+XJTF`bl x=MsZGih6wpDGL4prdbcJq0!nJf`qN-?Zq)0E=avIkNBRvG4Gsr$}rhGL; z`VdF0W%!kB7Uv}tuZ%2Eb_GazxYObcL;tMgQNA4=0qKuT5xa1Ko$Y2zw|ZCZE6#;v zcx@`ux`(DLc~4qBG+(@iJ=H7GQL#4FRdIl`ehZzUcOV=LIj@wPTFkojOqbK5{dld_ z5lfqZd)}YD(NMbkCK-ldx9pRq%4bbp;XF$v#aWA# JtqaG|m8ehHhu@ zdl;FEM?>~oy9%g_c$(Z&XS6H}ZX#AlqZTiKJZo|CS^820S51y~Dm}Ur93U^0e_JjC zq1bux4f6pOdK_ AwFm8P z8WFa&a40hi-BugbdTo`2Mg)9H<&zVZ4Ti6m&4(*b;- Byv@LTFm-3F6Vv7BQDl456}j{kH#5enZzebOc4V7FF*-3l{CP&- zf5#D`+nf`DDz9@b3a7EDHh6RQgt1wwwZUG0%$;yI9G4=$XD)(+^CUNIVDsc~i=oxq z{?_=l4L^Gx;^7&K1pn%Yo3|WgjW1yb5OwoNwwY&Z`mTA_MxP||U=@SUDzbqdRC!J; zHk%)t0x?*&UfMMr+J`HGvZk`lN8-infyHg zJr@AYS7z^VMbcD#gy-L>I!858Y{Cn}uoeZ(w#leqq0q-3{xb2Dt?(6pp%57!&g~q! z{;F+L>nyUq#&{P*00uqh7nf3!=VtM!h_#mtI1*UsDXOPdXPD7LSR`iR8|BY8YtqD$ z_} QH!!^A>$L2S*JRE|v81_t9ym1ii5)=>%4+dGeW}BdPdGohr$$ z9LZOs&&E4W-=t@EOvDF8P28U>LhBy)%aIIex{a<{%qwXf@1J{FxUyF*?Tfi0M$HN% zN)l_44P2UHB8=1Xhmi}rf`{0OduE7rUO`W(it-Xjw5thVkrL(|MY^AER0VCpBrJc~ z9#7kYf-;bQD1M{B_Tomf6F*F9yAiAD &76xR^|1G>j>wQbbE0&9e zUzREQqSkuH~tf& )x9e93*}mm}P;HxQk0l-+O*>U_vEs* DM(ReWFF*%1UG% z>E5mJGT#&6WzLT{24{YCcCBg{4PrD=GMmX}t@$%Z@GZ6U4m4);1$RKr?tU6AE!MOz z_RxA$2g^Hm(1V7u^go_fLo_&~qVLUUJkZQx7c_p{y+fT?6Lw5)55*w)9_+OnaB|m& z=-ijbI(hjZKV3A&$vV8=+N5&u7#CUYI!<)>-b^Uog;(f+rs~a<=}^@w7bLu9o7UQs z92qV;Rp*j1NA37pB9@HGvYI#G %QyQKIx-Cu>x1~`IP`s1oi`; z=BWE=s@S~vyCZ6M#!C~hOvh$K4`wDRv~%(-Bkp&*pAgVPR3N{-WvuRXb*s2F*wh~{ z4KAucv1X_Ig;TA+P Xus-6TLhmIFfcXD-X9YbT;Ao+o7^HNL?Z{PkNt}b_;>_}JY75P-!rneyXq>u=s z2QZNsut~w?xNRdSMq& +RQzJb#8d1f+Z)gD2z#sP(SRl+UnZV=w}__!iOYV2t+Z(@dJv zMwWcnmx<|z&Ocqh^}Gi1pW)z(abQhgn#KxdS&+c<6=s>DQjXMD0ez_N^I+Y2sj*hI zX%+pgtEMV@2YB~;ik{Tw6D #aL6uXrgn6hSXNM0D 5I{K1D&c40(0gqM1_+NjVA4O_4h#yqiCCOH zCMlA=&Kqp3kql+ZbcI;m;l;amrQGCuRklZaNbqwRXpoqq*dpN1@9=wnVGu?US