From 20098706401c92f5327c18c9844b97b6ae4302ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Lorr=C3=A9?= <35808396+GeorgesLorre@users.noreply.github.com> Date: Mon, 3 Jul 2023 21:32:57 +0200 Subject: [PATCH 01/18] Add getting started documentation (#250) --- README.md | 5 + .../fondant_component.yaml | 6 +- .../image_resolution_extraction/src/main.py | 5 +- docs/getting_started.md | 310 ++++++++++++++++++ mkdocs.yml | 1 + 5 files changed, 322 insertions(+), 5 deletions(-) create mode 100644 docs/getting_started.md diff --git a/README.md b/README.md index 303701546..8349ab6f3 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,10 @@ And create high quality datasets to fine-tune your own foundation models.
+## 💨 Getting Started + +Anxious to get started? Here's is a [step by step guide](https://fondant.readthedocs.io/en/latest/getting-started) to get your first pipeline up and running. + ## 🪄 Example pipelines Curious to see what Fondant can do? Have a look at our example pipelines: @@ -90,6 +94,7 @@ point to create datasets for training code assistants. + ## 🧩 Reusable components Fondant comes with a library of reusable components, which can jumpstart your pipeline. diff --git a/components/image_resolution_extraction/fondant_component.yaml b/components/image_resolution_extraction/fondant_component.yaml index 3ded47331..cc917bad2 100644 --- a/components/image_resolution_extraction/fondant_component.yaml +++ b/components/image_resolution_extraction/fondant_component.yaml @@ -11,9 +11,9 @@ consumes: produces: images: fields: + data: + type: binary width: type: int16 height: - type: int16 - data: - type: binary \ No newline at end of file + type: int16 \ No newline at end of file diff --git a/components/image_resolution_extraction/src/main.py b/components/image_resolution_extraction/src/main.py index 8b0f03314..e1be245c2 100644 --- a/components/image_resolution_extraction/src/main.py +++ b/components/image_resolution_extraction/src/main.py @@ -39,8 +39,9 @@ def transform(self, dataframe: pd.DataFrame) -> pd.DataFrame: """ logger.info("Filtering dataset...") - dataframe[[("images", "width"), ("images", "height")]] = \ - dataframe[[("images", "data")]].map(extract_dimensions) + dataframe[[("images", "width"), ("images", "height")]] = dataframe[ + [("images", "data")] + ].apply(lambda x: extract_dimensions(x.images.data), axis=1) return dataframe diff --git a/docs/getting_started.md b/docs/getting_started.md new file mode 100644 index 000000000..5ada9c2b2 --- /dev/null +++ b/docs/getting_started.md @@ -0,0 +1,310 @@ + + +## Setting up the environment + +### Installing fondant + +We suggest that you use a [virtual environment](https://docs.python.org/3/library/venv.html) for your project. Fondant supports Python >=3.8. + +Fondant can be installed using pip: + +```bash +pip install fondant[pipelines] +``` + +You can validate the installation of fondant by running its root CLI command: +```bash +fondant --help +``` + +## Your first pipeline + +Create a `pipeline.py` file in the root of your project and add the following code: + +```Python +from fondant.pipeline import Pipeline, ComponentOp + +my_pipeline = Pipeline( + pipeline_name='my_pipeline', + base_path='/home/username/my_pipeline', # TODO: update this + pipeline_description='This is my pipeline', +) +``` + +This is all you need to initialize a fondant pipeline: + +- **pipeline_name**: A name to reference your pipeline. +- **base_path**: The base path that fondant should use to store artifacts and data. This base_path can be a local path or a cloud storage path (e.g. s3://my_bucket/artifacts, or gs://my_bucket/artifacts). +- **pipeline_description**: A description of your pipeline. + +## Adding components + +Now that we have a pipeline, we can add components to it. Components are the building blocks of your pipeline. They are the individual steps that will be executed in your pipeline. There are 2 main types of components: + +- **reusable components**: These are components that are already created by the community and can be easily used in your pipeline. You can find a list of reusable components [here](https://github.com/ml6team/fondant/tree/main/components). They often have arguments that you can set to configure them for your use case. + +- **custom components**: These are the components you create to solve your use case. A custom component can be easily created by adding a `fondant_component.yaml`, `dockerfile` and `main.py` file to your component subdirectory. The `fondant_component.yaml` file contains the specification of your component. You can find more information about it [here](https://github.com/ml6team/fondant/blob/main/docs/component_spec.md) + +Let's add a reusable component to our pipeline. We will use the `load_from_hf_hub` component to read data from huggingface. Add the following code to your `pipeline.py` file: + +```Python +load_from_hf_hub = ComponentOp.from_registry( + name='load_from_hf_hub', + component_spec_path='components/load_from_hf_hub/fondant_component.yml', + arguments={ + 'dataset_name': 'huggan/pokemon', + 'n_rows_to_load': 100, + 'column_name_mapping': { + 'image': 'images_data', + }, + "image_column_names": ["image"], + + } +) + +my_pipeline.add_op(load_from_hf_hub, dependencies=[]) +``` + +Two things are happening here: +1. We created a ComponentOp from the registry. This is a reusable component, we pass it arguments needed to configure it + +- **dataset_name**: The name of the dataset on huggingface hub, here we load a [dataset with pokemon images](https://huggingface.co/datasets/huggan/pokemon) +- **n_rows_to_load**: The number of rows to load from the dataset. This is useful for testing your pipeline on a small scale. +- **column_name_mapping**: A mapping of the columns in the dataset to the columns in fondant. Here we map the `image` column in the dataset to the `images_raw` subset_column in fondant. +- **image_column_names**: A list of the original image column names in the dataset. This is used to format the image from the huggingface hub format to a byte string. + + +2. We add our created componentOp to the pipeline using the `add_op` method. This component has no dependencies since it is the first component in our pipeline. + + +Next create a file `load_from_hf_hub/fondant_component.yml` with the following content: + +```yaml +name: Load from hub +description: Component that loads a dataset from the hub +image: ghcr.io/ml6team/load_from_hf_hub:latest + +produces: + images: # subset name + fields: + data: # field name + type: binary # field type + + +args: + dataset_name: + description: Name of dataset on the hub + type: str + column_name_mapping: + description: Mapping of the consumed hub dataset to fondant column names + type: dict + image_column_names: + description: Optional argument, a list containing the original image column names in case the + dataset on the hub contains them. Used to format the image from HF hub format to a byte string. + type: list + default: None + n_rows_to_load: + description: Optional argument that defines the number of rows to load. Useful for testing pipeline runs on a small scale + type: int + default: None +``` + +This is the component spec of the component we have just added to our pipelines, the only thing we have altered is the `produces` section. We have defined what subsets, fields and types this component produces. + +Your project should look like this now: +``` +. +├── components +│ └── load_from_hf_hub +│ └── fondant_component.yml +└── pipeline.py +``` + +We now have a fully functional Fondant pipeline, it does not have much functionality yet, but it is a good starting point to build upon. We can already try running this limited example in order to validate our setup. + +## Running your pipeline + +A Fondant pipeline needs to be compiled before it can be ran. This means translating the user friendly Fondant pipeline definition into something that can be executed by a runner. + +There are currently 2 runners available: +- Local runner: This runner runs the pipeline locally on your machine. This is useful for testing your pipeline. We leverage Docker Compose to compile and run the pipeline locally. +- Kubeflow runner: This runner runs the pipeline on a Kubeflow cluster. This is useful for running your pipeline in production on full data. + +Fondant has a feature rich CLI that helps you with these steps, let's start by runnin our pipeline with the local runner: + +```bash +fondant run pipeline:my_pipeline --local +``` + +We call the fondant CLI to compile and run our pipeline, we pass a reference to our pipeline using the import_string syntax `zRZ`owBT${9R}T#^HMUds3&$hv&L8WXvK_KVI4;vKJTfXkZ&bBi1Z{qejvpC{I*L^) zRiAL=q?XpXqipZ3LUFAtE>`XMZv{*`?ToL5)-TwOPoSMhj$;$#&Xy->S4N&j2;*xO8B^ +E9^i#zUpUo% zc5|R DCPTYaYcac$i8;D3i#0Te-(g+dDGe9xSdXO;H&`sNxf9C zF=qs%5)aseCk7f?GIXEqa8#g#Z(Ft7eikrlOK8)l9vSe6deNRv1Mn4hwI3ycxY71z zIY4KeRH8Cn^ z*2bYECWx*N+3XMP2k(ukI1BQndNI zhhuNLf7u~Gxo97c4#!bPjVrb8_5tU5r~lT7Kq<}tNWq8^bLr!b+Afq0-Az~a_Ev!^ zd~~^9i|D_%{dUmWXmXP`3s6dI#HM=bT|>*Vmp{F6erjsR3yPImV!vEJ6xD0(_RiM= zBz=6@uYFbTbC13B<#5cHLQDMf8UY7yw6FfBVTKvqXJ^Gq{|Z>ax;Xux0s4!jlD+m} zAUb>A|K$(#!iBc}+u^uOg}?8w0frv1o;Sns*fGsJ+g75Lx39d@244?ly?mwlf`#?6 zEnO8#3Q !qa2FX!to1c8n!wp*SL)Dzj*KZawz!Y+2e zia kL6F)OzX?TUzShJ?12ED~`E@w1@rA7X zNFaxImIfGlVCW96${7y?W`u6H1MUvwt*_~>05r{t{pIFBeUVMjae-m;k{d!nwb;o> z)Gtij*qtdVC6&&@3by67;pCw^SDZGq)b70|aMEjM>)3B<#csVi6m=9!Wt%FBD>Yi@ zlpGm954tLxi4o0bUVM4L6&KN1*S<7RTExVD`B#C4vKo!?@lz>D-Oj%_l+GyH)#rud zdP?X1%sGMlyOr(c(*pLE=u<8hRiZR0jJ8it4W&MU*z=-#IkF}}Ibrl$bxJs~RP2fE z{a*wcy4{wZ7>*}%B`y*asBS+vPOllf(#||K0Asez6VO5KVyk~1iWs%-u#=7ov}(}> ztFAq1m>1H+&r)Gj8L;mk8P1$cQ<%9>?_aOdAAL(m)wjP6gt8ia?7@OkRO2=`2~!_Z zC-;Xl2On(X{(QF{5bL03Kdc2RM_44ws)1(N)klQG3H8o87wdy0Fg<>3&xwZa@mpzA z%b~O{!Ek-KJ5YbITCm54DYh#Gyy($lIF0U~hP$b-!bMru70Qx=RdrmbSN+82J40D1 zYI8nZ+*h<86+&4#qGO)a9;i3!jIIChKpjlbR{b QUnM0Nq%rS!+xrxlBT9L|_QXa4QI^ +riI*0ggVtdXTdOYD!$fqRM!#vLNwh;b|})&^{XH1E;uhB4v%fjFwB z_U?`WX{i5d3da-5akc1n(WX+mnEw8KbSN&x9W}dV`#_N!h?j`cdSus+3PlB8_3a$I zn*V&eP&BP|;!JyQoBYIHrhB(+9dO^MQje+wR*}$CN%|``{s*BvDz!1tUGlwv^!8lQ zgM~d&x1F)&a9P>9L^C4q6khtSKBrz9uxqynR2jS`v1>$bKG;E`^6I4**X&E1=kHog z>Yd!0?*ySh^LRlpbTu!2(8g~T3R|kS$EM+UR(mb+ma)w@gV3JUvd1?G$W0rtqeR}{ z#I~n!U!U5XxN$hOTBlO&AWFS`Y$j?+ZN@jkd6*`heBurp1zxr2HagT*i;lCKHwe g()#uA zN^Ggv3SSG<&n&|}SUXS};|VC(imwD7yscs 6Oh5JL&y8XZPlzgp7*Ivrm`L_ z=wnp-iJ*P;((5BTP&ln@Tj{t=@9;gr%&1nx@Gsf2Pr`dvu!Ar7cYw4ufamIG!eXVp zR4;hH{ZmQ3#lib+jHs0tKl^cbF@0#s9u=j%aeI+_w(6gHZ{97o>put>)fd=q0{k(R z9{cFMP}avd`Lcj3MCUy1@1d-ewDa}{9k7qzxnI1tFb6Y=?{Z_HFjWyWv!yQpWby zI{}%XEVEZdnAlW|v)>MdWrp-K1!;R%l9cSQzp60yd-mB|df#HfP8F1j)~sW!ak{7_ zZ-(>sjqN-gV-IsxFMlHxMddbI{(68u`m38)>&^MGa|J#TC?xjys!&*syNUzMFMD4L zLPxQJN8&p|9~ h+4Vb%i&B+re^!~ zOM$wIyzC)SA*qb0+4;g0i|;othBF!D?IA(Q9c%x2Arwt#4A@`L6BQzRXJshDe{=cs z;kYNNRP3}r1sc4u#zd%FNTnz-fUPf1V}20V?x8=1^Sk-^w)(k19f`Y Ng+9#L(q{vuw1nLRbgspAcayGq zCKQ*v`Y#v7T>Yg_g`(y$W9(u<=2xkRO7%)7X0+`lp%Y{C`+_uUkM} 8^1j3RW7}NQ! zdy4z1uvae+XGUD=nF2bR!E38FT6|DaWl}I0PVGuM2W*k3grDPhL5!buUqM%~+twG* z=DD+ Z2z0^iHnPNsbHsOTl{c1ueHg3 zp<}M!fUQ~ -O&@;pNjhYzH0JaJv5AeW9QetD@JQ5>BiZYsIw7 z?vT(KS7^#R3KQn9MIS_RrH>Eozc;*FOV&%Jwz&kVLnl4&_ Jlc$g}7_w9`miwXta =tPR zzo@TA2pI^tKYIz&s0X*fKW+_g&<)zFqIUY5*mk@n6m~>d86V#qs6VOVm|P_+*YT9w zAB4rSPu8v%w&QZ(#-1tW;@Uw1<^+ThL><-0KDa4-NE$JOzA1{Rjdae>h GsGLiJ5Beo>LAhNsE;?^UKmvxzSBS65YC>-onI!1>0b5{6bG-T w_g^{Nb8B6FX*V-hB|KZ2=w1B4X1Uv z1LRrJRNM>?3bL{8UeRQ(a7Ew^n~{*qyq%;T_h#A5OTzo&{cX{)8>BvWUhh|-u$O!H z{KWy #B>5l_#t zF~^C-HQM^7f~ownjRl>>E_%GqetZO<{W5$w&EI|}DAQ{kCZPWAqvHzGs>+4>g u75qP=-RIIT0LN49%}3EgERn1MMsUce}w+I{DTmz9bgvE3!=is^smis*jm z!RH7IQI(-Xl$Hh;_0;$|!%9qF_Q`qSjmzA&X9Nj@&T>IYc!?HjcSvyO-=bx9)-a#H zYSA6`LouzrryBRA_R_iG&AV_s*=?egcdoqN_7`Oy5!&G&&Iu qOjvHXYNOW#ix| z2^F`W?SE&5SJHdYc<%ZFMmAeiD5mX=I&J$&%lb4N@dYzULw7aVvNOXQGC&n zDg-o4eIoe^F;G8+Qk5z@nTTDPb_Zp%iRnG$At_-ZE+L&+De?5n4T zxAe~GPlArP-_8@PTC~L7z`s6CXVNX)D2OuGR+1yP<6ozS6HD|&ac#7%mf+s_vjrYh zDn+FTlg+v%ruANu32JtLg!aL!+HFTsTiv$RaYAehKbg=c2DpBHcS`v1PV5Vu#J?7& z1Nc44cC@(DqfHfD12y~f O)E+r8oL9xA zgNw0Xw@AU#VLFK~Py%^5{PsPCo!AeZwy_Y$uWcm2zlc?G{t4mD>1=xKFi|I;Q?Un* z4}~pQv2GS$BB5AovY!ih+j3+_3#TQvuZ~xo#Wd>4 ++A0-vvSSn1@9gc-k^dv 27M52+4WzJ2c_waI$|`5ns`65_-tS`tMPpbYk63&~YWgN=`)Hi6z8n!ig21 zf$xx$Jm=5;ER+|^-q_rlx>{0Jk*GT#92w5>R>bd|BxVLyqZj7#j+NAv*tc}tmoQIy zW?^`7J97y;PBe7SiepzCx8ii0BPDf fP6ELOBjgzw^a)YaOq9|pWnF^SS z{aDBC-Vsgc4_~>xZm0BxW9CH#TOeYb$EREol5bGfF@deJl|+NrGa$?m6{>vLWDz%` zg#Z3WV&-l&TU+FLb>qj_C-v|J62dc8yH428+}eBY*%D}-?!kPkrZ4ZV<10nXw`z8d zs8YArQ=Qjv6|4~Ng9*t%_o#SEm<*pPA<80NzYsDPio9N6c{Tp1oyXhOq9RrE?P@3@ zuY=#v_*;4X%DYzHWZxENF~!f02&LpxrnJGoiE)Ly3H}GM|Mas2h1h5QrwJLsJWumf zaoH0)7K$oG=1fhtyf=JOqh(fXP{PU^FuCp(`2c8_i1vZ#P>vT5Jvej+v*((4Zc=Wt zNK~e)DA<8QMjURUtuJ12xt*PaZ{b-kgu|BEsZwI1Uo|^U=y^*M1ysM(Mv9K8^BWS| zPW<{YSK5~ZS@iidd#VyX2)|CvF#Z~Uld5stV+@&%KVqPyOo+ JDFv z!T%xBR_<7F3>EGzsU^O 8nXC$l+uOkccY*IM zC@A j`tytU$wLJ VKuUaBDbEh z44pf(E4+>LsO-~%FA1~S5!-8>;RB`<;29ENLnWi^L19#=`DeKjP7fBsE zrpcH|H~#2d%QO^x#y^p?;v_5$_YdA@t ?5 zx{0LhH4pKcujR^vS#q|C>FOCmFo~&k&&PTvEF>F|lSgy@$0RWOiyHYUABu|$?Oh#r z(52ass1UbNq3mICH7XPnyH?m+jmsW+x>7=wUjttu&fKBo-HFE#Md=qXwbT9+g^%Jsy8rE?oa4Bh+N;8bpS)@hN|@Y8?m10NzC~;&i~63t*bWrb za5;>(U4{67itR 6hK3_K(BEcW s6e3F4g5Z)k_u$+HqK52v=;Rl*U)F zZN;mXUSS&vT5JOyb`on^Q_!2>p7ECRpPz Y+m7o12d|>JcH?NDzNePSfw?e`nnBz-?QHe;P zr`%jGWtzJqE)tQSN`HKzu+GplOVCaNJ^3&~hJrh>74OK##3eRSdb{Vs# >5S@jj&vu&%Sd4L&faKK)ZQiur({7yt= zsM*sZJp4@Xo)VUdac9jQ5H^o(vc-bNxW`0E!U09QM8{cjsr^cb%e~=1xll^l dSiWHeogH^dC4w%&H;}uzY?{xFkgNQ(GXr9FR6$T#l-^3<@?m z7id503EEkMMB(!XhM!U9KKxG5ylay^CZJg*wn)^x8`CDizCL4^E%H0$6XO;Mj6%41 zQtH|`N$r_+Fh6`KO{uxbJ`v83su)Lq6=Diu*wDyNx7VZ*-nLf-g{UjCl_CtOvOOTG zL>|v#m}|1jq@{e@J^^2@n|{$cB-98bk|-?fs?~Z~F(&jJ)zo&+F&kjHfV)ZQWEM~N zBdo@RLMi{Dgb9Rv3ici0M1IKH0>5(9sm~4w*M)Xv%LP8~ctAiVo-Gk@3u|_PsH2K| z){YcTPwI??1443fty?gIndQNPi5{nH5tZu$wuhkLxv!%|gd%KP0bv$5zcv^9+L+O{ zmXK7V)V?B`K5b^pggN&4yzu+l7%)E+uwo12+x{+g>ozU+4kY%Rq=|7A2ckVF_StW0 z=L?&6YO)gq?TtD1@nQ@|A1tYt2TStMp3M=pM`VQ3*M3XFJbZ1oiKv!%X8AwohOged zbCZ22D8#*fk>3z|ieS-J2tBBYp%mGjQlb)pxYTYDcN9I=b&ZgVNb~xsF!M _+_H4UD!+B~>yft&hJ_@a4Bx zi*2->+a$TOkMDksI7>(Vg$R$#603 nu z-bv$V67s3osb$+*0#<2kn|^_89l-$pL1vjkB28F8v-4ZQnx#)f^otCK?+dG$U*$#N z(A5|O%SCCe?#(B)UrX7SCT2@Tv#Ec#2{LbBWY>yoU4vKgr7jWg!mKQZ#!$*d{<(^M z9^*}QfrJh|sU~=A8Q}^64!pz;68V(D_7o9bpcQN4>WZ|I7+kf>9u~f8@k%j0xks zA|Xt#?z2Bi>8~a gl=;6MII19U_X_YxOK9F;R*Kdp8#_;wAR4{lfcJ6FlMnC(06G z`M$YO!4&yGrJcSS{ce%RYwr{kiow{wO$u3DT >F_uKqYuC%klF|`lHtOq8HDB@?Q_P&Ua+Tg7u zIg4@hP(ywz%#3kco@2r{u?vJuvhb3hBXont`^c(<5Ijxor&6dL-kv6jht6)YF#;dd z`O(6P_ncdarbq4e{ C9!95b19gzh(~ zRfAvbe^bM+tQGAe9Y=VsRtr*sKqMLp8$lszz>t*Yal7qe%SCmZBfiLUiG&Uk6m(p| zA##Dh-M75Y@nUxq!M)=7Smfkt*iR*RbbatfHWHA4_hVU>y*yt^ThX@BaW&3zO1>}l zP>zS&x0K*RI?mP2a%M?!5jUMj#y^@8u8VtEGRMU-dtVwk_L2QfGzIgKq#i< Ar%Rfw{`6ESV{v#KD;Sw&RxT7WSEjT>IFjFUxL{h3 z{Y1xYbtWBlpb%q%n>t=tz!DlK$Xv55brjbzj6P@y*JK8ptSq!4;aKKazZ0~@cxt$p zPe_<&%XOH|o5%0CV_a# 8sT%+ZsAV& `{^XMH72OIF;;*D+P^_BenA+jAbftlE4iU_E8~R$k7tg zf)?Z@ci=o+W=Dv9Idw6vV+E8Xty*-G=P2$k-nWh=I9t@gz?+Q&dr8S6>U0F-C3FxI zV%RF!E>a%5v}j`l2@%k!$F>pIdl^-}C-THP+dxEpprU +qp)k6B;X1h!@c#K`B )>=ub#+hM(_-%> z9}%RiS-wl)spx*&ZK0HeG?M`VdHR*X>wSTCB57J>yzL?w%aFRWpu=5IYl%FyDzPsM zvsE7j`|pJC%cf$n+WR7R?%6vc|L%Xvf#_6Z&k4B%%sxeNZ;>TXu{|WAR-{rqD4I?k zvin43&Meu@LR{x|y`V8nQb(?qf)kE6zEX&PyJQ!N=z!@ l_2(*1J4BlL|ZACa5i`isx z8!6sx@vD9yb~h-zvDj-=V*mMZ_ 5PO5@ca~hVK-xY@Qfu>CQ<0J`Ki;}> zaPQk35tR=^ac^O3HaXcv=&N_#>%X1^e)M8nH>b>3O`y`&l9aUBKlirAUp7Jw*!yB% zbdlQMg%L?+*v5~GC$xJ4k=tAkN%E>ywflukgYk_s=v^VDm}Z8~<>GxK5~O{J&&5*M z8G)|JP7qIuDg?=yI2|K}O2{-?gdKIDj>j_9Zx&=} rEsAP(f{06GJ%ahZ=qeITtGFBG5MeK_wy3>0co$Is zY2{+dz`nnb8hQ^KSd9~Blk~)P5&QaImOKfWLedsS3*F7k?MiHWDeVc-!>vSE3cm1( zw)$;Jg)DfBvWXOuCOhpLqCVc!KHoE3d0+oI-rf@?*&aN97iM{COlZWDNNFOfEX1T^ zd9Y|QQM+v0i6^Dt@5ki%jSy2k^zTb0wI;0pCNU)!%FKH1QfanlnB6WcyGQp1QDyK( zyIN3Nz4T_gRMhQTC!8iK*Kv4Thj8mTEhIO$Oqw)p@VuE8OKxo7!+<-ikj07%s9k6D z)sqUpevWvC4`j1MU4&W2322rKpSuX#G22VFl`!q~3Fwx>4${k+SqWR{5pl(=FYXTe zO? s5ro$KZ2oixvrOrhQpY4ku)l;9W3DX6|Gg2giR@?OYmt% zlkF)SS$AVg6s3c=+BgyM3mR9mkUrOgr8|ln35%(HT>`r)5Ucr7xX@iJetBPjrA =C)Xa5IDzL`sEPYbi9wXr=Vc84O<$>n071KuuR z{qvOrc8ido*l#z8Sj*>T>eb@uB+-wz%Y~EZO=yA`b9SmUHiN@
#nJh5#gWaa96 _Y5jG3sHrf&Zm7rq`H5{ukLz1eW|hLA0in(Qwk0^&Z_ydqA5FZE>!csRz|pG4UN zFtz8zVQ!h)@1@kb>TGV)ZjVc#$wqWr%f$>jO?HQfY*qrd1-ni{lzPI$Il}V5;Jv9W z5aP)6kTm-cNSWh#xfnz}651B_H`z}_tSBwofg-kSxyR;-m`OL;91(Szd9{cP&eUd! zW@T~kF~SZKt+x@R?5+7d!9v=BeOH7xl!bbQ@wSeX8BELE?`LaD@f|HH_9bC9QJ`kV z_UZ27Zo1#W9bg|xprSUiGyf`uyJ)Kggj!e=Z>z+f0SpIWnoHu4{K6b#;2vh4-fs qIv8P4uwomOcA>((A2*EGKZj8CHe?cy|aUa<)#Mv@N zcY7TzWghjZSCA%r^P;GjHrXM9Ji=o0CAkyblND^1l*XDfOqUtC; MxBX+O7A!0oVE%X)PWcQQ2B*G0qQ-4wDYfrengW^eDQMs3~IeW+Zq-GK0v389( z d3*@u(iv`1KClFr4M zBkrzq`KOBLUK=}PO_V|cHT#7&{;goy<0 ziLW1iZRhZ&jZJfhgm^eC2Li+OUNX&Cl%(>>_Mi?U->>L?k>4!4Nkm$Wf68UzsLgjL zyj0jcZl_)CS0WmKJ6Fr%Nn!DHmjpKDh!%R7`A{hYmRa>WH^(e|X|u)nT`M+4 $swDzc^G?wCZln?!in?JB{-$XAA(DI_h`P7|<|Ws{vOV);#M zCy9C~I$n@@4fwi8N${Z~OJQTfVrkg^HXs <)B@`I>uN9=(Eaoa #COyh76=Z9eshsCa;FmFxI9HejWZBj&XA)~Xs(*$A zQnqN6Ibs)J9iOC9&&fPWK-z>Y5U>GhkJUxKAE_N7V#l>!9g|zgCdeW-eW=##FkxTB z{xb)NJSItZ%mth$DXiP&B94{B-gg+0qFUk(rqni*kj*_)+eFNI7S;ia=*)Y4d5L{P ziaX0=`?xvWqRt|-rME<+vg6QcIQLdcWNzk}41W}NCoJ55PUIHM(*n8)yI+85w3}Ti z8d**|N7QY;EyOQj5s@Www_6`50~gCt~E|y=wNhgv@%6>~(PuX~Q*pML4oB z%3c(3p9Y%jIpNT~f4JD4mv+AtJezip0H JYNwho>*j6w_R*HeHnYhN$e*B+MbbHrprZM^d_JT;m135sOod zgu=!jAsCVqnsOuw3p;9rcpe|Tm0;Fr+f>Je!5e+cP~K`oNt3f(4gbAkc<0RJ@UbZM z AkY%F0wxmya~!QC{siT&XkVPP`~_gNhJCY810Vu|eP96iA< z+u!eONyKcH*y*BddkXHXCv8aM7vn}hUYN3%2|ZVAwOolSY}_0RcOpwG5-{^ow*A4< zqCPj5CJQG~L3a_50TA0L5!2Lc-nOL#k2-r!#5W}nh-SXwEfFhVEval2mzar&CDTLv zUsI?N>~h4n|3DaK6{-DA3MriSl7Nlic&`_PS$-f*C92|{%~euE=~i`4Hw(w@X%YM6 zJgQ?dm^=V?k2uEVNBnb _itrKGL4tWyk$D17`_C3V`O?-| zQn7sKQ`qZKLSv!2O%oH$#_6!9@Ug47hvP*|tUOpP Mr)1HDtlzW^q(#Z#(weO+r2A;^Vm7$81W$Iu zHIIj9tz4qd_= )ZET-s zMG *Q|mg6R!YbIro;iB1EgbeKAGzNN$ArM z`u4}fxRR+>q6t{*ZX-V`fjBj<{ WiVL2XFp!fk2~I^N?EP**N3ql0m+d+G-nKSJIEyLX zEJ35)(m%NAovVYl+P*qtN|D;=i_51<@m+kF815r(rTbz`&zYDJot{lnIbBPaPctV< zz!;2dFA=A6adRvrnAEI@QgKwTFs-oN#DrY@StDb`jLKBv9||!xxEoswJ&ldkBFC*b z# %I{nBS7X9@SaR&V_b5!)UmilwX?0x;mZBK5T8l$mUV@RY4z7`TuSoDy(Oj zr1pu>$25NS2jWgPBOAQY^NZh*MDoZg9f#y~x~A8LC3YnAjL%o3EW`%;y`Yn1XBu>D z4@j8?Ro&dWUrHlegK^mIlthFjwwp!nm5c2<;n5oBZhgLa^p{n?0ViKfK9J;Y35)*xqy8ZRa4KUGSe z&79g4Y2Hw)wvVuR+}LK@TQrGF$1mSrJOMj!lmP#sUrGC(1do($DWLgxvT@0`#NAxc ziftq;WIO(@A;bl>(B2vqDhcxpTP t*|`1doR;6U_3& zj-{fJSe^F>rn3*?-GX4qQl%G5VzW~QJdp<~W4lZ^r?J5NVsT1yJWVi?VDgCqmPOeK zg3Ru=V}vF4vrO$MVNc|F;BGPgOj0)u#v}0q67Ui-h>BRnBCkT@{tRYpp|w#84F{gkbxu@fg5O-w;Z=8?w2 zLHm}V%pKiWFk|8bTVJpbcPt0bfweEIhy@b%pON8 bF-seA-Gx9d1; z49f5LKoa??OozM=D%krH-Jrr=dQa>Q+IIwDd0h4sD8~OKY?tx2%4Q5c===Fs>`f`2 z7n}v4pOezqooKnRUSYlc!=h$PpN9lIF|aZHSSn>+*vyOJ#B$Lcb2tTc&fqDfVeqs) zmI14b6mEu^n%yd)#>muTHwhc}uxi&zAgFK{`^(vB5^(EVzaZNWjuF0B!t9uL>k$>a zsva(K 5{0OXF+rdu%uYCZ7t%-+@eVWX4|%hppze3v7LnebNIxuV!U>BK6A8q=wADw zjv0$F07M0zF5%vo?IiH^2)?AYfrMFE-qiZS*^Fhjj;PmHR`~*=uS)S}WU`~scA+-1 zEl-gYy${5MbnSIPJC2gof-GMsCn8~ShrOyoxk;#PFG-s@Ws I9h=}YO zUsEz)+`}Y}Ix$_$XwTjh?Aa^ UyNtFuf+JXdGfZ9&W9-?fD)zNS)*^B<$GeFi zONem7`V3#}d*So&B_Vkw1)`%ni#s`Ylz^Y(yIT<%lQKKo7P5y={H`Qlp0t^Op`SH6 ztY7+;6t`+^6H&w6?d>R+xC)VdLnqA0o@B9+kj48fA{0?K-21Se*tco*6$R@`XjwRX zd_b|vVhF~1Q>ph=_Q5ux(vI}p`cd|GF~&3N7n$O`E2YQHix)+{y%t$#!hYW)*Pa!+ zk3F_$gmsq8JuP6 d9+uGJ!IB3= z=|Bf&* {ol=@ Pm^D&^Kh z_DfM7pRo%i(Q){eIFX$vrLp-lNiPysT*_d1ifHI;Rzb3NYc`NRG;}v^qhF|u?~;1* z#<3Enk>PT*U~rMA!lpu;b!0n=SWD`gNDNrJ6wLE%E|3epG=m`-3r1}qMyQtX-_ z%^w7nEjF7g#V?-EL0TpFVur*f2x)3H`;jQ=r8ZLW$4lrVzjzlx=*EdcNa>; 7#|dkzQhJ3W*dEOE4jIznKZ~CtHWMz$RPdd5F0FzJciJ{NGom z@(?tY@N7@}hhPS+FR{0Uv+;QIk#C9VYkigI>tdf~r1qk4!QeH+!1i5S>Xj< >J#KN6xJ+7-zugrQSOdWh zB_c8`JbrnR7#AInY7=@K`}qB9oDk<7f#O7+4SsguapFFpVq>c<7=#8f7(|G5V;{ zRuXvsv@6Rl#Mz$IskMu_zIK>k3h{ovcFz7{TqN^VK9?^#N5DkNmv&7TH&XF^G|D9^ z1T~^XXH50*$z)L@s%AeDH;-#>w%tY1;2pMG4kesYIr$bLwynz8q|Ng`e0R4^q|wMQ zC$na@u{4^-0^3OB_p4^>3mcDUjcgqWYy;e#V(foiLJyBOu&;_{;=ox$kj)r RHj>47*VIv7loco zRj@fi59aaEQDF<;e71m<25fBSL-Pzt-oADpWz)qB;~h3tgjL$b=w7pNQt)p27KJ|) z&n2sQL~7fLJqN^oAaeh?n+%&vU}dyzEFi 7%Vh5-S0Hf3-Vok`%Vl zVC#Dk7dQK^drD}*ejP6;58i9L2@b%U7un9jNj&qB1{2v%Qv69V)+}On&rR*LQ4;)j zyRE#1ge)h8p~IW)Hze*n&Nk3-wgqce|Gp~8H+Uc}E~Lk5RM7uz73w!Rh;>f|%!R(X zeX7FjVeqMaEXER{hI}YwgZ+ZNC*o4$V18HV{mHmd_O_U(*V8UU9(o} >2w`7TwndFS! zE%3!PxDxF)2@7!^SL{|{Ba_>15&J@-Y&^X}3hVgshyF^~n58t?MG```?ge7@24707 z;uloAGo?+y`$b=Wx_IU7wou1zJN64EVJk* _Rr zy+NChtxjmPhYML($E^KOAwQc%Pd^dPwF7n7NCdGNVv@y~&WpTlPZs!tKAE};86{Xf zTCyeyt)7QBTEz6CYFmqVVpfIwl5 pjmOXjw{s?x?zMVLx2N^vh7aT#(rrHmXi%6=#4ELKbQtcacSxK~dI_YI-h z-$?KUr->~WdZIVo?xW(UiZ?r_sf0i6VU=}Lp_U2Q^^B3o?iXj%mz;bGNyJTszO|9v zBVw^Ro&pgzF@qY9;FEAb!uWTShy;7DZ~UekBzb}x_Fv8{GqGz`Sk6+nuMjd9#KgQ< z$li!dDt;-%I%Dd7q7XL@-#SNpFLt!b4(0*NI`+qyRjn@cYKdiVgqVamKGlbqk|bY^ zjd>|#je;E};J4w-8RlkoyFN58% 2I=8qBfuOlx-U^%l2?m+ZN)mWQ#TT zxspW)vF K(Xbbm!OjIF)IKB>WvsJyF4DpF2fz3G^i zsniYihJ(f{Y?h1vpvrvTS-V%nrxfgFQTFT!a*f0ov;KIvo5Xl+{gE1X4=aS+V!Kx5 zy{xsqM1XsrN_w%d%({z nIAJyti(LVIL zcA7{D4t8R$bPe$QajxF6Qdn`qHus_#RAp>H;zm+ #0<)cVBis<&ilsa3@U zMyZa62`AIj`@=VB-jaOLRcZ$d-IOEsWS*G3=@uQ+2XvD}G%R>zl1+MiFx_1zWnCk^ zC0WaoM!Nk##ER8IqihGMjAI_?-%d;iW#1Rz&8A+Fts;S(Zr_P|bMY)()SC(z?y@Ib zQ|C95Hj-bpfq)jwlx1CEyRQlT-*-cUo*wtp`F$qD>?J;A{}%JqTRN?O34OPa*xnJg zv75F1S=2E9+*rz`$^N{WoU*a6YOD1EeB8s}kDtV5c~ylBqm_vMbESk3`F20-^U^Rd z8Ov4(wJrY+R2=t{m3GMDh|j8gb~fdGO4yn`Z+)~qDZ$4=pVdAg!FN!ry6gOLDI@!N zJi;)t2BpG7P##e+Pq^X9hqg>S1G8bNz`GirhAr%1mTikgy)3?o>~>-1kxcDoaU+z+ z?&Mz(+(nO9U&@FP)9g|Kj}^Cz1yMF(w~NHH-R=5I(UdH*cD}HaIcQ{O3-OWJ>4I|I z9~F_~zE~uusI1`>u#?2SgI8s~$`d4{#gfOnj>*~kkWM>Vj2VVQ;z%JgX?A82k-ybr z718S_pF0e0a1~XO ~q4M7W?kqKtgB*<(n+5ff(9g^ZV>99mYW(~ak zSEr1eT1`8fMv>z#rHxMEGeM6h&VDKy*+`FXvX7;(JqrskM43qt4YTiwH`+c_F?(4q z874P{J#RYBf{i-IhYdn9?})joHG5suM-qH&tA(Ue5SSfi @-4;PyI;} zqlho+vfoP}3(sTSIX6 v>k%>AqO0l@x??UI%MO!5-hSv{W=rCJVvMxaGb?L9sgp^0PA$i* z>fW1e+J(7Dj^_lO$S9LPe{99+wx@KzSEFqYA&)ytsaU&;eS65nb`mxo2Iybmuo^2X zSX!kL-$f#}CZRtLeFs6(?=#OI3Ok~O;3y$Yk$u`lZuW6)wh(&=h#HXd^enru$u`po zoyB@5F}{t(L@F^THWa$cg|2f=F{#VGy5qggL+?R2hetpELpa+XOOx0eVjivg7afNU zM{os5naj?uuL@{4JitNZ&Cynh_9v}_fH<4SNtrZkggqt=gSpop6%`mO?-vkWqz~bT zES7@6RvFx@T=AeGX54K$g9o9M= #J+R(p@h6N6}QrB zCbpk&5?lW_GI(-{tP Bas_=iTz!OEsUSy zB_Wl{pS5GpOUPUXHGeGJA0@e2#%ynenAuFphD7v$B!LXr(-IhzyZNe*i)nART!3Gs zM9*dqNoZxlOo$3YV5ua}kn`J;3!WK^jYVFNPT?o@MRu>yr g<7CXGq}dPbO76dn7K4*Co@5Vbz=@q(@;07j=5t zF~1`7$DJUR8{;z}np!TAJ$@>WAw5o~c&5Kkf{&6AFK9S1e cc z_&iBGK$!&yqKS-ma|9z95oQY9?&J$j7Zc;>@fZ6E!vj2Rii8Qo_}Z}*b7ABcwnW)m zXZbT#i rlKKeF z-&EYr`T`vA-xSlIlkvKVu$4|`@CtI%C6p8ThyQ##bXQ-@B4%j&TzVsTiTCmoDT6oq zP7ksDTf%ItuXLcq@=+?(zoho~erX?w=!S`T43j@r{XJn)W+6zC7Vq81-=(&(9t}G` zXPyCb8qSKpseJ3%b6V!L&e*qQ&a`2Xyb*?5QY&>9L#Vwi$W|BfCI2eHGqQ-32(fag z$ JFPw6(_rhqw|JtC-A*|WhO z63P(b$%K;F3Np2OMOi{8^WM89?CT+#s@)}S#CI19neC9eDPnWkirpdVirqhQo3IaC z6(5dpdS;p2BpkWoSi4eC${y;OqdS1v?L(zJ@igkK`)+iXNt)N%Y8MJ{qiVz8)1*=V zF_TUeG7aUsoFbf1rI%rJiR>gvjpd5W0#1}dY73+B2}1m3bk3 d@Y-U8 hN8eOZ1 zv9@MYM82HECW#n&hJl@Shk-GM<%`^v2|CwT)|G6$aDHR{JWlLgv5gh^X5~3l{dvvU zgUu>sz~v&25q8l9?I37upKBw kSaMhxF?Arn& z6Fs(}sCoBsyV=^JNg?RHmIQy^z{)#qO>uz>XP<2r`p@i ?Hk*mZw)5#}xOEOoeT%PjtqJ(`|Wk<(~ zJ2IE%Bm^Y6M8DTLY?Hvne^%H{^}_)pWZmm9u-yyG+AuU9Q86?7dsduG?(V}<_6w6a zd@hpsg}(pT17dF@tY8tJ%O_*&UX zBF~|uqY^R`jcrenKjoh6FySQ3DjO%-dcyQ+Q*C#l8&!Oe5A9>6wbo*P9PEx_o(0a% z6e1?dy>a6e+e@38q>X1g=gM$EGPSLA8nLdDeOHw9*cLi2kb=Frz`F}t&o{*(v^QYi zkkU1HOQp*;6w;pDue6TX=j#42UHh^WU)sZh@NW&zUH!Ree-}5LF<7jl>|JR?m;L|3 z!*8oBWmf%X0lz6f?!n#lx(Zqvz7bYEO7Ut=$M~9 Ac~;7_?D;l4C_w@fC68|YM(i`~o!MYq?AvN`v6hQ@n6qzP z@@w%IHdk3<4@sSzR6A^`sJ#5nz3qNcBlOEg7E7c|CbR860WMivEZ~yx{ju ChWrHJV&ogPUs z5{M!4Jm(99R9RZuxkA3%g#;lU!uxx+w9IQm;9X4R^VggzCZ@ncz`2pJoh)tWS3H|e z(7}ctOqYeL7Tvb$+GFe}vEL7Ro`vGsS^nrk8<2p_#5l@qvua03BU(#sa;Ii4v3`wi zqDN iLjO_|1b9<=Y$wq)JUe3r7`dI+EW)bh zO?DKv<2As2-X!)N+rEH2nUEK6uhJRW29G0z?kZ^XEZa%){J!vb_wP%?|FMvpy_J~X z;qiqpD0Ghm;qnvweOZaB^Lv?>*KBiPr+2q3O)c1Fl3LliscRVfd>OXq0&J=i+yO^` zP`HopZ7^UPio+fyd@I{PS})u9uu_**fl|6y3zOQqLKdAce&^^LTaB`>t2B#?EVZu< zGybW2v76SC!eS)e{j0*VFLUB)8sZfvn(3Hi6->1MZW{V)ykkUlsNT7PGY}tAG%U38 zSXew!_8+}wX6D0AhXw8ckEF!~@da%+-)T^ }0@ryUEyxwjXVUv<2cZ;yQp4iQTR!?dnW3Xn|OY)6C$UgTS zO>&KGy^D68&PaVhOio$))%~9NG0GO{6n4m?dbfKv_tnxe13ELau8>5;iWO`kV$*h^ zV3PM%*&bRIJ6Gc5FYal2npC$kvt+7MrQnCLQv_| NKJ5J=geBu3UJRSa6 zskl8@Ci8RQ#5$Y&93}Ei3B8i^OK7B+uywNpk5FcBdml%`4?(S|eA29G6X|nG;_P{j z*v(>3*(7CKNJ vKVb-y@-*&8& z3VH7p8!hapvcvxNqUo`(KKg->fG9n+55(V> 7as}eL*v4L{r8)4h`Iyi)10yuxWn9d zW~cir|E*JI`b3*{UBHO=SR$?#`=@}#dQ4{R!<@0>S+^m~+$a1Nf7kaVrde$49U)=X zn*CM8_(5$YC*G}$Tph_WoMafMF;%K~*!eBJj4Vp<4Pmwcj{QYAfta*=SDNh4lHBR= zx`2@;+vAlLw~|5z;A`T>BP3IMRf0!ONV$1g%=fXE1Pt9&P~w&^O5uK1+lF!4q~T+> zw`5RWsWVxThPN%pY-;E6!RK^BN5a(Y526y*OJYMg`rN=DLCfYR(z2&$JTA)SMaxCL z#$><-g?Pk#n*qOH4@<+$C^p$r;Yc3+cDJC7!Emu4%Ri*eE|M_Y$LniExGH>$LpqhK zB++nuaK2I;dmFhz 6uA^S<$v4U=YFsU6SoK^9NwjC+XCMp$MAa*0NY*itHTWUQbexsW*In((f zS+~mlxooMm31?zHxU)GICT34;i1PB533Kgm5xri`0}DTua8NRQyf2U07$$#&bIG^9 zv_o`qIVPLzU{RkIT^=MQ#ocamL|SZSGo&!vv-5|BtITfsebY`u~snj)J)FqBhYq zGzFzp1=BWNXw!zK6!1ZCl9?pa* Qk`nsGc^$m6y;88B zva4*_R3z!K 7boPL}OZk!{7M+YSk$Vcq(S1B-w?A*S7Od$ACkQnIvoiq{K8 zlGop`rwJ8l;rkQ;;u$GDBSaB_cc;`K3e4J*#P+v~U)U2xxZ&H)r9sS;_v}QWm%K=p zFN( ^7ch*4YDtV_|VE|8E+@wr774U;|2JaQ`HNz>gVr`9BKJpgsh^$24w#kjM=j z6eRhL@H)=Dqb;88uf(|X>Oq0wPC3e-i6F`e4V1;~r()Qah*c6w$_iP9!X7c&pi2Tp zPDQOJb)EO;d%~j}E4Jg-`i_Vubv8J`-Y@J%oqGjRw1dAS-x9N`Q@QJ#B8EJ8nm=l< z2zt3>u#yEVBq=n7q$rJKf%7KHUlgw3HojYch-=n`&kI)B$mRw7rr2kNh?;8JZ9 ;jkUB<1H*nq}`ShIKq|dI~mFV30zaqAzL->t?4MH^SIw7np7#Xe=Bv{x! zDM0c~!>$qHp-kB)gi=Iq**+%B>4wmTs|9^4nzG9TY1oMA ?1-b#?1y#{=*_>8 k;7RbKtg@EyQdBUBVpXrY8O63}(>tN~Y{Z z8quHX4?I_J6LE3R5E#O-iT3;yVf0)os0pnkB >PLwo6m^0}{|I4hY{c0;OppxC3^o%iL_?<@dx*rfLIG#+ zf1fN50oqT~{v*h<&tMa7`hQE}0o~lIe+j#d`X2)5`JT659&Os+#I@soyzF_V3Onqt zSx#wA0etCnLlG*`5zgPp-;3}B5Z0RC3b(MN1Xzci8+SIh=+~0>@}K=uhz=PI`>9Z| zF-o~}+;F5f{zN2p$GYtk@(33Dt`LJ+Ump;xuw8vyAid~;h|^*M-Ya3XG*X_(kmg$L z=7`_W06$*Y*M#P;#x87M6=a>Eowm?eX)c3p{3~CSgt7-rr+_HDHT!~uo*AZ-(On{m z{BpM%VJ%{)?oqBEnX!B7-G{YD1Ljy*?iAqBPucB4O%&ad?H2TKjua>t%z91>q$6s; z)U@5E&ph^GMi?%A=?N)LO}kY?c~O~4HwmVU{!@~wc)KSdl1U!25l=0>Q6pJH{e8PZ z7$wQQW=x4si}L0Cx&Xuq5nCfjtAfH@hDDyk)gi-PZC47(s>!Vi&i$Lo^?JER9p9Lu zwew|yTR6UOBJscA5^*b2*DJo}VliG{*Asm%5;0f8?MKlmVXX7+JZWTxE$nRjpyZs_ z_) hu$ zJZ<)LA?(vkzS9K9SkDS}vf$p^dhN{u8(IJDjY59@O8ZTU+TJ1BeE>Eigi#}dZQcNF zS|Z&1^H;GCPKs~~p*4htIz3hDBKi(rMn+0SkR^siZ<`=$eXo^;29p15ETEUrA;_3E zh@vQfK)o#?n%a8$)&B^4$F1}PUn?dx1S#3^!lVG%aRTez19hwr>JWiPLMuC4u5A&+ zYgP4p!i^%x0+=1G(uB%mN7sqfh4g+9g#nv}M?xfb5t~5R`w}r-WbNQ%?Gg4C)6EP$ z)9YoDbrMXen=S^AtDnLADZE%*YSGs8aG8TdwRoSOBS5AH)`4dVx~-s)VRP1=CXpxV z&hMPE{Y4C;BF$#l`Imgnd6I? B$!w1u|l}TsVza>7ZGD_hqZql z(AiXnP-5&KLUlH)0Ok4^%MtF%qWw(+*0>J%OQE&yBYjY4jGV0H_H#kX;o_ N zZ5s9s5nMY#+Q~h_9tUcBg)oxOUx}MWctgn(UhT`m9@6Z3 _i7LNa z1KJh+m?K{h &u7;b;4lB?2QsvaP-Uww4+6OY+3~Wlr;r55=vLK zhM)%wQ^`k=GYb8Bgc?lza)3%}{(7$q5)3od RkBDCmw)e>wy= z@&=qFx Z&HC({XRi$ja=LY2 zS=(!dAG=c`Vw2=pA(DpTm0^SQGI~83Qsuj48+8S?xD41O@o5sLVuO ~M1(uSiLwwJWY6Z0?-j;Y#5=fH5S5UZs>VGa) MMSw&tXr7U z1q7~j38I+y+Dn8e`$uT&iv&5hcomLPW_%I&pS%V$mXdzQ$p>oXv>F2liZvlE;(W zNMWy9!!3TMa4P?1PZw14+j^!}FgKqj`8d@CIs68$lb3alJy~LQ_!~Sv!uAt`vR7w0 zwI_%mjsRWv@q)xHX0Qs$V K z_wQ`i1Q`~*R jE7hh?4N=Jb+rflU5r |G=?qJ2io{wmoFEA}4*aOIpq zH2TT*YcZ4`b-k}?4~p?eYCjjMHTLW-+0O!c#Y2v>!bkC!(UVHhH9c>d{CyE?(Hg%i zP)O#c?+8-p)Q!0h2z$rKn%ygiw%0Z(1yimSN9-GtZzh76i5-}esC`vJ4&At`3z=}0 zfOD$kR6ZtW;Vwb1cthJjK@uKqUZ9S@AOIB^d;#M(-yt~~6FF@tJ)aZfm8Y6+6$xfz z|8T$EE;-R{XP|QiUODGp&D|1j@FJnN3Jr|UX5i}ubLS=rJ@>$)&2A7egvW)Wr64;y zp^^a!?c-ew*iR8J^w*|cr}3S7MFqQ749!yQV*;xh48Bq*4Mvl=R0OB^QbxxT;Ksjp ziKHoZ;bv@^JH_-ZdqrPH*pcnS5;4CE_8}pU3<%&M8q4hh$yjSpQgE&W Q|aU9|s&esKFUPv+!0i(Tko@6)xNKtCpxgzj_EWtJ`Sj0O;M+w1p zMP7TC@C;cT$v| rc^@P16OXO2+(%PSTbEdV1`eN>RU#?@HYry0!ta4 zlOiz4aiFYIF}~LtBHc>D%2O3an`F9F1iNaSoVN*)AmE9jxK72Sm|m8ivWTX~ O772+iN8Ea=+endAW$;>0$=H4la|V zj%sa(3b~W+6*y9bS5dx+LmJvtP=oZ|?UQ_%%pLx)z;&7iE|w5wnbg35lr~}!?U9tA z(}ulNsPFK@uwJ}Su!{+V18;Pq+nz6ujErQ#e4YrmRNHffI6JoNIYM|U+uhTjEhbHV z*Fv8m=2#*FYxXojY%vs72!!*{JFpxe!fynx%YMRa!tLycV0c|v2m)fWV%_lcv7j)> zwe2QP(6{)O_ILr0pQHVwV2XILM+PL`u4xYyoNY`WX(mLK3@qbM>L>}ANQtKu@~Kae z@P7&84QpgX^&dh$DOe}5``iB}fMtyIN};`%pnTujYkv}fZqLg2JHaB>gWm`!kPi>9 zs3ym!UkYsSsDliBA>)qPFC_QmCi|I?*M36p_^B{e7Vsiv>|3}WOfo}ZDvSvlzh}3< z6Ak;Gh)C$70<$<`l&0_rHSGa0;{|5Sy+WL{Xr@G JNd@vUtPqTtWkmE$rDiot?bEtoIBAG>op2Y+O8_3$HXhX{C8UrbDqxew9d?a4 zv}GnuKzF*cqqgkh8ZexKye}0jjPs3`2n}}vDlZbj5vhes-7XZ-pvodY5$)ssqH5lb zHV`#7aT-h3`oYcDOxk+{DNx$9bA+&q`rSHPIMwP8#KPRS+|HEHA7#bfAxNoQ`b!D5 zyV5u9ts;inM>~6q2>&5vn-la}JwAzdh@hoj-DZSvZxyX2w5ELqYY6)?$djxKZ{v $u;BFhD+NRk0Bc!?s{FPHF#Ctpyvr9$4Eu4#ROY;(3mfU~=s@(&h%SzrF_ zX^!ov#$JipU_GgGv2cq&X^{YtDK&e(&{(-r$q4TQwi7H-Eqk6upt;i*S7?w!6P`LU z*TgWTXNcKgleA}vbKTzSDhDysn6sx#is9BBH08{6dEeNgJw+otG|)|{2a4cTpC+sI z$-?bwIJUp=;Y*g-egYfZ`1S;$wIwWRfhJsA2}CvM$7q~KxKUBJoEh!}R-i{~z@BsM zQTmL*#yj6ULU`rGG%He%{r8C-O~9iB>_0->v2-A{e~EFE5&cL0DU92r!M6DqVd@)E zLP4lJ$FdN}Q?1$jC0y5>D)>D6tq9JK#AyCTke#!h(Xk$N@+-*>+PrS#)^+{%OA%dL z3e}4JLXi5&xZ%o~@LkrkhU}*rk{U3k{%SuF)viZ4Z9#aI>W2MTat|3R*^dNqwP(QI zIbuJQXw_8yOfVm2bKes8NesdYJ8Rz&;adXF<=etr HMt_LXGCF~*MWL683I6BvWxKl)l{qS=F)E2YP z3UH8fZ_jRFYW%k*PHKk$-X; zG)43qsj zp@W9{w`_i`T_c=)f9y1#327e}%kyd2RYF^~_Sh8ySn2smmkXxXp>CH6qgAEMu1iJq zS4%s1ow+j?i(&;V+eJdedExw_d~YzxXi~6`YD6da6r&~Ck|Hr6aMHK;3b$V-ZqNB* z(3DB16bjF^*W*7|Y^syjo3S7LiXQlKjz-XO+pVkb7WM?O0=e(>&k;ra%yQGy+0GK< zImsE}TH^>1!Wqs>m^L()#mnv6rweauV7xy~sBPNu=6$D%;^BCUfm4JD(#M!VL{iD# zB#tx9u8f#Db)PxY5~rIrM?Xz#it> DK1Dy0s*tyJ#vWc4 zZX0BnBt >qLwfr)kjmTEY8w-~Wz`T0}e?C(-aI1>nY7oOPMp6krlxEN^Sr79lz3J+OMS zNE9_PjxruCct-Ql5~EewMuAiaju-%8szqR?4w%zkGUraSnr+Y(>@O+WezgdcG9ugP z?JHtEv8HH3wn_wL8m(Wz3s+4oAHe}`M~Fkm;KXFF79O0kW%^8kijo~B W_p-c<5{}IPwDndp%jsNGOOh? z#E_mymkps2KMEWugh@R *grV1amyxqoQ7fd;18p}lL*W*gc&?W za8u15q0iMtzAHamkh$x*r1mfoBdDMO_ *1g^4{{dd2P9<^#=UyZ+r^oxCV|B9og@!!+A&@7_+P#u_q~^B-co-C=66!l_Nd}#MAJ{Y`u1{C&9s&2n)a@&R z)I@gUd|>Vos?e7uK8Cj DGVx#jpeQK)Y$B>^#_rpDaYN{$nk5(`3J z_{Odl@@3iWyH|>6r!)}xCj!fL3gII%LsW`P^xTrm#EebRqtY%FT+`NXdu^wfW6>J@ z&$w6wRWw-ASaE{E2+geth`Qjn>cepX=c)?@2=pbz@B%^f&e4qA)ZxD=#00<=?0p(M z&5rqAfpm7}Z^1nyDrGm7G9FkMPIjI~QGJ+K 1k)@Jk>r3$N=O$lR-e1ksYEUOf3QjlPITCWL_u*u?MHQ_FI zuG==j@jW{+vy2P!qF7154|4^3z2E>5OvKinB+SunqG2ZrHXFo+Gj)RSB7*$OfjOpE z$tCj5{dKx%t~_SP2^2B(H!~#WhcoW5q||ctjEum?V$SqFbamUPA*s~>nb5*00xYHI zD Km^l~ zW7sTK+Mp<}LbF6$r6FSlT8+3)5)9wMmbOv@_#4_~Gma2*6y+T3RYLAj^A|b@g7cZu z0SO$OqoR?9cX{+*hFiS2g&i*GSej Ec_oc(Qz0BZ pFo*Pm{RBqX^(xJmYnHs)Pg78Jx1G z2(rJ}ff-DBSLVROsf+Xe5)ZT9JxPGqiO5x is ztl%QbmFV;0#YbdNX8t`~5;mK5NAF;&(
Mj6FMqh-ytv0U`6iK`)>{K zpWsQBnJ6Vo%fB>WlmjqIc3?l-w(Or0uflpt$)~>w^Rw))0@V4OBV3vH?a!h{3Y22C zKM8J0&V%0xrs4}#3!F^r_FIYFC*u_wXEU{Oc-Vd;dAnwY+gyGn%5C+t_DjLkv)0YM z4~p4$+3EW(yL8`Wx7#m7;laQp>LCi)VuQW^l>5)LpJ~j!SKWIqMKFIN%*(;FNts*0 zQL7O5Uy3sLvBtTfYaD07k3^K46mb#2&r-<9^Q;GswSAI~r^HVoFWz+7r}tg9+rBRf zWxQtJ6Y^?PG?x(cN;h_|(DWp3B$nE*i{Mayo_$S-A2N!8PLSgXT`25J!eN(e+TG$j z^6v`*WdAY^?-FcMLnwf61SHDU?f)dk%0VV*Aa5i}l`vtVT@IlKh2RGKSsYLT`yIB= zNs1?|o)N{S7xma@B}~3{e0;)GW8)Uw9?&yMcMH*4lDghP?Y?`Yp^6|1k!N+QAmv=9 zTVB!UW-%K!Z5-G%Y&QuLOW~zu>@y-f8RBa1_Y}<1Lzmdq5@WabPTNJhN=%Acyj*CQ zH+RAUQe?|>sc*DPHNXQEE)ifCsAe= hN^47tQ%z6dJ zfQ0z44D{Hky2`VD-zLzmE7@zOh}huug?ZVCkP_AJ?vFsFdfiTz=)OWWz4Lc5>qn HEVMsH!-L1^atKZN2X4x7n{|fK`PpFgf3;K zA5SGyb6O)-@|KTVQxKaQ!&^2b!Zlm;VVe{&;Xy17p*n%*bpelcZdzGz?|TW+^8UyZ zVt6Z $Vmu4qcm5zS3R4%SU}GA=N`2=k8G1pfl4L~kjayO3-GL(kig#XT1)+^= zH`wb1lB$*=K>_G^CrUblm*=$tKI2iJigv6Rb^_F^V+3*26m2+A%Dp~XaF|DiC&+^6 zG!n8QjTkS|5o(jr-kom0#~wB)CV6ujwn2C~i?FR1B7CD^M+udw95`<41bxTE?O%4+ z@>-F}N;)9q34Q4Qf&{M@tY3%_G;WL?A ESkHvI*sKAy~H$Gs;)NV^9ui;?H zs9Gx1WJ|Jk!c5Z+7SWD^Vr6@&n0B%R%UxSd?hYQk!eg|8U_HB?h~!gJ+veLdKgLo> zuC%U0iM1CCRLFunNMOKCQ_mMl>4VP^+C+RHlfik{J?-KhztK}zGmA0% z(B<}c4LZhaa#IqIv@7hgV%Zek8r87Jh?#6`C%wWREj)&W-P;mBOvDIX9LVdT`I(p# zMvK_}|NHokj!uNWS6#R+Gv1NS>s!STZXmrL?LWGN)-0|-{ad(DtrbpkxA&C&Q``uh z+IsEpf*1%Xpe4i#*2rkc6OsNXna7Eb`%n0T7)<6R`@PWEblrX>K#C8kb3)Ady8S|k zE)lHDJ(=*JtE2 Rd|Mnhoh-q0*}dXeoyNUw-8V(JKhVo~q1b&xoF7x% zzUjfeL9UFdQeV@!`Ri@3K2r&1HkrD CW~D ztRd{$D~#SLVs3uto(tx$$wZ^cJibHXVVc(P^@01{^y6i*Kc^9H^Uf&M>b(W`m* AKOknz_3bf~kU!yTN@Yp+C0r{Ay woonGxqVO9iG(<=nm`+^y0 zj1D}KkbuiEwPBZuAm@~a$FcQNF)U}~(On`~Cy|5Muv3`bK2^mEg4 ~kE3>3VIPFI?%zvu~{sh4W=;5Rv)&LLi@Vj%qh)(%GJ5Pk?RxtbDBYZS& zy8zqJ_UiU-$+&%NE4;mDiD75QNiIZQ44F^9j0NQz9^Ss@grB{sYpkK{R}{4rTF;rH zYNreCyW$i3uGqcrifi{>d6u0j_Lz#F1WTE4eY9jJOYUww8d1Den7_^5EZ|!=-gLoQ zV-_uWAyH_JPBd*!1KjVm0D1SDUfUj0&X_X--bQ;`fX*%%v>Us(B e?1GZ!%!b62A->^>< zX8yUx`#NE)m+UpK6~quq4HP?0cmtjkUwndSl_%|3NquIdK+s?aA)pNqC |Y6*oghy_Yx62z)5z57Yh$34L+c+?P#hmk{FAty+DAarIV0j&lfkG(%u{PJQ3{X zesg`Lc#b&M;^e6dqFV6Q+0T$Xg%C72Q;~xi+<1cudqNxeI}Q|Bg~|WP0v$cJV d2 zQN>PTzZV+wCW5~cI@ZseHT$*jFi|(ym<3tW3-+K8>4r>F-@)vs;+R8I4Psmhnc_@d zBZ^Za+V)ucu`r=CWRw3$kYgm?{vQhZb4cxzgW14$2biR~H?bBP&2LRdgYSsoNLaG_ zg*flqy#gFUZy{ayx_i#DZ;9i;$cvfrDozg`o|TzWCqMq{x@2`{N(bSU1nPE= 4kXyiN@MVqTe!4sQOTr_>#gNt=c#;TruZ90b4PcWg zWJK63dAw70x5R7^4EKDxyF`spDI}v5-a=1!NmnwXN>lCzWBU(w6IS4ceO`lD(WnN# zfFRktki`>d$e-2N6+XXj7vj%#^W$#eB4x_#Hlb?C6IL>I^}%kHbb(5k4n9+_v|B<} zMwRp^rC|6AnXV{yH*3shH_O~4w7NQfnQtSzM65+!a@(HWD25ul99Ou5c7v!QJsfGT zCdlw2CY0-hNnS>s7vj~nPYLYXb=tmN7uY9-xwLVlT_rewb1MVSXq%d;Qd6yz$r;aZ zx c zU1*f pjY~Y;O|u^wzq)QIHeC?HFQq5sVxh%MJk}Hm5OZ z(P`MMaI=h=VTTYw9=^|bWxMU-aHsa#jF7igWV^ry8dN)G8uPZsY#p?wKJUBi+6*?N z(7!iG*45lblEtK8-AlsMg;=C3RuiJ=rEL>f?=}lh# %K{qMOB^JN$&f}cMfmpvviW%>yBlqj2GC5nX@f$8rHOK- z(UXbo9D|y+PVy#Z-PHm_hol^rl_FM7%wK|CbJ~JQZ>#TN!4O#P%I9lz4RgcSZ#VNC zDb6b^6F%U2_p8ONF4xn6<&`4R8)1hFP7-b6t$mh>SW&8`@->Hv7-Vy-^V?n_LT1<{ zOKqvRO4XL=b35|cwFO%&&h3(o4BZaGmfIt-XSX(c>}A5} 4GfEi} z?On7k2|Y48qjUgeKUpNP8wu+662Z9!^Dq!L1~QdiEFm>aUZl@BllhYu5WH1xhKm8K z@+ 2$nA~DEI6JDR00p>Mk!S87V`VQ%i9`5s9Q6ptS*1jWDW3vd*g~qU`J7bQ< zsl}E(py4dDO}kHsw+N^2Hv|W;>HADuK=5>V{G`cijQ2%v*w+QC9s?5y&7s%6CRs{5 zBf>`5eac?hecHY%s(nJXFAKNGnD~+aoqX(W0k5;=`_dOgbjk+YDLg?UOVa{+m4Y;L zf}tA}KO`VlkOjl>-FY&H&Fky>$%*nwdWQ&iENsKn{y7oUP+-gYtf1F}xm{q8W&BnF zw_fpbWP&q l{IQjz);(ln_O&UzB5Is$Wy0&cX&Zw_< z+vK=?QbLlLysrEwgx$Z85q07z5gkH;`Y}NV xZEmzhLC`NUumx t%{A nm$$Bc4`2*wH=fI^)S&>|Yev|OhH^155D8NZ61!J*+)7~4zjOR0D z`>`I)X%v1)kAKN{in;`WypEx#>;!=xTD2XzxPJ=$#}he&;a>M<#Nv-fct*oVSt0{? z+NB>iT9T5fxBwkh@Uuw>yXI=WHl?9mUM!;9-XKit5qG`@rYvS-n((_x4IoH`>+6E< z_{IuU6>b|H&?AHCD0gM6Xbg%D#f^m~eMP3KrSKS95hWu8sl!M~385Ov1uRJ8!t+ &U6B=M=nzmyFIi#0ut59{39iz|nQpJ-i zNSPGVaSsm*r$BbwD40TI+NRPC;;JQImQv9a3(^Bj)@y{{*mVLP`Cw~>Xr|$3m^H$w zI2^}<0TC_AejS-1ryy#Ht&o&$iti3M?k29fy+&fU-&|=&3Jw#>
%y`^TjeTR0?E3z@!A yh|9LO3p8s?Vtz*_emOc8ePJ ~SKg2t$8Ad#rGp?0AQSDI8K~r^U9$iKCeL^4vBm%{1&$8puvQQ?N%0x}76c zae26y{#5nK9wxl^!^BxVRA{j6D|?7Au3_}-|30R3$a0S%)jb5gqS~G3ayS1a##0A5 zO9{@O=|$BR5L6*$^&Pi=XoLq>P~+1T+`o(4?1n&e6pDb0A_B)-^#!IH2jL?4kTjsm zW>Z-J7m-5#CkaRPTtE(c!Tu gPgTZssj?+s{Ps?~k(2HZoHoI_$?1`!nDv zXQHFw>X zgIM+2>8AIJAq6y9CM}rBhM&s6sR2!Py^JdD!j1L~iLs~H*9APRew4X!j|f@qOSU&C zcNb=;qI(VdvPQ5mk&YpRYSOeX2=U}nFBk$i7O-7JA&%Q!8Z?-qV*+{?>Ca2HhL%)* zH$N+ax2K$u=jhRXB!pfL!?(grZNMjPyES0CPMFJWLNjb@w+i@z?bSPjz$ cL;-;K>?UUWj3g<)u*a?! z#{RL(J}pE!KKDVR2VN^`AoVW_xH_%$pOTcI5#FMJ?a6M}NW6WP`k)zlLZ^K~LJtj? zwT}s6^c}aWg}logf5%BYrnUv-Btl)T3TeA6C`xxw)l!kgDIn22o=SeDuE2ckvyvAt zsMak0gDW&(Fe#Y4KEZUM?p`i&bA}_QKy+B(;3=+C*vn70!42^g8+M6?xHHCf3K1pm zi+Et)((vL19_|#r_^>X(+sLU@sLB5QA%T9^ZhP#5!dNpo=?6?E!a(T0yq?s)(`c3h zrtJBG^H(-@*m**QNhZ^KgxXfo c`iJ)?-TZuF0LCfT2YY0xKhMgfaLG|}$i>_Ao4pH>!;Mt!Z&{LHI zHHkE!K#hc38}2u^w+nly_EI}d5KFu# VpyyEmUP=GVzxCXLGF=HCyN=T#}>&X zg3%%>S*e2VPlbd6rX7&e;G1+=iL*Ave+7^C85O8e;Ur5bU`dBcG(wsaLWANEDum+( zyXB~D7r_=~GXfr5F)h&7d#JSpwh*D HytWgBJQadhqDpCEQES`)8OZmx*Gkk+WTHM#QB)%Ux!`uZBqOMVy>^`7is@FD zcngUBB1)w<%2}x)bSLG6&6~PHOuPR=)A~i=N+Rk}h-f#0#ESMB5kyVb> )Ez)7B@rfnUQq(vum^ZXAJQK(SHIpu#OB%#6pfL|-sMNCrz^ zlc`__i(HF!rdME{2UD@a2EnUSF56 L7l^|aNq{|Ph+w?Y&H~s@#`0bK`ML)4ygg6A z)p|D_X2zX&WFleqdbS1?r$<UR9=~1-~>1 zkCGx+Npd!9o(2>4sbco-#QlGu5al3vTLboEYYf0C$4_ie*4TCm(*HxbqwE05S9@d; z{#@H%%w)lPSUpkDXW !&}~m>}u(gTD1pUDS@;WLbKM7z*WJFL-pvUck=41V{G^W~RXs zRLr=7dJ@8wOfiqX31S6Ppf^K~r _6q?XY~6k?)ZZyRU&<8m-pn4-|9_@I$ (bzK7k3gW&4)UifAPE zO;I$D<9M7ls^HdRSHuR$Ee^_^{g^_&q07jMBW~NiE}ZV})fr=^@PwhH@5Z1KKJ2}^ zVimK3vnIw2F{zMrhOBqBGHTgZC1)n{S7hwRF%sKYHol@EBaI!*;eZoU&2js(gqSa} zw0%jC{Q_5Y!@ekDBYzF6#ofXw1I$;1FNnd+&+Z$L>XbwTOUS0?#|X@6De5 tbfN&ht7Aya z1nL#>#2V}SkL?!X*od+jkT6u590jEHNYWgGAnB3CoPrp-e(y(FcamAI $RL=h@8ye!wNSz;4P!v==Aubb|D?8zgdt12Y}#8$G~p%segv7R(sth0NL6 z#_c*?h$ij98-aP3Qu4>1oh=U5*J>DsB>R+r`=Hr)KPlXaec6?nk>3271OdwQYpknN zs9e_wx0Tmref9}4yzGP`1Vrm#+vAuQ3?2i2J|EWwUOOuQ_IKuNz+?LDDvjfxn$Cz* z2^t6y1rj$?u%KO$aWMk|BJ6TW(u;@Yml=8&VF W=J*cQB8Jb?n&K05?;i$bw2#-hx_((G7d-*auN5lG4 zL2u?=F!b2s$z@!dzr1Si)_Cp?o|KxsOGFJt2IcN-;rWkOGgy!R#?F#x>C!$sQ(&mz zJ)rFjVYCsB%I^@Y6-K>=V<9v2kF>W-?AcAt47(^fbDCs?Kl21n6?B{H+XPZ*G?hez zOO;C5P8M3nOSvOM7R}lMDXEIw?zd_%7V`yYGYjk#THKVqMFWNiW~1<*V8xRQ-z4M; z9We@mweB8!qrg^f1x6o1imJ}(Ga0xQ+aa{hwQtV{35I-nn~`{Yip|oRf^2&{*C|01 z-DLHlv#}^b4XH9HRPgq+bs;aB Q7~eQGxma_ngUcA47)An2UOBxh|;{wl$^} z;QlIZEPN`5Ye2TNvFio91)Fr!UZFwlQw{@yDOG71FqSc=B!7pN>WcdO<+em%C5Ahq z8c^Z*ieNpKxMT-w(6~4I2;?Q?aEdW;f@){s@!|zDGgaP(@@&2O4ljnoq7&GYE=txT zF|c4S6(V}c`v3*@T%C5hPq&7+2e4%U>m;IdNk)E1r @VM5yRBtMlrX8M0h1H;yeVsWPwlb7l ?a#uVqT%gcMLn6|Jb(*+mOt@8jTxi%JL_yp#|n~F*4xB)+mkhn z{Ia&$ D@R2GJfSgGox3ERe1D@-#7$0JRJX%k7`~ ziY~fm|3iSt4I0Y|vHX|puR;V*@+W7U?rVmGdo}DY8a(XA?+oW}rf2~1BobroWO;7c zpG55akU!OAW&OQ4c4GUTK$D2C0Mr!1PHexGkPLLz;((h`<9;I D5Ad`}~Iw>Z#$SI`pzdovuwyoD3vI}#83kvGsJg=Pu)kg(=n zf |PBZvT$@F!{qg& zQoY2L?PdF>0MX{Y)qF!(ZUh`;Ul+G!B4u^g+55jHjyB1qjJ8vMyl7vQ5XY?dbPY`I zD7KxiNKDOmf44HxKEoc;XJ6KkK^!4p5=bdSfx3Qt^V!|@MG5^K3D9?VA4 #+Ty2qEwto)UJ^8DY)=-LTs`ke#%i!fL#W!xYH+6@ z-IuFnn-|1HvmO1)OKPQ4&&Mo__U>zr)+Zk>XLAja?azCC!>{g9f&lC!f zs!WxqP#c1xzcwepTQq!h(r(u075 M=QRE7jHq7< crRA>_9SmEmNCxn~r(|^X(BP#XZX{-1#4fSP$!cKzZ8YIup)gmymr9xdk zKdutlp5q*)g9$UnwRVL@4e-DM3=@Ff%5YVoj=ivAmuhfo!O3q5f-35EiKJ)_3jo>~ zH+!dqTgc7xdUKhnP%HT&iK$CdvkQfWP&qOhcGZg`V~9K9 %WNMI!c&5!o>O-)Zl!GJ4$`cPevlf;8|; *E+?^gfTgbyc8yWJVyE1x)#O!coJ6*^vp#{3B+S|o!BrctjN0}&8 zF_~~XPSXgAgB3D5zMen35d?2djPz1Mm3D!*?#wb*F{qxZuXB?f-p;oPV}T(Zf&Jwa zF ~be(D*4 zy=P;on-*gIes8x;36dCD$S4(WoMICW`3!m3EI@&eZ%i**lp%S){sj$v9czG3Y^#gF zkjSsC3GUfh%AoyD_Vr~3W!p`qF}ytjGhZ-m4_wBJ77bt^(bx0Gpm(CR29v&F8TQ$2 z8p9UrZ6N~V)#s?2To=J%1Ih!|y4q3F UQ*Xf^L zMdTN{#6)H$TCK_E@`Dfdpz>z#c!PMeQZLJQn>dn4#}jn%eOG?_>Wr{?zE%>iZeGr? zNslXcl!tt+pHA&~4R3f1dZ4k{DU6Q+X*gfc=>F5}I9)b8f9up3zcvWcpmw9c@3yTP zf<1%MyF&e(6S1HNZsM7nu+0*$@Esw;_C$Y0UuKAztlQBVPPL4N4GA^wyoiA4fJE_n z5xq?k`wlUcVTwbZzlwHb8bDPbZ%MMf*EWdav{SJ4LR~+(@WSp43G2sLpMGr&;Zb6q z^tgwkbk$VKX{4U72y9?BAi(i*nsY~BxBh!MVT?knG^UH > z%5F0`Lc`sr;2m5!h Kv4-p}D z$!SX6v~0PU8JfAI!#y@Babq5PLiUgF-ivW`-jFeexlYy4%&|_`VY* >dDAO68$wqQ3dXV|rFc*RER(-*L}^Al*2D`L=h`w3ejyrz~v4^QHi zEfF^n(srrHQcq^KH7ID>obc4GgY_MI&%5Vbp0Eci1h &3tp*@cP6L;)ron-UaBEH^c0@n$P~rztJbXnZql?xLiJSDJRs&*uV3>b ziOFVQc4y4S<3%nPFkU0{APt`(3^_nQzMYio_(F;6^E)Sq%(fSZ@b-FsYJ7eWEKAQ5 z=s%`A1K#~=MtD@c77*)Hj3%#w%67VTj7lfG3Y><6YBkWr0}b#R(i)ufDP59O$kEFD zZ3`&s4?IWmVtLZrjJ539Vp5t&t5jJ)>3t@wAclFB5PsydblEzrUOYorj-DybjquI? z7uqu<+*(c{v4QuzC(DShWa|x)pR=3xbX`eIZ+u3duG-TinLt${P)v{zdOr*DWP?f? zWzn9hA(hhX2vIJyRu(hAvzb8(8xN7&;|f_=Tx198s&%N@oa~=0>?<>|_Xh}%rm(5e zS$mS02X^Pr?LFe~C7Ee@gHnI^F@8z!VfI8_?9qX|VfzWY_rzbhATTMEr;fBIXn?P; zb$h%Zib~xcCxl~&eKeq3un9#BOj$0J)PS9)d*09VvHAv-A*v5F%bBUqUz0(h==0VU zKmso8F}f;kK5hXGrt2qfzot7w%)FGg^8M>kx@IG#Ef>H+xAE5P;SzUrZeq{Gv=eXa zA;JXVlig~9^!y+SDB#K|VsZivxaok`>A#Qc*fLR#uqtOv;3= zL6r!MESbVdX@8Tv!aTw VqABNxhHM}IqY%y8T!(0KhqThn2DPi_7COHoYUO}!N2}fjjm8|)_x*H z@&&i*M}jz-`DX*VWuB#;YL6O_G`R&B{fFq7A4tq{Sg?IUv<{xmC V?XT$`aoZ@$>fYKQHhVUJ%}d@6r6YnTm@(`XcSu|-?{I5t zU|JY7Gh$tsq+_ z+%e`@Ku-;25@lj&%}TpTgFAck;kHXmQmTn(Y}o&bq9TE>vL(Aw%obMwFgRT=g4lv~ zd4OOz0$nF*bCg0`DQ59gqSm;bF%Xg8o`o=LpOhROwo>*JeWtuR+$SVQDdoNeBs9Ef zAD0j}FmtzH9}_X;I~$h=!M5SqQ&(%ibP+?_RYEiYV47bkh()+zR|qvmiL+_PI|N6> z6<>&%pfK*a;lX &eRg2}>+D 4f@4jf%#KE+AefBM JFF<9M5t^O^-h@fc&X<(-&V&Y>Cs Mg>m!0n?s0?WIS9a(mo48lJlPUA6D>lQTvAVIFdfaFZneK;QwM)Y-bcIe#lJ zbwFIJ G(_&JbFODovpvK@#}6 zL+=nIgOIm4<1ti(w@c{8!)@5Mh0`{UX @L%1h$&whzeqZ z>k`(GoQ(^2L%=38pf^Kr&&sn3ao^!faDdizafO*WYc)Z>YplG(s={4FCbevvpgYqh z1o#=dGTMm40rh-bQqJ1DdTmV5!&K-=7O+ev8zBQ$6tkXyK7Ga@j8%425PLKGS}PMC zE>685$(3hH%Lq{wFQ!-!qIDdGjeuy|EHI bBi%WOg@sgG6+dXazTUAgS%UFs7)mXHT(`amfBn)IsYW7yi z+`@N^Ko`FA063%g^LjJUDOwc+IN_8gvKXBdo9D2;%S|ks1*r3ZmVC5enR3hlhEpc? zkYqSdF+^Hm)CgjB8n#ITd}VU;SrC(rIVMa%PU{{*wo&7KP2M2TBxGd00MWR;c9hVX zGJk%c%_z<5B*MpPYXn%bsL5Ng)gs(;Hrm^510pySS8S!w7& VK3K+gWCP*scV WZCLqg&+~T2jC+ z7P6N~Hsod0iD2j!QEnU1x`g?I+2Ar{v+~|(_7V-CLjx*hArm9hC=Vg-J8apZ_F@fg zpFS}M1k<%;qEKFL2WiA`yO(=UW|-E!_5#Uy(C8i+@4M_n_B;uxB!_bRT)|YyiE8~p z5LQYE+_NR;ubG<02o=O&nT01%f3kzvvou^bN}?e}(JK?}9NS1R7^W*M1-Rxjx7H80 zF~Xy{pQ$hKmYrCi?HM9yu05VnWkt6=T_RHIsYS?a4aSeE%( 7vO%01odIIn&^wqzC_A5Z@~SszRP>UCI#i_AHYo#Jrok z_ug#3(eQPC4he*&g1yy#Eh!d@A|}(os8B2`UWnmW8Zy7Wwr0jaGj|QG7jnE7H z0f`Cxs80GL`L-Ay;&evL7d)xVppX-kZ})4k*DL284a@ 8181jep>_{CSm^w+)GV zQ3AA$W6PG>-MWy-&C&AMY$n|M z4KLvYp1Kx&p2QNS=x5(g3U>{yTK&ol*{ZQE6SExyjyvu+yGEn;UX{X)0=s3q=rxOi z>32<^qeBoYJ-Hs!w!UI3?&*&UumCY<19oDI?PHQ-4Vb^OVOI-tUYp3sy&266=_bIW z&bXGk#n_d)n84^lMjHvQzzQxQJN9@+m~M#Ypz6ECMfxCnS+5}I(B``E&6(MntY_To z7_(^6Dr)rUD+W2p254(90jd7k%0f&ASi^N)`gd+(LV0P3U~6s#EG@*Tvd*Qt%41;z z45i$XfVh?28EY47Fk#=^$bciPJf#dhwV#J}kw&ldt@fir-dN5ZQ9;ybhWKGg*OclE z4(Q!0d2<3+W~nc3AJXW-Sy%06?E@mVmBwf1_MBUp|4e;$#@;V_WNLcc-Ydiby=mtO zt!Iv8gq6Z0KQe*Ollj &uW3!>1R+_3 -h6gd=>2kD$H`BwLJ63s2lqJUD$oD8PzNpTm)+cn6|8dG+f zU|WfGr`Ov=x$7ptCRgSH)m$+rG+RU8KrR)Q`oO6dR-ks*s~$U9!`FM0ungJtJsLL? z9Km>Z->Tv6nZ+H$$`h2^sPB0@FZ4~mZrfWlwCy4FUlx=*!sf5vo{2?^JZ#k7tZO!= z3fvjjQe;QQc+Sa|*XZ=*?TvyI+2c`W%$@e&pgGB>DDKE#Gb`-z1l+m6!?QJvowh@A z_Z0H;Dc~=Lk|o6d2c#DgdL0GZwrhar*kRZgT+{F@lZ;t;*uWPI@J>)vXViEiJ&NV- zjF}1K2{BcsHDX)I%LfGH=tj9l3GueY=LyV0r3}3U7AIY6YOGtO+dch)^0Q{UAAHHC zG;R#LSe;k#4I)OSi3sntN#RNIY8n~x1ext2^#XO=poT^h4~4fu2q}L=$?787?;@*4 zFy59hd1!<2Do`z}>5>6j#p$z~Mbi D=Ui`_Wa;LU6pkA1JgF9T=3`@o6rR{Z~7XjgwMviWdz}S z77@0A2P$k0 nZT>%l^2R4m^suy5MmqZwGkoj zBH6Y96hwKc0xys1RWyR6R 6wGT|epu^qBGIyf~%kzZLE9k@?QfiYFY^$#3D3ErlAPza?kSz7B zlW94u(cH=Tt8KF&UM%W~1xz-Zo{XtsUa+GzxKzrYH#WA y z-_>ht1Ugw#rEXg-%B`LO(&9N|t0W{q$_oZ&qEj$&G&5tp>pA(w6};^3i7sTOiG8AO zEA^G!%xT_g`YVdrdtI-s5b&DPbae{sA@p R|^d$ zi`T0J-PYT%fatNVf(4!=)Wy?OY`HFIk