From 277eda3e039b913fc598d77fef020c4fd33ce0ee Mon Sep 17 00:00:00 2001 From: MDKempe <58960264+MDKempe@users.noreply.github.com> Date: Wed, 27 Dec 2023 13:29:06 -0700 Subject: [PATCH 01/61] Reworking of the standoff calculations overall major reworking of the standoff calculations. Too many things to list. --- pvdeg_tutorials/tutorials/4 - Standards.html | 15260 ++++++++++++++++ pvdeg_tutorials/tutorials/4 - Standards.ipynb | 345 +- pvdeg_tutorials/tutorials/4 - Standards.py | 220 + .../tutorials/images/T98 70C standoff Map.png | Bin 0 -> 415402 bytes 4 files changed, 15781 insertions(+), 44 deletions(-) create mode 100644 pvdeg_tutorials/tutorials/4 - Standards.html create mode 100644 pvdeg_tutorials/tutorials/4 - Standards.py create mode 100644 pvdeg_tutorials/tutorials/images/T98 70C standoff Map.png diff --git a/pvdeg_tutorials/tutorials/4 - Standards.html b/pvdeg_tutorials/tutorials/4 - Standards.html new file mode 100644 index 00000000..54a6745c --- /dev/null +++ b/pvdeg_tutorials/tutorials/4 - Standards.html @@ -0,0 +1,15260 @@ + + +
+ + +Matthew Brown, Michael Kempe
+2023.12.21
+Requirements:
+Objectives:
+Background:
+This notebook calculates the a minimum effective standoff distance ($X_{eff}$) necessary for roof-mounted PV modules to ensure that the $98^{th}$ percentile operating temperature, $T_{98}$, remains under 70°C for compliance to IEC 61730 and IEC 61215. For higher $T_{98}$ values above 70°C or 80°C testing must be done to the specifications for Level 1 and Level 2 of IEC TS 63126. This method is outlined in the appendix of IEC TS 63126 and is based on the model from *[King 2004] and data from **[Fuentes, 1987] to model the approximate exponential decay in temperature, $T(X)$, with increasing standoff distance, $X$, as,
+$$ X = -X_0 \ln\left(1-\frac{T_0-T}{\Delta T}\right), Equation 1 $$where $T_0$ is the temperature for $X=0$ (insulated-back) and $\Delta T$ is the temperature difference between an insulated-back ($X=0$) and open-rack mounting configuration ($X=\infty)$.
+We used pvlib and data from the National Solar Radiation Database (NSRDB) to calculate the module temperatures for the insulated-back and open-rack mounting configurations and apply our model to obtain the minimum standoff distance for roof-mounted PV systems to achieve a temperature lower than a specified $T_{98}$. The following figure showcases this calulation for the entire world for an $X_{eff}$ that results in $T_{98}$=70°C. Values of $X_{eff}$ higher than this will require Level 1 or Level 2 certification.
+$*$ D. L. King, W. E. Boyson, and J. A. Kratochvil, "Photovoltaic array performance model," SAND2004-3535, Sandia National Laboratories, Albuquerque, NM, 2004. '\ +$**$ M. K. Fuentes, "A simplified thermal model for Flat-Plate photovoltaic arrays," United States, 1987-05-01 1987. https://www.osti.gov/biblio/6802914
+ +# if running on google colab, uncomment the next line and execute this cell to install the dependencies and prevent "ModuleNotFoundError" in later cells:
+# !pip install pvdeg==0.1.1
+
import dask
+dask.__version__
+
'2023.6.0'+
import os
+import pvdeg
+import pandas as pd
+from pvdeg import DATA_DIR
+
+--------------------------------------------------------------------------- +AttributeError Traceback (most recent call last) +Cell In[2], line 2 + 1 import os +----> 2 import pvdeg + 3 import pandas as pd + 4 from pvdeg import DATA_DIR + +File c:\users\mkempe\documents\github\pvdegradationtools\pvdeg\__init__.py:7 + 5 # from . import cli + 6 from . import collection +----> 7 from . import degradation + 8 from . import design + 9 from . import fatigue + +File c:\users\mkempe\documents\github\pvdegradationtools\pvdeg\degradation.py:14 + 12 from . import temperature + 13 from . import spectral +---> 14 from . import weather + 16 # TODO: Clean up all those functions and add gaps functionality + 19 def _deg_rate_env(poa_global, temp, temp_chamber, p, Tf): + +File c:\users\mkempe\documents\github\pvdegradationtools\pvdeg\weather.py:14 + 11 import datetime + 13 import h5py +---> 14 import dask.dataframe as dd + 15 import xarray as xr + 18 def get(database, id=None, geospatial=False, **kwargs): + +File C:\ProgramData\Anaconda3\lib\site-packages\dask\dataframe\__init__.py:6 + 4 import dask.dataframe._pyarrow_compat + 5 from dask.base import compute +----> 6 from dask.dataframe import backends, dispatch, rolling + 7 from dask.dataframe.core import ( + 8 DataFrame, + 9 Index, + (...) + 15 to_timedelta, + 16 ) + 17 from dask.dataframe.groupby import Aggregation + +File C:\ProgramData\Anaconda3\lib\site-packages\dask\dataframe\backends.py:15 + 13 from dask.backends import CreationDispatch, DaskBackendEntrypoint + 14 from dask.dataframe._compat import is_any_real_numeric_dtype +---> 15 from dask.dataframe.core import DataFrame, Index, Scalar, Series, _Frame + 16 from dask.dataframe.dispatch import ( + 17 categorical_dtype_dispatch, + 18 concat, + (...) + 32 union_categoricals_dispatch, + 33 ) + 34 from dask.dataframe.extensions import make_array_nonempty, make_scalar + +File C:\ProgramData\Anaconda3\lib\site-packages\dask\dataframe\core.py:27 + 25 from dask import core + 26 from dask.array.core import Array, normalize_arg +---> 27 from dask.bag import map_partitions as map_bag_partitions + 28 from dask.base import ( + 29 DaskMethodsMixin, + 30 dont_optimize, + (...) + 33 tokenize, + 34 ) + 35 from dask.blockwise import Blockwise, BlockwiseDep, BlockwiseDepDict, blockwise + +File C:\ProgramData\Anaconda3\lib\site-packages\dask\bag\__init__.py:4 + 1 from __future__ import annotations + 3 try: +----> 4 from dask.bag.avro import read_avro + 5 from dask.bag.core import Bag, Item + 6 from dask.bag.core import bag_map as map + +File C:\ProgramData\Anaconda3\lib\site-packages\dask\bag\avro.py:6 + 3 import io + 4 import uuid +----> 6 from fsspec.core import OpenFile, get_fs_token_paths, open_files + 7 from fsspec.utils import read_block + 8 from fsspec.utils import tokenize as fs_tokenize + +File C:\ProgramData\Anaconda3\lib\site-packages\fsspec\__init__.py:5 + 3 from . import _version, caching + 4 from .callbacks import Callback +----> 5 from .compression import available_compressions + 6 from .core import get_fs_token_paths, open, open_files, open_local + 7 from .exceptions import FSTimeoutError + +File C:\ProgramData\Anaconda3\lib\site-packages\fsspec\compression.py:149 + 146 try: + 147 import lz4.frame +--> 149 register_compression("lz4", lz4.frame.open, "lz4") + 150 except ImportError: + 151 pass + +AttributeError: module 'lz4.frame' has no attribute 'open'+
The function has these minimum requirements when using a weather data file:
+Alternatively one may can get meterological data from the NSRDB with just the longitude and latitude.
+ +# Get data from a supplied data file
+weather_file = os.path.join(DATA_DIR,'psm3_demo.csv')
+WEATHER, META = pvdeg.weather.read(weather_file,'psm')
+
+--------------------------------------------------------------------------- +NameError Traceback (most recent call last) +Cell In[2], line 1 +----> 1 weather_file = os.path.join(DATA_DIR,'psm3_demo.csv') + 2 WEATHER, META = pvdeg.weather.read(weather_file,'psm') + +NameError: name 'DATA_DIR' is not defined+
# Get data from 'NSRDB' or 'PVGIS' using longitude and latitude (a geographic index (gid) can also be used).
+WEATHER, META = pvdeg.weather.get(databse='NSRDB', id=(33.4, -112.1), geospatial=False )
+
+--------------------------------------------------------------------------- +NameError Traceback (most recent call last) +Cell In[3], line 2 + 1 # Get data from NSRDB or PVGIS using longitude and latitude (a geographic index (gid) can also be used). +----> 2 WEATHER, META = pvdeg.weather.get('NSRDB', (33.4, -112.1), geospatial=False ) + +NameError: name 'pvdeg' is not defined+
According to IEC TS 63126, Level 0, Level 1 and Level 2 certification is limited to T₉₈<70°C, <80°C and <90°C, respectively. Level 0 certification is essentially compliance to IEC 61730 and IEC 61215. The default value of T₉₈<70°C represents the minimium gap to avoid higher temperature certification according to IEC TS 63126. This minimum standoff ($x_{min}$) is the distance between the bottom of the module frame and the roof and can be extimated for a given environment as,
+$$ X_{min} = -X_0 \ln\left(1-\frac{T_{98,0}-T}{ T_{98,0}- T_{98,inf}}\right), Equation 2 $$where $T_{98,0}$ is the $98^{th}$ percentile temperature for an insulated back module and $T_{98,inf}$ is the $98^{th}$ percentile temperature for an open rack mounted module.
+Once the meterological data has been obtained, the input parameter possibilities are:
+The following is the minimum function call.
+ +standoff = pvdeg.standards.standoff(weather_df=WEATHER, meta=META)
+print ('The minimum standoff for Level 0 certification and T₉₈<70°C is ', '%.1f' % standoff , ' cm.')
+
+--------------------------------------------------------------------------- +NameError Traceback (most recent call last) +Cell In[5], line 1 +----> 1 standoff = pvdeg.standards.calc_standoff(weather_df=WEATHER, meta=META) + +NameError: name 'pvdeg' is not defined+
The following is a full function call for both T₉₈=70°C and 80°C. This also includes the ability to print out a detailed interpretation of the results. With this function, one can also change the tilt, azimuth, or T_98
+ +standoff_1 = pvdeg.standards.standoff(weather_df=WEATHER, meta=META,
+ T98=70, tilt=META.lat, azimuth=180,
+ sky_model='isotropic', temp_model='sapm', conf_0='insulated_back_glass_polymer' conf_inf='open_rack_glass_polymer',
+ x_0=6.5, wind_speed_factor=1.7)
+standoff_2 = pvdeg.standards.standoff(weather_df=WEATHER, meta=META,
+ T98=80, tilt=META.lat, azimuth=180,
+ sky_model='isotropic', temp_model='sapm', conf_0='insulated_back_glass_polymer' conf_inf='open_rack_glass_polymer',
+ x_0=6.5, wind_speed_factor=1.7)
+
+print ('Level 0 certification is valid for a standoff greather than ', '%.1f' % standoff_1 , ' cm.')
+if standoff_1 > 0
+ if standoff_2 > 0
+ print ('Level 1 certification is required for a standoff between than ', '%.1f' % standoff_1 , ' cm, and ', '%.1f' % standoff_2 , ' cm.')
+ print ('Level 2 certification is required for a standoff less than ', '%.1f' % standoff_2 , ' cm.')
+ else
+ print ('Level 1 certification is required for a standoff less than ', '%.1f' % standoff_1 , ' cm.')
+ print ('Level 2 certification is never required for this temperature profile.')
+
+--------------------------------------------------------------------------- +NameError Traceback (most recent call last) +Cell In[6], line 1 +----> 1 standoff = pvdeg.standards.calc_standoff(weather_df=WEATHER, meta=META, + 2 level=2, + 3 tilt=None, + 4 azimuth=180, + 5 sky_model='isotropic', + 6 temp_model='sapm', + 7 module_type='glass_polymer', + 8 x_0=6.1, + 9 wind_speed_factor=1) + +NameError: name 'pvdeg' is not defined+
To do this calculation, one must use a set of data with:
+To create a weather file of your own, copy the format of the example file 'xeff_demo.csv'.
+To do this, one should also filter the data to remove times when the sun is not shining or when snow is likely to be on the module. The recommendations and defaults are to use poa_min=100 W/m² and data when the minimum ambient temperature t_amb_min=0.
+ +# Get data from a supplied data file
+weather_file = os.path.join(DATA_DIR,'xeff_demo.csv')
+Xeff_WEATHER, Xeff_META = pvdeg.weather.read(weather_file,'psm')
+# Pull measured temperature and calculate theoretical insulated back module temperature and open rack module temperature
+T_0, T_inf, T_measured, T_ambient, poa= pvdeg.standards.eff_gap_parameters(weather_df=Xeff_WEATHER, meta=Xeff_META, tilt=None,
+ azimuth=180,
+ sky_model="isotropic",
+ temp_model="sapm",
+ conf_0="insulated_back_glass_polymer",
+ conf_inf="open_rack_glass_polymer",
+ wind_speed_factor=1.7,)
+# Now calculate X_eff.
+x_eff = pvdeg.standards.eff_gap(T_0, T_inf, T_measured, T_ambient, poa, x_0=6.5, poa_min=100, t_amb_min=0)
+print ('The effective standoff for this system is ', '%.1f' % x_eff , ' cm.')
+
Equation 2 can be reorganized as,
+$$ T_{98} = T_{98,0} -( T_{98,0}- T_{98,inf}) \left(1-e^{-\frac{x_{eff}}{x_{0}}}\right), Equation 3 $$and used to calculate the $98^{th}$ percential temperature, $T_{98}$, for a PV system having a given effective standoff height, $X_{eff}$, for an arbitrarily oriented module can be calculated. The input parameter possibilities are the same as shown in Objective #2 above, but the example below uses the default parameters. The actual tilt [degrees], azimuth [degrees] and $X_{eff}$ [cm] can be modifed as desired.
+ +# This is the minimal function call using the common default settings to estimate T.
+T_98 = T98_estimate(
+ weather_df=WEATHER,
+ meta=META,
+ tilt=META.tilt
+ azimuth=180
+ x_eff=5)
+print ('The ' , $98^{th}$ , ' percential temperature is estimated to be ' , %.1f' % T_98 , ' °C.')
+
The temperature of a system is affected by the orientation. This section will scan all possible tilts and azimuths calculating the minimum standoff distance for a given $T_{98}$. Similar additional factors as above can also be modified but are not included here for simplicity. The tilt_count and azimuth_count are the number of divisions to break the 90° and 180° tilt and azimuth spans into, respectively.
+ +# To do these plots we will be using Pyplot and need to import it first.
+import matplotlib.pyplot as plt
+
STANDOFF_SERIES=np.array
+STANDOFF_SERIES=standoff_tilt_azimuth_scan( weather_df=WEATHER, meta=META, tilt_count=45, azimuth_count=90, T98=707
+plt.show(contourf(STANDOFF_SERIES),colorbar(contourf(STANDOFF_SERIES)),
+ Axes.set_title('Minimu Standoff Calculation'), Axes.set_xtick(np.linspace(0,180,18)),axes.set_ytick(np.linspace(0,90,18)),
+ Axes.set_xlable('Azimuth (°)'),Axes.set_ylable('Tilt (°)'))):
+
This last Objective is much more complicated and is set up to utilize acess to a lot of computational power to run many sites simultaneously to create a regional map of standoff distance. This is presented as doing the computations on Amazon Web Services (AWS) for which you will need a paid account.
+ +
+
LrP|^Hk2>E23{s;wn6? zP}XM>4%TfVpT(Ia9QB)a-bB?qX8h-95*4!y6iL!c YkI%H>aji;aN58 zflOH+Rb?owD9BD9_erD=O^U=Jg}y oJKvd^y00Y13vnlVFM0m%;@JE+Z`T z@X`)d__Z0HVuZE$+zA#MSf4wPz{ME?KGgIbGfyv$k57)?XPbi1=4Xxooa+((TZP;% zh%rLkA~pKXCAJU#l4@`Vk@gFK?S0laBQsSMyr`pDw>J2MQ<#&fqPF_E^5R4Q$*RH} z!&pm|c5_{C-$sjJ>w&(61E s&semwng`3MDkosRQbrGi;Itzi=h%jMW5>FjVPpy}VpK`%h=vz8U>*rA0af0e#4c zvu_)fLIEW$ro^+VH>oDYXF#ybMZFp_-^J+m8SqEbE2E~*Avwe2{yCKOxl> |ME<)|M0|%Ba4gMdh6S$c+lrXL zp~SSllLhhi3u95Gm5b%_)-7sCbpVRFX_Q9pe%oKk;zPWl`~WOURC326X16Nia}55l zQ+CztQ>SS8whG=8_^+GZvgV?$IyB0~rEhx{r)qN4-`T}784+zMgQ~r*2wW8~NOQ7) zq1XE{nE#-Quz#=l!O}RwHMZjDsQV>JX8)!UggGo(#>(l3_>G} ;&5vnj)RET{04r^%r3?Ae0D1SF>yGY^ V0J^w(6NTRCOX^(EHPuF@A zzfll0Z9Cs-UO@z)4G_fxxJC5)pH{?X= 0qsFV@XO zb%UYp{;JTfvI=6?>9jCx@8;s09&WteIie|EP^8oB&%v3y__7#zeRbS+z?>*>!yJ^h z9Km~(-MApg?yAnNz*4{{>B!qR_QOtW-G09s7X0$wDl|5k91SG;KocE@a CCj@m_C zJ~IuED4A}JJZpYM=9=V#`8^9$u!n`=kvw_8PP45ti8#kl&P+l7NX2~I3;Gp7RNE}@ zrFBQ>w1&)rQ&40_AKUhyQOeqoDSA8Ss_(HikUu=4^jZLA#4U11#sas0bi6c^i`veN ziEst#f1x=0A|AM9vGB<-5icjUk#(Y;7j>464s>b)u?pTr>os7hlk`ICZ0T@)4ExYl z-#li4$xN&7)hv#i#kuACD4>S_q|yDKV@68Zr2Unh0qB-vLvPc+NDfi*e^|gYVy^dh z4=9*oMRBRsK7_(PaO8fwzpGyywSY (c0pvs;>{hu9kQmLdV&UcneSTS$mW@5%7`BQ?Sh; eJcP;`^5!{GRwe021dbNjWR}VuSt?Y*)OuQ<=Onc;wT+pq&Wal!Gt6pPpuSSX zp^|+af@b^@w&GA#3P|7jItaP*>aFMt#nVH@P~VT@o-M7yo6lLBv0m_I1`Xzro39aq zS@Z1R_CY+a65AMG{ZMIo?bhxuX%QT!JjsE=I~_V*q9_hpXWT)xU0>B&3wEcOfiiPk zORl{l^kD+>tK%#OdwRl+T!*eG!eZ_82bOp86SVO!Z-ovDq!Q4Hn<`Bip}eOahgHfX z9_LCd4GZr5o-J>^bdoI+^f3QEwxgUiWz-|=KG|oQ3x9g_(bY22@^3ooUq -hEAuB6-SZ=3Ti`R|Nx~dy!zCnM2VH+#AM!&$T;Gq*aO4lcA1vvK>=8^JBcG-W z0~Y7GE)55e&pSK5*K&V?8u-N^ (WYsd@Z@WPzeaHH~TkG;QMY%YmX9!B?%@=&Oz_qvQ-`OXI&nvo%m zkKnI>j|$AE!%@)vL6 stxZ z-aOZ3;Jv!2xvL3-*No726D={3Id_cAJ^G!YrwYGV0=APzh3+D)|6-onmH*{b`N^eY zgOKqpC2}i!e;%o~+1b>4`@g_X4mW;Ab}iAwSm8@E&}m2i?LzE6xJpXcxm3%=xs1Se z@Ukw)SwJDPrY~S`50u1md+#li3(cW}o3pD$V&rE;JljGn=7vv2`3Kh$pkJbc0R9{0 zM%7NU_xIyBzer8f3T4DOj9O__qwCga?~s9GxL(ur77L&j6hkrHDdn|e!CNC~m~hJk z*LRbnanW^Ctl}Y$g%ifxk~+++gS^j_0?<-Bq5PNWzP^)Gl_EIcA~Kf`%(ZblKQZfq zMlC}sT7UEYI238E|D=$xiQAbqTRZKy@bH2tU?5aLS1f(4KnqEZhjx!Yo3qdmvL{nV z1Mwx@-y;5X!cV|?xA~tQ#_E4$1*v~D1{ X8{;_`ea5(5`m#auKlW^Mw z<^;=8f|{F|qU9r&vD{PLuWA&E-TWVI RcFlH!UcGM}cht)*n%Nv&8Ph;(~d{gD1OLyI(Z`gZM z`RyNYs!Q6NecF${-YTmv|G&Ni3kVj_+Vbiveb!eP2fYB#Y3wP!Gy+m7o%R?lV|U;U z-F6W9a6{MLxWq>w*yGG9WMQZx(WfQiA23S{JX EM03Dh-F>kZ@8#EtjHp9xnswA{xlFP_LTmf47*`SohQd6 zj^}-?fd|8C8w`I*HEq`iMM}(OAh3hKR ^a$><(yesmE(a<8$L(xZ^OTZ(u&g`l zibU?Ie&7;`b@UAabnm3lf&gRbCB7bYzCXc|R4LFc1eQeV8VWwDhEGJ_@S$SC7bj1# zsd1&m`tl{} l;=6H2+eWP9dg{cCi z;ybbBmulf`vVPgc`urJ(Ga&YcA!m3|(R#KiIs1EH{yLhmbMyvR{Msa5{i+|b_rV&n zi$ze1X;jN3w>6E8)5GZ1R!in?$gHnxmdD#zo2K_p@~ZA|vYu+g+mKj&Ag&-mQI1sU zV)vtr8>l~1f>(%w9Bm*oPfZ5gRsOE$OkQz7*UYD=bT*Q(jLp{{_J@>|TFx04PBc0G zB>E%V&o+v>c@_6!uq_11@|@?80a_kQV~+*=8Optm{qbh$*MrS(1 !IS{SEsB?;eaMo-7F a7P23FIt$A7Zi40*FS9V8NqHiuiVjkiLQ-|`y+;HK6*yMw}q=)=!0ZCF0qH2X~b zj(>MqJ>rw11<7bA0C+fVYKN6E`N?hsI@3?%6-^WP6U|4NV~Z{S>ciRH%511oa_58^ ziAvN}sd@EFv-A%8`hXkp4W;}4c2MUFtlVG#A@IQA51%_5&1g;4CS!R+Psq`k?&N2c zjb*HzojK5gdfXB{$t{0&uwJ1)$Yz=74118{O-Rp0Eb{&AM1tHmnyyWwUn*HZyYVK3 zYOiyM7`yy44miUgdX}n&1(Iy3P$equ9d@vvKf5n^aAs<%Q?HKE?U wO@ zd4^lbERcelVge*%7%BfBMR7_ZN2v1qy}JFZZRRL1Q(wXg{YZYQQ(9h=$Mf?c*O$c? zX&Ru(UNw_>uNtO_s@p8Vn>#VQIohsT=6Yss?E&MBK)qa_ 5T7(0#!v?}~r@ z(UWc+lAWe>u$loya&I(h+N)Mbi9oNyZfn8C$cM1n<+S&d)mTp%>)CLW?Qot-&xv!N zpFKIpw4{9-y|}%$_@}1uzY>@iO*9F@44(-Z&mED@2@1J9>{0um#ds&K{vKN9Jc+%T zToOhbkrf)_J2%(pNu|?Suz?kz4coMW*&<;@N3a@ywn=h6M7w82#m`&WJqn1Yy?P)c z+0|6_htjI2el$HjoN=^MH^QE}?tKY+n G-{^hgi;)b!~ma&RZXpey7tSH4z3CkswNZw9If^&FxX9~lD4C~|wPPWhBNdA^uu z^U1J;!7EPEq}Z}23ab7sJx?jD*ipgQ> eFV576hx#Su!~=^G z9|A{HN6cC=X-E}E`Z9;SXkp~tW#Z6x!zQFWHo&Mysy2J;s)lD=Tl3YDRL>(NDcdk6 zUHE}RF)3P{LlO}WBhij~f_AmJSyk%N>=}u#TP==WvdXF`OkKCKEFXam3qa$yf9an2 zO$%8yNyf|m`KUe}2K;V;%wPC}!{*P}%PnH0Y4|7TU_2BJ({ hD6(iPz}u^)H}aU;{kl0W~=8pwLR zt7+b8s`$D9J@t0!ge19iHne;qGd(irtegL`S~Hc=df*`D(3|Q-7a{t3uHiuEcng5d z>-yVGtvx(hHFEB5u^X?h&KdBjowYVX+DSm eHRum zWu==r?1I49mYadmwZ^!)S2N&-v}oTXK&VF3MJnOo>Li9na1_u<0$a8pce#+B{*;gP z6(Qq_AW#kMrtTofoT3pl(h&8=Bc$v!zEmNHv3pR^heImeUEFS|M0T?KQbghJ_!|kX zhSSMyKvF1GRuroSJRYhiVl;d>UO*aIfRm{LqnZeEOGWx9LPqsZP8SKdYO#BB9uLAR zzX)kpV?-6%(l^=f_EI@_E+Q+VQV&`Ol|OZ|hXg02K1)kv=}ZUi1)Cnh0jtq#UpzEE zz6>t|zrJsc@HqVma3~Eb!8v_|=)I?7wqPbcPQ~$P=Dw->Nt`6R%tVy EoD`7f!?HH|Q zbF#W9JRm}JTL<-mRIpb4QQ8~6>;TZD3J+Q>S%`Id+$L+gq_;A33>9W+^B(iNNdNQ8 zn$ L32Mo+l~%(x+itOf`_dqTH zL!4ZXc}QVgIW0#HoNnYM(f1)~1E*jjPM+ UW`CmcoyF zi(^VP1`g#d_Tq70x*OK+5$$jypn5@d1om!64C6+AM{I`&(Ea#n=+=%R-+Vj0hV z8U 4rVFAY8XQYio57q=K?;lrK!E zEgUK0vWSD)js~whdTVMJ&Ga2h^?%5wHe#OC@iae^u 4ZE|7es0ZA+sIbP5#ZN&j!f%KE1i~oRCEwEnIWpddo&yAt z9|I*l3DqQQV9`bliFV)wS%=WP9(AGu)vMGrFSb28H{h4fCDWN+nM@Ip*oTN` NeT-XovF%Tr8uwyD>Qt()s@>%`8-*fvSx^3RDHh+z-8wW37UCVX}I(3Ab@DDq_U zu~3drM- &71RqcMmV?!<#8PR5 zEkDlv2It96-`eP=N__tOjoQ&(@UBje6PxMuZ>=7!X$Mt^e4;geTwrn;k3P~0Zl(5C zT)B`$CnLjDECSggWc%(j7Li@6o=+ChCBpN3<{5xR3NLu!VS6k(ML`^%hqA}}qxP3c z$-TQ;k}oXaSqs!|J*~IBzvYbQmf 1LVxikPPP>&t s9301nd*I$xkmRbw%&O=<-k zK4+3((ebt3os^0f_eiVNQMlB!VhqT-ZT`WYJ7a?u3&}5O=Xp^e+G~Hmv6D5mfp;gf zTPp%)Ej*X4McVQL-knZL(8 elr4{lU3y0pS8uEiDN cZOxUhBg*?S00(Y+r;dX#dlc*LP2B zMJQ$1?X~^PmQLseVe0rw0no0V0I(5EJ*Ditl}{%jPA{rm>!^JjK^cv&ne0aoi8bm< zXh2msfCbI%e^zo)^YgNe(S1W&AsE9r25<2U(Y+?r$hilo)*nm?rQSQz{=K98iOvgA z0))I9(cUv_jTPB&i+hn0qM1`wEBP^l`VM~MH^ojTuu#FnOlkmNoj^M}eo;2EQab Lzcb zM{1N?^hp|k5|fa(X0*za6yOBkTs-K&$t~a>PmpEi_7)*RXEMbJDLymE_~~L>V7N7{ z!d;nB%kt$hbT;vowz&OW<}`xO4kckR>?@zI?2@^RqQ5ax$zWnnBv_JXq9q(k(GDDU z+4+Jave8|P9y!}Q6%!>}$i}rqzvV-Vy^rhnkzn-O;Kc6dpoCY yl0LH!2(8ISEv>VQ $0) zjnle+a-jHxpev6C9kX0%ZpJvzUfZeSJi&kW=1+fS%$x+F)GxMG-!hc18QIQCtjkax z4U;pL-yW`SfAL&Ud=r41ewY0=Lw=hDsJlVE+#JzCCz-b^yf`xa*yHD71hhb(#1Yk# z{|adQ3%np!MORivpAan~KCF-n-ML7o+-aWi&=kahZ-dS9O8uNggXt@m2LmQDSC_#s z8;LiV13Q2yrJTv`e1;-^wq$RcLr3qgyiz8*<()M1>j~OaQG4R$+vcy$S*kMJ->Xj% zfXiOW;LQ`b@dYK^HgbMacLoj4*73UL96vCsN{ltRB9!umT%YA$)Lf8KbnX);L3Ut< zhtW2wgnndIKe2jJPPaDSf&@&4OVx!<4`RxM2$zJM1hkru8pv~U_Asi`R1uAgPxV+M z9*@R%_90{C)ax8 E}sfZO-u{g-Q4VAAf^ByT7q7`|0~#&8;ADW$pJ+Nbw&LwR$oNZJjcd5hC3 z4m~4aV#OF A9u3k|!@^zZ<%atXA<&CIMB-+g)$G4odd|I&cce;j8j!OD2 z-d|(KU1@oWiv8(^*28kZYw`=3q%?<@H>0 r*eaQd3f)EBykYC>zv zR#Ch2FJQW&3p)Fn{pez18|naUj`=(KrQ<_i@0GR=Yk_I#XTi^$L!inB=U4iGgU9P3 zz#?*AulrQ@2*orNXVi~-`gk`?W~QBBDZa7i`d;>A)`y(}eF{|!nQtHN&r|9n%#kF& zXRlj1>Bs|+-_OdU kM@O)u2g+yRL)#PsJ7VRWOP4vp$)Tb$r^O v z^dk$d;!AnAldNzbgu2F1sSMs)9T~}9Wu~5n5-^D}-F**MlFN-2SxB e9q-t3P zV5L?uxujR=>Hf6I ~y=1$ 7VGHOHxzY?-Gu5(?vCs ziSyJlUzWDAQhSlXXw{j_BWsScU)_mdqBIN{oKimJJWRYqzP?0wMgP?IPi)_$qzEIg zj7`>86KAup1{^?-KSr?o!f>Ya)e|XZQUH}4LecYeY_8gO?PH;b1nA p{C8SB@O&qGEixWh%KNyqEaSxhe}^ERx!mwdO2ZyG)0Q zws;s?+Vb*jR=+eu=0kD=T`w+|;#S=Lw$cHiv)K cJ# %rE7z1svnS^9WVDH#Xs`!f2E?*4Le_F8zZ-HG;9zxP0YgMOkC0$8NcQ)0IHH3 zQ~%z+-4zYd7bj2hLljhSMqLbg6FcJ ~Q@@%uTdu`Un>91E5-EsI6- z7rA`yCwG5?=!rJpu@5}_nkbRp60kGZ7$f p{0B|0Ap7@>qV(A3788u`I?}}7woqF`1Z7StggBAP)o(Rb*n0R z!r=J+M`oM9e5r_A>+!{Di?tkgQ}+ci_d<<~sEjzp_a+f4vdb$;`aEi&EB?4>Me&*G zhj86??5r$bLi?FivZZKdk=w?aeVMDufm%v_P9ZJZHqhnsq?y6lhFj+Fc*Ox2!hYG` z5dUKz`XKiD%pa@ap$p_8^CMBv2UnM!U3=qdjK8f}UkP`bR>X;b4to#IvC;|vAK>g1 zIj e0JrRPiPCAY_jGm5E$@V-3)smT~Chnhmu=lAN7;Dlmuigj?cQJ1)q|+-ob~1ZI zT-yM?7j{zk!98xbSJy* u-Yp11+{P9y)?8gww^3gditlZ;zcvu*+ShzWh##~#UR=^g)MzNX$&bbH2o?M z2WOrVh*Zj4O#yuk*8dJ~E0^NTp5v5<-Q{AJ)t~%kEiM`|8E`0xgPBo}uen7ZwL9Q3 zeSD <}USowr^oL+A!;dyxX5t5zSFLN0 zR8*`ru!yCA6zqPn6%)5oLFP&w0{+qXw&onG`}tF2Lns^ynOLF(^Z_&v(=A?S?#Rwa zg;TtukGxBY%1CZsuXSI-vgc h4&o zWpR V!|Jto+cS zLILC^YXFt*jAE<4=mU5t#NZ(kzV#B9uL;FDX!r8EQ95++Y3i~uL5JMPK}f>zjC?(@ zCyKqg!Tm2R>fWcS2T!WCcA|m?ew{ ~#* 9oZ1wB_+dFa|i_n|pE?zOMdo3tV9wt1YX8zoZ8zwl^$bM^Q4Q?4OSr z$QX387FL#ES+@2~QcafRKE)S?A_c?dCf{>8yb{eEo#;Kmb(5I)fuC%uBV_T&+qFXN z`(^IXM+rg%F+cmxi^Ql~$a>UC{gh0IiMoeNbJ^2r`c#lnPFXXKn%@g89pm`R9Akrq za)BCjwTFo`k)=+4XC{7INi9Q(Av|P>uVXFMGi&rDsz~YI?;e1_LkO+jxogD0ZrV BQy>-B}A&mOujk5dhEK!o;OEJlxmGLMB5g$x-4x)8m1r|QSzp*9IN3lo_!L{*7^ z(IQ3%!kNfuZnvIK{)zm^s0R#0=9nIN1vQ#1It~kr_%xP*Ngvy>U~EpBkGm|Z&XZuD zS=Tv;t>Zbk)iV?xPpS>t8aoJ^gj)VqNyw9Tu=;{k7S7j&osScErQa(l)jYr0X#aC( zbjK5`pc+4t8~VwP`g!ZukFP&xhUuOwx7W|5QOq*X;Q@3ROXX{0pZ6=HNwF-NXkuc9 zBwGWW_Spx8@dGJM4-iIOw*TBv1@ugZXytLz@fX`i=R#qTQSVMJ;wj>RV>eB#mZfyz z@$9R)di+aDV=e>2Kyej@!afCE+e?oMO?$LlFAv60k=!cm#P2*=0lGr>y^Q(65_7Z~ z*XJ4uIg0qhL>669+r;fJix|};O|GIQwhBS9p03KkHB2AkE%X|5<%1|L?U5#~tkEmD zz68y4Ol>MWmm_glQ^1HQz@CBpkw3x(E!FN|f*%>)+=7F#Ie;2%AVZy3UZP6;w(hNS zo;~3~)VfC%5*ljMq%z$uuUMyr H-#YxR*#7Yp`m|!%(StyA7+?n9QZl z_$Mf=7C@~`9Tg=gCgHJi=AC&Ofqs+niHraO=fM P_=_;q`csg2 z4TWeUb8*ONqGDHzG*SkxX$Dtq|M@QX-DfR~IB_jEZd-6g%en;oVS6tDxQm 6DX+B*j5M60Qt)9EO%BZIXZaz4d~f+b1*fSi$0evLoiq6*e|M{hR?}gCDn5 z{$xQm`%s}lp~^09wm;0*UCutb&rN^N^&&VE6nS9ZFw`X^BNyf&)0)zDKFt*f~Io&i$7m41>Zbq-@jDR&N zz$+WiB_$(Q>M0s*sxzKZ$H}O%NV|~ V)!kT)J(H8wd-Pi7tCwjR zu59?^FEH#101a@F<+D$lvJzbYJV@5+XTShp^=mAW-rP}|sc}sKCf-$)X goV?X0%vz3Iu8EY%IDKZTsKpRc);$a5l@u z41E|3;5#1enzkJdKhV}Pt|6{6{$BBsa5uZMC~j*7CdXn1f8V;Tm@wrJe*EL5G7tMo zkM*JLjNpt83kJYr9e@+9=K3?jp#5hU5mSnJm(fbh9=Fle3#Tq8kK3oI-5sF-yE?I2 z^OkQE+Maf83uD!Z_SzDlJ?O_n3xCQW@>4_-L2G4Jt5aXnQ64(wF4B(_lYbTX-J0cO z^CL_6xZ1(k$hzbKRf#yH=NvL5C5JcPtzLaXawbhaz1gE)dG_d7fyiI@yf8@;ls%#_ z`Wof88FP1eFKRNOo8^`8#d-1F6$!HzXrhk-c2N6}5}VtGS(P^mw?(}KHNHGBPEQot z3C%Rt73Cfp<>Df#kY#zMEuc%e+PkP-d=#5$jq_C{Gv9TAqqo+#Mr%%NoZl{0q%+xX zfX%d@Zk_r#UYR~G;tviZpZ{`yCpq_HIle+iuWap1CqI5Nn50A44^vX;6b9h}zyq6T zVze`<$qGl_YTthRq!%V`)R~J>6J%RW%r4)XOp)&Va%`GRkp<2a;V^!7QBj(dpK8W} zCu=miR$qQ@t$-{n#<&!>1w^+)uVck=H&n=V>rc|EFMn21jF0UqI_%);9NJd YT&;Vj&(_ROzZgq+pUI{+zu|3dZ!tebH&gQs7FJika z_j~3>t&B=Fta7)_jjm+EE@X1(P1hIjnAK!AWeyb2lGKW-uGn@RX<|pt#D;P9eQ>+H zxIPEF&P~=+>?6f4MbXx?^xu?RfBNMTJ@pnI?uI )RSS7#74K_NSfaMqQnC;_pqXZFRF^vH8Uo*1BUih3#ex>1HIYmGr%+I1G_+6jXCe zM@baZfzvxGk@r@X>6iY;cBz1(y^rDo@3-^c2IMRofS0p1*(F6yF&J@z_w@m11b7s( z=`F2q?`X>wH0Xr;-BxiVdbi-Gbi$mh%ffdYoU+uMqVF0V&!+m`!69BI8!cT` ZR{;)5SlcYXcSiQRu{gXPuV-P|OW374!7i3)phXp1& z>bZc)Ps^%&444}A`3lQTP10hjG}-Q(p$}P{9cmoK^_kf^QeCATDN2`n&IgR&1oWMA zcgTANi_e7Ft88-Eju)Dn Cd{@}-bWgi%;Y3*G z{FI32jE6bpo>gtx*SQb+X_C?@#To}|edWyXb1Cs$$y!U43#z>PRQSGimk^cF0iE0< z3xV7IB)#y?TzBJBdb17FXt5POD~^CB+1)klxQ~Hcz7FNkSPxQTo~~d+m`88jf0J;o zsN-9}kT*VDImgemD4V&umetjOet%~Ik?NV*59S%qlpDuC(DHAU{$5_2P#VB#N6~N~ z(Y_zIvfVpc2C0zYNi(Cp$ h>5?KSyS;HCrCF;xD?F~X(s z2pZLNGs>nn>bsSIsY)|`CRu|%D8_6h3FPyUSN?&p_+JNQ{w zLl;d3 rD=R_hQd5vRMvh$C;^%?q%7r7iQLKA!;nW z MxVCguY~s~buy!a&n7kjXSS2|D$Nqc24r8UM${ -XI}Z0&a~@pt7FyOU212X8gqkQ+nnNB z^ }juTHsbwM;=j@X}DiychUC zQr~sgq2g2$@g3-G^MXSWJzoKL+f<0f@Atnqm9$)2<;~sMr&gwZ=*ZWB(81OhKAha0 zwW@tZ{OEwPcF)w6ZFA*~qt~k(*3|Z)VS*syByr _Yw7r*?Fn0??M@l>;o{Zjug z(K;U%MBhK5 448UNPYf7^7Ja=cHZVoflb_Ki8|4aPwY#8? zHfpzaC&jurKg6zfwba@4OVDuMj?F)a**0*x7=)y^qOM!l6{hHa5Uk$?ZZjNzMBPs% z0~f_6emNlbcnBW39g9B5vW!2-*6;VG?J_*W ^5e0;R?fzOW{~l9zw+QnRMMBjCfOHmbw3u1GtNubC{B3N4L&-~&(RqceN7p8 zen=wTzK_=uzLV@@1Z)ik9xVFrE#eHkE5h1q1&f?SZvLGJ4l}?JN0{TTth!DS9UF#k zC)Nq)!MmLNIJ%X5r=BpQoB$XQ;RWOD4N>THdt0<_0ws5L#OME>TDcvwrT{qCe-DmV zwT+x;mb=4|e4JV6n~tyj|1k9y4o&}2+psjqkW`q|2nj`El)ykr8Uc}#hEY +jlVVD72VUrQWT;zKv2s>F~a1->D-%VTbtyuTn-uB zA|Ms&h$-npT2S3XhsF{M>+v(8kVZGz;pVNl%>EZ13IuTg@BD4TwaR(`3q^7t+H*zz zkmeJiLV)VYSF#R%G$oF!P=eNy)mJ?^w#d2ZUSen&J<$6@HxNp_O8zX>Iu@Xk^gJ*> z$p!^`K>isyDwm%luS|p}r+bS!LDgh4X(9XpHAegrywy8H#W1u9l(n%U&s_?zFH^`{ zde`TSKieqFM;ce{&xjKx7VuCUy9c)UnpHD9aW6z)Zco>yc|7&iNZFdXl{e{0=Zl>B zReNPI^5);jvCrk&YoAihObco9n7bw Rntf^) z4jAeb;;A`xsTYU*q2%z3eW?NM+jqw*bylr`N&O*ff=^#154_F;mvC$)$g3fK&u1Bv z#(QnKimyJP#u|o{tCK#cnPzy0JX94}mvQa~P+uxvE6-8ED6BYOrc(%?cu2H@N=+^L zb;oBCuS};`O4s3Ehpn0bue9lo9+7V1Ofwp#MX6%laMr*-XycW6#i#@3uWE7Yx9IL` z&^1T?(Rn3o`UTV{wQ@U;h{|+?*c~=?2mHfd@suZOJ^Uolwj)tgsY2wg$O(a}*Y-JO za~N_AUPobZwKD}$TE8o%axBa28_3*^^PJnK-=tVQyw&mNX&J>~1dYK+Eg>q6$AnUr zLWs)QV?tEU2vHdhvlOW!gd&B&YX0vq_4pnO8@*<918@=2?_e`jYaR)dBu)9feT23j z3a^rH;Rj9AxdB`}c6W$m> u&0cMOD&r%* z7!V)UVI)C5+-bg!Kso(cYo(&b3&VIeH5Yjv=w7fy9X?98t*{SID?N_ZkphO1--oq& zvo=37v8h2^DWa#tGNmux%e+ZF`=bAts!28~w8U-mZ0soEXI=G|zF~lSRqKI83;ViP zZxaDQroi*EOQks-tFKgF>+-rz$ +*!2!Teth*|*>7X{D`TJ)2v! z@IMsU>RB@(jCK43jL_;IqX5r9$4GA7ou|b1Ri#hjkzw~%pTNyVqPcA|q*AdC^39M; z!k1zY*L#7roaYSE%f<5koH6}-Cn-92PGcOzun}?!)ep2t8Nxf?>t(xp^4N>RHOQis zcs@~J3~IAZ{}%dF$5UX77P%B>BbyaL_xaJ4H7|GAcM3()J*{JEl>Bc(?gNWXU-qFD zmG;7Woq~20NL+^cyZgRoe$LhSGC %a#7*eVnWVlk)`sp_u%X!j) zm$wm6hgieCjS_D`D_@0-PhZ*A%Q9azOp$MtOt+Lbg68pEpOvkMRI+vkGU>6Yeie%w zV|a0f=N8LC>tX*erxC&@l_z{szeU0)T_$|ee?8d$ZO+NH3QF&si^e;K3xE}=9k=LS zBp29#o9Y5cIS$LE9e=@-DXUR^kkZH{J+WGENs**t(y8Hw2C{B|r|hsH=~~2rUY~ui zDYv3arbuG#Z$uWQL;>4BJNIOTlA(4@U7Mh567NF`!g5Aey3iZ8A~&$&d-F6 zD#SQ$0oBRmNx&uaD6M0oo#$p-Z(#g8!;;#)_0}OH&rG##0&X~W;So**u5=(X8mLW6 z&y8x`{yVc?AN5KylO^fI$UfnqMx-NK>sK9Lk}Po^n#FxiVtN_?oAxGaubpml$VI=f z7bosU+VI7vXHg~mJB+9ITg?@d-x4`~XkYK7%gt@@PFE!?HaK_nxs}-|j|4((wf%J` zvggh3A>BAFLHp)+;gpgd0xD~I`GsYpj5`inRvb?2pCP9x^?md9qY6cl5 2HM3O4Z+7>Xd7T)}}hbOr7|dlkjGw{~NtX6FFi!Ky$3(^&0Xw zX?u fwP4~72X52M~MyhV;dHA!KBeFE0T_O(djGn2+FVC1*-$!sUEs8BrGiXAvrM| zKM%_-M`gxux02dIEed`+ds1>YYbhvM=ZsG|oc?(7^b>#n3?BhF*)VISx9lxDG~vWb zPkBzZck6QM^XEl0OQX4(C*&-(f)@nkadDJ&fjmJbxW)CbL$|}{947bb%yy*p&<`Hq zTic#8e|UpGe!M4tF0}q1Wc;1*d@cVy-vz?+tssQ=?f*h1S>f*sFHV@~^c=?ppE22z z#t}snsT_#?aAJs$boef9_&di9W%x%vt8iF cu<5=|2GbisenV7o**=&?RsX=SAYDpXHKGO2=Hpjyqpy2i*eUB~5FR{Dz3H WTrVEe0!^S-e@s#UaYw~959X92_`my!@RdAgLti93Rk6$N3S zdpeO^&vck5(dt}5GgB(lBh;{i<2%i_7@k7-+M9{3bkV^scQN`Oux~4v*FgcDOsk9j zg+l3XoMv(Y8!CzAYipr36V#iF*(#j4SRHN`lVcOv&p(51?E<&pW}#De>o^Zy<{~TO zz9JOL^0)^~Zl{X@!!4d)9S7ozWebXNR2d1)hE>z9UkF4s!s>EaW%BJ`4)e#m{x+>m zmsh_!i^I$w3k&|g&BJZ|NP!}z$f`&N*!LpLvjTr~{FvhIJEAtpdppSkqf}#bNDB zT(PRhtg9J|T>Yfv;SRKp>OBtzF^{ye%pB3mJOUV`cuN35n5#}kT PZ^{-GTl%VcvPDcKUD4A3{;ScEowEC_$UzMVcHd^tePA5)21?^&X&06V%gBJ 70;sIPNGq8f;{Uzhg=y)(9_9WSI7xHw^X#{hed?7H$PL0G~e^!;hj z3i2xok-pDn=2$Zz2ct!+4^IY_wK&<;wtQUlum=&zs5|woRfYyK92=%7p3^l{MJ|-m zXcjAmxj$@DpBlRbbGVZ3&}vut=_s$ 7f!m^+do9Wvx)v+@YI?DsAI_A$-BM#UR5^Lo#It9OUCg1K>?@GMtFSi5`v z->Pbq3^8})t9XE=!=Y^kw&K0+3#&=pqoh(tY)~Q#n^@KbB~OrU;SzQ?^uq-O@H8oG zyQdIWxT=|;sEQ`Nvvx!&NdL|Z_f9&=VZYoF!wX){wPIjtb{uWwFw!YKVE?K325J$^ zLgc7VZ=24BCcZa#rUt$D@#?HHVzl7GpG}auyKLGbns50l&&RN}ZD|xg3j?lC`&sa^ z5-GPf&>m}G#-%S%&gA+ULyaqas26i}D?}|szj;EO?1d$`ZQR!CgV{*HdOI|}q1fH! zC_UJrU%;lj>BHc8KD|vqcG~@1%Rno_+R+Cdh9L>5dYISYAFjXW5?RV`LrmwQ-X;-s z3T+O)ON|iaBkjocKuO2G(-&16Nm;*#`VrE2F-gke#YlDkA$kne6T3(Du)uGEQB|I1 zCuis#f4Iq=^;W*p^;)!?tf(FCM{J4s ukw)tctW6}^AM9hr;$uC$QvDoCVT5mIL K5$LxSG8hwgg;KKcenLPi7znYvM_@MQx;K0xFdIz+6sth2 zhi&?KmdkMkMRnYt4!>9E8tTxDFr^}IfD=cDYLil_G0lO0@{5EXelPIsKZ@-{=DSj- zg93gMsUuWS28sd`>4$;(&1-T|c1mKOtY7LJlznXC({H}p*Vpi~6_enoXja2E*}_6N z@*{GYLhv*6Xg6=)R?|!k+c3_|q#ewa79s1l gN9umAF37>-^dlqL`FD=i(aH7 z*50K%Uuw*%ez{Mf)fhVRZpulCx(=u+S~^z|%yaA#Vk9>{gduXz5&J2-hTJY%PjmS1 z+N)dbG_#-AFeu~}RU~vhNmRj4f+$mI7o*Kbjp2ooDGwRnhSJNVpbEm^Pug0X*rbr$ z_bsG51V@rE3ahX`AtuI1m2S{0SWcz^x5LE;o0EvEC)FR0-epV4I2Vmyy`F)&&hXAZ z&n@)ymMGNm+ZELFcE6L5EL5`SQ|DF8;YPkumNF9sFRRM9S?e_Xl(Z4@E0`J`bgl~E zmOP=B{QwqRXZKF3GjH~tyX-w#nfyDIWWMVv4Egh$X1SA41_cO!g|^M{ElvdpfhF6> z%LR4pK+i&;FOHf71=ck|MS%EpRbJ{Rb3Z*tO8k9GC_#c34WXICHUmd7PR0x24M>|} zcy@?7UKADN^-E`t>17C}LYk~ea^0Lf6suO-4cuQ>0f7!Svl{hzw{JTciw4zmiT3Dz zQnEV;H#EjZoguxS>Cf#^GBLNikVD7>r59X27|RFh1+5v-Y8ka6h^sV7dNf BqYnABCF!KpsTyG{3h*8IO?csgjUEJVX~tf zD&A){Qp2BlS@qr@6QyWAY788oNgdX~Nh{};Sm5(?_kq2Y_5Fl>^ln$S<}b0UWEyXi z71?i|ZqCtEpiAb$2@@NJz9#J{7st6Qy+GLSh&JWeG;wcl`$8|JFDysjL(&}LWumPn zLuOcimn3=ol-2;+Ctio(?)meMvfeb-W7(=x2{a_1w={3KS%V77p zMm_6^p*mZ<*`)1>Pl=fP(0yjrIwNLptv&TQAK#+KT}?wlBXT>o LHG1E_MBrFxV^uh2j+^6>f7U@@~-}{vU3|^%3*u`7W zwVySR4;voB)zYu#QUa-GlJVoh7%=aLQrdJ`7ey$Sv%i`kk2~fKlZXq?Up(VDm02nB zsG wQ*p|)&8(64RFVS!a`u0CY*y7^^ic=pzZ z{gGASZZ_5<8M#DqN?{{Y@Ql^Bnl6{BizB}+MAq-t5xrGeZ8{w{!g+My>Q~-A_Mi)E z3cGCDX#3R}61E^ZB=WBv+T0@~T^c&mpxtjys103DEfNL$_u&pDbg`t);tOJzG|`?` zQfj7j3y$Ffb1aktcHnNIG5cfgAiy1R!Qlte(Qq@ae8Ae<_>{;Y6*I%}47tcB<`RG1 zGAnp$2H&LXX^E35UQ$*i`5C2s!HDk&?Wv62)&~hZql{HsZ@I; `p$UqG=6h7SCdO)LpQqjn9!cFqRr`39Up58Zjw_WQ?j3)z>kN za<@Ww5I}sJ*T^LN^Cb~J0(IZ@9LEROo`C>`+c&i>#cr%Mme-Dv&;Te_^1kW?(P6we za+oySv&1Sc>Nr&;_L|k!t!J_qkLxvscOsYG{+POIdAZ8u%?{IBs5*YY6?FNT8En*I zR{ Ku_q%I7;pC*$ zFctt?(;#}i|Cw)g%hpYb$^oZjwKnSip?XZLP6jy@kZ(HNK+(>Bw%$f5mnQ$9cJ3yg z Q&PcE)8_X&7 T=t?^O|;2SkcL6o^ +Sa&F2^>Tdx~!R3QLa3&q0ugFA}cy ${>we_zB82T`(W=RtUkJ zT`Nt_1r BnGn%D%$?Ne84AZ0Rn;`wm?&zFb13HUNc71bfG=3Y zvB-#JIR|=3)Le1;i33QW-d4+6zV2Ra$06pGxV`&cW`$|>+mT=Og8e=^13&)ur80}J zr9(L&DDfjM(N$vjlT|q{*)v8hxg6!HS;NoM4g~l$=cgjuYU?>+l!|9qp*B )a^ Sv*z}R<+BIi zft zCuPaYjQ`tvD;E6I+4xGJ@K06&0CaFnBFgV}L>#2}_*ps?g>r2fNEqFE#vpse?@VQ? z#z0JFtN5MaX}YGkDDfHty-JRqL}GEVnHk#NItqfVt(#&b#uA@9Bp`D>oTjUh80!tM zbDJZ|<9Rnm_yl$#Xn_Nm?}8nQa6o5hOwV@u8D~ry`^YPWc!71~X^pMB;-p#~zdH+p zj}|)xS`bS32&?B0nBtR*R9LcfY? _Rq1GfaZ=G?m2soup zBCXwvRt&S3(cg*d@v+Yq;D*nIG`WS2KV8-1ot37!-qcH$>6O26SG@jx(EY~*Ntvz_ zdM?oh-*D_`(bi`^wq(gYW VqyOKjc$ezl-6rXD{lqRYWrrcu-ot&OCTfj?0BK z(0*Y2>e%q?#EA4uAH5nV;B$zJc>n`Zf{NO0AqtXgq!UU%7G`hHmxq1yaR^qs8&NaW zm~4hNTG2vQY-q-}lph)g`oGY6Ji=8k=`zU|NP>RMA%Y>_0V3w|sA>sIaPRX-BuR*5 z&_<=($cc$#NR4^3*36(~&C|Jyb+v=pzf!Qpxmk;*BR$sM-fDk`|C1bUJWZJ=XvVsl z;HBY|OqS `lQdC*;4q?>9WH0Eth+-ePg7U+^WDUP{y^4%HnnAAYNyGO%TLVA*xWHyx+ zTkf?H|I;PftDIk{M`hY*H~kq=&Qfc7pjxUcfR{Yo+f{qo{{>KA4J8D?F?sKFgQHGC zt)X46`l0oV?e4xVw+|ymBe!j%rB+6N%g^NdCXOrmf?$As9FKx3C^bdtLDR6!gp|-U zbOg_-lyjE){1;5*e7IeyqPe ;T*G1trT9Q+(;KhLG`S6rYF`cW^o<+Lwqh(XRB7*Wo4gp4?E zk;>|2sJT&Cc6m6&^Pt;AR1`ra=apUd*&zy=c`yVe_F7b>`&PJzu*GwxGzaQAxkt~9 zzXdBr$E(og>MtW4U`HGay7 &Ra=H9Ct%o|r%f4d&6| z40&ba_Ptx{zMHW38#mWQW*9ChOVnpJecmBsPs`?kv>OUD(~1Y{gibzXWKnnf3wsdB zDpTHjn)IC;d*u|lk-_QYvh?%0gG*-i#d``ekG|+mSE9wilRwmuQY7sJjOALbG>dR+ zAZ=sAAyC3j26(NQ4Im{Xg=mOe3Z<>HqcYqs#sXVgnXXLA86(Wd8!gzSybe 5lho(6-h_CiYwiBIy2~Zd&BF$KP{QaY? zsv(D9HCFXTyR@ix$@3s9$g;z>gfQo}JH}PL-+;vmYi`C9AB>fD9@Z#t(2#KFrH$W= zrtgay3{Q;yDI+j6#|Nl@X+&p$OJGS+Qxu)U3R264oLG|(soIjKGOT}UUlVj+^EXqL zxIm<(T?thXb|8w}=iEss04+Ch+dgqB@wkOQ1ec$6*JTW5w-)8LRh9L@x0*&)m#Hv* zpJ6*k6^P*DaK|=^D9OKA{v>q#ZSHa3P4d>O2Rkzi)yfW47Ur|#!9J0p>QyXq@K@-r zQ^mLN>X~@2@m)B-#@z!Z02_xX!7`1)cg0mVgB`Z+c6X&N$+{CHyz+#(M@BS z7vl@vw&&2(x>HEb`vf~WX&|PbQBdQ9YaF!Hw@h9ux6V21a)M;|Q3+eK)+-+}C=`i0 zva(MEOCbfq>`mk`fWuCfo<|c3{zne274*=q&KPRLpu&8g7}9idMqxPB3}M)rpvcis z&(4XK^ne?o1=8a9;@3~M$)D1@smUtLrwnZaJ02-7o(i##hTx0DV%eSS=CBO->PHc7 zOzI1#=qB`sLci1~G?!POUtq9rFr56rk=AK(!;G)s#|=L5k}OEZB)~V=M6*Rk+lozE zzWMb9zAbs# #r}V*4P3M33I(}ylmaRmsS?ur*hU$dLZ{{idITmaaudif z({Fh463oUzoY}yzzO1r9w*WzgD=n#NMbN9b)SJ+H#lx$l0|gsTBAe(pv7V49xE-aK zN4M=4ILA$oQ#TjYt5%}Kn&F>fHyoC03}j9@pmu!3^v{suEMnM;q43!BZ9%)?f*4iA zo!Gn%Sedb_&Hh1n5xl(GO$eXY@hl+n^wy@j1x997n~%JQC!ZJxi@V#YdA%PRARV7L z^%u~ yVz*PnPKw Xyq7r&D5N!q5QxkA@N^QNscJrJ}ofChP|7r5F&RW%9NL)-oV910$ASXv=Y~# z#g|Q*mgQClq=w~$knx>jp4G(bNE`R3d1FmHBT**#(>!_a$M3*W+;tm9X-m=o`m~!p zEW=xw$R{Fws+D+y-kkK49C@MKh+|FlOi8p)VAi7&BD0Uk4d1E<;#0Xf&IB)&b?X9( zG|6oyFmeue-AA@U^sQ j=OWE_ur(dL7?MYQ3zM*XxS19X-*i;Yd@483_^(C$NrL;+fzFtHh90lc4H(t1; zJ^Gz!avN7g@o)J_?9jFG^`GYi kF~&! za8NiDZu)F(o>J_ZC%2@xc40$iHT(E8?J$oKpd!3PMF{-83A;rB`Of0KsVF1WDM_C2 zd%W}-NJJhCMRu6AIMd+MPq}p|sV`~1qWAUB$OFl>g1{>B_Zd}rRf-;hcK=y=XsEi^ z(qkS`sEW$c`_GWs_tau7ryU$r<%~bTc6WuY3E~- `;omx=x@Qg})A)J%Qy!Xf+B?#x_B=?G@8~;RiX8DZ$3kMk zsaRLGPwaqIy;=6x2~$Z%@NmK2fw$r0YKXaLCYRtup$+V%l*pzPJ0)N8xV0MJYq=GJ z%BOvlC#t>AexucQK8I$gSiMj?eaX+h@n|N`3&W^-C4GfyIY@ag?J>g `Xmk=7gyxX7iktl%FA6P*OP;sFpa z=xlI$5=1KG^@T@(HAFXHJncD*X{W66G&5Pbo1h!pPCr9WXv7RDS99obl(D%^a9zqa zHGP|so-$ee$1nv4t368`P@`I^S_JepVD_NS-noytt4c%#UvKX&&DeM4#CB9PzPoA< zQnJRN-D^kkk6C%Euku dbf2U;-?rqQauS+gr{IH8nLVU)jg}JL z!F|wyYoDwbJ1Lgw8}s>NtT*`lGUBdvrRp<;Yd(kKCQMEDY}F?>XR$hWlRH*r%{*aJ ze4q}PI9lpUr(%8sY5xz0PVE;uDE|dh*8zCgiSE$fN?+Ue&pA$3ES;9lHuXaKsdI{G z1o`b{3$A(KZU%AqJn;0~QLAQC0QvNGsbdkVM{OGZm|Abthcn3mJdMal>H zf+fHL=O_CMjvBWwjbvHOaq4Dg!fGEcHwHSVqMoIE2k+-9ZBdfDb(cb>qDFZ ^EXXNVndAzOQAxdZguR1FcGk=0(% zEDjD3S&8%eaGYrUjpu+RX@; B-VQQ>Lof_Aq*R_ck7P8-5%W-#>uPJlEq8Jm zyD+^&y%tbeAL;dP&4(kI7(aJ98K-SfTzw;8c;wr=dr=rRQaQ^C$!|Z>M0fkjPxX*M zJ&fLlJK8kODP)iZx KHL%o_YYRWIwkaS|HHvpkaR-++?YkvLElu5I^k%o z_@j3o0jeh#kauTSRq80&)^8F}OgFko6P3bU2M(u%t0lfu%qjY_?{(MNid#Mc3EDAc zcGlD2kKl45@QZVXZN7_-)X9^Ai(-|!RN^RD?DJov4F|xi 8%r$Q#vYW@pSf zetlG7PR^b5+lKEdot?+%uS#}ZJ+m#(sx@-vXkXtKR;hOHiOgE_8xhvm 2_2 zE&5b3!Z)w=!+1+W6}w~2{GT;B;zGDrIqi639~t<$+{j~$eo4y?z0PMi547ww>X?6+ zMNQ*sd+@yypYQ5YwKYO>mBwuJcDBI1SvpY#xveKNw^?{F`YzIFcq^8AV uH;4F-$PHbMq|G zY`)Nnu(4qqFg7?9{F5xc!1NNzK-PksvxB(2$$4cDcy^p2L)@!i3kjj)9Tax8yYZ~M zHO?=uAy0msCDcqaiz6D5 SiKiw~f#Mi;JXS2;0RVVl05DGfh9R z)Vi6)09z)$XM01Ot}o58RX<#8{v8F8J$b;(8@C%l?$FG`U$48ecW-qI=A#5lm8Ktf zx+g{?vuszGSnDZr)Dt09<7IZ91kz<`-0Uw3V45aLpg=&5{XUwLmNfK&s`z0P41#7O zlJJ=11-n(g8q3E@P#)=H`YCwO49#@aV;>4knPUUjIwc Kywz&eRKIc`EnsMwn)JuHIN?v&Hl$ zJLUR `M#;ctcG`5AG9{)!-%Ovq!7LIGwM z$Awe9Cj@o0P=CKSOH+C%uAwHk`QyKYl~og5x^+YME5T)_?BQJt9ev(1B8bhxZCaxo`UWXU`XZ%xRsB4;p(ku$nk+qirq}QwXT?&?ZhSoBtdm 1(~%=%v__FP_Xr#D%lg@-GgbIjGiw9}28f;`uyH7c4S^4;Al;V>CIs zFpEPvcO^)?)U5Y5amHx{t1;dUl3dDFh*odWS#UPoIdgnNC_O`-yY~Ggtz|#xsPB!} z =+Xok#u*YG1K-CTwgvJ(*IU<(?z6Zvf$G4RR>uD z=C@^03ik&5<@CqZnD`O9=ir%iBfe3V;8r4^0_*i_%X^ #z9<;!-FL@V@X-b;#`n0qy`ZzDfe?fKy)MWnzVk-?jq&OF{F zRf_qNVqAml_2QS&uoWeNc8uG(N-CmPgL~M!RQEjZu+Y_|TruqV2ZCe7FW+)K-1TPb z)vAgNTyEFwa3g5N>Qgy2#&Y$u3b)STs8Mn*ntbKMfmYscytpqs0@Hem!u<2)!HW}k z9y^VzYX>WF3oMVDe$yOWw&YT`2QTX$EcH+B5j;a0{@KVa`&0*69y)rEvZ~L??Kau( zV85%E_7iC6(ux~11Oez}ch4a6XBNOxM+2b$U^sU#WeFX)XvX}VQekl&7ab}t@>#o3 zkz}^n zD?G>(F1T@e@+ae}T3qGFel<@PpJ?r0)Reuy8vePZ3pQxy&%%($^6jMzb$SBvhdt}{ z2Ca -^fzmNh7LC zera8n=lkMrKctN97`S(T{qA9C{>