From 79a3794703746a0726c2c5bad74631d8d97338f6 Mon Sep 17 00:00:00 2001 From: "petros.anastasiadis" Date: Mon, 25 Sep 2017 17:19:58 +0300 Subject: [PATCH] Update 25/09/2017 --- GPUs/{S_GPU_cuB.slurm => GPU.slurm} | 5 +- GPUs/Makefile | 13 ++- GPUs/cuBLAS | Bin 29952 -> 27126 bytes GPUs/cuBLAS.cu | 17 +-- GPUs/cuBLAS_MultiGPU | Bin 0 -> 29936 bytes GPUs/cuBLAS_MultiGPU.cu | 156 ++++++++++++++++++++++++++++ GPUs/gpu_util.o | Bin 6688 -> 6696 bytes GPUs/input.o | Bin 7520 -> 7520 bytes GPUs/matrix_op.o | Bin 4488 -> 4488 bytes GPUs/timer.o | Bin 1704 -> 1704 bytes GPUs/util.o | Bin 3056 -> 3056 bytes MPI/MPI | Bin 94664 -> 0 bytes MPI/MPI-OpenMP | Bin 101067 -> 0 bytes MPI/input.o | Bin 7976 -> 0 bytes MPI/matrix_op.o | Bin 12016 -> 0 bytes MPI/timer.o | Bin 1456 -> 0 bytes MPI/util.o | Bin 7216 -> 0 bytes Outputs/Multi_GPU.gpu | 1 + Outputs/Single_GPU.gpu | 2 - 19 files changed, 180 insertions(+), 14 deletions(-) rename GPUs/{S_GPU_cuB.slurm => GPU.slurm} (86%) create mode 100755 GPUs/cuBLAS_MultiGPU create mode 100644 GPUs/cuBLAS_MultiGPU.cu delete mode 100755 MPI/MPI delete mode 100755 MPI/MPI-OpenMP delete mode 100644 MPI/input.o delete mode 100644 MPI/matrix_op.o delete mode 100644 MPI/timer.o delete mode 100644 MPI/util.o create mode 100644 Outputs/Multi_GPU.gpu delete mode 100644 Outputs/Single_GPU.gpu diff --git a/GPUs/S_GPU_cuB.slurm b/GPUs/GPU.slurm similarity index 86% rename from GPUs/S_GPU_cuB.slurm rename to GPUs/GPU.slurm index a7c1746..62b325c 100644 --- a/GPUs/S_GPU_cuB.slurm +++ b/GPUs/GPU.slurm @@ -36,9 +36,10 @@ output="/users/guest/petyros/Training/Outputs" ##/Inputs partition="gpu" ## Change this to the directory of your executable! gpu_prog="/users/guest/petyros/Training/GPUs/cuBLAS" -rm -f "$output/Single_GPU.$partition" +gpu_prog1="/users/guest/petyros/Training/GPUs/cuBLAS_MultiGPU" +rm -f "$output/Single_GPU.$partition" "$output/Multi_GPU.$partition" for n; do - srun $gpu_prog $n $n >> "$output/Single_GPU.$partition" + srun $gpu_prog1 $n $n >> "$output/Multi_GPU.$partition" done diff --git a/GPUs/Makefile b/GPUs/Makefile index 9848d62..375faa9 100644 --- a/GPUs/Makefile +++ b/GPUs/Makefile @@ -10,14 +10,16 @@ CFLAGS=-O3 -lm -Wall -mavx -march=ivybridge -mtune=ivybridge -fopenmp #CFLAGS=-O3 -Wall -xCORE-AVX2 #ICFLAGS=-O3 -Wall -qopenmp -axCORE-AVX2,CORE-AVX-I +MPI_PREFIX = $(I_MPI_ROOT) CUDA_PREFIX = $(CUDAROOT) -GPU_OPENMP_CXX = nvcc -Xcompiler -fopenmp -lgomp +GPU_MPI_CXX = nvcc -L $(I_MPI_ROOT)/lib64 -lmpi GPU_CXX = nvcc LDFLAGS ?=-L $(CUDA_PREFIX)/lib64 -lcudart -lcublas -lcusparse -lm -lrt GPU_COMPILE = nvcc -I $(CUDA_PREFIX)/include -arch sm_35 -CPU_COMPILE= $(CC) $(CFLAGS) +GPU_MPI_COMPILE = $(GPU_MPI_CXX) -I $(CUDA_PREFIX)/include -arch sm_35 +CPU_COMPILE = $(CC) $(CFLAGS) ifeq ($(DEBUG), 1) CPU_COMPILE += -D_DEBUG_ @@ -29,12 +31,15 @@ GPU_COMPILE_OBJ= $(GPU_COMPILE) -c EXT_DIR = /users/guest/petyros/Training/External_Functions/ -SOURCE = cuBLAS.cu +SOURCE = cuBLAS.cu cuBLAS_MultiGPU.cu OBJECTS = util.o matrix_op.o timer.o input.o gpu_util.o -PROGRAMS= cuBLAS +PROGRAMS= cuBLAS cuBLAS_MultiGPU all: $(PROGRAMS) +cuBLAS_MultiGPU: $(OBJECTS) cuBLAS_MultiGPU.cu + $(GPU_MPI_COMPILE) -o $@ $(OBJECTS) $(LDFLAGS) $@.cu + cuBLAS: $(OBJECTS) cuBLAS.cu $(GPU_COMPILE) -o $@ $(OBJECTS) $(LDFLAGS) $@.cu diff --git a/GPUs/cuBLAS b/GPUs/cuBLAS index a4f89ae43261d12356d9200e91dca87bd8a62178..2fdcdd01c33867b92a5f788e60607b6575ea6294 100755 GIT binary patch delta 10373 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 FT6QHrvP;|hCS9l#!Iyy@_z z#tJod1LMS%M|S`6B}G^H z7bc};qo-BVrp>IIJf&eo>4?(NN>ke^4|`y>J?YxU=EfCG%an%YtD0A_K`Z`|@r(cH q#6Dher=9)}>ZWo}$Jgp@*%zrQ}~l94NT} delta 10482 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 DWmPBu diff --git a/GPUs/cuBLAS.cu b/GPUs/cuBLAS.cu index 02408da..dfffef9 100644 --- a/GPUs/cuBLAS.cu +++ b/GPUs/cuBLAS.cu @@ -38,6 +38,7 @@ int main(int argc, char **argv) } else error("Too many Arguments"); + /* Allocate space */ double *x = (double *) malloc(m * sizeof(*x)); double *y = (double *) malloc(n * sizeof(*y)); double *M = (double *) malloc(n * m * sizeof(*M)); @@ -54,6 +55,7 @@ int main(int argc, char **argv) vec_init_rand(x, m, 1.0); vec_init(y, n, 0.0); + /* Initialize cuda/cublas variables */ int device_num=0; cudaGetDeviceCount(&device_num); if (!device_num) printf("No available Cuda Devices"); @@ -64,6 +66,8 @@ int main(int argc, char **argv) cublasStatus_t stat; cublasHandle_t handle; double *A, * y, *x_c; + + /* Initialize Unified memmory */ cudaMallocManaged(&A, m*n * sizeof(double)); cudaMallocManaged(&y, n * sizeof(double)); cudaMallocManaged(&x_c, m * sizeof(double)); @@ -86,12 +90,13 @@ int main(int argc, char **argv) timer = csecond() - timer; cudaCheckErrors("cublasDgemv failed"); -#ifdef _DEBUG_ /* Output y in a file for debug purposes */ - FILE * fp; - char * filename = "/users/guest/petyros/Training/Outputs/Debug/cuBLAS.out" ; - if(( fp = fopen( filename, "w")) == NULL) error("Output file creation failed\n"); - for (k = 0; k < n; ++k) fprintf(fp, "%lf ", y[k]) ; - fclose(fp) ; +#ifdef _DEBUG_ + /* Output y vector to a file for debugging */ + FILE * fp; + char * filename = "/users/guest/petyros/Training/Outputs/Debug/cuBLAS.out" ; + if(( fp = fopen( filename, "w")) == NULL) error("Output file creation failed\n"); + for (k = 0; k < n; ++k) fprintf(fp, "%lf ", y[k]) ; + fclose(fp) ; #endif report_results(timer); } diff --git a/GPUs/cuBLAS_MultiGPU b/GPUs/cuBLAS_MultiGPU new file mode 100755 index 0000000000000000000000000000000000000000..d7cf7745cfa6d457b305458f378f46353e618113 GIT binary patch literal 29936 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 +#include +#include +#include +#include +#include +#include +#include +#include "/users/guest/petyros/Training/External_Functions/matrix_op.h" +#include "/users/guest/petyros/Training/External_Functions/util.h" +#include "/users/guest/petyros/Training/External_Functions/input.h" +#include "/users/guest/petyros/Training/External_Functions/gpu_util.h" + + + +int main(int argc, char ** argv) +{ + int rank,size; + int global_nm[2],local_nm[2]; //global matrix dimensions and local matrix dimensions (2D-domain, 2D-subdomain) + int global_padded_nm[2]; //padded global matrix dimensions (if padding is not needed, global_padded=global) + int i,j,k, sparse=0, *cooCol, n_z, *I; + double * M, *M_cl, * A, * x, * y, *local_y, *x_c, * cooVal, comm_t, comp_t; + + + MPI_Init(&argc,&argv); + MPI_Comm_size(MPI_COMM_WORLD,&size); + MPI_Comm_rank(MPI_COMM_WORLD,&rank); + + if (argc < 2) error("Too few Arguments"); + else if ( argc == 2) /* ./Program Input_File -> File Input to COO */ + { + if(!mtx_read(&I, &cooCol, &cooVal, &global_nm[0], &global_nm[1], &n_z, argv[1])) error("input and/or COO convertion failed"); + sparse = 1; + } + else if ( argc == 3) { /*./Program N M -> Generate random NxM matrix */ + global_nm[0]=atoi(argv[1]); + global_nm[1]=atoi(argv[2]); + } + else error("Too many Arguments"); + + /* Padd N if needed */ + local_nm[1]=global_nm[1]; + global_padded_nm[1]=global_nm[1]; + + if (global_nm[0]%size==0) { + local_nm[0]=global_nm[0]/size; + global_padded_nm[0]=global_nm[0]; + } + else { + local_nm[0]=(global_nm[0]/size)+1; + global_padded_nm[0]=local_nm[0]*size; + } + + x = (double *) malloc(global_padded_nm[1] * sizeof(*x)); + if (rank==0) { + M = (double *) malloc(global_padded_nm[0] * global_padded_nm[1] * sizeof(*M)); + M_cl = (double *) malloc(global_padded_nm[0] * global_padded_nm[1] * sizeof(*M_cl)); + vec_init_rand(x, global_padded_nm[1], 1.0); + y = (double *) malloc(global_padded_nm[0] * sizeof(*y)); + vec_init(y, global_padded_nm[0], 0.0); + if( !y || !x || !M || !M_cl ) error("memory allocation failed"); + + /* Initialize matrices */ + if (sparse) { + ; //regenerate_matrix_coo(M, I, cooCol, cooVal, n, m, n_z); /* Sparse matrices read from .mtx format */ + } + else ser_matrix_init_rand_p(M, global_nm[0], global_nm[1], global_padded_nm[1] * (global_padded_nm[0] - global_nm[0]), 1.0); /* Normal matrices generated randomly */ + } + //if(rank==0) printf("Local[0]=%d Local[1]=%d global_padded[0]=%d global_padded[1]=%d\n",local[0],local[1],global_padded[0],global_padded[1]); + + + /* Initialize Unified memmory */ + cudaMallocManaged(&A, local_nm[0] * local_nm[1] * sizeof(double)); + + cudaMallocManaged(&local_y, local_nm[0] * sizeof(*local_y)); + vec_init(local_y, local_nm[0], 0.0); + + cudaMallocManaged(&x_c, m * sizeof(double)); + cudaDeviceSynchronize(); + cudaCheckErrors("Unified Alloc failed"); + if ( !A || !y || !x_c) error("unified alloc failed"); + matrix_col_major(M, M_cl, n, m); + + /* Rank 0 scatters the global matrix */ + double * gsendbuf; + if (rank == 0){ + gsendbuf = &(M_cl[0]); + comm_t= MPI_Wtime(); + } + + MPI_Scatter(gsendbuf, local_nm[1] * local_nm[0], MPI_DOUBLE, A, local_nm[1] * local_nm[0], MPI_DOUBLE, 0, MPI_COMM_WORLD); + //if (rank == 0) printf("Scatter complete\n"); + MPI_Bcast(x, global_padded_nm[1], MPI_DOUBLE, 0, MPI_COMM_WORLD); + for (i = 0; i < m; i++) x_c[i] = x[i]; + + /* Initialize cuda/cublas variables */ + int device_num=0; + cudaGetDeviceCount(&device_num); + if (!device_num) printf("No available Cuda Devices"); + else { + + double alf=1.0; /* Y=a*A*x+b */ + double beta=0.0; + cublasStatus_t stat; + cublasHandle_t handle; + stat = cublasCreate(&handle); + + /* Warmup */ + stat=cublasDgemv(handle, CUBLAS_OP_N, local_nm[0], local_nm[1], &alf, A , local_nm[0], x_c, 1, &beta, local_y, 1); + cudaDeviceSynchronize(); + + if (rank==0) { + printf("Multi GPU CUDA-MPI Version(N=%d, M=%d, GPUs/Node=%d, Nodes=%s, Tasks/Node=%s): ", n, m, device_num, getenv("SLURM_JOB_NUM_NODES"), getenv("SLURM_NTASKS_PER_NODE")) ; + comp_t= MPI_Wtime(); + } + + for (j = 0; j < NR_ITER; ++j) { + stat=cublasDgemv(handle, CUBLAS_OP_N, local_nm[0], local_nm[1], &alf, A , local_nm[0], x_c, 1, &beta, local_y, 1); + cudaDeviceSynchronize(); + } + cudaCheckErrors("cublasDgemv failed"); + + MPI_Barrier(MPI_COMM_WORLD); + if (rank==0) comp_t= MPI_Wtime() - comp_t; + MPI_Gather(local_y, local_nm[0], MPI_DOUBLE, y, local_nm[0], MPI_DOUBLE, 0, MPI_COMM_WORLD); + if (rank==0) comm_t = MPI_Wtime() - comm_t - comp_t; + +#ifdef _DEBUG_ + /* Output y vector to a file for debugging */ + if (rank == 0) { + FILE * fp; + char * filename = "/users/guest/petyros/Training/Outputs/Debug/cuBLAS_MultiGPU.out" ; + if(( fp = fopen( filename, "w")) == NULL) error("Output file creation failed\n"); + for (k = 0; k < global_nm[0]; ++k) fprintf(fp, "%lf ", y[k]) ; + fclose(fp) ; +#endif + report_mpi_results(comm_t, comp_t); + free(M); + free(y); + } + free(x); + free(local_y); + free(A); + + MPI_Finalize(); + return 0; +} + + + diff --git a/GPUs/gpu_util.o b/GPUs/gpu_util.o index 7fa63c29355575a2adfd7d780dcf4607ffe8f4d5..fe0d98b88d49068ba0415350cc29cec8b89f16cb 100644 GIT binary patch delta 433 zcmZ2rvchD7hWHH*1~_m4vm6+N83Z=k|6<>KP=ue6k!A8lQSr$vECPZCq7ao6m?5;_ zWKJ=6MwZQiV&aTo1qUP`5>SdkaB`>ke6Y+73>i;}`yd(34^SBkMyR1ciVuik&O(?K z$Rf^Z0TrG*xsXMEasUg<Tjav--jqb``V1CwDOa&iF=4~wx`a_Z&=o)e5<)?^>PlPswfnI)4&__qK} K+kBk=Ckp`gj6}Ks delta 451 zcmZ2svcP15hIoP~0~|PjSq==s3_=_2f3Z(yWf5PzftQ&vcyghj_~Z=&ETTdTj128i z_5M(L^W=>J;*$HA7#KjZ*PxR3_Kg{r!g_6ZNA2|m}|47BtPTiExZDP8KMxS4eSt_ zce1CHJ0r{FiBk5AESoP%O$RH}d?5pou7FSsyg-@@h&iBq2`DW%`Js$BX9Y+a2-+q$ xO36>2z{@gOLq=fo0bUlt1A-8l9ZV3KZ}LeQea;FI2=66W{RT;i%@cS#xB)(=B$NOE delta 228 zcmaE0^}uR^hWG+W1~_m4vm6-s8TdBZPh(=7u=yI(Vy?-oeBzS}_*pjJ5p3b!T)`{A zs0dLA*T+sOcz`q)5OYBJ xVCl(?0^*Ye_*euhcp<_&m>@LoKtiyB2cqBy g)GnUM9|iQe3iu$R(u|X}_~j-i@JVcb!SRCy099@_a{vGU delta 271 zcmeBB?oghfA@0G)00$0WmIDJX1J6eLVn!Bzc?X8g+ZfL?GEUgs#w-t_ma%|%lgrp_ zgx#H;trRre{X#VrO!O@EjDVUqA7$fV+FZ%Q&pP=6#|K4-d0<1q#0zc+TY(Wmb4`B8 zsn57^@brw)3@lFAT|I1 delta 243 zcmZ3%yMlLuhPVbZ0~|PjSq=<*47?NVPfc!O6rcQoiDk14YY*dM4n{^rh&)_5Lk1Is zZ2%SGo~+5F&$xMVBUq!rF5S pp1{Z=$iWB^wt&(+lUK6nb2>oH(3t#?Nq({eiv;Hes7NVD1OVkqBklkI diff --git a/GPUs/util.o b/GPUs/util.o index 26ba20a666e79a65dc63bc46da818b49938c90ab..c7553f6c77631def65ffd99e2827628cbd03ddda 100644 GIT binary patch delta 274 zcmew${y}_#hTab*1~_m4vm6)%8Tc4Hn%{7|0P*)T0tqlHEiG+g*ji>FHJOdklaXPv zKcm9r0>+1%Iob6YCxY=%$&noTOaY9O1DV7aStc*!P)Bec!a0)_ zI5ijpHhXfe2b-cgb3pkLP+D+uA-6bZ0Mr8uCr{*%pS*yBW%3R# pfyoI>EP@v75QPy?6#|nZx%D|Ga6&|FHJOdkb8-Nq z!sL9$N0a|DiEj>IU%;|CfXRSS(E+3f2{^DqH~}DIfPioELS}tN|H*+Y>XUykOF&r` zED)AGqyOfKEbB3inZO3oUIC$i#w4mMS>01xvfw#u|6AsI{W48f}S&I?+UJOAB;q)uOEKqPP%T+oDAR zt<#vU-Cv)(-S67ncE7vZm+iJ&`_cpwURDKs0OAARiSYrx08#S$oI5iiD74-Eet-Y` zqBD2yxvz82J?GqW&%HA|pJI6^La9{9zX-(x3W{lClNm_7D->f5J$aH96BUt)WW}9| zc*PCKrNJfVOO~GG&?OajAxqwgC(CO>z~IEKF#6;aP;%zlhjDbwR-#0bwA zT!a#(7vJ>H=ekun%h!DJ$fJ{9_(S4HXZ~?+1kxVFWxz$xlX1~+Dz5RkZl?%-qjBBK zo_cQM@Hh(B{SxSB2q)rtK#Ef^1=k=cF7wJAh!4SaE3Toq?!!g+PQo<-*H~P4;gWyi z$ciy(xa6chL+UTln!^=^OCCEshJFJ>PYT6tcqTeV7+WtgJJ!^?fulhkHMoA8kE>t?j3t*OAs& zzi#aZpU?ZLC##=&3RwPVg?4%}a)@$B;i!J<&+Z5A>8IUu{lFjS2mUVF?yJ8xw5wIL z1znRC5PG3sKA!r@AIb2HRunBxW_jncyF#%FVPE+T{q!rXpZu@%ga1MXk5;ru?G{Px z7D@Q8mBw8HD~|S4&vX62I{^>ZX>vW^NbSy-My*51vc=8Ly;%=$y^ky-lHuTOeYBeDu?@{Lr7*jAK30`obqquIKjN z_0ar!vtpoP?aj$}3j1MxU%Grrc5a@HCiQ#ADdx@l#nRkm^YU#A@@(_wDdx>wG4GK@ zzgUuQTa-6FXF-1cqI|`?>?O;VDCXg2Q;6lIvevogd1ivr!=qUXY$(K@XDqNS#$$Hg zqD3q|Eo(u(nCqb>%NFD;c~$~1$je(I6`7v9bm_c&IfcdY7A*S}E1qUsvUCwOy)Z{K zMerzfK#`S`oAs-CzgT3G^DMV5&Reu#A!QuP(50vQ6!Xlf)_DsT(2GJZ;QLqdh z%2F&{v^0N_jq>2XB1g)Dwply#<}Jz3&6+f6UUq)gf@Rr?Wm0-JNRq!uv2;NW@Km6p zMax#84)k3@Vu4MuP;PJ0B0?24<|t4vGUqGuoDv~6woq};g5}He@5#yqBjzm1%fAPNSd??m z5=8HrFlOwSq%mX1PZWVr-WMtu@m0?h0*zw>jmaI(eZ-VfVeqwK@Zn+b^a9U5xKVKMJ)NEo(YZ#o?-SV#^3{Goz`N!K&Mf%={#QDC02JyZ3p+dpi zJ(1W`#YwCAH?sI; z72+hq{tYaCj^ZS`{`D+=lHw$?{vsAXOmPxR|8f@JOL1D(_~)~DJ;h0s{c~BohT;P# zp3LH96ep4Pk7e<%C{AtzzmCN}r8v0;{8|?O2gOO${R$TUGsQ{7{jJ>qjQBmpNwobf zEdD!+lSun(S^Oo6lPLRLEM81;ay$4pviP$UC-;JX1B>TToJ8Eep2dGjaT0BR5sN=f zaT00&au$Dr;^e~c&u8&RC{C)|KbOU4Qk+EHpUmRZC{7~oAIsvCDNds8*Rl9GijzqD zwJd%&#YvR?3KqYM;^ZFjw_c_G-%fEI#ameXW{Q(2`)gTz0L4j!{Vo=dpg4)HeDsU*S;1GjH?p9zXh^cccOwwH zuzo%9Ebq`LmBSQ#smm4-tYs{_KK!?-5(|yT_|dekMviZ$^vC!$XIKU9ZWSuvg;w6}dyrRF@O9m`*idZ)<=VJAsUGf5 zlR{B6wP`qrQ!wu_6nyk+9o(M$nm`-{BKGA-=G|Q?-X2i$lN$5&VmaRKQu2c4J){O> zyez*%^9JRe)R=eJHv%J3p;?W%lKTAfC(ldmZAoBNKd30sF#ZoA*G32gYoGMrjiNmi zdfXA4fm(#x5y3b9sF+H(f}5yH|1?lz&Eeo1O2wMXbeF)-L9{Mu^whFV%xDJlqBB~b zE0-w^ZQy+nfV;DZ=t-?&D2t4##>b408`B=;*PLnuTqxAf-$Gh}7i{{mNtb-XZ3>0A zc?6Dp6J_@EcUC^#g#k^&Ev?_XBt0K1`PHNRY3yPG?sVpk-nl;=$A>KE;i)w_3iT^Z z+{az!tRU|`q4NEMW%ICV3gUPqC-cG-y>A={#XF|xL0FTXH-3#eO({wBUk!{@SWH5< z@llI#C`ITn3U$UueBLf(wtKV|pi=hNcJUZ9$nSL$sBD5j4Ap3mZVo-pPXLWF;?;+VY9`&%e zw+of=xMSo|r9~gfmD-VGi{72A*qn|VYabo5mIk?!ahR!+no%-cv3i_E7_YaWLvt-c zaC0WIZlZb7<9<%7KH!T$3w*Gg&ms;nG!`~n9LOyMeQyCBZlj&BC+3S6O(%w+^B2R@{xGxze7$Yt-+a_jUOdKk*By9*B{#|Nx| zl+x3-A*hntS8%1Y4Mj;sh#8$JT0-ldBU0% zoaKzUGQ&AVi^n<6DOaqer&rwNS@WDWe!FK)Rz}PY&pTNe`WkN_z1rKH?lK46R>QWu z1D32R@1eA2Z)4g~?-6Y^E|=#>LEJ8-$Gs|{+H+)8oJSd&KRjzzX&0WEPl4@BG6jWa zbROj@t@@1TohLJLP9n*gk$E=RQ@nqZXT->SL^*Y-DNfS^Zv_wI-MH5tz1d>8l|^0{fM_M{hYTc_LR3ewi~E> zy<5|FIOi%2d%5D9z=C{ME#JPESG~%{i??4^bL+lTVW@=N)1BkBro;fmgU`C;^{3VI zSuSq?y$onw-j=jxqy5m86ldX+3ee2#oN~dMRh?ALJI7bfagMq|WZ0^-It#rDt8-KZ zkpft`S7|f1DZIxrVzztSi!$^(2xIU5bQf=TtIdY$y#0iD8AE>?p}!aCU-TY|J;KmG zlI|h&Ery!>xeUQ5LXgj@24+2&jQ@@h2sO<+)fF_7XqW~urium>E%yv1>dV{DJ6>g+ zH{GfJ392&&%Tt^&Pe9D0%1C{bMVbt6GnVCw7s42UxGbOUH2p+LoVwToW)s=g0*#tj zWemExlKEg+k8zU7zc*0?OwnoY(sApi63;unk$5*4&bxO>NyNJ;&N(`xp@~};4WLnI zHVS*8t{YPl8%(ObM*HDAty#^+_Pr+6PB8NvXZ$|sofWrHXVqJA&xqO%M)er;i9L4Y zouKv)d3UFsriUiF)zQsOw`#hzS+i=0A!EAep4r8?b75C9#d5mlQ}9_AA?7LmaMP4- zPw{)3a=KZjZ@M-R7#Uvea!F5bceT({@gFxW>;@OVwkflFzNgr^>DBHc1~1)I(!GH_ zeYj~|w~IZ!x9PL)7Cf2ll{%}TlPg{dlf>&yKMf{n2D7-l7t^ImJ0s zNhB(Mg-T`B@a;{!N>o0)y%Wq_1GsR&DD2=qZiU{uqB;jH1ctU|)k}Ok#~HO}rgMCQ z=N*XR0mx-WRFm0Wu0~TqtKneY35%gKe*(x)v@g`wMJFpb@--rBL{zeoC4pS%sUvKfy^Lae`>n{a^k|Fu; z+LJq%{HONhmuYB^ zMkvglyn`UU?8)zR|E4{;JT$WJw1(T0)j)*oNlHJ4-Ya}-SbDfU`KR%u(F*m;!|ll@ zShnl!$-^MykG3ZZD0AQTrvD4 zYwgJd>I^0f4@Ch1nPv_lX1Y|T6^*+V64s`VNX)~vOT%sN86L1QmcL0lV&79 z!g}n<1b7ETd-5qN!|cgaJdr(VVc}VyiG?S8QxN(pfl$Bpfo|u=6?Tx}76D;cG zCZWnGoHq*XZXa2hMwQ!WFW1#!tEr-&qn_#m;HWg0usWA~Xq&ro^q&ol$YHJB*2Cuq2b} z+Z$7yQ5n#xs&cb43ie0Tch=JS6~oBBkKf}xk`aTMHY;OPowqB!4Aa0iK3HZp)aM=a zUQO7=EXdll(_}r86$z7!%q1_Zpn|wkIu8^8SRuh&#-5-nRPnPJI`q2 z>pa6p#4W5FtMsT+;!Jf~rN=lmqt0U-nsL^nd`4@kOZNO_QCtosxC>xUy_Q}>m87CL zYRRc%vwG^DWRLr?j5ew+={>GOExoFOj~Q?AtQ3 z2x?gGDyVmR(YtQgw*l6>Bk9{%@5sQN%}|db)MW!#!jbITm{T%RvUwX{(_`J{z{Zvs z4F+Jyyxjn@z`T8snIDxY&iJ20_o>OewUBu$iV;^_OJ)OPckv9T=|R}H5GAv)8xz}d zW1=gFiHTge^1AFS#vo-}kO|X+%yfNQ5~k*GVY-DSL9&g`=}ef~P>y5?c1M*lvD~Pt zh9IG%v?NQaCn2(yHm|r9$|?$?lb;c@2O>kAG8=a0`5`v@*y_-iR_{Hpg+awc1}mPc z2_BLu@<$Uhk7^<=H#IS4&umJjn5}8PXE>O(3CvBb*@TfJ8EOLa4v&s2Y+A0Qh1iq> z9_56L)B~_@hi2p)z=BPKU_PwE9o`RNjJ^hAba#3^EJdxwus81&By2S~(}4m+{9-yG zblXm)*AEUR?%kPQVKg*z#hZyY!{7d=E7u>+NeQHeLpu)>P3pfwkDHmck6mx8#|ZuDo((v0{n7}08AQ%i)~9H_J`x85?ctF1I-R29V9F)Aj9)12UCO*~V7|7)QyT)j55Vzo!0!Rr z4FFm)+Np^F)WkwGfij;{C0ua=)?vuj2?MqVc#8-;+6&lC264TA$91OerW2U;!c5)y zuZyNG9oP#ub=OPz!cE-|;IHf7)ZGgE^oLE|*4JQ7CBfzH{{!-irfv*8`m(7TiD&=) z%+&qy{?hYLVgBmZUCO~*n$4YcjcX1p_uSq(qnFSTY}k^H4S_O1I^xPALIaIs|NF#Gm2#8csW2kE>}&I<=E!Wkl#ZwnZL z*|(6EE3&`zSyqi#G!Vo5r4hs}@Rx$F{rOA%A%E#>=$mBUnuO!M9j0caiM2}xZX^I9 zhiMm@@87^(brj~>O5|r)Obpq#)1Z0TxcX)xhlIOt4l;5HRp&SuhZE0nnRtSObE5Gp zki#T7O+gOhBjhzL0x;al9Y^Hq@tS^sWM4O6tmR171gZon*d5h_EbyI{AYYj8bPCXs zZQWw*>ZK$dMbTc)({s}~t@?N`7pl)ogAnvE=c&ce(&IeMWEhaKi(ZlQ)PSu!(b)Yp zA9s)Q_>tjN2K`cs-0-s{lKr%4|Q(8DZs`gq9SQ zyS>p^*MXIHR*JCGob{d2e&j~UvYiq#X~`{0#-<5wQu18FbTNK~(ZPdDa%MuywZo`| zIlCAVflZCKnXT)H(WjIi1!L0X;$D6Oc~Zu~BX=c|Tek=61c&GXDXq4VD;sX|(tiN@ zB~|V;Vy;D(qQ;*hI5+r(v5WOM1e@sRGu!)3-L4cXHvOC+**2$0&KBS>mP0&1}A(E(nE z%#G(B64M@HX;c}3_flmIgg|P;SSoI57)!-14HIWj@v($dYQsd>w2|3HE~A=mb-1Nh z(XHNM*vS?D6jrUD1c>!$8kc}BqFZ=Cul^r(=OHeEdfK}iec%ry(6jGF{~@3cQeg1P zxP-0QTrAAX!5?6ZD!A21WMqB=XcyTwZGHxQQiVb`pO?)zWi(gE?46LV&7z3BexTA&M*v z@0*z6?KT#;aRL_Sh)I)d%o5~}(;*qdYFvUjBaHig*gxS5Ae9OyI63gJ_<4VeD z*~)|-0?$)K7Wg-qaV;)fQ%Zxj!IH?+L0ID!rcj(SB2!4{shmkTgoy@5W{okiT~&oG z9kRO*(1fJAkQB6*x~xviHpPlKCgPpAXGC@L!Ai5C1N3s|`OK;v7`u8dVK2zYXLVyh z8o?y+xNlRK+bcz}UX5|@?Vlq$>D_eCace2Cxpfp2x|wJ#bVrhe<+$T0u(=Z`D0ELm zkfE=jdrpOx0$T-1az4Et>KQwa2MP9 zckBBcmG8w>g$o>yJ)?(64$47NPy~H1=ZgPDeBOSLSAC-|!Xpy^4P4EEY~CJ>D7=^= zoG=PqupTaBF6buSCyqC%I-vEL=?#x`Gt;nEr}`3jy`5;I-hr+TF@eR=V>RX&;_mb+ zt6^(iOK*<07!Kx7NWnfV#?_>PC_%O^p}uX98>%mg)fd%-S~H>=%|WaRpuK50A$7qr z*x2Ca!KR%ZT(J$7yT6HCugn)+f)g?RTr%#NFS>xDMwp~YmyG{ZV#-nGeG9KNorvjy zybs73vgbp2-U4JFAgn2_SW9gbh-(6|7OuFCtn_C8=c4H@L%$ZGf9ef=PlO79nn2kw z@Aa`}n#tk427NW_Um|iS1i}LqPt&Bfn_TPlLG}_(pVI--lqV1-_nx7Ty1bD7KA ziVfVW+Sr?sO3T$IrT605YR}Jk!jmL-@7ff1KrSir>0hUy=8|7c|R{ZImmmgYoGUG z*Ea9aRG&9GwZj`*RzJvFT6S&_95Y>ek+j_ccg#BPv0ZL?WxT7-dnkWzq}RXe2(Vw> z!aE;UGNOD2l35bnpr@KEu0Vu!&LWgi|18d^9dLPGfdd&6!*=Rs9ee=V=&3O6SXbYs zhc&CnRrk)KOnogTUA1>V@Y-G0HpqLrYY$vtc?SrKTDS{#VMjT?347lX7G^_j{(VGy zE2`n0Q+DvqsO@YFc;|9926f~a!5Ex+Q5*xFn^A#Md6;8cc`z}zrKl`fk>v8?e8l2L zINCaX!}kA^>H~jr$a`?b4ES<)n*ntk}mP3_1p`82jh%$!B>I# z>R))a2#il`H}f)UZ2*)Rn!NLwNZ!!E6~7D!FEkK^5<7XgdYPWQ%!8}$ArZ<4;-u`N zYAw#Elz7UFs>5{3rAFU|lx*&vDzMdg3)reDo9C8oH#^5;4%b8>F=R!O`lb0Q1}Uv% z7Nk~1atR#-%B<3wxC9q~nK5Li4auyE1E7l17FOv9o>{G>goRZJ1k9-#OTdNIlr|)% zY9f~!yX6I70$@%xW}UKgN-lNi2LQp`fb~(?B;E1mW{Zq8@Iwsv0&{8%Xdw<9W&D8>0Kkv%2Ua7m$7)C) zSVi=K)tS=1u*wBi*<3D6rTj*8Y*!TszIr?FoTKCobzJfLz?V;Km_jZqS6~s?AR_M) zFVtdaF(3}Ak_HGzO1d#f9dP4yl8qFzhf8Q=7W1A+1eq~)z|Pyln8SSyAp%EdcZE3u@Ea`P~dQlkS{P!hL50NQy&83_QG_L411 z5&+*Xchl5>qc0nkn2pFhX9w{l{j=p&hzX20&3V+rHW&PpP#|=EgG+$Ln-RSmsarOP zSz~Jv5zWa>U~+{&5(Q+n_BiZ1wceqLxuOeK@`E6}YCW`gr2lRdxuiMYrGus)gf2>8 zdU2Df`jrsP?i!-uIxzz5BabpyLlf zw|7Fv`@I?hzE*Y_`u)kS<48Iv>i7M-%70M5{~f~+((fA(A^l!U`n@B~Mf#n(wyl?v zUm91dWXgR@ai7Y))w`{%lazbI4=VRDVM<-yz?3?O&XhWcekMj7JAJzRcW}k*swpvu#n(Q@9 z2;IF@Hr&bMt3tZk1rlS$m(9i0le&$E%DxPB2fZ8#y;dgbWzyL-qy*!c&R)oLHp`zQ z>gWqN+{?f1QeCFsH34w zCTs_ga_wPS+l_j{jXYyY7Ke`sSFeIUw|H6dO`%>qHDtVw&bo&Y%jfGGg=!0%Vo zL~s1k36*Q{n@+%M@f$;hufs1#)ZbY4!jgghE+hSo4FXAj|3!hC`q1BODG}o$<-LcL zH}rY9{*H(KZXx}hDeCWd=F*4uQA3-UhL)F+kNaxsU{OPBDSWLv$X8fr7Fv@oCDp?|orUG~3Jpw( z-zdxZN)tPcrLZ_-wjnn-JyrjvS*S7Bot*8Amq3~N4ORh%AXD}0tw?eoR$CGYrrK-4 z7W7(LLil(*)$&4)zLD~^Sm1x&XhC$71xJ%z794e~BDeM5ECSAtW$JP4yz>U`g&Cw+ z;oII|0qjkyu-EJy)oS5B-eXZUSWAy`FT^8**>G~jKwb!#6ZcvS&8zhm!*1>c6_pfr zTAWLQR;(}h#Qiwm7il)^=hpeq538`-Y(K`?V$JQ|8xiM9x1xaYTig_ZXtVRl2;Q(2 zb{XQluob&S=EVIeFx>1%l*~8NM8_KM;ITvgw^@#;%Q&huQ?OiASXFIS!_~Y~bOiQq zR$+(LIldLmU$uY)t!5kyW+g1>s1HkM^~qVzsQZCe1onz5F~`A34uCmsRafV=P$qVi z7WHgHmjgV`X4%gY?vC+$;V7If*iNHCKj3IESi!66%!W2t&Q)A-JrtPeFT&C1wTz&^ zUUrG%WYbX|dxEn?Y@DNRw4fs$@CdO6TP)60xF{V_qs+mIIYQK(a~zgYk!H-Eh}>#X zby^JP2|pB>?TjfPl8OCwJ{`0e4smu^lM3|ukVSQTwlno+9H1cNW;^1cldMhlSKL`QmE7I>1u2gE9XHTs{!7SuIeYX|5DN~O@oRkPoN`mZVc*B>q% zi7aN}94UJj?DUW%*gGS*;s*50B0#W@bGAF6g+ia~$zoL691@zq~!~l+_Uhw^4kXxxJkHKek~6 zAWg1rgNhqsYJ+=jr1~6huR#6nd4~eGQU<6)bz83lFh*y7jM*_BRE_Gk3Q?Egc>;`> z1r5a1L!DrGOKSKI+>(NU?XtbacB*lRgL`>DFh~(#G01leF^NyC2Jt*6kpS69zeffWo z-pjtU)1*#sW!(J$J;?T@yxx=F#;~87Zx(`E$Vi1YVaKG#nuR@P;iB(h_(_snq?fks-RY2gzu%*=zwW3 zZm=4)d*(|=)0uTnh813%un5px$FEp~PVZH07$sYTDSETePQ!+cke#HAwb-7s3Kz}7 zcC-B|7Uw**x8`a(I>;5zL&PG0F_Ntmni}GO0llB1qv;^QENr9x)ZBsobY%c{ z+8tM)F$cZSjd@3DjzEFEJhX)_38(u}gcZgfqf~x3mA|Y*`Ku_8!v?FUyxps|8cyXM zVFh`ik(Eqpwi=Fcb_W|5RxxU&;zISQ=86%=Q0&jHSwpsI7f zr|O;1RK5KRJ^Yr;3tf!gFrefVC&D%mza7F3c~Uj4d>Fq4fAbIyje_4WRjCJ=4ORI+ zHQT$vZ%b+XWqvzrb{|)nRr}d4?m6EdA7sp)9L{N2bD}v- z5(`xF!g=5S!65HNYX$O3@!nm zm4geRg~k#WuIU!F5Hkjalh-h#5z*+IAfg)Nv?1ubexpX9AW^i zRlsb5(E`g7uY!XP01MIu529O46(xAwP(`#y3p0{*0S&Hj(keg?pC<;<(g^EVHBudW zsDfo+lOA1Ux(KeSfHJy}cUY`~3Rw-u^JlS=RN_0FC6$_l_A^P0bv*9~SQw0jEnn8Q zp_?n-#aKa)H=;l~zknEwyTC>{qlNNp?3HH`V$eu9#PbMS6qrKq54MQ!4%$!gJ>$EF zX%9$pyYH_!d_;;PC{9#^z#n|i;4%dOk6w(6L?6nWMsyz=QE@mS@?^bQ=&jSk%zTpO zktRUdW}y@^82l-Gc<71q=7p@#KyqUfSH9|zL$X~ z6a2BTn&bi7hnEk8!%!aLK+%A);bSHD_33c8mYd35rW)bL>bCuHJr(x;=8}6 zTIdt?DNIR7$U6aknB&x6FdGhH@0N+VJQ~exG)@P$gl9R|YcMt;mc1TtY(56D1JlVy z!fr-(E$O6tpp(cHZC(LYJqkp{F@L5^slRv?0gC)S-|vx$^;v6n#9%jSu=*q)^qLK) z!KcKp2l94X9HZEKbCDP~-IEx&aw+BOz){)oliW^j`YoFS7o)eL|o5 zBlLc%{S-8?JVRk(y5!@BV4O=YaWB+kz(whw94`IiscKBHWP`+oY>->8mHugv{#LFy zh)VEQ9@*SwP&O*Qz0s_yAg;OBB8&$SnT`>5VM_8ng_hYFJV<7+f&}xF#W5bU7M7|3 zFij{kiRL@t0x~H`DD56Jb|lXy<}@2B@^3Q>9?CV4s(c690uqZU;dtIjtD!yr4r^jJ z=Cvr>-Lw?MD*)${E?I=jRAA;rNIbLO;-pzM^lBlUo3Wq3u7USznro&r>O8cj+D)p{ zt-}k<*chnHJ7qQm^SAKA_)fOF9L&2A_yn)5EFpFT73xXf`o|-7jlJ+acZA*i0Y?_>OYaGuJ1*4U&DQjMf;)ml_WYwN7u(*U04UZ9y!H0o(!LPkA-MP(c=P|bk$nodced|Yuk z%kAqeP+k(KsTQmzpo(DiT7_d!z-D2GZvgZuo56HUvY7ED8B&xPk_BCS3VK~!p}jtj)BE_=rWVQuxymZCtxOznA77ke$6 zvA_}~B2X;pyX)x*RUD$HsEU36Jy@bAt%*TT2*i;P3Bv_~ykcPj0pigdMy*QPNEC?v ziMI_ciORgka_y6NY|h0bfipTWE|3mWm)^GnrwU-hs`a6nj7UdHibyv+L^@w~?`A@D zJ5CeCHAKTMIqU>^nt<p-m|=by~snHZIHBcS+H1geH)>iTJxU3ryOX* z(hV(y4a-KJ6mj*6Xp*Z2?6_h-Ebl!0>*z!^H!^AmH`200OE(?e#*!14H&kKpA?K`+ zxN@qAp5M&8}|phZ=~C)Qc8Nx$S=9F9Wps&1>(sN~lKX*|pjmt+FI?R0D@#_Gg{wT?Ox=hKuwDeU-YR@Y9ycJ6 zs^@9xJCSb5KId0tk%_Om--dP2=2Ivw7xi&p11Wlo?d%Q2MVINT4HM~m3dz1#k@QvJ ze#%UzGT+0bn^esJzPIqqR@X9Mtpw1@fZqUsFC8HIc6qYGx0t1uZ*FC67wY3)x^?o9 zg7}hpTg*#o%E^x_3$#2|L*#ZUsV_JT%4>e&vR5gAS?PnoY;%WHQ2TEbY}HVg+Bd6# z!H+IxyPt|g{X0dt(l6E2QqcG7FN47;BMM-+2Yrj^c|gGhdd^^Qn~&!0dgC!i?tV1zlrCLvUetgGF zRCLt8*Rf6&&ZrjZbBxf!{vBwJ@m`2~?gc^^WwNYF@)-@o)FKV&TOE<~36ChE#(dw4U%+WdpN^QX;9llXH4p35B3v{I6})hE^LR!$ zDzuP&_k#+J^*w?@DGu!ATJ#GIcrnI^4|3QB;2uHv2h?;o1}jVkn|^-bCiwXD;;Xa~ zzI2o{3n_Rr854;6M1*e!0DKQX<-3pNs2~>+Z*^EP`Bhtlv0O=t61X{16c8ek2rXBV z1PG(Z-IOE^*N+}1uJjHRW8b65LDwr88{l{~EqQ2l5yzH+w7gF+J04RoO7OtPtlDE% zZ6`X+g-M5u>AvazLLUfUI2t0&jsoDBs-Md{;0TR51k-U^FzP;vB1f;C>5MrBR28$Gqu!&?43P*15~mB}UzsixMx#R8Xh@_+A=orH z+g~_ZG25XYH_I`8&m2L$XQnWI99fPyl{3vTCDLf zX9tZW)cL;_o}_2~eH>O0-l~Fojo$4Nu2_Xi zvojeVdBPfa2j}z>&Uo1rTY3)lI$qe1eN8gw6f>nAi@@E}g_w0lVf+V1N9u=)X^!y; z5Tk@yjwu+ynC%du?MA`&p<SJwxr&^HU5is(tX1?*Uf!V4rF~&bR&(N$tleR?n8aJlK2{@Cy5hFr^<)N?%6; zs`WjIB90_zwsCdN!UU zLn~yj!&yRy;Ihsnxo|R=PSl;|UOt763blA~gzPg_8F@?UFqy+y!aPN^-2vU41Lv+V z{w>120+?jcw(&T(DXf!meNZ_-uS8+e>;#m%K^e#F>C}j1T zggpTjZYH4_XNvL8IaIX;`_;v>G2Z07A&)in1=?Cm`wVz(n%-c9_5i=Gu?B6X2ra9EFJEpuWs9&BYOnKcT)MAVB7K=k& z!wchUtf-gyrh2V6EY9d>=7WhHv0r_v!&wB)uNF{j!Z$27^vS0wrdf@cStxT1a39j3 ztLM4ZSO+byHSvzA?;{E4;o@<&Js0m^^9UYirR1P}MPH=E1!Aex~9EA6Nsm#XBdwf}U9%(T6`lKOM2> z5ztW*Hx8}m#={9AV~=k2?!t8RfsTvx*9R_vj$k$?hIN6T8c;>@rl#6eR? zXb5{CP80^(eNnlGKS0`7J|YT7{}O?4nRg%7@@r}aB`MhFpfM7{VAgR-ULkky*HQl1 z$yCg#`2%85I&UH{abKiGSR4^J-wDakW($K*?JdX#xEdAX)c;|vd0;*A-Dw`UGutF! z-_)neP7z>rP%F^CW-O%WhlU-R_77=f;XrW2Ucn=3^CB?g^mo=+-hCX09;Oo9;)of7 zV?To}s+b3?!)wV2L9az=mSdo-a>WwW9jK+L;q!$r@mGABu$Lf%Z9s zJt|EpH9OGFeQ`fOumWS~M0^(av06Dxr5IcljU1pHV?HgQ<$*P3rAVshKRHBCd`|>4H z!~5b!JiIUcqR(2C=@&jeX;h;lc0LQDMcuOF z!n_FF($waxa>lm)U(vA)99)s`_ZuR6#UBR(^WWDg99sIe=pWg)MMIw)#d$xhq%_G$ zzXWgdO)wN9{r?~!Ihq&z1nApwkmZ~3`kSw5&vAWwt^fG`_G*#dM|*A9UA?}&=it=n z)&9UUnX|;QK|8;lsDxb=gJs-8sa~H;F|Umqxx;X z%p&Ijm#qQs<<$w^&gI)o&^U=m_WEG}c%RM1cU`>iTxj#SjrluuUgHI~ci4r) z9;11erAq6)3>(ek9+}^&^Hw9-8_jqV62G~9}G9L+F+$v;b z+`GQN(|8-J%`Qm z>AaIJZ1diB;Usk|wF{p%0%bZp?qM{(ZpH@6{ENf}7rpKarx_c7U({V5GO@xTu)@&C!2q$Dd%UMJ zTr~beJE0E2$4>w~@2a^N@HuL6xNitI-N6booH1)Pi) zPGCeJ7Ff7b%V^O@Z-=3`^&%ha4C^hhc|QX+pt~M7>$u$MVd!-I4|V!pBH!>{J@*(p zS9f@?ro!D&fr$kB9%r=7ND+QR6Uz*BpJeHo-=S|O`o7@6-#954msC%uI&`$B0nZ>- zgV@kx2MOUE6HibloxW72EPyu~rx=I+iA*Z@aV&PCUxgaxRR?(0_7v4=zOuxRzuBRn z^*5da^h`gTTQHXHF1UfmImE&SOV%-*Ppd44V!{N4lZnpTQNSovvvoVZa)vKF81a>; z6nt#~AKNu0)*10qAU?B8$5&r?jp}nwji+{<(XoVyWAqE}QZV5S1lWT=G1D1;2o0K@ zvy?NO;}sSzr76WZ<#oJC3?yed*6k+@XFEPSK;cYbU62r+EqvBRAqv`V!E*iDe0a~C zN+Wlql$*j7yh`=zbZ4eQ>6{fb8LC%2EHw=G08ZqVP}>$bI31%8|AjD~nnh~Wp*e*Z zMDH<}R5Kl)F@)wg-fk2T`mCV?h|Lk+uA>m!X+f9$GCuG7Yj)5C<3%nH9k~wR=*3vk z2}S0}#H2G(v`^*zPqc9_I1gg_2y0O@T-1uGgpETp6hWAFC$^6e<-Lj)*$*MvyE+$d zA3*_6!rP(wwP<$ei9bU!jucGnRC>R?(BM6G;e_||{05!(G#1_7ZBXy{%-V%I?_;|T zc-%vo6pz?-%Hxhng`QaTcso>d<_n-|@YmeS@Q-~24Wk=BXMskKpdb1^ zjHLfDeHmr7BF5fQ7(e*RUEYa1y;lS7Ysf9Gk9zPOy5@04??3;E(ffS_{}X!KQN9lr z`7!kVo<95#`PcXKNAqj8Y>ch{FQ)Ob;6)Pcj-lzF(}-x^VhOP?VVGpQ1DleXXUR6| zTwaH7kTYu|Yw1LM``SGkD#&A8of`#f;z^jF9`}R`jd;A^gOu+Y-|6+jcEEQQFYNVN zcj2qfvG6~^IM{`WcU9^wSVky3?x@rO-h#(FyqZi*q4<)M%UhZOlQ)_JCQ{D^OTr+p z$9noR^c`kLO^86|AGRy#odu`nBMhl%VZgjt00WB@R1{ui8k!0-jN}8~az|IiE@56< z1!8!l9{2Q*^?eO`xwGG1!X&sEom6_)rAA)gM|uOPu|JDJ>anz57rHPscl?ofP}Bal z4qg@|)B+z`RvWo5^3}LK3Mc4saSc2W&hRe=@&oZk{8-H4Am|wsglY>SK+ z!EJE@9+pG!uym%3!)t+Gg4j?u{hSW zQc1^4EZ{z_!~yzFUe#_H?&62Hl3}!l=3-z*0Uh#NNUyx*=zU}|wbE`x71>PU3vrUo z6l||RW<`O?EVy{*=*2Kr;52~QH1tWBFJ=`!7Skx2P0aG3yfB-t_LxnT#?p&qHU*j4 zbVBF~nN2~MP2I?kPsOq~-1;z^c7~fxw6zE8;~1229ix*BFE<-kyS5{A;&71O1L`K;5D zq10?q?Z!IA$QGW_lbLDsjfBG6424<3H?_S?qY5&Ox?vioeW9tt@(xTo?)TtzXLLEFThvdn9gl!!_zuZiJqx19|5c4-jBcKcc_F`H zFeZvZvWA*n^jaiD6kB?D6~D(`57R%x7`_vVf!2@JKV#4nQU8P#Pcv3W*D9X>Oyfj1 zPrSAhKWGDm&kqk{-AVS(n~eU`ftN)8l@BxeKZAtO#PI)y{xne&{Yz;n?p{h0^~Jzm z@3HHKBe{?H;1w(|VOX4d7{O^uO|DF1w;Q`yx{sz=lHaE8lLNSI` z#Ew`FT~y()l;-&BG*(03pbZ0OY%RvgF%Fw^G;NoI)v#62WJ=)@RL&`Fa1@xhR2P?k ztu`;}cppWvRgtU5o@wqbTo)6PTtH;k1=VQ?Npt0^j&s^Y$#$uUUYx)ay` zk~@ga*0C;HRAPS&gGBov__H0+r_n{)u+!6=tz(3dkw;g1_W-*h<9B{f5AcF}1eY+9 zsFKY!j|Ew-?~a*Ujcx9}SN7;ErlxuIhvw(l*~rf0SRDNn z7-7w00Q|_A`YW0fcwr+2+3PVsvvq&Z{LH57(EQwF8D58JR}nTpi*vO+Ki64?H(`Ee z^D%W-EO1l7N-je6gHJv zz@N*w#Jm#X42R^|j&GPBV3v^Cnmk7+Y)h7>SvCjC$-xQ~qda(Jm~!!X?>ckt6KB_* zD;|*A!JPkV>TlNR0+mI;i3PD4t5a>UsJs^Eh@Ip}aeT&FoFimk&1EG5i;jsCrbl9GNHL`^ti&;Cx*4;6TTV)()e8%rn`bpulhqC)r|%RlNmL;J{k z*gkS1#E5o1i)i>l{?4JDup>h94}^ZK{A(0In+bkM;>WPA{>KteVjhMvwm@+bp&4f? z``n;sW-sVVete0(ACcMSi2dy=5`DAr0Q#m`egu6_$=V4gBt-o>>U#Z(Em={&o+ABv zH^`Pt+LbnJp{t>)^V@aUWj=v(ICMb5#04smuqTOfyU0v|S`=WH$n-w8{@gGPaR(brjt9{X$VBM(2G zW}It$I4S5GOBx`Cf zsqqWR<1XREtq&i2b*WG2Ta1y^d5&%E|aMKh1=tId_1ZH~`-i0hP+iP?T9AV{B%J6j$vwdqa1E>MO zOSTpKn(e4h(O${g;8H4*|D~jYYidZxw^!1-L@v8#t0I!Y6v+fbaTgy=8ITPrGE!@* z>90K#Ov~`H-~bznYDE~s6-CRildsSb3>8p5pvRg`7V{|>%A0OPVp27cqy~R*i2o8% zLPBB2(VO;iJm{$FA|^nET2&+yCdnn23b<>En}h?P+M44uA@M*HHLd9uXD5@JXkWzr zS;7qHUUF02IDh75d36djh)xi$Xpr>@gdi+{5P%XnkweQ+V-%^7P*dm_OidYG49iHa zWCfZ;=al#YUX@ZPvmd^}e)$HjRD4gL5eS38GHb&yDUt|8*o6=&B1Ci|b|FO6R2V1= zmB?CQKM`jS#udacmbZGlj-Uk<2paaQpyCBrR0XZKb-)2t#6B{1q0rFUsilt4Fi~ zgumRz;V-e+JK}8v>>WR~Y3v<8E6|v^ukbfoAe^>=7D1B@!`GPkbD*Vplx$!@lPW>@ zO3hR}5>Y6_nnL}l8H<(`6r8}*1^iWdbHRQ*wbCDwFWBj)w^Kxau)pg?Iue;I&tLvu z4W_v)6leSY4xQqq$f85f7j-@_ZTaGhYP9A15K=CMcK$aKkaqrm(M1o~hb~($o~Okh z5gm)c!^@c{G#G`9c+=UTqwnsNTmn5TLW_BL1-5 zgMT=tdD{2xT^MGef+;J!IbDJGBY6C+!vwTq!QZLTA!P4izpanMBQJcQ*CG_WY_G>@ zeURUI#C|ma-@`g+DLulK5aH}sM{;)hb`R|C32b90-p@|GegRmK0gCb?dYGce)BA)F zy$JC~JmAF!pABTBHzf!G9-j`6MChAGK;a<86%?PtGOc5YX4N+On`i{b(N<-Ic})jB zbM}|e2;NM_2gvm1HQpdJGWHur^VG~q-_jRQBT{^7stSK55YKqWj=svVri}9XX304Y zQwQ@2_LgYWKgqiN4gM-)7stK0j}UXlUNVWe-hK_P z9jFP_`9DWCJat5{M*M%3qAH52{BKB6HAU6_wNjL!q6rjIK^%o8%$L*ijr4qDU?Dx@ zoHz9^ot|%^=bHi+dLBT}0|LqPJdmCT2FBAf>tz%pL`O8iqXY2-A4JcCaHtE<96fUZ zV3X^{ADzUKP@7`dn~!(P>ir)BHw!+Z<}~AVJA5@bu?{bVpj7V7j8rDj%DD3+ZElxF zfZ=;3at$^3GX++3}$X)HaEYXUYo|f9)@^5M#M&+ z|8FQKz8r~{K5gUagIwqkk54<4(BJOF=gxBDLCl_vwtX~{;b6JU(0}4K-wOViE8`5i z_&>y2n0lDphZ6EUeXV*KFcmS!CPW{oH>Z>~Gt{|~=Saunn>|3^VsP7*_ePyE+FFVp zP}pv$xPklvGP=Cb@gL(mVO$u#7)efSlY8+X1~NsU^Czc_eM>QYNH@PZBpF>K8O;&0 zWOR{aG>0UkizK5tBpF>K8O@?(bdh8dQO8O@?( zbdh8eka#CU>h*h#GZ9!+l`>Ex;YBo2St5W(WK`y~JO<<&4 zjZub2_=ibwFk7x>qzqU2>5ny2elTRNX0Qxb``dsl!NIh-n$8EL`ZfM02@b~2)f|%H zH~8HW9L%4qsg~h4`u{G$At1S$Ph@x``$RR>4n}3=h^0}I^GH?)^h?{8Y)%-*Ta$uRq zpVy(^xeLXblW1o&iFQVlXlFEu zc1DwEXEcd+Mw4h~G>LXblW1o&iFQVlXlFDj(Y-mVS@$r1PJX)XA#}8rrlbm!;BK!A zR-1;qxso@)5y)A9oMvuIRVmDp+`GA#w*j2Oed|Kf?MT8F_0JLDSW7$toMj=R;Uc$U z?rreVZO3&co9oz?T!Mw#M0Hg*cd-T!$y;%Ys4f_cZ%aq!gS{pXsfLraI`C6exnUKd z_cWTEm~azZPL#%i8XS+WK}`j**pjG0E?%fgs-KxP3vKQV&PaYt;Q3Ohd#YV29){l(U>_{LRV^u3#jIz`_BcRvN%8%`LdR;ExuQSit{V zRF3KZYldgAgVK*cV3uM*MTYsc0<%vv%=d``vriP5eWJkZ69s0UC@}j(f!QYt%sx?I z_K54(qC^W4Ao;4nxX$Y|u8YG_LMx`%>* z7G)(q6kLwiEN?RgkCf54)0-mVy-lP_@Lk9b{VqzO4!!~U&6dKIQuv+}?v%nBDgOp3 zY?H!xDSf6C+NAIuDcm826;l4UrSP;A#!2Z9N#SxS{G$|Zl|tqn1DQ5nSP~G_)jVPhm@amFa7GI@QM`PE#*s|U$8`qRCA>%0EoS{3(Qk2iac#r38yCLMmUax+XMC@x^`0JBtTXEqtvuXHKooPpK1#q1g(z-&` zehR=>xbU`H8eTko)rFB3LR2NjuQHni-E!= zg>w6AiG=uuKw3wDUz>*S3FF~GP&6=kEgLlaK@&hmuT8s3lndzBrgdR(0`Y6p+5iAW z#j;Ur8L=)?8uVrKDo_cY)s1M4b2gCv;e07vE`~FT z0GvTNW^AC_M!LD^R!g@Qy0v1meg4HcQo(srm@9?Pi{XslQr17w?PI!aq1z6+9sIxT zeG7b4)wTZ4B!P&KM2m`w?ePjNSPTJ!fPy_k-kLy60-~ssA(zp2vj8)0*oO* zty*l+rng>8TW!K0@lmCf+V~D)YplJBt-bkwYwxuuGbeMf-rL^$|NY=V z&Uf~=*V>P@pJ$&v=g{dLWK#x1zs?7-@j6ByB%Iuy*5(9N1>k z*+HlK>9m_p`{{IuPH(F=gv*VWa{$X2S1@8KNf8ux(CKS*`YxS*Mkma7*A~A>rz5c@ z2G_>RSodni>lxQ@ShteOSLyT}I{lPRm_V;B{vDm(8g7AbZY*Wxs~G8Jhs3Yuz@nsc z7oEOMr=QRXv+T9SzopaRga!&`V+rdoWo%@`R6=HS6RB;d(@r|=q7!ELYm2e&wYHdg zKkE5#y|I`zuVidsT*V=6B!#cg>05Mqm`?lXgpXRTEv6oqds{d+7P0aY#(Kt;9M}fZ zxsy)!(di*N?WNQ6bfVr?_q1?tEM)D)j2^}aht^I?chKoS=!DPptu4m%bZs%d47j$K zI^?*{7}Q4kumoW>V;y6d16)sfx6|ofIz33I$LaJOov6>|{u<7W`K(;USj!mVz}iUX z%XIoCoqj|oYJ|mjzQ4AZy7l2M9n400-3(zR<8sCzhj$C9-A1Q>r_&GV^cbCz);XJPJ9{nl5?L}yX?qG z=;PPR9=5#GY=y#TQp%>2L8n~wiLLObYm-hDbgH3KprrFr^12C|bk4aHx2=iO&C<3H zMff{MGIaQ*>jqRnZz75}DT+5KiZ_dM>4dP~q_E$lu-`=3>-Lc}$9~geS>HQ~Sm+^d zVl4GJI(%enD)!J&wyKXf@Vo=>M2KFQfo##lAsc@aFhMqf2L7htFBgA!soh$0E$x|m z`!7R7*l|2MZpNH2{#o-=lC|dy{BaDp$R-!=f%jZ#$cS(;g2$1M{4t{g_ZW0s&iEBZ`cyg{dAJ{;<7UQRF`oH%#b3|(Fym<4MAEU8 z@kNgRGaO$%V>jd98H+f++Zg}AIGy8L&A69wJjdr@{2`-*(Rp5s4@<8d>7m+>g0 zljG}T{2k-@9AB8Rmobaut6_YA@$ZZaIsT_P{?j;~YZ&iie2;M+$G3^`H;j`xK0o7b z#xWevGRB>ZM;S{w{{0+(Hpg=%<2M-p#5kMdYh&zVG&sKN86Rd$=XjPdev|P%#sZFi zAIE<($5Y9;gYhuqOpfnn#$Pd>&GC5{f5<2}o+}vdVf+*07dZaMIQ~%_PdVdP7++(& zfa6=uxR>#Cj<1IC0mi>EmT`P{F&<{TnB#wh<4@suN*Hfr`~%|@jxWsE%XkXMvy5>k zr-zqXlR5sK94|dTpd**#Tf?}I zF`MJNhVk2sA2Q~1eA^gbVw}$L-N?9~@f?o7i{pKnaSF#5WPFq{gX5`Y{08H@jF)hH zn;4&G{2a#@W_+CSG>$*E|D}Q!hVgCrZ5ZrIqMPLxBbWxaskFLDoYD@%lJ< zFNQHChrB+2u%vVSr0LMcVo%o8mUpwJ242pZ+W2(V)SBL`sY`#5HMQa!SyM~Clr_~{ zhix^^==+83f6Q8cE0o*j@4v;sK8=OgjeFiy+EB4C{b6Eo3@pHett6WM`K?$hYdboW zwf+UL`0edkAWCb0flV+=-SFz|PurKiftB#S(u^bLcFbP`x01Ys{52_200Y?+dS|+q=yi{if%VHIqfc0f&iQ*TfW~#C(cTjd z$lsICoAgtPY2YB(pOdj^r^mn;xbO;a>`e-nBGL}%(d&TaYnYw1&uHK%CX?`a`g3H_ zfxjwOZM+=p`fMlGd?B7Q@JkZtnEx0E{Gw_otNk9-jl&P)1onQghxg-}@5l9bSJu5< zA~XLlt0?a~qc5PkphO~{bGH2*dp4<#AzKffifr`^Jc|h_j7X{Aw{-4ln}1WQ!PV)x z&#LOwNDPjF_b?+ywhwKlTvBx!O~G}{{}qVRTKsx{+(|BY$?7zlmAE>c^LeCXdypfuqTVf)a{)m)1vAZ}_PBWls@lUm6OElky-+jT9v*iwt0 zq(D2zod;Uk;bp0J05&*)6#-b}UTlejtCw7f7Qxn?6?I5)=d4!9lyuC2*pp-ki&*FU zg3rT7GX1E2O$pWSDkuzBzYdv4dfj5U5OI%%Uab1|8kNBZ5wb( z>6rgMjCGj4{-J(PweD@%_@aMxb}ksgs{bkjVf+_l+OUV=Y%IgPfoo^)D-L>Z_J5MffJd$1{`pfR4hqJIV*}TZEF1Yx|wil<1hO z&1XYlUpuu`N^?nP`$4i}w4Ltqb!1nTbx8N4Boh5_7gn6Gm-^eE0ff(SMzQa4DPBxm zlHrV2jBVSO(l(TF(=irmSk=9rGd)`XVdgvLv4k~Ry$NF>Vd+tS95AQyQHi%6YgI^HNb#L|{&2qEp zJEMkr@F;w<6mt&kTlex1o=X))ZyYmrsCPlMU<^J9_kFyGarZg>P=`PPevgX3qt4!U z#w>`IjY%tt&KpCYhG^T9U3$sUtj)BFQ`T|QF7(7%Q55+cY}?%pQ?=bRfMv=b;);w@ z(s>6hua!ja=tH>ptUDDAj76?p4rwKedFG|uTt3fn^UQgvH=hxcFmqwSJXmlJEI4nN zHb74TJq7f%VLBW1c+e9-PbAZ3JtULy6B>M+^s%s`rM<5@+Wsobxh!kZZ!a7wr?>U~ z4gLku#ohEuBBZ`7>gg$qHa}4ojr36=yubbtbm~K`S?ynkAoin{b>903<*zvFq3~q- z&JgU4ZK8{j`?AjY4PP`w{;lIbXnkdL)!SIK9kmaILp~PFls@xIx`JLlbKNz zEyx^O6wS-T2W8}E8aC5foxYWp-}Cre*5)sOE9h9gTg-IU*Dv4HRb20Y7*&+RDn|wkwC$o3lP4dy- z^}dyX6=`ff%4$zXh|%Bn9v;8$W$FV?ezNUDu^^4GA>8**vk45xgebmU~`x>xY*6TRSDXF&V)cJwg# zH+pERH2ItmXa4H3p(A7|Trh5b-$h2|5i z`9w!ye^SkLk5D%7fS@&4w6Cz6E=r<5rdG_Anl3vEyOSzsJzRJTOd3t^z?PS%2cqd4 zfd$di%=Hpx0ZKYON0-qU_Z(7`e2jaJa;e6+=P<^hn(c0b#cxCXhs8UueK2mMi!Mtm ziRM38vM+zP9OJ4cMn6Rf)#KaUw8|VgXYL);<|C)g?WD&TG|=@)Q+6!gr3N}gawQ@` zJ*ozD6!vwLKZt=YI*P`)S&-e=z8Niy(u^@~J1$G2?Gq3dI=-$#)p64>N7SPv^$CYL z3S13yJ%#vuTkRc0;D?kQH+5mRS=JVM0)@VI8~WPq6s39V?s1d~bJO2iUp=SwZz+*g zX6u{%X3sn6xL+E=mw51ct^3FAfJoNEJI2xE+PUs^8u!+{N}VN!Lh0%3{o~kmZ_;Sj zdt?;GwT=hJb&>4QFR=FrKWdCN&Bm9mzkdXO9~9!#iq76YjlnzDXJfp+X7<>^Xx?o6 z<{w`W!G_bvvNqG&IeN@(=rOm;q<5yDa*ON{vf7`85!-Hh5ToBOaYcDRhiO2eBzng- zM2XRl?Fcgx5gV`)I?jL50N6<>k^7^gcsO|!(*_5MpNb-D(X*I(=yIU1;b92egdwmX zTHaa^ZKvjfk#HwI%oATg7!1#Y51MWlicSuOJ077(XfQlycrf&kF*@g89j3u>><6tc zk4E|Z5}#HGUx!s#jE3KWI$qF`hTkC0CZVi{F&e&1qhasiRA;no27X05?la`mG4X@q ztcT|fu6vb6NuJ*nb>zLZ+}e*%54I@hw-bSfiyL6I`Pp< z=gCjt8`ou71;0AH8*&&Nk(-;*A@Sh&6?rKK#~Z1eLUxal&)67wGO{PXC%5ix;Xpfo zFZz3D^bc*Xr#ai+bc8e1ujayI+y5BO{a{}jED)K3*Qeti`llp5@C`hB$@*T}qzj+H z+g~Q`Gz+o{{)!Ea4v|&x*86)>B6D#c7d|EHdlM&hq)lpj!i=U(%KF~;NeJ#!OpYUI zrg0NOp{h4}E1hwo6{%8M@|BkbLcF)9o{re_gOaHHPB>ngf*)glp~657oIHmB{O~JO zj;dFv;N5g(Q(wnjG5t`f_wV?X^a}%D#uFdB5+8&NY#G7(d_oEHk`qRNHd1)kPua6 ziz~}rmn~Z0TDZ8}wQx~EVHI-=tDRMsSGg(*D-SArIDc~8G^1Re ztKFd$A$hgXU+2M9Xqq9p>EwoU>cs{nYkDLE?dc5>PbfS+;0dn|`a{#JgKn?S>uZ?4 zC=w1t!lCH}p5>8->4+=G9|?<9(3{*;FZGp#QSWW?7_~u%p#!&cP9|ADk zzPjoDppn05kx}dSt@H%r#Dr+}H2Z_A4R=$MzcxMq(kJ`WdsfAphiDvwUwF6i)lEM> z`r4)cT||?i1AUe{J}w+3KD1V&me+0-$|O^wxz#LkmX;M37?YdojIg)agObIa<$Sp7 zjph)nQ|oUIxMIXKn5MaT*e%T`TG!_|D}w&zO`c}M>oY>Do0~o1ptsh5t?P_{JA_b! z2)8-hBAVUsX`yia!8)(c9rlp@!=46DP(Zwi;-6e+$p3U53k=r{9-k)&5%zDY2Ui#j zqR>XfdNHNKwE~sP@VV9iD5Xo>L05QnfNGWz@r5FRfIk@a)aB&lggwD#N(}1Ln79Kv zrM{K!CU2e2)M^9Hi09(TWSe?_5ZU?1L(^duQAMmqLX0Wr=fEgfNsYxresFTW++o9q zy1K>_^m{@V!z#+)B#?0A<}2s%hpJxV<&yF^{!o?s;Jg!<&>$?1UMAf$pXh;KX|;>d!27p?~mX4fwsf(ipP7ucf6Ln&iC6n03oA?W zU8T+oXObxM+Un+{0RymgxVm+&>kp83$@Ivyh;tN2YYlf7`b3p>? z3!ow@7FFagtOn+nl`k&4qTmW}POO6!&A3S3k2{wv6_o{*3$ctSiprg0L3ybtyIQJ< zlCnZkSzRt5BjW_lnlV!bAueB-zp#|Tl3bB+7Em}Jfh zJHJoH9S(v@ zdfXIR0z{EJ>~1pTD(uBZzT1cO$}pB=yH%dJ20KUT!ayNLef*FD* zR@+^2F&+!``kLY!mI-+p=sANcy;{v0e`ctzb8Ku+A$ILY;5qwoGm@U_qHzB%M;u>-!#q*ZUDtqaTK0Rbz@w zkoocG8{qV51YzdK6kSR5q)lQ=yQT36@i+^9I8XTtIivg zb&&X`z#)3$F zy(eh+VZ30(XZUMtBf+2tk7TfzT?<`Li#M$DMMc=;U88ELzn)gWm;0NHMm#5JLI~>l zNscOd7`e_PExE9|psdVj_SZ#_XtHR%KjMQmD#K0r?m##a^q}NaVMTnk@)1i+ik9(x z;ku@#9Q+{>RbhASiYwhsD-18nl$Yp{M)z_bt-LoitsW7*C~T?q1Z1$#!6Tv&Cnr28og_L5?Z3JahD4+dL3c9@9g-DbdBockrmRwZLkX|;M}nwK zp|GbJd!!do^`Mqo8S!0EjVDk>exnDLD8l18R2Hh1c;piFx+$-+1%0eeeBY2fRM<$G z5m@G2SPZZ|K4JdQ9Z{bbGyKR5TVhI{z>5uP&k6aaI=b9L<%cR$Cut3t-o3ge=@3zmDsMqwSAHWJE@WR01*xfdERv(K{%?K;%xkD$X_?ve4( zF7{&{vAUM;4|=9lmrpecBL3n0qX#;6byZD*Y9O8-qMD;UR)z5(5Rc;;jH=S|0;8}c z?D0`YA2Kd9rpP(@)cCp>tG-Fo8B1SW8_N5~5*1TDW`c&LaM$n&62_^Gseh96q1*FO zgFpjATlS;BYvzuchF8N~$0dwLC&M2uj|)NpPp!8e151KdQqxH?mcCe(4yhueo1&bV z(vs>vD85XF`;>|%j~iVah8u7FYP1dXrOW;31gVwy19+TE&s@1XkbxyOAMTn|HmLu@ z{ZB%j{1=2j&7d1NnHb!?ITscr%kiI`J{m0J#sP~p{-OBg0N_T0_wr5(8Y$E$Ax9~iu*DBs;HsgaKHxUs05JP% z+*6Jg!n|f^XaX?X1%03atN`ZXw-^~2KsRG!KO^2IKf*#&a(1ROY1N+&s z#|qJf9iMZsSE?1SdFTOV%X*b&v!00V{y5w+sz60*yB80t5~M zx08GQ&`>w|1D^o)1N(tB?T8=P4a`0bavO$*rT_y#6W9k_3hW04fF|B`ya`wV>;iTJ zcL95VeZbsJuq)66iqqi_oB-?r<^ubGB|tMeG*kmLZbklpxg97Ua&I0Q+DZPMupha% zB7MMq;Dj>}&Nk#1So0;M3uxR1ePADOJFx4^NDnY@`_RxqV9g!S2b$ZFFD#M_0!x5B zcfn4;)~_Nzz?!ciUZAl9@dCx&&?o<|L+?!RU9bnRAGj2_?HjNMF!1ltCpU1yS;#MN zC$R56y*e z_&dlM$lr^w6R;b&6G#V&PaY{Er6qgp=!|WA13wmsC`AA1ru47i9WZI+pP4ORV>EVD z_6A29-Hv6aX3m*74%KSttZ@f%{ zPL^g7|C{xr^8cgyK^uX}kRD@>vPTV7SR5nmaS43l>+J?9N&1_i-+Hl0YGTk<|M{f) z)Q`P6_U(ky7r_ti#Q}X<4c|IV|d*peq zJSQkoulk9V(Di+slI;H|y4)fY(m0ShI;P=oBJss0ImMtnBR{l2*p{{-HEj(p_M~B$ z7JKnWKYK2Ne4xaH3&?gGS^gNvxxb`d?yPaLugjL*qasv)DZ58SsQyxRkBX4}W!m)! zC|UQIykk_FbpAJVjQ@@3Xv(QNR238kQ}ogFgVFtInA9ZkgE`a5+%99;ey;OaRt6s9crBS*Q&2+4aC95PV*2jm72}(kqTctf@4T`IknChW+ zT@MP=HCH3MfvQokPDWTDSyb2VAn1qGNrrqpKec@C;cnzNfZ3|Om-!; z=T6D~8M5)+=m@=ddny&oPqhlJ#CrVYVeZpaVUiP15!E3lWtrJq9jXFOXiHTW#)dR{ z<*CRt@x}!qIx}Qnv1N4HEV%RlAO#FHlgpf-jFg$JCViP1Dj>5hbwgTb#+K1rWe-8~ zvE4{V>lG#fLON{A3pYp!^*?TYsv1Px{8SOL{>Rtk0Ww~8Tniz&e@mNyI1@{hl6LI* zsft0SLC;VBXQ`mf;~;zN#~duX%9QTF|A9S@BIf^J?C}xOa%e2>fvS}~Xq=)$Ri^m+ zm*nHIynp#bC6l%m!N*sUE?G$~0DBtq%FvtvNheAncFtXnK@^}=z`4d zl+-_@WzN|PZjUo_$^l6I8sbkuZ~p=czdNOE)P~WU9i6FL(zd3j-kI``3p;N3$7QRL z)f?($1FAtOd{u&ck!}DTiW_FvynK@xYY5~GnwK>Ca z+5Upe39v&p?0|fmZH^7NCm{VW^!wZ zaF07P8=+8{(2<9~2ca)&O`Nb6BhRv2wo?3UsVKq?X^!teX98l*MhTEE)dxCK)>P6; zN6Oi})guuA2n-AfDnX!J1s3CV|A4ksE7t+X(p}z7Bsa;H}}@2tFGxf$ak7 zgXC|=-*)iU@b3p-fwjL}Ees_2$MM$)z6Pid;t%1kI|=_6@JGS70`)=iG*;9Eu;!;p zAn}vHZwDW+@bkbACXufOKLzi(tg*;9fe(Psw(#r0HzwhCfbUMiKL~zj5`I7U!6f`^ z;0KcMAAvWqc4|$}cnsHblJL{OZ%e`#fZvpazXp735}rPRcMyEP#SZjN@h+_0W+Pqt zAp747emmB32Q>*KemD34UdL+0$>)K84txt<`r1!Cnq9rTWlrx*+mgC9BlY%_{e@2z z{<;87sBmwAZa@Hq-Uk3ly)m)#4 z^>5eyP4E|MMuh(}?Y|lRUGVQt4F8+j|9<%AVlBHb(f>*9zaRdz)@||c)&6h8e;d}o zr5%UU_bT~MLzrVR->kvfct7kXQZG$OFxwZE*{J6!+^hPAd63U;9g*H|==iRIe;52M z>G`GhzY+cwSYz)=%ul!W-vR$Y`1dFJA0&TS{_yX{+Pu^!863nv2YxBm==+J_gZieo z!PA<3E9LLl9e!$!!)~Zj0a85ka6?*wHT*6`$usfQ;17cDvG7gcTd}6!ZQ<90pMblx z{y2U!u6Ka%2X7G16SP)+Be5=3F~%)v>SD_Jbaj#2K1$tn%-J+rU6|2~G#aOW$@~)v zbAQ2_k8@CuDV)%&FuO+~jT4lfX}Hl1{Ik-7dzAl4de%dIH{EzsdQh&~K5Y(_w+Wk5 z)99NG`;{|WO|tY&(}Xq${4w1*ravv+9z!3#s=gJ#w%hTnC0jD;MD^er@Y^i>jo`!J zp8#Kj^jYg+ab{nJ!?$%*6&hbg>Ln=$F5gqKcL6!Jj&fYSXYYY#b$!Eu5_qWVO3)S7 z`BYy9dGdT}lv|1;x@q7HrjbEvSJ@T^K8pVW`9rwLFyO-whZ6=(LOIQ(B3wSD|ur^@V}e)oiXvcI0u zH7514)VO>W{=Vp?Qsnc>Oat@N3BN!vkIVU5Ps(~nd+O%2WIi5?31Lyu`Edl7Bi@NKM!r#z_Y#=`56bx|%cG3;U7An`RX}G6oOQ*mc8#1S0ersTUI{|kX*|@{N zEPK$=mfq>W_@9N$=qy8y2-UjzNH#myu?d# zizI)D<1E`ej@z`drav|*L3^y_6y2Qb9mw= z9#n2x0wMP#c9Sf*r?DGLVA7q(Zd$S+{{nW?tp&N4vYXbb$lb_pY+aDv$NtvD8E;?3AGznSo7RBH-NbHs%1-W0?8Y`^ z>F!}S?NT8BL+qye9dZw{`!sf^{m#UdpzXiXe*(L)4OhCmesAIm>xlRx{Sx*+lilJa z6IVi^_Ix1MH?_P3Dj?oGPwO=}pW||T;-^gz2&*<2uKu~{1hmIew!}XK< z=s1%=pr4j*oeu2Tk?t`2OQC<^$>4roN747ZDKGoyDtipFTl;6Te2<0K{^oC#zIOL( zIZHgocon{u)A$hAgT0K;Grqz2KI5oQsd!Fj{4C=|j75w~80#5VGHzhJlkq;rhZy%V zKF|0DjGTz7d5aV9P=NaE%e4laDX)1ngH#=;8 zu4l@!_{hXTMO0_I1fKH}6I# zb?(WX+_2%v>A!hW=nX}_eA%6dz#`-r_2yy1Z z15ce67UDl1TC=4Mjn3%^*F4rN!~@H&eB{nQ3GwZfC*S)Z2CM&ER(i%MDOmn1d?<5S zH$LlFy5;ha#vQD?8rctQyGw;#>%&ceG=3i7Tse}_j;3%=^kS|Y?9 z>3>VVY`qXSTsi|6d#nD^j`FQP^VzGL zz9huz@XuymvjzQMc}is}I`d`qe_wg+<3c>SexGP3qtn3S#Doc`pG`|#WKXO=vD?ngoxpP5ls_UYmN|9H(mnwmW9 zP`3{|)OvRQn%Dh{6}7%bEpLZ*`dZ%VZ{>CWrcuXhMXhItIv%ZOmDB#3*KUn=@muA! zTce%6oxdHg`*)pwJJkAisP*jpHLufcMXj$<%iE!yzLvN8TX}7FjXGW{YCSvD@n}7( zoc7nec5AeY-zu-&8twG${Ox#M{@na+L5~l1s1@z}HLv?uD{6g>THX%r^tHUz-^%Op zO{0$2idxSObv#Tl)sxT8_WYelVRhdLguXO+|bn%8cPcJW)~ zwOgZ|zMa1vug5=~emm6qcBu92{57xBZAGoGQOnz*oxYa0`dfKzca1t;D{4JE)bVIN ztDN@Nymo7}i{C1*-5Txm?fmU{UH-cNwnN>2+M(97^VhuYx2>r4HEMY~wA0t}R(~t6 z#~qD2UMp%nJJj)LJ*%Ad*SvOXw2R*=uiYB$^zHoZ_{8x~=VBykeLK_|cK({z>9(TQ z*Qn*~&`w{=Tm7xPw!20huNAeP9qM?ro>fl!YhJrG+Qn~`*KUn=`gZ(-QQ}o}MQce4BBQ@hIa*jN&g){J~>Poz(y9Dn$miz@X=1dg{ z!gF(GiVNyI_3lVh7;mG!IJC04310yS1&nx>-%~3@4&J{Xb}t8pg9;n+l%}k>hD})#KIg9#>->bhS(5)Q0gb0z|0b`dWCB z0)-A;nG*Wg0b=(fOq_CLL@Lnb_QHq-*$uCYx}~fQ$B=Y5jQ)6E5rnWMYzZ4WF#~1@KD8pVqH& zm~aW~uah9QbAm~R4&7Dga4rK!_g-3G@4GviO48VO%Zj6LO+jgWJtwUMN1|F^@8j#| zjdFV59z^6}wcpiXY0sS2*Zbtcym9bm*3;?NavB@pPkZpRTkpd=%K8D;r}R@gb^4hW zD{(=#(E57cUt^|{*v5i7eyy+b-wOYDeZ7zHsMcpYl0FURR{dMSkxeLlbm)DPo3J;F z4jqqjskrntVLSff^}9|ri56X~uiy75Nt|@KXEQzs#~m*^?JpP&TB z9oG2cyhdEA8!s~n?+|*NjrUANO7!@d$fw2jnv+#pkr~@>pU7tk-M=RCXpOqx zjPpoE?b7{W91SaDaMAr-oJXqol+gWG91Z#LLibCF{Aoh>H;Me|v3?|xKSSvLA(5XD z+wY&qV?(oU&v729_!W+Br*SmWNwdMkgX*gTcAm%MqV}a~ohIHL(r%3tagmb5KIcn* zqgA{6zAnh`u!Ea3HwaC;5^2eHJ|B%jEH2D;>r~GCRM+^8K7n{T+b!nYX?V z|L@EvdoO$nenob$*M!9I{On8^Dp|Y+cuJ@Bed^PhPxhX43csJjH)JeAT*~s+_ncqO zy!AcjOTi~g54~@P(qnzU_f5=O-(P*F4!_)#Dd~rsjt7{xzGwJx=B@9ueV+O3DpTqQ zIGh3It?xHI%DnZxpBWf@lI1H6@?^K3$5i;be$somlgUr8;XenS!Z9CL;lLq}nVSDa zB7dpo_a^d}*@S^4e}SPbP-1;zc-I+6d_{7z2HS1i9%6Zu%aE=bH*EIkJjo`+{*vY4#>P6VHV zae2@(9!<58pJl@rgBKW=5q-i@!F);ri{C9XZ=ppE^VZ*8`@ttm|2puL-_{u_zic+q zA^Ee=;VWME17DN;@cgF_ZaVJcaMoMGd02;Yu?h!;B#%9spO?r#1wL6i53#(#=`mF> z;vLDKDY`h`*o`hSLiIua9^DwN6vlw3@~Yu*bbimkMY4FOO8G3If1ijMr#u!guYaeg z`Ku&^Kt<#4ipq{8Wu`N20znXlmRb$T}2gx|&T#`P*3ot~XG^1H#G;y6>>%k7$@6~E_j zx*k>G==SRitlFrLM^{m@jc9!GjF|bs%GA_ z*kJ|pxlJk@ZJ&+ITfZx_9sDVdvqYn%T|CV4eYYltv!CVbEb^~Oc}{d33~@NE)hZlq z|8Z!SWas-WcK$qg+^vl`Ov#VKx7t)V{VZ{{4CgE{VCjd~fHzns9-=n<-7@@mNp<~w z$)kMdo02dTEq=~?1>3oX`Gd@Ndrip%nD4g<|IaKx*r4QdS^lq*PjX+3j)m$~?iEU2 z+cR78tQ-fEZ1~wW{1Wh|II=|RZ&di|jPKe@`Eg?K)dn@aY>S$?D;` zl1DwfUdd;({2b;3%-1k)f|vHR#9Im8V3~OEaX7|$Q_?-`N#8l7a4Ia}+(SJ2XT46M z`>O|JIIJ88y&V3wc2lzb?DwLL{JS=M`WRIY4W9~!mtVzaz#AN9Jj?~3our>H0)Gm| z46hU8f}4ra1^AGf1E_A6%IwAiN>JjL6??OmiOg%*|%)R~gd;dDy*Ge@jP z-6iEYvN(9ahTp~EWLVa_ej(+N-x?L~Acyt5l>d}4EbBI}vV1p>%Tbnpk9i}Y!ZA2s zr;b(jw0?KzJm$?ClzczS&t<-6h2nKNF4pqREHBjIXTFd7lWykMYo5cYVg4TGEAB8A zgMOcmZtzqt0ZV;&oaL?Gk9$(`N;m%ek`4c78-6sNLniC@&Xzp-f9~HZIFelE`)8Yy zQD^+l-zJ=8EN^WuJ{$QP!Dr+C$h!Wy$wvM*4!>)aN=ctg71}lPMyulcng12@t&NJW zVg6b0WdB@?{RgBx3&p{I+VEpCliTxj@DzTHCH(WHJk}L&G-c?z{uJ1Rvy|ogIsL7i zrW)p3>s2^i%tx5twngzhn4i%RW!@+;rCXP87xO(~#dk?xyvKw2KCTbh%JM9QR`UJqah~M0)G*Fw`9O;)$wBs7 z!o0!r$sXnd%!_rVWLmkO-$*>hotkdN%Xdmc;!Y_qMH5cnvuN4rR6Q{>j&Uve$R5NkU77PuzV{& zr>Nn0ACr8N=Y6&KNV%(_+3$0O!tP*L)CR+$aHPIIr&hRJ`PGXmU1g z>!KNgJY3$o7IIxE)PAnINOSXQou0yl1u{8BmCo`)mv&Kd^!0Eoa_5(frM#jPS!#BB zeK|`MR4H(ZoHEx;Z&Pl4liwW;munYdi;4L7?(EAr;xdSzV* zHOPZ&7MAfsBM|hgbcH-9)x4P(<>X?sp%y^(S{~9-P(TUsXsKrKPDBvz&KI?Th^yY? z4o89>xmQspjrJclx#GM+D)Y1^AwZi9F#sc$U+h9n9 zLY|pu2f?s^1$-M^O;C2h;qj4Ip35EfQ>CCVA?5WoxVV}ut}1j@RTa(@bWvWuRAOae zvBZUos$HcEOREbDgg030Y7RBHLXkkgAEYGJdxMAroInCX?go#m7F!dW{0&-`Hd{tQ z9%Kpa%ZHXjvJD=o<60i6ho#{quP9wEWERzq4D52L-J1vz_0|<$-bD8E*3FC~T*$81 z<(gDDEFEqRAWSxr%wR%bH>~mp>spsbL(7*6o=)nQN4C`QCB>##c*bgy=Ke09SigwT*Zp;$`L z>XeY`vBnehvmz(Q8f(E-3!UYq`NAbziAS{(SD@~qyp}wHj>feBk$F8q zK|4sfUv(*?S9#ZXlIo#N%7Uyn&Em4s1^KR-IWu!+iDnfzDhE~JM88-rn%uz#4~kxu za|ltm8r@Cx${Mw<+7KEI43(@*xT&;ontYs>kXPnKWl%RknL%^_GS~49S7n`i#2h1s*sSkCND-7X+c%FbcLtZO`Qdo7dHVkg>a*vDup-X zubn&BRgb>P7iZwvvd@lngTn#HayRlwz5*#cu6s{y!R@VHTz#ZS{I>MP27qa%UpBrPbxG z;TchNc|OgDs@=<*biWT0@R5JI@hqJaN=4OrwI%i zFM@>fNO{!arV*uSQ;BD&%;=e1Vpd!Uoty3>Xv7yQL&>_bSQdHk5>2&!UjwEWvF0E2 zuhPwbxR2o;P~}Q>uld-G4>$FsT(LMPS7Ossoo15Cmvb3vod?m!jTrHEzaiqST~URW zCTPUBRDGGW1Y2Ve98RyLZ(A~4w4N3WNpeimEjK}yDgjK)vsjc9{wGFFLrbwc+=!6{ z6QhtHy}Yju)rt)2TjRp7D$wHv@k0iltLynNs+JlBsH?M2D;aNw?uz4kMb+8H+ZZ)t zILEr|)c}abq5KkQ6}a-T)_uF6kPj7gZ1M$$+lgv#v)#C3@C1VxF<`CQMvK8PE_i$^ z6OBj{kP-bEEI2|iSuPT80FW3&?en|PW4fuMNsLG*o+h1K6R7}YM$*LOQVOb&56m)$gHTqU<<3he z@PvLdk1UTla$;zlHl3TqE?QeAZn~ZHmd6!feM^MNN+y2%=enW0`H@qVJV@)_r&6ey z}VJR0?Fk38jEr1UdH0z(zIzYT}m0LdB-}!wIlVeUKE4WtL{e#UU%zm2~GA z%hrgSu;GAJq2%Ri!^1}#2putIuedw#(6mSyD3&x=eRxfsdrbuWTz$~v5dqoUZB3If zT)^HQ%8;l}J|O7?&>go2ce=W|#@&?iv|e>zs0mmNK=YwYCnh1;y*$=Hu#J2S~9BtF{T z@BiOq=gvKIALpKX?z!ijd++RXHsOINtyZIcqBK9!P^>K>je+E=Mq`-OlO|0wSrem4 z(~Q(4Y6c-yG`?!OH04eWy-GGUj6quZ=jAsG(Xrg;Zb9 zCr!DPLw};2QVlg4BYRFz!nHFx4O0~S z)lh98wT-@s%JamiG{h*LMuEo4u00{61z>XzJ9F55r;?yEO}MKp|Hq|=+r=OJgrAOQJihd~246F~(`cqDVJbp}M4DvW zTNJoS3GYRCJH9DOTy5hNC4Qe0-hl8Hd}rWGb>52a1NctDH}Z2WBGh)m`8IsV;yW2% z`dH;alct182!Ev9--&QMzBl4)Q(zoIg>5v`6c`0}DfjmyB>K_khxkrlcl}?8mc9A9 z|8zt92Wy5Y@F4>{?+;9U7>n;Hd`IF-V~zUrCVc5LTn>6&NB4@!5#kT}T#xS$@SR8z zeAJ;d0{3GWM5BpEXvFtseDAHr{@{br(bs8)YFbyO zu`F|yjD-WFUpoNYKLDHtM}PGa%&62A8H^eLK4XCL*D?4|&2k0*DT`v zjipq_&951r!!(l{Ww=s|rfdNG-yfj-TL*wAFgmNH_JlO{`=d|m0Oe#U_@_LZ#tK=) zt{Tlo;AvFuBZDUfD2E#WpPT{GHxE!g3Ay3m*3#LFS+yiP=pzhJ&RRU{ue~h;qR3y(}Fd{UZa^`z5P)s3xr>jTNzoT{W5~5%yPacmO;f z93cH81Efz<>RqSQTdLGM2zXMvUQqZ@0c+kFpq%>$fPVpae{#K4sn^&?PQEt){!<2^ z8|gtLZ`YNkF%%cEt46~qA?HC~a7*;Q4v?PTe zkd8i$EIsB0MNTeaP>tqGg#F=jw_45}y~`o};yTR`O+@CHfa^@CJ&tF_rlv|`(xMbN9r$)}H_l>QKVz};aopw==H{~awCu%2a;gWGEL)tv1QJh!lLS;0aO57ieeBl2X+ zgvxyi9hz6LJa?HU7d?-F77cMC($iDa9g?UBUiN96y_Tykj z1yekOJ%MtS#|!Oqh=H;}6(WN&3YIQLCje=xb75}IV&`H!f2^oTeyq7`@$%(GcV&a6 zmgMIa7TpCJYXVQC(A&xV3s^~S7B~`?&6}{g-f0Hec!zI-BqyM zsnmc9#uqxNjsZ*mw!~-iheF~VxZ^bJ{1AAMBGo;%n%C=H4L9R7KF!^X99bNB4T(9`StH zvwwxDrq|fJ^G9i}2U1i%eQsQ`1g4Nq^B|rROs+4gyS#+ai&;9d7ge2&0Fxu&WUHv3 zxe@StRUpEQ2)Jqs(&NV?;L{`0mqx(J{!~Bf6gb&8GR5R4??k|f=IUpC1Y98jd$b_} z9%(OnBjD6#^-~i8kF>4oBH&~btDmL_IN65kr!@jjcCY%8BH(J@(6hD(c%;7383FG# z&zj`^A{@z%R6j8haI#I+k0AnnqY6Zr5CJEfQvDbs;LrxTKS>dAvVYZ2N(7wjSM@VF z0)C4MM3@!Wn z5%AkpAi~lJcv1xXg$OwLO4QHV2zaC&|7rxB{5k4pT?Blb3Pku$1e|;<>SuifT=l2W zvkeh&)xSV+Zv=b-0hCWo1e|ZdLOuKFwJSyKdD5w$E!YXn^N7tsSL07%JxFG^=i-7a4<1x~7D9O@85F65njc~uY{4tf` zNpB7vr3sID3s-Jr8ty1g+P5ay8pdbLA1O|vDOktizos~eq@b6@U!*t+)&$qHcsa#M zGzHhO_%jqIkrZ6Z;)N6^Q4}m?@t;wghIeo|i$6wj63xLyEdD6P$we5P%i<4FoJ3PF zjm2kDoZMT%6c(RGaS~BMBa7chadM9Z4JOZqP(ih^}4{%eYp2nu>x{6&hB=n1Z8 z@p6irD87!xpP@L3px{~-FQhn$o?t19|BT`!a)QfQ{4t7?s0l7&@kc36A|^PO#UG+L ziI!j*i_fGuiIiXpi%+9CiISj^#qXo|c#0cXd;-Nuqy#mHBV?buPuRu!pYY;A-t~3c z+;n@jchQbC4PWhB&VuSiH>YW&Um-*L+O;&6cz5*aYes4K)m~>*xQ-2_wUM63&{Y#n)eP#&?%CL@kXQsX;m1NGs&_)ZKTX(~1{9f{YJ;CSh5FFAKF&AY)&N z$Gopg$GbvW{@$h{lbnxtd9}P4{WhM4;{q(bJNoyO_THw#gVGpqNLBQ+h-<0MKVEQF zsc%yoEBby-aWos3-N>CL1j2O-f_ETm4~6Er#g$UVP2;4x)nix#e=eg96-E(^Ia_C~nO|5KF~#K!r9QFrG?HVI}gObWDOyqk}aQazxC)wEoN7^G1I zsT7euG;C82{J_$7te#MQtJ`T>ZWY`9U`6&4OGhUXrLS%%9)tqshK7c{HnECst=#)< ze0B@(nX(u7Xrvhz!(m>m;Kg)PhU;^Nu!dW;6+)TME-}sJeMfcDXqKj$&vu&TGRmQ# zMbay?Q8SWo@0Xa;`Rp)D+Iay)Tm+Fo=-R5mIivH zn_}1#9+a88k>(!3V_Bc-6+HF?!ISx+W#`QFI zJ)fI?ivoDh{4aUW%=Ln28j6_tq2PIFgCK$fUdPl##q=p;B1%`AUOdbpo{}b@STF_p z6;w^PU;@^FZfLzNwc*ntF&aS-!DD>^}Jg!Jtb{aa1{5k6sffq8dp{xB+8H$ zM^^FJrl+XqhEfKxa?=`$Xb`cB)tla;$XO7PTD7V4t2B*WY;uSf(BM)O=l(5gH!tc< zsb2RQ(;C1eeWy$v=@%%3p`9j(`KE*kErKWC^tb@loV&>@Q~w$b+&r3xZ=By)Rtkmp(N4ZxjOS^KoH3B3M8;pV* zEs=(IM0C+`>DQO`4k`y3d7pokr&vUEZ02`&YxKOa>*)f9Hv9TQ~HlRrw zzwZ|Y{T?Y5;9@*ToNW^df4Vh4MD?-sN3q{^73r}7=zM!&?pj8E` zUEC$OA3=A?MYsps+&@%>E-!8oM7c#dy7@hNqHE!AsHK5uc)(A(XyCWqUhv3P!>^@T=S zJSDei>%*8^9(RScT={jFVEF9wg1Ciu9UAGG7v|otvxs{w9eb@F(=@A?V=`F8{T5fi zXc7HS;pvosC2 zdawdav3MRfm@Bw7=b?v-U1CLYlhrfsUR{=HktKPDBm0EwAlK2HdLGS~?#TXHS2xR( zcyNx#bj-23WyL6B(8SY$Lz!`B{l4r>Q+ptkQ5$H<@bcj*yZLP4em?t5;K2NrK-2uM z1BVQ?_WTLF|hSi7oy&1ArO*yQ1zy$fvAZe_ zfiE(=f_Y!ze+5otP-Qn&YU#RJ8@P~hC~!LCOkj8X@jz|-6<{0)Y{}T}c~onzy2zK%jMgi!Jp8SOT zbTx$t;lSPuuiX{U3+9uBdkOCfhW%E;z8Tn`3mk|)#IQe<;V0~Q^VuRyA(v$oC95vq zvN4dJSHHL2t=lwv3ufnu`WDIU3liIE<}mwLaef+6YkOql^8 z8M}id<&GGu8PhUX{tIZwq%kB-_oPET1W(e?O0XuMvAC+DxK($9DFeRwm?|*3aqqWG zo$qyZ8o4z;$DnhFTkIG$HnD{`G{MqQNj4$3`VktC9W54DrP1OG=`5Zf8__*$egv>s zY4unqgfWYHEy*p&Y}I)?T2jM~Y_G0~&-Mz*-Z>t91umo9B|k@)N`V#L@cx~4ZVuFPsmqgYPUA`0GXDh00osE;;) zTM_@TX&uFJ_j!|7xm(lJN_XY|*pLIpE`NJN7TCP}^$qD@`tnyctl3@49(y*d+P#k5 zt={nAZZEt0Xv2HETX6?=HVWqbT=`N=WZ>(siPHn;GQ5GU8C$_A&4J4q!9Z?C!1D{O zxtc5g6Y>bzhlK1Vd&eG!?vUMe2|Rp>NvRgA$2lQv6A!0`Ew00tFvdxVb9nT-t-3aF zi6i+eF$ef_KZsz^U%@pqwv%^N>;0BuFs1o&;Sq=Vc+tI3{Oq17yR9C9bw!O;SL4X8 zbtG?@<ii^#m6)y6DatNxwYqP&iFdPU z=`)Ch$Z3fbP@0Egtl|+8$+61xlx{L$riqhhrYzG$Qbkh)kJXeUh%_Myrg1&9k#t*| zG8JJKuwvlETFh14uclI6=4}@Db9x&moKCHU%n8?U?^j#GRlNK9)D~T}Ej27;Ly7hV zF3uL1?+RlA_%Q~W;EAmmXn2|NJYsm+FcDbH7cpNDT)b=-H`|g! z;1G^xG2JN|OR=-W*m`@o!eQP~*zU;w3X*F$N$Hitt>A1HkN`()5eZ<2xw&wU&EwEo z%ohsN9oc*B9W4%Blbs3F579(>_Bor_%W05#m#0%j{yUuGd@8in5;M5S@LE!4bveurI-Z=5Sd1uol z($l=-;VgLX4AdkebZ6-Uiq3`dfVrG||B7Oz@MH|kMism}&SVz@ytoTGS@f#+FpY@& zq~kw=h|4}d(=+89x(4n+q_m5E=xBm?o~CW-j~1j@{k7A|V|LEaIHx#PpK$)rwkpi6 zu0q|Ur9iX8@PIOcv3eGz3F2u!JKf}@ihh8Kq}$-)48BU3rV*xtfobTAO<8o`H4cw% z$0N*0!RfF%Q(J^`!$Lqi9)w<}lnwYNVYNH2SPA>3D(VE=7 z5wPm9xBr)=>1%I~xxXKK`voN3G#BKT?QIc6RPF6j>J+c^FOZqp+q>^cgLol(o1T25 zy?q_>5W!$?%cZCm+Pm_Dwv8LUi@iMsu3svqPa%HbteRc2yCVU_V#+2`jb&~x4r#`yI^nAgYRi? zyMnAjvbW`8)$X_%rEmQFd)V8(vzt+F|MvD9MVEvQcg zeT%*A1p=zQJp*j?jrMjW(WkGyJsUs>+a7y+%&oG$U5p20Z!e`>%-+sc?iNXz%H8AA z9NbBp(T+{6a!>9%^8dHJ&8znIM}6#V>Qz!~9`Cld^C`L41T;<^ND`$MM3g6cb%wLJ&c_GXyZLUsjg*9XaJj**RT znAumD(G4@3%Ed`M!wH5ph=OttFZ z^t2>z!CdY-z;*0S4ck29=0eNSZJzDXL(v)6MjF>>W}jUo(<}})Om=3@Wlf+fqXIhf zmoR3?klD*;Ux+ZWz0A-)F~5O~OFwMJ;)E}?WRU2a>FR8TqV}}Gxfe#t)6AwpEV0S2 z8=sKXl%n;!90?_R4O+j&mRaMsjLAGg$+BSVuuN%wS8hU16Q28uGj<1F&)7`x^u0#E zZ$YL+bz@M>ay%Z9dCKovipX4T z;FXMeN-FGK#EN6(Fns1J`1mGeH2ZbM3C_LCwWMJBeM2+1!wlNOY@-{=HoBYv@>-aw zyoFsWv@n(r!Dx;&_qW1euC|!#xbpGfHojv&uY<$gQhG^S90R9MkTeJ071o!Wv54?} zB&L!nD|YrV`n`O1E!qASS1Vcl^AxKeM(Avhsfk(rrY~V^qemxp%CqL1F&Q`A6MGFBZwdQ66X#*7)o;f|*baXH-0oa?J(NuH2NrQt+FDV`0b7B-Y*Z$O>h)e3Kb*M^x6-T-f;H=xPl^1>S+!5hG{ zamBm=^;S=gnY;l9Ey*<)PFCH)j@=L_%$t*$3?% zdmXytmeMY5aWs_q(9?F;WqrvxbQcVNGxYWlI6Shc7T2LmpdBp!*v(em8E}Rp8P;73 zHN8SR+cO2ufr;RZrwy@HephiqdKFq$wlp)*2PF02%u0v3vT#2k=Ogb_eIOX$3{N1y zd&x;q3*W+Kt0$fHP=i$mmsx`&xpAgPUk4{a4LJ$mVWAFbvWF|>4%u4>=L1Rh}owT}z(bSR3rxU(G;Om?&vVlqbqCCJPLu@D}u1Gduz` zl&rdDKD&Y@Q(NlSDX;?`7qFe7-)7j&~5=(tapfqEy=ZP#?ozetgc-VJ4ZB0@a;Iv!NPVhAesNM zHFOnfm`gyYVJ-oo1}*^~SbA&W9))QOGr+1a>Mf-g!Kx1NKxiCTHLB#CkX>&RgAUye zi|fD@@+gU|vpsP;!GXi|72vrj8W?a3Y%RJ0+-28o;XSe2W{aj;jAyE#U97i+s|8(? z4SGiTMa3;(A-4c^lekaz3b^-vZx)ih0)HC;gL+W6SKv<+{oA?zyaJO^MQ^XbGOSdP zS77Izy}bg%kg~T|U=4=_pwZtDd+K^}x~@Dl(n|I~^XSoRW-9GntN zMA!q(Q=o%-L1}9XrEP-`neAWbGfe+&e}X9oPUQc=^1b2qUhV|$f8eeu*wf=p$m33V z*;@M<4y*TciILuK>2@E`>b(ZZdwUbM0n+VFsKE|}e|Po%A1Sg`OWuUf;FTb6z*VdF zPsK3Dbd9k2fKgrKx5_qZNGe6fBZ< zft{h<_g=lf4@ozrf%>vH!3>hA-h}1UCtm4sG=X^&x@M@}1bXs~-UL4(AbS(!QdINx z$0&^K?v38>;!QAM;}{jQsdphOP`YYV%H9MgiUm`Auhn~vjEbROZ^EA=t5CcNbEr}3 z>islCy1faL=*f5YCOpt2Q%Cv&`54;$coWvi)IYX6!kf^3KfDR_;Cp%#CZQ1EN8SXv zShYL8#Dk6gZ}%pYk_Jv4(L4JIG^BrT!o#~Fx+p3NjK$d;f!K#}Nsc17{vgWgN|xxhwsEnEwp>UJ%hv2a+u@3o*W zJx;{x>smMqOc?eFxYAPo=Haqy;bx>J*TQv_i@6qJl)FXJ6+)lvX{jA|QUNZT>f~;9 z?flPO3#$I}Ro|ujVht8Udi119Rf}?n+ttMsyZ9w!0xjorFZ}{KMWmWUeN1XnMz?Pv zi=vB=AqPyrd<(R*iTA8Al_I2d6Ko}s*G)>0s(Tf`O$wo%#CZ_I8CW%Or<=04UtMHg zg`M&${+ZM;^Cn>R#O8Lup`bU}-9NN==4pM$u!b+(psl~)x`6r4swWZWwTox563JOT zPlavV`xk8D9!GW%tE3f*;{Z$agK2A1+H_Ci99q>k(#{y!gJ6YMfjkI2seds7QqeL{ zf;-Lx^$ODRYm%7UOK-w=0Zq)}x)8&yX~fnKD|V!$*x>LV4(GoSu7h_0w0wa<0q2Je z7F7+mrj$V9PODgBOFnJ&Ou3#6(aDzN0BlTG>)?*2)LN+ZGd!l*uy`ywA3O(GXl}*Y zbLWb&V5+!n#Eh}*nh3vv?+ll@*>2u~p!p1!aRA@S!d(vCW#CxLCGF;t>iKLMQG4*M z!)josy`!2o%5tmr<9cQ~XBf99Z#s8F{+^g=T#{*D9+!EXpe1_@1TNW=aApR^<30nP zI`yfyLicQ~Rqyp3TBvD}mZl=O^v3z?{C=m9gP(LPW3mVV6E<};n zV<-Fu*Mr+EB5Xo18*v8A3M|xN*~<$Cfe|;uGi5dyq!Hg5tSy1v6sLzDj<+gsU?&X6 zD%QUz>1sMoosx4rhIRJI7_=%e1TRMv=#0&znTLRX9ll>W%*P6AxFoPgJXke@Zn>n* zh;2r!o=Z9?nCpvvY!SbbkqnY^V=}MohO5mbCVrYHZYG4k3Fr*B`eL~9+b_v3ju=nY{aOLC z#{e;e9S@3!qX^cLJnk{(=OLmF`S-AU!7iS+yN+-Wq|WOt9aXZ~^&32}(3y7fd1Bbt zV%P&@6=AmL=tv$Nuq1DD9T;rW9Uylh8|mm0thXPqiRZ9nILDLNy5dGQ(!0={*elFI zco`(~6$UXKI&??Siw#^-Gl&VNA-b&z+=6avwRiaC;r$%yR~;S7ep=RZA-d*=3=}v+ zMhZ$oY*^)lSa;@!5~x?5p(F}QLX-2Rahax*bj?3$pul<3NI}WT6m&6$7DND-u?^p9 zut1DpK2`WiXg0R-f-6iRTu>XXs0>%C>-(4Y5ejd{w+3IZK3FWi64XGWD?LwZt>*1q z`DbV^tX4<%0oiTBOi}WhJT9A}veyLU7em;Q<~npm83&Bzx%W?FtvastyIcTzYRCEVKV_HcWt%ui7)g zy+q6$Iro#IO_RMr*)S2O=m6=a1k99)^7Nl&nnK$DWSaO>)QNv$&%`gCL$j1wANv)m zXwO6(_p9ktSLB8X3){el-og&PtG7-_;R<7JF2SG` zJSJ?P!0wqtoU%K~(7ij!Mk8F@Veu5jz{{{^B%J90Cs zP`o1;Ptgy%G5v_U$UCwDE)|Ta?mZK2TU74|^(gjDNO{Hqy(4o`_f>l)sDd*uvQpK( z6Ve$2P`kC;JF)}Xdq~+cQH}fH2iTjFTKi9Ja9bDA0-g-0ZO|6?T_AYyv(8>nwwIzd z_;zpTKjpN)0@U)6)+%me`$bp4=>c8|-axL99`Hg19EL9>0?aF53E;f7^W4#QUomRN z^gTU6OIzoof9Q$8LD?jCS}2?Vbk>0(Os1~1 zgLek7L**I}9%1Y*Y~0oc&Su5!Xh?V_h@{Rdax6kQEapZN*9g$$=TA!_KVjJa#=nK*9-*HKCOW^;l*w3|)z(RMylzbW?_{q4oYZ zaUZB5f*h=5@@Ue7Q15trxh&h=DMPLi1r>7gIQ`j z`AAtG@Sf$Y59*aZ7>5MZ2Rt_en|A98;YV)cp_*`;N_VEQ<1SB1ZPi#>>wJ=J`%Y~L zy$SA*C)pwTu*!lCZwpQbkILtWdid+KUF^hx8#th!e;151!OOcYLUp1Sz6jXq1wL_J z$E&Qh4$x0X{oy@N$MEJ|T=`3YKpqfXu1GYK~-L7zV9?vb?X7@~lCK)Z@A>UCY>pTBKg*08q;Yl0K*y%Mf zTv8{2vT6)gF3AgERvZ}&H)Pc$08m5Ea%zkO&#E=hgPfWq0_NAG5HP2fp52gNGnq?| z4?hn~0L-t2)>Cmt%cYMv4iNA1K{2T4f_~n$jY}WXL@@Jq7y?)w0&F{%KHg7R0obZV z0bOLMbk%a@bI3}08CYAmBo%4khZyh$=2RKbLL4}%_yZ*XfFI!xtd?Aj)x3VNn${0i zclL`_0W&@dps*J;p<#_RAo#P}c+VUykHzouzf-p+@0y}5)~9+yxnP5+LO2oX(6#80 zEvwN`>LA|LdIg=-iG|1ur18Y<^{43WDp}t^(0*h+DOUZ<`r8OaS;lu| z#WERxIz9eN7n3hv^^);TbR>Yp+*foN+J-d#L%9iGYXgT*wJ3yD0+Q@le#EszmhU;T ze9wn`ALYn`>>OpwN+CN zWPC6XO~6+wE<(O9=sJQ&`(^pQx3ThD<@>wnhHm-34iS>?btKRYSH~mKzobsVn7BE-M5qNsP7ipdfHFSrAPmz zj159xFOgkEBD-5wdqHA29`d-j1`@Z45ZM&CbM&x%x3BH zWtp8L%j|qvW;oiEF5C&}y)vj`QG;AAqp3o?7mWPq5=Rt0o51oUVE%0gR~(GVt+ zhEZmu+R3E059M@0KN3i4)24g{e@J5$eIUw&H6dO>)dE2#tVw#amH;^bfGGeC!0+#+ zSK;?6Kv&`CB4A(qmQm)b@XMFwH=HlfWFWsQNPbs!%kMvHP*Okgn_04PUJ~9rNq9q^ zN6PO+$nRE?-&wN!PK5j(aRM#|MSdS5`Q50>?+SJDsH4hvLJ}9<87a5*s@&Ggayz;R zB|&ccy5+XmCQE25lhEpU;Ca$PAB+(#+918KiS+JzyV#a`KD7b*DNZU}vmzQQ#gp1f z9w)KhK`NMiaa&mkWA#<+ced9bo9#(dKv|}B4iRqebkkY~9{CRHg=B*1nrZ9U3$)ZF z@wltwVOTa%x>f<6;`L-_ZV=!b_6k_itf51=?+D^vI$ncg#;JWIk3?)~F@ z@?LVO*v)&nH4+-)5WlixAHOr+-Vqp#IJbHWGRQvW&``T)K@@M^0=*1C9MHqT0(5j?)3nSaiJ&<+h0J{*eeb(_9C30fDyBxg182V6PULohHt?o zH5}Te>RVPgZ)0qc8g6{VexfFVK*B0{BMzh1~*1{zNt;N zccyvt9)LC23Y#Ga~qSY_E@31cQJVw?@-giicwJ98u=f!5|G19fupxnS3b@>_ z6Uzdoos(k4oQ9BGM=s&~dEhcuYtsaA3Qpy8P`AbK5R!BlR}fD+#B+8Lhm0=6IOnOp zvdbB0AXmN+5kUmY9USSro$siS*?tV5d`B}Jxklc1Ovihk!O6^1T=`JIiT{=86|~wR z9_Pi~*mG!ieXV2X?+(-0veDF#01RmBv5_qtVt*O6XY(y+Pgf>z$L7T0`jgmB1=(2m zHO&#o&`cXBjj1gpIg(gr>=aP)e?|E(8j=4p^0S>*$d8Sqbk6P&%gBpOEN5zq!+e-? z!O4bxVFja9%08=i^|Gt*uu?r%aZX|g$tB@vTKQ%s$flSWULdJMJV_GDfc_2MiD!0k zPw02ld9d%$d*>WFctzu?sSNBAY-f%FhjaEg4oIrr{)HZXOXI~Z z#&76QTAwi`;S4(Q+X3uxO06Z!hw)qZ$p`TA0Pq{8D*Z6Kxu)ngyXy-0Z7KD?%5SIa zz9TxjZZD4=<>DFX_4^sKr$uraY%WxSCO{YUf|uZZHG#*!;>ASJ1$~1RVBo@7jr_J; z`5?wr5|kv)If8#z=Bd-@3MOoj2BP#JqQpv1MG59GSH1&LnNUJLA@Ssy{y3`Ex?a_gl)cMEP#~YA?O~+P|b^HrQh60`V+Ao zxsQ>>RSoy?rNSdLF&W{8C5|~-RLClm#`Lb?Flt~PWv~mD`tmPhTEsSA0VnCpuYrW6 z84km(iFYSr^qpfY5`0$Sk9TDL@R7D)*X_sqC$?Zw+KvgKoxLhaEs~Y?8RLq6N~4z^ z!Jnzhv&7&x%d;-2k32g|Lz?8-qxZ5dR_x_&d8SCS$9uR7=lW#sIxjts_b`zlJ5Pcv z{N!+19zD*uBtjbD%qLFHwn7@6m!*+Iydq%LfnJh83lDZ^fMO-M5K<_GxUlSsEQOdd zC?4x0g-F`;l0q{fg-&zjbh40GM~NO`tkaIwp9mpzgoMx>VgLhPO2Rr7EK9r!hS&!z zNEY0WW-(EeoRzVY3Rng<>5)a&bKt5f z2&4AGgK`m+$zeWHG>he=9ADnlT_vQSRbi|ng@?exV61a0V__?2BVz@u*+3G;1VzN4 z+=bSw2?g5jxxQDLT*M%eu({eSntSofz_@y$bYJse?>?Qs$A}fU>12^f|`-X0_um=FyL| z9EpjEI_?-$b_{v!XW`5J%n+84tXe*!+f%6iuA*tVj)lT$Jq|wlZ8jY4_Gg5x6@g4 z<^jgSk=z?CtT#@CHbo{m)2lN!AeOflI>I9uc3?VHN%)G9-9R$wF32QOMO#)tRF4Bu zPbk8a7&P?+3G#cSKOzxpv%&6;+mFopV|+MZH=h8X62I;%#I~hzz>9(oaw`X&E#!!&Njej|=XJn6+T4hQKu4iD_uQ0WP4e+%za%epGe{+wxgT zySb|9ChS+HR70r9Hy|xAVlgEgDLm#dcNE>?NWOx3E!KGlnSxl!JDZ9{;)|4F=46a` zroSa9v#KSF$xNtt=zP~vtQyd%_L-j8vyhs4ABj$%5icmi!a#N5al1KOw22od((4>> zU)Ub{0B3fV(5wS0G?2UvPDHGazVHqGu^~?Bj}3BvVEEqF-34rwLK(gWK-uu+J<~8` zL44BqB8U%zXJFzVKs9WB{x;%E9k7OIR%V1pMTcO>bQAst5MFwP%9;k=SE+u2sQv?$ z>ZV>)mv-I5Sabk-UrIes>#9U=8clHH--t~vG%9@tcAo&+>xuTQMEigBqWwFdeI668 zv~f?W^ONzdCEOCm3r!!Zl#{UvM`PuP%VJ=noemzNnCj)OD**tPyrfHQ^}fuD1z3DP3sWASjCmD zg*;`Grjd;-rhF-i6eY&Uf-F7`xh`8Mm^3SituZj!lxdDNZTLyd`JU~v|*Ol-27 z14Xx~b+N(rUubAVT|KjeD6V_Tb!oZS8M5tVmcis9;H$5SWyXh&5V(G8g zg39PgHZg65;mQwnlQ42XkXI~XK!A8Ohf%GHG?E9zz{J~%nq*<#qq+7=JT~WIlE5~e zI4?+tsmmm7k7ZMt-qbyl5$Q-s5$Q&ElTOO(T}?OLj?e_rhiF(Ox55%s-p>f%1@}B$ zjbO#j6@=!O{mQgaykco&<62ilH>Fc45U8 z>tTgw;a^81YPqqo+qtpAb^~3EbV(s6E|24AU-J;KER$?GRTZACM0WRGl{^)0H5GH`!I3D5hC%}173MyzU zsvM5cdAyrtJrY2B5%ngA_$7JVfIvFlX9$CHGF{T7Nq-}atQwjX zx9TR?K^u=Fx0+S@7*Ap0aH~!YA}+!k-{^%{9w#!s_V;l3(~{Ga82f{yw=wCa)-r(f z2i!B8Rt3DE01PVNNdT}*8`0Nx;guMVv*(o?+gRNtri2%7yzhqM#8nN>xEJSZ@0+JB zHsF0XQRH@7)lhs8l#l*_*HxnhW~=W9W*a+|jE3)#u`QaK)Ui;2oMe!yDsJ4SEk- zukv~36~iEQ$C}_5&!?Uz$0-aNyxoZ|3DU*CqO-*P8;!_jQMO2b_l8+1>$vaNunRhN z%p~6eDIDAmlo;=IbI)!dr0&HpVl?QG;?Xvl1|8BhbkAteAzen=DPvR`oR{_@PNbG; zK(F1zD>rcjkEpRo;_x)piyhjFG~7${%OyOtQ$aju5vzFd)W(U7aFi*BGT|kOu&Slz zzra9oV=Y%O<=|lK;}*|TTIaR6MiKrYJza5p&uYf2#7Z{6$7hn?C=(@VSVL@hK@KJm z-_a=P6pG@-Zh%hO2LPH%E+U>@Ooz1$K}^95Kxq^bvy04ZA6E;Q0b5` zL)!8-+Ccci(GX*I7X#09oF8(-5gK;@s^he9>^;1Dr3N9^399r0nn7hwcUuQtnr606 zxa7Qhny8+2d~?ra2KPc^!!^mF6SP^Z~#Jc@iwGZ z5X2IWy$MG($eoPWD}-Zj=3SLAyAPFoz|f}l66)0ENc6#jfOsAauWsR9qU9x=AI2h{ z&3zMfTE59J(-U_XsN%rrxVI^^gS*3_jwqCj*UWb7 zC(LqB+&M?o@0=-4oIsi*mUySRr^H}m<8#s2kMk^T`o08LYNtK?<#e|b#hA}N7jl>z zSDHg_ZOTVaz+ZynVNd^AUAWs$ckA$g+)`d?5u#Uhkj1UFf#1Rw5oXVJVhxD@>7sQg zN{dBz=TE|6iyOo{ZDRT)pgC@W!+ncGymPjgIDs5}Z=rdXFy6~_21^JS+uN<;0Sh^> zP>%FVJS53E1DwHJc72$`;)X!_5oXj)HJBMB1Mmw@1Iumtyqm2I(%;?$bR0pKcS94T z-xBl&f*uD{avVZ53cCh3#WW%MBZ|@+Qen)jq8^Btf9F99!pjEWUZZ2M;w6VzZTF<% zCC;#cw{xBV;fzE2SkiOr*YM(AtZR}wr@_fTUIUI^x<%trx&>4vu}}Bc z(LKaI-49}LS?tqJ(<3bJ{(i-Nf|P)#OzbCUo}I0Dd9e5@2GFDkp`S=X-$(=0ARS(Z z-KVLLY>5yoM!denIT%`mm>P-_hlB&>d{aV61sjeof6{^c!S{+EI5xe$Sg&=aWW~ex|D+Z%I8SbGSU1r-+t2Ae(Wv2xIjRw7T^& zD8o)erJjci`61pt67M0o$B})7Z7%Q1D{`Iqd_dNCxB1%iOy>8A(F&DHXrabM5?z-s2^TYnMu-bK5pzn;gM3fv73xFPgx=FaD$d2`pZ$L!(F*mT`F z-K~GwV)j1QW;b6f!C)FEqFiyhIPT?XZvF4vQ(hAFFHIAt{LU)YVTtm3!Hw4=iW4_G zP%iUL^|Chv&(Kd6fr;JmoBwXaUWDksFQ(X}FIjBF>yJ?^`X$8dVukx!-+^c}^(^-+ zTzbpvth{^bXLyADaEUluQGkO$1tDy#sE1|HehgonqG=qr9gqeC@j6UBymZ8ZeAdd%km?dsYB`KPU3Fo1l15w_*3wVxJJhCW>n05JV(!cJR^$t z9l%0atHJ6X#1E;l_*$cRPxOI>FsnYkksq=dVvF}osz*M-J@m}q&`x)}j_}4-5+6>G z6ePk4p<<6_^=`s+w1KvZ4AcfLiMC+2Bu6xX%N!)P0DDVL^Wx?_k;6Kkf%gTCdE)%2 zJaLX*;U7@^UYY(gffoq>Fbkp+5!gjve-yXlQ6$Atl1y0FIMH|%XsqsE0e#;E-GIoa?|u_~y9o=5u0u*t^aBJ}QIt`$pbv_msQzk-_QsJ| zK*bSMJctFpJn=^SE&-@`3{;!}D$dtef_@i%LiomCi|T>)^(=_q^Ui?uyN2+L;MhYd z{SGShGhI!;11kLv5&gir1%4tQ{8a^5m@hgH$nxW$XyK8OMA5N%T&Rkze}kTx48KV~ z14aY$Ya~7AA|>d#7{OKaEC99<94ey>dYZ1LXK$QG%Q!PE331RABeWZPAWjqp+Wk?v zhd&?;-uNpKdgwC<#EZP|pn)&jJS&G-Jz|NK7J-;^F;4J3__<4 zftCAsew5&j!v0Q-3`3qc48@K{GQjmH7`y%t8tg+FkZz=X$c{X#h;>uRm}e8AbxrpV84!I| zqe{QX{`o1D=#F2`f}!^!=+!p_@6$Kv4m;>$&#s^*SV1#)^e7}F)_}F((YEhjh9baV-7DrOeUAVgJAmyDww_E8U24aTZow7=_Dxy*;~< zv2Bok(3du@DEJ4>F}>pRfWY#%j2gFremmrK_S+%dKPj>uyn^R*@%%iz&DTIthzY{S z1dRcX=EXk%`Yvpg{yeh$mOk~ludYw?E%mkjx!?Lu-`rn)zkpMtSN%hJ#er!Oa~Go> zFQD8$?HqOb_R-1z?L zKZV6!M)8RHXT|lZFZie4^#`BO_j*qKU5YB)8nL3E9{&PO9TUb<*;Kj|%RNpkk8E}Y zGa2YoiSnq5)Z5ez5QUkK5?ja5L~`CUb=Hq57M+L~G%oP-G~8hpNzH;YO3}Xp7oSZE zTv)!<3W;OJ<3JD!K;W5ztZjzC8||n4K1GKv|1F@NUc3{_F(_O?Y44n0bfscD<}~z{-2l?|XV@6um7^SGiX3#6Qj2 zH|b|@7_XZDpsdLg9~3vz+MuXm#Lh)Z+T9*xZR9;ee+Zfg?hyoMP4#QhR-C4~x~*EY z6>sV*dj=}qH#fEnjjd#j1#x#~V4Z{79MN34^(zg@tl_?A3U2-8M&mSAMZlAZsi|K@ zMUf}aS4jUre?Pj8^=sFAXw>DoZD54Ca@UVy58@B52iKv)2cfr9FmX-*1ArhWtsucy z=)PwPMtP=u03ROSn4TVm0)zhzvRR%f$mui${?LBe@4L6C(HOY5eQV&R_G8qr^e()^ z5R}2I9Y<0B`WPE%i_Q@noD2BcPcSwBzv#RCma&az10S$wj1BH>tOv_9ZV!xYYzeG1 zqy$d4d>MG7UOkfcUJPffJct>i-cpL5~3+{|x8_R?bC- z&(X`>Jt$Ij2P@3*#J!;EK{%%t-wG8S4d4B~%nsOqJ9Ioq#E3vFkh8eQGDF`lS$gJo$lJ-%#~k<@I|UO`8)#RDk=8We8H6>61wFQr5Y91q2X*R+^A*}+ zc(bvKal|IF6?{iv>B--$}^H1y)VY{c7|u7M&N9_@#f0k;XNWi za;AIDUczv;`@?+{&J@>#3DMc&hg}pRqw{*0>wVMVXCWvzQpYH%DYW4z)o<|vNR8Gr zD~$IUtawnV814b=$X!Ks3vh6{$DetPFrMlnHNhQy2{8=4VvNa|?hhG4bKI{r$q0S8 zs}qRL5nrpP5X)&{ul(jnw$TLrMJ^8`xenmyMPI>l038#3g-K_!te>jupQz*K;5-b| z$5@Tg*|Jp3A#B{y;}JwicVhc#GOO2+kv$KO1J4%V^brK`y*M3OREKIubo>b;<52PB z3);XJ?Yjbp+m8l5D%xcXoPg0C*b4EEpT20X4?NPi&+i+-M)8=&<9=UUI^@L4c^weZ zS=(v1g9-0@%mg*k@k$NxdbT-2_5bzYKjH(1|D-ojDTMUj5hz0$I{qtYjUvD!2en@d zq}g+gJ&;2GRQ!>8WYQKEME@2+gy#dYnB))Z6dxYRox=K~AJo64BP{VPDS?&4u{j?i zylCfe+V_tRxK`H)m;Wz14R15kiBj^#OG;@9{;d@bBhy4AZ{B6_*&Z&_& z)2a%n+~1VPn$d%Q^v~zZ{Qn0=-zQiQJrThG^j(Zc|1o_TWeqaMfz?oc@Lt=(qay>C zL%u%bUPa`Nq_=M#;XCP{uQGanhTuP;_ivE@-=z09wBg&xul`;_EA)<+WxeCz@0rAN z{R7lxddG;TKA;|newRIn-;8cj^$sjbMt_>2A(qEmZ)I&Gd+B8SIFN5VM3CR|Y(Xrv zi3LzU{k}=(Uukhq`&iq{(8?VHwh}7Ab!enE zuqHj`>Ne5|q^5y12BpO^Kib7Ebj_W=BOZ(%jG$Vc)w|7V3-@u69+!vV1U(|#z(e2+ z|9A*L1SjHCFo%PnS6(54#&gJzN58n%#(g{sZi}PvupEGg<$`Sjjs<>P6btyngX}{t z^5Q2{4KMza0>xomO5?-fe$7BI%M~A7DEl4m-^Nf>(CtHXmoU0X7+vQOUo*rIkP?W$ zjbZm{f;yxjAnk3VgcREG`e94y1+MT7!ClryIo&U^0KY+l4fGdyU57B*%a3j&#i)$t zVqiuAZSu>ZBX9X8iBzUGT8*e7ok>0rr|3-Kjw&S96kF}0m-mc+0m=%T22h(utc3bv z*GYD~y_Km=O!J_$P@69Is7=+D)#pfU!aKU5HXRkay49vI)TS#)ZxMIPZ&ABiZNiIX zd(@_1QrVuV(M)X`afQ?lrYMa&gevTwAFGN|3lyb)sfyBTyNSk7l$t4=DZZvEN(@D0 zR1~G&=~PAOHC0i%9HA)XLs41)MQO{5=}N_X_6bE%Y7ul_L0&8-4aqa~QKlMwuAuN5 zLt&Qqd0j8nsESmhD|kQsi;8O0N~)1Ws!TD){D5@-^cV5q|1te(q9*#UCR5zElqTwPq2|EhtGXktpZVYea-g^;MFGw4Iv?ztdsTlt zfsy%tw?77M)VFmH*bd`xH^fyQH@603aW+}R?)Z^wjT#*`OGTgm74_AKj{%0G#Q^Sd zPr%|FP1`yQ8Y~s;w%WKPoo5PuzzMIcPxo?3SZWKPjL(o2OBDqsteF-x;@ggO3|iu9 zKa1}UJi;Un&<=oLIsk^1hsHCAv?J2kPU|2OxOsTHVpah6nO;q?PIk~9Srh}>~uiIJO!_=ia+5T7DL2R~;ZzZD=>tkR)S_i?ebqyVlCenhP ziRSDyMi>=&G_`jNuqrZf$2YV92i&8$q_ISmJgy}LWVyOIcJ5g$bN6rAqn&9H`y=F; zdeuwl3U~AZ1oBKx^Xj+F&+$J&a{d!C#FdqdTmZh~O#La%3B0(Tg1ohupPAj?Ge5KG zx_f@!EsVx%)nC&@%+K;%tH$wUD!@pAI5Q-r!jv107>Q< zcMWRfP~#kr9`ARL#dN!srd#YTDAqW2cCiI-0ApSWd4|K|+3wGoA7GZ4)s{9##AZ-+ znq_mK`Z!#LY?KB^hA95c>JTRleCV!ldU5sV;Iq@XDM}`643Z3{M7Legud(ek4^*H zY~Xi~_}Q$f|MrNdVIF}pmO!x+p#^&?`(2=CYA@)U2|Y-m?>5|mzW@EALf;j*0eycj zdsl?zql z!Om1l?Ikq@^nMq5iAwKt;`g9;-K@U!-bY2r(*w|tkg#$aXlKOL5;md@*w_)-1Z7hP z+ClpwA{s;OpkAO>^tV@{NB^4p(1Y{lTjp9GObtsZBmpul84G`s`Dli+KG^+S-rzK} zR}vKSFgBEnmr}jlo7k@^!B9Ak&BbllHQt^!;XHQSN_gwASBG-xx1Ux8aJPY^68EM> z#BVJ7@Z&pLarD((Z- z%8t;4!~;!~RCYz4ovc2heJS^*f*H^~@1wG@|IEkI8u8m9m1qRviV9hqKnTJD2mz>& z6DjCjnhHg#6x1|E2GdhQFT*m1TeSjJqH$Wh0k1|YR=5rha$Ow6t(MQ}GXkL#SYks2 zCZ!622)k}XN(m98j9oV(dddux#cCw2ave=@g%gSssWSdkB&A0nWF29aCilUZR)D6` zg(CWz0Tn)=p%UX4F0f9^Mv%)t>|X4iU}*6oUX!e&++)3p(NBoFU>b1 zWaqG7GbP}b7vD1(5Q+h|*5h&9&+jgF$kr>1QhpETto4W z6_jWVduZ2f<#lTq99vtpQTDP}7#4Br?_;mhx21G3i_}O28B8 zJt``@j_z^B4ja1pvIBHT;O(7m9T zDWp6`zX@#wVrVVzR;cNgsp*_V$NLBarSAD^iNglMZW2-u1&gPqo@X;wY6CWz4jzrS z_o3OEjrZZgK<((?$RuAQE>Cf{qKL>Ro7E>9CnGa8re-6g)V(dmL76qPx*NeF|rQ&JE4%j(y8iiX^zfZz$l3Us%8uryFp^=^M(noE!V0X)O|Qt8{}X z>Bhl$BTw;gI8()`caxG`=BH{ZE%Z90(|Aukhu?ooCIzMd`+nmaZ1iIPf5lzLd!nO} zj@MO$TcPhXaiK*N3=3saFf{ZK1+k%76buQG0o!zKXetHQgzljrCUh4CgYl+w1cO4O zD2NW-Oo2XhJq5Z@ECo@aXbQB@*RYT86n+K5iMQA7YFOP+JjC)DO)J4;xLCQ*n=P&` zj{D^vLd+9?kAmyXeQ@nWNhmJ(5t8AqGm2HhUfWMm9YuA)-z!h`6x9b`P@)W#=uioz z#8z0sd^z0@ru)I69JZ(GNAY zw#C+3+FGS8Y9bU+QR1ZqglfFiM68X~Diz!OpZA>iY<4F*Xzk_uet$d3%roaX?|Uxq zxz3r(+8S=8J|5rfLGtr1ZTHtkC!GZSox#gA|A74iXk9=hHz#!JGpBdj_22DFFG|uT zNkvf%2z6^GasxybSVzeO6lFyM4Q zk3*(y5B+*%_b{B}s(;2ks4$Js`SFtRk?wB1Gu8ENe2G}q#m`z1xw)(RA-K3L!Wh_5C7t`=r;S5-u$n%V}uf&3Pz_OB;c$PgV$IZ)~=y01fv;^WB6@h9PwJH z7zEX5M#B@_aNp`Aw3CKDc;)sE)q-OpwfC0W+*DoIupewswsRlB2U6G#SaqW&oQ(zPr^P$4nDbzB+(2#2|rQfSz;hQ zM#DzJ9f}+x2I6CA&YpxuMGh6?&oMN4PeQFClf*!LjE3HXC5p76%9PjX$hXIGauD6( z6y}FzOWV)!{YfHTmz&=_Y=q;MbAlgz&DL-$#+~3tlLCYB+!KBsk-YLl_yGPZC>T=n zpYxInOvI=NZT3JmZ+0XB?CB zjAL@1aZJuLj>&n(F*(mTCg&N)@I$-9ohwE5Fn-Ql`fL_5+CxLq{)|xjhtKvtk#S+W zt>N3K5s++zWUlS8gY@H6o{MZ-o(7$1d!!9s7r_g+sFwrqSj$8Jo@F7UVW(w9&q%D% zJ%jz7a@(n=?G3n4OSc{@xBcZwoY$ z3Q7+8|72kKUwalm9z?~p6jQ31OJAVsa8%4t9M5-UgdYF!x!xx;E_^&N2}M3VfGghJ zHe?Q^Z`oIZ!3|45gr| z4KAi=TbDyCI+0bUDdB*Rn%M9}Kf%x^;DTvrN6SsO!Zv?-6%Mqsbo*=6o?fSR^ar$~ z54wXG`_LItPt<(_mNB}fBKiO76i24E{v$j=eJWtJZ<@Y0_m^?J;j{8NwugR)he4i& z86CD}D|$+-b&r7o^WqNRL&1CTn&n7G?`w}!xzn2>@`&GC5!=0JJGA|UQODWZ`uEMxoz<715U^Bc5n zX8b*4BKu#$Si;!M_-n?WvHT{+V~kezpTc+zV~Fu##s^rwf$_JD8vCa(E@o_G{5j(f zS)Te{+MZ?nnDHW(D`H&F_!GvQQ1QdqAH$A29L0D)xEQ}VRE#yS;y1D5%ZSAvZYu75 z99?0kcsF*eFcjknreZw6RE!5Ji#xG*Vei3yN{Zo&SjCTG$BnDvXR!YcJHA*~{0Hps zVE+K`k^NnY{sPWNu>S`8)7XED9p7gwegpd-vHu04e+$R|AecSa_hHBPbc$cVeggaJ z*zrZM;`c+vAIorm4%e@-@5TNUc6?^G_&E00u%E>KUa0tVIM|1=&!OUv`jY%pFu%m!j{OPj&tgA@{T1xp*xwBm|FtjG^|Qy^p=%b~=GU-J zLpKW_N3Sp)1yydVYRf(FIIVl&{cM^-fTpFm7Y~9^-cyn;2=KgtomBv^GW+|0Xgaz9CS2 z>SWHQVth{+Czr#bCueRFg@zwA0W)b+@!!aDC&z9oK8?aTIeJs^yC7gusXJtoFxE%p zhyHTtO|TMHR(BybTk|pMLq+G=jyvLm9KElUx0Kt~Z7e{KNm#;ID=|9=GMgl_Tj{Wi z4sCSkphG7edNA0o+ekkfL+E6bKiINv<2vci-b$i()8Qv{c#IB*>F_cg{)B9bVCe09 z5F4*!tYKWs!E7PvyXf!$9Ui3vCW`B_U!uc1T%~ZnF`qTBWvphri9>28g*)l+V>&!S zho|ZAdpi8Fue!mxk$zr*@ES(>a|Y`+uHnEolg3=0sEOqNhYmlY!>{Rp`R=;x<8(L~Zenn4yn=PV&UiiJY7XlbQn`Z;KcvI2 z=zt0Iy6hL}@K#?7gmYsqD__l6$+(IG3z5$4bhwWWzoY|Z+3T{8(V;u4fr8nX!}^OE zF@+Ert>f@Ek=k}T?4-kPI$(ysE*tA!>$0i$qn;1v8?#xnm~j~+ZY)rU*&FHbZ94pb z4iD4e03D9dfqGo-ZQ@I^Uwh_v!Eu9rn}VcXXiMR`s-SZ_H%v zg^X@SEYFM38cFFkI(&}~__@e+*_fWL%f>HLuFIwlIifQLwUK^Ug0P6Oj1lYUBESaH z+eU|b>F^*O_R--5I#8d@{WY8$=dyAkV<{sREJa}Tr1MQWe3uSCrvo*@Y~0^pmrdPz zUzZMM;~dtf58aY`DWjLeyP4E(rNejV@H09*PKW2{Ks|p%uMcXYg9EsV(ZzTJ2e_W} zzCnk3=>LA5lF5Z@;JwAVhzKX+$(2e65zkFeA)bc*@rYS@C)Ukq8~c&O<&3{zwBQoZTg&(q<4An5own;4A7&hgi%8lQGal#ozr^vCGwx#i8)Fv7cPrz|j2Cl! zs~Gn)4&(UTj6Y+vaJ+?#zvK8vaXc=@A2FU{bZ~slj4v`?#PRtV+Zk;fUkT%n8UMyO zkK=!q;~&oPT*LT%#`hR!aeSK?f6F+IewXn*#te@C0LOn8$FqQO2V*zm6pn8#<5P_1b9`>b zpD}72&sB_fF}}liImiDv$3KAM$!GjF;e(V>jbW zj{gykKaS(cVZ4>`WybLwpP#Xv@obJ~3FA)24;ZsKzHN-JGfw09cXRxIWwdjAw=f=I z)H%K?#$PfH;&=)fTN&SByqx3P%y@!v634%b<9(Mgo#VTi@i5~Ej<1aIr;KqN&y|eZ z8UMgIo#Sg@e1UNs$G?-~rTYi8rE+|$84oZfb9~n@-pBY?#67{_yiJ1+*|6+9vL@ z=Y%$o-A;oZ9t>#}xLN!*R)+1NqxgKBxE8~hl0sfzJDStnF!o|-W3k6Jq3&JVgxXhZ z6DppyO(+k}F9Y!h<6VVhuIkH=~pp${?}|7dHt1$(UNx13PI@+K^j)t|!mVvm5uySHBlkz4v3JOs1&>+ovtv>r(KJ}cpS zrHLmmXqtTo+)^fuWg2nEXh>q{`u!P=z< z8pftVh^|y~nzxOu#W^VYD0`})_KXb@!dB_vazcB?+6kLyw{6hje1?=LfUeyXdUL{k zM6cgR238-F3>`EO&9mcS&8{rWEwQxhuNCi;&l>wHim9s;?4x9CdeWooRfLL9faBRD ze=Z_@Y7+5jW5s8f9rT=0SEq<~_SxgfqCy^W-;I=mUC+g%vLv3;^-~gWnr#7rH>!GV zjd!7LbU%y(*tbKv)_n-)d_AtdYQO&N9Fh5dTSfW65jukEf)WXQ)lvU9JhMr43>o?0 z9AvAlYY8T%Fe0UbztXw4e)gSfbgoXrzACHJCStI49mmWV*&dDj$m%qZf@_+67Kq$Z zyuCkk&|-Lr>Qu~1T%E>T3AdDaqgcu`9v9VVc=uL>!qw@|T^lJ)xJB65yS9jH(Fnv% z4WwT!+BP;wUT9&m7Hw0tXtkjhc`4B5p{1au9bOT7hhc+atPH>+uj7$8xN^xAZ4o@W zbK|v0ar3k`$mBGoL+n*Dgh8x%cEi_TqXQHbs$W%9^>aa?ulkjWJksYD{h5e64|?J1 zw?AI%68_Dzw~Z5(&n*%^`zw)BD1~or)V2NbDP5P4chl^RaLTIZrK;B?s$N3-HDJ-4 zM5-rJs+$siOkDFc`t5GX4~vnTrrDPuz;62W5BWaT`nN^n3w`8hp3{p}|CKtzxC}D& zc!uG8EW>;S=Z^MQE%Yfr@q!sWScLb?4rKPg*jm9=I~Ir9r_m#u1$XXPj3*)z;e(Rb zuDbK;#q~G!XaRgFcxWezsN02w#+=>sY$H9@nA4n3UtkaA_T+>dyK@dW+UN<#&{ftD zUZlOYv!L**1!CpO_MI8mwg%3dvGCr&IWzKi28JHUq+iuWCKnzJS-yVtlEnx=NHwE* z_)UPO%(t8JyYMbTPSdrWj!;}^ux<1CP&m*?ZI#lT)7*HJ>=0IrhgjH+lE`=n}wL8_rUsBdU0PWE3{_tklyw=p^U-! zNw}ZjLyUXIbV3~h8F(KR`zc5Jp9aqf)Zf*W7 z%i1Zk;@6%RmawP7f@!c|IxIM=kJdqt1w9`0#6CJ1^f1sPK#wNV+8z?g_$3WK4*IdM zQ@QQ0S?WI$<(y}me{5=RK7FnCH2gC{3wO~ciIDodkh?7}RDCcn6u?i=-n9FJhDT^Y zA!uv78-jQqHLv;JM<{>Uwuk)V=y!%-Z#+!55V_B5p1lz_dFS3T?8D%z18ooenSTBF zI(o~;)ojfsD_Zb!(wz@KyyXF-feTVcMX^mDoV1VXp$1MLK#UzvO;M|_(2)*GYy+*txjD^i{JA&ZQFb~xQwQS zyU<4Os7K(aVR=o+Ula1zg#4i_4-7!UweDO@a`5{pxwb}He>%{35QRk^C`|expq$Wx zWG==wIGcn&JtiMj&B^RdcanVQ#rC%nu_BF!k8F(z2r+c5y?faDSEvs->&g1Rg8h>a z`z75>Xn$)+`$_BiSIM{jHQQOw;ef_EOZO;5PY;LD`>lm|0A-UXsWBnw(kGhfA>$_;_4Ls1EYwcKRSF+; zXSN1A?_%hJj=2ERoweT zFZkAZ&>jcvCJkST9f5vlG#n0kQ+xOqaF*FL2<;6wY=%05T9njB z>m#Ll;KHjLka`Pe92UM*G8q53D;;Xbmu=d+zmyS5`12Z=DgNd4R7v}kl_QC&`G zMXjt3nO#kpJ+Ui7=B7&<*O2WS4{I8_+0B<`HrN{Xiu0CBGtr_R#`%HFqoSUL0&N^( zTT|xIm?6U04H33Ikl6|SU`{A-kTnlBWp>8YT>l7VV*sSRSqCzA(Me9|7u1TmQqyTu z=B}8^wudushDk#SKe|!Zp6v=H`~a8{8XgP^2mo@L-KUn&8218F6nl(&fpRIwxEC*PURb>O+6N;>y3i79PH66fIS1zM5o288=+L>8P&K~YNvq6(F*9zXHXj&1 zqnU1F&_LHAOxd(>w;bpY$+r;+YREP~Q)Wj~{(~6kLIY@wn+DkfjhoTJD9sq-w&OG> z)HniRq2p`KlpQw>b3{ExQvcvEM}f;>t}PQk-&T4X5qOcZ>84gZZD!j-cc9SMwxF-w zPEp!#*)x<A1j3d+^Opd)uE9aJ|%vU*f^%weBCf10uGEcMPS;wPXDo zH14f`jXFyVg~HR({>LHf-=xv5{p0|QYfTRhZ6(>>-{9FJywn(~nvP$({>e$~A7yG48}Ltr(?XnX8MrKP}+37^N(K;!2_p{+cwkMIeN?%^qAX4(wh^mS}S@4TjTRE zV*O1IV)T0gXOstYm^u`4LbtUbN{oJNN0^a_@PHN7asHbIz-CH`cs@FWo0F$7ZLpyD zsVHpopU2cgl>_}69)`e87y>gw`N51(BQ+O{ggf!WJdp*2!SF)(py{@v=)_>S;}MF4 z2E#FZgQ1&@(L8%~Ee(c4J`BDx5ass-epF6#naXW) zcr>J`O4Mlhv2F8Z;LwL`!u9rM>hzkB)h3zMCil+BB6b|0UxL=UKfqFg92M!l-+{(W zC_(bbX>P6+rJJip#UPwb!arsof_O*)kB_x?C*p>!7y(ZUW^en+Ve4NL1LHAzc)js; zDJUKjXz#{bLtR!ma60g#myWXz;y14IY#C2=?|~c!N95*FbVxin9ucQvaNI-P6ta7U ze1^x!vyeUUdvfdF)-VW$-V6QS5qi1)4XdO6O^ZKKzBT6`()dSz>W2qtrW+WK&!^)W z`d1|0HDNBS{eX4s)aUT^m(e@z8Mcg%@Ia$Qvt_*X!QQyQ3|zyStZeqUi>yFVbT#&tu zkEbR4ItP6*)?fU?MEY~;PbT)_!y)m+1>S{fBF2!G7Lx8-hkI_s&~Rz8#lc8L9*B5S9)sna#v-Q zy9{xQ(DZV+^ir?e72!FU!l-svd%UZ3S5=j#G}4p&DBtDom66#dI%-4u^hL-G;v7G3 z_PDZ%dcHUoxqQog;%uI$%#AbOL|t$flUq3b6-ZARc} zEL`fTu62fqi72A#>OQw90xj5(;wbQXmR7l|^~xIEx2n3@?e|ue>SQ0i*5yN}UW8li zuhXhs@TsG4J>Ig)8kgTq^}z35=Jsk3ucG+JmFeQ2&clJ>e3`q(?S%;YSCxay^mV0@Q1qs{xeKMJ}(?zp9o>PY=}i0=2asuisskl9J+gd#foisK0|FHt6Km ztZ-FTmZ?mw(%}raXO1J=lzY6$&ZiGeg_T8>xd;i-$6u5JqhKXA91r=y$@y~m^%^vW z)o!oH?VAa!NQ09=)RsC|IzN9X>oq=3DYnla%5v|S^6*vdh(Xu9ABCf|Bixz7OG8W9kGNhK3@6hJt=W2Oh z7b;p#UZ%F7C|`q&h!Z$%@)Qw-cICXe^KvOH!DVTV3<{?(GZO(xE*HT~6M9(-^YX6N zbLY)pkde7SFIX^tZf0TO`~@tRxd6fNc|lg+`CLkpR+!_^@(UKT|D57J|3&zqpVC`I z$<`+7Sbtf%q$oe@^7P3UT{wDp(m<{4!JRu=8tSS_igIR6`l9U<-4y0kahJtSh#MBy ztG%WDR%_FCYAsrwR-)zLVJ~`i#~6pvtsA!Bx3+6`{QP?BhBz(xt5{`@*EB2}YP3*7 zi}3%fzX}II#oTad6}8D5WqlOdVV?tM)Gi|l(M}@>;f|1y?mmLuVM4hT5q2}t=axi- zTM&_MBBI+Xx$eTZh z+=FtbPQeOooqho=)YfT(3MEk{39A0upe&Lp7YwbF4$8eGjf7|R>Cq|a3Xd|lls=ux zFvzPfj5%1%^|`S~U#7eGPJ))@^1G^Zu?jm=pX;i@dZi!Bv6cQxEbZ!eKtRuNyK3>f z5RY(2GZT%8UJio7D}lybh0;MV!R z0z#_rz%Z<;j~6MDy0mPIbz8cJLAeo`EA@E2fm(_Tn-}@RLut+$SG5}veRZ7gs~Sm4 z0yU30REKhBS*2IhMdmVAK?_UhQ$QcpRp zfG_n_=@qzNQ-u)Z4Vn~L^e}RnTUc^lQAS>#UhOFhAkk#ea!;TJ)>z=Ln(M0d2fS{S zoGh$BO{ut>6PBW7{2G5*RaFXhq@mF7DqUXes#>mBqD*;-9%*zft)Z3os;X7}qSrF( zO5L?0Sm@xEln?S{0WTKzb+o`xt!xD#ToCnh{7oftY%?Z2o3hD4;xysl~(+9xW& z(m-XEpR!8z4JEwF6Y!!k`TXu`JYzkFst2{y1%aALMYsc{&#iF75?Q$ahsr|L61QBu zl`hJwXhEN-6WKS!4iz>MW(4Lr=4As+w|_8y=#Hq*3md+Fh7B>rPT)+P+H+LCsg5pn zQ~9CFl!=;z?u9AY;i9$5jwd1xy%-hEv(l$8F3>MYo3ymjuVf^NH4U%2tBgw+jZTE$S00mmweHf&attg{ zS}{#0$Z-0?RoW+uj4p~&rU*;Q>!8Ro>FZMps@yJgaTsnY%U7Xopf6qOK_^J9#8Zpg zxpdE!y8{tebo1e^NoIrkKV1Jr)yaQD_!D)yfD?(q)th5pMpVwCV#l@LzdnCcChEB4 zny8CQ#fdtu6esGqR1^uqb>Ep%)4v@5)#;GZSq&uE4)73Js5y>#69@t4xKT%3rj?aRHr^j)6RDR_DgS3N;IYScMU)9C#oJ1#`+ zcu_wHOuf3dw+&bTJPPap_5ihOdV3Skg8Mpz1MCFafjxMa{1hQxQcoTNeY{C;2e#s& z#X3AwrQ!PqyOJP}k0#J-SS5I3bo|+f51)zH1?<3wC)&=@v=%%;+Ho%AZU7F$HJT5I zx42q?T|nKB@V@}}jo=CKVDI?zpm$SmZw0VzZEx>RU~nDM156D=Lk`#iv;*xo z<9%gdC$JW{s~)d6kQ>-a{tb9U64(mt0P2m1A6N_2MnVoa0+_l1?-v4FfH}ZcUTTnjaZtCsb zPX5iXAGx<6eZbbO2;&!tw(WpE`QHt_G2nrzz}8m83oN*&x3>hC`W@(# z8<_Y-j`dpOij&D5_QOsG&P?{BrV;J_5N0F|?0>89^lV5hxcBwmt#{ z-TP(h2UblxY^4VFj5QI*r^WG*IPRqnacM~Kevu+1MdHB7q@m4d{ewlz()z`2MLX@E z4apjlE?Hv^ty2e3aw(zz(&SPF{1o;zn$wDoMeApE>k*XSr%z(_0V@_hQP;Zt|FpSAxI+3c73|1161 zESP&1%@MD(;|yaf`ZC)3*RMkQ=i7|JV$3SC3&{@VY3v`3v8-c};aePJ`4~yeoaojJCQA(Iq{^LrR8hw(I znD4xgboX3shcq^%j<$)|hYSM$bvrq=9&to|X5ysYx*^`W8Yg?LG;QCHoj#K=3-YPg z*x|yQ%C!9Y8fGVEHKT^ok*7nFI3)-%eoLZ95TeyeqKgRY^@wJ#s9%Sz6x%c6__P(n zLR1Bly@1rDi@>WN93m0mEHGqC=CRK|y_R0{q5E+#+hWH&#i zbgkFf;ezD9-)?1y=09jRs!5Ug-z5s~EMYgYP=CMJc9VMJph0%agZ};0Z@cU`pxwbu zTmSxsYG`B?5S2#`-;os{qI!w?W~FpTo9RpyON5Gw6;W+v#p)L>E@-0i92E9I6Xe;c zOq87QUlO*G>?UBMp&#Z=`XAUZg#x3SED*3eL0!>|-(2D=D*+6Hg7uP4qoU$y+V5 z0*>(XY7VW8q~FuOx9;jg~&ZRe57R$hL(fV#eg-^zTDJh5dY>6Yb5iH;;aCyB$=`VPHnmuDJM@tx4(o!R>VrnGTYYv)c6eTU=JY#~?3OO`ND#~{>|n$5_O+fl(&~FLYNj+RIA-BPj zk(9ckKE8RtmV~WV%del#ekSv9=3ZA)GD4v;p)C#jz0hx4VJD~7CXS+9wo?4{@hHL# zR?82eGXgOuqXbA7Dq@RUy?|CW_)dcz=r;&z@h$RXq)TmN|9in#)Z$);B7wy30dL2>9z8-n4g3q>bG!(jcr?3m zamk#}Y~2#SH8Fl$+@Z{;GoQ&o6UyA5p&HO=h|+H+^x$4m8_qQ}k-1{w-tu!=l_39# z@NdCAq|Rvn-zxt+_!r=F(yh_{+mwG5{5#;^7VZCQ<-ZyJwfMO8u4w=7D*yZ8ui;DD z9ntZ*9@}*`@q zC-g}M8}ToIAHRG z4v<$J>6-@16MHDpO5^ks%pa7P`Wx2V$3Z;tJip;^4m{-f0?-A<`BXY1x>0 zS>}D)x;^ps!FLS#pQIhhcMiDg3wIA|J?CmUEsH`2Z(A|F53BtgiHR)#+R1ytC@Ex6Z?d{RH&Kog)wnwW03 zW+%19Sv=n!uzlF==ZNfn;m#3vCEuOcIynA{_=tRF{yyuaT;#JjNyq$j#BUJHJ~3Zw zi)*kn#&5R93gW650c8Ip0pvtjPNm=<3Lt)NT#Pg<`A5=VSrQ`zgBfJKpM^HugM0tS zsiE*z1S|r-`v;h(#pq|VlX@)it~g_D?Xk$3dWD(C{RsDdgxhi-`cDqGnJzfCP`Pfk z;+mp9fdaQ|NE(m%t&aKa2wY(#;|c?_>>f*fLbC5O`T>@#y;tHG*qd8FAY7)u$xRp?#1k;v6tKx>>kAKAiHT8CI21lrlv@7-p_8BNVwbB zO{?DI-^K1Eb`SZZ9cTFZ9Cq?gXE%*$Db9#!0rp!y@uUiW_Js_FNB-Q z<9>FJW%q;Z9>?xI?EVV7_p$q{>^{Wq@$7zq-4oc|$?l8bru4OO`oG5RlK1R5llSXH zetM*P5;$^e?@M@k`gQC-lii){e<{1|AKGyy*HuWqmED4jI8a&9 zW<&~yHpM?Aond#o!TqAa{g%P~zR}GAtMJd|&dtVh8Pt(rqxwplau1PCtz)=doDF4n z`U}!6YzwZ$BHh&A(6;z2yFlu1XxnbJ3#9&owk51c{ReH-?r5X-8o6<@v`rVf1g-ky z3f8CgP8;=Ow4EnGt2o;(&J=$%S-Pozqpd}PM*SOYD*nIs_Ik*j!}92_gSH41>tf1JpL!|&W6AF{m7g9{{%B138R;xBo;TGM{K zr1+6t^M^Y!euc%ZpYKUO|JVjBb6xa{#}=Y| z$6fK~Z9he~ap>@?p~I+0Z?+e{--z-pANl;(tG=OWtNg#7a?KXZ2lC?<#A9-^r2KCy zuHC0;PcC}&_9Gbdht|&e{vAljw$jq?(^nvD*QMv!QT{a>7LFdaNz-0QzCHb0Cvm;F z@bN3(tH(0-oqx}-JB;^aHqV|v3zONuT>nz=jaPAPzVioZ{}~ttNvZ3-wc($87e(9f5oeG z8&T;iRPttMrmy6U{zhKeU7?ECh)T~4RXj@1D5v}tuiOgF;y21Gw?Z?0Gk-H)l|MIs zQ&9b*87f6Hf5ofu#fVB@p^`U4Gkqm*^f&Tqd{e06HKNipLluwGGs-D{#VfZ$v-pkj z%B|2$-^|~PSL3@%zZoihGgNwJ{)$)WHlos3sN~JiOkc?x{f)e`yFwMO5tW`9s(6&1 zQBL_QUbz*T#cz~XZiQz0X8vY;boqaNzt5=pZ!=W=rx_|eGk?Xae%pvjU!jsWLo5NuD_*%3n#FIFS8j!7`ey!Syefay zf19D|Kh03-nfWVT_1i{N`U;i28Jg)Ud85CPSL2RC6|WJMo*Alml%7#e`72(z6`I9w zlvi$rX8LCSW_&MM_)ekFwg{r?*XvQmjReuz!@=|EV zt9qdP6)HW2W_+~%=ePV*kJ^QaO5T)M%jjoZ!x&`T#JHJp8{-bfdl~O%e2{Su<37d? z#upe*Fm^I_F}}^%!+47EV@9n@raO^QCFP9IxaU?Tm{V%NT1J*DwYd8yH&{ zcQ6Vg#yC*@S8X7M_rIKqTOZUCBSMW^uf-)(8g5n?j8pgCNlf`isQgo>mYaidB{4z( zuLWc9in83SS;$cFmN@#!I6@0O2m;q%$svfGPiN z5=DNAr+g6~6bKjcr+A2p&4O|Y;*3zp6OtSu*?|!GkEigEPoPE9ML6*q9vTsLl6*Wp zTmgS8`2*wkUCeH~kQ)$w_yY0$Z*NpSk;V2&O*wBh@)~h zZt)badbr5w`Cs?v)&ipbpgswtewOMNH87J6{;J-I`Y7Cy4cMRu|9I}V;)gxK{4yC50;QQKs*HWP0E3rbIRpL9)-dZgMAIf&8IOgO|^1GI?YgtVog+85G zHmR~qOQ~@ADzuccRW%4pqTj2fkPLq-J<8#PpVwXGA_YFHt@3Lr^f6%#KZ#j~V>uk~ z^OWH;?^=qx!dZ?_JG-3~WzbbFEv3|tZ;c~D3D=jxlN2a)=!%rk$IKDC2VvrnA|jH3 zF2&D-rr_(H^z~nZ@jrv}eCVJwsf(7I#m*>!o>z|CNH%iABP-(BN~J&AVi(?{nb3u+ z?|>#7wbApt^bDrbpJlPbh390M7%NFf~ z4f^W2+KRK`flWP!OZqgNtN4}vE#Sx|Z07KD#Ppq1+LWAh$+W6-!ba?o`d$3|DScm6 zY*aWAn<{tCo_NkTQom<}T}bzE#5s7zEOJwNiu)E$BK6gC&*^xUh_)mN;iHOQ5j$`~ z`pW(#FW7}w3G25~1B=-7h;ur<7ki|>cFImPUig+EKKLn5#nBl5&%j3NC!V$oxx~`~ zv^^I{R7X{Q%Do3Cq_50;5Wmb#+riPq_Afu9{$9vL>UXk!C+i#SZPb6#px?v#J*;n( zH@fjCR#g1j7@2-;j7)#0${6Hm)5WpxZ~~`Pca@lWF1k~f`r@54mLV+_zslDe;7C&G zCtv6yF)jH*sb42teFvql@GW>n>Z|AAH?e+;3?>|a(o^`JL0=yy8j?Y~=QLI7l)zlEk^vuQ2d3RH;K=)Xk{4BSjOhkdgzH z0(%;qB5u|8BK12KNXeWFBunq*?82_>rurp%KOk28Bm7eT=US&B#@v%@|c-i}T z#iO?vZHdLlW893zTf^^PXc1dHMin*QMbOC4fbjbn(fmM7jZe{hV)%WCXnv5U#*=7% zaQOX;X#T8l{~yf{(Nw=4%@5U7e;v&yX{sNN=53nlU!!@nM%8adc*LW2ss1p6hJDUK z|K^IM#Cg1SuBQ60NY8k@HK_WfXdZ)<>Te=E;_()m>PI4I#Csn4g;?>92*3XlEk9CI z?Kzqsh4vLI9GVSAZ&Y6`+E8uuNPCnAwL7c!Zf_I`$7t+vG3;}Z;QQMrUGV+wlL?;U zwHxB4`4aI#1CK|u1>a`i>qYo|`KA2OhDU9Y&QaP7vA)KPYv^=)SPy&oc! z-=l{5@Jqp;t+kDI^aX;m1A_0L-{-+oyc&=HN~s$svF!W-%eQel)px%C#(b>rGYh-T zv_nGE)OU61`-WtPU2F%{UF*z0XyB&_-llc@R)(YOc7@Qv}??g?@ zg3Ol~b(;s-@|;HLEeVWp5)bgC#riM&wP(TKAU;< z-U%Kh7h8$oM`^na_6ab*$H3ph;pqH6hqBL3=GA*DD*bKD7Z~JUW?sFgqU298A2i6H zhrx;RtKL&l@~O=4GRV(oUcINH>{G#fr$K%r^XfenWuI2TkJ8!L{rH-2|G0T)(rcuTsI+oR6)a};=zH-0zx ztITUfb|Kk;dP7?p_*m(&v%K+pxmPo9{2r`Vh3~S9a68csX$vvmxztY1@OL{~nKynP z@@LE&zmvF+dE@s2Ur^y!%J9{9^j-%aD__cPZNHQ9svmpXME-pfJ|2^QvcLVP3QR&Y%3Fnj2U&7%S(_eBzhOc;) z{*vEE^Tj6dE*I$^i5I_JBHhTO*ltvOYBaCxR`ODG_%dFElg9FFXJ!AAm!suBF~6PB z^5J-2iRQ!keKnf@#QaW+&R00UGotx$zGg?~E1aI!qT>zc_w{K06Vr2<3_qyJO{FJj z;KS*;+$243M8_LW&mW@sCX@Pb7kKKIYVVNpI@gCsOyr+5;a>z#{l8|H>CB0f`FhJl z{*;g(rFC&TQtc%Hi;uC|-PtDmh2S;Jd%4?`k>WU!c}_-{Ph&nz@Cki`p2AU^^1l*% ztn^$9p7LAbkoje^Y0CsZO4H^^Ugc}0;4zx<^+gB9QQB_iaLNqfd{c#Ug$xIUB(}R1 zpBK&F2R>FhceA|C>9NaTw5J3=QVVjt>O%Sic&ZQTJ19EbwEcm@DdBKbe%}KhE8YZT zocdw)KD=6A`6Bb`y?Dh>6Z|Mmy(h2iRw(%X*He`oj(VS7g|nV{^s4j z0uDb#@a%|ync#KQL*sR2CWq6pUxw4h1$Gtl$sE2)PlZYNYgoSXCK--OPlJj4cJOCg zMrsX)`Q$G-oRa5dII6uqLA(XmcdGy4yuHEldWh4{{71|OS4w^t^R~fkw{J$vPhj4- zE|JQ-X0SuHk~i?B%o~5Ffxf|iwq=x7VQ3fMWcil6WO|gH>D^e8FEhx~@1dQ;d5MJM z9FDz0hNJA?Ey5Y8Z8q3>AntR-3TL$7hia`GWjLK2$tB<^J)MSrc#%ms*MrwtHxgEv z@XaRS+%0&N`&D)kjLv~Qzj z!{2pMhLEhu?dL4t8It@i<_|J&|F+~?nSYge<9DG?GH?8@@L#}FzFH0O4#biQ^>5lL z8GZ|gKU(nYh=9o~-?~=HtMunEpUQj*>lA<&_B6!16uizdk+7D->E!&jvFCOUr@#=- z1H@xoQ|p#$9DGEC6B)8Rf0n~9xZN&@PDyJgP2}TngDO^i8!mWUhpw05sBhq23|{9j zBOw=ja*T0d5%{yQz7*vCM+|dNbc^sKLy+e;5|945r`;|Hb^m0ukjK1{+o>v-Z!vHD zU6>y*AN+<4r%i;WY3+h%M+6*ZdA->#*iIfW-e5j?7xT0bi0ysmTMhl~Al$d5`eyuY z`Pty9p4biL`xPbcvx{)GI0>nOm*{-mbX0VSBJjL6_?OlbxiRDx4 zqQkjU$dBx|K75~$=g1=95flC(hclkn)0E0@P2^7s9(MD~^z^X8$0D3_wJyUvY7i;_ z*}0a-_YljEWWKXrhNH7R(*@5$5wL*eOSm6yVZT!5wMH3ECx^3&`JiFEzD>zJm`}dXE*YK=_kgEztTogh`c<)5?RTQ!vHr72h68o6O)-(r zGU4eyeys44@O)`ZY9LH+rJHILUPUg2UZ(k$%66SY+r}9lTl ze8G3@f@#BbIBg4Mf4AbcDh%E zW9TQJ22b^26OU6It@a$t+i#WW>12<$1+SzcaF~oYb+cWNJ?!-*<~uh?zK!`A%(rcm ze2~YT0^%_a>iZ-wzA+0Or;umm2=H?_ySN-X*l!DXx;_dT=IuXZdE@V9{G9n79@k2E z-QZacXOkhEw}_8OhdTYc3g2)YH(+?|dX-E(@>^iIF1yG?J`X&VdyApmuM_g9pIp8r zoS<@&$2_FNkp49!k9c=IXBU#YSbn<*haC}crwRX4!6V-7b|J08c?x{2e&#uoaNY!e zHmz%ocga|}KD@`_ck=Z`iS*SzV!r2QyI^{lABh_iXxja@G{GakC3fLgz!JI47hEOz zROYW?zLVQ^2lF>DA7ptI&Kl;8zsGm0lILc#gb9>#( z=$FsEPJgwtw8~TC_GvLFr?brCTvp{->cSJM^bn`h6{yqb7uBoWes@{QCDSgMtdWPa zvaF6=Q#JV-8(IlX~Wzmxn^rYYY(Z^55gYw{%~YLmm^#f)w06cfFvNcx#l84lKv%xPy% z=ajIwL2t^`{`M=3Wz<5aNZIr=+K+q<5r~LQwWR%Gs7d>o>Ph>>(3AEv)te^l7ei0l z&s0y^FNR($`#ECS&mrxXen$I|Z!G(nYDxRWP?PpE)syy%p(pKUsweFiLr>bzR8QJ3 zh92w}@K;u$!IxIJOP4#nZXX_!N5hYDI%2iwRBeU3)akw<;HvULA;RH6f8qC5);T@3 z2-t@{kKOb$rxlfv0({>;jgTAdy&@4n%aP$ z(p*_x<}9O>rlrH_boy6%oVCtrQ*gSp(qHZJEl*3w`HC_hMh7>}Sy;pijasjJh12Io zkDWH-E+0l+JLj%?eYh_Zt?ztNE*G9Q00v9 z^2y9E^^~pB%3VHxwY%Df{G761%Uv{VIxk7<(<`f7MpYX*K=lLNuUNp8RU&sDujb6on?J{q=bWFF zRhU`iEON}r%cSW8CwS>9zdL3W{o)pN*yZ)QRyo}@Wql#|Fm}3q;gq1&Ng+9b2}dNe z;fu-#jqR++$uY*7arHb$e(qe&DO!nJwi0J;*(GUpX&NRG&N+yz((TpgtrDIyIi=AH zD_6T?>Y+`Ff-JY&v-5K2%ymw|Fg#7GmVu*kP!*2$3+JNB&S*Hvrax@dKk+r=wc%DqD=-r z?jB1$sNSyYse-7g5S6#8O3WIC1!d(@6`oo*brxJ++yu}R{1qOm6qP5Li9a`aU- z5eA+f-F5Z_Aj-{XO|q!Rw~3ga0-YniMjhS5W%v>fdn z1?;axuZh~!m+ER<9(YQl6IJfPJUW^Z#Y1ymTtc9fD`R<6|Hy4pWBWyvv1nVl^h#K% z50?>0v=51@MgqCuk#h7dmtaaR>u9XnEGlkQq|cOaHPC92wn~4cr^XoOw51%TK@$}M zeX*fLWb9GRCJpWTdS&J4~w##3E(Fl_%p9dpDO&L`y+5Id<_kxC~Iv_H0&1xs! z*+k#z#cPs$MX#=!QQ_oxLgTJ^4#=da2r>#Z(d8JLs$dfpjd3;%QQ4tKmI(srvyiGQ za*#!1l77)NM=P|9ZN)68aMa-m9+;@^WV#D04t>2fCbiy5R~2d!Ch;yW^5u@mncM5d z=!H@!tuPcspEXo3N;Y(+^;rd@n7d|0bn(%2sb5cuQtBtj!F!ftzUm~C_k|nFR8f~V z$Q{yMi519ex@WEiMS6 zL*ulm`Wij9sHz=tZ4vYO&RNU)h6rPoUgTs)rh2*>pZd?s(jcw6%>|mACimIZ&?%K; zWzJ_XRzx91l>)AZ#6(8~*1siE-(+ajm9D8%sO#Y}6Fojzw5GInRkTSX;*4s^5!V}0 zGegLutgHQXm|7P5)x6qM2q&|x9t%ctB3{p((S!7?;lg&Y8vE62K5Y}wuc4FfLQ~$uM@j-)r*+8x(#p9sm3UxTi zCwU934;{ol8B84TZ?fh9O_MbTDVhuhEmI2MQ?J110&;^%{}x914&a_E*o3qfz&i`z zeFgA;7QjC$fEPhPC$lG50AF1IPZhv_3^>Mt`_Gf$(E|J@3gG`JfM4MHS<0LSKe2ra zQUTZPzQ!0=0S}wV@W-YZKgm%VB+b-|YwarZwBr&XbO zJudZgddkMGr}g}2?0SxRQgT0cUZG#;Jiv9!VE3{CAuegHLUGV{K+;Nt5g23O71+;m z{PN;g84LT{x|lfP6p(ZEjs+xYh+egbyZ-`|CoL_+MOrVMIs(hFjW7~VHwbn))PK(1 zm(pYKnJEVBT8{z8c?{067#O?b%Sl;qU&<;%2}WbBKI_Y6(!yHe9&m$diB<>-JuA{- ziGIuiheB;A^Z*J~=|VxxDL}rq`2iKPy*70keB06fQ73+j`Qd*NRhtA)6GTR5N3D-^6mqgN@K zAc$Hi#QT`!ZxzbbZ$6L7i4>Om|!5{4GTt;bf;s!!!W z>?;JdUtf)db<;+Src8%0mJ+%Qhf#OW@rvYl$#g7RbkjoG6x{|esAU-~c?SX_=1XQO zC>RBAVekzpGw2NY-%tNhHyiy$)6r+M`H+KvWbe-RpKuS%f{j+9?*)Cwg4#?BMO^SK z&6eVQk~C*4evQ2h*_|J~rHR(=Xrk%sK%sgooX8?V)gmI&^sS^>bJi@=YL73c&f`mI zZH<)4IpzGmMy!iVYGqTM+UsFVbp-9>JZ2^4~-Q*FiW-V7uevj66Mo2kRT6qk#Vj^l((Ni-xYLM&~CTRNfd_Ldqp52E5Fx`Jw%Jg_Bnv>~SDSAMr zmqT6#tV9op^d%@l+a&s?k}Z7`H7w0Kv)GT$ZK9>yL|VH`)LM6w zMy<9Sj#2qCtsZu;^e`Nu!y;98lV!A&ZR1|xct!u|%|#*qkxipg{*Vm22syM%^dH@P zTJaxB?+R)qp!1}Ns`D=dX~`~yeh}1@-LMTGiCQ2_f>g9L~JFWqt z7inO(vD;Ggkd)thss;k{UDGLSe?))oD3{=QgWXH@kb%<@Byry^@C(kPj^V9u>>A4c z*fqQLK`t>_<3G~mrO-}78ZRk7CU2;H6K*ASx{KK z*=CzM6`mrfZ`4k&&F}Zeg|hTM{WxZZ%Gca8IG!)#iSC}g1-FNF_?YE|Ln%c+^5ufQ z6TWj&|G(V>9|D6O-FtF&yZhsuW1j-|qnF`kt_sBpO$#20uEyFN7pmZ_{-Xbwdte6$ zJcFt0JJ+9Ee}|;a4rFWRhoWDcX>@x^F15QWU)X3@U1yry*Owe!Le-xUIJP*aTqiM=n_WOC!|JwR;DSATD7Mu}5^sVy~MVHXDt~WrBk2>Hh zKu^f|!TcaRZ51p2H{CyMhW%FHPDo$JVpxpT+9PS;ixka4mP7S`eEosyy5$pgw2U3h z40+cK!Vw9;`G6-=nO?vn0U}Tc=pf`jq+E+l%2xap0sz%)*59xny;-Erro3aGIbF)^cS`w@#Tpd7p#S{lBFTSg)4$~Wi*jc0 ze3RzfA^LNhPs{#`X*f(36!g+2TCt;1bMDmY2dHzPk=E}F(4(?eJ6+M7FG{rb#SrMl z)E?CB=I6U5*>zt$*6Hm?cvBlXJ7a3HBkE1YB5mI8NGe6h|C>*OW1VU*@j{P}?wt|P z&`U_Pt1H>ok%*`g#NPRiSpNcD7gcO}(WTV-XX8cTMfF&&BfrIi_2?`lmukE;g#v!`ATb=gbflL{!?13H7WjhkxJ!)l? zRHoFV8o3Yp4V`-57EvRl@;*4Qkm|iEp2#pBVp5sx!Z{SEuB;`MO1LH*zO(fXxp_&Y z4-&jPmY4|E5TL?;IE-q%BN3Z8TT8-WJk9ZNDix~nj=wNN4k^X zmsML8iS>4<7H%zhu%{!s?oOyJq&*t%O2tS=yeixsi*<($En%Z@gsTW_7i@`nsk(_n ztGy(K^==}k3il$M*ccwKl?4{8Ceaj>z+@zmLK7ycsR45$Nwq`m=z={@bg8k*CCw{t zO{tM6Y+>wyaCq>0=Bi19o1U{TUz;M1U=l`St|5pY0j~C$M zTPJK*{ZAUO{<70-kN)Uj;wy|dRDgew;aoqDBfb*E#_?6gkcbw%jp4jRaekcPzh``m z+ja2aar<)te6RriiV1g_^qgQgUsq-8PQwMEVdsVqU-t%vbN&{X!xpmO+YFctSnvjh z|B~U@ne*@uCfw}rGX?OG0{Ckt-0bh$4CnT9f6touW`9fBTW`+)DYJhr!%@u4Z!_T@ znB#HlDS+cG3LEM%^Y=2Gue$|F&~9=XJ;%8{3mI;;=QRueF+-fZZ{lAM7`Jl<9)4(C zKi|is1?TH-Vz_nP2)qh4>*42Q9mA1tUbn}DW9{PhY_#a%ufF?Ce6ya{P55+^p0fq; z&rNu#i9Z|OKV#!@Fh+z33`hIF1|M!`rG<}gOt397@y&JyEPRFWTMF>+w(!%8A2#u4 zz#m8eksVqb9!j{Qky-o6qkP1@Pwz;D=4P`TQPd zIJZYN%po6|_~!F?4H^fH^LgIRX1FzPms|K=U7CasDTuI;L+7Xa4tEaQ>&8r!4qm%#JE-!(=+Qn_^B79Vp2?KLESKlR*>Hh+zpA_dvba901#o3FzW!Q#!Z9^0 z)aK@c0m|2yLAdr{=0Y1{!8b+2nspynU*R`z3B; zKqOy!os0L#Nj@QQ!{_49O8gaxKT+)B>m~kg5+AZ$e6_^ik@$ugF8;8@_etFNEf+7B zIMqCc9K3rgck~$7=C1V%k0B?efn~V9L9>rvn(*5aS9RsohZQbOIwad_z}YXa_0#jH zi1y`BNuSC#{7)o*Y!dvlN$?`rW1@Dhn*^Ub30?u5#`)efbcCYDxmM!OPIvM3?#XyT z;(qC0CI8qflx@GN@ z4z_7Y;5BO7NzWwX8V+9`c*W-L*zX@-nl6#hiomN8-a)t4M{p~1$aEGG=Go`)6@eER zUlQnJxO$KArodj3>v4EpV1t9|8xD^L+8zF*z-E?0XAVEWQY!-MS@Qg~R@-+lK_^ug zc+~;+N`&vT(~E{2>-F7^XHTT{h}BjC0XuZO<$A^k?1lTB(EgtUoX{?-%|n{}11H^> zjaaV_vV{liWS7?t9k5>P!#pBsBa){|5(SV7i@tyoiOiT8Uqx z&iK}nj44iNpkc8!%iI#} zA)z7J&NfVWfQ3G?lEm0Zs$w6@b}Z%b6X>uXI6BOBGtc{W=oCwvo2|sov23>gRmieb z6C6MW#puJoqUm8WRly^yb$`oJcQolmQyom?TqIp0I_z=M%ZH6+Dc>SH+r5nY<}OP) zi@bKS(~rt5$8+8ZouTnTWodfm8fw!WXZp#k6Z+Ij{sj=s`cuc#yEMK0hO9fdrKyrV zG&&4&887Lv5;tRzDJ!*eQyT^J1zJ@Q3GVOjMEeDH z`Ij$N_Cmzwr)_>N*v?va<{}|^zQ{`K!OR@KnDSNbo(s}%M2sj8-DrO_`su(d5(tA%r^ej?G0w+k z+Nlay)i)O5zRy{96EGqRI+(eWg*IA=Ko(4ygF`Sou-%$Vnbk0sq?QM~RjoU%mkyv- z#ov2_W*2_{93~OY^v$XAYz$}46;-viTWx=ZI~3fA@TR~}gEe=FVJuFYX~0G}n_;!> zRiVwSc2OIvElD`3k_<~N`V4vDfWc~4w3$xrii8R1AV`|=K1evAHZQAfN_YwLgEt3l zUNQir%?F)?4~Zf(o0>spIbcM8M*QxhK3yte80a-pyOU)>wvDk8r`Ffz)S7PZ+4iL= z-wxogc_wS@K9v_|foV;qU$tB%ZK&_U$`Kh;Qw>Fk?xe+~&J&J}eZ2 z?UZ;=v|JNu9a-x*ywA2??`CPAhlMh+1uS{NXFX4u$<7@01V<2ACt2pOC*na`$uhpL z>)cw=49*zB6Mq`64u3!VIOBtlcXS^5@y+PV;mBOQ7ae}S>k|5|bohM%n~##)ybMVa z$=L7klMy~_^X+!>l4&Iv_4nMRKgNn-C8|+zI4E~$Zv1!I=th_J^MJC^eJr`Llx2>4 zSo&$x34LZIrUNJb%jy_r9pQtFf8;DYWG9b!?9q=So}(07RkSqB#t0Y|fl^uy=G%N* zZax?O1Y_@f?wJ|pNjuwx+!#GVYXlVbF=UI<;C{*+^Mx{_1xV=c%IRN%er4x#KPLTT zml+8SMh^=`#`g-%;QmPHsFh3!zles>YEC`heXpJEgrw|#S-RpRLdb0?)NLi+5sB=+ zfEX7{8sR4?L;2y~{xaON`Nso)P0nNdJ$P?8;u*8~%uUors3Ur||9;3s_(iDqmm?B^ zi!P|?Raa>G17s>U-Y(}`CF2(a-{4S?dkGnKPmXU}g6)!T*|iTiydQkSQe_s~q0O;7 z?Bp2u)=d6aeEZDK^m=U10mcu428!&JI@1sn=mb+}ux7S{OV$Fx@m-9Uz%KAjJmAGx z1l8uVtTfRvw05j0jj{>EbtQh5K3lx}t`hHm8l7U6q30;WxlH(u=3P2JZauqf)en#jt zkWTsim;h9gn~EZ#i_u;o%lIe6m}9Z1=&Z1Zqv!!NITi(7x|gM!E@4?jPflpWN=$=a zX@x_$?PaMFMBlKWNdHeHKVEbBk)hp!?K#M}xs_!zHWq}l{p(3aHYr+rQ?O!!*2;0i zntS!~napNS<=M4IWHYd9M3{pT*$5@F?AjS_K6*;9M9W6=9exf@M>ZO9vr&YPIXnQ9 z?4bw-OTe=Zun<{@9!%`##@s9qQo`iZS z2`wW6_#+&v3A|hl7_90>GCCVQT^!5+4dG z1Ok-Ly!{+CZ0-g&C_yI#nGNG)>QO^R3hwNG1f&$}buNEM|FXP)cZ=+S)oRrBFA_)A zU8st&*s#2FMFJ?N=%>&}GAECIEIjJE6CqE#SBD>h2gUYDt|K1-6+2V-95MfnavWkF zetc6nZkQZ*99wpT{DFw)Bsp%eblfpAHXKI|v-yYluq?-}NjdD}D8vpS%esythY9xy z&D}yr1b!(3-#iNsA?}BvLsF5@$=H2*v&bjrAeJQDh#mtUmZbw{?a)Chaia)x<&FKq z8z%BcqWfErsu#hiCuB0E`36r=BELI7 zIKQ2md62d<$62<^4xIo`iLakTcR8s=UzXfqCp`*2n7;2!aKz!C zD+Qe4n%Qzy4X+S66I(nuKY8q25ZUs(?GL7XXOK0`45iLYDND9{S!h#q&<@}FGk41 z__X8GjE@JND;r;|&tGJG;U-#@h2hcBVLZqP7m?v_g5ljDSPbqftDhjN|F*JvV4T&3 z^yK!w7#wM^J`?t)Xv#ELvzBDM6qOmjxSkE$n`HYQvi&c|+5R=yzCk2c_j&57Jzog_ z(ep*6%`eLR-mqAaOU3+<9IQ543EfRSIVQKMC)iEKdO+<5I&L|ofa(*#lxcD)gP6baboJ4EMQw1Sn2$P$|`xsf7aL>6-KARai}CloB29YkvcroLpF z0kM0hbc|7)K`!Ha?NC?j4%JsK*tEX#tEC%I*rwufNQP6eec&xTV7U=7kdXNmGXuGmj7&#KicEKV&U8Xh>n3NnURodujMgdk32K?Zy9=xBrgpS6 z)-=VN8lSv3*3#TmUDp^}U8ta!H`FFQ z8z!f=UHjto>FZva_OjPJ3ypV8dKIuu9Jh<(4sq-d$8K>Pr!*Vlzp>KXFIE!s`4Dos zBIiRtj11;L!x)m+=DoN`nr$BQX#uv%Y{i;vEQT@_`YlXZAB)% zlk$6t?QpYb8!=R;fFO@f zFPCo`y#(J(8uxfJU5QwtRS-*~?Ii8aq48)udREv&Fh~o67X*5D&Pr~sxJ*wcva50n zn%6VM7pp+QFaqf5V^ds;gZjnr|IVHZ(C*c+C;bGePx93X?fIHOPeXPx;|M+7p03Kx zc@y{0hAJrPmp74niv2Gaxdxk^^tczLZKg?PEv_^JIHkQJSG+XU{C(8a0w4rR z-Go&<+ci?L-_2^pUbmsjq^HeHdtaLRvd9)b;y)2m7PSst?l1buPv`$$vV?9hm!}%{ z1pjp=_X!m(LMU_JX3oYK#(R{8woRDg-7BVHF$P4776xB-6mtG#kH4qAgDk62r}96qU>EG4Xo*n|sEj{hVJTi5rM_0o`G)!qGL2TBV69S0;%d z*_R>-nilhyznY_JlwbY%H=!GS{_P@2-1+|i_rB8k(?0bV@~aSB=JJ%$ToaEruB%?P zx~$eHi^ZeynkRAo^Ja0btBKbbWlzRpMp?XmU0ey*u4<}ouKD4rr~;y^)=D5+|AYFK z_0gJmJpj>i?W$Eqb#>#)czsiK?dmnv4fQqgHPLz?b&a((aWoREk1FBDm5uT0XwAyH z>eZ9LWsgmEBRo+zG4#_IH)7Og#XW``M?+04Ufo>Z9IKBTb?R2EvAM2V)~Z+6-CeP+ z!l=F+{Q89bPY6yj*0Qj&TW-2WOMR^vshWI29W50i;ql1$TA@6;RQg8Q%2o0DvhOT? z^sZREruNS!vRd9b)$1m@?^+f2%4%0NH`lL>8)fxRRX0Ryn(K|SXnj+SOBeStcgIT` zITQ+YTBR={AgJ7?;dH6+`5I307hLh|H#MA=JSD$a!*A5^XEgjK4d1BYvo!oKH8@)y_E$*X=w_<_qeVhNk3i&~V+(4`{eP-&?PTGD@L+zOUiBJ=bfvKCe4``F8a7 zw`;gAUqoAdltR1B({Nq>=NhiJzfr?=`PuTTDr#T1^Vc<;Osnj6kA~}Zwl$ngsN^5f zaNW+&Yq&nnF%8$pxsaB06dI>)=ReeNT|S}VIzMO1Pr#@hz29dvTyN)}HC*TICJoo+ zhc#U9_bK_6TA`g28cvi^c6&j?bvys9h7)C!{6A{AZs%PZuFv<88=#Cr2sZ{Qj zl)U;Hm3~E~qHy&!>U#McuJGK~sIonUtFKYLGOsE;_Z4FSuD()zRpwPCuf9^AI~^lccA`Y&{Z(!Wy|#x==OQD-Lg3w`iC*?+tAysPEfN?p^L5`LlW2)~64i_%ok xuknCfbsX;vs_29CB)L2-UOQh(AWycoB~^Y`2>ll5{1RVgOrKS zXHOpdA3QeLL-nHl8@zZBszE3fG0xk(*^Fa*>A>#$-Z$@iZ}!dGM_0XT8OySPmIar< zQjTW7XU2}3Ko=$=W@yElTvW+#T zwmrDv%=8D&o#cD@`d0Bhrc8h{9jkN1Pg(U0ITl!Jg{f@rC0%A&^5;~bv@zi;`BJ8p z&sFm!o=nU6L?UF@Z{9xN6OscK-mN#fej*Fo{wOc&B20HC>7Y0= zC*>pildNTp$7@x5iTKd~k|RxJw8q5I&?zZ9XnI{rm!p1TFHguvO>U9)&q|9S=A?7d zQCMn}UJ=t0VD6*paSpJQ`6sCQvE0*_IqR<6M7`OAZ90E4Ls|mUUyytM|7`%D5BYwR z?i^BI>0PZhLbE>JiP<}hE6@kMLPuL>{rhsyyb}z6L;4D7QHOD=zPkS>#8X&mc1W+{ KP>+2w^?w0JPmOE< diff --git a/MPI/util.o b/MPI/util.o deleted file mode 100644 index 0ae3366f4fe19c1f4f84d7fba90e7b9314ae63db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7216 zcmcJT4{TG%9mk&&x0p8MxhQl&3yWDpmyTi5n6hpLnzx(*TcVvs>=^~x3SYSyfY!Y<*MwL&L&)wKa(IzYr9+(p~ zCA6UzCbJru+!hN(`DCFO{_>?_u%t~+5Q;#zv5H1!vWe*@*!_fRsAAzh)_N}cD-?Aq z-85GP-rTRcqs2j(7>--Rs%n`1QKmN;u8f$8cg~b|05FP`?xIh(z z2GEwO*2l)$1R&4X{)^yeKHUR4+Bwda$i(ct#`IH6uVMNJOdnzTcBW4-z2-qG@Uf;r z=VjKEWOobbOJV);wXZFp?|O+ivMT$t*M*IE=~yg<5{7XcWSUgz_HgG9-1+VomI57LhM|LrSPOZbh%P4x8I84zKUIX zRBv6dhhipsY`oYW*vax;~< za%efRBvu~98bPf5A!dn_hm2Ldc=h+15-SfGoxL{9T)mBnlY3n2dJ-#ly6StNYK^P8 z2dY-NW0{t^`o&{!LEzLzrO<7I*!d2W9bpnD@=}S17Gmtr5JrL&dEOvd zhs4gGfFgy5aD`USN}+!*l5Sm+if>C0Rcoh28dX!9MPo_Y5&5nTO0JSVdp0gQ$r}2^ zwMhu8j~x(J7krX2uZiPMHosv`VL&D>O^B1)J*v5#D|?pgIGO-k}GMf z7ptQny2?^mIjoz4Xo*SLs480E0Nj$S zaXbJJw9|44I{*})82YDlmhAYWFjo@jj6bB+l=vMISf??935ww`Ficgap_arXZ%V>K ztd5D*@1KSsryY3vT~p#i`l^1Yez-4A?Uxzz>iT)D;NM82;8umj(h0p=Tl>nXzbHO>ow z_IRoC8=$yyF*5>;{}9+d3ydFE?nCjX@!P=nJ(+(&)g{XJiv#c7lkacA&gJ-i0&bA+ zY2^FN?kMsdr*?K8$r9=J~^XXCR7_n~{j-K>JTeuzLF7M(y{wdgsh1HF;l z3Xt16pWLlLZgo6EBmgDm(EVG8P>$}`p}Y{?KL&L^x;sEAfbOp#vh_J+>nXCy;Q?gF z<{`Tqk)3086qZ=5hNE8AkGQP>WZwqd0hbNHwK(N6GW&gmUe#&eanN1!_(1J{uodIT3J|nX^p#R1I&7e&g4KR5Ed?eH!B-D<9oeVr5Igr}F znDZZK%-sh^39QlaI1URA5?CX>$xOgG5WrIq`ad84{FL8m;P)`{JC6MB&hh&V@H`*C z0b#HkQH1v(!W($5=640~dj$FIqWrD^ev{Q@{2oPq4{(0R`Hx2$2Ok6y2hD13>p8de zl-s$G$#FY8K?z+?2+f}lcM*P{0cr`PG`Vl|#kXg!Zu+b_7{_!3?2&XYJG6QB2+w(Y zeow7b*+_1C#rAZa-La+Kw94OXl3QB6LDc1qaPKp<2H`cdsjao$ofE!hg8SCF`v-(I z&0e3U!!P?=_I?xoTLMicp^O;E_dnf1W62`Jaa;{Z8{of!l<0-OTk5gC)Tqa|)ROy+ z$BOh;IML9to74~qdtiST7Fgo%pbPsC=IxJu{gQWv+{DVLCglXi)01p<<>PgOx4et-4dFR&liT~f4v#;m zD#H5D>E=4Y8wkL5wbRUd5Lf*`o9s0=Y}>geD8pjs+n>3Ob|1`FPxlY%%y<;N2f(Oz zpW7Gkw0dEUy?zf3AzIAU@DD(6E(ClRxx;wCzdoUkh~xT~pp1#P&#?Air83d+OAT*t zQRxq<^gpO{e5rqd-ScCG_EF!!^p9AMx&i*V{ktk1+tY_#LAb=w!tLM@#5AVSdHc24 z5E5_C{n@V3xj)Y`9Y4q|COzpzR<&OW68Cd4TWGEQM>IOOZ`0@wHpcHYx}WLM0{TD! zeXM}KSx*geKe_!~1@vbN=!XmFeHz`x{LgB1K5h;9eOj|q6)$rDqU^oPbyvA{x2H)CT1t0Y5yA22UNP+{+LQvpVK1tSrqpR z=gi~Hpwh8DKc~x8I({+a?Z2$j)#vn-N>`u90gZkXY++Kc5hNZzTwjHUR;Ba(8Z4lD z*rDQfcs$4j^l$b^Ob99#R4oWm7^BILI-k-O_A3TiF z&)WYH=!@gC^8zKB`1m%q!CdFhhWsAEgZ;Jc8cJ!46Ew?RO}P>+;14ABuhr;pvi>%W z&gYMPFcrbT>`YUEUB_7ec_Q5Keq7%M{ZZ2f0`Jd(%iHt*Jm1awYv+H5jbF|iG6Re! z++5zh!^$$Y&_B=^)|eAKP|w#SXA}yrAe|wdW(NlQVLLuPk3WBb{tc|bn`i_Q_D5D} G`~MFm!^k!O diff --git a/Outputs/Multi_GPU.gpu b/Outputs/Multi_GPU.gpu new file mode 100644 index 0000000..2910fc5 --- /dev/null +++ b/Outputs/Multi_GPU.gpu @@ -0,0 +1 @@ +Single GPU CUDA Version(N=10000, M=10000): t= 4.058859 ms diff --git a/Outputs/Single_GPU.gpu b/Outputs/Single_GPU.gpu deleted file mode 100644 index 2f9c371..0000000 --- a/Outputs/Single_GPU.gpu +++ /dev/null @@ -1,2 +0,0 @@ -Single GPU CUDA Version(N=1000, M=1000): t= 0.092299 ms -Single GPU CUDA Version(N=10000, M=10000): t= 4.060280 ms -- GitLab