From f93b275e6074ba4bbad229204ef3036ddf385150 Mon Sep 17 00:00:00 2001 From: ranchuan Date: Wed, 22 Nov 2023 18:02:53 +0800 Subject: [PATCH] =?UTF-8?q?huffman=E6=95=B0=E6=8D=AE=E5=8E=8B=E7=BC=A9?= =?UTF-8?q?=E7=AE=97=E6=B3=95=E9=AA=8C=E8=AF=81=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/c_cpp_properties.json | 23 ++ .vscode/settings.json | 5 + Makefile | 15 ++ ReadMe.txt | 10 + bytearray.c | 219 +++++++++++++++ bytearray.h | 47 ++++ coder_lib.c | 203 ++++++++++++++ coder_lib.h | 36 +++ crc.c | 109 ++++++++ crc.h | 28 ++ for_hello.c | 15 ++ hello.c | 46 ++++ hello.exe | Bin 0 -> 249000 bytes huffman.c | 424 ++++++++++++++++++++++++++++++ huffman.h | 19 ++ mystring.c | 74 ++++++ mystring.h | 29 ++ sdl/.vscode/c_cpp_properties.json | 23 ++ sdl/.vscode/settings.json | 5 + sdl/hello_sdl.c | 62 +++++ 20 files changed, 1392 insertions(+) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/settings.json create mode 100644 Makefile create mode 100644 ReadMe.txt create mode 100644 bytearray.c create mode 100644 bytearray.h create mode 100644 coder_lib.c create mode 100644 coder_lib.h create mode 100644 crc.c create mode 100644 crc.h create mode 100644 for_hello.c create mode 100644 hello.c create mode 100644 hello.exe create mode 100644 huffman.c create mode 100644 huffman.h create mode 100644 mystring.c create mode 100644 mystring.h create mode 100644 sdl/.vscode/c_cpp_properties.json create mode 100644 sdl/.vscode/settings.json create mode 100644 sdl/hello_sdl.c diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..f3679c6 --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,23 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${workspaceFolder}/**", + "C:/MinGW/include/" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE", + "__WIN32__", + "DLL_EXPORT" + ], + "cStandard": "c17", + "cppStandard": "gnu++17", + "intelliSenseMode": "windows-gcc-x64", + "compilerPath": "C:/MinGW/bin/gcc.exe" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..018b3b0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "coder_lib.h": "c" + } +} \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1a1dd1f --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ + + +CC = gcc + + +SRCS = $(wildcard *.c) + + +STR = $(subst from,to,from your heart) + +all: + $(CC) $(SRCS) -o hello + +clean: + rm -rf *.exe diff --git a/ReadMe.txt b/ReadMe.txt new file mode 100644 index 0000000..af09aaa --- /dev/null +++ b/ReadMe.txt @@ -0,0 +1,10 @@ + + + + +使用gcc编译一个文件 +gcc hello.c -o hello + + +2023.11.22 + huffman数据压缩算法验证成功 diff --git a/bytearray.c b/bytearray.c new file mode 100644 index 0000000..30c1d22 --- /dev/null +++ b/bytearray.c @@ -0,0 +1,219 @@ +#include "bytearray.h" +#include "stdlib.h" +#include "string.h" +#include "stdio.h" +// #include "board.h" +// #include "mystdlib.h" +// #include "debug.h" +// #include "rtthread.h" + + + +#define ARR_MAX_PRINT_LEN 200 + +#define ARRAY_APPEND_SKIP 2048 + +#define rt_mutex_t void * + +// 使用时保证不要在不同线程同时修改,可以不用保护以提高速度 +#define rt_mutex_create(...) 0 +#define rt_mutex_delete(...) +#define rt_mutex_take(...) +#define rt_mutex_release(...) + + + + + +struct _array_def{ + int32_t all; + int32_t used; + rt_mutex_t mutex; + uint8_t data[0]; +}; + + + + + +array_def *arr_creat(void) +{ + array_def *a; + static uint16_t count=0; + char s1[16]={0}; + sprintf(s1,"arr_mut#%d",count); + int size=0; + size+=sizeof(array_def); + size+=ARRAY_APPEND_SKIP; + a=malloc(size); + param_check(a); + a->all=ARRAY_APPEND_SKIP; + a->used=0; + a->mutex=rt_mutex_create(s1,RT_IPC_FLAG_FIFO); + count++; + return a; +} + + + +static array_def *arr_expend(array_def *a) +{ + array_def *r; + int size=0; + int cpysize=0; + size+=sizeof(array_def); + size+=a->all+ARRAY_APPEND_SKIP; + r=malloc(size); + param_check(r); + cpysize=sizeof(array_def)+a->used; + memcpy(r,a,cpysize); + r->all+=ARRAY_APPEND_SKIP; + free(a); + return r; +} + + + + +array_def *_arr_append(array_def **a,uint8_t d) +{ + param_check(a); + param_check(*a); + array_def *r=*a; + rt_mutex_take(r->mutex,RT_WAITING_FOREVER); + if((*a)->used>=(*a)->all) + { + r=arr_expend(*a); + } + r->data[r->used]=d; + r->used++; + rt_mutex_release(r->mutex); + *a=r; + return r; +} + + +uint8_t arr_get(array_def *a,int index) +{ + uint8_t ret=0; + param_check(a); + rt_mutex_take(a->mutex,RT_WAITING_FOREVER); + if(index<0) index=a->used+index; + if((index>=0&&indexused)==0) ret=0; + else ret=a->data[index]; + rt_mutex_release(a->mutex); + return ret; +} + + +void arr_reset(array_def *a,uint8_t d,int index) +{ + param_check(a); + rt_mutex_take(a->mutex,RT_WAITING_FOREVER); + if(index<0) index=a->used+index; + if((index>=0&&indexused)==0){} + else a->data[index]=d; + rt_mutex_release(a->mutex); +} + + +uint8_t *arr_data(array_def *a) +{ + param_check(a); + return a->data; +} + + +int arr_length(array_def *a) +{ + param_check(a); + return a->used; +} + + +// 截取数组 +array_def *arr_mid(array_def *a,int start,int len) +{ + param_check(a); + array_def *r; + r=arr_creat(); + if(start<0) start=a->used+start; + if((start>=0&&startused)==0) + { + return r; + } + if(start+len>a->used) + { + len=a->used-start; + } + for(int i=0;idata[i+start]); + } + //return tappend(r,0); + return r; +} + +// 移除一些数据,返回实际移除的数据长度 +int arr_remove(array_def *a,int start,int len) +{ + param_check(a); + if(start<0) start=a->used+start; + if((start>=0&&startused)==0) + { + return 0; + } + if(start+len>a->used) + { + len=a->used-start; + } + int move_len=a->used-(start+len); + memcpy(&a->data[start],&a->data[start+len],move_len); + a->used-=len; + return len; +} + +// 输出打印字符串 +char *arr_string(array_def *a) +{ + param_check(a); + array_def *d=arr_creat(); + param_check(d); + // DBG_LOG("d=%08x,a=%08x",d,a); + // DBG_LOG("%s:length(a)==%d.",__func__,arr_length(a)); + int len=0; + char s[20]; + int index=0; + arr_append(d,'['); + for(int i=0;i=ARR_MAX_PRINT_LEN){ + // 超过20字节的 只打印前20字节 + sprintf(s,"...(%d)",arr_length(a)); + len=strlen(s); + arr_appends(d,s,len); + break; + } + } + arr_append(d,']'); + len=arr_length(d); + char *ptr=malloc(len+1); + param_check(ptr); + memcpy(ptr,arr_data(d),len); + arr_delete(d); + ptr[len]=0; + return ptr; +} + + + + + + diff --git a/bytearray.h b/bytearray.h new file mode 100644 index 0000000..f8e0c8c --- /dev/null +++ b/bytearray.h @@ -0,0 +1,47 @@ +#ifndef bytearray_h__ +#define bytearray_h__ + +#include "stdint.h" + +struct _array_def; +typedef struct _array_def array_def; + + + +array_def *arr_creat(void); +uint8_t arr_get(array_def *a,int index); +void arr_reset(array_def *a,uint8_t d,int index); +array_def *arr_mid(array_def *a,int start,int len); +uint8_t *arr_data(array_def *a); +int arr_length(array_def *a); +int arr_remove(array_def *a,int start,int len); +char *arr_string(array_def *a); + + +#define arr_delete(a) {free(a);a=0;} +#define arr_append(a,d) _arr_append(&a,d) +#define arr_appends(a,d,len) for(int i=0;i年月日(hex) +年(y),月(m),日(d) +time=((((y[0]-'0')*10)+(y[1]-'0'))<<9)|\ + ((((m[0]-'0')*10)+(m[1]-'0'))<<5)|\ + (((d[0]-'0')*10)+(d[1]-'0')) + +特征码盒号序号(ascii)->特征码盒号序号(hex) +特征码(c),盒号(b),序号(i) +code=c*10000+((b[0]-'0')*100+(b[1]-'0')*10+(b[2]-'0'))*100+\ + ((i[1]-'0')*10+(i[2]-'0')) + + +*/ + + + + + +// 根据管壳码和年份信息生成uid的年份信息 +static int coder_calc_year(const char *year,const char shell_year,char *uid_year) +{ + int y=0; + for(int i=0;i<4;i++) + { + y*=10;y+=year[i]-'0'; + } + // year是实时数据,鉴于12月31生产的雷管,year可能不同 + // 此时year-1来保证与uid码上的相同 + if(year[3]!=shell_year) + y--; + uid_year[0]=y%100/10+'0'; + uid_year[1]=y%10+'0'; + if(uid_year[1]==shell_year) + return 0; + else + return -1; +} + + + +// 管壳码转uid码 +int coder_shell_to_uid(const char *year,const char *shell_code,char *uid_code) +{ + int ret=0; + memset(uid_code,0,16); + // 添加芯片企业代号(2byte) + memcpy(&uid_code[0],"AD",2); + // 添加年份(2y=byte) + ret=coder_calc_year(year,shell_code[2],&uid_code[2]); + // 添加雷管厂代号(2byte) + memcpy(&uid_code[4],&shell_code[0],2); + // 添加月日特征码流水号 + memcpy(&uid_code[6], &shell_code[3],10); + + return ret; +} + + + +// 转换hex字符串为一个byte +static int coder_strhex_to_byte(const char *str_hex) +{ + char buff[3]={0}; + buff[0]=str_hex[0]; + buff[1]=str_hex[1]; + return str_ahextoi(buff); +} +// 转换int字符串为一个整形 +static int coder_strint_to_byte(const char *str_int,int len) +{ + char buff[10]={0}; + if(len>10) return 0; + memcpy(buff,str_int,len); + return str_atoi(buff); +} + +// uid码转存储码 +int coder_uid_to_save(const char *uid_code,uint8_t *save_code) +{ + uint16_t ymd=0; + uint32_t feature=0; + save_code[0]=coder_strhex_to_byte(&uid_code[0]); + save_code[1]=coder_strhex_to_byte(&uid_code[4]); + ymd=coder_strint_to_byte(&uid_code[2],2)<<9; + ymd|=coder_strint_to_byte(&uid_code[6],2)<<5; + ymd|=coder_strint_to_byte(&uid_code[8],2); + save_code[2]=ymd>>8; + save_code[3]=ymd&0xff; + feature=uid_code[10]*100000; + feature+=coder_strint_to_byte(&uid_code[11],3)*100; + feature+=coder_strint_to_byte(&uid_code[14],2); + save_code[4]=feature>>16; + save_code[5]=feature>>8; + save_code[6]=feature&0xff; + save_code[7]=crc_crc8(save_code,7); + return 0; +} + +// 转换byte为hex字符串 +static int coder_byte_to_strhex(const uint8_t byte,char *str_hex) +{ + char buff[10]={0}; + sprintf(buff,"%02X",byte); + str_hex[0]=buff[0]; + str_hex[1]=buff[1]; + return 0; +} +// 转换int为int字符串 +static int coder_int_to_strint(const int n,char *str_int,int len) +{ + char buff[10]={0}; + sprintf(buff,"%05d",n); + memcpy(str_int,buff+(strlen(buff)-len),len); + return 0; +} + +// 存储码转uid +int coder_save_to_uid(const uint8_t *save_code,char *uid_code) +{ + uint16_t ymd=0; + uint32_t feature=0; + int ret=0; + if(save_code[7]!=crc_crc8(save_code,7)) + { + return -1; + } + ret|=coder_byte_to_strhex(save_code[0],&uid_code[0]); + ret|=coder_byte_to_strhex(save_code[1],&uid_code[4]); + ymd=(save_code[2]<<8)|save_code[3]; + feature=(save_code[4]<<16)|(save_code[5]<<8)|(save_code[6]); + ret|=coder_int_to_strint(ymd>>9,&uid_code[2],2); + ret|=coder_int_to_strint((ymd>>5)&0x0f,&uid_code[6],2); + ret|=coder_int_to_strint((ymd)&0x1f,&uid_code[8],2); + uid_code[10]=feature/100000; + ret|=coder_int_to_strint(feature%100000/100,&uid_code[11],3); + ret|=coder_int_to_strint(feature%100,&uid_code[14],2); + return ret; +} + + + +// uid码转管壳码 +int coder_uid_to_shell(const char *uid_code,char *shell_code) +{ + memset(shell_code,0,13); + // 添加雷管厂代号 + memcpy(&shell_code[0],&uid_code[4],2); + // 添加生产年份 + memcpy(&shell_code[2],&uid_code[3],1); + // 添加月日特征码流水号 + memcpy(&shell_code[3],&uid_code[6],10); + + return 0; +} + + + + + diff --git a/coder_lib.h b/coder_lib.h new file mode 100644 index 0000000..4dcabb5 --- /dev/null +++ b/coder_lib.h @@ -0,0 +1,36 @@ +#ifndef coder_lib_h__ +#define coder_lib_h__ + + +#include "stdint.h" + + + + + + + +// 管壳码转uid码 +int coder_shell_to_uid(const char *year,const char *shell_code,char *uid_code); + +// uid码转存储码 +int coder_uid_to_save(const char *uid_code,uint8_t *save_code); + +// 存储码转uid +int coder_save_to_uid(const uint8_t *save_code,char *uid_code); + +// uid码转管壳码 +int coder_uid_to_shell(const char *uid_code,char *shell_code); + + + + + + + + + + + +#endif + diff --git a/crc.c b/crc.c new file mode 100644 index 0000000..366a85b --- /dev/null +++ b/crc.c @@ -0,0 +1,109 @@ +#include "crc.h" + + + + + + + +uint8_t crc_crc8(const uint8_t *data,int num) +{ + uint8_t crc = 0; + uint16_t j,i; + for (j = 0; j < num; j++) + { + crc ^= *(data+j); + for ( i = 0; i < 8; i++) + { + if ((crc & 0x01) != 0) + { + crc >>= 1; + crc ^= 0x8c; + } + else + { + crc >>= 1; + } + } + } + return crc; +} + + + + + +void crc_crc16(const uint8_t *data, int len,uint8_t *lb,uint8_t *hb) +{ + if (len > 0) + { + uint16_t crc = 0xFFFF; + int i = 0; + for (; i < len; i++) + { + crc = (uint16_t)(crc ^ (data[i])); + for (int j = 0; j < 8; j++) + { + crc = (crc & 1) != 0 ? (uint16_t)((crc >> 1) ^ 0xA001) : (uint16_t)(crc >> 1); + } + } + uint8_t hi = (uint8_t)((crc & 0xFF00) >> 8); //高位置 + uint8_t lo = (uint8_t)(crc & 0x00FF); //低位置 + *lb=lo;*hb=hi; + } +} + + + +uint32_t crc_crc32(const uint8_t *data,int size) +{ + uint32_t temp,crc=0xffffffff; + int i=0,j=0; + if((size%4)!=0) + { + return 0; + } + while(ioHAaux9}lX1D$^OT!P4!bKs^EiIlU;f0?03q8Ior+aQ+G`D5qs8J)T z9nejFmuv35V_erf|BV*c7YbdcmAG67U0-sIEGQV~>ZDK?|H@ph{tBMu{DU;N{Fe6u zn{N3mmJj*qr!~V|t{YD-qFu8o>QTu~UEXaV*@t90DR#MoF4uX(?N{}?%jJ3&c)1^s z+jU>={{-fP{LA}kfR_^&+vQXnyU2w9u3zvk@25e^ zt+305gr+|JNjZU=_tPNdZdtlik{%t&uYP$u@uyAbn{UHYygo=7ftOW2r%HpAn|AdK z`JAWHXtcDqOMT>iHAuP80)+Qq|QjSJU^{yq^Y_3%uv6l&ZNr z7E`X3=SQDW?)(c>xy2qH{ggY4=M6mbei{Vc1$8RrCjz1z+mIqFKcn0vo4#s+48lW%l^Z$SSe}Ds$(Z;rs0{Brn=&bv`N_G~!4}2>^RGmUWU%bsyb^Wm}sa#81 zYbX4g1ZkDj4JL|Td>%-N%9qq*)NUSems$Ln`YisXJWOA;hw?w8DZY4#)p9SMp2kd~ zF^UfT8hyq!*Ihf^Xg?s{dc!C|*%eGsEok6Y%$_Rk98P;^+T_ ziuLcrheZb5TC|vg@nN(xx`4Od;&-33I~*tbW0)R$M~haFNn@;^$-@PtP?^8JYa^+! zIMZj{e70na+70MTQ4NA|iyUsi%QB3*86U3uG4&#Jd|bE_UX=x#fDmah4>rr&B+?WTOC(u;LX zZYj-ou@rv~L?s~d#fKx$&?)OjK=dJB^(?m*gKJ1_AKkpsJYkF!O0>8eo8Jl~-zp56 zd#xH2Dj1*eK5pJHdt>jcnp(dnOJ5)!e9dLO9+5^ab{ppV)=}OA=0U?OdLs~@@fuZ< zMr4!QdPT~3Ukg8XS;F__0izeB0&mJgfVIYbiT8N%Z+|M7idT~qA7u)@xGQK18$(j6 z^JGcCo>#N@I)0-N(U*Y|uhivhrxr~J%=XQqN;lqg^EdQa`Zv%t^g(;VS3Ns*is-Pd zAMx{l1hOZ^oNOt_K1M_v#`0}F0;x`7@u$cwUimZ1BH6V(toh{j4illH6R`u-!hqHk zruOmH88nlb%J^$8SL#|mTRW}G1y=DdpZN!L0eij;`)VG&!<2asr%tMk`exGFa}O3X z=(8MuCG^-1%G!7gv|>}@AhP}}rt%@tWj%C4zV!$&4HW-0+weQ{eo)m?YNcLKuA;%U zDKAf6uQANOLPMQlHkKRaHB~{=kD)f!7zw|}F#QLO_%;0VR|U*I!|XQVjpf!6I!4of zEbc!Bk#*nL|J zo$nI$Z9FJt+S{e9kl;Uvc9Est8j7Tryc)d?Bq~Jbg9z(rHH**YO=U(lH{@tj&2#Ye z`o)C~qNQ+o+*K^_-FB-K_QFBzE{ zT(Rm!Cu<0!6ftIBhrdcti;FM;Yrn>uin4DmZ}-YExe`gM9+o*J2OtRS1IB~ey2h%G zU;$A4l9<3r@MdPAP(&yJe7>Zhy0IKt_xLle$lX=0J4Xl_s=NJF^1VW#<=gA8x_kI~ zQQ>s)dVbUIg@;M4^hwfq)Iuom6_j`QGuk?T1}x_6O-GteR7X9xV3fP0`8{^kh#r+;Ps;^k&?Orv? zc|F@-1p-H_(qD>SgGp4m`;=PPY|++<>K_y(ap89&{$p;m{UX0-M3ZPux#8|sG7csh)OXO`6)?9- zb6&e!>AWb-*?x~W27ftP2dA7yO~i zL$2u}iqqD)?E1TgXT=zgp=KAjB&I4*mlIK7#Cs{~!b$R0O0?iTDRFToBcQ$m<`_?)y~w zDPhky9KxQKw#NOc1%*P6|3KV-0H0?&%Nbxt&HG6+ns;XlZlyKKZTtHJrm9*kK3nf-#X+2MSj`5AEU?3K8}se^sa`ay!;`%`v07+nC=q zHkQ81NLrrcK(V zQJw>1mlH4rD1uH|Uu_q~w+f|Op>#(rABmdhuAJX~2S?i6pH?=O$* zg0lufWqo})^4Tat679Y5E+rh2C1RmV{oHr#jLV!1jJE)!RiG~r#eWK$?NgRiZndLT za8uEgP@P1T_Jpg|v@0Z<3LR>P=_;NSd>`Ja`pOf1Rco*R6Q%&@4X9KOrVjrn@+Qqz zU!S7Cp9qK~(YX_eT-h>#RPHM|vSPh9h9j=T}J@aA_tdaoPL zCJ}-t(#Va4jwbvLVcym?*PY86okRLvvPj2;Cav-urXn<1QU-As=Wq`roNzu8Glzq# zX5(-N&wLPe6e_(%ij(jNStlTU!8KJK$b5((wRHqWh{^VqcX!(Q*^L7u=Mb=~6s9UP z6;1IU?kLCtmuPZOnvO8(#_NV65a2#xN20RYfj$@LamwNQ90mE@a_J07*=f}FAxV{< zs3?)PInMA@ieyo%b`9eGOigk+7e^AqwRKfClf-jR!yG4V3XM>Po%#hqlN1vfuInNs zs6mysAeBuo#O z4%J)f4+j}LI^H;dW)3Os!%)nvfXNa0UAvBi2}6_`|6z}W;9QlyeiTNqk$=kfzQGJP z$>QRQv?s*1SGB76T6H`~8K>JVa_bO>iVZXklQI-99CWBZ21r)vJjeB}x$&6YIocsQ z&g>WgMI+upJh#&W*7-AJ9F<5zLhnewn`wa3zS}cx;mm#MLS7KdQ8gy=A8n1?eRTM; zmq=l(#VE;tOkN4^SO4m`xIJ8p^hJs8UN$?LjW>;0c* zBd{;qY9VBelGoN9R_pohN7KWzA9z#=!yBj+hk-uu?&s723REPgVdF}9j zK(jHWYd)}5hPMwp$~%!;b`UT~H9jAQOCYJjz+S%!#*jgzzfh)weoiwK^Haa!O@!Yp zK~Js)eNNbD$T*7Bt$C)D&9Y@Xm{nd%l&peHL;BDBT2-YIUen4Vhm!OcY2>;7W3jF~ zHQwA^=Ra{qvIwJ07w%{o*wI4SgK*^F*i|n96K-htT}N|-)t}Yctc(m9QibO5sBwk9 zA>6V?TQz_a~D%-ed2x@eMt8@>x+58VP4;YZ!d28mY5x3 zck$KgEorTV7ej65e~JJ0TdWEvY)c3u7Xlvr$+kSSbay~-vN7)C! z=?Y)n1$>g%Mc!8GWm~baZjxP&ygu@FL#IOMMF#$U>y&q;jj@@uAgfU|qDl`MiSMcQ z4-T_bArbD#_i}??)iFDaqMKO+FTI8}`ZRZAu{s5qU9(kF`S|D}Vnq@9fK zvBya{_#ab@(b7tKxm?;Vrn?~cAbNaIsx5h6=oUcL4xnv#{%mdv|4wO(Z%a!58xZZ% zE~oVODQ&A<`({y#;|4_kOZ|I?h-0Y!drs89$N@v5*#%DN#m;;}u(YR{;jY zA$tbtAX$tFQxB<92ShF>mSV_EuW4?|Hou-P@1|8PGWt8df*SPfG!kWhv2kIq?(GU! z!DkegKm&f0rBvcX)Xc#658&btT!fps?*`N;=UVu#=37mA8hPQR>WLG@=DoH8d|P!s zbcOVJSAxzSmhF@-mj#4A?TH3L8s*p=(z6+A^bcXWxs8xi=|a$fIYlYeG3D*!4JBUx zv6VklbVwwcKQ)>t{+d%|gd)S9W%#B|2E9m*475o?^#Qx%P{_tOHTzJdbd8EFILp4{$tFCfT$QNy^9N+? zC(&oQQC!Y!r@mg6$2KbIl3%c3u&=mCIOx>tO)Fc(VV6t4(Vi?}0#IPli9hPpMXHoifO~9_HMg=QB$jQ$jq|ZxeX;4?M4ru_LA5iZ&Pfs zYaYxp*epZcMe?~6BrjAD^BK+C@~CSy)iC(DqS;Xn6IUhnWGT~DCE`}v?;c?L2$4<` zyi_<4gETL38IiTs!c2;EeM3hmVxf+CQpJO~%4HSlYtBcNeAMQ0U~(70mHA0oC6?ck z;@(Y^kRB}sZ7sH^JY;@-NS7#)sff=(6L3Bhn#l}v%PsN5O6PtNv9)TJJ#A#yfq=)H z)@9K@%C~r5M)1mhV5S<(qn%k>S?GW|2~f&5h+37~n<-wZNp<^B4o7K)vj2@}m-5+% z=F5}mdwb43JwXDQd`EMTDMm1Q9PvexV#5vN%j{KRf~a96Izw? z&d)kHB&$D9q5j3DWj6(I_w;WFp7;K|chv=)fqg3x^^4VLeBmL5L)5&65^8GH>S=I` z1xgy_nyLg6X)a~o*;Kf$QnMwcwv?3GLmK2zEv$g9g6!0l(}ksuVDWb!b8Gh>h8oIH zTtIv5$$iz$EtqF7#LgV_pJWf!mkHFN9(spbqJWMj(aP<|X~jnMjXqU6U`6D4?hv;k zp{D{t^`(}$7B#IDXUu&pxv$XMcehecfkcm*wA%ib$#nQX7P8~6NdIsKOJ;J{KJmv4 zK|U^JJ>+8odnr(^t3kBXdW>4>lkh~2w}hm1Zz~=E#WrA%sfGf_c|Lo6#nHR$kmO4O zJbukTaMvud=QAcm6Tz5E}uq3vK>8bpTHLvINWRg@x*%bv?t%KFQ{3Nt9O6>750 zTzO(MRd3WsM6PNrRke<1#h~j+*D?LgjGSv#DI65*OAo`y=-Cu2a&XQD4k@(^aqd3m zTD^TJ^R)XyB73D~iUlH21L+M0CgpL(F_~_)eMer?o|i_8t>!P}iMK(8X>bPIbY~lD z;H}+bm@UfLSj-hkpyslg-xLU9v-gMu6fp7Vkns}iQs2DS;n%Vu?U~X{%n$^B2EQ#r z#j{6Lx9cq6e6;eVZ0+eHP*WU%$j2qXSIVrr`ph-^>%wuu=&U1@VW2(ql==3YbTIy; z^%uyt16_fb12Gy966|g{4)l__PSbi-QE7RWw(IOH1y!13%0M;i);G!$4(KlYyP|eC zd~O;t{iYl{@h8w~a#6wth!b1%e+0{9WzcC+>i4|odD~;n3OaQ?64N{Jk==dgr^HY1 zvtx}Kq2)%PcND59LIofy@e)b&e<-QPfuryDDXm@C_~D6JI+J}81+?A$VJ7rDm7neO zJx-^O6fTnZX&Q=}N5%{L@-ZqRIw9h0|1tU>mRvtXT~)Vbc6w~ZQe_s{Wz3`liX9!& zs8*6uL)`H_Rd#7lyiMw9)=rtUtLw7ef6%EUbHLx zIN#duP^1$k!yH;tGEbSs^3_#mW?#LlPf4~MQ+q4K*=Dh%Wv)ySH+!&b>xpHrL)Fqb z>Kg{jUUFjD3#6ijwEWMRVZ{n^ z3q(Snpf>4J)mODjCluLCl;-Rw`g^OeL2YR}OYM)!^cnHuHzYM7VXp)qm3{Kb=<-df z)@-u(QL%GR?Vzmu$tr0e0g}spdU&6l2-@XT$X+8r){`vdH9aHh^`752pXqPLCIV>px^)Nobh8 zudBCs8Q-E$sXGAHX=KLzfUqd1fAw91x+sZ4ZRBWS=+xNG&=|E6~NcXCffgc_?;mYv-|0++w$=X$icl|!oTC&qv%_q)rP7YwAz)`O+KxbjcyU| zFm26qG$)P#D$7kd5o9VPZg)iJlI z+>?CObu#^$sCj6)@lDJyh+n&YcCfwHm=+1OEChpH>3}aCHUL3qR(A zC;h-6-VO47@8Gw|cWNoZllD!;*3IwNL?y|c7FD}IaI#-47DZ~ zFrPKpLpoEn#V}`7&kV8?b#~AUR?m|?sWsNQcyWFG=i!m{c44V5?qjy_x-GGiEq87)7R`p?GpXlqYFA+ew9Nb$3)GtyO+ zm2WWaYV`ImXU9}iN&M=PfV;2JyIH&EThO6LlCov9M)$rP-Yxqs7o!S>*&{t*^lb_N zu^5P$)c1|#n}vp(Ky9%{ww*xJQo85(wPpJHIw_ebLzKlYF_&T_X0QX-3|3WTDlhtP zz6Bb(?27xUeTk;7$iAmTOl=&C?E5%;a-{eXsz^N0bmL9>Ec7`tzz91idw6G5Ptw;H zQE`0(zkC`q!i8sq1%r8cNx*#BFsGMiD*GN+yS~ZJ^p~%*-?E3UoRaqBPN_d?Z^Fjew#YdVBhr7++79E`J1qMa z*iU?nM{n^1)R7;fcC)Av{40)=6g2ydS_0pJ;j12q$Fz}s8Ps+3Lb*BW(9f9_3k`vt-(2N~M zZFev+d4%k(UCW@t*Kx4}Zs{%Y!uV1abf=dD-B!^3t`P^NM~nUqz}lJ({Ei$g3H>H= zv|Ni#f(-46EO4N=#%$=2mWN?H7+QVi#ZbHCNBHA-<=P*?+MU|kA0Z6(O~3bFY*gM8 zOtc(x{95rH6hIe!ahL2YX1ANnco-#(=HASUkzSN(Q_V$F3<|B>nVO~4z$XyHA(&+* zM_yi{#kLA;2ub}{Ha~K-L5oFcK`?%Cptd*Q{~Wfx7Md{^kzDQEBqpI5(ggSY|f$TgzavVHzdKBe`isfYpf zwS|5Ji#bAyMr2ZRi0pC!ViBaP9&A7y#9AEBYwt0zKz(P(D|HlSgVrG zzm$jA-N?*K0dsTaMdGc|jj^{v1a8wxV4VbJH!?)p6Mhv)!br#85&4`=-68I>!IgEC zHSyw7keQf~fGnpXQ5TNViQ_g_!3BF>3H#ftHPnZ zRs|AIzrue1+YYn-CpDC4HpPqoRTT+e8!ztQ4SNay0m+AW7s(SCv{4uizASRJUbtGN zhu_1`ES568#eN?0(_1{vdCOFu^q=?$SwFU9y)pe0oS`^N$|pv7DV3?zq{L)OWFsZ} zNqpVzwGS*^#eti#>UQ%cf;OaH`Irw$&c3LCBME1)Udz-gz7U}A1LWHfMGC!|L#0^Fju zKq9ocCS8Wz1kme%_oL94_4VR64D%IZu!ynf_dyH59lKTJG`R%Z}B9NF-Ugek8OVqJjPc+aq7q!9h zZlT*3pNc+q+5DagzmrQUSouXCw-3?B_|)pdY$Y3;)&F4pjMG$mw!y%QL<1U|r%i5j z@6Kw#=%BeZkN&J4r1W@OCkh8GuZt=iN8fhQ)GMLyio^_uzRSuQ&8?Wnl2Tvc)RLgL zYY7o$H_E#+ypKVHprIW>_wMuvo;L3*P@^K+8y+5SDnnW?#kQ^ft1oVpHM(Dx3Z0!- zH5pUn?6ZU(RZC7Y+EeN)QtC1$s5h0n{BK5W(jal>^+ShGozh>4Ph>~VCIXIt`4=mo z`h!{3o<=i;UJ{>gaLuO6)K6EwRyVg;4^YHs%G^)gjq1!*&gnR?R1EzLku3ml;Tv2H z0B`|-N$sAZG2$%iZWK~LJ<}Jzp(GeT*&whpUukXMmszdFz6)=I=1$pkt(Wc$tso*b zw~_{{OY}dAztzp12!q1>-hXj}Uwe9|&zx25Yv1Q;qi+1+Y95ptBO@Y1qOwUobEk|5 z>rk3%pHGH`0kg{v+(u24=;)>|L!pY&vi?i(`Rn)i>5B-D8(bW^6!K(2-60PWGMUvr zh#b?)5UU8Jl&;@t$2XExNRka_XX+*j3mm&01WPV`>SbK>bd`e6G>7#D)H$Nr04lds%slG_Vi7^}?Z!l?$esQ|mfjQE6Z9Sm zeT}h{5$SQ~b6~Ib)D;Br!iCUwY2}YE&ub;M!rLS75n6r|vY?e|QgeD)tZS9W9yic2 zZ16yY^?f?-y!_Q~!@vgO7jRi+Z#UDa=JSf5q~NeNIXrz5()8YjEK{Qr-4p-OBEx++ z{iQ+v3cota3gXkNBi(LudbQy_9GXl?#jeewFw?8O(`#12E+*v19NO#&J!>t$3~1A< z)6X(rMg5+l0#6P=9xql+1kj;8Ag?(Pw%e?$bHMaCty8LZ)6L4?*AD1rLz&r4vj9;P z{&He!MpANo{~~cq9xnJ+0fRbWTue@B(hVW6bi3`1*j!xvV`d*^S|_#*b1<5(E~hi; zM>AtPSA5R;t09@Y&2EWFCA8INrDXq4r!_4=v?qsSZF|7KO!71L0&~kjlc8e^_V}vD zPY@r#uUXaO^~gR?{Wfh~(TGU@8@|#$y`!kqP;)a!3d2?)aTSMRU-s3$V$}%(uuaPA z5A?&`5-)~M6`*Gi0!{zY)*Jm$cSGoNlF4`=i!ps)jy^>}qxo`b8N}iDKXblAH=jpU zB1aZ!(bI7z{`iXW`Yt`bqQoD|=vtsR(slCTUh(!?>~Vov5CsSdGzPtbgqaGEh475(P>dStIh#dqwd#sbgmW6r29(shBabgSRo zrMDfuP}inzGIs6nxP(#J&hSe?@4H&`Kcuoaga78mFc138fncqr*LKl&X=@)PG0;4~ zPg3;r`V6uS@Y(QuzmV9V$SycHgh~bli&``IIJaqsjW8M0l7blLxhY2fTk@ za%SoeK+DF{j$LHk9*~z!ihmQkc-IYY8eFcNFMYlJZ!QlNm4SqMtm`2p=Ps$Ye5;-a zRcHLMw^ol$PtSv|>?Vrqcp=WKYIeJMRcxo-(e!`>`a&OfmD?BbG zANw4;Zg%M#e*LRo{Ys?SsQoS(NLpw5++8OM_6Q@8tTb(oT?`9tDLc}QorUVExU~Im z8H$_V6xGr0zlvl>PZg_W9#dozTR?`Ch&J=mGptT@0l7LdO31X1Q?GV2Oz@e_Wj5*q zhy<1pi)&H2rbLe%D1eizN(EZS>!kQPz6P{{o=Y-yWN2&afo1cNu2YL01OS!XS-xle z_L~DTz0)sQEOJ@4LI|yEP60qFz%S9;&#;ZEtZh6BXyK;r-K=Yk`L?l+6}t`6P3QQy zemGyLH<%f++o@D9+7A|o8>ts~Z|zjg`Z;AmBJ@Y4A6I1EgTqsblzN%BtUpraU&<>l zUI}g1?zvh9cF)^-phYc;D2h@al0NAFKijqsu|_}CtWyPwA^F@+_0k%1V4Q0hGe@$h zp~Ylo-H%&h?}2Tb{=}VbpV@ez`(S%ru6dD1t&OEu@1UadL{K{)n>Q;d?*xb(J{2?6!K8r<%_>yv8{1&wM z5Du`19wO3ps(yI0IKj}!*2rBRT316G<4eo98KSW#&k=6>D9>IFZEj;0nTrKF&Y`s4 z_SR~2xkM78?~@SN@Z7WZkKf!!Tod@CXbC@Ugq|wCHn#>6E8Ky@OpRaC!uOT5&YQJ$TvN%5X<7?A%kbi>~dkaRA7la9MabQ9J8Tz+=8UG$6Q** zXEprkB1em@<~N+vI%2#C*OcZa`RLSPh!%a37WNFEU?i5i#nXOq@P3MH{E>BoWQQ(7 zfXdMdsD?aG`>NjlmdgW1+tqHe-qrJbAyva$2no`s;{WpE5|ZrL#_YDkso2g{b@9tf z4s96>Z(hg2w*A!;+G_jQ2L$f)Y5}&{*2B;6v28R;wU%~MfhSzDBpTd#`E&36P*)!ZDjxc5Mp7l?MUrxQ0XWzpASR47m-{^AD zW@Q&W!||cL?o^Aa+TfxiKq^wm{3c0wwtTysM^b!x88H+As7%I7HT%L1TjFxzhWoI! zup!r1rlwM)wKFfo($>m)N|w&7AN{`UBN>d3SHCU7OBJhc3I?w6US)cLSy zs69F>F?H%dW#rC^PYBYq=v(ksd*Z4pRvEPD6MO`kebp6)NqFtVA6Luf0SP)-o_F?c z7=&LQX2PsXz$}r%>r_PMMq*{5J3UtXxqwjv9-Z|o8Pezs+lYGK2`9Xk|0 zBlS7ONvu`qJIIn4Jc`;w?sE4*Rt0kP&!s-TGW>387Ikv)(TGDm1o01nRQS6XC)4&e z?7fv2hrP3uKz1ZOA8ti=SNE<(y=Ch5>mYnww z%zw_l1mMV7zS<<~7R|}zk+C`*8V648oPo309+(XORUFcIcF%-I>&z03$1+^%%)Zad z#VEV{ekRq_JX+A%a>0zBY(=TFzQQ>YAH)Y)&eGclTx}Wl2SJ;m_6&4e z8{xN1Fx_%8=8wA0W9&XSf7Ls+95rS1BJp?nTb*{r-RwiN>M;FYmbgFHdI&Q%Lq>;=To>SxbT$4*+% z+Wxl8CO^V!Be-J|QAr7F$|Fa)mG2Q>X4m()h{R^P z{nRRZQe@01Lt7gY9tj{6S9`iAPI|e5q@2J`W?TwTU+}t(C)A8 zKD1?+7X7Wf6Z({O9!j=pu?zS-w1pVqCSD?Yi4nrQNGPOScS*|eUZmi$BHLzKf9J%A zG+3gDb9C;lD=i3pMfqCNM4xh%pUIY_50q$&8msro%+^H1`|lix!X*IWj)=7J6@PY}U7a3a|lFtFQ_gu_t58vc?M`~M+J_#ArYC%fw`x{zb#Y=yX^8cPIFT>UzPzgK_^0K}o`FG~>bv0iP zOyxc<$))GYH&b3&WWJp#E~cs|oz-8a91d+MA*v!GNnOjYrwR~FY7yL3^2u)JbM65B z1*8PyKdlz0E_+q};xjh|&F8I8>cuKY*Y9MSX*OP*)1%+5?xe8!aP@=oU=sBvH`YAf zP=g*?MkHmjtv6bI9}oHARn{2ghgTV9NI{wRse=~w z?o7Rc0OV!~2v+EayIc*-Ym~?BO5Ugk5TfBTH?R{`RK=%X~dZn6=VhpYhip($&;cq6xRN zP=-luM{ihOtF7A^XrA#smW}sk_St@MyVZeLb#SLv(G=JtU3s$r(BePS&VJSsgBI`pUMMc~rA`cp-`q;7>E-0zAuKJxI+0al=S zDBj&{ceC*t+EXkrfmi15;Pzr09sS$aC0d$i-9gd_On$JJJ_fUQfDBWwzj5 zqMYJH^$pe-mIYEbQV*pFkMN?8S~O1c6bKQbqIJUx8X}51k0&cRA{kj)pKVQ(rhlIL zBALlw)1ntZ-Q;t%XpQg)87W~ol6vwV)AtTN+-K3(EYA3k;%Nl_JoZ9n;fm@ya9jQ{ z+~@uQ+&>E3X5jt3KEUSoeRiPqtffoH#WG&4Hf0oRr1YHo{ zg<5}qyyyaY#|}5^Q}z<1Uc_rE%arlIfDz~oz)0Oog34Lu1j5sqw%3$?P**UGI66<{C#Dc_= zlWZ?URK}e>GpcXOxn>^Hu9e6$^{Gq^DNr-2AKMwLFXB>1e~+2HLp`I!%*pXd}H9z zKf$+1ri6Mwqu#myyx!lW-u?gkdXKzMz3Zr_8r2wQqLt%emrBp@maM+hskEUcBErv! zY?|4yv)3|fMUD0<{~#mfSFL}0O`4TXl>th6o8|Q?(C4+lulYVqeTQ@r2a-n;j_v-E z#I{uh=V(z~V2ep8O}0|6LRFIGKZomRt;-x}d$vGaT1qZ3U;t+K9jT`QLeOY?^i(aP zilpiUmEbW)q1IUq$gWbj@)s7fYe+} zO<_#V2J>{<=1%HVN~`@y^?M>mKEJ9;jYyn$-`yoqZ_}yX?JGZGZY1`3WKzXke-R-% zduDUl=?mPesrf--5L)Z<1zuG$VeE+ zINY0h0Xz~H4T(qDD^lMTUs9nq!tL_jQK8-U7SdrN+DP0`WhCZT)$a^8zZgjFE4VB% zc}&2)pWD^r1qp*S)2_qsqmSd+9mh1?k{flim!WsSw20j5cMir+dfctYO9GK(Q2=JK z+SD6#9}Jj1Q19*wB;WPOMm=-8ZW_mAN+Gh(9rXTr={A3Sgj|OomDra}a-v^L&J;^r zF;!3a5uzo?>$^JRBX#b6h-^~exu1*!66~wf%_hKE9y$B#ePih>Msp972QgQ?g#9q% z@Ji$1-K67Uw>EIO;^ho^%Y*|FtH|(fS%Mjbsw>jZIC?_p;lx8XL30fw%U}Ld$V1XyE8eWS}Vgq5+S8HWGt3_s2h3ijA?3bsx&jnsmJlV$vM=jef6Mh5^d7f zM5qN0v&%=k)1)W&RruUH%xy+;ug5554a)B70%o_lyOvE*GwH~VoT9CHRoEII)#8&e z#g5j1ws1d3fQohid5d=MLINB7Xa|MlM`stWj{vJF^%!4j+#=kWd8&LwRgrwff{Ac( z)FrwomV8+1{%CVkYC8SB?Jx7o6ZlE_QdM3QF|{ODPVc?6LJ*`TOD`hp+k*L~F^(Y5 zept!MSNI$COr4`j(I|&{!Jdr@)okTtTINIln`C~#ls|}rmNwNA-B7GaFu^ItYlmOK zL__3xm?hHIe2;>Wfnx3c^Qf=4cYVTxt!wQAhne5k9_XUVjL6Dr57zoE&gE%qf65p} z5{hJuAyhCFCJBIxeJn89VWy0zSztg7*UqJuqm?G>A+xGiSOGdbHBcVcz zeVZ>|{J!jjg6O>bm^VhdHh@-yU_zB1=;aI?}t zdk#b1eBP~Eq8+j@FuM8o;9~Ek6N)DLXEqd)HP=uIgzES9#C;lcn3hcCc)kOq8K6Ag1S->_pVqH-w{moHzR(rG6 z4>r7<2x*1&A**M>IMW!uxLsHpeF+pXJ2J$8NHlgv5~c-A#%O0dtG? z!>%(of&c!sxG~zHG%31Ai~R|&qxy}f$3ligX0bR$e6?@LeBtcKdqt7Ijn&-)=AV=T znMa9{R*m&3CoG)tSwE#qjoTfjVD-`O``oY4gN>A#;d{vizYpu{0D;g`pgpolc7en$ z!}c5@+&>Yd&=dU)S5BWXGJizWuiA+vhP#`|uOR57>nkZpC3FwKYpi#Zayrb-yGl zuk{KogGyx=s$W$$@pDq8QDPJKJ;Vp6yZ$(t$AkPGBb;1Cx6B5Zzslp_4|zv;l*RTd zzhEP<$AL>%M0z<4kDv0_zr(pP=4gGX-KwK(a6}S&5*rl-r@qXlDz(zJE1!2f2OGC} z6Q_V13#Mk#GdXcHWQyC4&BC4~vZcIa$r(VagXJpa-(*?y^Yqpu zXH|RTJ|N=QLoOyNhm$7r^@jO|U_qT{6lk&k25dveZ89kmWJX;&7h-l2(J;|oY|Ldn z4D9R&8i<)RdOy;l6Hs5Pjl7`wel{DTt=marH0AVKOrX=&pt&E2j)SpAvhRvT4N2)u z%&W7`rny1$1NdofvKFegcX3!l+U>!CvwMu9>M{w-MXq$KvoV$?>tDqI<1|L%M77xa zsHkc%e-Mpa23jLgPc4>0T*5Yw!D9Qo$R}Pc+C~%M)Y|V+MFi}jory)<9)o{pd8pC+ zsG);>t}ECA-5_!nwMP9(%$bXWrhdykOZDl zIY_+UI%@!BEm$|sRO0B6WJn#0AXBE^Q zNjiEa-PR-B(H)`DZ0FJL|1DD~3Lm9r(^o2!&vuxp?J_OHMn}AH<;Y12xr!c?%i>qG zx(&RFb$N7%S2Yq>5`5jnXlFb_5JCw?K8dMy9m7QkP=-_6F0#O>CW$b5B*Kv0g8)6_ zwDXDdE_M771vgP%Mv+bnY^Qx9Xr0*ZdJql*d>i5%pYEaBy#{$BwKvm1wcHZ|Zx$c@RSE@1LYbzSs$z8vfxSAFU}fIEOg)_W+V z<6e7H+f*H8SVH^X!9zji_iPK@q1@4a6^!&+y9j$l4V9_FjQhvnO~R#-zp@RYgjYSX zx`I&aG5Vh@Q&MUVoK~|>>dX}WGeHWo-$YuKx1H-~UV60Hv&cYZ5KIb;PdeQVL6e3S zFpifXCEhFK=J+KAqeVaQ?!@Y}*kzYJ>z@FajPHUJGaBJ`OmLf6(jsB&hpmzwVP z-tW*<=CHJh&#V4TaaVh&Tl4S0`zQAm5z!jyQFa`kAHLUx-X~aB5xnSNsv8apJ7)|! zL^XSGl31d3z(leLK)58G~9>n?~TM#w>2K2u>;{322q&@XyT?PDL1_jGs$WlZaK2W zjb~O)nr;jaos#`vjyZzXB^~(L3+UyKu`(o`Yf!?qs7p244gw@lTpGYyiqUfJEh0b=PKnpD z&QadACv^_ej9*%WUSO;~EpZ->3^SOG7uzJJ5R%fVFObTI4_!7TeW?w?@e6}J9-N1V6V20L9Ox&W%SVm z3g>3+%UZ@@13@}cTtQ1nT+&}S#&H?2N4^+^LI(qb18j*2jSwENDmbwoL98FUQ}08?Y6 zp)?WAU!2zyrmm6GCxia!KltP@Jg#}rwq!+UruI;m=1(U3ivYmAtoE39B% zjk^B$byd=7#y){4p7&=6SF_T|itcVG&owT!n+-sI`gA*Jl4+N(stVbLDrsLvmGFoL zwf*eRfFx7tN@^z`v~Y${pHqj_=P9mqC<{cpznKvXb5@bn{GF5UbvY7AHIhm%)RYvC**~jxwlrT~Vg7~5%;YD<-t?-wf{8g*M)Nz3iPIkrB+mOyWZzgVdJpXL#YaEw z;c4y&CN3$eeM#SyYV>Z>?&and^!;t(4xM=N2+KoiK7Uugxr2k4<|W7capRa>c=>Ba zZ90(fJ$%e(avW+~=rWlfPWzmGUGJSr)QW%Yoys(Gc7l6weI{uBE#Uod+3sxr`!l|l zA5|cW9uC&_%k;5sPOYG8`I9|4&aMt0F}Zme;@TE^gxfUIiNW|zJa6+=Trr`uUQ*U+ zuoiM!x^^&Mh|?oo9wx4roh*wBp?BnU_=nn`cIs|6J|A~~pR;}xFP=6BHa*YvWLi`v z>Y-;cp+%UBx6hb74@Gq5QJ)FJjPi)h&l`y%lNNHJqPmfX+jzp%>;%v+ zDFo6`U%Ys&dL;n57IR81;TQQPiRmXD`Ka|ZHQl(Tc(zlKi&SI{&5lpwXH*JBiBVUR zo7u(79lXejg%sjSrM%NQ=!<i(i#77PK*45oGBqd6aAKwj1q7J$PDejW`nSSph}mA1Ii*jPIfCx9`ug&y9yJ zjNDmLx~fb##rg30bRwPb<(C*fo2EEBlqmkeO~`7>+x%vvU&eBFbzi_Ns}8ZqB6T() z&rvUvYkwl-^)0yAL3LL5XDFW6#P3k+hRwUV%$Vckjy|$w?!GFH;&gLknr_NFH!Tsk z8OgNA`}}G~dw-Q{fj*~uL)B&68`|8%PCXKJb5@jtLoBrg)jb4bTdBFNBrPDt~KSbZ^lzRMF`O@N_e1p~jWFlvmB2!-F zi{;_U1kX^bIkU?6qo@GPN9AV9(H5@l5IG{Mdd7^f=Y|=Q$EBa!m9!$=#g4d^P1{gI zJ?mu|8iS$RP=ScpPh`qc8&Ok9_@S)6+(A;N(!P^g^rc2u4j_Qy|> z)nK~5P#VO9rnt~S1&bH>;$EiMSyyMt7(EKQIhNZc_m=3#I1-K{eQEhCmzqUq2Uzq4 z;_~0d_N*Q)XDZvE$i?bjXk`2n?v#C(n+ih*(JN6Y+Gd{<%HEuaP*wT7{q8j;w(uOw zfZS;vn~Vx1KQ2I*Ld)@z{;Nf%Y!tqMbP|okgsX29W={Auk8~BzA}Z)zJ3bCwYQ!%v zVuwP6{f7^2a)%BW=26trl7rvb>n=sZ)a-_gP;^EB*zF7o1-ad^XVRNMYh z`Fra{HIP(T7DlF=3JC?_Z=;)+@Rq48x&@N%vHh3WKZPYuE{RNe=LTi?GqzwSbGIN{ zw#%6xX|YT2E6luPD!0wS%S_@c+a6RWRg?EkTR4Sl$;LA_A=u5~dbeKH_|#(YPs(q~ zTwJ2^-EnF*%XlzeagUWG(6KF;yCmU7?rJKzsLlRU=634_2#?_TjwZ$P(Adb7^M!6L z77-36M$P6cQ~3oU^$t?(N*@YK7(*lUFBqz~y93MP@2`JLz?hd-7`^Zn#{8Zu$Ci*L zKQaONJwOcV-;n!aJor`f#dx5En;-};E0UiUt1ZFqzxxumvzomnx30Z~b?rNZ&kRe% z(tZqZrnIU!hJ32g%pd4H!q%VU+Xc=!*8h;e6OnL>QmDErm?*n9@+KkDYHH~lJ^bcO zbp1}f_La`~Fm_cCLr6%pi_m>2Z?#mK03aZkj%5SkS&;8EqnP69hFMhJmTOLaLPh<6e8%x4+ z)st->xzi;cfgHcHLhY2}(8)0P$22_npodQuE z5iw!<`*_i4{yb*9VkEzHv#3NoJ)TJC!PGq@oyHaw!`r+3MVucY(`ogG)Rn1tPU-0S z*>;jHFuZ?;=foc8{XqO^(A`gpEfQ_&`-c1PLHFAMZ+h89G5|MI!apuD290cFQGcDY z+nmOqXHq!97w|r_{Ph5?EkNiSdGi>&XGv*i_$1C_ve5-j$jUn&^?ko-AlA$ z)6n74%vZ&N%!5zEDvaWFXijY#qW|JAi1cm#g&qf1ptqqy70+o({+*uFxj>IA>#nNW z-~nVHar!;{RViQm#$&+*Ezq9a#HI>#$7ha+42;m$-c6y1HL}s$z4RJieA)okIzw__ z@td2dD1QOP$6uw|mF7@KV%mVO^c8(qfBSaXDq*lsB0#xMzVqB6urI7A4$HytEjUANsUEZSuh)i;0%d7{zdN7X$QNZ<1QNd)IzW z`c^SDtGr)iH^+mnI-Ml8tn3UovUyQ&x6VNyk;;s3S0ww3edh4U2V*(aGz=%=s7zL0 z>bEH<3{%*frC03Q?@Q<&0Lqv(^oMDQXu)&1b94B5CRJGn>>2_iFJM%=%r9fEr>mSNH%*nX9GB z_epsb18_eg3n1Pu?!=fHnXJ3Q@8uU}*qRx4$t=QRo?mmGUvi$OIL~3u^ALThlzZEG zzUVxAoaZ{{`5(^n0q1$I^IYaUTb<{%&hrxIInjBZ;ygd4S5x?$=ZntsDd+iH=lMhD zxypIoq@G#*zfJ;PgUw@{WrZtRRPJw9D<|^8ZagHR_liBsy3J&n7X1MT2F#KxP?-^!>vlBZXr?P_1x9n4fRB=a-Em#iN09QE?&&V20>zHoK99q-B1%jCn|3u4v*KsoB6barOf9@7v2JIMi}uBJ-`BKJqly_FHWPh0HBKDByX)7#RJ zeuwnzrE`PwW1@-KYNDWv!K^qX!-WP}!j7}ybh97|y19xb)d+JyBo|npY9rc{{#hrr z(vRf%o9unShRuERMJ^IkV6D5L1$KXv#~{0jQ7aL3Da#syzOtTH*mFix(7`&vwqq+AI&ZV=bfz!R+aqRWN2E}eyPq%%j}xwEr%xpw?NiJA0r!h-D~rx{g}5xfhre@~ z1DUd}w?Y0T{cG$oV4hda-E_J0g@N9pYGHMN4ZP`Zw|1(hIXIuG=BK#3*N6Mz%Hl*t zfViVb{_hv&wW=p^ke{hU0U_We)a znQ=GKB-PJ4&$mG--#yNAoqA^NBQtKTlfKG%E_9wZInOJc=f%!*qVxQM^BnCwKV^t6 zc;0oMuRG7@o##{Pnff@KKYiUv*EO#0oE5H#6DQV;n_HV>hwhW~nfy9`t|YcDT5|Ke zmIVtIO>B0}_sqH7Gk>AytZ_@v%IeX$W>?F?xr^quTsUs2Yi>)k{gMOcnjk;(7tU>2 zadT+SEel%I_Xw9txp3Uv@pI>d=3FS0jBj2PUKk>2gk5KXBVe!F~w%T7O`{Ba5Tl3T;K(^k*iMYqpERxL}G(1;q}m5qAfidt7Ld+Gdz zw}uzYSu#I#r>ACm;8OC`&y~wsmb5NdwA`~~&ca(;vemD=)_?US!7Hz;bv4ad5}H3} zfoH*@rAs}FT0KkW-@0&q>wNg#+~TQe3SK#Vx`H%gQRp9*nvpBza?P06;#tzNG`t|> znZMK%TC~Ws^!7Om;PWESEt0dCOq$a&*Hd%N6}~JL*DSnk;iBbE>lEEL-##ZakH*&2 zUg#OORJ3&5(wcF%j`xhawbtXQS<(_(HfO;UJ`m6Pj!b3&|BCo`AO9Za-*5Q0l7Efx zW%-2VUpvpU1a+K$dyA)a&in=8B`p`)a@FU~g`%aNaf?0k<}5|WJo9g#b8E|lr7g{& z`HL31Jf3UkFA0U`EVwG%vgA%x8QMjW#?AHIa%ZSzsb@~eGbaZnE52O4rX`C)z{=KK zK0h>1S%If+#kdtN;Ah*ucxg*`?jl&UU{UiN!R=X0)kV#V7I={1Qb`y$7tObS{#iY= zA35IDl3zYcS6hPPcgOv+?z7V#BVFFd@XVI4Sr}fhpw@N8oGV;`g)DW|xE8v?t_A#O zE7%3=I7|3n_P?u~_l3?gmY4S-?`J<@mos>_IPdNMhrRazkE=NM#^>ywt!gV-vLs8k zU8LA1qcDBkdS*Je81n!oZZ!0_IGdo-23GDf9&(j&fDglcgmSF{b=9P@vr#b)jD3( zekw+6Rd8p*QQx2MiP`x2y)ig3uKTonJYC#bx572Tk+xRr z`3LY^im5&oi?A8kyo5Zewc+4@LXg&2A1>uVNm zsu26?H}wAWwhFOg=lVC-{;r~Q`@LHx-kDVy`0(`?-<)tlY-6YyU6ufP=oJ^=qyxN5*63w*dPzy>gA7)Bn;Oq#ZE*jJZfVVEU1HNIPKqZ^F5M zsr=3Jk#@k+Ux2g&&V+v|+&sYalZ%jc!1P~&s{~B{onoXNu=E!q?SKRDf3*l{2TVV2 zG3*9R{|UHlfa%XW8fgbif5Q@_9dH=_CvZ0crvKnlq#ZDQ-!h~fF#T0<`v3>vbA$SR zz}<{;K6dwvqCEV`Rd{v)7r?&?ZWrJY z_%FlV4)_546ILRAzybK@!QBIR2mIV>%!L3hfd4AoLxgKk7I1q3hv8oX_Y~j}_;;*A z{Q|rPzUu_!GhiS5ZMDc-!1VXjVRT6u_6g^Y?57l*{{|mUPdq){ z@j|-YW8?{1gnW$WC7FKMdiEi<#-}G9jt?7ecaqrxJ=aI|#HXh*E^YDfKpg!t4JYc4 zmp>eAg{3_iaXRDS5>2=2u+uJ_<*;_Wu4h(#I~;$!M~pw;DSTTTBB{$1&e!9@y6nQ$ zW-qesWgRtz`!ci0zTURi$nq}EvisVSi;~uR!=Ama{f-0ng9hp&o}=q^yiS{NmOwVi zDUwQDMb7n(FrOpC;}D*5N0GVS9+r9;N4bu}VH1uLgSUC zuNY@!q2DRYjdFAtnXh}t-LC;GTd03_!XJj9$%jpn09RXQJ z)Dy4Q%2(F4HeFw=^7cA}w_Jusi6ER+CbYxKwRk(2#`1(Tvb;(X%8NF5ox)oZv&=9I zVH73U7GFPT-`TJ)3>ntLfw+1&R-ItoJUgy#TJ?x!(x}UX;TjWcv+~1=+rlm1qH7=C z7r%d#99VuZX2|(}L*MUD=#R(I3jdCN*`H%F@z5E6QP}0$zg_zeY5y16e^2}W)c*Lt zs&MnPze@X!+F!5z0qviyeJk#(G`>gsk8A(8+J9gBA8X(FkqS9p`-R$HuKgV0DHEA2Ir%JPb)+E8mpIW`{n zw_wy~2e#=DQITxcVFyMx#hUxqba#X*x>^UsfTJli*wWY4+Skz&>hN!A4~4nUpsKqE z){3(oO+BGdSlr}j?uo##)vY~4A@RIJ?|;zy7=(DyqR1T)xD3f@MbO+Ija4ia!C*x& z5)QR8!dvJLw)U{g4Eu&VEYhuGqr9}M9~Q9hR`7Qy|fN& zh=?ZOT>K98Z4%9d``fhS$-sKr`};OYz7TD|BcZ`yYd9Pn+#1HbL5HFYMM495X9?!8 zM6k8Jx1*;|oB^mevLP7S(mjYd0}*Uj(02j#_x8e8A)XXL>__RtJi})q*r{kI7&1a+ zU$6L~5yZ}ojbei>*xx6EFR}-R`Xp_#+1l1WFes*&s3xEYag?cIC^tL91K9r5DJlUC z4YrFKlUtC4SZ#K0M#TbjmdPz4J=lwO?!+mc0ggigiv35Z&kxlIbgO+uwUHSjhKj!;OIqpdOVNF2NF@HKHA9JRPZuyA{zQDi8fiH64 z-!}(#U@jNdExi+eBbdvD=Ns8EGBUDf$*MH z-GAMITMphLcKLP{>?+z-x+}12{jTt?ZM$~t8rijH*WO+GcOBSuaF^Ka+g-4`Xm{!E z!0z?C!@IZb-m!aR_nzHQBn(~`DBL3jBZVWSBh@3MeewI>&VhM|&?X~w%YUq;$@cu2 z!x+N)VH2l0P;z5RD1GO6Exz^MaE&RAbu6i`0##7y!`hsT-+n~-8&fQKtlvrbM-C&e z?L}2PlD)5IS$wSZNqrw5MxU}bHP@2I8laT#Gsg~~y|m3+w|niWCi z_ft{%L@}lBq>Yw7tS`#=vHUpZPsyK$o~OzWtU*e7WayYbC4YC=lE*rwlpmQfrnt`U zU06+0`mru31nZ%k<`KfB+zYzDS50@{ukuGf#yZYV=eQD@`s7`b0hbnC3j$Tg9^RaCRb3gY?ZwHf^jIiOq1f zb0Wd!cJ=i4ZNQ-s{0;SS#2Mr~D!hVSqjj4q*3m@69mSPxrit?|tuV!KYQq%W=1|cpGtG|vAsk;4HXjDpNQFin z&8X)|$%CyMDjI6)Ynsc;n*73L{)Tp6k$N$hMvM`xYpHFnX|8VcmsR>JA(FDXtkGZJ zQl~@M4VyC;?-gTpbI@NGXkMql`j*;SVUSo;0xRh+5_bBHi-altrNTkKVx4f(uPkeZ z6@<#0nj3{%(rTIlWz7}U!b8m8*x1l0yi%m0p;jajf;BZ|_01xgNK5?*^$lz4MGBEh ze??7QS*=JVQd2B^QUXA_0!l=N0v2I`g(6EurXnmAS&{&?;}r!^HlfuGHI*WV5Hh3* zIU{n31Yqz40!?LA{<6l#vUMVlXoZ6F3AZ%)8!P=)HTB5Fi6qnpn9fNGTtj#=;YNQ& zLt~|wPPnFC>7GHP#lmJ1tE#E>H`mnh%?PZ#wxL{<5rQ6nS)C|Xa6@C+O24RxG5nRm zhVoVZie^!1NyJEglBmj(sUo4GO01NAZ4(k-O%Nxmnra%55-YkIJ3}IFWyxo0#8)F4 z6qxW4Q8^(Bq~N+nKeqUk5=J)q8&|VtZ6jJ!TkBtmLi_BqIIOO$=>$k9t4}J`e*h%|j_*`Yx0ptp?bb}V z%xiSe)1f=dX!O{vmMkHr4jEIX#l;>m`7?$$A|_W@jL#&1;3LXb;a~=eRNdgNKuTSo zM}zB!qC7Z$W9VOKVE^Uj)QLWdu>CKzsqVzqlo1O9Z|68po#>05rP1ZyExxVFS2#g>m_v70~QldCco#GWAM+kKYn~BU%}YzM7YGc2Y%($&|OgDuw76iu?uR9+2J%)hZCOc|FKtS zn4>$Kzz^-=8i^fFGZ?6;S}kl@*(uBj_c;7J??c|(dU^I()(Q4Nv92Xj9AtRxVV!rj zpv6hkoKl_dHoQY+@G$F?7(ekd8L&{O<8iK0>s>}t9`(9=x5lr68R^NSCg!3s?7>EA z`TCVtp^H;!Hp=fTWV!A0D8I8%y<6Z8>SzGU-^>4& z4;buRXT<8{CShb4%2oIG2A2>yi!#6E=DkDe9A zXtuz-A?W=tKQiuKO8-mGO@`avQrl3!QrL4Q9)uSAnwt7@j$Q0$rLaF~SI9ZCb7`+! z!=AtWVksIeGJ9=64m<2ur;k^a>#!xLB9p@rv-l_`(o|s$Lxwf0%jzp@{o)FZO53D; ze=wx@VXJ`qO+-D;3}8gH(jRQDZNk{5wzj;i;so*K{0Z1sCX#qvzdH#~W&!>jR|0i# z21!C9D;Nt}S%X0i`r+%2UL*<~>+>_;Kme!QB%rSBD`aMu0oc_L! zLzr!f>2^jrHN3S$v@5zVMz6qfa(Qd}M%?$Icsb4{>_2GeJSjBLkIex+B9xy(YYUte zXvbRHvE1Dq!H$QB=v0j9!W=sV8}eOD@K{`Ndj2$~Ey+OhU=IdXqYZUt=Ddb@+*3ia z1qXW~Xgq22G*=GD9{X^#*(6WCGR5p%4$eJxjA3P)ro!P46ESC^;#gO2ph?}*6Koap z=CU|E_NBTlRrJ%vd`%BT>5K(C20FxoJbqT*V;}jxYB-ajsspNyr==eIS{*`>PZy<% zyk3*X2P+zzgLTcqSSiO)h_GX8pH3fM$=nmrh5`^9@(kpN$8H_cR+hDkE^S$9)H0@| zL)@zA)fPSW#_1W1bm01kAa1H?4~aV*YV3BEm4TxLVT_Xdo|e0OOu5KVzm~gG%k9u| z+1A?%wLh8~BiF|MoLCNU7$%JKjiX7|llKb%@@EX6gTS5~fH~CQ z2T%s*ISPMsSS8m0Xd-1A{*I;YZU7;;lo?vt>ue}jNVL^q0uPvVy4PBu~92cHPXYvtB163e1HJ zf3Wk%5RzKCZ|_4msTG?-G0xOleE^c-eAGG(z+@uSz61cTkQ6C5#b>1G1&zIhvyrWz zOK-0aF;~JZV}AcT_U_m+8Sb1ZbR#&}8}5{eu+Nh^3x$`{ox;8#cPDI1vbJ>D^K5BMGS|Tz zP5j#qcCs*OvWwJ|Aa=hE490fR*-yzP{d5Yy!nCAXmoN!iu8~b`iB-lJo{3767FOAg znZ`-Pzl@mH!ue$08!0~K+BP_jH`3?p71y}?wFft~27AyS61JR)=fZ|*n9pn*!k$Wu#Vyt_=x*J%$&ZvdERJpR1lB$W z?`uN;+g>=2uO|0lN4M_8(XAu4z+yjT+UpEF=6Khw#=G#M<6Vz5E8z)rk2UCZCk}dN zxE-qVZsttnd)Q%h-p#X8IGO1vUxy_N^P*hV1BdLpo7*Qih^U^td9e)Vwgz90fC{lA zeIJB8{Dh&SR?~J$nj@e?UYYR+irk^I!Isy?r8Jq9^LZf1?&8E=(Pv2U{q6q#fhqh z#=5d*ECh%mF^&&~vm7mf?u+9TOiCk^3uhU3a?0Dj$QCw5N2fhXxAxuI$E7gEK4)WS z12*llhc3)_~a$NJ;^MtB#ast|Ux1V;w2aJgKu#IAll4vmlpG#Q0#av8A4?$iYC9zooJP zX{~Lju$D}V`06~OjK97TORGFmPdRz1q)Y>dB_w9MkA04bZtdvcWQDO@zR-lp$wX}A zH&#g86b^lFWl-G@iTQgpQ9+yw=nZZv7RGV*+n^;oxoVyV$|75PG0Bjisak2mwun|7 zqA+SC>OP|45@D>ee=HT(UP#5b6SKP=(bZ|)5{Fd1)~#=-6h^}lwQoX@fc->hoWBHl zP-yJ-*C%-*;_hTtKac%UEs=wRF|iXoNkw^lt)(X%k@5N`ZUy;fD03YI;G&T(O1gfF zzo@)AK;xaCPyREM{){p!(Z0(dm?lAV0e=l|B$fRGxW{nFb~ccY z0Q`l>5D*h3YJ*FQS7j!uavFxzlM2aXhM*p9TgWCtJ%s>f!g(Lo=KKmo48btC!cQ8S zf4t5Y3t%4b_ptG? zdcpv>Dc3t)n{%k44_by=z<6b+_?dB8D%3DXxeH_qbut2e9qSw-jDY)9E`w7!s#TeZ zsw_jl3&~*yrJmgYZXrTF{O;X-aNdUxYv|jSp%ySf8~T`WY#P+i(1)R7FLg44rvW@k zgc1A}z^~z?p_T^I0xVUQp>IQy-9)M9PXIn7LOmE6i+=*~elV7yN0&e(A5!B`zf%?h zNrk){ZpjKDv%pE=BJkCm#`kZfj9Sx*22iBL}%Kp&j9P}?%9o?u3#Ow&up!5luw+!OTi-O6y`t&d|% z)?SN+Llxga1VuWx*6K1d-ZSi1GLL=?<{5|?H&2LVPXMv+y!|Y1zZTzw_MDRzXCPSC zXS(5HODHB`w^RJfTr4sI2<=nr8HKG79jeN$HIv|!AQ(6E`PVE=n#>|r>*caN2TeU@> z;pNK;KM!C29(FA}?5s=*2IY~&AYLf_16#2vL)@&N%=hlpOXq2S$VQv(R6kYk_@eYeT&be(1}cs9dl&v zB9U}`oc>8x9P6z(ytv>@=2kTNQq8g(C(4StB8dKF7@Ko>)RiyYCc~QfI#uU`F`R}; zwkbF*E1Kk6e-=_d4eq#c=(&c)Wl8KG*mkZ>O3{X&iAsNiG6oZUNwYMWYM!!eEQlFm z6eBgp2_os}xbSbp!dGf?CDaTB)i(5O^vw(71{oiL3OLRp&VS9sj^o+XqOjLQBoYvJd z>NYtUeN#FaZkwD?*YoK_N`#(Hx9REhQM2huoh>+yU5AVQaUfn8p6sij#JmQ7$&VrP zZU^AtpD?+O=!^`;i+j%j&12txK$SOUv#}8ai?z|?-L~)fKA;9F#ZdvZuFB*-U&tq2n$9QHghufoL;+TZL zY|ukM)YEY3ZDBv;7xf7ou)W)l^jR^PSMSArC`49okIQYSXgT? z_J%iwb8|fg~_M104XWRvoj6iX9KW0a7a;Bss3g9IYzggjKBd}27w+u z;(H1`hNwRx?o{Ywz3C?pH_`kR{>)g@lbpY{z?0AzO^b_ATOv3fX2fc5D$3 zDdc>kv2Ba^kwSJDjgheUu|lo_CoF!VkP&dY#a@N%f`V@GQ-$m?8kdTP6@0(ZxJ*2v z;Jrp;aglgbA^U(7i^mkQA4rLKTp=$3Sty=R$N?aW#6E?*17tCFmdT<&Xf$?*#m^P; zao+i;I9NV*tVRc`e}L-+5!5*GhBN7h;0Sw?Vz77z`g_EiD%^;fR2ga;+F+62QsiA` z5+^*$@%@b8iCE3j3~N@59Yzaxut$ zQSJw@*QK_8ZJ#hgB)SpoWniYYe1ujfevJng3&sxnxa3Mz{LU|>1UszEhvn8TcXW}5 z4S-wj`kHKH{s=KhL=xUJW?V|bAsfT;gLTCvOUrQmvTdWI@M1iQMs5FQ(c?(3laFO} z_l7Rf>+mfH<`!8>xXO{Bqk@zBxghty4ogNu5lP#rXf~s{b%P{a=JYaN z(`dxUdImOyI*P?N70F@XRoy?(5N>DNc)1Gb)WptCUO{q&dS1~MQnCp*-Ok7DqN02gLSQujbd2Q@|{&Y z5N16G5pj((={v~M0_WP^-Wc_}&LkGZNRpN4MdDhgmt`?xh^)li9dSC|1Z(1m;j{h1 zIerTsEN6A7wFA%DGfp>A;j9g9Xl>sr_B-9t=!(R%PB+VZgpn7EUn*=5u@do|!uAqd zD4ti?eqxKn3ko|xY_WJzVFw++juyXC7#?|`OT^$a%Q>LT%!lXVm*ibxWkmW0V)0@bHfJZY)O74Crb8hp>0%CB0F{|puNeM=x! zxDR=)zwLF&tvZ22IPZ8TPezZ$%i!_-fdG#FHRBkU@O|nHK|sFZ|LM(j09H>E-inR5 zjt9@vXI>x8bH_&<4KI>h(;0#M<50R_0gC==0IA!k%N1yD2n1{WtNpcc-4QH9Aa>zM z&;B}uT(w6O%9ufQQxca0f5!TEMd}3f_-scwusAig9LNwZEC=3?OdnX3BJ#i@Ay}ghEE0(xSR@iX zut*_5)PY4p)`3L@>jR51M(lKAr6my~ z`AHgeV37nKSd_jxut@OG1B)Jpj61MMJh~i6#99uNf_gcSaNKer(b#fe92Q*;BrSe9 z5JwuqSk~DP?8Mes++CdU8EWJ-YkY+nA#5@V4@PeiGaj7uBh-A4{onyL0-PSi-Y2}T zFfN*%GK0MVOl7&3=dePjW8PYJ{!@vGncTP&8`;KmK5X!vpE#^BhJTL{)GW2hiHlEi zy3KfaKFJSaIJOJU$2BbLnzKi}G~SCQ>=UxEWtx5Z$K2H34C*m#+@!HEdPqF(;=tr- z5Pt%foK~h%^cUFrBrL~Fk+Brh97eGy%+$QM!Aow46a1?dTtvYlksi`K7i^@0MYxh& zlkycwj$o4?iqo-F%gV^0Oacp^!a%+cD7<1UbII#PH&FtVKWC@Rv-FVBC(?t)Rd|g(f#$! zjq8N3!smM97u3LwHYjQfbeijHfbKMmf%S625Sv0?xJneC2s*8eS z$%(foyAH1f+=)!5nOO3|d0WAgWYh)@W!*7_i>~hD(Ur{M+NFcl6f09|&Tz16AlM!e z6LOtk;bi3RRO>vNtrnp3vYtXfkKL_haQsrPcT>g2&{n+HjER$PgPM$s@rOeR@myS< zP~d(KbRR^;6c4Klo(~S5rh1P7-R;A@l7nK}Bq=1^H-nZ&wUkkNP-jge52sCh@EZZo+hD+tR5LcVr6(2h#E{ zwoM}bRLbdD5cE~5GJGAf{29Yr@#6J#Rrd5$%iB@K=@VJEXK-Kv=Rt+%q1vycGK+2m zWxJxP;juU)jd?f?ubw2h$zRv%Pf*%1VS=|43Mwovn91_l0U-_tyo2I``6TQDaxVe=z7pr=BlxT0A<{K7(MH2Zlu69iVf82NQ=R8?UErNbAh2g?hxZ^-E z&T|Don@U&(cp*N3aE3I>8j}1+jj;R^OtQLatn1jmA?rIUCf4`b4dVxhBU5HUNLJtJ znOJEY3W?rS=A7I+62w<}V-LgtmKbp^+N$27>@i4ft5D^30fXRY4EM7fASB8PSv2<} zk$d30=n8IPU{N8XdmXfwNaqc+Bv(pu8s6b9xRgCwF)LpkR3dF$5Ocnv>9RcD*9fby z7GND4Z8w%4V@A)R(Fb+M;cL=l8odCPNTcV>pwavkF+Ni*Jn~teQ_N?58}I=*FP9u? z@VqRB+6&VCa4EC2EqoYkV89+OoSkS?ixhucVkRga6O+7t4Ex<|h-S!Iq0KxkYGxMe z&ufV76}XwV0NJHwCTp49(4MsmjCUdN7M$~TEinytIlr$F?j)G?h(@fOOSwoBnCCy$ zW`0$O!ry7S&gS@PFTRfjKlbh}$F_;dpGWWRRPbm<9dB0aYyUrB3$oY=8RMTQzx(<2J{9VO%Yj#Wg zy(d!OJtdHA=w;7_PC4?Cr6vBLm_CDBSQ|QJgzqa_rV-oQ`p2B~$56%?H>iClScB2PztAOjl0p#dzN_HAg|iq)=OD<=-BTq;yKaTuXLDWN$^ zlQhW+|7XRTr^1h7{Y9~kQlXlL+9IQ3{;OhR!IWii2>T<&E-}`0_bn{Z(WyK4|E3a# zwN+VdWu)Toiij0fNmO+>B0g5+u)iT_Y>VF|UTC-DgXe=1&; z){AAK_KkW4M0}!(q&l8gf&1{W)%H`x3dGC_TcQ4`SZm{0I?!i|vmQfEu9T<&ugI0p zc31T2ZQRsa*4M#gqU)%bJ#smyvU@GmV7iXJYPTKFv8%8%L?1l$&>u<_+P`N<>UR%+H;|s3+jORXMs&IftINVtbi0 z`n(lM(dNaP5s96*Iu89e!#Z!pt#fE;^m(f^#Nn1L91dAgjn$-DN2zegie&6D7~_x? zIhk>sxRX*iWJNCaB3R+#k4oW?6}kDbsu33yhphPGDu^=UL*kGXnNwxkj)PTHGd-G- z32Dc{s*{oSWai|AZ{&~P31k{y3Xb#h-O{{lgK|VRr?5wE^ zG~kklN`Dik7qDW}C^FB>=Y>zxx$#fPx7bDb(hk$WX8p~r19$@PFyfxPixnO3FCKQg zL}AIOL(#}CRWzSf-w%y#N4|?@TUF&yft~q9WiTh1HqA&lkYZ%y@_nCYeHvnQ+RtJ0 zHb`d1{w@beBy$Oza@^WknnBt%mKaYI%lV8TPswqMDmN1Lbhiz(4s69eSG{ znqL6QVz`BHZf@CpESJ?;3q{bX4GcD}E)$P?SZaPqt$-VUHb%^rHJ*PU*w21~v4D9k z$PS{mTLIY~;@=ba^H9D-TaSx3S#gyxVJU2<@VU^c$)!tp1w^ii$Auz)hf6!)ntZG>Jk9krHPP930C2joPb|$wXT*x_5zdp-wd6 zu@e0!ZJxLv0#>34#}YjW%>tVSndk)o=EKQfw5drvNEBuZGNM&4)6&N9&yaGN%z;=k zBQlxCLgg|znE)%G<6?x|q!U1RtOR`DO29P`uo6HxmVlK|TmdH&uol2-IQbhR0dYsT z+E{)CTK^Uu#2Eg2Iv-cjHnSV`@KmU3gOkbXh(4$yBp=aB!MPYtHE~*#lg((?_0Xc~ zBhj%^R%E4YGX$)Z5sszoJJ5Y4oJ`s60B(ij&%-8eomOC+4N8w!Hf#4o;66C{3_8e= zZQH{j?S+#M;!^;APJ|EQivXU7!!MzZmv5DC$_nPvHhls9wNj9^oCc(amBchQ!#uV0 z8l222f2;yj$qJB#=4l+9tmi9bJ)aD8B1x?0)v}(?209B)=I6I`oHp+9ZumIE%1@#R z`I*aC#w}Vt3S?_zb>7CZbrGT{fs@&K9DwC;_|4p*ReT-k@j+!aCMY8?=|4366wpaK z1OF$2lZ`#}OF5Z8s&NqWnPoI-;@6;cel{DlLNxEfm_MH_yPH*Ffy@{A8ZDCf;buM* z%Y1-F3{twW0v?iY7I`c&hi{i(TUvASsC7~pb2PdOJR$31bT6dtJgIw97@c9Oe>`C| zUh85ut+Hm}<^kl-7;eo(dig%CMMhLJXZT9~GJuod5?;+7E1z2sHph_R1|Zf0=O8VX z(c3{fA5LcU)c~%9!*3324?fB+Th3}pq8UEEi*JI+b#Qa}mNrh5)%OR$?}n4r_XPmY z5n=Ux4Zv^U*zr`8mXlCXjBnsC`Vod3!MOwOWjJHog{Y&P+$@2Jx>~q+N$f87BVOZP zgsa@?aGm=?b)`G~PToV(fidxX^uji@e4~nrC zyyljAf3T^d+F#jH>yM`e${L$%Fz?dnUy1&F00+7K_1M^C#D!|YsqnF-Y@?-`0<|^V z7qhYnGxX6|t*}+KWh-SgP0hG55JSYML|wz`wYUR5hO65}>S~&Bt4KvPb_OwkGbT`l zElI(OxHu{@e8ta>I3we}W)zH!yT-Abds;#N3;T`%>7IM0I4fgH^1GoX+ zk3we7l>6&(FMb88BU^N<*49=8bPdRf5&0DY#Dfh1R9)(>koBP;CZmf5ThfpxD1|98mdvcip!~K0 zGCaVfG?gQF8k)+*)R-KeoU+=QmAsdq+PSrk`HPAev}#)uF2IYL#cXRTtFFSw21d~; zYMU#?jM236W?bGLl~M_+DyxMCG#@fW<#jb;R-8!XsutY5-%^jqpcZrT(XjY#K(MBY zM?F@f(3=;jHR23Q{znBxF`_~5e%$JoniMcTdYtMM>&6aDS#vcuB_9`~s!%xjP*qnJtf($SDTw0}*(HmQj$@a`v)6)mxLQ$m z1i{f2qx=xbxL0n)C?-se){@Fm99m-4G=GevUlMEZi5IqaqAJEJt6fvJt|?fB_w2eL zUdedbE?t6efkaDHJ=<(%YW?;2GDwusR9#cmTr6s0l#~2ygw{6m#uyb>eWh3xg>9f%6XU3QtDhsh7Rg>4W9z;XGPJTr-$;fB zy-BQ#iKs-%VizaH$W}R>s8jl-7|V}$eQ-4kx+M_6V{~$iRg2;irwG+w<+qte^;gfe zorB30DP7ixE*)QuqwxTF${;D3R#LJu3lm&E$Qxc>Z4tD?J z*ZFNeTyltwrg(I4b^|-K6&(F^6ZT))@qy%UPiRYl{_2u1O0d4LR1l@e-3%5PmpI8o zA5wQrCPwr|zhGmV<6DXzzL|zW%3Qc4-n|(A1)Bv0pn?|v1)Cz$WRP|M$=f-^5>5tB z_B7!i*DUKza?ay{rf6bV6QlR8K8;b)=kjH(pJFh`QD#An8eOi0Mf}ahU=g-sOZp*q zNhTfUE=lX2+~i?|PrOU=f8tcRlM(%E_q?ZA*L>Nhc=w|eZStD08A&OCf$)~EnV$au z?6#>(zGg|5&!+D9DwMn&V7%gMw#4$)cN2KS*BnVGKu~qT*IbED$1UL2MXB?oI_r8b z+>=_3h~4_j+)C>Wj=zIu=bv!W#^`bJusV?|%(fJoSb}X0b^`Vow1~9bpouiMlLLCU z{0_L%e7%DovQV0%XT_rzEE&a8Yhs1KUC>xz3AOf$Ni^wbOfMI~xjK6X#bQR+0IY@- zOx$l0<&3-wXd7I*K4@<&^wG|*f%FwP&k|kfmLd3Ca5&q?Jz<^(P5%TDjmIPn=ytDI zZ^{cHFd#LGOk8B~RUGr#T)+vZjFWVLR}ere!Q>4za^~VCROQd*qevgZ=EvX?KNoq= z7|%-1#B-SIV>~LHwz3`-50U7jqHbONA9+$_qzOB@{%cjf4!kA;*nuD*6lK8gpM@ zy4n{AFS;)Mz~Cdn{q6nN%%`osAj+q-7q+{r@g;#6Yjy8@BNeyct@zcyBA+t z3vQ#eLE zUJ}=s!8M85RhG&!UrSCxZk0>UdU6gamMWF8>nc#^Y>CEQ1?rq5DFxB1K%H|XA^s{*=RB#iP^5DEpKvb79S393CdBuN z)8nU^Q<3SI?HUxWS*f%xm7mg4gu={KBml>@b_mR#`8ujzdh`H)x;1^BK6=Y*rX9gD z`A{A+4}Wg=wT_Hau|+y9xQ300aE~~~odgC5_aUU7fK{Rq)1#uq+q>R@d<46+0IS3;nYLM7GXOt-G?YLdZ2T= z>q3B{m?E}|9gI4YU8X6ike!NebkuM(;4@B{dJG7rerk;`ClSS3{~u8ts{rQj17@&s zS0Rj`JqP6DrqVd0b?WJ{(3k`_+LB2?cwVJ8E!bj+m)lci)CVpVoPwW@40>KEr|kczdzG zYQta`Gwu!hxyY=NqHM!sVDUB$?r)~O251m50-tGA{Z8SGi)q{Ui#(1TKTx}loV(L7LXfEy7RrfjHl*%}*Ica+VR8J~WYLgd0YmH5<_TC^I%vpAa} zWi9m_>*QW52c{C68&(GSQLY$P&kLh^P%kyNGK9Uxq}VJ9&U*50TzqE4qSUw6qXy~# zK%}XTD4}0%#TQPC(ilQQah;0GBGiXA;9^j%pay3Wd-{bh9`EWF1@Sn}zvC8A9iRoD z^cuiq(PmL$~G~zDo`VGJOSgINVC}|ZS$PyWZf1f4mcYyvt0f^5?|a1RSz~8Lt4v?#{D7Gbda#k2 zgQu%}j}iJpco`dU5<_9+dW_%EzqwD?#e5v_AHDf#h2nq`dRNyI8h|VFqQxsPc-*m8n$MS$Z4OnIRWZh}kF> z@}5f^uu008%p9$<#?aOP+{p5vrNz$4keagN(L(-=;ct&aPeZl6Ssou{d>Db6a6Z{U zXL%;lj1xfclgR3p<(Wmn9^f6ManPORIhIAiTc6Fg~rS=e`OJ8Pxxjzrp9(FhlN>@)s|*_u_b zKZlW_tyu1v@H^OQ-+A!NNj@03!ZU&I=dVH8I=Cd%0lbUEah?f$T~=hF7YmofPu2}$ zaJ5lXc*Zjk3&soaDLL{Tgy9l)BChl#GiN7a$J1+I&#xCjNE-e zkILpbGm*uZNdV2@wHMfW!IWSdRO&`05ke6D9)K#^CsLAS1{pa52f(0Sz1UKc<%rq7 z^Mf;U+GQ62f-_k2s5`4fYh#6TpP&&R5E=OghGS@_4D=Iwl?9j& zK~iq_xOr8weIhJQLEQXSojn6cA%LlHwhdaIPmcqlP|b-q8*b`n6&FnFBuQ6kbf1Zh z)nxEt)WX8{iw%kxnS-5BaniP`F2z_mPl%9Y;6hkrm2E&X9+-u1w8S%hpc(56aV@K4 z9GcO#`Q1t_tNA0A(0-PN(%!52wC8ojx4E}iOET(&tWNDLyF5kY{*psco*xWOsDLPTt zJ*N2HF{1pb<}*nzjKTkh<}*njjlnP0<;^5zA&$f>c|!AP-Xg`1Gtb?kYX!^MvKfbi zAza$2^3oYn?wRZ#CBFsge)rKNpN=R_g-epdM!deo3+`lg z`kw{y0XXOB!g$f0#qN-I7G$ zg+}Z_NNs|%bTrs;fY&QWwuMhn~1I!QF~I!oPr%al*! zxIeMDbFJ){c-XQM)nC^UhIv9hlds^3v1bb1*TLWxwNCoD>tf{DxW7T{an}Mq4deI} zJ?^UDQ{?0fz44UGO(7>vEkETN&z{R{z8Ri&jpyrn_WO{3+BK8IoyDwX&URt=+^Kxn z#2hEO%0WFA>~PBw94-k~lQ@{h2q_Y#M1~>FHc5_6vg4b84a(BhuKizDc^{@`{ET5X zf@}a*yQW7QfYq)=G<_4Qz^QQA;~^b%$+xm?XLU9|zY%n$umfb8sX`poaT%fkm8;K{G>kUG{(EqqhsZDC?7snW0Klt6o&oYcfcJ2!wFQQh3ju#s~kU`-H zWQMd1E6=M^#(H4My>JOJksVL4s};BvS; zhL4uxCaw1WT8`h+g3Rr+5w(@ussyjqT;}t)C0FJ1Gn&qPzCSLMyj$M=Qe3Dp@>yl` zeCGiz_KwPBJ}xkV**xDlE&903cP`}Pawn3w8%}2PV&|yGWwCSAycR7TMw!gk>RrbaHcu@u zvH>ocZPdGt`D~*GfcL@qLZB?A)aAg=r4*a(cOBI%%-4Yb3T_gc<_{gRFp~-}A^}Y{ z-3J}A>9)P6jbPL>;b1jyQ&XOa_m{F63;Ib@n;M(M`hxx90g3)x&n;P;AG;f9P^m?cY!|x zC%@-WNer-%rt!|yN zf+?E>F;xjz;%q;E7{@(YauxjpO=s_Aoes5$^+fex81#E5#T0M06w9|dxqCJDD@e+v znoIf{aiMOBi*V|fV%i=%MB9ou?i&_Yc50gZtm5Z#GNsoqlI*z-< z;>vyp!~QXj%Q`wLtlO`v6f<>HhQ`0rWo78@>kQ()us%!&jCY87mB>3#F#H+A1qHfB zjCagnxh+GvErgRbV!Wf6HR8*_8%bm3AMfz9^lt_}0+-Y+@>JD-1lUjDa@d>6cett9 zwzDTGEG9ZURPzCtzlO^?QCq<=sp^uj*DJdu_CtD5I9wbW=;mH2ULf^PlX;wizRy3+ zLfR|)QU5fT(xy31%v53O)sglWC_ePL7-;S2-lA8+A20)JR9>uy7XI)t85k$i_<*^9 z`r4-9{!X}=0sSDAN~|s44qe--Xb(;q*Mjqvm)TVB1-h%?XxA%~_m-K$jz{ zRV$KH5Suijryy)QJFOWARvt0KZi7acBxgJhsF?0WEO)>qF_RDAa|Gc32KWnbGO`2a z5*^vhyL19i)mFbotHa`bGliw`H-z{r+|jH;Z)#C2bs^FZOq*=bZPU@Chlp&@vw)<- zWqGyPazu$URyrtW1^K|My3a1u&Mx7;Mhi#l=~1ew$CT7Qm~|W!E`@U+cUU>uW#!B7 z1O{M!h@)bi?9TR0gJQsxGoS2;@Vz@=%J=R#PC*Wsb687KI?$^gFpuHn)HpW&17-zb z4o^3ma(EiAHAJmlO6zA@Yge4st~jk-aay}#T6?wD+L*0WYUC@e*5(ztEe=UChVMi+ z`0%x)kjOVD(B>WxI^gP%q_ zKq9^vlCx1vHFa;JBPj$Vn*)cJAo@$V9P9y^YEEahK&j<)hP%ZyGnG@#9(#C1Jtm8j zAjm<5Fy^Sb=;Tt3Fy@*$EEy*j|3VvZA-XY7vpFZgDFI`?BB;UpZF<`d`X7jHnd#|+ zUONZxVg@eI1(HWbY!IIdayDGU)Hy;tq(fuCFMpnCAT9=XE*yUDl2yuF-T{oN7_(pY z{X5wAm+xMFQXKD6;6;3i!e7b?8{hnFL5jqXy$+gFIC*Of*=51VVcd|tgu^n~{0!Nv z*jzaE0PIY=%xPz&tGg4S&eABJ*iOz}8rxz7VSLRl+eVK1zOF&J{9;_8q~%LjN0>rZMn238sjrI`85wU&V0@mjq!N}&gPTyf=yZ-{}><& zYop}@HV3O5r$kfQx?9o8K46pTUaud~hK z+Jcn7&bEZ+#=p5Xa}@>KA0pU;={rG{Xly*X8 zIN6?;*yKCwG2lOflW(ZyHaGQfSSTCL6}A*LQ@rae+29_h^5b2|zXdn*B5g*itY?^{ zL146|?KW97|AYuLN4BOv(xSNM50->%F4>x9BI!Oj*_zG*Fbyv2RV}Mq(-j(JYubny zP=(dN6}LR2O||dbg~{G?;)KFV2va(2a=(fPIIC9W7n|HmG*?Y9;jM!2S;V-bI}Wm; z1FoeH~BXMr)yH#kZn&o-4S0;`drRd6!T^K2z7)$4#?31|C_ z4$Sqa$q2^C&%hkphnh}Rjfy@Von!m@dsJkAi;gNZ#Q1ScKc{oDKGH!r0!}bfRhnyz zZ917nC;9SCI;Icg0QdzoEL$RjVaC`w9EwPkqX}A&rzG-Q=6~N7K z?m(OdRbC)otclULYJu)f$3Js&A@W>n-HQxyBs%#4W)V{|I`9J)+3Q z^mB4GC5TNtMYa+SU7bB0!nV+s%e_6$Eub&5sktS&Lkh0~5agg$KvQS9y{9!2>F(Ux zBd(O|Xhmq7@j|v;X)KZ2x^O?A?P^1*3kln|jSRkp<~Xre=vrgEoXQdln5aFv6<;F@ zkHyEO2bs4&MXvma*~B^TR{%T*m-Vp@ATxRa-=%wWC(}ea_%nt%gt9-z7YwSI3(o#3 zkX`^GIL~`PehT1XBL4uwoZA8CapS>$1;Eop_&PcWV_t>x%mlJ=F5WQ1E$&yve45%jt)5Z|`PrKt5DrYvG3YktgnSoyguoW(AmX?oI&Q?t^ z#3Rsv!`ufg4L2gdh^65N0Pco!pBJaWs+_j(HYhV*hD0h7!K%sm;I+0P=zRJ_#bqha zliax3G&fG7l_F-ru(5DwfwF+F;k}xDt{oKojA07e`@nh;z|Y}4rvq^wg~eGo&qYAy z0+>SNDj-_`1c=-KBy9lzIC~qAV*$*Dn@mI&)(bi|L;M0ZJ!8xIJBx&cbt~kqXFwL# zGXS0-!ovD9fDhnQiS)KuCGrL|Y_L0)(Oi~@s|Wxc=Sn637!Q|qnU;^0$UaRm#K+KZ zn%!}>rJ)P~R#+OE0R-UO@5O0|mdL^8Sgx`VN9C;T_0=)%k4JF_p)gB#?+@wKg5drQYp6p<&3@n|P&!Je^L^2&)#7l1l3XQtP~nWWethI=vpC7aOq&VHcv9P22k>>=lhR4t0zw~&Amos6BarV( zLPVUDN6KDc55i@=s+0U<*invXaGC-=B6*miOL)#bO=SqVqd3B(;pm-3xBnQ}v#NDr zwp9L%;h#dIGa^>yutxnB@x4eZ+C;6F+4m`skKnTNb-*`OG!AsP7C{M$sBd6XFjk05 zUDUHpKYr-A$)7RI>+KQEQW?$sh3M77Iq?-Sv2^M(=v)o7o}@mpbS?{eE074BF|bJ- z_A7V|0lLk%)Fo_5aTn1n<5gJ$nzz^ryIF^BLrmLpZ z!Nus$qbdFBI3b$gcIXQB;&^5Bfu*n~+CaI~!4#KnThsMn7<=KoD|vPy!`_>~ z+fh{ezujHCd+&YbdCGV)ha@Kh1Tvh2jF6m65T+9bL#7iVNeJWwLI?>4P!Q1*NDws! z9B?8aP9Ug=ikIL7PEnlx4naZjis;olc;$V6Ro#0y=Y;FMkN0{1&-=gq`E>8DRn=9i z)>^gJs#Vq9>D~{+r2BpDh3d7#d8lTw**(-~zmS{m^@Iy)TdL?QDCyph6I44Lo0{7A zH!2#KPQAomYGyPNg_G<#{Qvkq%0b%E*pxcUe+PXoar-FGz6LVznH=q+T&e36*X&C> zN7tE>+z!ffl`bpkvw!kD!K+FX1ki2gD_Q4NtEJQhM#Qa?aZD$cEM5FyL-vU&6;pxLkd6}Q!|_lE0ECaU9=_G+{-|4&>sNVa@$$V$@I{+-S6E=}y85?-mb zf3^#ydHZL(U^k)2{#nFJWBX^(F17aWd@5-2vTDgT*+tqmNo#6S_RnU%hZ1|pZ1w84 z^Vf)rvuR`ZhOOJJ!KzmlupD5h0MTk5JL>APC8h^eUjw8gl{>ND(-kYQeP;$`!tYPT z1&85Ct=o1jU+Ac5KtJe6*;A9Q-pmc&@Jx0Pi4n9~Y-!cpEEQ9|LTby7&E5J+fvoug zhu22sTf9^#SF*t73w}$kl!~gV%{HQCYntn7I+80>*qkjf-<9}Qu0&GHwkxigDx_?w zGhC@Z=Sn5@Y?`vx7MSe{X#SW(v`Alf1Qovoy~%|I)=qK#Jte4=psiG%?eA|$c}<0m z%Xq%x8RshFs(cq02YPxXPbX1;4Un5Q@3M%kaIE`iQbyUuCUc>~?E5Mq6jPr?tXwBX zCVPPWH>Q=T2cFD3dGjy>S4^oT8^@{8@$0H(ZW+1KOALt%kRcZ&Kt51sxu;AJ+je7f%3J)OBAM;ZI4?Nf4#1^ok%?{hTsy~;V_#vZ`$JZ zj1g?f=}dAH7`3+v_`n>`yNAOTob2^XwYAMi#ay?{A4hq>I_Z~OOK5_eg^ByWF}YPs+XwzP4W%U7?{8@avxbppQ!(47_x zE4=-K1bdG37X;h9p{tu03}4pm?H{g;8_r~c&SCf@=ziOY)FM!^kg4AODJt`QAYb4x zPPOkpRlo}tdmayZd*-V3o38Tiu)R1=`lw*rr+9Z*-SUnO&s)b~womo$ut;xMg8Xn8 zZP{JDj@Pt%cUZIsE@fFr8GObH4}BB;xx=#K88W`YVU~J#rjOC|kYyxvto06*Xk`76 z#Jv_U**j1n$orPV2@bP<0}9AHP%GeP0NgL&79JuvFhHQwR}fsWAf6*Q&??ZM&VrE~ zX3J%psBW}ie?1#GhdIYP&?Z3pN^}y3SwF=)nB4+WHRrHgWg*+WgXMy}1IR`Wv)#KZ zqjA=79{WSi6=0HgSD7H!U%=`%hgt8vv-S&!c}*uqlfy{*-q|3~nItE2jOLMO_hbO^ z?t8nPf1c^$d&#T2&YWyhPk>vmNS;ld5`1oVT#{NR6MkQr z6k5B3$rq0oe98aLTjC^@(Fvl|TL3e4XC6f+zMQ zN&8U4bk({)82aWIx@O(F4Gi|%f)zIvmb;>>%lks`kvGM#b(dYSO^-ut_l^ed+UI~R z<4`!aUF8zElknrAXk97(!Ubg93#|@uR4pO#1uh;{Vh)M#aq$g~F}kCC9T4qb_!l7M zn@LO~aSBKI4id|`SfqsZGry6G^-A1A;>}##q{My_cX07`j!djuXE3 z23ngx;9T%K=?OBtiVw%A4^ENt#;Nqb#_V9fCZ+wMLHXO%AC>;1@d?T*-a@D<*cHQNlAg`M3A#wDdBNSW;K(YykjwUhFUN4zT~}tS%bNfEjO!40 zr}jUzCnAjIPxb<4?Q?KgJlU@CuB@7__-hQ8xvW^c(-l%8*cVHNEbS%k4psEa7%Ve= zU0jit63(_u2`|UFGV|{$%2hxAGtN~rMOrWL$CV4?!TtdFhg1E%qTt^nhxkB~g-2Gl| z%n9Bd!N)j#*JbtXtGRl>k57|bO~)!Oiwmfs;K?|l z-snS~PH@zl8F6oZUQnW;!j-UW$(8t1K?!}xQ+4c7e{&`3qN2tNMUZc|IhYugt@VPRDmaR1-#&j7%utvMGh`*F$S-XGu5kC3o~t-zqv6_fYz%1 z812W}TO^tvm#~b^^}8l6pV`i*%iNvbEPT+|7M5GH_(b7OOUCe zAHnV_FQ|xf)yt=nTq~3G@@oZ|#|v=~34R!73Wb2Wb0b0sPM93qI(1MvMI*t>YR;S0 z6tYd;Y4;UtJ%5;;fBDkuwbo@FDi68Vc~2+Fd8&1;?5Xl|D>pHb60q`eZ-jOID%W}= ztzT1#!#ygin=5znJd(SZ&*lpQeoJu%lh@?@Kk-VO z|Ji$^(z!tSbKvOb;!u7PUhs><3z>`Pj*SuA&V@;01WL$ZPh#XIA0v2}oHA1sBR7RH za${ozcTfQ_@`?OqU*(SXb5WwOEujZBsThGW36K^{2L0JKh`sIBnAEmB-8i%b*$mfu zv+H&7eSC;#I09CYGphVABwiK(OI>yqC0Z`T_HzV8tmjk-atf&_f^7BX+6d$v673x2 zO$f|K;s%4{f)QeW{^CrChY?v}{1}N3S-@m(M7ba}7cmR9kPY658bLMy zS;G-r>y2m-8rPE8F2GiAr0wPb5^v+sCl@zgQ82b%@O?FFY8Y29_>HQqR^u@Ety>l$ z$lu~dQri$*yVqkRU0cuYBaSCxYQKW_qTjfs1k!Snnu$ZD4I26dFAuttWafnN(oFAo zX{O(JX~u% zCbYK14C(z%=pOy%0 zpGS_rJ*>|{mrAtlXQ9)47rMFGGKvdNN_3FGHvKG_>BF zRu$S0q`A*4r};MYOn^hf`B$)IuHf6yX+93EoDq;>4IhV2^L1#Y$Ixa!->SA>hfec( zXyG+J%zqv_&G(@NYlG1JepFfChZf3V{`=5rJ`nwBKwg;tKy*6!LUh>c3(@K16VYMO zC!*8IH==DF`ENw0laEA$WAc&cbnYwBSuvsZzxYb@4=Ix^(OB=dLwqIr#I<;QC0f0$ z=<_M)%>6@us*HZV5}kRV_20=VSIG5Zj!Mb2?=|Xq`_&QwKEUFg*1VLgtQq<{r}yLB zb9gxu`yQv2+YxH2;@te(9yGXY$RfL!S|=3-$qhmBV^lga4w8=~NUpS3emCb|bHtcT z*2g=C8WxE=aI@Vav0;^1DQRbe3AB14StbTx6-B&GOtM<}ZlRb|qf%NaHY^pdpcX>q zYR@*jnzU^gYovw^X3%E7OhWtSPWBo$^Eb3ts9agV@}cqsuxTrAGl~Q1V+1V!Cr&zS zGg&XICL6WJxmh1szq0CK(pmGwZyl*^eCIEKP7z~ZR&RKe!oghXU)Cw4dv?BxwvH(o0QkEfa})Xl$mRM z!72KPtDyCLK-jkiY_$1;8gIit6*yE6_!n@k#hVlnWefY z)tW@tKmVzeJlocR2zL<61x7Wtd^XX^pqUG%5da{Da3h(rbZ? z)p_WXzMa&q9A)c0{~JNA-lODiBKl^B-}}ipq~dJs ze%67$Lh@08E(cN~GXD#y-wU$S`*x5OUIQ*6zR$rvf^P?98v3(HohHaGAeDk#Lh2lj zVY}-Hz{cJ4lMCVs_V?SMd=eF!gB1EPrJv(SX>RaaE?(g9nlB(VF{ZVz&rwe`H7mI1 zv~6T~&8mJ;lD&}ZzXa)9lPdpA4X<#tD8trk-T;yuOk)nkNYztApifpK_QD)yCrdPU z1Q`*3+X2U&iX3;2ltB13-W@@`Xk1B!r5rHlj$n}ZFp1Pq4u2=XWk(KN-&|t4tv+|)Eb^&P?WCf6g9Ps9#koxJtFhRDFx|G9T=go8?`Ds!Q3bM&-ciniF)Yk;LW(^=~2wo!j zf(5MwRQ^4W@B_*J5D22qazq`t1}r%MZ2)G8dNJuv3tJ1QPITTua*G40ShHXsCViiU ztphYfps$epxIpn%n$v@<^!L!UNDv3CIX$QrWCp2IIhxh^kHsVjC&HpLgXlb9MghrX zlvvDR-cI6DE-vP1QK{4ifm}(7aDbP3h{SbVT&u(vNZicDjY>RC;vHPvuEa4C_i*tp zC4NETOI&<`1H+iU)3HUe9Gw}nI1%hgEWhP9P5Fa@P}KB)PZia?$!btgBR*BH)#V^v zmO)^Dh@&vqla#QeE!#<{L3c;vW+bzxk#X`K&-s1 zA$5_3s8E$^x{2fs0ib8( zMxb>h8DJWofAsBuy_(cj9Cdr+9*O}aABz+7nfU43UZ|R2Pg6j2Z4xg<=TUAinh;CS zUus?UZZL&(MQhOyIO0uuha+ATP=+7xXRfxyd%zzc;@wC4H*-L|2mE2`@+lkGcEX`9 zf82HX9+C$I+BOwXrSAJC$*(w&iq#4B@1$Q5Y?JqpBm3wsc|AnAw@sSL2EB5%&AZEE zSD{(>-yb9B|C?b|)KBdrW@t(w#6IrZ$x*LTRXwg7em2E?JnBvgJw$;cD)bQWVY0{BxD_$o&sx-LE8QCKrRr z(eLMe>e-~B@6gDzYA93OP}VGpz2>;K@5T9kaxuhJ=6%&Sg9#^Ew0}xXKUQu3eB#=g zAFILE$N9ks`u&7odAVx%4jC_S_pdoxl#%)=kiU}plj{7>_?~3UPX>XKd*V(u!lqlP zL^RsX`D|@=F8OVoD?;7taAwb17ECD$?K-GkGVFQVKZrjB|C+g4M?qp<@?}+Ii5^*p!3w>*9DmKz@ z4m8I?-L=nqx1?>n&(4r7UJ|C3%Yl ztpjAIBJU!3r$9UTV20HbkC6I=g{%Q&^~85cKI1?efLTRxob)d(Y%QQB>5hLU`H};v z*dW3FmGoaMY#pHC0%b0v=N$gdb(4UN5o|2!(SlvecR4ch3Z{~pEXX>$)pMzDjn*O{ z3k2Q8mpH0qv{sS2fTOPd?T)b4SezXvq@JvN4Ddq})TfHmInF#sSy~S>j9@yJkX=9;dii7+w`?^QIarL#HA;K>~@hDUnt$e{2k~UN!!j+P* zGKDJ*;YwBDjkOVl9b1_dUGA;Z_#Ls;TQ}I|&9Zqm$6r*Qgdd;NZT$R0Weu=xtG8&N zO1}##-pVoi2F$|O30I!Jg<lIGW$P4k7!9k$GTmGQE_;WR+3Nr*5{V1E9g)s0w{5o9&dy#|g2Lgv1NI>|+jI&&Ic zBHvPI7^R1DSPD(xVjPFJQ0+XC5c{og-k)9GqW?40%$buoDV3Vc#XRnq%~A4fe1l>I zb3nN!?v4q4cT>LYK^+TrL=A@FRUfDSm`~jS-L9f3YdUHfK#|2_PBp-64H?PLHXzWB_ z0m_)fy3z413O;xPq$^&IA?q#5Li!s*TCUTnG%||AxlXYv@;(MOABrAM3f)41Ju0LD zeQI1Nc#J|HPrYA-o&f$R1wO+u_}sWaKPX3yab9AsCsDpKhRK7X3r?#IkU_4B_1zb8 zcz>~(*5t2zkCwj1VO^EKbMZHhMdDC>d{giY`1!N^$TFv7Gc@985!7;M2&n-amP50- zn52X_bTb!k;;`MF8CT~Y=f?L1`-OnI`)&%{#SwibF3?YRO9sbz>aO0&<~S6+B?gN_ zfP%~zb#Q=Yd}qb}`l4KyWj*aQ?-R6kKZl(FKFh^7IP7%qI2XTELesr}=HewKG~N4G zF8-o~rhE389)b>bx;KK079}*@yON8`IlPky$>}|#MGLh8C_@XjMHvEkn^3k|zdbS> z)LxHOrvVItKWcQxp%+UWaC`Ma_!+M?*{<;1kNr?ZFlPL% zPy9oA3KGLIQvV15i?uSi6IIwhJIx+OKdMyTA((Qv7?a8D;OyNH6T58$oO?Zp{W8RE zWC*_;6FV`FH(Zn_b`aBf%=jCH-wBuW{N77?LGnG2jZI(X&hSCq-tRJ>@0R)a%PsT$ z&z95mCKUV5UO)6jvEKdi4_yxl%{5+={vUy~pW-lE_34FSy5Sj;PjjSsVL{q1fd7ir z|KflLRuNsrsFlF$eG|2>2M?Oj41a(J-rdd^T!^O8uZqa1i3Q$<{nNz)Z%)Vw)0-3N zgcHHWrYEV|^vea~xWHeI3*o0JUHW@Y;g57*uf^8#zd2yv6<5=H#nlupn`ZN0X)yPN zmA2~Kg0e}LUrq7aX8MA~%jd0F!54)0mg|nRKIQ18ZfhO|E7NWTH+B1+Mtb zG+F$L*Kf1#HS~l0DlxVE35sVgaIn#St@;~&SFojLUBJ7%y>Oi0@=KSVKYx)IuJ9Wb zAql?)tZwo41@q>g!-B+meWYUHPA_`M47!$_Qz(-9AQ!1yIq}MS_Xg(7yNCRhWc@Op z1K6Zn&b{J-P3t$z*Sd0gY_oc`FL&o%x?P{fN(r9&O>(6d=&#<)4rX4OvTe=A4XgD9 zIWL=SP-m65Wv#x1qNi6}R_5Az)lkVBsHJ8O?jqs6Cl)qc^YahA39&;b9UT5HEb~^1}ZueGkoqr=CuPPa%=z_=ILS$0thH9?#Hm>N~ zcKdqm?cNrl`|`US2KiNwdgg$^dREl743qP=7R)=DSahlPF%$deomT`80lho$dr zm7=fN|M=dr7vJrAosf}TS`bj%BlU4Jy#prTU1A9xqd{?Tu^<`|C&Zkx8+uiwDmp_u zYwy3VQ0yobjU{FFJ?EE-6gR|tV9IQN{vqKOY`bQicWJBm@E7{?3I~#R=^RO3#WuRl zf#j{R)SN(Kv;fd+%}DWJDXB9!EPdC-^u47}=GK?RGM5p@H3V{k-VoF-}$t zAC41N41W|S68a@Of^%Y6$LGG1hPHdj`#BPV@@!Px`PFdJuks}wiB^}r(a%4$Np7Dg zP&G;vxCflx!T|-U7Fr5iNq|&&*9|e2w0OUSFwkQ?q3)Zw+fG5jqTFy|jm=NPSwTG5oZcwEyC& zOJkE%ico}NytkM+;}kll27#_a@Nz zZ#-z<+u)XbT=(~Db$Q){o(APFXLa4v_mZC8Pv4iwd;sigaD(0kHz+i?C=$zCJ_nK* z+<)Mq{4dg2Z>yV9Zt1B+yo`-FmYXgtPuG0GeY~Lz-@$17sOT6l;#z7J4O+ zO@c~MonF&T!8=I4oum4C+IkYCD&7h7f-)_%nEjvITb6#W>zJPOmKE1~EA{phXEJaM zR>wWR5fW#+;>0~9%03+@l3S%73U5sbfz;`oYNQpKX`%KeE>a%kwbbQH?4ruc@o=8Y zwSK%RMd*pRld44A`{=>@I1K%oG)NNnIZ}@Z0wE_&5Fx)!>YE(4gHtlxwV zRz)XgRnc!K@GFjNML|ch^#xrl8`Y~<)}HXzfRa~VZ4ptrsfO1{#67S^qb86LCQ3=l zPe1>V?Lke08m{CvY_aV@&2aVLR8o@!kvW(lrmi4$rXVp>YX=It1IXnZ^*u3_&Q<07 z8a8dkFl<`S(|mZMeru`KJ^MGa@sYQj4Y$d6apOBV8jr>|kArbfqn4%e?R#$aXL34S zQ5-oM{OcWalPF-{G`HEyJ{RAvp~&wn{-oG%8O{Ieq1Zn(0FR1ePArYdg4wq(6{?Zz z;R&ZseI~L0@PyS!F#m_M*5t#0L2Jp|;8XJP;HO2PigR=W7(!K!YIm$DxO3?`<)A+@?|_3AZ@E#c-Ps6LKM<7N;q`Q(fdg6gUgTlk$i? zpH6jbTXWT#EgP8ItY-0G{bt^XnL5xSI~v}}sp6BIQoT+u)5+AmoV@VMoGQE5Y@EMB z-^rUd_nd{iVL|!f!HPd{tDnzUz3jZD=Po{X(aME$7c5*rk*f3Ou3WhMyk+qnkQyMQc(PYzOK?%`E~a=j?&1`$))tw@*A-OB;%Q#J1yF5+gK*WTtMgYZUf?z9 z3WA&iWxQr3v?IMm7w619W8vJDE9b8A1}Hh-T@TdtdFL!#xnSWLi{p2OZ^<| zE^YKsGp1*LV zKAOm#adV4}?j+$bd9_mM^JxZ#c~wd{O0bt$1y`+Hcn11L*N}1H%JU^zHz>Jy>C%N~ z!n9XkEl4e!d(IL{xLVI$b=E=w^b}ilBK&?h{Bq=$4Y%>cv_{DfB9|#$c) z`uT_I-QBN^wV$?kZ;Q2Msk@oGUk06qtsAb%sR%#)MzzCIrn0ujH{>puIoh9}Ez68X zsXv3R|0YL9GxQ&D@qG?VUw^BYXX(q&XrbT@QCfP=oWecXcoFktn{X?bbCm0ayla!i z#S*Tt9FLBDor1giT*OF@8{)1#D}4F=Yz-L2mgBz>$o+={w}oQlpT;=yceB^b;=n0nV`?Z zIy|e>0diGA!LvF%s`DV#3=Mies>72y$`}C!^rQ|C>L@v;e{Af7Iy|Q%jK&A~=X7{X zN1!%{+wW5?dQ3;i2KmQycuJ=lh!-qnhk|>ah=+9kg<3K}uZMJaMn~|npy(ML9?=PG zFI7SQ5gne;5x5ELk|%U{Ku2$_9LoEopnB%NctB?=Se0B&6`6j!!UH-du0;>%sGsRR z59mbq57mBj!YqBW9%#LQtcKpclHB3+!3w=t?X`TR#=NhjJ2Lo6TNIze(Eb0u(*Lo( zQYaUwz*kZ_=PN0Z_)4~5>?`TIz*kZ-?<*Cga=wyag}zc#XZFI<9;7eTdf7`ti78)Awo^8v>#dpJn}x3A0<>2gJ$ zh>Mi<`}|PJ_?8GSr}XVK%R|obzBIq8VW6P0bzWJ&5BZdgYdO8(MvJ~**>Fzow&vb* z+u)MM9pvgLwXOulV!zZx`aTn>AL*DPW zN&Rmb4|=ah|35gC_Z@Rw8WX&f2K4Kq|4HyJ>HoSbw%FIZ`PquMQ6$*UDc(pD3c!o$ zTs#U|0lvU`~-i_1I|J{E67@TK){hLqo zl$OpeHH=|nVId}?fy^1DGfStJF0O?^m0oFUMpqH>oy?3@pPbg}#kHq5x3kkGod;4p zVBbxq%|E?4SI{5bTj97ZMV%=hn{*;lgp)( z34*(9iP}Zp_5MD;c`wE47WujB`o&(*v`5>DUYmHXf5uVIk%%`3pIJMjH6@q`6iu~A zr1PCthciW;qNpWT5iss)3BZcpG%1B^6?v|e!8Oai@~IL&KhNhN&jAXY-Ykqv9+iat z{YZhWFA`rw!*rWx*=z;HQP}c6ksW~?=k*QVYynw|u<6^f>0NQYmZCfR>qoKZx<0gq zk^w8qj{8x$mE#yZjbV@uy~&9zW^(eL4MkGqz4aDf6(qu%1AoJF^_GsZ4CNioIk6w% z#zMKeEm5k-=UG%LPoYJ`RDW^3)qP1(BQ6p-abuybp1~xksIO&El$OHnSRxv1?eUOx zLf2R<;>iGLYU5TXCWQ=Att2C@be%CdVWZj|){@GL}<0UWc)0 ze;uPbzZY_?AM#R~8Z8sY|4$ zfEf-}EnT(OD!>|dDI(+nnk;s$b*f{a(>+4h8P!2f zz6RTINn^knR} zr&%cUOc!@C<8(?~2ujM=HO6q=T3>{AN28GsFX*4H3MvK!G z1IjUfxA>*%;XsEQsl1jLgpvf20?1(0NHJtcTnDNwFFUP8nk3c}!-|0LS^XLw4{FLJ z-oc2R0y z!IokMi<<=8dh^nCd0=r_l^m2SX-$bMhl!0REEbqZ2sT#zQmaFArb3Xsx7wP6TN4ud zu)~}Q8D6N{okDim2aSR4BEs?~aGjft6Sa$+qETql}ycUTrDlxRU| zwWemcAt_NvWDVD?NS`pjDGqKdu8n=QK`4_#it~}40)+A9`VNDk&Mj+oqhXlS>UrHd z+>*~aWb(R4NR4V_jT~6sot_i&WK;_RW(AM zN>eeQVq`@vs=r_+k(W7RwRLM6$`PG`kq|jj&8dWmL_S0Vc`o^g5n&{SLyU@-#BNER zHZ~L@f~d<`H}UN)rwZ_tCGydarxZtDL@PWcRg_8uqW2UhC*6bq9J^X47r52ASeC`M zDbcdoJh}S|T?u{Xc$Ya2m-p6hy_}>(7gah*=;a#~#!;#Zc^?nag85#aIf3hV-ZSdA ze~uiML6+cAo*sFYXr$!W;`)`$eRC?cXpoe;Zt(KR;s}u{n$sk0$b1lL$08heqrwqY z!j^C=$kQ1{<}^pjj_QKBeV90cE<~9dGBDN7SCg8FKISSZNi;!-Qg@S1$*z>3wZPWP zOq5_UwhMvf@%XYZB0R;)RJu<+w7HVR;`wY`F<(MY;;%J@onjta)Fc)*$C>)XjcBlz zCmwgjQOrhqVU>|Xm{HwS+%F)_$tZ2<%_nCs2RI`$Fd1kV)r2ywQErMVHCND*)5}Ag znPTP&xoN7^O>&)vldp)lh}gqZ{_I456v?HX52*-KQvIFUS1y^H#yHwpKcf+JZ>f)<1sTvGbTv8MKeeGS&d2Ym_f61_s4+KDd9qoF! z(90iUc_pW@GESSt#s~K;X|;8XnniaNN=bnzCyLnB-J7K7v0M`seWj_gSg%#(Bmy!@ z0IL%MbJIft%SFacR8 zOJt$-w|0#o7UiNaYGMY8Cv(=&DvBl+^3qxOs4w4o2hnAEHOm<7L`~(oUr77%gop(z zNjO~vy2~!9#r^5!K^Im;T!Zdd&F)A{(5;w!ZV4gQ{ZbT(Qm}Z&Ed+^=TI84(Xltk7 z3rt{?FgZ8XD6H?b)>NblOPvyOYm7PE$`hLQ_C6C5Cxo!7sE;*GVy!U)YLbo?YCman z#(mn^avae_@6_iw;vDFBL^n81603_iprpZ)Qx)QGK4O)hkr(;lEp99^56?$YM2CUJ zn#D=upd!TC*;HURq#5L~xE`pActOR?EYf7HZd$5YtZX<456g8>@>4KJAmkHUEXwA` z>4+lK&?RnA(N3aFodR*ZaBYlE^k<3MRb9?Lj&a_nop##TTkP&Ji%$k)E7~@8N>3^n z@U7)DrR&D^9iZb~$Zmpj(b}Z$Cb|jsq~7Xua__-ArC6PwtR_yeLPm68YK|TVPQDMP z=D@aVu4AV;oj5J;$4OI8FDA8Bl6JMF&@;%-gT+PGT?#XuB5W@P;w4)RTD1OBs0?N& zQ;XA)pq%?25Aiwq>BijN_}Tc`yuzFCaW&&u&`(LByD$gOyDw+BNz9qa%G09aGIklX zD7=vfSgWCx5cUd7;&<6+ILjO%(ndnUyGd^D5H{fJ}}QsWwaa1%|Cut=B6h7g3osdtvTg=C98+>9!3F)owyV%trTiNn;ADEQF2pPEOnG9(SAo>enqk{z?~Dr z#04!@FK&z!1rZXD%VMWq7fexG(+P8v(dKwwk#lB>*M;Ks|2WFipAzgX`SmhfP`Ze( zF|!+sfHAY1ii2Q%_QAOx5@aa$LIh=03Mgv$&`%Sf=-=&kyh-jg&*CKPRKOT8lx_WDXe~)P@_}md)c6Bx_g$y)cK)VQWuu^VLCHA%tZW06YYP=N5jmruq3)N^rK6nheES4 zoJV$bcW9zjbz#JHJ+Dw8)1EtY?$oK9_hkhs6WtLG)c<%}%+St3YT6N+4PlMhxi91s zzTCVo9B2Q1m+o@OPM2!u22*)BG_|%l{{tYmF08dk-a}qpn6ARd^!;UYQB+!}PWMNp z)MmP_*9v}_LoYS7lnV8RC2u6pF#1z;n#n0RgOk2!V=FxEL=~F%QS9p+ztKG+yQ$@& zNpCtQe?BKi=btBZuBQLBpj;dBjBFYtc^2Qc&~~C0g8QgNFYUFp2fyRW)03dQ-xCJD zoK#$!R2&#;jp&dFvE)Rxnm1B~9w5?3i)_v5pKwL393`9rR`I=Hs7?gMykLq>wn=YB zEHk&L9i-qa#}(7uLn1SNmAV(1`}Q8Oxf^Ti!%D8A?l2Xt3d=0;GJ8upx)8ylBc`G= zG8>PD#<1baW*H=;Lc&;A8gA$tVuVe|QvxX>!PsEf;Y+RJer zVcV>5+yy#=e`V(mF=!vHm@C_B!}_Q`96l=?wkoVYAK3F&zK5dkXsZ&o4Vh&xCF&(z z@KfruHVig|B|E}kLQhy?E|z{ZHQnYKMD`Ubhi*^Iis^QH0HHEV>gp-OxaopAb#yW^ zTQfEH+R=dKRcG2d!gBMYJ(-%Y(tOxI77loCShkOXJLf`(5&Bi3X^Gk?)Je@#BlAlXO<6~nz9<|OHHIgR4Vz6xJGEca z5!Ri??Q?6XRy0}=_0ULWLGRXT=(L)nuH`=6pWG3*+C-~Q_HDHz*Q#tyb!2``nRN7{ zuzFjVo)W#?T9byuk}_$f)+fX2_J~fV&5NKq8dPUN>yjf}nA1cvQ{Mwg;~sD1rqjbR zQ!ZWhg}$vH(+xNHe%y--MYDFn$`G0&qM59!_)_00GDB&@{1eDDL}o}2y40-iuB{D6 zBX48CZCY5pOcyCQ;+une#e7G1)3^_!mq+F)ZcbN67JDkHMI%$?;!bue`@UYcB+YSR zOZO{AcsUP>j^(hL!<@&Jx0jQDyI^+opEW0z;&M0mmq5aMnSY#;zF=j=Xx%?YMw%Y#Nu^5`_PO$!TZ0F7ck^XhGo{p{IIo37~i*@!w zuDqK#`F9BRZk;})(?dFaNvCh=^aGu2pB_s3^yS#%ZLGzpNhyuSH8H!|!qeupX`q_u zOJT}P4ch$YL+~w)_LJSxNrrh4jR&Thp<{7V>5}&iB`Ra7#dR2G--VRlR1~EVI+AtuIxoBVGKhOdymKLrMBBuLT z(G98SvggUfsfx_f<3(9z(Uut7I}5Nq-PVP6M<&Y-KM&GVEQEmxWb-~jzKZP8;OF-G zK?Y7;j<+OfTYW;lO=3cLA;;AmmT#r+=gK?E$^VXEKhfz0onF!D-*rltajMa2fKC&2 zvK-ttFP2Iv9`ngRTO~JG10ZuDLx@4uMt7|wMw7ydh)=7Qlaz~D!H`FCQRW@t;K=M0 zQ%Z3@qFI=*4g8zW?9Fsi&_w&|!WJ(4bs^mJO;tzNP@v|jo^V*?cTzlOpDx0JR9y*R zVl324?{F8_gw->)17A|N(YZzwJBJQMvvjvxC%7t8V_VvRm9$N*4WlWNF>4<-9gPl0 zmpO;YL|2D3DB0*d@v*X_7H@mIbYD7}ZTnTy7LJ%4mYfM&Y>(;iMd3hdFO8PsXf+|a zQEfL+v;C;Gob>dhS8VI6!t}?Xg|%+!=q8IvI=TnKG|_tm-P{OGP*v-0)#$~2uhzVSrv||2ut69q&8m# z)(_a?rO`dnkYQ=ZARACfX!lYq4l;(Ue9lGZV1s<{T?v{bS3GH(5;OU6=`eT|bCbMwul! zJTUCm`@u^4%lFa5w!^er)xIxUZBet0`{p5QrV23m8cHrQ5ASWWX!lFG9xD2}MsZ{w z*}KnTrFn-njjfTSZJ0S#U6mb_%c-8$LB85>$OV>?Y38#UJpEA+B9)nwk>V-Q0cL7q zrElKf8_geDG(WQUHAn`7&5sk^S zuOOL!bM4$(*v<=Tr(f}5(9>)XU1n8yfNrZayE<~LD~rwn^{TdLv-+>@|JiyY1zdVF zu61Poeb0Z<{hM)kV9bB+flDQkc@s(hp6Dk@pDk&h?_KvnTleqw{1*~%x2yZNs+-|t zC7=gbqpe-6|7%inOoq<W}X^mPh@=KHQSE(Y#k76@v%un;$1l{3CtnDAWX2jt_|9W}x-u zw{+Lbu2C_LvMK4D6&oJ2lM$14B6*TRFg+0G8Y?0hytGN&Qpp5+UVGqUw>wdEQluxI zO<#&)yg|y*&Zh6>%KIoMJ26}oYsx=+{;**iS54ZnWaGw3vz87UX6s%M*L~vo_TQ*T z-!omrVe3y_%$2u`lm8~cZrADNxSqNE_wN(FOfjC8@}_avdcyTwd3SR1KPcD(I(!o1(S9nxqNu1(Qb6h$aF8s>)Ux-=c{q~v8#SX2B8oE41L zK1!lm4uyW0X$r%Ja6}~E17~78o({^Uit5c}8LM*ZI&Hu}SY(m#6z;hGh-H@8e_!X! zF`e;5^tUP;@om-r24VzMZyJ3XXap&0{_3vBa6Z)519mz$;OS0~Nt^e83%3lmQG&I8 z*lGqdmo#fF3P4BL!Drs^N+HHJbamgZj8u$?E~fVtVa1#V=Z~nIbHDLHbYcp;QraR96$3 zuiIIZ-0OahX83iJ5h zeF`m@iUJzV7PsgYQZ+@CR;f$&v9XZyzAhuG_lx(2@&Lk}Jq*D%->QMHEv||^q%mP_HcT;&STrdI=an_hFKLO#JUsc5Lf z*sbBbjLXWfY?Ec|Tla#&>m#;VaZvIqa$pJuBOM`B7k=q>;=g8yC}v7}=$nC3a2nGD zqkF{YP6~7$4QowZkINxI+-AOheVb*@W19F8|HXK{#_$V;)p>c0jUlhF^u6*erj^ zuID0kC{Kyyctr;JhlC2FWTYMMLajE2Bi=<}8Iuv_OWsjRUkg}_2xl@S%*a}7q}^_0 zXR~}UjWf)2)s7JLQgKh)+b_kAU7tc=!HG| zG}ha~l4HbqDfVvcKna62%u%ExG9TOfSeR*H-cOv;ibbn<8Y_?&llrV6)Bz3&0!SY; zW0dw0KKleh?u!wF5ttjp6svDAdvNr#0(cNT9}a%108qYMj9+QFb6h6*ZWBi-U$kxe z3&U_OM!i`>K#cIi+Pg71*GeOk7w8ir?twR>2_{& zVP$xXtVzQY*^GD4ryuOoJ&O+u+dakL<>9V9p~OC@w5+QlWi_(L5^?nb^3{ z2;)uW6k%;#5}F>Y2@0?j0C)@8TI&y@A4Ulcf&~^EPN{aCq8oL_6|o6BnZllsz;4dw zFX#$WPs6JnVX0Xt{pg27X|8cbICLpB&rr#zOJ^HEK8MXEWP?|Y#-|^iisxqsGv1_& zmk`TU@#MR6V zPvr&|J*hj=z~Ww$C0q1nbFviuEzpEUEa%am!Wko}Kkb1bFgsX((VN05`|lW+fLYXC zs+N%|!h^k82ejm<8P8gg`Bn~XTQi;6B0@xF7uzL30Tdhc2fx%k6@u>>{l^<~p0+Tt zf>AUIo_z79rY0&vyR1LQ3h8wo;6vaGUr+q zAad6o6}h0#K!x_d>;ZRMus>9Pa0w?HrIzh&0PDn6-`Dq8H)6P#OlBy0X zHZr&u+lg!4kv7VmZLh7*xQZ;*_ya&&&?TjvEH3Y8Mc!l*%jOc9&<220&HS%8s5;uZRmm5L=RGC#hak#j;M=$~#g(Ko>3Q_c#V z01p|r67$Gzhlf%z9={C-Vmhb=h4$3d7)ve-Z62YUM_AdgLV(anZ!H1OPiaQ+U)Vf~ z9pP4Es&oChAz*T?{%kEG>UI&eoLw97)XUDz%)g`NY2ySv()6;#{QX*_3Cb#^agsrq zHAOA$njm#r{fVp8;>JZ7tpt0Y0E(m@>}sXiw@7iqmzWI12k0c3rH5@{R`~2l7{}B; zM2t;lq-BmZR$Jxv*s307v^f@Lu1I)U$&k?A7HyhprP$uc|l8`3g{GawQn& zUkC`}h%E1~Rd-DTVW@%T*i}?rPavAu6NTPgu8>)q`Sn%Z0+2pJdaU`)RZOR6g4`0z zyaAdY%widhs7^;Xo)C}_pQY$fHTQ+)-trz?ak&Ix^a0z@C$8jLvAJ64=XZ8d46MJW z>1NPmSLjJLvPr`{ay{7LwKBv_v(s8qsb*Rap1xrLSoU7J+K-;LJ{@B%Wc9&0{&aAe z9pB+$;sP>4EqK)MDLX4{R1an~+YvnV^00a=$rWtqKx=h{jkCha#Q^A`i&a#a^3FkECgLKg4~Sos#jSRc&jA2Q-V*(g~ZO@|{}bt3@1Zk2n@RX&o!g z?g{sI;h$r(tgVU;^vBrD&_d2Cn2P88HCQ^xJRAtUOZu=_1c9^6Ez?hj<1}#$qp8i| z48U!jOek>hX3P&yX$#w|lu?J@PS8!#M_q{CB(6?+EF8gzjOL+6WHVYi!&A*k?Ko=Z z6VbDYZg{k_Cmh@vF1cIthphDCS=>vv=Tp}Kx8j|)fixUmnT8Q;HG;C6mk6 z9a=53u{*8xo5%LzsIviL3PWWUGmk&>H;y){_VuBp^-SDgA!MD5mJ+s0*jdTnt|dU+ zP80$mK}TA-Os@*ZcOpVRRj0HJJOOd&2!jLGp9;nFk$B8;?_|bXR7gTfiS^nhDpKP3>XnDYUY)E3BM^HfuZ{;%cYO zM!CjIRqtWq<)$%MU_E;?W}jB2%zJ1Z3TSp5o0raTK4wX19~2#So(mDWoSoX|<_O*F zcN%E!rc)yjQ2Cndl|bS`RK3LE;@a9q>#S73$-3#lmRJEwvv0XV`z2VrMi9+4oimv! zzlAy=<-uJFD-jEW;O*Ka7MVx4Y3IbPuV~tF7^k3(mIx6pwdyTiQ=d*uU<m7?G@`{ji4$kc?^zKoXNChn>(rIz71U-X+M2Zcfn2*&z~iJ2P`)JW zan>g0wGqmDD?IS*7p z>HJQ*dNNXmQMf`|0v~eSDnCpm!{19{37A!fnOWSb-K81aPIv23)K?R;b9C7l^J%t= zo@_pKJ#!!PG}oojOU_&Vf3r^c+~a{(LcC(~n$DjlF7OqU(wt$QQktt}`B+wE7@n&vpM>wpnu%Vp41VhL}VV z%aw@VGlX8t%tL6aXd@fG3y^!^IwAK#a$@8j-rZ@nO^x{=d)yk#Pdsh{1U1{ERp!N% zr7%+vjKE87?ddW-EIkO-(z3 znlbMVC6OAQcd(JS$Q6Naperv-Hy4 z43b|^G#-tg4LVR+_|BOcyM6UR!Ik!7pvzYx|Sb*eNN{ zij@#F|8gaUM1~BbreN~bc1(xebYHuc!v|65e=WxuHn(2Y-s#lDK0*;v+U3!wQC*E1 zbw{bO+Wf#0_Ak4nqi+t;kb0cOH$Syw+x_S5!#bWi#h2XV&X zFxH6lfm6SN3>D@c+u(yNem9$E84;Q2fm%i%%1!GE zN39X7F@KU)0&#A~LrW4q^QCHh zli}2A75bA>=o=WISynd5y<=~u&25#oUtN&r2!JIw(FbbfCmv>gSz>-+@U}M6ff~(y zx7s>B1s&vw)R^DzM(iQS%Zyz49+xlxHHL1Cr}E~Hdw9Nq%I>n2y_i&nHcV?84?>Sn z*#ukJFH{-i{7))_ZVyAZK7$OU!D3LMw?frooGKq@HKWX{8`%=w0R{} z!^3{wG*12;otEgt{(x*S=ZZKEFv_|oJO))8@>oCy7PU_dQ|CvIgIo1PUK!rbGaT2* z;cUZgSfzgRKM^uCg#MD~H#WJWjt=6}v^U9n#073Q+i@J%hZ(l_MK>2#b#uO|DqA#U z724Ja-OyErl|Q9h6j70zo0=Kc=@Ewg5Vkr@&4Sj8t&PEu)(I!KNTg_pv{%675O;$a zQpRku%d0~*c@82xTUjP{n+%v8R<(!C#Gz+~RZHSK8pD7Yx{Z+x-R5Yckr+gOs;y%^ zGGd~rUD81`S6yV+G26GhNZ!F<)%q@%OXz29m|7Z^kJA$#3>{#0gA^CDtnrE3LUzqF zAOgI-l)|TT!|F?@>#FwI_-0I=!AV;?e8Q(G{nyzIA7YXXh|Lbm1fAi6mdp803aK;V z5T?6>rWCr=Ej9XQtwn!ySAR3(LPR;@Lbe%hvQ=@DEfyyihovgjk*m2vNxL+2Asxr^ z2hrWS2t&npwIyDZIhz~IM2(dtnst|Gr;%-KPQRU+lyu6WvP4DMb8qjcb9gRN0?Jv~ ze;-%vW@Szwj8+LC@6bYmUka~3Cmp-yLU3NF;uT3ubv$?ZhyxiTKE zzq1b{;lGc_99BewUyGfxEoIJaPSK{0rFshGlwhia_eKVdI;+Ki&!>V>z|51^1;gbd z7&edMS*_~q(r#^{nUVPfyJTwEtX+aNu(PaPJ={RhUL0n)zJh`d?6zB&s;%)=tHKiL zf{oBeb)q`>FNtP^!KL=52A=Z4N-hSMS+)!*!XagZJM8el(716~&6c4vU_qF*gO7-SZyq4>7cgYlmZde6Z!;%oZYL*e zK5p9Dfi(kD?UPX77<$A^f>FW}Q#a7JSQLZk8Eb5_e_|Sli6}Fd;bossz6-e8QC)^I znq`_;X4VXSmT7ELxqTatQp~WEr-}u&`lI0(<~`JU1<+-6F_GNUA`w$1DK9%>P?K-6 z^*i;-26#>L2o!`9!=V>2N$b%_!5uUKZLP*xKQ7v;7*0NdXRa#P-LKb1a;tFmV$=nqE zgdCQ$xOI(s_<${lMPcxOkDk}GyOMRgRf6&gGGnY!XLei3AX3kRe&V))3N4 z1D0@fci2i$jA_EQu<`LQeG@A|=Z5L!pmT;|5d32uXig48m93C)pN&V-+bnSh-16~O zA+cgYpoMX(#~ldAr`eKj@E{Z(Oc}*Y9l?~gwJpJ`v++?^UC0DiGL4sCX1?XIt3})V z#Q(B)Fu1xIMv>hfR;s0VrpM*x9RZL2m_M>R1lfJxo^A!BDnsU{@R?3#dq5oGEc!g| z+1(5)h>~LbDM*z$8V;sHG&7t;SKxu#z#iID1IDrr6zq7hjZr_D8jX!X`ngGrgl zF^CG8psIcrRBfuurBJd0!cg-OYJ=rJ-@{YKx?78zS`^42$JF^wf8UL9trvyC%{NMO zgy97t8V-(#GK!PS%DATQvE0tXtx8b?uQH_nT9#QdBbg#R#7@jPv zP3>ljmER@|kE&BYdUTSs$fcymiLp!ZREit&tt!!F_xVY-iE1B##pY?|c$kWE^GG1q z*?eL*`&vFl!#984hRfj)1E1I*kFU$!HDB@{6Be}G@zpR|+HMxv3JCPx;kVl!5HHp4 zl9*MtUS?QmM$)yC55EqxTkb$@TH?_L zX5Xx|-R&U{gud=|K{iG+{SS%ob({6-zZpdLEH&+tBalxfL+7^H$e>VBv+ zOIO;W$KDjpS9gS!(pU@zq$sLls!=jS&}eID=F=6 z`vW@E66H@W8C~Gg*7-$mI`5aQsVa2LJwSOZ%-jP$hi&Bw#Ho=8uSIr0`z9_K+f2oP zhNy@Qa(HDXpz!a#j%c5oy=f}tsG8XrS<7RV^=LJ~EuP-OQlDk-5fFBxh9F6JKdBwI z!BTYK6=B9{$5LXN+CegwMy&V50&isg)x(iPGH=;yyG;O%m@QaUMVXUOy`r6#vSZo_ znQ9*Wz%!H`aeN`hwnrWTu?uxV>hW_nnwHg*f|0>%*Q4|7SJ0>kdSbC^e#~x%^}*Z@ zDkqEGL=Np9y??V^Lkhm=gP|-HYb@9ls$}-Z7*QuR?_>8+Xm&y!6nlr1(*~Ky0X(iw z_a3l;AFVOGu!qo@x!Y==RZa8}`IH9Bnyba{2SipuKvoZi+ld8BEdVRuDz!y8wwkam zj|7^Bf)1`EqATra?_$|%hhp>~u85D8y6y<7SJ@*chTf^AvI2!q-X z9F>z|?%dO9wMCVNTKNpTce}^vIiH}5bUl%IVl<|U0LPmtFD=V+;j-BKgh1!MPF9(i zbs!``bW}pQY6DkJ?`wWVd97NSD{!;L?4x0$nBAt6wec*TN_w&ns2>ksf7Ax>8Pc=t z7Kq9>p?Tdil_|OhZurN;uF*E0^0V8U#FbcEjH7Fp;|NA}jJi8l6(0k2&fA{nGzYE!! zIn&OZIdkUBnX+%X!ftVeK%>IqKZjdFVNH>!IV?8BEEKxIZLZK3`UV4<$1Jj4fcc++ zz+SG8LQCgQaE0c`Nq`s%GB7iGiS2EUS(MvBn58KEhPaYRZSK2}S+r_G zp(#DDXF4-RCPmjkS4>x4@GMbdR_0geXV#=ZFi1Ohb9Wxh&qBKtQj61&SS+~bID?Wt zlIA0!!dC7$egG6gpiO$rWf(Xl7s6&5G7_pQG*%bh;rafB z@8xL&9?m8&P_;Sj+=^=p0p=pi@}R-ZgM}$vIItH2+3UGmh6J=WnQQ+{I>N|Jr;V#7 zd#*jd*!(bP(B`T^)Huv}keg&4r`yvIVPiG+x-k8I59Yn}ya!vA7*6GNk^tOefdX$~ z84P*6$c4qOR{2FA19OZ#l#p>#XwX4p>7(}*H=(6Cro zQX1pSxSd~Z_$7AG%#oI1rLwkz_Tt4zPN%A!%c$W}twkPj{t4u5jz6Q7U`%!<=0rg0 zLIQE#>IF}9Gt9eaJ|{+=_$UaP%MP_i(@@X!aEPc;~0z1#3J>VM_jg8w7TunwXA4p7y`z9&HiERT2H!Kh# z*Kkpb)&}z#>+%=79GnGBE#U-8qlJ{3Pz>(@qV?LINjP?s(NJ`d@e-ilJGc?K51T(uyKx8kc!kOfoHiO0>SCxd*o!X-eyl zUMunbqk0uRxD|h=@K-+0>gKRE@HzV6%g7=um%cIhGAHwE7QYtpYdOC*;LG@czK{5I zm|v&xr7dpjU$7Wst7UQ1(}jU$7;RDdU^AYB;C*;ZD#2MUC)UgCl?ig%re8K19Auv3 zxl=JR@k|SJhY8u7fMJ>?X`(r~SHv?mc;*19D&jpch{u?B5g!?go}B4&#zBV6EzuW{rWRf+G_JrufH?&KKk6i2vPaq$4Xykj=UOokjZeDOx87HeEr$hr@QN3~4` zqBDbbg-T+-z>%e59ECPGEtY`|KRH8*u{Z;xh`7Y&Yo}r2Dx0v(a(zjD2U43z@)*xeV5{blF%~CYwK%aLCOQ#jalwb1 z9W)AoTH&&P14+;lwnB_Q!#!PF-LWE&Am$>vkkoX*w*rMhMO>)kbfE*%;r%teP~$$N zB)~i@F=3i7SSMv5^)O8e)BT+2U)cM=q$g`6nmQw0M%TeO8w1gU`(*7R>BW z0z8%6kD-@@&^3A90+v=7apf5zn42}Pt;CAdX>J`@m;A`>2Qk24D9+qG@YRGEGC{VhHpXTEHR&l9{}$N%3sR8@%r>uT z9_I5{#j4ai#}?OxanWL-H;wP5X+L1?jV&ch$283TkjKY1bb+i9 zI1|^@71Tlxa!en>8x}7BUD+qayv&}5;zbAgC!MzX+$ju{I!-c@t_?b>N^`*CA+Q+5LJZz?3#fG&B9Vj~+0^wVyNMfGt!Uhz|11lTm z-$-clCZyA*20r-5s(q?2%roX*Y~pJ{h1~XXdWah<9q`aXyI=_Hy5x1U-_`=*0ud?? zgI9(W%kRco6gtm(=p-uPDX-|@&Vz^!T+ye#TwHW;-1TzjZM|I-x(le2A_vdKaiJ9l z{=}@rv#Bsz6RE#pEz408aC^2Kpwo-2AinO@_;xW(bsSuv$-r?%BwzJM@&lR*(3FFy zC=g0D+iwdYa1Ba^wU+|}Ln_pSs6wh-oc%-BAr2VMmU4~A!6k85B-;b1#)5U5)CsHFdGjT7@2@>9*uC-QOW3Q`A zh)_*yOcaE=Vp+UeRbj06|LK0U{24E5_r;ZGzdep~xj%I$;k0 zQ|;K3qD+1ukH|V);b1Jb=;^f6z-AhV3AxJ98WFZh!|>iB1U3M{;qE-z9?i-at5ik7^mN)uKm5s( zj`DH_8VtR|(;gk;PK4$Eu~wb1W(IJ;3DQ^VV0woS@7c-b@g@vc9Or>`lef+>EH~n) zd$Rk26kaJhIu6ncl+}v@o`rCkIHN|k3Bnpw-2(4$WunLTh+H5xJj9PWmtfY`9Q?S| zd6R)PZeTSdRZxZy4eTc_CDpyI%BU81MsbI)vaH;p(FHy3imwSugKD=SO@SPT78*am zjL`mcak>vI{fBQ}=x&tR2z<*#5ArLSxOLBiLV!LVf_cc@UbL^YQdE3<+|4QX{E zafq6dDtm~|j2XHvO&3;uP9ABu5p%bc&cQ2cG10NH!u6QsXif`V#IC`1x+ItogNRj4oVi)cv$iEpJnjlG%y9SVBYZKw#Bb)P49gqoXhm98TD zvxU_EuCAXgM05nAx#kIMpC=?)IcTt?`reCWU8Hhh^U?r31lyOwk$O#u32!uVhr7cN z7i3<1zP(PIFNuT9Z=Y|E%t$rP**+FMUSBT`_`V|~9H&EG;9~XRujVD=kn?IGCI<`8 zu<^xE>@{Gyjxot*(?%tSlQ1GB4u_Kv!Syc`OL@xXd9Ez6rY-$-$~*8gUVZTQ0{+Bo zVXlDB@fp61Q-q1dV*O;j9N=t^7bT-zDSCuK-%jB?SKvx%Co_G@V_+u?G2=nKs2=m1 z2(-pK?f<~vNc?F8mc!>bgfHVHVS>PU3jt~qKmd0aU`$j8JPQJIAjd`QgU7S?{VDzOdi!j5s@^-vF>I@UKf-#O_HPG$3L)gY+_JM&X02)*9DDY5~^mJk2 zr!YLFoW-II261VO^EdJ=>b#)!?Ahvl5A2yhDBi56WR1bul?KfuJmQn>fWeOmQ56va~~ zu-$UC4Lds|5KCb5=;8rtnzr>kqpb{v8Js;hIXM~n5;|J%3&i3?S`atu!_9KM-}Zp? zmDAlD#p3!}EthJE@zV@k5aDuphN6pcrctz1i%$7krvROTCjjdQT$N~*2&&_(0*Y*V zOb@eDmT9tcscbzOe7ORDACXCEo(%jIK1WJTyAIDS|G*1G#$73u@X4HA$c3akOPH0lp_|0s#U7GP35 zk;%7Q%1`vNfh!7%JI_Hhx8I9}j(te2%B_ zWeg`w`m)t4R$m6PFL}CyeF;f`yJI1Ebh5dA3+-jAy1&9LQC_O=P-OWEIPi?UNm6<@|Z_;UV*UtRdsgI|64^(?=J z^J_f5%$MmCjB{*^t7^hM1T;hO=6YS4*XvO-;EEg_*lA!NOP3oESe?m6Cwn)L&jQp! z6Kf#F_uzVTGujlG4Tgy2H6Ffm@h_JNb3e-ogkoO@Zmn!AG0}}YzZQr?ZStHer2~1V zZfWFlUPd#kCZnn38)s|y9DVQw{4k+)c-3MV)TMg^?@~%X{C2^6P|9We>4M|&!k*(! zeCdK8`2z*dLn(Xkrwjgu1;$w|O2d=z`S`Pc2!+2n!OxA-??=4%_e~^q>FFCIp1*Bl z|2RoKE4@tzK1&${?D3|%BUoXFOsIl);NfGw`quAr2Nn$7#D&enR5raR0zKa0hVw7h{ia^;$!vWaIByZ3QHJoYESYw zr9G)IsY+D+F>al>>97FpX*JZNJ#B{sYGiT@{3srNRL|W3Kei04Hc5P;e7`Tn?2zxB z^1VyGcT4PMj9Kx3w)~XVuN=>N(4r33PY$$})M$r{=SN@`(VWZtOgFQ(C!w z5SxlJmRjjoUq^qbpuVDB7UV}=wl`QkdJU9`gYhGW#nWoh0AT6udk%5@$szke{wF21 zmk-9;{WQkrgJIm#K$}yCy0oYM5Vs~q2bIo<`U2h*mMU(c#VGHCQP{0JtfuUw5X5IX z{#gHc>jwdH1?sKe%fG|y`iI)}<2fuLQ3ssXWwUjCo2>c@EyjG`k93rA!Rjx+Gc{Wo z>|j3;znnYuIC%kKexxxajIUNoOE#ZS(XI9fvcc*;ivR4kv!> z^c~vha&FdOFFenJ+x=~)PqyC7Uh9{>Bt4)j;yqw-`>E$T@PcD>|;FfaeK5>D~4kF>j_c90+TpgjBa=unn}k7mP1)CBmw z^Emu}!XMKwZLjJ2H-!1Qj(_U|=+D1;LXHL04=b#(0AP6$_v-R8?fOZUu!wQCd>U)d zBV%m&Fx-|;!|Zuvs6CGi(W5a8(+B7Hps-ffFls7pp(VrKw`9s@^oH&QEyH$NGG!Nr z9ns;qWq%XToIhzi>)UwJ4T~6N&%-5*ivvhe(zsyG_fdsNd@o)9tjoWKpS*I?r!Q&( zUoVG5P&n*;pM*X=9&`Ft-5{#WO7ibf)g zkB#s8j=FtAsg>YUw)kdx)sIv#$iIeef~C1@ylg)2@HdU`Bcv-n*W&v-=HW*yr0T0e z6i^~kEPQiR0N5X%U_E7(q&s=j;YXV^WjS99AEawMU%rm6%oCPyqxpIrlH6#%mRfDb zSJ^1<_oSAlc*kLft{T73k(;02l)J6e4kY_cx!VJY*na!zxuq-|pKIqodmKW<^g(n< zQ@)mXwGr#5_G>xg@ygMo))RMUSP4EisOK=EODIXQIc&W5Jgn(*jU4sLkL%(to%uuW@KiSf~C_TV4+d(9#HNrP^S#pfD|- zH(BDj&=Sw@Tb;J~dKJ^+@Ag38-^r~-rQp9D-)vW2Pu;Gi91-|f?HX^-L*wjuXso@S z8DqC=xZSQ2*E7_9!p<9Nrwop^LW@n-#8hat{C%tCo6&Mj{A6)=S}osYO-#EncofQm zER2Cu(!Aan@c9wwC+q2iTM*{Qk~cm*lhcUbjLdnC`Esm$&oL7|R=yj}bG?zQBsOBN zd*?ag%kmx8vjs`;@gV)F0@Rh()_!U`ve5>7d)+#)^{SzPigI9f21PPKABA= zke}Z%j@lyGjmD86rT+XIsVx5d6Os{+8KbmZy8~f0$i^S*vCk)a^aiNOm#cT{o~TZA^HLFtv_D3*G=N! zWA*3tbp9Rs!6RxiO8B=Yc=gG@nVY1x`;l^r?P`^;+l6!G^0C_W$JVKjs8cBHk1SJ# z?}-pl6g)dj(0Edq@Ut9$#D9hbf4?~Xzf;c2SnQy^0CI{ zjr5$iS)|`Wf;nj)r%OFYx0VK~(i3_6DbG5eR2j+n0ZJw6bA%7T!3+C9RVowXbEEY0 zk={Q4l%kWDntl=D_anW1_~`jk=wYvW9#IRC*nin$H(x6dEUKhfa*!6#CB<^I1*?Zk z$;%q-@kqUt_~yK%`|ojt`6*S-l&CidKW8d#L*IZiuaWOk59I;tKX29V7G3tJ)XI*XSb{;`Z=;X_UzuS z-(ycW?jF#+XJ&TqC;Hvjv-=bMdpI%?!Jwm4@4h|nLP;I7yY2gtyj-Gx@Glr+}|4rbnDZ)M-Nn(<>+k})&1FC&-CtB zx1;0E+q!1=?3>xOSNHB+AAPEKpB`NYG`%_F=EilN!C&9r{dzsqsA1PWy&pxqqs?DB zC%5jH+^}w=TO3*0{d;!n>*zTkGvk@wJ+dEnJl(C&Q#~CS8ImWXPmf3YWMn^^*)t;> zN!j|W-o5%cdiTrj)3YB^Ww&e4uxUm^N5-EYmFR2-DAK)m7MqDOpXk@KUpA86(YqJ2 z+{n|XTUK_)ogFiJ_v@YQc=Xxqo*9om)%_nmvsqQo{{6c3$>^(VC>Hr2<(BJ6s_96I zb`|OfZM*l+cGRs~5C60Jcdu6rUJr5gK=8iZ&_&(RMfKQ4gw&HR@|9OS-;K&ER!Wba zS=sfj@8^2G`*rX0RF9rFD#s5mABNqZ==&(Rty^aAx{o`aVYg?&1Lp0CmcW;l-2*HH zPuY+LqYF%flK&Oj_*3!UZU66}&kbqkhj_^(vzZp8@=IGbRO=2Y(YM=xe~D-}V9+vS zC?8&aKFvC|04+1l>CvZ8xBk7JE;Ab3fIjtnb@_Z{)05eKva+7aEVD+G#mJz<@}lMS z_#^=28|IrHJs(3?QdDGT^?(ncev}VZx-#$X?wl2R4(M5Cq`Fam`&H)WEt?+i+p~ZF zGHXOx^|ytT?R3k299;=f-}?!;H=Uod zgx56Vn&8t=%^oX04gS_3C}|S4>Djku-zWM%t7lj+!{gK=p`B>}lri`<_4P!1JIRw> zr+2>=Wi;nL1$DJAy7<455sTwiJVcy9n6ep$ka8J9`JVrMqp>({#Y487EtvtYW2cgJ z6DsiC`ji3|((H-kBG#o3p ztWrjE+3+fKa4Z}D>&WXx%j@~Q#Ptd}J+px2+oBIFCvR)6}>rE*CI!j$U9Hp(csit199@$THD^;uY zXFFdjic_n*!_q~()bvR{D8k+P$fRMZ&n!@uM$d3j%rVXS;d-SYQt0JWnW}nHO}!p{ zduM6Q{Eu3mZcMh~wb``_w0GZ3zgGY8(WtAE?=lftQc{_Stm2s27>cWj;A0aV>Bj{B zfxhqczuNb9ZC;mb{-5dlGH#duO#d79#Cn-oJ^ld;b#b}&8<|R#HJV?n)>sZ?1!m(q zARHC+5_t#0=mr)T9cyW>J~p$=w#8IgYpGeLtjA{5gJ|oA-GMS0o-D9TM&~t{`Ec}& z%F?DF$@)z9EN`R!_skq++k9Ued_G_E|F~=xLiK&LfA$m4l+CPDw$1lp=JWZQZ%@$v zqa@}Y^>HWl`8IL{HuWWcy$}JO-R5FIwVl1i3j;DI}!v=5f z9vPX~YVO+;TdQSi2>VwDY}wAJB7bhwz#GT;PrW{72K_a|mTXNcD@N6846GmiQ6|H^ z?6~x|_DVGu7el{Tz~*0nxqAK1k&d)y9VpEA^2 zZm3Wcud#TjEE^@0QjfCPI+Nl3+pY3dDb4Z)%d%aM^?l-hw^eq9(k46bA3cEbe}(@) zr9cDJ&L^*YA9df~j1Fq7G0%WA&sbm>_erGs+atz(>XBYX2S+r{()wpoj;e^NT2IY3 z?kmuV0ZG%4G#?~gL((;b303_p@TJBoBgkyEOdrlI zP^*j`2q$~PJB-f|&hv&pGrmUnac}r*lpJJkw!@CU;kdC66;+_-D)bvaM7a1zz3n>e z0-A?i$6U@#hx)~p<3`u#xYxM>UFY89CUjH4;Q%HII2OR*R{<}05PZQi*2CZ@p3fNk z%yX2%VxQs_I#H4fzm1WmK6M>*B|M7@OOp)G)pFuAty;fMs^N%>E>H(u=UhgHn&DpQ zM%tC`HSR=7>kPUoiJhMMzQk+XJKae9VZgxvXSPEf4EQPl!3zNw1CaM(z|{aFU0n?r z>_KR-XSgS3fMcMe(g4Q*hbP%r$Z*eO4|09tIp%TJ_i?Ch3;P`1d0brp9YHW4*9n9| zwVl-LfF%I{E(us0;C{}L>9x~XL0t~J$=Oun1FxNi_^<;tK2{nc;Frb<>T=j|&c;#>y?*6Lmr6Ny8f5fO zV+BzTKA@+Xj6MSGR(rO4IM&s6&nKGNYCS;4Ll{2dV||v_J)=)5vs*!wW%|-sUOSBy z)b%;kPWM?icuk#k&kitnIm7o+ncFD|w;Ma1Mpw1dxyz{~SF$m${s`5Ct8rd!-I%=u&clDZw5%S*2N)d8seP}ni<^zanCmAM)$R+ zh-O9)3l;-dH#Ew>Cc(t}r5q8cB_a#d$ja8l$^Ohh=riL8Nq5Bf+!DK=Q|xwC7mZ66 z;F7W0BAd4~wBs)igER%ka#C-MbEXr{8s{E5UpsS2wlU_*bY`1x!U6l^!B3r^uHT<> z_a#BIR|s8K7;Es##{Y1b| z3ctoN+g2Rx_V~NH`ZT+G%>Pn-nq55rQhl0TJpfXDnq55rQhl0TJpiZG6@>}mimu*I zhw!hOeqDXKT|LwasXpDV9ssF6-L4)0sXpDV9ssF6-L4)0sXpDV9;yaEkRj965(Npg zM7>4gEJsF>_5iHXK1t|MdCt{NBv{Qc+EEQLadDhPRKv}e0H8duxKphM6O%3WkeSoq z>}SUP&hHtLU-TiSE;hv=*pq=eNo+rgEH3H3|%)GX~BqYjn*r zmJz-T!wv9D#uW>G#mIGDBjxN;(oo8)1_acrx)gNJEMu_&{1$WUcEZ?|QUI4y?Aa0d zR~vf`V7k}%iF(u(<0?Z}SrsQqRk??_@U?7(h*n)8!D<&%ju17&{VsKzcLR>V;lOsN z1MVO2Hn#e~eIy|4e{P?opecBgtNjn=Y{tGtWk~B&2s+eJ_dKcq^8ywJL=;P11#f;V z4tR@^Z=v+-BAMHvR=GE_vd!)TaL5GonFA7JjyWM^J9w{Cov^W*R{~ZPM(Uh<7?qw^ z0%iu7Po@^AnE}8o%@M%7!vZ+q?GJuTdMVYurLH&i_)~AX3JEB5;U!0FKuSOs0BWTB zC8%POTfN4t>Bz7F4iTo$M!3*55{e@bM&^$h543g>CTJ8=3$f5pXViI)!6G#r8X?P} z&wLUM=SLki*KrW6Q`_O_e#uj>FvlwZg$?lb%K)oiUQ*kr=RztPDo-s|Wc$U)-!Rir zEOC{XNuo$5`JhPy97%1H=J)la&hJ}(zQe-cBIFsW%SCA#LHYziC<}Yc{iekQYNfdz zepP7hAqXv@&&;%1BCVO>T+hL@-nqe=%QrX=5OBabRgYaZnE|0U{O>SBy4v9U5Dv?v z&!+ML=M*Lcl@B<7U_3G$C#(ZIn=qTotQ?U!#&{0P@y2ir4K>_3%EDrla~c8DoCO*H zI;*t?v=8#P+G5}*Cc1*6fF0%pLf{+5T1Eq-x8d`)(wdQLYvvJ#)pN83L00AtlzBTr zi>pMxI2Dlq1QTncStvTOw%Olig!;E2;+6q6SE7(x?gHel0a4)7Dqc1~K#$K>&j@

SwfxVxZL+||a174Sktnu=>;Jfxa1 z!aJ=nB3;GZ0ZQM&h;(}(swTIBZ*IK@Iqqo#th--V8A~mX>dN1QqHn5=5^C2eq0XD2 zyxqhIzdEB)XY@_Z{6}<*RH~BepqhUqU(+Ugwm5&w%S}<)%T4Dsh4h}+bVF0AOKoWS zaWeouZg#kt2NVi&JW{Se9d0(`Uav@3k~IxkXWVMsuV&mj<6eJk&HKARh=dJvC{#_S=({l=lG28-FY2i1D{By$!`Kz3rXb5PIjf9k&6C z9k-nz@WgHJG(+f}X6u?E?r^iIZ4sK&+b{44b+FfafL|5qC z4`)<+0gr0`VtasJY+ukG;DYvx0X89C+OH&dW%~mJA83DCgHN~rp5X7>gFyG&jj@_U zL2ZBh{e(%_M+5DXZ%}W>t8`~N{7F?=X-{ywfU?Ka(~w5SQ~_{5q#_RvvkhhKDK#a zro+>;s;6nS0=2ODTg@5S{6l}}zUGr#06M+Jn3ixRv|LW-qn3+W!CBU7Xlpp5TCbtA zvGp%>erY}Q4!=^T+_C=-K=I1U@hkOMo39DI)CTN-ANc-bIv=+^*48i04{aB;19U;V0Z9`P}>fVAO4$Eu;XExnCYUdjRcFldh< z`Y>p|{dPEeZokkH&gGUnTfzCL)%MnKwzode8VhiBpmh<0ms%gV3(m2-irO&L=7qL! z#@@z z>490S1sS>p8EC=A+hI@IbNiC!aF#UR*W4Tg>9Vi+A%+h%pWZ^k(_4Jo65-1&x3q%u zQLA&U;aqC{_T6yazI*fCMEl&`=*WFHxSNmpY=2C+WO(`(a9?h0Rw| z6zyw%g3k07pR|B;u*Faco(U}%(D|t4oK|p_wYoxQRO{uf;cRT3!+CMa9f#|H>P z&25n6Seu--aD?-_fJ;WVV|H-9%Fja!reZ_`u)5u0I>+0My4T<%8EPRaghIfNDuC=( z`8h~U0WCg>K-A(kdnwlUw%Jb+BJ#VdR>^1F`pvC66DM1pN!C!7Y~3M3)hfs5s2Oz% z>p%h**4f*L1vfg;2-?btMkgDI)}T%{TG^O$L*uoLk!o$@b&WNAUE{O2KqJMEt@z6F z^QlF3it13F6xEqqH=w^G$dLm@Wp3RCb%Xy0PfX;LqX8L!2CEu)V^=lU+MrnM)&?&( z^v1s2@MObcu^SrgZNwVZHU6csH`OnVCp0OR>WiDt-&_oE?3S~)*vTP6)F*Y0q5VYN zFq~>DL+R=moetsz1pRt76V_zt_|Woytuv%Y#EkeS7L->N(KhNQ2@aT^LKG zPk;QpHpq6>43H(Le!)Z!{+tutDz9N)LsyrHo{1iKCpHZHr=vkt#3DGc;fr?6iw$Q< zOp1<~)o_6wv!LPPhC!K*e_}NznHD#E+m3p>;ns#8l-x<`*;*`gvf;=^0d~~LMsphZ z63%I~!54KAB=)A8+hk7@U%EX_K57z#;-55hLq2NqiNvN!b)PiZ?-$zNs;njv_mQkRt zHUt8Yo{ipW4Cf$7rPEDlvc3rb>ziz8BI&j?`Qm1T$(=gE`J1=i0vm~zlrBGs33R5_ z<7_dl-fQ(d102sflB!?=TUqb@deC&)U`Dbgx^qECx+Ec8RzP>_Eyr$wYqOj~eTh=B zRGC)q^LpU-WjAlW8P4EaUcN=vuy#5%rQS>R+)p|<0MtwM7Sw|bSWxfHdLYG`dTZ;s zGaXOLMhlVgGsK*%f2BUUVQd5GlnG7dHbLlAlVLZ5`2HUy3GYL~Sq&i0CN!DW1kSW3 z1xu%B%1@2^g{#1*w1+q`pV^d#UR+Tw}+E9jShyI&isAeRwJm zEJ%GL6`?m$*C9mAUax+nx{aCkYs_9peF0BKOj1=0Vv2$YA$p%6hYvlqK6P9TATX}R z+?qgOZq4~M1u-82Q);|XgH_fTToVWkt~t3TLX&I0h7b|>B6Ug)8v*Ut2z-HZy`+%< z>K<2PN)25%axSm2qXw$n&w^=Mv_PgOxj=yQSZJuFDf?2uH~UgPsAfEXZDL(_`Eel1>tcKAxv)ah&Ajin+$5>a>0_S>T<_69Wgn|S?h-6ZlHa9~W9Q7;>1RBE3I9CB9d{{+*d|Qs{Sos%{oX^FmQArb$ z5IrI3#UwKmjCHQU6(qMS9-K5i$(e;MrKGD#&S#PlJFFtY_#nsCB%1-IC%v5nJPMP3 zf+Km6mEdM1unFZ=gpceXEjJ;z5R=!q z9zt4VI5U+h!WI>vS6Fza-dab>^W3k8A;`o}&fc%`T}R=tBw#645c2PN=Xeu2$8(dl zGqxFbDDx?F<_@(Ro`D5$zR-|-*A^F2Y(XhZ;l)VTl8#zNxG>;HxbnH91A<9?80W0z zIJay&$fhNGOfn;M(Ny_MQQJlH3uT{6xM=2MuMwLpTkI`IM2}R#)*&6Sd%dFGD+cf) zLyyYyEa7>eC7x{_u+}!uE{1k_c6;J651NlG*XNwzuV2?X@Uz>qmudET_92H~VJK=L z5AH1VZ1n)Att={Cib4~iG3{msEy|F~vJ49jM_m)K52Yr$=kb)zJogU%iY>?r55ha# z=X7{Qz#1GjQH23V1CaVCPYZRzX`wt|BWS3juJ3qW={wgDx7XHvm;^-I;ygvbDV?VT6@=MUUeFH^=<0`{+%VY3 za>Is&A@_Yy@xvyDk+5MqA^_hJF+LKZ@sW8^2<1i1j6!H;)X*4&hQ>_7xe+fyDDhGd zdhb%urBGCVDO5@XpAHK{I=@Y8Ew&|}2ywr#w=m12wgrD448zyw!DoU|^qJrvgUtcp z=O2TA4VGavHsqBM@ckF{YxEx+wLB;{n1;?_ zVK0Tz-4QV*lGePusCiLz=S3ZkBAjGKm=wX!jmk%ai`pObc~DHIBMQ6M&pF~^;MB5) z+vg~{${C0ABpMYTAQvWEJy;HVrIw<&JBiE{YKdCFa~#roee{< zh!jR}O5~JC1eXI>2KR%|2#zG3F>x4Ds3x?nWN3So;j~l^EDx@=P}x=H29IUUV}maR zgI6vE{}PM=^K0;HAqc$_@-msx!scw)oN$EZgf9#iR$WNu1FME#(BTW=m*9a;ekmM7 zv6GGUtjJ~L!ex=GA|>0Z$m5zTF+w}pZ8;ouJW67ZN1cWTg`AE$%lPwAGos3tl$D4RS^6!I$3a28$$Mn0Ou1Sc@Ta+P_fD2M9A<^e*oL$P%}eUQC@Bc{Z{9+ zKr$H+=$#CtRD7u!F-Kz{_>aaMPC&-P314!%9fJSMgkgyQ3`-o9i0Dy?bIJ=U>UhkV zn3(Jm2D0?EE*6QdlKs`ynBxgxU@7Y%RghRv9-)HrD62Ec#E*{|bXZ{iKoqh*7TMOv zZiz+jZi&r{gJzQ#mltOaz$862Zac%<<92hSeNWuXc!XxgA4vc&ewmPyh)_-+eBHoeVh1RIfUOUx1k)0+f{BfP*tPL`y;MP>0R;NVI}e0o)xi&Nkr9 z7^DW*0~0I^h&rN<$8ecX7+mQfH9vlRJWAae|1%sP$e$Mx`CYs}0Lj3K!xE;G$L1$| z1jh#w<|I&<^DG8v@go#KY7OdwF@lF-M>t12olnN7(av)wf|pDj zsRPd-6Bkp=im@u)i>zXql_J!1>QDDWe>%eRI7e_y(;V;|&uLD?`B=5se2>n1I9n^= z56w>*{?t5SBGV;cSj;e?3fP7&Xu~WsESu9W4wf~n`ZU+ZN0_IB&eK6R$$rS34FVmO z5|s`>Ww8l9Uko}Rw8T7Pn)!>4QeaPj~~o1JHz&=9|Kf`$(ZMl6vi(G~ppK0ZIHh>7k~n}~KA;&>`dM>*6<=T{`i zSI+NP+$!@ZQrdCrd5npNs1M<|k~)Mt6r#YgYvrSu!0eB%+>TR(W+ps)nf5+O>xQ!1 zSTA3#Sw*#a0&!2|@#Y|Ux9S35m$!HT@-3v$EGmh-CXH5E zV3I6}g9a>da)>LJCF(^kDjCg{@MtVC_3|HRt2UA`mxcN=vPm+!+jQZi*X2<(xMyE{ zv0y-~HY-Gfyj}XD`z1yn=*mWuwAny8XzZ(YizXEN3Pao#$uc9$p|}cFk&u-Uh>{|! z+8k7?0iqk+LMl3X<7UCN!yS1_|9FRL=}G)!yq1JTx<|2g-^Fg*Wt<|(PZ>oPyvP_# z5i{7i8f!PT+P#k}!hP-uAqY(f*%czqRJ%gF0uec$)jjn993yfC0)jx zN-zUr!Cz^nW$K(+`Ct_Q4p!NnqEqaqskk#t#ly7$8OGPb>HrkNF0WGzO?@#HfEQDj z*3f{ZHNL3XKvhlIx{PbsR-w#iuuWKijptUq1}{mm2;}XIZYZpq!v|QQytEW zsjsKP5h^@{wxg*Jsl#mGLuzB~J#cQ^loDd4b?Go$3A16yEy6*5jLI$2&Xra>)6ve= zZZjX@)$Tn!&b!CGI$DRLg|CqFLiD0?0$NnAs2q9&prUe9lLa(2SvUtEa*lv3-eD^6 zj({xg0ccL8x2g*0t*XK<0PRl6t0ADg8o~|$Ev+%Erhtak6ovq3Qq5265L7}_{~eH! z=K-5Mu){4fPEtUgG=89c?gu><0WUIEb1AV}Qv-kt(c9ty*cMNsoEfMrqA+Q>k>v$6 zvizq>Nb+ft3^T;ctN>2vr1CYf0FYsZ+Vn7EUJkQP_Amor4%wxX+Np;b%OK-)QaPZT zRI)n-g9;WP3@Ql^B@cB{uVYL}m^4J#q96*GRI{)aGt@fF5d?rRSSO62jkP6*a9Ss| z2P2B%Qpifm@j%}qLr zn5qiH&dch!5b7<%r%@FIC@W&{rHaccGC4;ZT?!JosGpVjD-bqH*SqRXN`;Qu?yqi%&c(rCOFdb9d&<9c6!DOr;^9=}SK9FE)3Be5EQ>HPiHCznJS4h!zQOSE z%R-qf@cdeZwfx{5LjvdEp$8n~J82>0Eu{lM-&4Hwpvhb`P<bZZF>0tED0L{ z8p5Ng1rOzjKy>Q?DS`wMhzO7lAi^RL0TG;T#G|PJh^7WSy4CP-+L1K6)qv<`!lT;- zk8W4dK(G3FJ(&0cy@)1h|-Ygb+O{%h!BtNeN3`5EBu81g-17x)3D4P z@KE27DC!yF(G5Y=@aoIaeeh795RYyMAd_mohZzK(jZh@S!yzLcjuv|Cv93paaj}CY zson8EBw#6&m$;}L913@ak`^by*_<@80-T+dhH%?Ar|Mj6?xC|M^=PX36jrcDQ%BT5m|~Y;NL#G5xNalosN;dFgJ_Pq5Iu|L7$^$ks?i-+ z?SpExmO8zN>Lm$o3;5ID_7@Xl#R7H;%Z1?H;Sp=_4$ol^1oL4L@JXmy%dC&pg{DP1ccQJMDr_4g8;GmTKAcBr+>e3<^}4U2ZdJN z4!X7*icwecc%P* zOaSEvUCkwkpd2A!PNjoY=pL-X$pH~LRoA5uunvP&0J~H6RVQFy^`h#6S5fsBQwew- zBbV;c)U%K>dk3l!H5Q8Iun-EXq@=FJ6jZjPtVuP07Qo0_8>w4pDatc9dum^R@Ie_D zYLBbKm~nOHK-&UfPMuE)@O3qbX%W*C&3E zXy)$$H$jjvg2R(8MbCvN0*@XBl;6Ejr|5^As&wqFoiWy5m|k|T7mAsXZ8;0WM zhAq(H!Z3>P^OQ~7g%;amG)+DhQH}^Ly5U(E_ePu==l~PHf$?b$#CGNTaZ}KZ`J?-<_hdAVN><@aTyh9<8szBP*Nxp`V<_Ktz~gTjbdA>Wd(_ z0kP??=XvJkV&{G>zL`LaZ<+UDH$Yji8)(F6Hoy^vTFdq1uk{+_(0a}Jf!8Sf*YQSa ztZ)qvc#A<#{mcg|q=)Eol$iM=2ca{*ru-|`@qPj6d-Z4!P_G9B=Cck6%)JI*2H9(z zHr!7;0(ZkeN$Uh*T(;Y=)$YS?!VbG%4zyvrLe7WTelE3aKNmr^pR(WfQ~cY0&H$EQ znq_mRAgj@w=y}J(#=RrT!kK}34F-U$z39dsie-XBvdlvQPCW#0UYFITEW-d`&5U5J za9Ih)%=II|k5uAS=Y7kN3z6vK3z5^K-A_5hB(0g&T3;ZJs|!1hOAFh-(_UAQJ&{f` zrz|F5>%~0Wg z>!W@)u&V8w-sXUGQkFYp;)1 z8m(eO;5ss5&3wuOsd`FA!$mITR)!+HlDnK#{J3yt2Q8uP<3SlD0_OrcP!`aGX^?DTMIF4t4&tT~cM>^y|bjV^b2kP3Aye}Ex zePWISE(K)M2hj}&v9Lw_x3w;d0t@2*MyvG7bPt=u6)8MR!e|_X=R)*u2!42I>JpD$ zngXH)Jv>Fp!=RtTqXj)YdMOGIZC4Vd*WG|!wgv(z$q$sg&RIs z%IzqR(2nvSQXBcO{OlxzW+yG+xzhzns~K9Iv@r?UH*zJP0lFSdhI5qD0O*vwsuDu0 zxYf}CL^;FInMz+X^mV0Qsv`7D)m)xp&rR8siqNLiEmRD*q(be?Kr7YJh%*?&7kzR> z3<~?=VG5g@IG;-G{KR#M2(1J9GQ&`1)dnOn1{Ckn8xijJr?gAKOtV^+V4PaWUJK)1 zj~5P(-<|+jy`6Nv4|K-Kg|6yI!WX3a7YTFAAv70jF`&J&+!{J-WI;9qgPnB04|LBd zk3>1;VJyM*5(ozt`zdLhF7p?Iln`|F8jYE~YqYhpR@+(WNF}5{0$pBA#5q+@aeDb0 zD>gV>upyS}B1_@;1eCKegN4<*yyv4GL<{NC6@XiY_vs_?E76M&mO^1*yLVTw}amdOx zqLt8P#mBSVQ$81cHaLQK430R&LwtuKKId_t&m%VSB;KqTt-Vi*EsSNNTujz<7sjoO zNA&T8Z`g(3B*3DDtHbCt0KJ_wlM_0X3+BjAo|=r{7Ou6r7V8-%f~5t{*HzDBLsgxx zIxK~Ibl#3QR1J}bs-38Y$P?9atD~;m>gb&g(mROr*W(cs)em)2ULu%ZYfddVb80QE zg)B=UI}x(TE`%svv6nU^?C<}m#gR)RS$^bIo{qa3H6$9LA<>}YL)X!fN{^=FL2m3F zj5`{K#7E;+mP1I!z2-IJOAzcZMC^B=Oj(q6lOS_=M+z=F;`h_9i`I5~CKlT&wS5qVYo%gL*9 z&=)@1QnWk&cs9^KJgMf!n*L$VY2GmMbM1)QNCht#t&kb6yPn~?lQcLf3BJ=uSN(`0 zyvT5Irt}Z_Qu}=IafedAaw5j5sY9&pkn&*dO9e?O+ppwT>~IXd{$V9d>*1|JMI zpTw&D>)`nz2+t2$6oS}AAuAZ7#XvG`3f)Ytd9&<7ppe3_Sx}?kSquw-c(j!lklZ+G zf$;2(AI~#x;}gy&$mz`U6f_+%L;uR-ZNJJC2T{6+b4O<_e>&^!Ql4!eSw0UsB#IH^ zIu1M}txZC*wMm@w7Dtz~koCoucYjstft9aJu3JM(%1Lm#n1HAR4$)j$AW1RdIumHfzMw?1=V} zv4I2m8TgTZ;c)uWRa2C7wibiPq*YRswx{+^C?4?aq|xm9D_a(Kc^w~{t@sU&xe(3m z0MwNm_brqhc#0q^#j~@*7+CQE$xr@Pdy0~`Vz~gw&PqRFp9h|ts&jPvUr!yc8#<}x z>)NwXP6O<>)hq0q{9yiKLdeWhuPb!r9M@|uI7?j1;dn8p$A28EQ9+Y}j7Qa+px1(s zdPC4QI@6<~w%M3~5oM{zjqhV3!~Rl$q~I!s0pIJV|= zO4;rio8MtMc;taPb} zO4G_7CA|HI!j!ul9|%+BsL7_ZfGlY75Ju@kz2p#PuNQbk=QU#`kD{!^!6Y*quOM$= zg`My=DoRbaRY;8(OO}tf+&`n-KM!I05e7=@pkBa(hvq*~r4)?4s(q1MMAipKyy6#pitmNye}6Zr~jBrZed zCeGvW@Og>v+aRkBw`H)7n+krH?)3CT`+{ zwn^u)UPDu#$DiY#=DGOy6AjYCz-+DdCVWkmdnR@;xR9Tj_y*hR)AH3X@naMCu*TH@ zFwEG5*<5kWPWUka9G1(2?s#hn)qum;#oPl_a}#iaJsryYj|pnPGCY?x5rre&Os3;g zd;F*~z=n_80iPce%xB@rMLa!riu{DRB;nkIcZs2<9VZssL6@JrXKRn`tEY z*%^D5R|3w)j*F8wn8(G<<`gkIZeEtWgeh#LYxL+CmHEvkE z$bf0_@5M6$^{7>7ki2&zm3jv|Vs^&<9E-vEbL?PZJs4Xv&aCH9_FkF<_r@KT;E}k| z@d%EN9~bW&;85e@Uyf(0X=svnM6+b|ZR{lCFbT*~uo72i)&LZ@C5}>(8Q?Oh#zDT- z-q=&IXyU2ZZ)45OV62eQc7(?vca6XDdGM%IwG8ZC;hd0GfYn_<5q$~$j;i3{YV_J<4Do}u-UYdP27u~f|DOVjlHs*O-KVngAjW` z2%=W(qmI&c3f(vAEgs){EBaKl`84K~4`Xn%;67XmITr))xtJe0tN$1?BNm|??|8Z4JC@c7r4^7N3Uq1SYl>fQK_H zMi6oK{~rRqD+HuRS$OIMjyu~Sx7RO6O^No1zX~M&l;}63?U*m4i=vUZDEf7fh4r!U zS7X36ug1)bG5-fICO~FM;fS~#WoAL3NYPn-MT_5Cw2mR_Y!4;?;;g@H8H0{vA(*R( z8m=@6np1Gu5Kp$ij}z=lQ0oNL29vmhV_uAr@$zB}Q0=JRhI+_XwlFUGt9N5_nbo~5-rl%jPi^_AVZ>u@_u)GUB3?g5Azu^Jx* zpQsU|=_9GsB>IF28B5AI0`r&vmg) z@NU!3;o~CRke%=o4Hk(EFrW}K-}z*T7ZxwdYIX`XeK*pmMRLL z&MSb^BVLOzvmp#$i-6%5GcI${$;DkjbZ&0saNY$Rj>7>G9ubK;{Z=Zz0(Xa>497q^ zNhIzA5?_Uz1HrM{{2miLi8m)F1-}-IE`2R{1w$)>2ZtauIAl22;3Gmt^B(22kRk$$ zLI#HhWWpkXtxPpCbYduAQ$sh>*%*2x6zPwIei4d7z6d?brTVX--*LO{yRaW|8I+ii zMZ6@jQPb$80Ucn~5zhEvFib=A?D*h!2ze)XBOwg{*%&;6=U7LCybxkRUI>{;$g~ik zfs>}8ABBPtABFzN(66DWSl`Iem8ma+(JWZ~bhEaFe9F+LAtQN9bY$pMAZ=kK3^*+q zt?#VM?u^pbhaq$@>^PlsXp|)hC5ze;yqgzLr-f`I#ioY7!7|?p+>#SrlUUUuWY_Sg9 zR%*{la#cb+>$i6TKM6DkVRrf?@RJ~OpjREz$prZ0lN#9CMji1nU59_JvB+9Qu05byQyIS0jHEuy{8LxO3^_r7O+5LjY;(54_W z3(Lh#L5C5xdPSY|tLD&$$;0yD zjSR~tPf@Ts0|oH)7Bx0#W{}*7n#lt3u4xdm%1>I%2?Ri^2cXBXKxo%z2+|kSkpE>~ z)0J#;k7)`Eu(^}OMSsk2t#qN#m9DYe9M5xarn8y%LGHtSknQ@}akZU4V4~$9a(v6j z7rw<$t%x#dwI4!LV$utftAO15U7sO5$PU}R@|J5aAK>`R zHHt^tr7YcJY6q*sonrTkZi^^*b^ZLndK(9ia-@PNscFC|t)rf~It~D209MZU zJr84vb;D^1SDUyZYa9Sv3Q*mjMX^hajaY@UyflXogR;iY$g{H7tzE~m9A=2f$h_X`Wn9i}rsUF|TBGkDzm z*$m}Ei1#P8b^B*?f{O8h%=KUC231xQ6w0>-A*+nEFJ4v&Y*@8HQX{OhE)oU4JdP$^ zLd7K5o2;^ggGOp8?^oi!8Qx~meY0DAM8HStS6p4i*HsIC6{na080(to3V`^migy&$ zMAsz!;=WBOxG2af;35mSaW<}f)sO0;B92$pBr>=zOSl_1kMKhRcv#*&idQK{1&qT_ zHYKQW0h9Pd2~?m-0b}_@iD{@`c-sO?1RSbUpSXW)8kyW!TQVU+Km0FsR z)zAq)6CX7281vf=#H%Ecuk*c;*CY2vn*Fg3*&De(Qko?cKr|jdNW_MK; z{#c`70>q2*JSj?)B0y;dy--1qZH>fPqz+Oi?;;aXmn3q;BZ+Ou<0(hwpoS7!9jM>s z7sZ0CsH)KM8&svnPar;Lw<}sZ;|JlVt+^bh8$6wLuFbzmLOA<=e z_)Q~qfrVW2-W@Aczna@*6m7!~vVdr(RgTOSIT)e{&ciQakamTxJq&)Sg*Y)LLy~pL zKm7O=^ce^67i=va_wp71@sBN7*AJ4@%JZU{?SlR=8@S_LqzBBQmH>v|`!13+$6gdb zv7SvdXR89dBc+=vbGR-L_6GR@41B%Hhoa`WmJ#h`L>v1RB%q#4^S<_vgRR(ca$Hr9Ob@V-)zubTp{WkD6ni(|iF(OA`s;~jRA%h4HVcJ{wW4f(a4zxjguy2dBgB=`w_>j~*T=gmVbS#S$j zT7`?i<7fvTM|*W=waNbFn_sT~9U6@Rf5;F&TZrGU!5h_n_qIPK;A34KSn(6%1OX>> zJpi0CPyyJV6{O*(bx?uDsTO}IM+WGYF%I|rB9I-}rfcM2zG9|y^$jv1QsZHB6~=Q0 zM2zH1(D@!fzRNTkUq;)6sdWhtSS2J_JgFR?%jLpT#&MLJY{e!Qi%msYj7_y-QypW# z)Bf^7#N$!^1_++0F&49tOYvwFobQ}?<-l(^N}@C*`kFsj_BF2K138dJ()o^V;L!&Z z1|yw;Yy1CSd*2@?M^)uplT-o=5l74dYQ#o@1R=u^CLyq_J0S@q8em8QhRCy~r>AG8 zp?}%klT5Oxqas8XWqgk(d23up#U)}Mo7Lz;#ocj54R28g7h)9F9hKF{q72HexZ?7@ z-#Yi+s@u1wyEC8c{`D?oy6V)q=bU@)_n!Nss%~8uzP1lOG~19*uq-^+gXa*@X*XN# z&|kKFJnW)B&br0-f9CuXf1aK5Vn}^)&aE6H+&cHe_y`MTA@|J1ehK(+-`sEW=iAt! zA>6`}EjXV1NGil}cLFUA+24xn5A)|?NSXT%Nd5NQM|u7z#o=5@^4~S*y|m@MbAC?L zg$0wDFd6(0$fw0VKIfNn(8Q<#yf4z5{JLDofSnOGOFk9H#`rO$jrbVSBLeJDlOIy~ ziKLLKTB%U6D}_*1I__3`XILEm%kk_KCsXaO#OE^2c$QUTi=i15#yQRjc-PZE zZ`s^R&&T{_+Jl^xikN@=X_-y54INX2y7mg1ZBXbVT z!3T@}Cu(gRpEdOF#jYa$L3}<5pOuOZr_d$&Kj-J=cHt9DnD9r3lm7R7{|7L_e;)sN z{*R)=v3YmR^ZysVR)zWBSLZ=N>~Q`)^Zk4A<*jhI?D?NHhwZT-=%09^|FTYepY>au z>G&V={SRXU5^RllukYW7{SiI?BiQ55|2j4m#5RB5pYK00e;T{BPhi5LV`~ zl73{Nzv~s_uYj+yw~znzQy)4NJNW$bskp86yHh=X7q;!eragyG!^fgt_2MFb`qjHm zhkvjasQ=|f6N|7N=wplg?_*C;4?E0GpN?&Nr&HXO`Ow+^!&Z^ z&gpwE@TV{M*9)+h_`wVPBNyJ+<$tMbq6=G!|L7vzj_CMqhyQrT-<|J&{rsu({rgu; zuJCtV^f$P2sPpko{|I*a#`fJ1v3vR6<^J^YT`S^O*Dc? z@ll7#OZ+33O#G2Qh0hmZCz`cSti?BPe!iC9KX~K{eB$6oSA-upfIIkUgUL&dT;jbd z4(}_j@UN`-BRl=KzYDk0vB8RWPW&<-S@4g{e;zpaI03y6+vV^M{*hDsXK@?f`*ECk z%ZIVdKoOWn|M?tj4)h7Mj;HbYu5c3S|0OyuGy^tQXk7C;A@5Us{^M5h_x%uIA%0Gk;*I`063gSH{PMnCfx7!x@lMBXy zqVRk&1k`=J^u&UnEWolF0roj8midRUREF>VzUs~m(A=rv47r|=J{WlH$BfLkIvmc7oSl(G}k8YZTm(Ww&a;qeLdXu|I>ex z2Ra6F`7C5}5&l13^t{2gOr@3`$##Sf=0!^1r4HM?6xIzQdi?0)IN<;`f)_ zolSCKRN{3vvH3UP8EYcvH2_3U1D--USFB`f-eSwbHz3zkgIx63X7Efl;kgk!UXxOc zf@ivkoDYL%0*gh&4+@R67nBD>3TwI}A7qRD+r94@3VA*Yo+*a>c==h}?bILCrWtUD~U3WJ3B^@N{Y(PkUZ+v7|3U9y_b{ zJmb80-W97o-;GP+`2-&2dHP#CPv6-|d!GIl&+8~-^U-5dEqLsm$R-}^+fmD=E0y#P z)6G@Om0Ynl;B_l+%+$v%fFbWO9?O)5i?xnUuN#u1zTgz_yauOH>^%dNeTp*2gXUlm z5nw6eeAK>{g6Dr23VDdTrwoNd#h!e6G(yLit2hgLVTjO1Hq+&uN~JIt0qs7HB_{^rxT{U!vrMJeazA z_gR!rfim}`c&`5g%J56$xgG}P5sShodnFoSRPVn6<&7w^UCUAmdh8nDhOIVAM^no^ z$QB|z!5g}kr@_;#mdOJ{VGohO<((+$T26r^H3&x~B-V1OgbUfBAF%K>okmG?fD^CFP`s|;>G^z z_C+4?Jb3`qxM+$jiP&`$7YJ6uY<9VD4sc{-;rGO z*xR9lwnph#du+Gym>Ws7$H*fdBM;FZC5=`3Qn32U=wj@MUhQqctDFUiS8b0{l=iB3 z%FJHnsFJ+bD4xixl8aug0fz`8v2?7xy5D$}<8M1@uac*kS9_3Eyo%x^BzkqU1+V@a z@+z+m4-6F2MT6AHtD~sgMp)(e=n>5m+Oh_eM_-|Gg_P?-c?$p#$_XiXP)^38QAF7Z zN)>L2C}W^JX;Jku!ux!qKy! z^qd*b)dq-vZ*iQm0F+mq6{oxkly6#;4p7c}otCVlpLmt1`x*MSKMsAO{~T-7J#0{S zSgSC<8g&N^>d3RgT<3vq%Viu3>YlT%>l31Gyam)94_$(~!j5VU>z9isNo=;v`q(y{jQ-2e_i16=?~UDAFY2amLF@?g+e zm*~TZ7JPV~@!?=5!{BDS(CdMJ+Rstma7qsUVpPu5j(@~E>(%r6kgG@M3Mn;EIAxQ1 z#{t@>PRths5?Lp#TpywwTxI6DrvDOq=%4R^j^S1;xpiUdBCDP^8OcerS~YJvXzBu? zsV?cdc(6%be3a%Ru}{D#1%DNRM3wGUB#sy6w!ID2Z_gCS_65bm(c0X$KaL#8iz+>+ zcsM4X+qPVjt=~r#4+hoXVg0cN?DP}GgP;PQ*FhJ+RF|GnJhXIf+p7}oAr7Znz~N=c zEp54&u7#@^5fF8(n+mZ(U3G@wRM&e7$1IJk4B#M^biMb2M$_lExuY|(vo2TzQWq!V z$SphTf;Av@ae&#JL_gEJ;^!2OT*K*SdRP2>4S4AX;>w+~Pb+N)# zguJW^8Y69R=2_bYJ;SA=2Qzd-)L;k45cfD z^hjhf#ds$mObC8biMm{jF|OEd)EMi=6~P!Iu$?rv8Y}|_6g6IBxo{Q}G{eSo;F$><5bv?x zISOl5@2gSiQtxS$o|f5(vF@GFCG~!ZeNmmU-bZoVtlqy54N~vdftw|?6YKq2xL4}^ z8}>zY#(M8v%%A;c!))e!$FzCKjOANN{}N6M*4%a=WW4p7)gY(6Mi-n z9C%kk#)OgV`tWPuvFr3`d^m>OsD4=3j=y%&YhR3q(k^BmkFl82E*3+G-JeR#+^}XH zuFMoO70>GKMm%bzbQJX^UZupkvWM|`&DLH^4o+f8bgfxsJRjb@jWOU**|U|gC9*k@ zXVuC^Jb={Vty{NJ2ECFvMgotPJQEMEGq!O4C9!216xN)b*r(i$pdqp4TR5}lgXCsx z`J#y}4?&`vIHu)DR>riag2!cJ{MiqlX7T5I=#uzz0)&v;P8@3ySw!I6HcbB$QaIKE zz$8YU;~IlJZ13YOwD<2Kx3u?>Vy09;kcwKoZeNqfC`OILE));tnmI;Iv|#fujm?={ zF=s!;aI9@+or=vks7ul=R&QlpHEtKHS21g2p7mQhoAaz9HfEAT9pT&oYt(}Ix4~27 zwi7Y`Zd8Hvr)m45IwPK^a4dLE;RvGY66X#V180I~_RDU)602NC6RbW|CqYh$)u|Th z{Uo#_lw*#9(8dTj^kD zJmefr;^CixV)r|gNc<2of*&H=wTJkr!V19;=ddnTiJzC?pWuh}6jr(jm%Gj3PFq8+VqN0 zCwLm6g&s?_;IVUz$N1pEcHRXlXDihXmQc5*snBCAyIt;(N8Qft!3pa>kw?u+qSoY= zi?V2QcMCROXKXH4v%~$RrIl>H6uT{WJsP3doJzEZx`x2hbDkgpYLVUn%7geNtmk?N zHJG?%ss{}P2j2U^GqF_RhXn6#Qt&IeNck&J+5vM)O&ST4X9_&220X6ki*VUl%xcon zpl$-WLJO0|y(*5SV6fP%zdUVJc{+|Q0)rrv?cGiqnU{h`khvHP_Sl#?7{|(}L5X9% zz!WXB6XV!PxGw`Rz=!9ex7%Yg;EZwX2#k?F?#ndYNsMFPg9eFXZ-H4SI6RDFo#1H{ z$M{?Z6K)^Fo@L>2{U64Jl-(7k@ znKiW9Q2h2qD71uXETfxXTuo{hWMUgl!3vnA;_631L6#WhGoVZ>IpXAlpm0?r%Jn!X zqZh`J39fx4`5ej*$3?8NyAiDZI+2I*c>m~73A)%C?L@3jfk&{~3$1PUW{RV6}jl80-Hv zHn{jjB}rIyvB3yqCw)(fmcsNzIm|(uSrPncG>?12*vwonMZHGpXl(99Hdbb0xzwyA zvYDK2qRpumY@QE3@pBo|%uL+Pq0lo~iqOx={SKK{fTvUQgt^v&GHOw_f|9~AXENo1!c^ldtcRN@(N63K zdq9$YaI<|;oiVm_qu>%-Qn1WT#C&%Pn13bs1oH#wo3gGP`uT2bc_DsY0tOK368(HS z94LN9RU{;q{WkDO**U);N}{B(Iu)Xqb-FCNsE&>mRw<4??1jPN!;OwE5?Jpkpr%p1 zv%c;IuhiEnM~;3&q{H|b&$r_-s$~f=JauvN7~TsFt+&&ZV-E?e(}zu+eh^*&p)Rpb zmzg^KNZnOArGI*ie^Ma2P-MOT#MC<)>Sm+ znc_6Yj?T|+NYH&H$G!AiQr|>AHEQp~^SKD}635<$oOXXoQH(8jfk9$R zN1{E%#&`?ZsDV%7v*3A~emP3nJO_POxdm(p56iw3Ic<}UH8vhL*g)mhC5?^qTENDr z!3KLoqSj8t#;rw-jiq29lI%om97cV?)hPQn?ThM+*!Yma#$X~3u`%8PHVznUj6#lE zeq!V6&?VU5Q+;kCHYQrY2HygWW220hKoIXbw8WPK8{-NaNik}moC}}KH8CN~cm{Iq z$Bn{p<{MHvL23V^IAskeqnE}hZ)Pq$S{~&Z0L6PloH9xti}GPmCRWFJJ_AY*!dE2c z8_cyXPI;U>8{(8_LFv3QPML#7JY`W%24(W9IM11&bOTzEt`(q+T`QF6tqt)Z@iTsw z=bf+J8~(a&=QQg&Pg?0ObXq)6dWMf(N2t^Xr%OUX|u6?eGEfBz!kdwn&I9_Y+uit_Ek#Jzx9dj zYqClE;@o^8vdS2Hp&Jk&l<~O>_MC)ctRtNv+_pB3**MB*4|)3Si|UN+^k2Xr?eq@U zVDPb>PNCr9XZ9?1(qq4GfkE17e<4?m-R4s4mlKD9LS3RJJnsgcQOy(P%Yx$dYOIpP z_X|^oqDKWHnclbx9%G*!C5_%Okm$~&C~-9CJ&5|3Q9);=kKk6nS(sDM1gmYs;q zz3@B$1A9i{4>yVunS1|2BlAsA$+?%Eh|Hc>Xk>CP2R9L!gD^uz1<$Y|okV1^is|l| zo`fedmw-o*nfyc$k+}xz0D{at;C9PJWUhy$C_Z$#BMTZwWbTB)g3RxepMXn~MG!8`$?KyOc>~VsNDjhQ% zs+D%^ZKLejrB#?;9chU}!RjJ&O&@5iE&&7BU~?D)^=0!*tS&)a2v(P%;BHVNR)76T zjnyNlwy&D}`hZxShlLP{qEEX*z(}lK*QK#qI4emPvC8KPnql<{@Ca5B)Dsf1%9*%e zH4mF9(N4tbMwGZ2RyRSBVD-!h7%@@AYN`dSE<{BrtR_a$yI^7&lL+?a?)`63csF@= z=$NUIDY;n7s~roE88X#1~2KB5K1MHKP6rLNMg0OGMOL zaHScdw!wAHqF;9lh}vKfl?W*BuYr~cg_fkAk>-CHJni@g)5D14c?WTpvM7(?Y#h%? zN8`+&fikTqbG(5{Hk;2?YZDm7Msl75&jh>?QP^3IK~LCIQ@M8nDARwc@l47op!D7x zrz{4g{q1o|2Pl&kG@Z%c~USjT`Od&gJ1uVHC!oqE$)PAy@aibS~z&7L=ZM z$0-3Q;}+#cP|CN&d1|1HzBf*J2Pk8=YKm^BQWtEezruA)NMgxtr*=<7Ry~q2(&iF!D<~-51j$hq|3^Fzs|NF1+62)8laCv9@*arklbZ1bCLV%r`0B-iU4atS{=e zyzQ0nmLrR8xdQ_a=|SG%1_Y>P4{{%-0y5h9A)1ie2HAs*HEGKn?QmT}dXS&Gg#v}` z{oD<@y+4Z9=*By?_kNT_+B*gX35lbftN&29_fI(GW)}7!y)Cr&8%=x1JG{kwHvS%~ zqIeUxD%2%tGB^x*h{Gk0#Ttj>xDvM0BsuyW9~~unLD7dhH*aI|BaRolW9osRaE zv(nD@-|&CT^P3&*2ORCMbF_EQO8Y`bJD+v5?CIL)Xn&=neci0Iw>#R`INI-aw6{Cj zduFA5fuo(z5`!4kMb{oj`+P_HmRV^(-qGIWXus3Z{sN+?vQV|S-dSn)9qqhZr6fxP z=;B(eMOpDHNBhvMv{S4lc{$%ku_#@P+!kfUlaBWCZL^6sFGMw{V%;J~JNId|wg14; zJ~Auq*xcEcynLafz2<1=zC6kvRqvy-(*B&IeSxDr?`Z$Oj`m%%(mw5I_Z{v1j`j&h z``E0sKkaCL0fS!URfYK*9PQjSN%1Jp@1B+RBaU{y?QUz|>}bEw(LO#a?N2(|xo&4` z-{5HfOGo?OS!sX5(atCCZ0(mi+W)(wegCYqa|CbcTK=%3{X9qeI~?uz&r18lj`jx} z?TZ}kH#*uUW~H5@Si9`|9PJAn?VBC#2WO>y!qLv1pe%d3d`J7`j`qn}X}{mmey5}T zIrR3HJuA4DqA04pAD)%=1CI9F9qms$+D~z`Pt8jEenOU+AmU zO55x2#J-=?+FdfoPg?I)xxCT$2@i}wx(m5>nb{vH_kuEQ@f-l<7Q+KMSbPHGpT*^T z6Fjk5q-rT*55~`JThXs`buUWJY!vOjKIt`2BROF|E4}9V1pI^lp{u)IjM;gcyAZ;$ z;NdzFOs-2@YdUP!6MEqycO8lAnYSO(>j~Qc(5vgD$i0aJi}iZKdlO0~>zU7(^@J46 za@p8Z@d});Y?fM!E983SR`AGr=FHFhx8I=G9KHu3Tz#+;*E4s*1X<6-jg^GNHLGWE zTSwL<-sBpLJY3J5XtXY&@VwjLc{^STC>5f8lST1Apn7^0#**-?a(UAh4yTZ-`*w{? zz2+%$=)*&>8HI?Yqru@ADuTI_?9n(}1O~z3l9(1b)N7uXf(KOwIg9bvS;h~aZ&`^d zkTp*}LvGtlX~f~2A8H(aA1W^<*-Bj3y7+Y(hgT=o7e@pyt>`t+F&AKvNF4UGfWx=7 zfWx1?Rpam}*ki{88c!VFg)4$Xw~dmAIJ^YyRB(7%V!4RJsTOef1%tyhU)al)`htPs zVy1(7n4Th{KA;elph;s)cvz==g2HBWF~+!3$D`KOTfx{GlwUCB#wU%jUhoLU=tDT8 zE-}`Povty~gR5@UhxcKBqA|vP3pe@d5;3;xY>lyR*IkuUV(eozjj`7z@(^RAO)$oF z^+$R&eoBzT@qwL)jhnG_FW5+aAC}l)PT;oenuVm-zgTK`CoFAx}C+iJs+?T(p_@ChYps7~8L|$a{!&JPyVZ@T1>xh98?@ zEDs*R*v$9(rwqo{!7_5&i5NTory65i!)4326ESw(5{o5isTMHyTZ1uqMjBg5+!TM5X%CPvs<1KB zlOgwjXIk@^XO<)v(J~41?3Sz1GJz|^NF%h2x6tcthDQV~ZtdxabPITzp=Akzr}TRF z!>VMox??zHFxIIo zqa{&dMB4pt8e=S!+shDRyU*1adv}yMc0~NN!{BDo<|P>&ZSbg4Si+bP91r z+{#Qy#71um*jNr(F>J_&Y_VM<|B?0H1RGC*r`!TIL{4LDOrb2t0vkgpS2JvI6`~n7 z+EY6IG{DAhG&Y`r^~u%(H5{FavEb}8bvu4*x)Fo88!~IfQ{}{b8Ou9yvD}QVSO?-KF|U- z$}M2yZ(G2|#xpcFzUu-56k=n%1#JA8!G`;$?NBjY$U;`MiZxIh8ZO?1@64h4=!0ly z`_T|TtasNO-Cr=`O1&rWs1a<#{zC5EEL(`|p>}>`C+x{0dFrW#uE=KnoI?Yf%@Y*H zLbw0Y&r4i11&^t+tGkNa@z|nttwBjG%8EUxcSTWaXuGt>j!OGsNBg6W_AW>J`yK6L zv(o;6qkWH~{RLe++G8s&Jx1F1IofY_v_Ii!=M(j|=XcMl?BkC1en|v_Ifz=bT98Qmb>ngB%$rxb0n!{q}1M|MS~&*P|M%NxO2X_Qj_l<7cIPi=+K%NBagx`#wi|`>eEYcC{v#qsQ|xU8=WA=~BRo`gE+v^OPU9xCZ0-$YwpBkJ+rsepZ9B z>oLH8VY#~YnR0P`%uc!#8+2@GFt*vHvC)PFn!4na>!?N-lUlNlEz2L&_Gn7i;(8pe z;1dffLe`_@sI(t+v>$M^FLboOHPWu?{bEz^ndm#$`1ZJV)%hoRp459Pd45`7ivL8+ z)27wN9?q9h9ERq)bPaeo2H@41b}sD&&jfhT?Sf|k|JF(Iyb^d;nzrn&(=r3s3MO7E zxs&di;TtQNV5h8ZQvxap>1IftQn`fk5m0o0A(X!cEMfPs%FSZ^6?GpuPB_mi)4I zu;X7uc|9pek@jv-#y%ML&znHmWBfzz>%&~Bn4BsoL~bPc4p8i}e;gDY!u9cunp|T>6tpmlbowtIr*vQE!M9H)9DJ7Zj zzK)*v$O9LFt7M7@&CW0VSo* zB-h`9V#m7gfHH0&;TNFj`Hti|9`CU3fgJHhH8)sHW756O^7G5VGh}#h;JqFcCb60C zFJ}s6uhYtPDR^$Nym2)sdIe9k=RvW3_@|^;Hh%;Z{T`X*+6xL(6kEPb9!u9_plr74 z>&KvsTRxlyf!@F91JKr{oNS zG8OtqQ{D}VJQ1BzJY%3dZ}ngIf+8!)n&)podBKzvy$rrdgC4~4{6paBx5{-G6pkMw z3x7e1k%LQ~5Af71%0f`0zMDL+1!bS%2}e6XZx61Be*$*gDvpsKtVri0mtNNr$~B;r zEgue1myyg|+dzrNhtQSd$O^<*UEG4xUJEUM4$6MZhxdUZ&-`m2eg%}pmad0DnS^9o zCl)>qieA?W+i8Z{nIa@igXd05&T+3GM|;fADNwdpxt4*#b}V%fg!gHI4N#(p)D514 zR-L{Hl=CcI{|%H$i>C-myXDn)f}-Eal5%|j6zbxcP{v8IJazz-E~9IpJY36wd(`L( z>m8(SP$O?Vgk0^QzyKxr5Ga=#IUsvK2jyXl@>@{u#FeP*?RYYj@epiE&LU85wsI{6 zWwC|uH-Iu^EJRjsJt(7SgY-3Jd0rZnZi5#6&CO9W!=g(+&4M;yv;L76Z%lY0Rk9xPjwGeO~w zNhqw+-U&)C&Z2T%4hm~0qV$5|S^ZZTl)P20w}Wzn@qAD!hSQS0mN)JKPt;S(yaoN2 z#q(+K?1ws*Tgv`zPjkhhUEI^A=F1kBd`AK{;UTq2xP2(QAXE>r^6Ot&lR)!c%Z`P0F(r{L?4nTh@Y1-+%U*UuM`L6JP70w$Xsz-I-l$B zffa>pEn8V9A5rn}0kt3#@QaL|>`=3~qmmsc*D4)4U#^y~Rr@QYT7ca|GcYFHQf&sd z9mN*7s>7vbTnZrd%7P$QNDpR%zH~K<9xc(7bh#YVc9gSTAzcJ-KhEnJReZ0@uE(Jc z_m%6fy5h~j`l~i=UbSIEux9OL*Ip4^xoY#ewHr4&ylQ)C@hdDz@~jSWUiis+0fOz+ zpueQQqK@T@S|Ob)Vyd_aADylZyQK+==~`|Z@ep2@b(8wS)iZ$^L3Aix4KkTp3Bane zAm~S3a@Nlh1e|;HrLi1S&o)>b4zeSeY`K;z74@fi94-aIQobL&W%CIimoHbq)0Lsh zY!MBj-llLdEQy*<;N>9R<>i3o&AH;0buP_|_qGEywy(p_@vdIAN_|jwJ&(k!ojZ4O zPsB_nsALDx__CEinyV1|vvuTjr4nQ+*>uh0QFf%vby9?dN&txRn1|u_48tQtzros& zA{I*9vf&}xJU;5@W$;~UNK5B4!H#UYqRy-M)L%ZRm4e}1zb4fxL)j71`gWkcC0{6{ zR!2l0QmSca5;o=tNudly#6IMTh9fNxc}R@ZYGE|U%TzKbc;~VIwVsXhGk#~&k**8 zvq5Pfs4+N$%HLQHR*1RQpN0DrU%J0P=tEdUmMp%q3pJq!DL2ehXQJ?sd$?FeOMzv| zjKOS83+m6>f>?iw#?B6zo;vi$Yg8Ip(ogx?bm&Y)yFjGmg>5gy8bNQYt{Eo?5GMmf_$b_+!i)& zTCKthOA$LwjF)Pe43RL8Hl=b@vSlJATt-H#t=zdUVGK%^;fP9dN!@ScFonn#IDSJF9jXS(O8)~>~e{jS7^{nl3K8R>^Hql|s;&kK^{uHwe$t60w9 zrtA(uNko~e5Ja=@Vit_9mybcs3&ApSLnol#ez&0onfNI6-8%^NnE-Xs2T z&!yCgw=#n3I50tHw4Po2W$4+x;Bqvsp0%p(>P|1)aTUiz+A&vTYl`pkQe{-sF5(M6}*c|Md5TX>wsB~hv7$QIC9qYVd$ zsKs}E>jRfTqqkNtGfqV&_SRFCzQ0ocx=Y#cxk$it? zm=Rw)QCW%e%C;a}{S4MDTZPkN-8l!|+^-my-ZoqU5<@ZFDi znBN(mP>Kwo!lTuj1nhExxB{$sh9}76v*{v6WI=FQWF9)GZGdxtbs(>dKN#+f&|R0& zN~N(doUgHgNpW(^`eJl-ST1c}PBwL#j~k4IJw@)%4GgHmzGYfozmbQ?o6)T5ZS^2i zMlXQT3KkWELSHxz>{#aED0~IJ>R!CSs~See5cQfc1>t^I_@Xf}Xua#{Ndsixr=}hO zVvx)|%rG%%eAz_4Mj{Xx8(f}IHv=9!i19RRY?@(iV_1WI&H2eZUbQ+ETI#w)Se&KSM*RVI@T&m3I zw@IcA>oFl^+agtNm;~q;`p_ld?@fS9Hh|d)V7?J8bD19Tse|5O8x&yP4La+^A|K{v0tR}vYjr-x+JL0`H**q2n zRwKUU;8oM_hFHL`s!0Uj+&=3>s$Fhqp0|Z={r0q8G@qS!^!7IoF?E4N!qE z6celts^x4ZH;~IjQMFOKmtkuVX!Hza)8#ORDG*Ys)g+8JtR)Gug{xht7q?lPepXd| z4_1#b4p+^~EYRpWE!UM7QD9pF7^MQs;S2$2a|^CbjaqTEj3jl^w9;B}odCG3?y7_$ z(cDVaSUX$G{?%ztjn|R1h2bp~T@?L<04hvPZZKFLEEX^#4V$wHX$Tb|sxdLGmN4pL z{KIqs%L^e))Ez0;FF~+=)n-$W5K*yCQRn3|6OA0hxWc>`Y{+cPSYOO;=NoUT;>($` zuD!7Hh___5sGk%?u$+<&m%!4ML5wqi*#4xB2}ZE#h)``oRAhS*6J12Eh!$nWgUXTH zGMPN0AZCZ+NENLzbz+^qgkDo#NUnQXNyDNBxDxvz-54@;jRBo-eA;Y!HyCpyfuNp!(XCC# z+~TI8(sqPh1Bb9F8#`y3(sG1`(SIEFRI(nWk(CUmq1i5rqo+|O&9(6`CLdIX+D}{~D?ts;^Wy0EM=%c+Qz>bAdny2pt*@H2iMcJVS z5XlwGzP?VVJi?(10VPVn3{g6?gJTA3xx(&m;)4~5rnMOAqk#(oOMC=C(RN>1r^b{t z8g?^}eo!S=2F+kV?R2emT^E`sn{Yg2)s1Vyg0qeh`V00*l51UZ^Tb}*7hlzl@DNJU zd8`v+{1Q8ysTG?dBLWk*>dr_Aw$KnMG#YF8G)P_aj0F)hpf#gtvCf{=p-G3h7iIB* zCDsJEBt4K%4|1Fv*=1rwL<%MADq!Fnx~W>bDJXCjSr;5tU=_IQKr*zxh~`to%_t02 zHo4Om^%SPA@1%wuAJC&xRa0*=A=Q0-gwVJLU?au>u4ls1symF@B&(gx)Ja7S!+j6l p;fM_pcxywQHX2qaecIPEjq_(7=;~!oqneK+>%I!Bui=v={}1XO%ftWx literal 0 HcmV?d00001 diff --git a/huffman.c b/huffman.c new file mode 100644 index 0000000..4103952 --- /dev/null +++ b/huffman.c @@ -0,0 +1,424 @@ + +#include "stdlib.h" +#include "stdio.h" +#include "bytearray.h" +#include "string.h" + +// huffman编码的实现 + +#define DBG_WARN printf +#define DBG_LOG printf + +typedef struct _huff_tree{ + uint8_t data; + uint8_t pos;// 位置,左为1,右为0 + uint16_t count; + struct _huff_tree *parant; + struct _huff_tree *left; + struct _huff_tree *right; +}huff_tree; + + + +typedef struct{ + huff_tree *tree; + int index_table_index; + huff_tree *index_table[256]; + uint16_t count_table[256]; + array_def *out; + array_def *in; + int in_bit_count; + int arr_bit_index; +}huffman_def; + + +static int hm_calc_value_of_tree(huff_tree *t); + +// 按出现频次排序 +static void hm_sort_index_table(huff_tree **table,int num) +{ + for(int i=0;ihm_calc_value_of_tree(item)) + { + table[i]=table[j]; + table[j]=item; + item=table[i]; + } + } + } +} + + + +// 打印index_table +static void hm_index_table_print(huffman_def *h){ + DBG_LOG("-----index_table-----\n"); + for(int i=0;iindex_table_index;i++){ + DBG_LOG("index:%d,data:%02x,count:%d\n",i,h->index_table[i]->data,h->index_table[i]->count); + } +} + + +// 打印数据的编码 +static void hm_data_code_print(huffman_def *h){ + huff_tree *t; + DBG_LOG("------data code------\n"); + for(int i=0;iindex_table_index;i++){ + t=h->index_table[i]; + DBG_LOG("%c:",t->data); + while(t->parant){ + DBG_LOG("%d",t->pos); + t=t->parant; + } + DBG_LOG("\n"); + } +} + + + +static void hm_calc_count(huffman_def *h,array_def *d) +{ + int num=arr_length(d); + int index; + memset(h->count_table,0,256); + // DBG_LOG("calc count_table\n"); + for(int i=0;icount_table[arr_get(d,i)]++; + } + // DBG_LOG("calc index_table\n"); + for(int i=0;i<256;i++) + { + if(h->count_table[i]>0){ + index=h->index_table_index; + h->index_table[index]=calloc(1,sizeof(huff_tree)); + h->index_table[index]->count=h->count_table[i]; + h->index_table[index]->data=i; + h->index_table_index++; + } + } + // DBG_LOG("sort index_table\n"); + hm_sort_index_table(h->index_table,h->index_table_index); + // hm_index_table_print(h); +} + + + +// 计算树的值 +static int hm_calc_value_of_tree(huff_tree *t) +{ + int sum=0; + if(t->left&&t->right) + sum=hm_calc_value_of_tree(t->left)+hm_calc_value_of_tree(t->right); + else + sum=t->count; + // DBG_LOG("tree sum:%d\n",sum); + return sum; +} + + + +// 打印huffman树 +static void hm_tree_print(huff_tree *t) +{ + if(t->left&&t->right){ + DBG_LOG("point:,count:%d\n",hm_calc_value_of_tree(t)); + hm_tree_print(t->left); + hm_tree_print(t->right); + }else{ + DBG_LOG("data:%d,count:%d\n",t->data,t->count); + } + +} + + + + +// 建立huffman树 +static void hm_creat_tree(huffman_def *h) +{ + int tail=h->index_table_index; + huff_tree *sub1,*sub2; + huff_tree **table=calloc(tail,sizeof(huff_tree *)); + for(int i=0;iindex_table[i]; + } + while(tail>1){ + huff_tree *temp; + sub1=table[tail-1]; + sub2=table[tail-2]; + // 大在左,小在右 + temp=calloc(1,sizeof(huff_tree)); + sub1->parant=temp; + sub2->parant=temp; + // 左为1,右为0 + if(hm_calc_value_of_tree(sub1)>hm_calc_value_of_tree(sub2)){ + temp->left=sub1; + sub1->pos=1; + temp->right=sub2; + sub2->pos=0; + }else{ + temp->left=sub2; + sub2->pos=1; + temp->right=sub1; + sub1->pos=0; + } + table[tail-2]=temp; + tail--; + hm_sort_index_table(table,tail); + // DBG_LOG("-----table-----\n"); + // for(int i=0;itree=table[0]; + free(table); +} + + +// 删除树 +static void hm_del_tree(huff_tree *t) +{ + if(t->left&&t->right){ + hm_del_tree(t->left); + hm_del_tree(t->right); + } + free(t); +} + +// 数据中添加一个bit +static void hm_add_bit(array_def *d,int bit,int *index) +{ + int len=arr_length(d); + if(*indexindex_table_index;i++) + { + t=h->index_table[i]; + if(t->data==d) + break; + } + if(t->data!=d){ + DBG_WARN("can not encode.\n"); + exit(-1); + } + + while(t->parant){ + hm_add_bit(h->out,t->pos,&h->arr_bit_index); + t=t->parant; + } + // char *str=arr_string(h->out); + // DBG_LOG("index:%d,out data:%s\n",h->arr_bit_index,str); + // free(str); + return 0; +} + +// 生成索引 +static array_def *hm_creat_index_table(huffman_def *h) +{ + array_def *a=arr_creat(); + int temp; + int diff; + arr_append(a,h->index_table_index); + hm_index_table_print(h); + for(int i=0;iindex_table_index;i++) + { + arr_append(a,h->index_table[i]->data); + temp=h->index_table[i]->count; + while(temp>0){ + if(temp>=255) diff=255; + else diff=temp; + arr_append(a,diff); + temp-=diff; + } + } + // 填充0个数 + temp=arr_length(h->out)*8-h->arr_bit_index; + arr_append(a,temp); + // char *str=arr_string(a); + // DBG_LOG("arr index table:%s\n",str); + // free(str); + return arr_temp(a); +} + +// huffman编码 +/* +压缩后数据格式 +data[0]:索引表长度 +data[1~n]:索引表,每个索引由值(1byte)和频次(1byte,小于255)(2byte,大于等于255,频次由两个字节相加) +data[n+1]:数据中填充0个数 +data[n+2~m]:压缩后的数据 + +*/ +array_def *hm_encode(array_def *data) +{ + int input_len=arr_length(data); + huffman_def *h=calloc(1,sizeof(huffman_def)); + array_def *ret=0; + h->out=arr_creat(); + // DBG_LOG("calc count\n"); + hm_calc_count(h,data); + // DBG_LOG("creat tree\n"); + hm_creat_tree(h); + // DBG_LOG("encode byte\n"); + for(int i=0;itree); + arr_appends_from(ret,h->out); + arr_delete(h->out); + free(h); + + DBG_LOG("lenth_in:%d,length_encode:%d\n",input_len,arr_length(ret)); + return arr_temp(ret); +} + + +// 读取编码表,返回数据开始的位置 +static int hm_unpack_count(huffman_def *h,array_def *d) +{ + int num=arr_get(d,0); + int index=1; + uint8_t temp; + for(int i=0;iindex_table[i]=calloc(1,sizeof(huff_tree)); + h->index_table[i]->data=arr_get(d,index);index++; + do{ + temp=arr_get(d,index);index++; + h->index_table[i]->count+=temp; + }while(temp==0xff); + h->index_table_index++; + } + temp=arr_get(d,index);index++; + h->in_bit_count=(arr_length(d)-index)*8-temp; + h->in=arr_mid(d,index,arr_length(d)-index); + // hm_index_table_print(h); + printf("bitcount:%d,\n",h->in_bit_count); + return index; +} + + +// 获取指定index的bit值 +static inline int hm_get_bit(array_def *d,int index) +{ + uint8_t t=arr_get(d,index/8); + return t&(1<<(index%8))?1:0; +} + + +// 对比树节点,匹配返回bit数,不匹配返回0 +static inline int hm_cmp_bits(huffman_def *h,huff_tree *t) +{ + int count=0; + // DBG_LOG("tree pos:",t->pos); + while(t){ + // DBG_LOG("%d",t->pos); + if(hm_get_bit(h->in,h->arr_bit_index+count)!=t->pos){ + // DBG_LOG(" |failed\n"); + return 0; + } + else{ + count++; + t=t->parant; + } + } + h->arr_bit_index+=count; + // DBG_LOG(" |ok,\n"); + return count; +} + + +static uint8_t hm_decode_byte(huffman_def *h) +{ + huff_tree *t=h->tree; + int bit; + // DBG_LOG("decode:"); + while(t->left&&t->right){ + bit=hm_get_bit(h->in,h->arr_bit_index-1); + // DBG_LOG("%d",bit); + if(bit==t->left->pos) + t=t->left; + else + t=t->right; + h->arr_bit_index--; + } + // DBG_LOG(" | decode byte:%c\n",t->data); + return t->data; +} + + + +static int hm_calc_decode_len(huffman_def *h) +{ + int sum=0; + for(int i=0;iindex_table_index;i++){ + sum+=h->index_table[i]->count; + } + DBG_LOG("data len for decode:%d\n",sum); + return sum; +} + + + +// huffman解码 +/* +*/ +array_def *hm_decode(array_def *data) +{ + huffman_def *h=calloc(1,sizeof(huffman_def)); + int decode_len,decode_index; + array_def *ret=arr_creat(); + uint8_t *decode_data=0; + uint8_t c; + hm_unpack_count(h,data); + hm_creat_tree(h); + // hm_data_code_print(h); + // hm_tree_print(h->tree); + decode_len=hm_calc_decode_len(h); + decode_index=decode_len; + decode_data=calloc(decode_len+1,sizeof(uint8_t)); + h->arr_bit_index=h->in_bit_count; + while(h->arr_bit_index>0){ + c=hm_decode_byte(h); + decode_data[decode_index-1]=c; + decode_index--; + } + DBG_LOG("del tree\n"); + hm_del_tree(h->tree); + DBG_LOG("del h->in\n"); + //arr_delete(h->in); + DBG_LOG("free h\n"); + free(h); + // arr_appends(ret,decode_data,decode_len); + DBG_LOG("decode:%s\n",decode_data); + free(decode_data); + return arr_temp(ret); +} + + + + + + + diff --git a/huffman.h b/huffman.h new file mode 100644 index 0000000..2dcedb8 --- /dev/null +++ b/huffman.h @@ -0,0 +1,19 @@ + +#ifndef huffman_h__ +#define huffman_h__ + +#include "bytearray.h" + +// huffman编码的实现 + +array_def *hm_encode(array_def *data); + +array_def *hm_decode(array_def *data); + + + + +#endif + + + diff --git a/mystring.c b/mystring.c new file mode 100644 index 0000000..1f31f8e --- /dev/null +++ b/mystring.c @@ -0,0 +1,74 @@ + +/* +* +* 把整数字符串传化为int,直到遇到非数字字符 +* +*/ +static int str_ainttoi(const char *s) +{ + int ret=0; + int sig=1; + if(*s=='-'){ + s++; + sig=-1; + } + while(*s) + { + if(*s>='0'&&*s<='9') + { + ret*=10; + ret+=*s-'0'; + } + else return ret; + s++; + } + return ret*sig; +} + + + + +int str_ahextoi(const char *s) +{ + int ret=0; + while(*s) + { + if(*s>='0'&&*s<='9') + { + ret*=16; + ret+=*s-'0'; + } + else if(*s>='a'&&*s<='f') + { + ret*=16; + ret+=*s-'a'+10; + } + else if(*s>='A'&&*s<='F') + { + ret*=16; + ret+=*s-'A'+10; + } + else return ret; + s++; + } + return ret; +} + + + + + +int str_atoi(const char *s) +{ + if(s[0]=='0'&&((s[1]=='x')||(s[1]=='X'))){ + return str_ahextoi(&s[2]); + }else{ + return str_ainttoi(s); + } +} + + + + + + diff --git a/mystring.h b/mystring.h new file mode 100644 index 0000000..9039f59 --- /dev/null +++ b/mystring.h @@ -0,0 +1,29 @@ + +#ifndef mystring_h__ +#define mystring_h__ + + +#include "stdint.h" + + + +int str_ahextoi(const char *s); + +int str_atoi(const char *s); + + + + + + + + + + +#endif + + + + + + diff --git a/sdl/.vscode/c_cpp_properties.json b/sdl/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..f3679c6 --- /dev/null +++ b/sdl/.vscode/c_cpp_properties.json @@ -0,0 +1,23 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${workspaceFolder}/**", + "C:/MinGW/include/" + ], + "defines": [ + "_DEBUG", + "UNICODE", + "_UNICODE", + "__WIN32__", + "DLL_EXPORT" + ], + "cStandard": "c17", + "cppStandard": "gnu++17", + "intelliSenseMode": "windows-gcc-x64", + "compilerPath": "C:/MinGW/bin/gcc.exe" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/sdl/.vscode/settings.json b/sdl/.vscode/settings.json new file mode 100644 index 0000000..236a91b --- /dev/null +++ b/sdl/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "sdl.h": "c" + } +} \ No newline at end of file diff --git a/sdl/hello_sdl.c b/sdl/hello_sdl.c new file mode 100644 index 0000000..9c16442 --- /dev/null +++ b/sdl/hello_sdl.c @@ -0,0 +1,62 @@ + + + +//使用 SDL 和 标准 IO +#include +#include + +//定义屏幕尺寸常量 +const int SCREEN_WIDTH = 640; +const int SCREEN_HEIGHT = 480; + + +int main( int argc, char* args[] ) +{ + //将要渲染的窗口 + SDL_Window* window = NULL; + + //窗口含有的surface + SDL_Surface* screenSurface = NULL; + + //初始化SDL + if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) + { + printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() ); + } + else + { + //创建 window + window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN ); + if( window == NULL ) + { + printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() ); + } + else + { + //获取 window surface + screenSurface = SDL_GetWindowSurface( window ); + + //用白色填充surface + SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) ); + + //更新surface + SDL_UpdateWindowSurface( window ); + + //延迟两秒 + SDL_Delay( 2000 ); + } + } + //销毁 window + SDL_DestroyWindow( window ); + + //退出 SDL subsystems + SDL_Quit(); + + return 0;} + + + + + + +