From dc7db24d12dcaf53e1a5022a6b9fdf550170f37b Mon Sep 17 00:00:00 2001 From: cnlohr Date: Wed, 13 Nov 2024 06:09:24 -0500 Subject: [PATCH 01/20] Fix GDB on minichlink. --- minichlink/microgdbstub.h | 55 ++++++++++++++++++++++----------------- minichlink/minichgdb.c | 36 +++++++++++++++++-------- minichlink/minichlink.c | 5 ++-- 3 files changed, 58 insertions(+), 38 deletions(-) diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index 1b3db002..4cc9d164 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -20,6 +20,13 @@ #ifndef _MICROGDBSTUB_H #define _MICROGDBSTUB_H +enum HaltResetResumeType +{ + HALT_TYPE_SINGLE_STEP = 9, + HALT_TYPE_CONTINUE = 2, + HALT_TYPE_CONTINUE_WITH_SIGNAL = 4, +}; + // You must write these for your processor. void RVNetPoll(void * dev ); int RVSendGDBHaltReason( void * dev ); @@ -27,7 +34,7 @@ void RVNetConnect( void * dev ); int RVGetNumRegisters( void * dev ); int RVReadCPURegister( void * dev, int regno, uint32_t * regret ); int RVWriteCPURegister( void * dev, int regno, uint32_t value ); -void RVDebugExec( void * dev, int halt_reset_or_resume ); +int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume ); int RVReadMem( void * dev, uint32_t memaddy, uint8_t * payload, int len ); int RVHandleBreakpoint( void * dev, int set, uint32_t address ); int RVWriteRAM(void * dev, uint32_t memaddy, uint32_t length, uint8_t * payload ); @@ -203,6 +210,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) data++; char cmd = *(data++); + //printf( "DATA: [%c] %c%c%c%c%c%c%c%c%c\n",cmd, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8] ); switch( cmd ) { case 'q': @@ -237,7 +245,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) SendReplyFull( "" ); break; } - printf("Got monitor command: %s\n", cmd); + //printf("Got monitor command: %s\n", cmd); // Support commands that OpenOCD also does: // https://openocd.org/doc/html/General-Commands.html if(StringMatch(cmd, "halt")) { @@ -273,8 +281,8 @@ void HandleGDBPacket( void * dev, char * data, int len ) SendReplyFull( "+" ); } else { - printf("Unknown monitor command '%s', use 'monitor help'.\n", cmd); - MakeGDBPrintText("Unknown monitor command, use 'monitor help'\n"); + fprintf( stderr, "Unknown monitor command '%s', use 'monitor help'.\n", cmd ); + MakeGDBPrintText( "Unknown monitor command, use 'monitor help'\n" ); SendReplyFull( "-" ); } } else { @@ -292,24 +300,25 @@ void HandleGDBPacket( void * dev, char * data, int len ) } else { - printf( "Unknown command: %s\n", data ); + fprintf( stderr, "Unknown command: %s\n", data ); SendReplyFull( "" ); } break; case 'c': case 'C': - RVDebugExec( dev, (cmd == 's' )?9:(cmd == 'C')?4:2 ); - SendReplyFull( "OK" ); + RVDebugExec( dev, (cmd == 's' )?HALT_TYPE_SINGLE_STEP:(cmd == 'C')?HALT_TYPE_CONTINUE_WITH_SIGNAL:HALT_TYPE_CONTINUE ); + //SendReplyFull( "OK" ); ... this will be sent from RVNetPoll break; case 's': - RVDebugExec( dev, 4 ); - SendReplyFull( "OK" ); + RVDebugExec( dev, HALT_TYPE_SINGLE_STEP ); + //SendReplyFull( "OK" ); // Will be sent from RVNetPoll //RVHandleGDBBreakRequest( dev ); RVSendGDBHaltReason( dev ); break; case 'D': // Handle disconnect. RVHandleDisconnect( dev ); + //SendReplyFull( "OK" ); break; case 'k': RVHandleKillRequest( dev ); // no reply. @@ -320,7 +329,6 @@ void HandleGDBPacket( void * dev, char * data, int len ) if( ReadHex( &data, -1, ® ) < 0 ) goto err; if( *(data++) != ',' ) goto err; if( ReadHex( &data, -1, &value ) < 0 ) goto err; - printf( "REG: %02x = %08x\n", reg, value ); RVWriteCPURegister( dev, reg, value ); break; } @@ -432,16 +440,15 @@ void HandleGDBPacket( void * dev, char * data, int len ) { data += 10; // FlashWrite - printf( "Write\n" ); if( *(data++) != ':' ) goto err; uint32_t address_to_write = 0; if( ReadHex( &data, -1, &address_to_write ) < 0 ) goto err; if( *(data++) != ':' ) goto err; int toflash = len - (data - odata) - 1; -printf( "LEN: %08x %d %d %c\n", address_to_write, len, toflash, data[0] ); - if( RVWriteFlash( dev, address_to_write, len, (uint8_t*)data ) == 0 ) + fprintf( stderr, "Writing flash: %08x len %d\n", address_to_write, toflash ); + if( RVWriteFlash( dev, address_to_write, toflash, (uint8_t*)data ) == 0 ) { - printf( "Write OK\n" ); + fprintf( stderr, "Write OK\n" ); SendReplyFull( "OK" ); } else @@ -449,7 +456,7 @@ printf( "LEN: %08x %d %d %c\n", address_to_write, len, toflash, data[0] ); } else { - printf( "Warning: Unknown v command %s\n", data ); + fprintf( stderr, "Warning: Unknown v command %s\n", data ); SendReplyFull( "E 01" ); } break; @@ -493,12 +500,12 @@ printf( "LEN: %08x %d %d %c\n", address_to_write, len, toflash, data[0] ); SendReplyFull( "" ); break; default: - printf( "UNKNOWN PACKET: %d (%s)\n", len, data-1 ); + fprintf( stderr, "UNKNOWN PACKET: %d (%s)\n", len, data-1 ); for( i = 0; i < len; i++ ) { - printf( "%02x ", data[i] ); + fprintf( stderr, "%02x ", data[i] ); } - printf( "\n" ); + fprintf( stderr, "\n" ); goto err; break; } @@ -543,7 +550,7 @@ void MicroGDBStubHandleClientData( void * dev, const uint8_t * rxdata, int len ) { char escaped = c ^ 0x20; gdbbuffer[gdbbufferplace++] = escaped; - printf( "ESCAPED @ %02x -> %c [%d]\n", gdbbufferplace, escaped, escaped ); + fprintf( stderr, "ESCAPED @ %02x -> %c [%d]\n", gdbbufferplace, escaped, escaped ); gdbbufferstate = 1; } break; @@ -570,15 +577,15 @@ void MicroGDBStubHandleClientData( void * dev, const uint8_t * rxdata, int len ) } else { - printf( "Checksum Error: Got %02x expected %02x / len: %d\n", gdbrunningcsum, gdbchecksum, gdbbufferplace ); + fprintf( stderr, "Checksum Error: Got %02x expected %02x / len: %d\n", gdbrunningcsum, gdbchecksum, gdbbufferplace ); int i; for( i = 0; i < gdbbufferplace; i++ ) { int c = ((uint8_t*)gdbbuffer)[i]; - printf( "%02x [%c] ", c, (c>=32 && c < 128)?c:' '); - if( ( i & 0xf ) == 0xf ) printf( "\n" ); + fprintf( stderr, "%02x [%c] ", c, (c>=32 && c < 128)?c:' '); + if( ( i & 0xf ) == 0xf ) fprintf( stderr, "\n" ); } - printf( "\n" ); + fprintf( stderr, "\n" ); MicroGDBStubSendReply( "-", -1, 0 ); } @@ -693,7 +700,7 @@ int MicroGDBPollServer( void * dev ) if( r < 0 ) { - printf( "R: %d\n", r ); + fprintf( stderr, "R poll(...): %d\n", r ); } //If there's faults, bail. diff --git a/minichlink/minichgdb.c b/minichlink/minichgdb.c index 5d4e7666..88687089 100644 --- a/minichlink/minichgdb.c +++ b/minichlink/minichgdb.c @@ -34,6 +34,7 @@ void SendReplyFull( const char * replyMessage ); int shadow_running_state = 1; int last_halt_reason = 5; uint32_t backup_regs[33]; //0..15 + PC, or 0..32 + PC +int gdbasserting_break = 0; #define MAX_SOFTWARE_BREAKPOINTS 128 int num_software_breakpoints = 0; @@ -125,6 +126,11 @@ void RVNetPoll(void * dev ) last_halt_reason = 5;//((dscr>>6)&3)+5; RVSendGDBHaltReason( dev ); } + else + { + // this is the reply to 's' or 'c' packets. + SendReplyFull( "OK" ); + } shadow_running_state = statusrunning; } } @@ -201,7 +207,7 @@ int RVWriteCPURegister( void * dev, int regno, uint32_t value ) return 0; } -void RVDebugExec( void * dev, int halt_reset_or_resume ) +int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume ) { struct InternalState * iss = (struct InternalState*)(((struct ProgrammerStructBase*)dev)->internal); int nrregs = iss->nr_registers_for_debug; @@ -211,10 +217,18 @@ void RVDebugExec( void * dev, int halt_reset_or_resume ) fprintf( stderr, "Error: Can't alter halt mode with this programmer.\n" ); exit( -6 ); } - // Special case halt_reset_or_resume = 4: Skip instruction and resume. - if( halt_reset_or_resume == 4 || halt_reset_or_resume == 2 ) + if( halt_reset_or_resume == HALT_TYPE_CONTINUE_WITH_SIGNAL || halt_reset_or_resume == HALT_TYPE_CONTINUE ) { + if( gdbasserting_break ) + { + // This is tricky, but I don't know how else to handle it. + // If GDB is stepping, and you ctrl+c, then, it will ignore that and keep going. + // Here I say if the user ctrl+c'd actually fail to switch run mode. + gdbasserting_break = 0; + SendReplyFull( "E 99" ); + return 1; + } // First see if we already know about this breakpoint int matchingbreakpoint = -1; // For this we want to advance PC. @@ -259,7 +273,7 @@ void RVDebugExec( void * dev, int halt_reset_or_resume ) else ; //No change, it is a normal instruction. - if( halt_reset_or_resume == 4 ) + if( halt_reset_or_resume == HALT_TYPE_CONTINUE_WITH_SIGNAL ) { MCF.SetEnableBreakpoints( dev, 1, 1 ); } @@ -268,9 +282,9 @@ void RVDebugExec( void * dev, int halt_reset_or_resume ) halt_reset_or_resume = HALT_MODE_RESUME; } - if( shadow_running_state != ( halt_reset_or_resume >= 2 ) ) + if( shadow_running_state != ( halt_reset_or_resume >= HALT_TYPE_CONTINUE ) ) { - if( halt_reset_or_resume < 2 ) + if( halt_reset_or_resume < HALT_TYPE_CONTINUE ) { RVCommandPrologue( dev ); } @@ -281,7 +295,8 @@ void RVDebugExec( void * dev, int halt_reset_or_resume ) MCF.HaltMode( dev, halt_reset_or_resume ); } - shadow_running_state = halt_reset_or_resume >= 2; + shadow_running_state = halt_reset_or_resume >= HALT_TYPE_CONTINUE; + return 0; } int RVReadMem( void * dev, uint32_t memaddy, uint8_t * payload, int len ) @@ -465,10 +480,9 @@ void RVHandleDisconnect( void * dev ) void RVHandleGDBBreakRequest( void * dev ) { - if( shadow_running_state ) - { - MCF.HaltMode( dev, 5 ); - } + if( !shadow_running_state ) + gdbasserting_break = 1; + MCF.HaltMode( dev, 5 ); } diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index 270862c3..f0e8c972 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -2128,14 +2128,14 @@ int DefaultWriteAllCPURegisters( void * dev, uint32_t * regret ) int i; for( i = 0; i < iss->nr_registers_for_debug; i++ ) { - MCF.WriteReg32( dev, DMCOMMAND, 0x00230000 | 0x1000 | i ); // Read xN into DATA0. if( MCF.WriteReg32( dev, DMDATA0, regret[i] ) ) { return -5; } + MCF.WriteReg32( dev, DMCOMMAND, 0x00230000 | 0x1000 | i ); // Read xN into DATA0. } - MCF.WriteReg32( dev, DMCOMMAND, 0x00230000 | 0x7b1 ); // Read xN into DATA0. int r = MCF.WriteReg32( dev, DMDATA0, regret[i] ); + MCF.WriteReg32( dev, DMCOMMAND, 0x00230000 | 0x7b1 ); // Read xN into DATA0. return r; } @@ -2172,7 +2172,6 @@ int DefaultSetEnableBreakpoints( void * dev, int is_enabled, int single_step ) else DCSR &=~4; - //printf( "Setting DCSR: %08x\n", DCSR ); if( MCF.WriteCPURegister( dev, 0x7b0, DCSR ) ) fprintf( stderr, "Error: DCSR could not be read\n" ); From aff6280e219978476f3cfbc20840dbc5fb6f2d4b Mon Sep 17 00:00:00 2001 From: cnlohr Date: Wed, 13 Nov 2024 06:13:41 -0500 Subject: [PATCH 02/20] Update minichlink.exe --- minichlink/minichlink.exe | Bin 103424 -> 122880 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 minichlink/minichlink.exe diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe old mode 100644 new mode 100755 index b1fe776aef6c387d36d7458dafe22800b03b11e0..c00f89a5af64f6d5c4b9ec50d141fd75d221cf3e GIT binary patch literal 122880 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 m+tmGK_gnY7?{B!j`~HFZRYN{|EE1QciH}!*852 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 z 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 From 00c21a7179f04d4bbdc70282d4feadc756a1a951 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Wed, 13 Nov 2024 14:49:03 -0500 Subject: [PATCH 03/20] Add `make gdbclient` as a target. --- ch32v003fun/ch32v003fun.mk | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ch32v003fun/ch32v003fun.mk b/ch32v003fun/ch32v003fun.mk index 0f24e3ff..81e0347c 100644 --- a/ch32v003fun/ch32v003fun.mk +++ b/ch32v003fun/ch32v003fun.mk @@ -212,6 +212,9 @@ unbrick : gdbserver : -$(MINICHLINK)/minichlink -baG +gdbclient : + gdb-multiarch $(TARGET).elf -ex "target remote :2000" + clangd : make clean bear -- make build From cd1d6895499e932a0ad012fcbbb5e52ac0b88715 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Wed, 13 Nov 2024 14:49:03 -0500 Subject: [PATCH 04/20] Add `make gdbclient` as a target and change single step behavior. --- ch32v003fun/ch32v003fun.mk | 3 +++ minichlink/microgdbstub.h | 4 ++-- minichlink/minichgdb.c | 6 +++++- minichlink/minichlink.exe | Bin 122880 -> 125440 bytes 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/ch32v003fun/ch32v003fun.mk b/ch32v003fun/ch32v003fun.mk index 0f24e3ff..81e0347c 100644 --- a/ch32v003fun/ch32v003fun.mk +++ b/ch32v003fun/ch32v003fun.mk @@ -212,6 +212,9 @@ unbrick : gdbserver : -$(MINICHLINK)/minichlink -baG +gdbclient : + gdb-multiarch $(TARGET).elf -ex "target remote :2000" + clangd : make clean bear -- make build diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index 4cc9d164..09daa57e 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -210,7 +210,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) data++; char cmd = *(data++); - //printf( "DATA: [%c] %c%c%c%c%c%c%c%c%c\n",cmd, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8] ); + // printf( "DATA: [%c] %c%c%c%c%c%c%c%c%c\n",cmd, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8] ); switch( cmd ) { case 'q': @@ -306,7 +306,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) break; case 'c': case 'C': - RVDebugExec( dev, (cmd == 's' )?HALT_TYPE_SINGLE_STEP:(cmd == 'C')?HALT_TYPE_CONTINUE_WITH_SIGNAL:HALT_TYPE_CONTINUE ); + RVDebugExec( dev, (cmd == 'C')?HALT_TYPE_CONTINUE_WITH_SIGNAL:HALT_TYPE_CONTINUE ); //SendReplyFull( "OK" ); ... this will be sent from RVNetPoll break; case 's': diff --git a/minichlink/minichgdb.c b/minichlink/minichgdb.c index 88687089..508c5dc5 100644 --- a/minichlink/minichgdb.c +++ b/minichlink/minichgdb.c @@ -2,6 +2,9 @@ // Connect in with: // gdb-multiarch -ex 'target remote :2000' ./blink.elf +// Optionally, use these commands: +// set debug remote 1 +// target extended-remote :2000 #include "minichlink.h" @@ -292,7 +295,8 @@ int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume ) { RVCommandEpilogue( dev ); } - MCF.HaltMode( dev, halt_reset_or_resume ); + + MCF.HaltMode( dev, (halt_reset_or_resume == HALT_TYPE_SINGLE_STEP)?HALT_TYPE_CONTINUE:halt_reset_or_resume ); } shadow_running_state = halt_reset_or_resume >= HALT_TYPE_CONTINUE; diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index c00f89a5af64f6d5c4b9ec50d141fd75d221cf3e..e6edd8c28bbff708d9c846827d328ac00330c840 100755 GIT binary patch literal 125440 zcmd44dwf*Y)%ZP=WFP_Jgv%&ekx`=!3Yb)|M2XJ81WzPr5D>hU8jV;lMVS#4fy7Ca z!#F-z@6}pu#m8%_t(6cI6K(;ih^PqS1!%Qr98?g?RXFc=?S0NZz@xN_*Jk9*dzmWR-KmVyG`KbOaM|oZ=c<01sZ}mGT zj-PVbt{zd0DWXk757Ute?W;KIUg#SZD3 zN{{E7yL)(U{M*p$+|qV<2Iq9o$r<3O_If;D@_!$%XGd>Rixfr(h&g&WO=hyu=HPUNJ*gx68LW?rhY zU!Fi$>KcZPxh&>4YHNlY-gOPbq)$id$o4IXX5oU*y`F@psWm!sku-{R%UNE;TIz*x z;ALnfdYMJ;`>f3S^Qz!}P>2unMr+Dijrj7CW%CyaN7i6Sq!$an{)IJt>l*fV_eLw_ zCnq*H-Ym5_%76Dv+qM()_wrJYpdflzkgSjw_`yh5_3?e8D)c;Yjn zWDS8BNz_{^Z)H=fWF82tZa(rEM$JwkZ*|hQ0Sz;ffsfQr;YNNE9@F=dye52Y@E%Fz z8%f{e0x%=RLF?L~UJo>u4_oH&5gtEb;w9st8Z;99{NykagQoP(^_1Dy8i~A9N)@Y9 z^V7$;e3!5EH(rMj7Fj5p{h?v*-C_7&J=17vjs3$&4E^N4X*fI4CBE0|Z@dJ&L>Jg^ z{2Nd0zTWU5@^g~K#5CFd#%uY7UoTmWga=B|9+hRSEz($JtL=4`@uHGfPq?!K%X;O4 z6&Nqb$-*}e+O}clSVPZ1mZh{=qTl*Yy`JPuuTg6oZU4$O%zf5eDqWp8NU)r*5y1`nL7|yKTlPn&+&%YX2h4}TjK<${PWma z!~3n#-WA>;Ht0%dTFuWY{>MHm#rQ@5N)%R0VF^#QDa`&{uyTGb@V-2nzN7iuwA$ae zQiKuk$lLm8ly(VTe$_9o3}3OV&g~P3)P(L^9b#*G;gD@F>Q7E<;hB(BqHcN(ASETi zMYV3@$7&$&-6)XUaD!1;HSNd@L^p? zp488U%zVRaPkqgk*=9WtRPCI+FXJHl_8J;hPlQtH?;I6j~#e-Gjz>OcAyK@ zZLjoPTzT=&V73`>`J1H-0kg}(=H8ZLKn5+`u*y?(lE+?$I<(|zm>qaPXvA0Mq3?t3 z_H?TtHow~SB#+A030atz_B8BMt|V9U0eE&{%Q`xqu)5o2^&^MXVwcs+d4Sc4uo_9^ zEexCAyS%{pp^xGGZ;JDi?RAE|60U|+np-+m;bdz5A&BX>>~+HG$(mIdH&@z$#ggJ% zBD|sX9V%cXyzQP#E~<)@wJsB*Q;q$osZPotv$}Yayp~vN|0?|mYobhu0Y?u)&PbGr z*y+bzTSQ;r%-qycf37saHIgnO^W-hKtYx-pmSLS>vlOhj6HMb3b%JTUA2wlcq!EO* z;V?D4rKcj0Cc#|R)HgSVX@0cW5Z2o~?5&UWCpcsznK5JP(NrNUjC z)t!WNvBI(gw}U|1OegJIv^|~Q-euhQi^rF3HaAj#hme#pSgCg}I#o=pfmEtS! zQqA*3`0A`;SuB0HQM0rmVzvuQlVE8TFi-SCVQH<$b8;3-@M8zIk?im$%CC8wXb0vg z_zqXavUr}!pKOrnM?>PqD9pWzSaTp#7=Z59WY2w2Btfd zZgDB4XG@C@YByTJ>s!XfpXa(762ZntlMf;mR1(2vNHvBDHdrb4izx7VrxO>Gh{>Bx+8NHgG z;kPZtz}{~qWyQC4wO7aY`KCt@(?Kb`Hg6t&ki7+jlX*{{&O^04oWz4PN%~kGV)9VL z!)@}=m51&;sNN%zt!6N^0}D3j&S4~OEUs4d6mbowAD>V6y0N%KcP?|EVO~)jl(8}y zsDO;M8iPV7r*S&!R|BzT>2%0$k{HHi6E6|dvg9jV2_t!D@j&Ux)x|Yc7~vkloRD-? zJMb#m?6n3GsfqP>Wc|e`r4^@Al=RojDJ{OrPFG4lel9n*@VQ{LXSg|tpcEnag-BWJ zZjy_lE|I4+kpmMok)t8fEaQqa?Nz^kIma(5m(IK)zTfA+=WbNfTt_8;kW96CcPT-4 zvSz>fkba}ho0ur2RF^0idFxxm@mH`Bz?yc)`h;a#mIXg8gPT4t+?>f{2YO}_I*1(n zKnm+jAf;er3{j3k#r^|RrGCOgN))UU&#$X2$|MWV>4lvNepF}f1Z#9*Cws4}Y{?7e zgzSI^1}P-m{G$2oI}U7nC%h7cx6y?uJPlj!!aSi&o4o=o++6PgP(((>{}aGc-Do67 z5k85CmD)jzjJZTN<3;<#(J`kNwKR8EqBhUZw*%YXSL1{p-`w6P_GhFNto#IXL$x-J zIrci&JX0oyZxa9P!2OUw){S|dmLNPSc4jHqG-jHnH7~6qT1=oS-Xy$zI!TugpU>wl<9! zpXKxQ_;}-s2Nvv@dyKYQ^gU;E5E+~Y<^MMsB%y>19?X`(?F!ae2G2 z6s)rh1}a!*8T19_$lwbeojP_B#fKx5C>|ZJMKKyHbC?V^zvs%J&is)O#AQ7j(vA>5 zaz-N*0m-|%kWqxWkOCfVKDoY8>w+DKy0DBK?7(CPhBcF>umcylNEtcUfpau0;(vXm zgEhd#$}jq<)&x5c(6F-gjLSTVW0O&XO<`5{mT|i77wyKA+vo_1)>ba4+uBmmu|i90 z{QpwX-xHA06`h}{Xu^eMRdl)o%T%<^Mart^#TpjzFLWy!aaL{^H+K-%LfrmxL!|eCtw1+OYY-h~)5`G3Glm;tmX#|KN{rr8&app~?YY zhW9MTdU|3*!|_A8{`(%`nK3zHZd1eGS+F3o_BVY@f($NI@fCUD`0~84S@}cyujIzg zdZMRg<(Zes!?e&dPx9C+!uIm8y*50z(k6>c$)cqc=$)ONG3;cF-QpCKLqYuiO->!9 z9ja{F?Z59_I(JrCC%9S8%_@gNQb&U)U4|k2FYg|vFVCN+wo0VTR`@P$>89#J`iG=vjf5)C^Bu6v0RE7IQCikO-EaihO-F!T zdIVS{FjZJJ5902~q(uSF1VHB=q{cVx0PU^ln4w%&BN^MQ>%YTU`5iS%je#qb(@RcT zq10X_6P=^%l?{i!C(Ykf2wK+Qt&o=!!#o`J$`N2s904{LSSOz601!v86j6VB5$d+o z5|3XMbOUMa;xc+{kI}r~vPY)yKvJZ52$8AnJz&1v_bf;mdsaYo8P--nNNPG~r){@* z_S*d+SDmab9ujUQ6V~(=GPMLRbZXz7H(lYF>$kTKSA<#}LT5oJ-47~ZrOPty#>$*S zKE>$LH62s*5M4pfX@|A=RLh{gQE^5;0ZV3P4nuaJH~GatF!H$5$if>aF=8&Q^e=2} z`>M$LGcy4-o70uB1D``g@&vQ;T+}(wOeasio99I*&vw{xrmKZ#cFuFYlc$H9XS$O| z7FFCl$8^rq+sU(Kj}ovQ80q9`B#(a~P6KUv;6l1j3inuQVY!&cD$Lkb;#q){5~Sr0 z(smc=`?sa4v2q7#vmpH*Bt$O6c7R7*1|%`Fv0e_^8bO-@T3Y++i?Q)c)xSMkHRy6u zMKiAb*0EeN5zDgrxHRPr=Z&wtcnoHz%KU)QywZFp+Q%Kp?ZC>_C}mf{5c5{zMpW#; z-$G0R3(0>tN*^ocuU+_TvFB=+TC97Z!~$2|I42||3LEBKg9QTnI1Az@q@Xu zOO%pOHKjDvk9h|Kt0*Hkc@cA@_Fc~`lHta*1am;O`LA8igjeR}c`BQ}jvgIJG#1Y% z)loUj(+T9RWQv&akTH!i$;VZ&d>glLNW|MdMf9ml(wr8K&W(OWQ znBxYSX{hJ07^%Obdn&HOg!^9*^~4HE`iv*$p`aV|G)(&`l5@RrJwghN@Oz9sLl=W0 zMJ^*4VGAM?;CRIoK)tb^?Y{Xu$oSTLIe*eK?Z6sv;uUuS_C!aPtv3U=@|dhy6yIMk z{R)cw3EUX9eeO5BZ`<3N!;-7AIU+yjHjk8_pEn!wQ`$UAeg?$%7DoG5Y~eZ9uibZ| zl*@DTPb9HN^9cFzH7om$>*MrcB7jEI>S&jF-p1CL&oFnS#||%zoiT5$*GOKPQ`XwJ zJ{k%)%gn5P|BPrb+$=Sy-+y&9K)N^FoG(-hP^Pe^oE$G>9qn_f2%!9m;*#hKx*2qV zCE;deHIjjAt8rar^s~nGR~?~%V6txs^zt=X4Bh$QK+P)az{p?X*9>L~K;JS?LZF*3r6@H60jv4u)tXG(LAQp4S-N;WSq`4W{#m zodoL7IXy-IVYIhwy|sW?li^*N?q$T^maa_YaWhl*30OrDd2{WjESMnx<&N8d@hgSF z%oMyIL2-(nqKa;_9!N8wsh~KXZwKBC1uN`?cMUML(9+p7 z;eVGU@B04pgKr@c^P@55aspB2ibR*N|DhF?{@1^*xHvLyY^-njC3*g)B=w4v-`vOF z6z3_`!k>zX7mpho^;u6L=}uz#9!He9ayT#4F*)4=tm$h!{*P2*&%C_0SQi=e^V%}A zRU*RmZ8`H>PJ+0S?~4jo`jm=KD%c~yBIeC~Bsi{zLv;TxfbKjM7s^wN<+vG`IXlmF z%i6n0ZS24q2qQkbk0+WJAC;FkhWK>GphYA{dt%h_xug1)kIIW3<>tlzm!!Q~wPaBQ z^Oj}gOWqP55hvjoMEPN*x%?CWb_IX(qkeN;nZ0M-^U{q%{s-F|&K1ESioY-OV(Kc( zzAm5LBX&*dEQn;wab3f?!g4g9dRyn=c@?ngMBzk!n(XLRiBVVvD2#x5%gIop@#A|7n#V8ojEMLntzr8;P$aQf5-neR zZ%*a0tpqFc!VT7e>GN{!KzCJ4&V1TT>Z{sk&r%|I#Jdz!=mLdSn2{sXT)TOA;fJiNkPN!N^37nBJJn?0`u| zaYyq7$=q20Xf~jNWsa4JufcVA?Pto+1PNP;>u}n?@GYk6;HAH1i+@_N3IjVqrF%ej z{G~t-C&%6|bsTxPTaJW}Lv&C)S>mC2otY56_Mr;+Gs79=z8@w0gw2iCAMxAOY*o3K zsGhm5VH*{-8}{=zKX&XXNPr=C&n>|U+s^e&&o>?=HW2ZaM$Fb_havYp9J#CU=t@vM z?sVUfDerK@{0Nz<7#ed&;u0{n2d?YuaUdG=P)JA262{Z>UNH2$_hglt3FxWRzL`{C zM_xzzc3^+2oA+PT$Z4)j>L;1h)hbmrZ?RkMl1wT~zHZ)3>Qk9iv5Zv32@5jGO*%=j z+jN`mX_d-FPw!||XSL_0(vGIRy;3Vfzb{aR%Y@$XE+ZAtBUn53NVGC|e{}HLz;oA#BhBfF7&srV^=t7X+} zOpQrQrgCz%Ic7@3eo=+#-DSbZlb$Hf71kVV(wz( z_Cbn3L=&*C-e%iN2>98l19*a35%cO^SjXc7c_UFr^4 zL88qLI7^~3#_MLgoW#@;hQ)B=s^FrK2YuYgG$}soB~Nm+ZB{-SolXz97c5WoCiJ{u zZ&O?B8XShI+D|LX{%Pc1IVDl~Xt;d&tjLIDpEIiH+!P*;uRsANO2P4EA=SNtj?B&; zC^liIETtv`Yey)_rFKy+F~Rg}k#laEeCso*K`><0G9hdA8}ThWtf3ELSJq2;1C|?1 zAA^Qj`INbL&n{+Al~2G{ByrOd-o4&c5&xgldv-+zd~42n&aAvQeS%cP-*gn>ENdlV zXzZv=7Qbd!J`whQI^fFZ60`0tpY?=4`HXbp7%OFy4|ry0*(hZQHuAgQh;>{mKsff^1S}f8*!W%c=K>(^b8h zzEbZly581bK1W$cp6*#Fo~gjQ8Oc z8nvteRz6i#`@LblZRBDxynDmm58(Q9@fp?R+TVy`P_d^Xrd6Go^;DTXV24@xAPrXD z?!R}2pe1~d2{B>zOPQ`H&5^f_yg97ja~c@Qz+GY0Sk}SMP;-J2cIsgm4BPFg6u822 z^j2Y%T|;NG_Coxkw~(tWTMgeN*n!W8G=*{Llq=`Gt)IAB&;-fR#&-k(V1Xyy7uF8( zn$;(Ng#IMy=Egq=A^^uZ)x*^55rytx<`*w?-z%zo|;8vfJ&z^<+waE^Oe6 zUcrmzW_lmtLy8D$bAiX0K1)@Ak+4rNCj~=P8GUII_qei(HyzRLQHBJ zBTl07!7*BS=rzNt;_Y;o60#_@X*w5mMXclD-^sWQqjm&=CUKwtM}gic2ps}_nb-d; z&`R@LF?9w=j#MRJvXa^i1yp`$_HjmH!c$V?NFuKV{Wt9PaJ)UwUYFinwmzJgT_Qc~ zyX3?J(#hicz0;KfWXTlFle0yt?YoSF8Tq}vP{}X1GpCLix+8{^f&9u^>5Ztexualj ze2dqtoL_$BgZ|{ngzv)T_N}LdljrA^ue|jn3Y$_@yL=?3NtP+#+biWW{!vWoX%r`t zm@vPR?PjAZF)-%7aQVJle-RAfIc6><3g^=$@f;+`-55zo%F?ji z7LM=Fi@lj1~2M=rq^Bza0qjTDCjgL-{^UeNeIV4p{=eHlMJq%oD>`h4HmAt3W~Gf$=%{mfe^>-FQ7)ZWKiRaVaRTg}4+wZL)47n4>-yJ^GZ0lHx$6z$Y zK-J+D)e}_O!N2LWOG!hGP8G(XOU!ALOkE-r*nzyxL1uuEAe#h~e5$6t-K0pqK`I{) z?(qNhDI_EVJ{Xe$xb|aK0VFn>>M8{ag=vyCIk9w+Y-xUlEsY=TdZDZ}CBArKdT`HY zCw>$0eo_9-w6wXS!6k>@J~@>3w;hQ0Z|C@;tH5`izhMa>TU zzy!>lijLL=q$eCsa}$lPXsVcqLv|g&3|Xe%oyac8B72&{_tEgZ=r;(^`ns?aQ;BXo*P7zZMqk2&m)dGjv=M-ZOA+%TXB!v2Q5Gp*3P?s!1|2|uZHFX7?LF)&* zqKB_O=x^MDMpM5Yz9B&+Fn^=O0i7mUaZ-oaQVs#JC)ou4_#*=McMxdIBJin0;A4iT z4g%4evP+Nt!YO%lR>nQ zvchu~s=kX%ZU5?G`cd~3TtPcG=%X*B} z7k4(Kx_QB?+V*|Pm?SDY%(Zmk_$t*z!|cGPuV|d5N5Bb5GlH|o!FduKZ9g1958_Rf899UVtDw*6&6;X{ByycQ}Cl3OO@_RGggPq~)r#%tTV9 zO*?jYazV}e`0 zb!1TM;23VE-#CDu3qV%uS@M)kzxA@6IEaiAMoD~M;q+h&3g$lw- zJ3d{|9tz^bFn;n70z+q%MHFY*zeWwaB{J+ryD|j*9-Y=!RF(wnK-Hf_4AGOEj?=5Z zQr|1jRNdX0`@Y)Jm%5%@i756N|0sL)J(t{v!@hmlT^o>cWbjepPQ5^22R4$-s!ON+ zRc`IBgTO{6xCk->|I-RM}S=nOiHTm zDCvBK<_QtY4I&byHK!|>j58g0$0%54myE*81?D&n>zw3l4*vO)F3sqmvI&r=TUJ$< z01}C0?@W8aLCabQc?1w^>#VZGPHjKGgg}&QXRqw18tsIi>qdM3J;xPkI8>kO+2U_H z04l9V9I~)CIBnnbAp-ULPi?#5P(D`4e@{IK4To}go*rp9luH}?8>NH#?`h?4{F^i5 zUmo-~y~eYnCh6l1lrjvi?yUwTrY6$-v;;w4gV|y|KTGAU#sC4X5fPn z6Zq$9xculMpV#og8h%y=K6tIdKUKqz&cJVaN5Q*j_)!`7K~3k-^GXD3`O);>`-j3` zqTy1EhF`>B4nHSoI#P^=pZTGJOM!^;<_sOrE(O0z(>XN*FTtup=jg-X?=%1DfIpnU zfA%v4zgy!AIbH6^^$LEWhRctJ2k2KKHw~8`4S(em1s|;8v!8R}n{nE~zZn4h-<^Rk z(DJ!W!=KE+>$E)Y)9|AO9+j>7MW}=4b44o$V0yc|0>XmpWmxfdWDSJ9^Nr6*UrYu* zRHMu$YXL`&aiO|eXCFt0{uwE9YD#)W!cCdViXy?8WZ*R?p7^Y^L?!=c?e5ga6&tpfLfJ@GEI7Bb7myruDZ@;4 z@{}qyBDuS^HZ16jCKKhQE{q8+oT)+ePYU+!l9xYg!M6!2*lDm4ZvJfDp|@M|T-ebH zHsg{Zy;|~JSdM~u3SaSbz`jxRB9SxC?8y5uFmVSn1-u798+>ygJLekc>XM!*?A6Zc zzjV?w1>c{Qj!2$n)(V-k9W)O^o2tjJvd~CB&Mn4Gzo2vaek_Zyk?*FTmX$8kfKqd* zVeYZkgICt70_j!e&Rs9!H_wV5O%#@Xc2+{3z z&-r8d)#g@f7VpH`j0RhX#Wt3;&duv$*sVr|djAf}P|PZd_!i_eSQVtx$~GgAbBD^N zrqQ~%6QsBkq_~Z`I8o=LRB_9Uh6B1dqhYz|7bBsZ#q4y#@P9fD*Lo+SmaS3$r`@y1 z^+917?@OHBvv+7J?4Hfq%G|JhGO+|A%d#)akR7;&b^i}U7uYp-yX!%(>y4(;S(1S- zohkiT`ey1u8Gq$Gk-@&DnzFCU2xtAXY`TRsQeUY>!Z<`@S<0$L~Ot zR**D|;}F18>MHI&E_SR;4S!WvQB?15oB`FkieB}GKXM@5v#!Dz8S7rxaA)zawoCw& z<}70Rg)vS4^f%onJynkRu904r=yw`iYI`AWP@Ti+f8&#MK;L(ua#R&(TNs~AL#YkP z*3&qZ%o~Co=*JJ2wr{hp79zW;v(;}OWr z48o)a+k3I~6R0aMS&87elm7kVaj`o!V>eTmx= z*GtK^>B*`R)<0S1hxwyBnBU>hJQuztPz5ucScU^mcJW7VTUBhUYOI9ixOD>r|0BPv z9Zss?WD)<{scnczIAIs}R%;@8MT4T}DRvlYl0B)z2CYO3oXkDQ7(Z|z=I|_I&k84L zCq5&i?{wjM68plwMC^*-X}W%a3h0I9sKf^%v1B06X{ly1nwwO>U)4TWVaN9 zh^M82%+_7fr0CzIbbgijN$PR9qMu5)(EU{HThD9|YS=!Bl+WRvD#ca zrfD@B0MUGow?)webDu2xi)Kifj{{48#iZ(3kSxKVyAIgxVar*=a;dm0672>xY~LsxC93je z6HU$B@x>Q}{i{R`&KLIUNtB({A;Y}0SVd|^hnr=RCt=d_8}d=KsxJJwD93sN^@-nE z94d(UIdOpce{Nkdo>S(|M5Ixt#qBqNyQO>%)51?;NDx zgH#?Z4$VGQ79M`C_0nG13ETWi$i=`+f1veDdfibDg)4#6j~bRsokb4WGAL`UPK?c8 z6cmPCQB>o?i70lxs6b_{u1u6Tlwh?1CAk}%6V{89WI&&PP29VA{I@A7F=}ZJOTRJ<2>0-_U-dQ?w0#mla%d(}? zY|#_y$#^uLb?0QDJB3?+R6SjdZf;PWMvfFu6+ND6nC}|3AIq>bLrfDJu=!KATE;7T zrID;Dig2$3DNI-#_>|ZS9G)?U|Gei z@`|X8#AqcUB{GR2xT5MWSh8jRZimuw)0>OgqF&$YxKWoU+iXIDA~W(eL)1`Zah-Q{u;JFiV!UbOSNJRpz_Z<~7n_m}eu|SbVS4SjMRcwo+cIIQL896l)gcDcow3r|7!5 zWK<67RU(Xy2XWpL#Sf9$|N0xn>~`SywPGD9@pbL)_0%88jb1zbr}YQ8S*89!j=xC? z(!HG{^ZQs}f>yq8%|4oO^#}5z6Y3B2id}y=%47$n^zeiQI--$ww&rvY{nQC{^ud!z zpM7{X*)l3cZgCRCWU{>jYqbn8JRL3d+xTzV4gHt4X5E&(^ltToB$sV=+Ft2Sa%ib! z3DYyPWhZJ4x!si4NrYBk5aVws!573Xp4V9XD45BbL-qT;w~cIMFlXQ8StwvTIjvh@ z#Lcc6g&@9eO=&>gLe@(3I< zmNgW3`VBw+rn{h7zkh2@9tt@1bB!f*V5*Z*JtMYN)9D92It11q zRJt#{4Nj$pbm*&CrfTyms}N4&2Xa{q89$lX#C?Afs%EN126DTm?-6R!QFmmkidijN z6za+7fBiwFfHKz1P_0X&GVGJY!)vNaJiMf;2nW#!?K;&CT*^$0eV)8VIS)aQn8mQfmriYx4Kcx zC!zqwRI_Y~(|9e+(L_l~#WM1%ETrmVsTUZU{I6>rNj#{#Zn7{!5vp?1T0H1;C)B$} zp5+iE&xSldte->jEWH)@FnN|9%X6tbORwd*M4qMHc@A28+2|@=TX*SxLs*~=)!X?| zU)(OZ?F=Q}xLxRPTt)`_eZ4zsH_eXNtlyHCYD`5)NQq8D&I12EZ-9y>De8i&m7PV9iUGf(4-E~#}25n1GL!z{j3AzX6&y#ozESF zo*f7dS62H@28G1Xm#-AhZ=X2}W&WBjBx1~3#i&jWT?P$Yh{}QX(b);+K6$5|>s7P@ z8b3~Nd5VkTM3*k<%k)=HNXXR^3KdJFw(~prui0w18Z5Q#GpXQp{F=0e<$S#J+YG^vPKes zbgYOcHjr{vVa^J>npEk)k~LdXn~K+9r#OD&aZF*K>^ap+jhy;}Oi~lN>vpus+oaaD ztt39t=3ls*k;EDRQR)7_bwxm*c(C|!-c&CU#aF#Vnu~{*R2PZRz3=4h8Qn?77ti43 zjpD}y2g?xU?KNea#h^@)NhJ9EKSOK;hJqng3`G<+gp?r?ox(#1saC*ZgrQ}a7?o1X zWUW>4uL}RY=Hi*+C-uX<#lO=Jjm1x73U|uXcXUW8$v{vMRmD=0v}#!v-Disb;F5dV zCHItmc&Yf0@}Mf^(#>#>ry|?s-OE4}-A&)fjxY9`oidyyo%mjFY;gS0xv>EqZSVf?`T4!zr&=R|kN>@Hfr{=)dPK{wf-A+Z)Y~e~U5kPXA@t{(#!O zFBFp%IT%$Td0hqd){N^><;9Gal@5^A6J>jHkO zSx(nvaySl>W0f_1l`m7sz2vd3gNUQ0d5Zh!F`D8uM+h%`jV^a*xT6P%z4XSMBIh_o z7Ha%?4*nhBw|&{oj1{X+*sxr@Id{q@o1YHfXFi2=*=Jr4aq;rvw-@nyEYa0f<_1pA zj4|K!H+@E8Vq~zASuH^qnGYb&HD&H#R9Uv$zt&v3=i~5+-1@dZ;jbhXmr7Hjg*cK)Q!a!_g{rXjqSW!3CEn`9pg$3xiPrG&J08;K zV+A8-xCq~99yzQD+hsd|jG1csz;xl>ftpYWW9;LDl;fqwQbjk9!8^5?32+&AOT^Zd zSA-xs`@%?KbWoH=1rKW56{%_oE=Z;^$%xNmwOiCiZtieTCZ9^2QT7Bk7h}=U)>II! z&7B!czaYVYo3WOQcBe^#O6P3%u zx*q&6fV!x0PIWy^t-fjFhZr*`B615YK=ahgUDWDj|imkl=g80GjPimIK*x zd-fNy#W{Q4DvAiw*JsEI{nw%$N=}yaE;;<~wvvRk85kHDomR3=&6NKG?dz1^aL6e? z;xy7sXo$WokOQ`Kw~nob6J@4YVvSY{m1;q#QHF{|efeV*z$go(f0@AiU)GJQOy+<{ zM&b>=$uwe>If=<2(}xknXM7ik;WBf0nxB%V5$LP$Ts$Hksh;n9@g&R0 zs~=^~>(!5wczl%(1MXxV1NzZ$S5tnWs9P1h<3=_S}anjI^5ODxmWgY2?4b>5G1DH zU)a44f%vTppwFR!oH}#lp>ztI;N>01maXxUs@51|KDpuQR8C-7X9$px74E-Ux=J2D zQaCLYusV(WA!OuGynDxw4q6O4A11=_)i%o_(pRd?RRnHYIQgU8_eCid=IjrZp(-u6IVgluTRsfgKTFcw1z|o+zsy)tLRXX z54U8i2=PW#q+L|ALr1=w*P$cdfX-nFb+)lXM-B_Q$fPh$u$XlFveNnn$yPn}g(M=o0l)(aw)`JAN7V z!O#~JnsxDWJ<(rFFZ>x(5P}f$_@~by0@=&eY-y+Ur1L(pnll5W-{-uKprm;a71$jP z>}+6nJFq$j#=h^JR+YRYqoZ=t33j{p=a`smL{K4`B{F=ado0P7AKwyj4I(UcNR4D& z=NGtg%mb~7{F>83&9i}X`;c0hHJE{f+$NGk$DAvz^zxUTX?5+55uqWGe=Tci=3C~% zaAME}Z;0JSlJj*jI`CYQhB>mx4h&U!{$G%T+#A<{Ozx7z$PhDz=usSg_BU>( z)+yQhN=w04#7xOdqefh?q4R5GGX0(P5dksXJpRUq!57cwAwnhywn8~{JFORawOeCn z!9Pb{oHj3&{K-Klf>WKWDCWnySCMMh3Kt8P*{MpcTu2SSpWJq!;2zcSUrTQlSr3GA zU3_L=Pqbfr<`6qNNPzd@d5uY46UnIy$A=etVjI$@qbZVd66o>0cJzJeDd~664}tb@ zpv%mWL()qKF9)sBkPwwR-C>!^Q=d04g2{go_0k+h3l;9KKaqB?4f0ZC_0k#rP4#3E zwuLRs;P@D!?48y~a3MKf%TvVnDC8XNzFb82o={5`k4pEIPDP!^bN|@gs?JN&LDCDsDaWthn|xN@ThBC`YQ$s_>WAx3mL z`<5&m)yN`&9%hriX#=Di$ep~%UER)AVtsK1#mYc?*cdd4!CubSCknV1r&?CPte-hW z;+lQ?y4>~>UgW``ERvhDhcXsh( zER*MR@I&0rhCT?bF)F&&&J!#f3e2L0l%s7xuh)`E>hcRO(9-*RMRI?)cqd8+t= zIz{_Xiq|P+45f&hhZWgI2EF7zMy@uw9DEQ@1CgQqeQr~Z<=L2FWs2j=XE-%RLz2Gs z9c;qpcOuBz;bd06lt^%WMQ;hotL@k;&_xz)Pgischk#1(&h+JiK&S9G&Xe?H;puL| zwgx9b?dMDsek|{aersM+e4XH;jdSx~py(I=RnSGWwj z{fD1A>6_(U`1^{AFpn6g)AzXPsys=5Tc@9?)4z7p6K?(&bb4={{;5uvjQ8t={q>6R z58R9wxEXKJ=^yL#)g2ip>4Y|&u-wg9;AUh&P&j^Cr?!vGwDgRNOzHg4I_#8J~;iGeR zlJ`@cc8i<#Z+RzeGHGo(?PfRaJtvI~HiZjxTGUN@*-4YRp{dhmx@qbinmtzft|iHv zx(Lm+{wlNDWI!mOm6aq|K|C`$3wDkvlbV3v2U6MUmA*kFd#rVgs`Pg?k94kGa3(}k z!sa{Xhhe!K@*`_AejN9N|5~<%)X0u8_BSZYI~OWUCdB+p5PY8<*gaeIz8-LJ42+~$ zMxpwf^>s0+57fvSQkGD>Y3sj$NQk!-5n=y09-J&Zk9^iy!rAVWkL)rvlSAZcW`S8v z=puSDbB*2wzBEJX9a;u}zwsu_qTVoLey({$xIb01m9rIOM7x(GWijMz}#Z1r|$@ddG;ijBr&*k=tT?j>y; zU^`c|Ta^@u_mS=*E{GhKrG9qcidSTm+GjmTm6722IjQS}RW3OGNnNDiYbtUf6^XI1 zU3lMDAt(13Ob^GS`jJi0-l~jozNmZSIr}>}6xl0L%BsXderWtlml&?-_obhsGh|G2EBZD3f8$TrqKW>UjQe9@`WO9LDwtm-(lt8+F zA=fvm>G_$48Ly{sb=IufOw5&Mb7T)jGc!yD(g2le-Mj}zqj~yseIMIGE8=_dX$>n6H{0WpVe$OeQ9f|I2 zq9c-L2kIb(<>`W24CeyAWMHIZTubBqhbW5*6RxL4WJQgOkJhmBZ;VM?nt0IlrO^Uh zzA)E;#l+{j?gXiO%9_E_V+tn~P7&V8?@E_g9iKUjnA5b$)#m8ZSPY9pSYu`=V(x7p zDZ{vD*9%UiX6dVxbW8BKki zfz7{gOi(ng5=~t*?E)h{tHcvK$$Fn8fOK13pRF7T7EOJdNVwGJ00C9ce#a63y7$m@*%WVXY+SFL`t=U6&mfk5mHGws(6ele*;Zw)Yx#}0 zyC<~*$?3grrPZ}6vh75|!^s-D?way-cj}|JOYlS3=RWpJIOYHdwAJ9iVnAvUszNZs z-zYm%R)+h$Y$V6hI*Wto5I1%8q0y`It(AzeJ&ssBqFT&$vTy(0&+>r;Tn0k>GKco# z&|ZX9x2++6hfrL|y^NCP%K}ktJc#RTm62?&oTt);+tH7kcHiFLS=sn+Na_t#1rEUr zAei>st^U_r&3G}{(>Z0k)u1f5Lc5NFKC(%`k^0a|e6Meg&#D$8oY_3Y_El>nIazExR@gg}goLVDi^wg$H*faw$(kRy z3dN{hZ#2Iw?$Cq0{QvQ zdXk@x>UWxp$G1;k zI54Mv-`TP5WxH9IBQ!8LJ*IJWbSG|Iw`e*%w+B5nuh_%!lk~b!tvD5B8+jn|ovmQjCv~j{q5Btq*BQsb@@L(8)kI1!mZJ_E{NM^p{{j z-^18%Jr8c&&YN>Klk$~Y@ds%+N`C}M5aML<=LP0ygHmP7b|Rspxx zvERISn01o#G~DXzJcX>IoTrGD=R6tKehw~j0ALqC);IDeC4b&jGce~8XYK)oEs2vP z12;N_ua~R$KBdVszQ4O>g>7HUp8bf7A@5sJ2;nWY9HLIveUNS`l&40X*arA>ei+`S zT7xCUmXu%dWSvVc|LYG^mZup{+Gg+@P`^a4}1Dgn!&Kk_s{8-ynxdLD@BnF z^K-*orA9phZhAGVB)j+9t6Y=ynM8|a{?l@(D`mdV&*BqZs5HTJJPuQ2N|~u+18OYd0ZX6ns6uI zL3mmw0z?0*enwBWHyDm%%0qW~8(nIhN`2JqvY&n^vHIwTkkws1sELa8OEtfCZ#~|* zoJ=}8t4tNGrbhJ{s1_Bp-XqZ(SIj>8ApOA_1Xq}{+4KulfopYHxcwb%>L|v4F7vAYROUre=A~I> z(kXXZizp+z%$>{hjPd_e=2yM`Lp?X+23cP)47v40Np@P5hm|?&2xV&FCmz$1+Z-!0 z;%y>1Qz$+FMLq2!R^(u68PgO@F^-SV2zg^iSH<_uzOAS(++P0!R)o=Sk*u9ndSy~# z2hO`m&C+QS)m9e^;l~|Tdn);VvGg!mba=!e)uT8|a6K!wAH`ISjKQ5q19J*+zF`X|Bj@lUh^d*4 z9mplO%GQHL^I?V2KB^>e&vq&^fD&ak{BfJ)*=eokchBZy#R&}QaeWze<*E^1{S7d} zL^+QwX%Zrn=#cM9$ShO)X@*&0RBur!Yif+6W>(zArR_?C4pn7Mn*HJo@lc4f8Ig%}L)0`ppAVq-|t0BW(v9 z@OBxKXWrCgn>0o3E)~pWaY&6DcdgTyW%_NSe!EfUvv_Mc#FhD0uTK~>3*fQkkQfwf zmq#FbWXh#nd++Q*|Le*T)D>4=so-tg4BoqHlahp1hF$J#FPbmsWgE6jCBlnBQVxXq-UpXq z#ie-QBQgT~qg6*)8JVe*Pk~xa7f3yRvbRY}^F*hn>od+4I>Fw^7 zQnNooba0pq^nsjMn$zYrBrj@$L1OXP@XsKmVsA-Cv*EAuNu9C46%KZcFRR zK~!{&oY^2Gdj`WneppQ{tS|HMxm)EblEPlt32P8?N}pWTO6#9-V${7R`llO27J+{s zqh&f9nPL)Y4o-<>T!K8*tOHQy>G$x&n6YEhumrdtCu zMMzK6>DI_h5ka?zUR3ThUAYzzJ^sj2=^;4P+K<#m%UruCNTRg}9NKrb8iys)&Sza^ z8O2B(%@7~^32E1pW_cG&nM+kapj9dbpQd0N&QfXjotBI+h*?&JE|3f!GL&sjJxd{y z>?fI|vq(ZtTLmObOMpr=h|Q2Yt!*0AUxOB_`JIs*`VoD@4lI!+5l(QDD4jPT9U|c? zIbApjcvbhHrG^@+BTc2jhCb=`8MZ{JN%qtdpx0?A>K@pop-kb$19fiZ=;%>&up@8% z`{OyVB4$T0T0+$E@I4Ffxfs$Ha0|GYv!~jyoo}>QvRbiZMHs|YAjv6ZEch@7KL zcvV<}9_iHnwc>hE#QKHok970_B?`fPKjtnXi3w1vPISjTkl9SQzWfR~Q0g1Ni{ecr zI}V((_4*Vm!%ivAlW2$R84y1h6Q*{0+JUJL$=a7JlJKc;mV!p`-BdvAU*e1cZryK% znMAH)&S6Rh58-DqIw1V4paoRA)%{g020QPg#n({6HOG?|#pV7AD57eAPK-p+Mi-&r zGbBOc7`Nri{>>?T=SSlt=qsRzZIa{ZlSOo5;A>PoS)SNmH%)OUpV)3#-bx`7=A&s0 z$y-&_5zFTL3SgQ`sR+~OJop|?Ga3%A3fET^L2|e>XHezi`)k}e@#8E`XTqk@d_%7W zhbEKK>BZ2y_T}6AvW+>VrX|%~QZcP#$)3)SDAHur` zH%nR;_4rs?_0PkU&WH5b-y@F3_iB`3%O*N0W(`!FJV?%-$5MH`5;3DV(`{WE|@z z>T}Uwac>KCmxx~6?m@t7dVI0C%%0fIaZz`+pLA0fa9FLc!^+py$v=wwvr?`2z0kRo zo7_?g39ZfHd+V$|u1J4SzxaM~*wLRPE4}f9eP*YziEDd$JxhK^p;i@rDHFbS1N(=? zUU7KzUBG-6a`#eibW$aKYn(Nmtl{QTh|@QpR(*4mWdf9Ko|~+QuA^#%!K z>!xqne4MJyi~pUx>U)oW=Lj2LV%#I!Y&_A4;rI{U+r|o!-q~dwWa=%zQ!-^-E@em_ zYpj$pNtF?MqAsCH$5+ta+jIC)AB8lM3e5J!X^IlMM@hN2)mEBcHiw`B@o@ahAHwB? za4*_nJq%4dHOCCl-viWqpC;5rt+=lS>OXa;Uk7#F95jO`{TDr;>)rcm5sRfB?ewI!kVU zH|cPx<-B#cWQC6~C|j1Aq;1kS7s%x%%$-DGw$SIS%V9#e{yo1ahfm*wr#!dAbkGRD zC2VKDU$o*B-eBbKtm=F6qeUiPA$GrEB#V}NR;bQ1MX0ZZg^WyQP_6*C0Ms&(Pg!f3 z^bo{(dBt-_R$DzZOOC$YOl@VuN0B5CQ)=XI8UnCNzE%2;y~0u5+c=5oy^RpUCTmi5 zsUw_Hf0ZfqDWUXvIWwwg{m9jIU>E|%HLd~`}5i35x6j;=J z7r$d_*}lSe{i@A2G0wwe&3lve1-QbH%rb=KidVF-#7bugi|;ta zPURLZQD8H!{K~*m79>#0gFU45HtP;b;;NpR!pVG|Ga@?sD9zp<0BZImx}ddZEl;lY ztR-EKE|=V1QYSNAH(6?DEzC~NPL=LzJ?5smLC-|FSbF{O_Pazn>yXJ`g){f#?Tj5= zdAEA0n93$=n*Pnm=VM81(!ln(jAYUct+#-rYn*ytvP#K%Rd*%pbie_hr@@;v*xEx3 zC-bSGlS$LlH7Q+MXd}tQm!=c9RO`{=i#Yq$O1PFo+lh~uODQ{{jl_xOI_E2A(W8|K z3&ER6Pvo3R(DCB4_zDn#!W6Oo5&eKp7PPKyYtrn2fRG;Y$0&=f@wjYwQU0?-=!9)-9$(fP!&y*N8 zS;qm?lffFc$f&Q$SfgaK3M9}A2`lQ1i@FMXH1&^w*10&s1vUcXVn#1iZK z57a_wODEY)<}5I4 zb($2w+uNew=3SzNyp`)TVVk!w+>o|W#FF&Mc3<8s{dQ0@G=qeG8cj(r>H9zt96=OJ zPvzXWoqOqBGQ4hh!EMJS!*31uP4^|ktJ6m%$NrwlK>dE-^e)Np^Zq5`G)Ly;<;Zey z&&a$UURFvghpmeFDjQeFzGQbSjAL%*D+ESa)f_Q(qG0 zlKp6v<*R0&;a|cGZJgJdj&U`Y;%xS?S4NKw?|HA?uV5W9wZBK? zJlmBS^;a{^!zYmV7Y~di`pjoa{?Jck7CO9$&n<+ea>*DW5Ba{jj*X;` zlJ^{Xk{&f9=6ZV_G?`38ZU1?30p5=`zqvl+%U-@AH#(gLz(W9 zA!XQGl!L=6>z`oQsC{2=c}@DBg0k6TK8!z1{*`&08Bh8WP>q;*Qar&ZHKm&*Gh=kn zS#l1%V#-Qezwk2I`(m5EJE?E%Ct6VIDhGy6F?f&DAC$>qHh81tsa>V!k9wBT!sjT| z;)75|0O}yNy+JUDI!Yys+QJhd?II5Aj99jQ(K=RTWr7@%ndbOnPG3c3YcFRH?7-%^ zQefd0k&He?$z+jxB0u>LB9ej?VY$;KvS;-MTOK0~SHLpkRsJYc% zZ^XNbT_WkP!gxJwPH0W#jbJO1_vFgt*ooo#eFf9=cq)x=@sHvhZ%!m>OdJl3-%`n* z8(+#klQohhj}QC)5tYt~9YZIk-Vg915drgKJMh3gIq1E){qn2WU)fwtbMdLz)F3o0 zGp6Y}t+h(2jFB|F2Fq;8u>Jtn5GtZ-VI;4Rnt#6Qg_XG%$r;O?mPhc*+ozSz%R86v z6MU5y-{wzVFj2lJoSVErIGV{2n$o%BXXbF5Cb-p?3Yn?>W&{&wGQ=@jy8Z5MOO z)pNXH72_2(gs?qg{dDXDMSoF(v+*TQ0Y@pn80}D~Ah(gYd#)O1;$l=pLRP7p>tIp zj=JxBVJQ*Hr&G8}32AV4yzLa>(Ilec?=Xj!BOyA%5EgxD-v_JYY_Pif2tQDx?ep9-wFn*wDc47LM@=s@VP4`@^e5j=F>Tz6KmG@|7 ze;&(E9RZ}z za#1>3wmV$@35DOF3s3kKK!7Iw>|#ckfxk5p^-AGrD}ATF3gp-U8**Uv@u>#0ZV;Ed zgtcXRorIn;%PAYBRJHPPhJzUfQ|(^Ngnv2?ilZQdPL<*lUiO;Sc&cli3NlT|^u{J# z@}V4E@=hE}J)AH90|(DW9Exw@s|0w6Sipm0`H7yua(%LJV;=PhYzJcHyY?YfK{~tq zz5|L$c-J187{5RQw#D?RWZ^j%DW6~nspWkd7@zBhV=*fC;zSu0^|V3EYO-ex(jKwg zcZO=|nUWfE?T1>y(Wwu^WvY=^oa0CN*}XI;dKQ}_(Qc%+DgLh?*i*eOIWbS^I}rOJ zL1X9CKtEp?IjwD55snm$u?d(w#e%U8eJ`#MUnG`4G9Fpr$xHXBtH_xj>!RLr_-aC| zPZmFlYAaOL5oNyecgP#^Khl0q#red})%UD`Oz&=Om;RfmtV#E_B!D1~@k0eMpUNgX z{VCe4=tU+q6w*_jix;#}AqJWVOeSDijkjp7s!m)yV+?CAKI?iMU9KZEzYE*z)l#Or z=Jr=eX(bt!s~h!rP%{e{&Z-&>w1$~R#RAnTg-?zVXJ=*o@UG&P@`0aC< zZ*1&nq0iI3DLg-7F122TC~G+QYTR>Y$6Qk~l+w}UEsj1tjSrswHSzQh=uD6G6n;2b ztQHb_Lk!^ThOoU-5DW&-(gpxzR3s3N!pl4h~ynZr(9?c{{4{ zWy~Ss@O^QCJm$?eKep;AD|I~tR9)2?oy@x_I4A{+%SgZLVx0k=cy%S1cIVTxT^in| z9{K5aoebYfG$m1A4^Z;>tOM*dkO5!k$_(s@iWOig1EH>hoygHx8Db`i>6cRso9stg zAyR+mP?VyZYHn+~%uBc}luw6{6#GZKqPG}@7*>3fH459SA|{e|Vokg6dm_^GD`%*{ zcBLDX$#js`;EnibLp$)3IV=@a`~U|zY_d|Hst;bC8jC#O8V~lcFY;~_n%tDMj^FyT z=>iiZ=Ff(mN^^z3X$q0P(7ZcXQoS|DFk_Rrm+lV#f4x@#wBEjYPEY>U%(;NS=gv7f z)dDzq{_ln#SIpo)0tG2cce~z#z~E5 zQXiJQr|4997RuLVQty$}t~ynoCG~tsO$P4ZReZD*TjT`%QoaJ;C^ZD;; zaZ4_6|2?J99Amy6j&Jk&n@*OO^0%jjNBWmkpVZYlnL_B(@HjW0Bn8d43U$$Q|Bc6A zZLSY9x2%dU%`x8lif_*nstVMnTd3twdNs)QhnQ#f>RlLffn?kv@+`3KYzD;r`^!(`A*@Uk{hTF#{w46a&}}pa`gV4kZc>5GLz=*FL8z zm4Nne@4KJ(fB(zpL+YG;_OSNaYp=cb-oL#zJ;u8Caq%=-DvlftZv07V;Ko*hdNm^|^gaH`PUHs>`54sGdV)`-f}= zDn=x7Qx_Ro6%2y*Ci#HKWmzZ6>quU$*{Df-1y4xFWM&(IcyzY(a~f(M$MU49ACs@K zYT9Fhr+(yc>E2p2N}!5fT`zGbx^ZtM*cYp=k3H<<@|N{BZE4@&7Qj(Lr;J%n8Qhy$ z?=v5kH-03EmG97eh8793Ctk!X*cdlf-BegVk#3+5~w)s zp%!a63RC*ulYF<|LTw07P}M!y;xpqyCpUf8Ti3c7&N^J-wLJ^3bmImHj?Jl$pLL-T zZqtnBk8_OXZOjgLTA}0k;_$6}IqrI)N|5yxcwDm1qrs$_M@UJ;^%ECwaq-hHJV*ed z#4NqSyMM+pTmqeQyb&)rPQ0vu81(G2#!+(OJzB|r1N&QMB~DZO%xJn96f0eITZS^~M~p%urXxl>Ahio3WXh42SUP zpsE9vPFvAbBBRf^*{qV5?Jdv$L12ccgx$D5b>pHVk^S?yVjkHy3G6B4@2W*q&HNQ= z*1lQNsIlg^`{`kW$qEJXbDl-GCd$`%@xSvbM129YTY|;Q1;GzXiY;y!6J!aCN!Tk+ zSj2=iehf`ctj{hhfXUSm)J0;krPEb+`V#rmzo?b1Hr1r!!{{lyCOMZmieKS0vwHqm9O<>^Nnk^{N@iBIL*ICTybkZ~}qxb1Q0x zfxx}y;|*fp?ZmdOA}Z~%a}SkhQyd<67N2YxUfki}xo1+t!2~x^nUiRWM0`LJF%dF< zEz;?8rkP{nIXei?%2-$W_0d!u*My_bkW56*L&!ND8s`~4@5l2-;iJMa<8(EG$_14w zOM4hO#cJx4ZTO1{$vPajc&O}<`3=k_@JTO$aNf$BB#(!KA@J#C!! zqVMEvCt+t-B*zDzeutxL9?!xfCt1S>{g0|Rq zLRPH!12SYia8z078_ZOW;Up@p7Kc;x_&!j>9`(=qRFa$l1xxx{vak?56=DWMU2Fws?A+0H+|3F^mx@~#jtSKlxl5Ehr>4{J%eYb zk)h=EAHtUK2U_O+F-PupzCFq}?x;`vsJlPxp=y$BE}zo%?fjhj?y}VWXzpmJGIP)5 zFGhiVCQDDutnY0#Gv$Qj)0T-x8^=-O^y+4w$qgR33*2>BCl8gSX%MLZ+^ z>BXdxq$c4xZo*%YaM=NRjWv^H0+E&xqJmz;-i-~MKw7YmxmIGKNVm?bkjR0AfoJn< z#b66<&STvk3eW1}czKoLW@uM7$+``#=>Y%Ku?=mIVBBj5?zvD1T*2kSylm%%Gb7Hs znx~j&zfPE0{5F5vb64?KI+f)`K|5_zJpD;ki$~n{*~HPm#Enp|?%xZF(S~QWEZ9!| z_mN(01OQyTha%NP3zrF0^9?j@Y~W2qu=1!P9y4>V;YBKG=3XYjzmqe8YzN9BkaapX zeR%X}!m~p^k$|IR$cW4RL9);;&CD)|JwUdS_KOlf6)EY4qb^DgJ&E!c@q48Eo9+I7 z3IImJx4OUU+}{@W_s{O{FWuh<-QRoM-|6n}_tdX8Bti|SytA}&<8OK7&J*T=Cuu`` zvapPnE*sDqd>My!bCN4T@!(&Emqvi%6839buc5hvQp} z@($SD(xnZl%1RD4!uY@Neir%yy)aj}LT0RM|K)1V2o8b2PQIe{%;xdoQ7y7$7TTHk zqZ1y>Jr=tKGW)iw^4oL!@-D4m-%e(7ej~LNtbV0_;eCCAN3(b}SnYqLh@_)-RFuk=en%?Mkx3`?7D9T^~i?ENu`QgW4dDX!xYRObL7YYV%)# z37AIQ=OrCC1sBnV)DsSYCp6I$KJ{sZdg-TH;hiP?xgGfG?Rl!dSbw=!eI+-Jd%a06 zHkwqa6t{8$fn`LQ zsz6!RYf(nFrN_YuM}@`*t|Mz!Uaf2@r0{|cAAV0n2M)`kgmohyt!Xi-vcpGb-4z9O z_U`k=NLwAEUKp z^qYq1-d*B3{4J{xQFKnqX_0NxX6&;|A@SoE8_nA=EdA-#$mLHpqCGPUwUI`akBV(Jkg~;W9VaD z`34l6lHc97U@{?Y)p?9HSLPAr5u$)mD=D!qP+LwL2)jW>%rkghRF~NSvU)6c0{51U zi7z(UwfVQv?dB^&Q^?nm+VqbqDLb>_M0GS`wv ztPkYG?#>B#c4~`P1!8#t&z|t!QY`{_DeI1V!h5T<=te0bcCNYBDWGAC6s|=v(-5BB zvz}4j0L@jn?WLW5^%)$U&uHfM2YjhSIRGULFk1#p%+sQuOPf+}dy}-Lw%DyrRfO7n zQ}U!XFd$tUO)5c&^L~OCr25$pP!&mTJxC!{jpqvc?m3$T4!>f>b4Ma^>$C-Zq@38< zci#w}f%(py1Fqi9{VoycD_r3vAZh$>PM~iXi0oc&3Jfnt+FOVD&L4UX(Pnqr&%-t3 zKIW2%*O8$AImi(jlY#tAX*!P&c)!#Zej=qV<anq#s$Qi{+_*tWXb{O3%h7G@h?Xc-YL&=xt*v~#>dHY&a=_rIOOXNBF#~ewSdC_QeYSSIx&1D?8keQY?|3`dd)Oj4@GR7{J zR+NJ->sJgIoHqrB zk3NB)&~mcQp-{`8&iYlMfvlcXACjHOg*0_Caa>xT?;evw-#%9Y-*?7mRVK!Wqwh!4 zgX^{E4HALCH2v?(up)EJXceE-801uJH6Id>rt^m=^b(8ZZv5b>N`V)VNPS3ls=cvv ze3c1-lhV1Wvvs9*kC@;e%)K@Ov7(GTe(b47GL*W zcpN+7Lf*xF;5lqb?^i*if54CMf#c>l&}~a{YxVBnKt_aoLr(tSa|%Q9J9t&t7PA093dyVBL&f*x%s~i>~ZGW|gDtqCr3PvJOYvxm7Sg7ESLEN#a(_d>O z5u-mYMxL7@B<4O&2=9h@!h`BboICI2Q{oQ-c6!pa?_#;LB_-1<{Bk!z6c(ssPh!a3 z>12^Co~p7O=$Cg4+EXgmiJ8AjB;+`3qL|0~CMUrQLkW)2iAS|Dh1SE0M#z~>+Kil` zDc3_jiFbMoZ&g{UzhGQykv~(%nHA*3PR6D)WmMH706G|zUgk|WkTMh51x&X;wr%Lc zSneNHg5W#WD0+P2^=|o(&EW8J4@@#yR6^FKgjtXo*@%OK2p4&9XaQJOxoDJK>FU?oL`BV?i| z+<(~n4c?loLz+?h?NNqjZG(40HES?=v_`!YD&Oxc8IUcQB&8Q?b)s<(l3s+{EWIyg zpQi*zkWImF>FlMk`fjqG-7zfHAAPZ^0@)DqwoK3KV_=A{nm#~`t^n&3?_pf0aM$J< z>nf>wxGQhw-R#wW{wZZ|tZO(A+O9Hc$53cz!$_emG`_B378HfXXiFyG8|#|F5+3^2 z(Q;$rW1t`hJ7ae1u*5(`FN2NY-5)$fUn(8Woh9yWkSTkJ)lxyRDnU=x7oUI`VTg3` zO+pH65K;;Qkb)7ZJG6B3sZMu@`b5{3R23QJYgr47=4{UM;{{0 zPfGeG2viyPYbT5fcv>3H>)FnA4R;AocWO(wc6f?()(JXkSS1&`t4=A! zV|`Qwucr4lQHZ|HGd$p-vy>B0Xo$Y+zof9_ME9SV$a3-Y;2$!Ba# z*`Cg3Ye=d;1Y###1wBkNVCeZG5jC}AN7Z=VOi9EM0bzf74w;e*TaVSVdLuLEO^P&# zoX|H#-@4$+YGn6PWcQNzq@MJRFQ@^q;_aB8@9Q%rFW_xrG6R8r@4C=d$dKX~=K`KL z6aD#h+M)=t%Ar$+`o$&`&@tYKuAKJ)`>X{up0^}Hs`oEi^z8}UkzPp0V4b>T`Y}d> zt=`z#H%?bi>g&u8jq+xLz{yu-q?KG;91QqunFHdHeE%KN%W(B5TM}qsbHlQ%DU2TP z9WUW;nQfMTCYH@k`klg-bd#cn&WIZEtCO5nK=b2T0LRpil9Rc?`=)jY z7}9lZIY*&2)ZuIC?@kJH6$un9*}6r_b-qghJ@OxO*!-Uyla=LdomUJ{#_({Sx6Uj$ z%FO|JuI(f+VW;%lq2-Y}qdXa3*z{mi8~*sswTdOHmSt7JlFs9ZTHD!{GgwjpNQ6G3 zPh}a0sj3c~Kv*ivaa<(KoEll$nw%Hn#88XTyuCEPQ;Wn!q}FNX!~E*;2U}ip2LtV; zbtLpPY{{ypjF@|0Ba=TCEg2HV5nm{;kiAErkEq;Wr3zv}SMJ{`wfbDD>M=E?Uvw}& z^FsgTmJK18;Q1}VGgt=oiFqR@pA!$W{=+C8>6ZVc*?fDp6}s$OWblzI35jc8$BVR= zW3QU)sqpT$s!(2RY?*iLu(@m(^r_!g8Y(qvCzdr96cQY6@|a`GV3Z8M>HY;hR^#0= z|LGYa)jqwqH^d?7Foir&o+f22^A+Vil=(wQvMKc9J5##^GblE;K=Xg<-Kj0y3eD|f z3m`e^i`OM($)OyB0F)xr8HQS)%o-PlB7q z8t<3EbD1Oh!)=~S25e!A;1cFn!iC@}spT*4%BUsDLcplnILW@bd?$r1yc^=6m{G=@ zSP*TRTk6my{jU@{tRG>RWPG2u4Nmr41TWu-L*3nD^K(MyK{d~6{7j{v*fV`-o6CuX zyT#)9b&B7q(9MK~Zz=HDLKnQ_HJP}-&ea#CdaSC@e8byHUB%7b7^zyr(_eGS@>4orJGd+W((CKi=5E8sCNlTw?`lBw2ZPs+nj1fkDt-Ei-8)Tf>I%10UdU$9 zBFLll-Yn)n?{(XYoII&!tqkTDQdE*#4X#;wnzY8A7BPZD6ZPFKRlzAsO9>P0ae5$r z4PHA0Y8c*H%H@2EbNYujzw68I1f-CUOD$}Jy?sKKKmP4L0rM?i`39?ts-x&Qj#9U1 z>FMMnsk`$^ESB+1a;-7nN<5iSTf%#-M~#&AD6X5}VwBeK-rKau%jlcx*tA0KScuKa z!(F+KGu&{~k$c)@G}9t*DND^Rxr3#YyA;@I(3k!Gsi&T*(Vl7cH(MwAJWa6~1t@{g z0j;JjV@rD-vou*<1fLQM23%9d-zU$cvNm9$ceV5_+(i*{#$R#OS|JTGkTGv1e1mhgqd0d+`Xmd$7$aSL1>^yhyek9A}+(LgF%| zA5;1xm9ZY);hBCeIrqwSi<7Hlx!O@5YlHA0GuaFfJiQiE7ac~HOUM~n4*HhKSgJNO zyA^`N-c5W+ixEN;KbywT%~$nu9Aw^IVE-72apd&ya9*GY$% zNb^MGt_350g$Idk>&tpA=KJd@(T!J&j=MY07n^gyZC*!$kEVD@ZJx}7*)=q)FY8iS zG^`dKL`Y3-(&-=Ot{St;8U&xl$8#=l7j7?C?FkQ*oIK>z)G4z1z`P&1UBwo+1n3Lt zDECNt_7C_|w+Io*runpmOGxNz9AU)AWw(vT4#cFvkHZPa2vD}_%?-P<{#Rc_@z5O_R^P_KJ4MMX%w4Y7`rQ_ zAMuzPZaUf(s{wW4yGm(^@6jGg6ZTYtt3Q)PR7Y=A?QX9RvbMBRYYY;*s{X@yXgqn3 z6p500P6U*H^}4waB%goTD=$0$Fl3cF9szJbPL$>TKA}Rr zEo-s1La-erV70gOL}kq9n34&VvHqzu?Swx zJ&pZ?YEeU*_3|cWMcRVj&>d=OyFdXeK|{)FJO{1c-7b*dk67v;RWOfZsL>0l7CCsy zf#l_F=8OVfPu!Ea-5(EmM1_#F-C&8-?lh^LeFAdZt&alc$FQJEi--jykxFGO zvAgJLs=r_%EtTQduRYUAbDrqwwCB?|()^S5h~7nPe9X6HF<+VLv2Rg{BTBT4J#X0$ zksu`>sB_v#+QgI&pV=$4=+%T|*j(Cz>j*Gvcc$ck9Y??C3+v~%rAJ&_*7MYO+HG2E z3r@mUq<(|bOG90ku|KBDaBj0u@*Kdb2olhPJz@U6Y1k4ee_ zL(Xq<&+WC?z;636f8c;LP*C9iiw^TWO>3yj>PMac`F68(;GVIK6T`q)ZFV0+ScuFh!{l|6BiZAu-ULrjhm6@NrXHtkbOmwS8Z{>WnyD;#=alu zNssno2iaM1a-xd_E2J{P4UW!Te^Z-u!O@rVZ)Tej=LTo68Qe-!;o zWZ+@$Td3?g=uz=&iI1iVeVq82guC-<*G}FuHcyzZMMpz$*veLu<#c(aQr^j`y!3p0 z-Zr}kKF|X;ER*S!)rar)h_oC#V#fMXs{HpruJ_ODI9g;k9JKFp8qMkNN{A7W6^ggof;aiC-&Pn}W3S<< zZjlzi6sF>Wt>SC;7^ogD1%PU32r^Avy!1aZ{7?t?Q)n z4zoG*L2TS`@y1usK5jSyoTXN-bZ?6E))y5kMvXrG= z0@U*@b6kNHXY)69Ngi1-^)bg4g2CESI#6^&cxAOYF3&0ex9r15h0k*ZYXLyk*lbrD z5cXwk;KkmvMJHQGivyr1SGGh+N`XKim0nrvPCa-OJ zLzjRPf@cFGF%(Xu#d;ma$v`mItDH;7g$eGu9xme$WS}`>=O-RrnvmH5TBE=t+g}Vd>=3#x22RjyiYAZGucFu+y6u#loHQcFL`$xA*|og zG*6%FkUl}SYSnnon*UkyrGT0%ozg4wm+4gUJ=im)=y#$gUZpKXq8+)mWe(!#-yUsj ze}OzX;TimFMzkgCV=}XrfciS>*(D0rJdzA!tWPqy_Tv$SG`7G#NN%b2&bWMSGV4%< zev=)JR;(U2v}IoL5ybi8V-D)!eMe~bf@R3^YcE;P7V^LioZxD5;5YZ$$k{T({1R=T zn=k9(_e%AK_oWRIr#o~9yl+e&5SvkmT4|gm!@Nu$vi^_z%`%Z$r!6d@mb;tl zwdi_zSb;fm7vI8Ls>1yy|Le4%9&Dg1j-`Z!~v`)qr zMxbhzWSjS$RNfL~$nwF!+Lq>hj6bbC#-C2JCB(eo?do!5bvefjUV6XUyFpvZI>i~+?tZ*RxYs>rR_R~1Z&?9r-ogY{oo0UN}Q_1lD9#_qTJ&W|4Fx z+g2IY!xl%V6O79Crvy6oRVm?CSn@kPouBCAk9ea)+aogQQFgDkP|O)yK;$||HdU%O^c-bSw zHR9K?Jp6;QX>@@Kg>y?n6lyh6R?la)@p)?G$?RZ{brzd%vxQ&Wz79}U{j1};;YB8#jaRT9~T%J=?N(KC0DI5V6kTX8=$ zYF}qbzmU#iIuW(SeL%j+)Izcq{7iW7(9nMnEVRi12}K<1D3OQx$kl~4=6;UBR#)zh zPuOh4ZvjO61Rf+Yl|KVc(x|Dy80Odc?`?U!+b902_ltbOj1+{D{zaPJP^`cj{)J?iSJ(kAuM<%i7K?_^~KLZ~?e-`x)dp_1*Wc13iuZOUPK-sK%Ui|TE8EmBN zZ&QZ9wnmj7Jjy9|2Nsv1y@;*9FPHtE4mrs&&2PSAm3}Z!qnUbZ?^f z6K#hn<&ML}?k}+)QC<0Z3Q09s6%A%zPJsGS?S7GNA*-zNaU@~r0$3!6qa~dqF7oa8 zRKnw7f_zd5g_C?t$|TJd09roU7lH7jP**W|F5R=C+HB5W<+gb9_8~rAmStt_oTq!& zYK=Qo9^i7{VcrFoN(HDt4EyxXz6JFnN=y&+hRqUxD3!^Q*_fndyD-0lKYHFuExH>% z`0`PUa%|RI>!=4#e6+EiqYxWbNSak{%ghi5)v`!Qw=iS~g4j$`tRvnf*^M%XQq{XW zOR9Gt*$9AGk?izWX=l~MaZcabCFu^~BslGB5*&~OAJV%rOK^Ng9=?R%v+idvCP8-> z6}ipXMDTOWbX4=!L9$F|rv$*B06>{kc9v=|%z6c|VJMkGr{JQet7JTNVbRy676~Wh zS<9~wlZ|wN7&)*+HV{Nc*>$PWkWo_xNRb4QfP)mwXrV>gAWYvQf0LZOrZt>ycsb}B zIa|l0F0~g{lpbzR*iHP;C@bYFvTSUPh3n2=*Cod=W=x((C z&X}V*gzj^MAfQUjzMh?s9)NZ+1SQ@UVV4oY9>s33GnmS~durK>*K7sR;k?OC`}agh z3FpdI%#W4U+ah5f(t)Jv@PmrEO8QA6GeujP-NeW0PTLPp<*ORp+&JPE*Xbtqdlcyk zw@lv5uKJg=rT^I1z$RJcjvf#(j5aM3yH2ZKYwwbG?WL9WQNr9MP4-WuM1~J>Gaa@o z+{V?-0rm-ekyrgi+E1A8mc$E#@#AIn{Mub?(2K^j+lcL_W7*?WhMXI{vIonSZlul~ zl+Ji_mKGIn$YkEf9k#=5ecampmJA!S?UmGw@7cO@%$iL)_xpUlJ0H||-~HiMJ~$nd zfpk0vCG9AAh$z~B;Zq%TlnV`IAU`#w0ry-}HrpBI6e+5n-J~4v6xA)a8G6KFioKWh zCSSMm+0mR#H%1eCM=#d>vV)tz(n^DfzH8B2@lwM>tq7B$7OK3U0O;emybZ;~Rl4iplZL#2q z+7f>WEUg2kl&kic;3B@?Y(XA4^KFKXVYCOTGFUdu`t?M43Y2}b#}?CkR3t;jU=fyY z)^VLYdrXPnIrig{i%SwayW3lp&n|lIl}#c+UxBwe>SB?lotb#6!HS|RYX%hb#9RG0 z;63lS1%>wYc+bH@sZV(Mzk>I)8@lE6@8Lb&{kV~;x4$j`K-JrUTMAOnFkf|g`={yN zj+WMMFDq_D?Eu)oOT9RnW2YdNe8s3X(@2zf}bJ)+LD5q$cYwt zfETq*(G53!#ZhO$WumL}Z!29T3wc#pdihT2igY(E+DXDxKTqkmbbnrtzRc*);Q17x z3$KJXY7;9$YFG@N`qEOKa8;kf1s|@~%t$)->R!|VI~*V|Q2f!l$itr^u&C2SEBJc! zLfag_f?Vt7E~Sj<-c2viy%#!i-BT~nJu>#|Tq^%WmlS+qBEm5}$L--Gl0ywSB%UX~ z+46Rwygf}r5L;~vR%QJ^vA=q>jOfm}2HN32v%mTZ7Q{cZzq$k4=D%lu^-L)1wZHnm z5ZS-8zj_cm;vd^zUGK!i_)PDwP9XoU++Tfy_;k{Ld4IK5mG{;At7G~8b^EI)ACmrm z_E!(HzpBQ&9{Z91+;aHXE zNp`RmvVE+qY%A=Nb5>xJC~vS!%TeBrZ8eYK7xgF^H>diw+6-0un#a)cGBLXS`0jl_ zj73L3_rl8^f-im>L;En8%>M#>@${Fm@c%`8@g}JHI(+e(@r?h1FP7n1fT43-d~ug{ z|7wEVvDHCmzQF86V3Xl@7-K;(^}rX8AWX)^!{bJuUj5&PFTMv#df|&d5jH4%aScx{ zzW6B#JOp2S1EI3?(D<4>WZ;W&uy9y>@n_7vd*h2ww4Y@lSN2B$9B|zjvw$N-O^(FE z!WrkozQ2nwUe5Hydf8ASn@&1?g@BAtNnDe%|D|7~?FR0-a{I+U05@Llbc&lZOORxT zfg9KT19;<;F=V^#;eQNod@lxrGanPV=@49cAQP8<$I8Rwja#KGhrce~SY3o7c;h*} z@y1=CoQV#{55XJvqj+g-Q|?mh2?_KN(hG?Di;Mmhys_N0!n{p7&OPGEU7-~J4&GQ? z6+mwaZ!9;7xjpfp!W-vPbP8{L6whSY8*h9pS@){uv*Z3{ys>}?GTHcFf;SeIaEHMg zf2SR7eJI{ILhMYuahWKs|7-Eai_ukw;*CeL_|OY)d@0rX8ocpO$wz4|akiPl8*kw` zJ$^ZO<87#=9(d!E5|iD2bT~Z~{KxfF8EZD_g&c%Ev_eK%0qLdYH-C5hKI`v}-!F|- zg=CK3hn$RX_2QxUV})5s!XMvE>g@t?vUUqiIaUZO?E6Ou8}(-z3a)}i?0QmXIj0eiSAs|uc{OiN-R0;1;BWrFfxo#y;9!~fn~4rSjLGZa@i%Ao z#*h6M;&0x-v*iEZ@i*&xsiF1Y=A{LS6W^RYt&f73~m z9}a&rOOOHoEdJ&*fiCPC%8oltqTWB$vH+wS@{pawqNs;ycG+y>jFvW-BWygX?=`kJ( z>2nLd3NQQi`RoG8>8M_KS-J06Qu=zPWIX;)<7FS9=_PA>Kn76~FacWrVZ7{D$h2Y?nRY%ss~ef7EvcprzDUe;>FJ3#dyKe%dGJm(E{`WR zgcYwrBwN+3P zh0r>Y?9!;SBB%8A4pq6K9I$8Xtb*H+!sOWI} z{fENQq!p$@go8_)1gz!zXi=9xh+^eRyIJg7X)y-}6(88=*ECV8^{k)J_Y;3pZSXi% z`-hMvF;MG=MV8!r78_81A6eqGqx}cU6C7e)3RMy*>FcmxfhAnt+fkw^`VLSNX&kk! z&qNMcu&1UzzMJ_GsgjQu^U*;)y+Vj;R|S%jZ{ojGa*g~nEsPfQE-LoT5i@He^3M8V%wBU;7i^{bfgZH3CL2`lX(JW zDd?TL@SGfQmV&#>=yc|$bce&E&^^Cke{hJP)~<$t?)AYGU%+3cWZ#rEf7t6{FYQ^h z%GV+wKP5sp=q(cgX}$0cC0b;7DE#qi=}p2K%h;?SPj*wUf@O6vlMp$LmiaDy^Q(Y! z?+aM=w_g)sEasbiFA@GxWZ??c`wxRG)EZm(^!IUvp?tv6K3`%iCvi4a>?iG zU}p9YXuPkg@*t_vUq!qW`s{~rH+Rm@C@i`I^qG}`J_{qM91j41W{o;EJsjB#NC)2~ zk7=%~sa_$}(kp_p1&jQp5L;gy4zYD9kp$>PJP{{=UZb64IVr5wiX0bfRmKNMu+I8c zkMie8`8#P9k!i48!+9jTz9}r%ioS08_hlNjq?(NB001M>8L#F8Ag@0lOA0e~5AT8^ zQ^TPBId9JB8!w&#>Hx&tQ*Tq`9HP6xw==1|pw{FX!(M2^Mv9WkDYW4if;POC{L=mV z=Q5u=lVl1WC$4KV;c;H|-i^Qe1-q|Gvq%NpT8aM`1uJ`*JurcleLy6E(mgMGVqoi> zT8tnX`YU9p7NXlLu-W(6^mlkAnh2JpcqNy)cLT}l|2+*PduAg9-=m7is8oiYccExA z$shxYc0qRzKa?D*$U%I!$v=fhtK1mgd)(X-b-c>83p`DnM2Jr~+PiA@=S+R8+1oQq zI2@k?rX|x~r#n9cR>oOyj>sN2_ePZsz9!XrU@9No+d1zuGCFV^Rb{`yEYTJp5r|ji zG#WW<@kCYzk5ciq#r-J-A4e^o#ysvX|HOzUgCI7!gRV&x?fQeN+?e>2j6*JPyCdd5 zu%4q1w>BGb;{d;_>a_1Q*J-a;<=A&ZdwM;!$9WR4S(Qz(=|z6?Wxu)JdwY>~|4y2M zHAf?Ub%_zbsibmUp!Rit^VaO~@lk{Qp6#)I)v@fj0W_^?&n}Fz;kvnkv#ZmuV@Hhh zmVO*#RPM&bU3$G#k9qW1p+DTrJ$6kwcx7nEb+zAYqc-InF8;VwT)dQb07=E0)d2&1 ze0Yl|;C*#QTXn3zg0^Fcfi>D7m-H+=QE*kWE~X>m08;TQ#s#r*YJ_%a&Iy#0DBV{Aqmtm$A-u$X=dgQks zPENGQ5;~Nb2)~yD`k8}vrMyBzWD38&*okV_uW}{##C`38Xqs1@7C8BV*^rpK}(L$9De}+mNPyw;#b0^X3zL|PL$5g ztqE(L%ks1_9KvlgXz=DQvlD|vUWJ{?q?CQpm{H{8zEQYLyL?bnyW6~?sCjGd80`h$ z;*#*rA>}PPzQ>rsUU4*$!C?ct{sRS2EjjQSm2-8maYa(M*}{$ZL+Z1nc<4kvaf3je z_Q}dRLz~+&E}m0?teNXTK$psib_J*ZR6BL$r`lBmUwAAli)DzN7joFq-@K(XARv9R zTcdQsYH|MjRg9% z;hlBb86DdEZ0tAPT!~l4<}F3siB6Ab-dt+rx8UJQI>bX|^_1_6PsSG6ca%0?{I>^U z0|%hY{I#ousO=O{n6r}XR%r7ROrm7MLK^vdDSAp!cVRCtS8De ziDI8lw#<*YDYq*pRHp`dbp%0Iux%`{@S|kN*%%ah!*Y?=%p*d9-0?0Rr1M54})mafqNfG5s-2X;3HsM5nr?HO)}t; zPN0#ytPup#HAF^4Ts*BhE_M(W`*jsf(!nAjCB>p@<`zfv2Qs^sNfm|R;U^J14v)ED_2|C$m~OJXgbKih?}^Eu01q`_Twgm^>HCY#pgiKzY$I1 zM~-EIhVp0eQSN8ZBBuJ%M~jXVfxf0}0%@jt-i%N7kO#GQJVi%0QWZnHv{ihUI*0On z9P_)M?>^pTuy^~1^-Zi5U(5;f#hf^}+GeQcUNk4EEKd2#CI!nB!cz0|9R46rg3M+u zat4Gb0l<}ke3@Nl9HCPu-$_oTs^t)#9GMeJ2M_~zJ#1wt7T(Lh*bmBPryb8ncLa~* zW$3Lxk)h~}&D#8>oIbA8hIP{2|(W>xhu=!`~whd_J;Yx$62z8jn!Q@y!r5OO(Qk+!R5;z;ns`Q*C&Y!NTaL+I6ex%8ZYn ztfTh>m#k>)LqLnuD+>!%lA+5v3Qp1!n3?(J7H7-X zAiloX4P_HxW>E_VsWtN;{hG+wn%cr$JUbo;p|AKh=z}MY=F`GIre;K(3WESLRqnuN znX2(s$X#lG6fv76USI@vBP-OCtII#vW0&XX3}jd-&2B6C%C~UZDt-k$Q|7sG{h-{S zuFgPW%1A;C2RItu>(PFO4wud=e9?Z^5?LF}_j#f99a@ETn<=`dRcbU1X9GCVg`z1+ ze+ajw4@zIG=hv!483`-pMOY{w4X#%Uz^9dSPeSv|J;CRFi^G5P>2k6`MLVVH<*g`d zP;!B?Y2s{pybw4Gs_^25NDCLEO*}x&G}PW9CBIR8xRTpMPo_y#R8fIxmN{5r^CUz{ zFk_(T!07*Cm4%*P;n5a+z@z^B5I$CyzYQ@{^zcVHdiebzKF?;K`76aMZi{5M@LNg~ z3pjk5IR2d?s&k~Z;wTxsBn+aIH}XtYxHM4bWvuOkgzelQzz9L-u*PFc2q_ih zut1C`5{ihq($&_lQVt;_)m5d?NKV#B$pICXClkQapAZY7v{c z3yTjPdovGpi-Lr-phJ^$eM{I(TC=unao#4@*lb%(xyrS&cit z#6*z}tUhvaS}`vburo^?C6h03L)bAvNeTS9v;+Mh0}!Vf(ZKwlVAoTa>W&hTL{(@^ z82s*@Hz{p`y_$g&dxDQsT@A&f(#A4g(&CeSo~<#Q9B>;=7U#!MUbvs{I=RRXdn#twpF-H6M}=(m0*I?i+AJSw*P7 zzPlfXs=rG>ApU(%jk%5T2Ow3GvbE?A^4A-$DHHu=c->wfDWrGNmLf!4;*@3mnygbV z5RT9WyvW@*pvf}%h8u$J&nv7u2$Gu=o$R=y6jrDkn8?%ZiRf{tSmMfJ$`tEfH|i9T3F{F@F-@ih75Ob%bRO-j z$NGggdj_bHc?V5`t8-!RNQ3@2)o<<#uunFP`Kp&`0W}nkEokOJ8nl!eSI5UyRyVRN z@<~nnd!B%~!<8@T55p*r{-8zvN0V_8YrKnf!?!UWo4&sk#&m-p*dIB zLPvo6Hbi4l3)PC&b7&t$nKb+qYHG?NCsmo+%}{PHM*5VX_~O%&*3nLdXGuDPwt&wf zq$K`nlYZg~(Ope6tEh(PsXRz-BAjkK9*xxaA$`m6o12t$1h)k7l{f?P| zQ;KLUX-aO8O*f=?+O~d;Uo#)>Y^(8I>+?GLaQ1VYeW*-Qtw~T6xf^CNSy8($!Z_S% z%{w(Vu7ug+$9(Cdv@rgM5u}1k<_^`wJbTx8{7sR zsm9V9``Wcmd><1WxhV7+6niI9sPwleU5@cLYYVE#36BZ*%PPVEG#;teUbvy5L=S&H z#6B6@T=0b)fQ}C08DlX=`Xc4vbuIoS-9C&m@`$eyXL;G)-mQ1sapG;1nluUtr*T07 z{&??q{PDh~moG6Mkqk_c2Fgm&tx z`1p#(0n~F9l&HxhLq@X<8AqX5$#ZDQ{mSm!m>Az}4-$Vl^_4Xx*VJ>Y?(4{nD2Iv1FiNZkpc9)9TJJku<;vX z(C66rEn?$uFKyWF*!WvZjeKdI+#fnoZtZ~6&D#9)5!X8H%7JwftY*#kAaWEo3GQXt zCT@jA(v(K&WqqwL5F^43bgeKtvArKd*VRyGJHk4R^&;kVh*$Y4WEcBxok*vQO_*{b zBD!b2XO*Zd`$$qdU1Tv@s#h0zf}q}AL~cEk@rm#Wp0+-fsV-~(MNNfmjHZ;Co|?p2 zC6KOsxiQaMVLgRbrh+M#E!I;gG+#OPr-6T!dZnSr`iySR0>+ixGD#{$f4j_7D zp~gm0r4>FZJkqKVy+&187ons!s{*wuDpf3_h4-^A9MZ(_9H}#sXwka~2+u82N=Jr# z(O3(2&>ZM6`+PoX;*W@-MP#JMaHGZ=k(zA?lw_eT=%8Vp0XQ-e>6Nj(qS|b$F<--( zrVRHZ6Bn!esvBowZ8V8TRro-m2draY0Hd!|NP=XqfEX+*SV@!%d;ESAAE&BDM~Hj4 z_%treV4Quc2GD@V8c(fR82L?&xfP{ChB72p2#q80q)Ov5Bz_z6QZ2<0sMC8G0vQkO z1IUcn<%U|D{07z--gwmDvqM`@%PXBIcVVNWpX67BRi;OTcZl$}$ZU5mAKadBxY@2f zl%4KaO`bDCuEh2>;+Ge)vRmjkxlFjaD8Nb^T*$IUvu5Wu>lSMY(@-^(%3#~!PUzq+ zJaHya_7G&EN7MAQ1g<8s)HPLgUt>RNPtEOIs!c+9qwLGCfx=)oOcFRPdGsI5rK~rL;9Hfp;2^@{7$^mhC2TAucd<(x5qgR5 z&?B^pI6{b6D)yC(gRr1B%hU3J92N8Aq3bn!Y3@A6XyS$T@KZdBlhPsu9omNYxi$KLop?FRG`_35)^uI zf0sdKHe~u@*Of4t#g#s~4ohcYADV!caScaXd|ip%?TC`zmhHs?w}+#XVwbSMEb_%1 z_ncHis#bh}G-9{os5`ocUX^NoTb%85=biYIa9&ctfhzkuq{>uL+Cnb^&!y#aOR})8 zQl?cIfzIwv`hL9HtBTCO`OQ_$2XnoNdB^JQW3aH1zxFXD^4oomJ`n$IiBXHF9sjsL ze%2qtTZaU1@WqaJsgziYAt*mqTy1!sM;J)1_5CEaLJSwsHm~xG|b_ z`lg(4ODO>}2D>+Jek3n_KhvJi^0aWLmcv1J|0|Z;=T)xnUZa*Xmr`#`uTfaIp;Nh= z?h!m6rtEFii<0YOx$D=cOUi>Et0Ym9bZ>7ljwpM4e(oQMg@Nqn>fk@~Xv9Xpx04_9 zEiNXEUp!3y4!nxAmX8Z!+H>zBj-&8);mA9@Wtib{?vT9hdKUbrO49fVH>r}dgPpP5 zOVlGO;R?88Pv;Nc{RE2l{d)3s?h{fgq4RS~-Gp2?CwqXZU8$Z&WjpXlz9#X6FtCz` z)TM87cV)LR245Y21LkTra+?w5@c#UH+?QS)dWAH#tBqKWx{mNpt{D!Geulv8fSI!@ zbeVyC<0W9=9|=kpfAR^jk^Er^ulbg8RknUxoJ%tvp%tU2KsD>9eaw}to%XQ?Fu#(e zhoi%zub2GH$$93qg5c8z7qUnNoy{*Q6Op$pH@`qUcWbLBt9Q2C$9S5PI}_7DIoC$* z;~L{tM#DbY!J4^%3+Xxxvv?+v5(^c7Tz?6glKp@u`K$tH(hol7BKmFycl+m#-HE&F z)&AO@Tl$eip?#-k_NzI{cCwgba@*=x5ZjF#1gyrd&`3dtqQ3Cotaz4A`q zuOR%YP~!1Rlo_*$+SSySY)2Te!tm(Fd1F#uT*Gfr)>mI{pv@*z4=%+G%bj1Y+>&xv zIYq_?9t+w-7QcWxN^6B%a^2>-W9+hFw76v>2U5aIWEUd4@aS`#QYPeu{yimlXAzVv zzGFv9@FJ;l;uD5JPn5C}FVUVo_BXk!Jy84IBBSvqA3tX!a2%9z|dE*M0;l zAyB(nk6oHKCVtIOJf~k@FsBcVVTq6D)Vx!-J=Y1&+b-F@FTU1VOxGByKRVo7Fnc{u)g($HHKDLyFbKoO@`PnQu^EK zE0Y%|w{L_;_gjfjhMq*$&fzIpJRyMseJr((!cxgzOQ2AI7^J&V%hQc^%0XgU7s)C_ zym;{(S(a!r9*Gs*V|i8cD|(`A(k3f+*t7U?@^i|+7mJgc4#5VL^`{}>(cung(4ul! z3p$?WEm_>L-IHbSr*=*v@Pe*bak;A+Uv6itFwD_!qCySxq9UW6`2$q_iAz$Olv)*& zP34g0zkWr=iKbG36XxqNKi<9mrZbBuYW^};M=uw6K8xSt@vfNLf05c>_pX??$I7O7 z*$o#q|B7Oa_^c9+<`o&u+i1GImFsZu!cAn>bmk|1_E5NNGFVm;h!@ELNsk33PjcGQE`hj@JHs8_BTZ;s2F$Q`A>R!dt?j7G&?2a`vHpt)UpC{Id z|8ws5jQNZ7^5)RF(hH#v?c7`f7yv-Pr0kMJzFMCJC~&lF{u`hqe6b^a-ojv_`WR3M zE7_)zD<>WK&fxAa$y;3Fn6G>FA}xBA82s@fr-V3udg3{Qz%m_Gk{H}Q0su(R!WT(Q zx2)KC-jP9DCJR~I6l?CRL*Anb>~P zE~uVS4WiP4Vuef8xE32eAeM84QO-s3@H?l!Xjn7=LjcPfP<9O16S-Rx17++nirIc| zQHSwt*`kQxTbA>uw`eTl8O!GDSm>?`L z9-DI*M>kjvibn+%*z8RhR9;SUe^<2fUvJ3`X$V-rv<7F#t551MONwRts- z+nK3f96LraNHaImTkI|TNwo*#vmZ;{;ZkrpRzs1nvUeWo{!!WFZ~j1P7GPR_aXe?Z zJwy6#8V@A)VyzA%zg}_4%Wug{tK@{FP*%Ba{pNJi%s8q03zdcfK_-g=IP`6^UQ??#j%Yec z8QbAa*%t>h(rg#$;z3lyvp|R5(2GW)`pnfh1YG|f!FU>7Z<}LS{@v?Q`Y`+^n1}JlGmT)F3teo~lDYLQgL z=3JlIFT86=d576oU|V98rTMs07#Y&??v3e#@0-_o;b zV=hPOkwv$B7y|qs@6i??*;p7^7aXK59wcj*2){=HLZ9@yFIGkkl0a^ejHz_{CY;nY z`O7=}-p(1h^&_)F9|4_9r&94dCB7Pi!Ev*+<82BKs2dX=rDuhhjdn*);RDUp*88mO znk5vbEYWUyGws{K){DeqqSq%KZ;|zTg4(m#(ac&Zf1LEG*(dk2#&X4Ht`W;}NaX#| z%=c9O^usNZ+}k=`TZT!WWvz2w?qELgd)BE$S&A}CsuEoL&6)pJFujqHD()*g4a6EZ zWm+>xW42p2@S`n3Rqe(4*YN^)zGUzSSva>9_pm1_08jeO*T^Zr!f(0c&}N;=Pfcui z8K6M+pbfd?{c3jKLZ!CS3y&C{R==l>?dL4^!6A{83E6({$1_4)3w?PO1&jMFkf$wZ zb=E!C_}km063);rL|p4wnT|db$A_mShNR^I%(dDm@_SydpPh4BR`3GJzem=#^?fJn z^@%4I)tJM}5>IsZ4}W`3nXuLm$S)DATcm!&-SU5>G&n0-_%dHluhb$aGaPR-AdAaU z(4%Mqy zUAnRqU7@%o-W@XJGVuVU=#8GGG)FSQ49y1zQ~ofkL{Z8#Tu!`PAd-3kj^jmC8Fob6 zQ+bO8V#FHNd$@JzNr=Sgq zUy~~F^NbYuG2(td!tJ~Q=#*pXB`cm%K?=OVAck9g4n09 z*2}C&^oF`*IX#{whu*cxleK8kSO4DQe*b&F_qp*>zYn_a|MTnc_x~&(QucOo=woj? z<=yB0-sS$@?EYTu{*HHl&vSoIb$^d_fBUJ*qb0*J&*lh{K&)&~bAfI>toI2K~bTvN2?`E5DdmvT@c7FH@Q71ByeoHBb zP_fUOoSkFtPkf7|+Yx!Pur?vF(@Dr`lEi$*i8+Xvb6!u!nw(gbY)w2Ymdpg~t0%bL zND^anG=+{;LrJpua%@YK$M4yIW9!q_q*_v!A*s3?b>9R}WmEmW5Vw)m@0+SU)WRJZ ziJZ!&%60jj074}4kp`3Edhh9>{K|FpcY1NwW~Jx1SFX()}0d8FyW9AmaL=%PVOb`->}ckaazj3 zWU6MYAFC~%bhZ@wIC1^SHfs*$2E1Q{FhB>+Bh31N1c3gFGKW!fwPf*Dc8CmbyMuc= zoA6{S(xAmJXFC&#Fk(4v2$8f@RWQ{|PfMD3@h+@QX(m5rxWUGARn>jBdE(WtjPlJK z%;!<(Lm2md)aKlS;hWs-a_n{z`?MEV5aTT;1M5A!h}(muz*z2MPq6p;Q~1R5kLCG6 z=lLFazSeo3E6?BNIoYav-vvO)R;-)*V28BFT+*J*Q5jt>3HmF$omQ~cu*+gkRIj<0 z@kyob;(Ww zho<7L6)c2EfMW(ReUljWs}6ZQVg^@=}9D@6(T(9MCe)I z{RAe?){shxN53 z0TgIB*hFrjftBk<*Q;!Q!QY01oB12kROuW6nxaMSBY>wW?V;v|gIP3WC||V>r_ZL# zAt5wI!@*J~oMO2GG<0>t!FtIiU)_{MM1R9UnT>=7JUfUVQdI=cX*l?E3Cbbn6#)MTnw zvngAE7kFSk-C@@!%VC$C+6<0Rnn+K+X4J0No%siA!Kk_<*pKu#-hak>EIpf_DsA!Ks?E*J&m@NWP`rXiJ0EqZ6w^EaCMVp3es)?++{>Tf)_xa$ z@Vi4txuF{gwSR*qNAWsG&te5_);zAM$=h6^Zu1LEl)2tlAi@+RfWRBVd2 zxKmHA6%5K0&_eNn^~i?~^KO5Yyl-`M-p4|*Ois^BB}J`V#y3EGy0<;uTicExUcC4U zN5t%FU~(Xq+evCQwf%nBQ<>CSIfP_^1^y0pQK>HVU{P z&uVeT+6!2$StaVjsv_W7D974Z0dl~|w+wH~j8x(84OCUM+!nY>3O9uEc=4Bn$za(5 z3I%L4W=f$uW5O;n5^&WdD*6vY%fe&C61t7!8INJr8Y*U?C#PusDrZ;}Nkg1M#y| zKDuWwi@EHwIY~KW*bruZh1)_Gy zbP}0Lz1|0CBy1T;6NXN4#rk>*u0b;6#T8E3*1DHyt(DSR&1$d*tL9kPmFujxBn$e| zNb8N%lQJjRgtlHFgkl2b2i698lxR*n1T9Ts9{a`#NGfgXtVM!P*x|fH)-+udwHV5wHb5CL8whH!nEI zY+-$3&pNL9-kBVtYY(kJE8X{~(n`S-*k<$uk9I7k(Gnq;jXfdC2knH`tS2H`Q+XI+ ztCs?;%dy&34CUotb*18~iN+w9BJnvH4dTT|x%5>+-%?~WX_tyP15c2A21-7xqkNM} z+JB|DnXS?lw8-yxHj?f3M){59{`3*jka<5 zyL+%`K9#TNho@hFMZ{ESo#GX4=p#KsH@Ttr^a$PRhW?;O=sRxc6+J>(eWL&KkOX%d#)iU`B#Sr2aKs?Wqzyn);UtPrd)o zugd{Z1pM-(;a6^$+t(toE$FPdo8;{vAFG-&1Mj*DWp`)cboCUs_*E zCYvsF%8`f|Z|Q$kJbm5wti9Pi+P%K2XMGm+dN0(S?>~3Lr@8O-?(ZV^H%-9*V-MBS zr{6aHywZs`21C5>op3i?21|y z7j&ih{{QoyGxKJeVqyKhZ!ewp$^UuJ{qmgWT;KB=AzwIR1}lw@Sjq^*f~HaKYM3Y$ z%AqHgjs%S;>=LFgXaq--DPJm`tjs#_MOP?GPw!^98V)B@X2OU?jnqguX~Yw;;e>B= z6h?kC;7cb>Bb+i|F&a)L!_i?GZq;}q3{U28jXNjcq?t1OhV;=}5{Gi-y9(>4e$c*FVsl?C9<6F@iBODNABJme_8Lg?-4NY0uvX za!_d)y%E!gTqaFZItZGhF=JUQo(jjJ{>hY?TvjSPvC&aqG-!mQhB;vd(zFxJ{$wiQ z3#1HfyE&Rn$K$a?$_$D&IFmtW4=A}@527~_3z*4dEFqIQ;)}p%rD#bf4OyF_*N0-B zG+M$b(Sx)nlyN(A%#w}8jf&Q;=9d0}zGlxrzp+lr!b+o}Jjg%El}2k9ieq4Nf1{ET zvFH;gX4inu16>SS0dj!`eTgV)x6x>i_>v<=Dm-cijaWKWD!Nb}iAe)#O_>2^+)72J z1~x~xM`PnrgUL5Wr9cKt#aRbV%!WV@f_?(J?%;`8nq|_iDy|Pw+JaIp74z9_@I^v{ zu>``)wH>4Y&hJrLo!Y02F&ypBvY_ANBxO#V7t+UJg~~6QI%gbp+pKU zGFi@PWV(=zP$D*J6R@PLh*AN2*$9p15L+6OmTEMr%7ax_%T-0c%1F!h6^%s^VKnGV z1Pv>fnZ!a^bs|T7lNs4Y;~voUWuy|5%uFg~q^B=@YY!K++!+|7V4z zFslTGDApq4OGg7}NWveBr6Mt35UkbG1r%LEK=GZdNEz!0Bmk{H6w`_nZO=^jC>6$d zI5lGQvdf@~fJ!5*nR(*&LyMsnV^W z&@d}J1DpDEb1xNx&3)aS-5rg_m9ccfh%>Fec--_Qk}S0m-n{sq_!}(1(ZM#}WhSU)Qcy`AVRn-=($kyUM6uOb zn4gy&Q*|x!RQoauqPpJoa+B9+DLJb|v%?rw=#ct=8twS}5!2{v?y_noQ`@X)jKgGe zf<{yIW^W0$h9`$p1_w7*)0)%%!cjC7v=hs(SGFRlcG!K0Hms?B2=pST9V^^jSowcB zbPN1^2ebtKn$szCyBuLay&;DqHSP(Qs|Nir$Gihj8|)Qo5bZoJ$EscPTTGnNhx-&h z#%gGx$23y1sk6|m`%Dh)3}4dlrPx^TDEnRZ zbQ_xc20FXjd$hf3pSh!0j!|p_uD{|)HWH3*H-(vu*SM4Jz(^<^73dLZD*PyK_EG{P zkF+#Vsml&`lsurPhr~?U)PU+iFl#`k+)ia|40<*gn-H#kZtL%@are8O{i#VvEpn%( z8QQ*kgU3ntu3Gmzwk=3pdpc^gWIAr`uUVybjwfe8I6WA{>1hL+1LjYdk(h~)FJPjk zIyG<2tul?L+k^nd6J{tp!7jv!SrFQji8d#v0LY#ym5hw2xj}iLR5$}w9>bRyPLG;V zPO_|i%y4JSSUT+Ut1_)tyFynz9y7*#k+hj?RC+pT6?D*Q<9w*V3}m|>T3^R5buxR7 z?S>2(oe6mapGhcsPR#h^AlB$;ZGmb?jG2j20lr_dMqfJ0!9V&EGck(MX2b|W03q|L zkH=8aq|kG6r^`X78=1p^!#9eyn@Fxg)6L8%sZ)Gbj!@oK2yz6cN-`5dbv6Wh0Pxg< zei@C6^R`ed5{Zo?m5rqfTD#<+)lfgzgsWB?R@)5gXz1zb9_Z`YWEs0As$Dd+CPf+V z)zviAZBrVlVF%0XiFuS^%yIV71uC}{u-aODlmkl)R?d$1i+1&0@VY+4P z%Fs%xYr-vKSB7rwQpT@z>8M`J{w_!Zr*3sEN(AEdl?4Gc6+A2AUvGkx87G2XAu|*Bc znA4CjB}X|@D#xk;jJ6G*oGVGu;-o1QHY0j;)RV~bG7`S%Fos1=ahVwR>y~Ua5R8AUkt0H6u*=Fh^S9=m95z!M1kJH<0RE|;kxxCW zEEOF4G#UW+grS2SF(;sL;)s~~n{Ch+2@hkLC5GODWAi{PkwAwRnS`V(rP6|M;jdIA zGO5cdF`2^htOn|gB9G`?VxbUQCMW!vfZCab&Z-_mW*{3u=csSkDl*T88uu1xRir0o zM4+^wUF3k0<5y-jOsClZ<)Q<}2pKzsT55$yvL7g_JlaDE*HJqH|Ae1q&Tm+15P=g%W$WEOjCf$#$;uPAbLRD9#Qj^V|E|&pY zPfu5MwPB_L%!$(j?{PB_hE%e%&|TRo!yK+ObUzARrn)AW+d5nsLfY_P*$Ksf35V3O z*2o;)%_NdEjsilh8Wp}s64HWJqbBpHV8hvFv~hGV#~gh2V{9U)mrBUFz(8}14b3FF zB5R6G8 zL%XoiKN1_4X_XUbnk9{GLD`|`zTz5Vn{2MKXhu)6rJn&K(>e7-Ba=qOXd2BL!h;Di zT2^9M7EMRi)n&4?o8MWlmKWKOvm-4=6wiptJeK{k545`Q{%jw<&FXu%%KhKCy>| zAe6#;iI5OtCMbw5MiTSIXH?hMG}JOK!|29pABG`F%-qmTq;%4nj$^&bG*(EtU16-y zODkY0i`L=_9;~SY7>p5C$azK*jeZ%PE@N-JOvVwGOJ3Bhh`Jq-QUgaZsF)j>Q#wxg z#*GT75IIs=$@02Pnp59me1ws!xl*c$t;V)&+jOc18_+$^D(Oi!OlJ~<7+WiLZZ+CG zn>IF9H@fhzp|M6fb=P)nxYh{B89XWi<&+s8TdTt>%9AV5P{X6~h{*vUbi>K3>PXq| zkIc><1(IZU!9$OJ7_tm5iiMn5=ejFc;qkpzYgwo9EZTu&w%nz^W@jF_S#)8 z{sQg;AjZEGVeA230HV91qqDPvIbl42gAO{3tt$S*aN~mcLipRD{C@87+1b~>e*OCO z>{6{&g!U{ucS9$yps1vvWKmg3*@Z@#;c7CPhNkQ;9C`T#g+;|B8dViV!v1v9@8$f( zi`jF^oJduygm%O94gHQBvSe1kLvs3pH5%>;QBOvBQ^<8i$3*zJi=@3qtpf(wl8duuWqhw%i9>!5G zoaCx8ol&7ggc*crsKvEb46mr}q=G`laVDZCwnm%Lnh0Yml|&fHKqBl%{cumI@iePo zJiI+z)k)PCiO9NMj`>Y6HjWV<$AO#sTZ|rSm6>}zQ6oM)>O``gOtx7WXe`G%dzCgoOkNeBsJm;saH5-By6Mwf3A{p>il z$VTLZ8p%bEj>eM+V~347z5?RV$62V+D6TupF)OYsD#_;o0sO>u3mpy`kSbhhYBDh3j2QEMR#y)YYyrSTo$NDi2n2 zVRb%d7y;L~R-dLzH^$0;F-)#tw49!^wp?d=PM?!fIjN}Ff|f0Ff^p7ui}DtrNK1+e zaa5T5@XZmZ~0NO?+7mLT@qWOQ@? zT(c62Yap|+#32Zjh1$A=M#Qo+)EQI=WrCXkXu^nkiD*wlj4~^D7UruMR|^+ z5ED@hiKPC|?1FW+W`-bAx5=e>+R8~2)CxBK5x(3(>QBWIa%P4~<_29aH;FcH?v#rd zoVlM?ZNMLb!(`0*&FfEv%_Uo-q6OM!p0K%9!3iqWshkN6L%I`kffeguJcfY2%$KP# z%nMU1rHT7ymFF|HE%R9ZpE@ZYVjnSpfxFll@KG3o|yex&<8+wftKLypF_Z} zgMOr*PXMpWL)~vc`(mp_Q^Q=r#54}Z#a233u`P$Jtz%fmv3m@qj8^S(SGlUITzKTkBD^Pz7ZDjIG(v?8x*_YL*uuKwU}zVXE2#l?p{eC+TO-#PZ3-Q(rr?;fG; z-i@CMt!@xai-$YJ-pBTC+o+tXM%pd&V;#*mtvP(GfvJ@3lRG6Zn);q+|+jde(y$x zDMNbCd0(rXKC3A2$bud2hYwvKjJ=-4H*|>o9Xs0JTm1PC-tGx3eI8HO7q36Ezun#O z>32Uh^Yasqwl9CBx$RS5Q61v{H8^bn_{eDpK;X5-WjP{H{E=560&hVzWkjH4t_b|< zFa)c(a{43hqyVfxLJ?S9QX(h>cWhXV;+0~SUm*5u{LIgb9D5#nqT~Aa{^7)q_QvOBW8$_Gv7Mn#^=6MrLT0vVxr|pE0q-)FO?8Xc;4H+hFOkJ3Z<* z6aBD_4ri>oe9<&^xVSBuYlSg#FdazQJz${GZeo~_Ff#$nd4_$DTynBDKQoRxxvYJX zSrBLAg7)B%n_l$lSnD=}t-h4c^532?&6A9KnRSmZt}=;;kv$nrOF9(7NM3llyqjVH zU&{2hnq%FVnGVtjzPuRAVDhP-l&u%pMfabY%s7Ju7Vo{8jla`yu?c4*y*$`->OkmZ z5O;S$29i>$C>aJ?(I)&eP}^xpTmUi=ma>VZ<0ZCv1Csb&NzJ2ry=X^EvP5f zAbm4rYQR?LmtIx=ET7YhwO5uf!wtYsRA~yR_$9FOTd)+BMO~quVaCYjWy_l1*C2ec*4t%1`oXhzq5B@B;mts{)cO6+)%+2JG{5F&59C96pPUlv2-NndcuejO&a*YZ$$vW_6mR38@AIFH5}b`<-6m;+-nj7hcM zOpTk^<*sqLIo+{ytM{*OOC19c1r&sedg!&T%LEQ^w5R#0RuSpTSealGU{AmFLDqZAg>()2H>x zeEI5>`8_#ZA(_(Amx!q!brXWeax#jIJDi%p(AG?#(Po|CaQ-mY zyyT`iSI@4#y7Fpl*VhP~@Wp1G=<4k5^laGF*}c(=gYccrn?wMyq@aDV)GvZ5t~@2p zln6!Ac=I7KVGEnl;-EAaY}5}6@;oYqHS_H0fpV->rHt~l;rFHKmed+p zxZ=u_++E6snAvse46; z(tf#F6yt6r->=}Q0NU~d9W+upn!;8?v=k#HRY!w3#9`uP6S+^#cOw{$b;N}sSsQco zjZmUjxwT;x;B);@VU-r6$8O0!2ESQ}R75wg3N?;_6~+xomOq>T~yg zj|*m8F5COP<#!j0#l@mz?_-Ca7c;Ai#nkcxzc{*M>bmwl559=61n-!#LRr4A5boOY z7kPR;mA76}ykz;FJN8_%G&b#3{v|IPJ({_3r?|e_; zg46PE#l853!h)+kJ0DrnvFE`DvgKJ;R-@0_M#5;;@-&(9Du#o8s3i>7jD&TdQ*Ija z&@!9HV1IKzUu42aC}iy=$mE&UpwFgIFmcv;r6o$`#1e$Oz9ZE^(L$JYvNXN$2ll2eA+BFvPP>;kx_ zq1WYmHVV9z(Su#dE>C-<)NRd?2wr(a@bZnvBu7N7fO*erU_+K$@R^wA4M1ht+JtR0 z)~vBIs0&A*(~-Lp88xG7e*mZM@J=Dlzo97A+mh(kQYjx^Pzs{&?9aSQ*z2Qca2aA< z2*-ggf6G=Zh%{Q~a-5^Scq1$0G7N6s=&2T=fe}7-;sk*htrkh!V?^}GlY*G}^-qra zV-Ya`iNGe2=nISnR|yI(4o1q}P)f04Ax##?zfkI8#Eiry71kDFxD5Vg?@st?j-^-Ji z2QI%{bm1r&RqismY$S zXQQq6(^(&zGpKGeT-8WZ16qbr?Gl^2H+J_7b{oCTo{en-vir3Tbu!t8fG`>^47kn~ zxRItPOR>T%PxGQ;>v^*yYhD2J| z*rp3((j--ER(1N>*rFUx$e-;XE6>hrd89-)mO5oCX_SX3^?SatD2%Ok(g<}X&tGQV z8Mdr2THVIBwu*ZC8tDo~+&{Mt%VF3$Y4sv#R&Y`(B5SXh7>(%j0_&DlSGty6v3~6( ztv#NBD|_4289nL(qjz)5rcRHs?6Rt=&em>YIGV1EC5Ef2S_fLCvhA`?M|Z*L76emO z)z-btSjIC$I5L#P`-1^<9P6pl6H28DgWgJyjlqW@p zbA-0Y+^;OM>Q@q1?L2W+YqP(Uz1sO>)Y)WBu9xyR^93>Iz62$fS?JA|_9Y5`_`G$$ zLPL{fo^?1s*Q{Sw3F62a_Lt>w0B@D|bTxN&uf$YHz01N~_B2k3^L_LRyx0pn`Rh@u zL)OW9?Y(D9TVMO8p23y!oB@wnqXi~;06&Qn@HjS&NkRa}19~_0^!Lk<24Xk`bqZGl z8COCKU^2+og@Hf1ZysGw;?OJ(X2p0G7!xH}T1PJ{Hg~t`RA}uhb0^d7#pybnTuM|> zgFgtrYs2219=yA{wLHB~XP%h)n@%mae z)D+&rmV+y7s5Dv{q}e*&Ym~>)qB-8MP5?XAo4~>_wuCVz^F`j6HgP;yjVL&S%gntn za!^Nm5sI$Gj6aOlcqBpllw&%1pq$N2Abg$oc+yM!f{VrpYD^dU*K%BoU*g`ERW-SBVX;{11I|O7&we|LgKHQ zoz11=%FK24>@4}mK)PHiqBwE{iK@W53-{t8SXCCH+t-a3zCz$`Y?z%rP-{^i?z$)c z=0*#zQ%JKvfv;2c`{Cy+%HI!c{&hGn7hh0e>|0~S`#oR@;#;HQKUi;>Gu#;)pBvBT zRr>7aMqSpg-Q3PUufn{3_3Z3kxW5YNSp|9y&r4uOvndtMd+=Nf>H{(Cr<6Iv`x@NS zojp#?)0}lujy+)R1NTebIp;~6>pIhJxie9Y@t@_>dZJr$bL+JnCfT|TTr)cxywak# zEB?n!#OV^mBY@?(@Vd*dzH8}EUhJMShQHN* zpm(M~7nH)HZ~yJi_g=AL!)HGE_aA-j-~TzHWkNg4^`EaT6h7K>c;XFZUw^|#@9OL7 z`%rXH*o6sha{Zr`y_(jk@@Wcl}2f!1( z705ey;!)6N!4rRg<;Q98#HU}6asW@P#C6-pz!R}RCY}XPJi&v@KSP-SE2~hy;E98v zGVsLTxKP*NiQ5`cui%MqT8qgvc;fq;@va7V;*+4O!4q$76JiKF@gG4E@Wd-Opx(g~ ztKJ~Q1bE_|o3LgI{yyMmK%WIqd=hj&c;ZsLKr#)U*wZV-qu_}{Z$$lqCkFe3cn&;q zM?YlvDTl<*fL{WhxOf0zfhTSSRe&dc1mprw{3WOXJn{9Lkzeq{FlYmK;-D9K2Ty$1 z4_N_Ed}{#m41NlDCukRV;=`albOW3L?FCPKZ4mVio_Ig#F7U+P@)dG3p}xAC(08%@nfI^;E9jC59JB|DDZcnY4F4)??-upCsu-vf+xQ3W|S>>;ukSBiEjfnfhUgKf-(nBymk-D96a$xP#iq*R!|B&@h;E=c;d65w}B_V z_(A9^@WfZ|MR|fJHiGT~PuvQ+7d&z4hfucQiLV7sgC_<)47mkQyyZ5OC-{B9uYzX4 z6aNkLGSp7;aM)!>QGfP&zOZ@B|y4W9TVPzpTphoC9& z#HIUD?%;`=KzqOw7u|{S1W!C4bO1c@eV}{66Nm4Do(E5?z8mrho_HhZhv13nPasX; ziMN8D15dmg^k?wI$3fy>9TGbapxnR{H-at%PrMGa6g=^=&!DWp6W<7G0#DrXdB`_- zV*C9l6Y#{1pb_xIUQh%)aWg0mp11{+0)G@(`US`v_%h(NpegWEz>k4;g5L+c6SNEb zeZZf9_JGG(1mXK4$_;!Rm;@aFk2Pg6@g3hD6X3;BAyz&KIRx(l{_`=&9{3qx<@Zrmzl1rk=*MVp z;LCtN2D!k`0N?Qwq!s)W&^v>62Yv{6?58LPx&iL~Ir0mBA8_=y$QSrH@av$R;Ew_a zeviC>9|HakbQgH>9LDgVd%;fu9|7G@_rM4K0NDUP4cz%W$^!f@VCX-P7w~c5;Gdxf z!4CmH|2EdmAU$_AN zz>5nVVl`+2d=u~i&=mM-;4eTs!5;@kFG3jLfH(eHs5ZuC{4Y4SDDzo4Vwn}B~) z>kvTi_=e&zhdhFh1K+V8eGd33;0;$eM2c>Jp9W2Vp9VeydKdWP z!1J0A7I*_#584U72{;DY1AYp46X!Os9Uw4n~b z_X0P!qh5cF@&w)wS_=MnC-Qg|()lyw5%^WmDwzLI_%Rob0*5GQQRoMj7Ku`Kk*jd1 zAfDfwH@!gFPoq5O{)xpHzkrMfEzGrl4tB*$EPG-me8xp8DHJ6w1+M&|ytt$H9Qds5>|u~^QF*qTGwha}u;(*l8R)d>IGMK{wz7Ej!jHc?f3f2{vB zs5HJ{y7*|}O#bnC>n=AuKHsA9uG7zWa?9_mVsVz^bs{TuaI?5nEOt0`ti2`EMMn!} z@{VW9g5{#i_?!je9LG*Ew+3K;c8NIKag(r@gkxcmSm=1Q&^bKmS(mvzFWO8aSv8I&AU%d^Q#wL&oX?Uwy~F?u0zVCt^<30v)*>ta{zaYZ->gi8|kpueXi{4wCS>% zFFcv{Upn5zC1Df9rJ{*%Xq$USm%98Udg)^uhVWfv-6B=|2%PNe@x#)wsK)Ua@&9| z7mfCEu*WrDy6tXtoOVB_;o!9Z$ z%~&p!37YBtoZ;(yL&8ofZ?-RgPW!TlX_qU;$viSl&F7XO?R5RTdf}7Q-LKZ#(XPAc z?o{=6b^-dHg(bxpy=3H`?(Ol~)A*O{&R-zTzp+S^O%#fSBL$-9XR0pf&t6u{>n%!e zombj+UVcUkW>PNmyaYPMhVTz5MNIwez~(Stk!6Z91M) zm9ITsdpT;EIid%VFN4T4&b$?Bcq!^Go}b_M4XDn_RibjZ?P=#;5Kf^J6co-2AeUTVS@#iVEkB85xE>OkJk-veRa{bxU*V9i~A`MHR70FL6(b`-0rx<9;9a?YNI8_vx+^a_>&>CvtB}@BLklG_-;GLDzsnptpi< z2Hg$%GU(f&UxNzI%@?l)tp&A#x0-P@ZLDy$(}KrdoxGI7%%Me4m@wt zx|EN>G6eY*7j7^*@~XaEW9uFeB#5_-$MMp2CNRAEinr{%$Rn-< zw0q;r8Pb)!?1Tv-7FO*UT`pJ+1I}3iB!~ zKV=FpR#>lagTf(&V+wCnc&oy@6@Fgf;|hPQ@J|X~wbF|3bqebhZc?~aVM5{i6@FOZ z0fqM~{JO$t6dqT2LSfnKt@sRu^$IsB)aA8RJ;xQ^pzwBu_bR+!;lm1#DSTGppA;5c zrpi^}MG7xfSgEi?pH}#5g}RUpoi z&nkRE;c1U&(jUPPCbtonrZOMQyZhCNQB)+d|c^8Kr?ehCWU1pNs^Bcq-zJu2`ZwmVp_==hM zt)m0CHNy+<4>EB|DG$$^@U^5i-X?{UM||eh5D|Wd95*`g!UpkOn&Q5KfVva`r;+kI zF+Rn}6}JiGChb%Coypb~PyZ&2Q2F8QHq1_r=i_PYB&Xu}{7v|nyGk8Wduc%zzaB_$ z1F^wy(DdNyK#?x!P2;XWrdwQJATM0##oeaNDXKzViDxFn4JX+k=Wj`y(ZHnmR6!q7 z!u0N-h^5XwoL>~`B8BMhI$cq74}C= zGcF!29Ec=QOk4ONSn+(Jx*bB@@__lBHj&B4JGn*twl`|4AA|0Q+2iLc7NW99XL=x( zDGAY1B(E-#$!`!|ug9yuiRQIZg_>)Exi=EPN3w#rxO>?2;#*MxTrCCDQNK5kPT=B< z3Cj@oK6*KR=e;4g&;hp{;+gXeGdhOb<-y1N%B2ra9L+--yu2m`b56?y*F^C zXLf|wH<}!_rexv+!W)p2GjRtv)EQEQc`A4|7R*$I7rvrsKQ9Vz$g*`hn4rK2&P_RF zQc$#`;!6(icK-GX^Ipyv<dEVVi~y<)D`Y_#eH?XxFHVT2FTuAhqGD2 zhp*zqk@mX;@5jTN2|^aQbqSvMtQbkfq7ldmF)6-;&mSReNbf%i`Hd{`py13_h{M1X zec{q2oJkVNk+i%K6Xzm@3Jim+BKVh|j`OD@+r24VV3Ne;YdAxv%>xl%coeb*N#mEL zIWBA0cBmY^dSIKg<34T`rp=zIq~8f`CnxUEtom6>5YFV-&ST=SUI-3HLsA?(o<@X7kkbD<=@T!&FVrV;CwZ60WMHpqJwqd{K;L*;eLCe0+S zoGe}IOD4@xUaE-;DWl1C%kTl+#w4z+9rY!hqv1dzmW+i`PK?(ZeaX?vvFc^KlSw?U0h}-khyo%6zgn^u)VVoE2#TQvIJsUQY z+RkpEA#XCrOk6j}zw4IylAY19*mg6qtV(-YTXo71*H+nMUt5*Q1pTf>#<8~& z_JV7h}&pS!l!<#yMF z*3|g^I_YS5$#m5E+#z>^S>vp$@vm{#*49=#{k}B;XRv-vu+~@Wt2b*J{z~bntbWOq zREO$U*9TVDI~!bPwX@b;v&Olm&hK|N)C66j`k*W5TP;&!$d&;KeC1VB?Rv?SG?=c? zYG1Y6=@0p9P&a0S6E#)mtZfJd>s-F-I^P;uH&#m4R@tOdHjSz|!VXnZrFF^rQmvNG zU~UQY;@uFK9lHmAh8)5GlwcE^Qx7~W+1JehN9+)|B{D3%EcF;KJI@olu_u$aM_`#`zyAJL!N~KuEO(upPA>`-JtE~`~Cg* zIdkUBnKNh3oH=uOMqf17lkf3(3i#i)J)UNM9_SUR9 zZtRq+rUj?oc>R?(UUqG8(q-3OcYQQ?`Q+e@vFn0YT^Ed;dw%fR>#vwRps1*Gi9@=! z%Hz4>_AZ|F=D;i6(zbgB+2cm^>{ww|DIk?aZgf<6-Ee%e$LZ;%d5}Bi~O5P zZK%wvcji&AiJ%4**vZSYCgT1`qJk9XdwPi=g87~b2Sw66>%5-9e)XjPOw9Mp&Urob zG5C_#Q+glAN~wp^cuyVYT{Z4PjoEjUr5Ps@-^2_^60jn=-_?w6TD$L+5Ug|xU{Zr zfWJ?p;@#gTNai{r4_TO$OrcQxAmli>fKlio8T}4*mFyC|L)C7)jJyDsNR&t7I+( zmX(~XfBT;Z-nc{qEVY<6f zxx(LgJ;GREp`>B^UBle7-SGeYbfc*?_PLQ5w3^K2cA`UkkJsOL35baf)T2?lZksO; zCPa`<^7%YB+5X0B_=VXmPYcf;C`G$gmAAG?%ayOP*ICn_Q-bqQ89VTg9{FGehEtA_ zEPDQcZ5w8ubwz)K`WqTB(R=a7UQhC7uQACs7Jrp*n0u{Hsc}uB|6?Rno6DLu`|qlf z664<$mTz|2r8-g5+hZLB(MV498s-jbKF`(W_G+`>nCisX-Ux585nozp{Y7vpKaH)a z@qT5rb%aMxjd@}O+SaE}t9n#WkD7$9FQ7!x>HMWqHKs6qtYBR=NZ>X`!1Nv9Z__G& zC$WP7TX|9znC$BF?$?ZyY`zW-kHLcV5Y3m^6 zTOW`oRYCT;xrW)6+QpN(*y=<%b94IhWly;s*t(Bankza-Z)#@%a{GU|!iT=cs{3E@ zt*ha|K*^4DI?-JH50&Tyh19#M%Y{5k9k}~5&e3)Bs~kb~HO$q9`F=|;^4Nh#H$&6h zWCz~op{>euUe$T0p_j9Ht9-qTA!Al~*xb`{1jwL;8&-OXkN4Q?(2|w{4YLE2ghqTt z0o`GM-Ii_@#OA+uJl>a@`{CJzEe(%#SPcrRyIfX3a9I6;u|~0a zie~jfSdAnKUJaW+xV*smTCghrsW?BuUT4@V;A&u%xusndPN3#bftY^7UMH-cpjm~w zxxx-4B*nK#cr&+43!<2pgfCudB)n~&3(l>Ml(#O$cvRG2TWV{P^2e+x885G;R=1a> zn=PwYstk+)M^^~niEB6=S=Z`&aZ24w$BlR~XT)Na% zJY-No(Fnl&pvGJwQaIO$4><*xCt5`_H@xlf9PbhPr<8IX8YkirrBf<7;ygRBYooGF znU>b}LKNv=q&R#%Uak0gcf98LLilR0VmT~5MK)pS{fOBnERBby2Y`8^zY><#dORoO zumnHYVUiu*MENyu7a}hO-|niItI+TkBE{j&r+KRwuX$TYe{av5QkV*a^&FYtETTo# z8NMC^;)xySP+Dk^o(zm|DBa*vO3#uO@7MAY7TR7%m5y>U%+VRHbuxs=pqjU7SF{sd zy5JR$C*36+-?Cr&H!n&d6d6_R6DXZtR8ZcUKE|O~p(!5iQ2h2s6kv;}JD zqaEg;wSktYv#TEC-?#!<8s=JagN(*TwQ02+t{^+?K;Z{cw7=VzU~}G;+m2gRZkJuU^`GU zg6?%qNvZB!=3c|R7~g^+G#My@p0x^tLMNwjvh@o>tXVo8vKudEX6c0&h-q2$HLiw{ zyrra{^yHe7+G>n&*I-^qx~d&$Ae+6`Kq9rVK8~!PI!9^6E;yF{I)T#SEA4cZ^y6pp zW3N6FjCKz<2N9Gagx!HidFw8ci=!@)iJHi2hsfa&X_j$Cn)cG)z?^tZK_gMAdQNqTCKcSK1l`V>o%tU9Mw>S=QA(+Pp0N*1sx`9r!GhkR`H4!P*m8;NpcS$I1H?FjeaFJfuXy+VOn5%A!oN@SJ|N zUBOdy=60~LF6;#Fl~pYT!Mu$X@o`%hHVV+Q?&FX=L zo9jIQipi+>zXn*UGmYdZ!ov})aHmnJMh{DHBRX9 z&Fzh1e-4v^m7id~U!#pQIIJfF zzaFP6e!(8wZmTLlHnuj68K31vh$P0A^y{>J_7U1{(f6FuL1f^E^8cL-E`bsdigF5pkLMTNDogwWA;R9zhLJ^R>s|y)L7!N7n;pP+S8?`Rjfrtys$iWVjIWVl5 zG=&}L<056`UN*lV9xoH zZLxLkEiF`4aC})o*sS_7{XgW!P-#gX05Db9F+7O7Ba;>d$Ok~@?ytr- z?Ep0o$<9ztrY0ietG>rs`7!|1+>_eg-xkSUaB21t5-K8KQpUTvT$2B_6*j=q%FO#AWo@9;5lGi|(Jo14)sR zfkdsgb%ps#-%TK8^mEl1YCR0oBS5ECW zul9O$g=4PYUatwwbqJjSp>%Jkgq1GKv>Pka1uBZsKSIFu*F$s#J*TZ`@u`+UeWT)x zJ`a|}1006zz!w0-Krr&S)5xN;C^2F#sq(+ty7=p2>qTY)Du$pdVFzAx@&t48^l6{x zW+zXfo9AXH&o7M6>ddQ)m1yHrM1kQNBiG6!j!i?mE5RXRw|3DTn=A#x$M9X#SP zASpA}!$EsU&}M*^*1q~eY&=u-7td6hF^^QyjLF|QmP;mLIaVK+rn2Geu~p}d#_Uv^ z?=qTKnQNjw-GST=+_ws)>?jyw-b&qhwjF39f!3Uj1=CZN_`#0;yB_2%aZ5>Qd247_ zTfM*0a;Q4*@Al!p2-?|@)6W#lK%WscOg^T`D= z+?bYN_N_6$+WBO7ML~h5s_C2P;gLjR$y`z$mBT!JyVC2aVv3mYV z02)oJq8;XV8(U*O!`z-8Gq@~v>YOoNBl+vR^47-n(NMTqW@h#KW<-PGW~o8_zRRNl z(!IE&LbVgh6xNiJV`Z$PeGWf}04gsoDUHt8&7cb`4L2*Rkqiu?c53vq61`P#=|qg# zw+MQLnklRWf%>yfi4i~;d^@UBSr zFye1YSEll~nW?)3tfGj#x%N{Q*btp^$B7%P5aO9B_{V2Zvt*z`6}{NHC(VGif(!}W zkL*A{@ZEl^M80`Bc7CfZfd!{mNc76Hh1rH3SVSUHYd6!H4=j>Ar@%$G0}m*yF72=y z6-WUsYoFf`Y}d4l?K$EY8eUi3ry(&YRnEJj9iJZ&tX{r&N4W z!L9@rF|X?>!ErqtqWk9obmytKP@WPj$53GAtOD09YwIAju>&^X_^h6uXhHm(f`ZY+ zr!xkvr{ri$oO4Y6IlU^+DTsA*^Wy(Y(jKi^5|YNeVLzWAQJsv}zoRu+UCto_sH51r@qLp%rH2$TZgz;K<5AM)H3Y00RjuN#nUqX$O9%N@%YElYyDD zy0&!?F`CyEq)({4t{_^JTf(|_)CZD*Di=BP_5+f?OpggLgvmn23c6NkaFf{}?DF}*RD+JRq_QQXl&K{9uA0`x0Dot8RQCcYZiA$poJ zG}|TQhwE_iSNImwb@0;Pvc*5GM1_H!pwbAC9e*kCk&|Q3Rvkwk?3N?p;}9JbPnLM- zyR>@_6T;UjK=?C*8RV8hq|?%{xzTz8zg^8%m5WIiHrF+LPDSm8ef%wq9eE-WV94El zLvV;~=X<6X8V?W~hJkb519+|hVo1*jf3xMRqacd%i8fJ{{kjkzOn2^iZA z*Y)){5RC=2v?FE-Zba#c^&E7fj2X$Ur{5cxiYEGXHr+G zRMosCZn<}5Qdtpp^JY?~W>Up6QWYmG$Rzg?Cnr^7)d-_^pvuv(dFCF`24~HRk9k4f{kDrgxDABTr$f z8|$9tx~z@!H~xrU5}!GdHvE<+a}Qdx&K&o=GJ3I-!tq&!o@l4Gs^^8t^btm4G)s5i zTc2UoRP5}_R2$incbr}5*)n7(kN!KXJot$ZnI*P0<}RpIo~mm8QA9~A^$ivzQ8m%r zAOE5?8R=-px3pGn%!sM0M&9Wl%c@u3PivBsTc!ALa|l+<4@aAy*?~EW#4|1!oESaP zNW`Y#9IH_M&L@pz>@~qw{&OQ(yQ*HV_c#89teQwp$oUeIH87*1cEHF06{hH(9XLG$ zRG1ogYzCMyGj^a;2AHulcHjprzr&Q$Iy>-n4n+J0JFxL5kQG3L`{)slf_&3o$+AR? zCw(?{??cIjOVmNg6L8cucM56J1oC3;V&wChKu=A;y8Lt7UPQppPVL7N)RG9&h)(vQ z4oBhUiCJJ@1@vA1^W{oa$}yN-NUljcOi=$U){))4#JOYvi)@FewKwP275Kq|uO2Ob{&$ATD z;w^>YPOUPhwgaE2e7;BJ2hlYNg1s*FdssoDvmJ1bM8#Ke1 z&5R67_B^$k&Q0Or_;P5UBn8KphE(?oIx^dLir9o5vXq((JTgp4F13?#i3z4(j+}Mv z#2cSX^@ky25)-mkzY*WE-HOe_uB?~x`Ytn=J_Zf5>M?WA?w!n_svd@|NaEUuy?eYX zBmNiDyLU$VerL{n#;m$CeXLZ(-_#9pmbVfyG`3eIOJ26C9u9jy?t95IiJ5m+&V1OP zd{R1bjFqy9@tMzfZoQ#$=dIUL?a2$Nw!iT>{#H-=v5FlO`7?EO+h#6|nEM#vbZwV~ z7JuG>4L0==@7H$VRI*8({f(beFQ?vly53A*srUO~Rd4GbpQ0?a6kcvi!T#!*&s6U8 z|7xe=y735RB7F}^2@&(_n#AbG#FkD%885{vG$yeISoK)-q#q3PO(P$R;oTGVz6;kc ziqEJf*KD-mF%f$#Vp=tcnU9s*eYcxc^JuWjHvgS71TEpaN{9)wTV=YUG)LYx^5(EU z;$$$Af%6=u4}5}}6O6D^_rYM;ZcC-W6_%qn3ZrZ$I-Ru_Vj+hKxvKJ2@J)gp_#2U? zFfN^P<-9lb7FP?>AUWFjXF&ki$&>B{YioJUu?0Utzm9Zs;{xR8w9kXmKuq#iL@E#Z z@AAObIf;Tdh9}3qu1cx4+t|NAru3)62Cis7UNkq;dkP;?L{OUxJjV1HssfCJJ%f26 z0Pu8Ld!BTr5Y=$1@F5;8Xos~&bL1imF{x>cIEkuxqqXwTYbvVaZFHAC=gbyuM37D*)HaJ zaWEslKfS8tw?TfgoH}CYf*4W;@+)tpH=@es_D*}^TfAn~+{#Pl`I9FQz6)2{H=Z0$ zjwq;HapUn6Hl=#fvf-E}S*Cz*uawXD2mRFJC{83XZf+I3&_-2ZV9dSY%Dp$97Ovbe zt-q5sVvcJhd*6sTdNw8s=hG!I0}|wJj3gvwN!VT-j_)goy`CQJ&^cY`4EQ-ZEM&0o z;}YtVODMjWHI99G(ZaCW5SV_&u9_!8P93eRx$wUGpCTeU%@y!(2e$KCzAN2T`94iO zQL*%PSpuG1NZ3~9iQ!Ab_*$7&pdj(U_^pMQ2t7}Xm}{e*?X~`&zb_~N!-JcKah4jg}X_)xR06vbmOnqr{p@QUgQDs7FE_G{8mqg}j8qY`u4 zBvY3N1!j>SbCCOi?97wilMD&p3MXHGl@9{$@c+Vzq$dOK4d#adc+!Wg0!VB$)lmwR zkkoL=n!K=Vfoy?(iJgug?3`cTni5|;F+I5ZljFXPc)zUtc3Rrpp7kYTNAd<40*1Hh zdB?44D$%hF?eSG;ZemA?V&~;l;M12y644&%Yh6A+R%;UJTV(B5Oo(EsS)s*bd)Sve z<_aX#j@}5GP>4Dsc|cS>i5rtVo=}$d89F!e!}VaM)}O*KhI1?H>L+#2KOa-=g^mO)gNO zNr_(#ZYfal>hJzX)qADGNH5LEr4A!&H#&@@p2AR@OBz1++dneDEA&k*^EdW|_KAM` zpj~bcDe#p6ISEL(VNani%F9u_MBqzrQDff%6EJrwdbBPeJ?>DNn`nGRQ^iCavg-h5 z$P$2PM|N@!*?nhf0Ui$D3;u`ztv<|a6ulvu=X#gaG&r2bi&MmuL#X<5sBY3!)6e7* zLVGn&La0}kP|+cTRve$L^>R%pbupYl>qmP?S6_Y5-?#;hrhZ+01A|In{zi!dI!)4) zLtueJKD8q`Z@SK6FFD29BuR2%-%qQyT4rkEa;#`?rrgI5DyxcMmrnO(m- z+DR*OOB?9``Y7bg3{r9O?TfmK`6?|lkyL5xowTozxdM0{Lhl1;$M#DO=IbOJDkzub zMhE9X!STPE+jxO3PTEYjr28GfH9sY|cgBuMcWMg-abg%hc?f}_Gs+^0v+Q51hTT#b zcB35`f*wVuwH1{m0XuNy-;@NH#?`Y+3{M*yxTMzh~*kg%K#L0M;&e-5& z+_6rTC(CYWcZ+f_jdGZSvR0!|6;J%uQYPc~2+c(A9Y?#{quKi#sCKX)16x|fP~}Ny z?PqTgfb2)V#6h~*LCS8y%|S98qzfFR!9PdobO)&%q-KUAJAD{xWOc!iX?Hhukr=@E zvRY*avb&nkf@?U*ck=Ie+Zk0rWi>fIWaNA*$|;f!{Kk3#2n!(AO>d>(d{pBNG)NZC zrjNIwVVJ&h5P?@~eBjHKY4TNS_+=S*+t&(zjE2h(^uh0r_X`~<&}dq(K${8W0y;;d zzLG&bfNul*X$}8d2L9s*3jTKuq9w({TCGMLw(H2cK1}cgVm8tX25CG<+*R z8voig3jV%^f0BV8&~(;n_#+wkJ6|aLyEI&i(R9vbFo&OSHC&3(@YCN@a48T`4$Z(l zI~9C@ga3?+Uy4oRnn{zSnq&~${HE_e8P1wU592Dza6-7f%Ki1k@o5|lROMjrlj?MB}y4;ALjb*OJaL9qXFNe7~{EdTvWpnj%N?qA9 z5I2ID5WcKe%3s7EkB2|j0tN+6?)6rqmtk^(Z$>Y}oEkK1OReX`1h6RCh4$R>6xBAX z_&;ZNr{3Awu&oTrMsi4OXnQXp*}v~EW#BvUNPciUoLyT_L+Vgx;g2qi2`!wdL3Ngb zeYfa^Pg?M8f(o`z!9H1c@XeM27q(TwW?V3^M@yj#Td!cAqL(~b*dhgsL{2|Fn|D4i zaR)O6JPtq`d~+{5=NjnhlAbB7p?&&gPI{(bIfv)wMFg<{2dDkr@5 zAQ?$=K^lSeAHe=sdJZ+rl$C@C(d~85_+y1N=4aMS-ifst4Ym-AZ7gq{UC_a>Ta6*= z{d*`wF{dcvTaeRWRgg|A-;6-I4U$bwN9*E_mEw+-;x_8yM4h{-;+7f>`*m?f!!pq? zMnX9W=N>IozyIwtoM$GYX3NL_+wR#94?|%Y?@OKCvn{tMD(s%k*~;9oZ6dJ*BFnNb z%a9$ohV>aM#-~*0pjtPi zN4?>X>`!;E8)6KPb*XE(rR29;#sNxm7BM}4bko25O?OF8l~cg0rI#gof88V34LZZ& z^so3N+KPyC^n?Sw8z|1UFg}rnQX7)39eahXXfTVu%|X9hi0q=y)+M_sOWgYMRVu1T zyr&dC&=A&A!YY6+-tl+@84=k`1YvxG?LE)B8tT%UwErjm*kJ9Cv5p^T)&-?xbs96} zZ{&sx?U+)r?o`Yc?w@zq*&uOSHesh^+w??L32UHc{_rgGtq#qh@GXHVm}$o{9B{IW zKYH7$Vp~;X1uVy{g?s)BzYjW`RKv*v{91UEH5pe=b5}CP_wSE6Jj>W~uamR`pOMjbx^O+7ePL&~1W(rW3mhmGmE@?zyCSh<;9VzU zGa1cID&Vi`rU*#Yq#<%!ib2HF(m-Zwy)-EeGd^8dZGMz`2(IX-(k*m9Rr}U68-yCR zjVGlh@qEck{2Jza9DJ-X*N$#l#Rfn$pW|&&G{M{}%l@JnQts@-1oh66xn!{}r#!VO z^;e^16P1R>irX4X)RsD-&gP0*H(vw{Nf-@1;aAbOdP9UW{9UNF67k{Df zqlRTtXOTm$49Z(;5@QM%1chN&6g9YTB8r{QDNuQ5GGwpws&V^v+N~g6# zOXqCh?WH3pFl8&eEL$qg7CoV!j7MWxcTNU2lht}c^>j75xk2?^(sQSZ9#1vQw~a|3 z%CIy;OcNWh`BT11#w&Y;k*qC_aP0%+NT@BOco2iwb1B8DhO$xlNo+O5L$sIPm7Mg& zD7Ge9bh$7NM@<+~&}o|>`b`*$vnW=8{o4sMj7M3D#H;=R90;FPZ(XyjC(#{k~kHBPG7J&R$Rb{`~0V z=_l3i=LVMg{dxW-DMjYqgYO;Atxe*2aI+Zs@`JOF00_F(-!?@hxS z8O+&tDKY)~g^?Rz#Lcc6g&@9eO=&>gLe>iOI`uxIpjvBahwhk!+)UQ}pvzeWX_0Vz zPeHVQ{cB2N8s^L^ku?-}`XfL7rrV%dzi*ts>32LFT7eHtB zz-|l4bo%~N2EzJ0rTfy`;8c1@R$s+3)tFyfMQ{?|pU+}Q$wX!ocl}MMnyD5U$nDx* zKU0%z-I1*-W|eGFs3)WUm3c}5WvrQ@T9-y;*e8jHmsOQ`cwSWz4x$m-bt-XeW@7B~ z%=O?kgAWR<})<;U(q^}n5VmLvZyCT zsLDxe@u1J0Q14oKz8@gZhCJV=pF{F2y%l(cJWG$|xlEp=*YaE{&(iKZ2dzD9bd|2H zyL9g#I(R*ydb=>{i`$)UI#r1`ZWs9*my*HWpm#^DpxI>z{}Xws##Dral;|Yn?Bu`W zHBgb{4br106||_M_qrE~*Zq>toRTVKp)Y7?dR7+nHwSce7WBLW8lMHtcR*EH&~pyx zv@FQY*hh`!FFFX_vj`4XR@)9nxx}EEmx$-L*PMwme?u1%G3Ep&YLbKQfd(!_RX_Xi z+yry4ywlElxdR$MO>cRO%hW`dF6hPdS58RC)e;I7OQg2*JNe{Z8@1tEz4M2YaQBJ7 zq!_3DrZOowoo2C@vt?A8q$B)?;|IFL{^Zn6^m-~{|3(LVtgYLzmUT)D3X~l5Zzts~ zQhuf!EO>HV(gPr1Rk;gHGJ)=2us{1r@>Mt@$ zP3W$hZIeHdTDN!w@rlL$S9dXzSbZTX-TzOn2}(^%7Bh)k~zgcz9lQkqF)U z7T%uJon&mu3|?LCT$`qMIg3tdm#71B!7*fShL}5cn86wdsJcN*H z5iCX+S}Me-lvyTgt%`qD_@kPOCrcjD4|kUQSwA$EJe(=qDO2CkA*Cb(+htq3E|!v{ zRm*eeK3Vb?m)zqnxySUw^CeHngQ}EEH^V)iilXaW2BPS0`c`&)vES^(AM@C6w#OSA z5I;CH);HS*&yz<;9Gal@ zJZhiz>jHkOSx(nxaySl>W0f_1l`m7s#pJQBgovZ11&aIV5t`y~M+o!3L6^HQ+|dKX zUV39rk>@%^7HRy89Q@ydzj$kBGghKHVZ$=<=G-ZtY<@a)pZOHhWuJLH#Kp^t|E`$d zBZ;oAG~egs%xLp%f72%o!(R>J`O`6?-8zsQE84;*lslrjEK2qMb!s|Ac(p92roA| z?!CIUs`nZ=aVO4?8QZ9Ysm4{IZ5>NC)3u%r83n8$TwCy&`_FbL^kG=LJL#2<%3PtNzbI%_Gy9d7UrF}9%Od7y zk-ne5r0(7*i}X#&g({O)v88{~n@TP_=jTc*BPDCsms&uC6=BBVb@4$*NFgmG_`bI< z&2|gRfo!?`{TH&uId|SFiU`u{r^*WbH=-R%PL}j8IsEUol7zJx7#JCyRZ~` z>y#gM%a1sXbTc$W-=2~Kwsg1bR>KR`{fgEowNR-Rgc@b2SkQ|B)9s~N(a92})qvP7fqy|>6Y37EW{Dk{**lbV!tS;tQ zZ_l_&DOmbb6no{Yu60?IJQt->5t-F_Ho0w;TPD4petW0dn$lUK z;OBu|{*A#l_PAX1=A1;NUWW3=Ji9+s-4rMF$n`3A6hu2@ZY>t6OdalO<=iX#w}gON z8we6p@W0xn4uSZs+n~>(fxJ3%_`!4voZy7)v1RK{NmXl%F`wLU^$Sj5Syu{>kQMH~ zTDnReGh8^GB4BkI`8~+U$y4`^A04#le*{c~h}C6_%RuxPnczr%bjmL8G?0Vvs%KmN5>Bsi*ck@zn%vcv#*wV$s}#XSRpD#YpCH@T1E}V zI1A=-SQ{#hDAcWU6k&B4VP9l|tL8MLMB+3>c`8$6RjZ1_VV*8wZ^bLhHnDB^Kn$Q* z(TQCl$~i(LK)k_^6LN()yinX%l$d#JHWSxotv3}Gv{)k$t-XeG5x|CcJl#F9?y{tG z9ofqGy@p>dv#BN*at&jP-xc0hkBydOD{Z)DF{IbdEClKD_b!qsM*pE>wV|_!WzyDkiNosA4W+R zK~!M>aA0QwyTE}x;=tJVy~Apdmt^#uymW%y?tKo->wbRCX`$v>z`1=$t;`zCKtgU4$)RJ;l~#HA%g(gAw#JCikjTH5 zwKQ{hHVh~FcYaOmHj=d8lbK45B9z5*NgC$xVmshddH!#ZgWMZ;hZLZY$z7Tl9%9B2 z?Z)9}f8%Cqoszw;v=n?r%#_TYYQ+T`G_h7D)8AVk5D?SN<8QnVeDQ4VC1iqNi+;1oHpOVL8Y4HkRSN5?o_1Ow8F*0<#wt{D;HA3?lj`%2S`@xiI+^Q7_G5v`FE;_@T7>q#!TF z)<~Vv-&9W)VO!Y3433Qv%HCnc!G+{lEl&~O1CVpHdxD6r69j6KCFi7jNvERDW4V8< zN!58#y0SXHEw83>>$DT=!ij>Cy7-=7M33U{#j&lb^b*KdlPAw+k}$kj%8vOsw08bL zDZB%z(y0$_qE%DyC+otWN!6svb0w83pR9SKx(B)Gg(kQDO^nWAQP=o&2pHxxUE}dT z$@jFA@AdZiimfJ{ubA>mt)P={Ql`AWIr*A0`C^qa;m~5>Ob)#SX?)PA?29ywBS(1c zL0+pSlTkHIsnt^#SSrI~!!j8HTo*#k)6^A{B(63Row%jM`jQ}w3^Vx#S8jAgWOm?> zWD)@GklZ)Q*|%iT;V_Wa!)($wysvZvxsw;UtJ}FstwEO{9~o#58H2_%*vt9)L?`aW zsgV^h>qe(YT(dV`k=tIv3p^N<1#&Y!ha$vNC=25st#@Z5H4^f+1HT6u-3^;7tPdce zyoGS`mJWW5WpV@uPt=-#VZHf*6xl(KYti3GZsM54JHQA_cP7BWn&?bceN|vYMQE)c z{dGYnPl%mDpLJ%BLyx*Pj9og&rp|Y!9aYzc&Ll^m6K#gK)$netOBC0|_XTg-BI}>j zv7M0FN8w%wH$#NWT_jgvLRO7#YDH`{+`_X!d?0S?-T7RNToZS5S=1*h#ocMv?(iil zdmiIZniH&}${4?!1zlE=t%1~z&BA7iNd*dD#*m{D3A5k=Q8gKC)mpHT=wb)@|1(cU zrsM3u`8*Bzk~&3uQp!6g=~6~hinw`L5iVQrqL=(f%he{QfDht65EKVElJwobolV&Mo&@jO;bd06gh+7xkS`jrXKFk4a&(bJ+x;&K-J$|e3Er8$ z4It17{f%=ZJz2D$0#(94+yu3sGf^~O-V?naQuzblx@ad5^H=#tD*8onK}!Zcantv^ zWKP!UlXSWWpndtBb^36f{+65moSXk^D#ASC1fAaIrmOOV|2K7dzD|GLO`qWApRd!u zs8{^GpwlJe-8$h-o$#ca@hCUr4LW_kPJb|)alB5rTPMtOGj5W1AG2MAGioX+zz#$DK4b*c8QdTEtD8>7>cr@YgzR zl$)mBq1knXZxBh|)VXM`^*=JJO$LMlS{We03gVg3S+H|VnPj4A-33zlsujKivk;}V zj!~8VuI7=>wF}OKXiC^zW4;%b%OO9oHsi-}Px$q+Eu>aEv!!em0szXZYe z+JP0&70%$`t6y-Ql4TUCzgb@w(|3a!SwqSaiZ^Y&yo)8iCkK@6~B0m+d&JfOa zrF>+UshJ!iS2GLD>I7XxcV@29+rXD*NUfn|0QeiP#VqO#Gv=pi7neB06?JNJrYxz+ zjC!y28x;XyYQP2hc617cJJMCPt*pSygDy(IKEpE<2 z{SdVNp&v@EXBDAMhPl&vgvWH7Gi2sW5@#@%k_|pDAq|--m0F+B66pSHnJ0-0D=F4; z6)RazrB#!C2*c%@tp@z06oCQv*2%@zZh|)=0;C)}N+_qSe+eiV_<$@BkCIzk)rp(8=~e= z$F@k%Rr5&e;&oD#grH>fDq0PawGyW!#SB%nqm8dJNgrY6)D|j)vdo-Na%Pw}{4Ec^ zKZK@;!k-Ug=Mz~vpK*G4v4mZy-|$`>tT#thIOFB;5Si=Rh6gP8tFvY`W@5HHo5Q;@nxUbidbP#p0+Bcy(4cjY zD^OG)Ou<9QdP22NTrwH)wcN%pf0+t0w@z7q5#0Deo81&5@_SxDG11XdC;W8Q&C)Wm zqu3oXb59DJYq&1f|LQ9LtLur-S^7kRnm1pHRO>3QE{vT{cbU{V){i}n+z*#HznHTJ zQMQ%twN_Fxa_=F!N@(XW>oyD*+2rn(2^H9h*dm%_D(#6jozCt87&OdJtR4z2_u~uZ z-BSH_;SIb)X@S)>Ohub^p}T~?E>nI=YfScyT-67ckZw|4W;_BHQyI1M&H!V`Tke0#^~KV zMM5bYm9eQ&pUoiESR`QYGEW2_59cYufmD;hS_3@RhwLP zmgw@wQNH*+CyI6?y0D3kNS+-y17cX74yeUoF5pWB4wH;)X}tdsWl>?m^|XkrsB!Vp zYIgpOHi=6U54x%>+6k90%ynQf@wt9^tdyOyX0Y^_!cB)$gf|IW3ls61D~LHwn^8q6EuU=s;u>-ASHJ5O$ z$NJbcs$(X)z^Uw-Vx^ssD>Z>=THk z|4#jadgxg?+FV?1u50u%A<@)zNUu+P2w zRygJW2(%HKwVTC&)B;q6V1~a@cBZTd_k6)fj-hoH2GJpI>gq|OR~K3<5Mx^$v3Nwa znC;}={@cRZgalmrLHlHf_CwHKfK|7x=$jCV3%M6i(n47vniLP>I$Px=n=9t1w83`t z!=_!o>*K6!TnS0Nfojw7n%R*MO#AIt|0}I#yoBuOyz*UYP?lSv-A^HKjiwl&HtS0m zPWF^T!v0s*TL-yJ%~~%rmxYqmr@rwpt8*d_agWK-Pe;IdDxy~!PEpGP_DXZZtxOoj zS(3fp%9&_6h}p+j`dYYM(__tqxzr@Zk6Tk zKFZvv%r|8+iL~D4wg}36N`Ah#9^ofj{dRNl__pz{%PJ=Us27ftM$p$mT63TlUsy`b zy|cJYqzlB}|2sDzAMB=lFs4>^D>;H6a|2*?N;kLK-KX*q1e|d|DqJ~ zv=&1|vYiZldu`_PDi?pDl(wT{VX-yL;&|WNV5Db65(#O|aD1Kj)y0Py$&Q4D($4G<+NIPB!2gH@`JMr^WywHXU}o80%Z3KEAIhMA$h<#jt*345 zHU6f~{5VA*_wnrzKeA^LIVTRqZ?O6ci`4_j;6!2yV6q& zN<17tNv{hveiJ*Jc)a;pa+cS6JOY5Ta;d$to5Qe(e9zy*AxsO+1w5N0iN`FbGJ-EO7IajGMF>OTJO=4 zQqP#gpp$_Q6_{b?x~FAa(O-fAy$!haEVyyI;MOyll;8dt{veGfQ|e@3waUhQ$zWum zwgWvEsOqul85GrW5dY8W#I1GgH!rEMj(460TfLm8kk!q3idY5ClVR=S;35YAcJgC= zD}Pe*=XEs$b1reV1K(|t)z9s)G#CvLBe`C#-usv)&-niCniaNvEqnGOGKOrhq7cGc zYB@-qth*rHQY24}Jh2V%m;5liO|=F{3QOD`>$f~vL&@cT#TJyX`;ZnV-$WVzBjSHjke0XriXuoebjwugaW7duNAa)-5pGIGl-|Nl~EOOO9hPdVRjeaSH7))OV! zVa+_G%-0wHw4Pe{i3hdhHphyM_+pXVuZ7}0P}I{tVnq(7mN89%i+)UeM#vjGygI&j z)=kBA;kNo8u_BCq3uNuA$}5u+JK(=o&C+QS)mFy~;fEYnyDRyhcqm_4k2s`y6em)z zV#W5|*b#761Ob_{?qU?Ay4gv{C#_VEjn8_DEA#L~p>^sOs*nuS94?vESKN*e6S_yh zYH?D95572B(Oh^Ke3$RC9)fgws=--JW+%+OTkXJc*MN}>1SwpdZyH(NiVYjcrJOQU zRxr2|X<$wP<FWGI9N0HR>EAp!-i6Aj! zCsagTts9_i;9!@ghGG8I@WBl19@!6L-XpFwn|GG8UyOM(Qyep)!nEcG3r0fDjEkpM z-pXDc$R&N#8BemFyxzw1hRp5s-kujEl%{v|bWz@UZDcefZ95$Bb`g_j-qd89G)3(;70gZg^tf@`I*nPbMv>b#>bGlj zK8v@OgIt+!_4tTEvlBeF92A3s?eYj@w@kT|Yww*^tV)cecKk=4eHA zUqexK6gl5j6LO=3vhq?93#sf*-5My#C2t*1HuUUpl_}P%p0zgaZ6ebcvtzmwQ6b+# zk%d|p6c#6ltC1@zRbQ8!>V0q-R$Ph)J}e`^C#+W%<;YB(d4Kl#gL6>`T$)I% z;Ieu;5Qc%68B3O-zaPvTTZ@K+Q z)Muh_Vfy+`QK+gzbM22wI-cRtl8C$qDz@8ID_1iTMPFa(#o;aqJ!WlrT}f~u5*!$c zy^O^eIsnqi-tWmQk1xKd$sRqZ_q%EeR$B-#p&rKzG_IixAma(p`0j=(6kwsuR7$VbI$P|-Eb8t#5<3c0}3>?p-N4nSA7BMm)FnBp3 z2{jj&wF-Tff^}ku>Ph`vhwd+g?m@nBF-_tE+#~Nye|E&TY>Br{ogFDT)#{`ejt1N` zwOvK_yi$vL(sUiktNbY+;3Qv zYNKVYT@WPE+S@FxSM)124ojq+&$`Moijg>+AwG6AX_cf|l>~oe;MD_LARzcO1>10z zNW1T_WQ0M?vMO|xWT+rR`R3Hq6e7ufl1b`75_0-XK(e$1Xiq?a*bKSD`dov))1ZZF zerF^HeL&x^1G89?LeVypD2f)44w3NfIaxRfcvbhHr3M+QBTc2j20h~TnPlK!YLY#* z6zG*2in<4OYA929@j#uMIkG*94)*g~|Gqd2R>bTGMoWk~9=d0t`(Ot{`T}kN7jt%3 z8@3CLws0}kv6b#OY-<$(C5Ak%R@XR3neeKx1U=HJ{mUiwposMg*&pcW14)}{Yi?%pwqyi$)q&W_aj3s>`LwNX`} z2QDCQCOK;|g;d}#_hifNY_zc(P1?~ho^uJ|s%`Db5TEhebL;d1wlQ<(o&w59p#E!9 z(O$6`igrjEZK8}@<3-1`E%~_*;rVg1q-9Z$4@Jwqt56yp(r15vb~JuVqf{)tP-0Kv zp6u^Y-+Wj5!`p@x&xeV&+k|DYk`jq!;%H2|TOfof&PjIV_T0Ui3uGP5T&F$;Wj)09eI*SxS7#>s>|IUvKaMF`TZ1^+Yn~g}gPIbyFV?Gy zb!4JtuwC^evp2;$jA@VT6wX{eau|zW>T}Uwb8icEmxx~6?n=OGdVHa{%%0eF@r9^6 z+fO>H3plJ|Vda~e2jJsujT7$W8`~MN?L&dHKgpqfCDe6u&$ z=BoJrP$MH_Bu$r2gi^ zIHzO}8C9HJ{DyWbJNO%=5vCy_aT`LqH(KvY2a2o9CAXE<$xPQxmfBgb<|gN+N_Vv$ zbW`1+XYR+_ZxiXPqoc-!Gxy`|j2$0zq2u;YF_lf$H2s^A&wP-rCJk(h%Sgt59_tMt z=~}1Whp$w!egHbiIvsGpHfur@_pAn6yNTgsJ{9x@X?nUQrArHKB$@cqbmEq3Jz9Jb zXTMr0*K%k(@d0xwWhbeB~^9xH4fOcoXS~oKp!pUVJ8B0U}VCBG#Y0SN#9} zdx)N6nhsB&Z|DYJ3mm|QDXJlxADr*>$c)Usw;mXYCpmRGMe)6dYK?RF4#KxuKvGkE zrZ))4z53a{SH^aMbvgtldRR!#jGXh7x@@wJ0;ng0wQP}5Uz4%Ukc<(I&Xl!pFS}fj{sD%^UyIpPWQNg`8(0-sn z;&lD!);t<}D02q-_*7 zl0Mn)%bTU&4rqpEkkDJBDd{DB?<#`Bh=S><`JP zvP>|J#JvrhNNbJBWn=5&`|Ma3X~0WyciD4}3RYFFoOP;y5i_*&z1DP$tGNVcv#Y%# zdSrO_J2mEpboWF@zCgj#;w=T8))7;CDvJJ7xumbxuf_auhOwrkUnJ3U zE>rT!MD4@%gNymxLTD0W&`ZpLhCT-ALUX#A5P&T{H zMQ7^BzoLLM<4NBHs7A~JDV|`In$nGznK3%(EI9}2O<8H{?OiH+Uu@G?Lw#dMYeA{2 z92h#q;5|ftP$q|ExxtcW(n>Xd)U%8hK1ZPzAA~XjPzSN?_XUHfqg29}RI~%eT*Qj@ zh~?`StYcMHCdeU~X^t)7^c8n!$&+CRo|`QN7QG~r(WfYxOf%Rpd7nX&92Rmo4mS%O z8n=hT_ZQN&CKbiV%07OOvD&^Xd81pTN02gsXEn{W12rUTIs|&uYW&x9Y^nX9p^|Rq zjt!UmH%>w$32KJMHi)I;l!Sv4xehXCVb?{|`rmc52K|+xYza}PnaN>3>($M z0dM6fc6loyf*_j-n3YE=m(1#Z&YZ6K=ghA0dL!PI>=H?T9meZnb3$vXU>IAGyeCv8 z$6Oe$-`i<=0Z(P|E&g*j$D0>P8W#=*#&4Nq&yO!*pUG;;Qox6Or=ik$u_Nfj)O!*y z5)m*zv;&jw$V2bVZ4)kKe`RwC&Bdo;Q~lAf%$TO@wAPwJ#LGw;UV~+}WLSRyE7}*B z)WS$!EH(dh=lm7<=gJw&9ae?lSGG+nn^Q29?-P7o5dYkt9C@L9Q8+(2QaGPobF(*D z3*WcqCu_@QkG(mM+eA4qgNd062dK3AR*VX`Z$xbt$OYsQFX8h8zr9@rTJ#NuC`3Oy z@XOZh7Ocq~b@P3~*xD=_m-e^$eoLp2XKS07Q?8!l1*;ez5@Zp;Bi2vHK2Y?VB{&;j z^cZl|V0Gr}4I98j$4VXYw?cja|J&9dpHxk%u5Ymq2jzF;go91?eGFtWGP~dDyIWH@ z+MzIn+(zQ|*{U38t(v}`VdQ(_iqdg=X+{+3V_nh=*t!grJ<&mQirojQ*D3D;O3J7u zeDk3rTWU(}+FEgvOT{pyy25&*|}(W*J(jsZKXXOHR*A=)gx-PmC7W?hioC0s(2I6$X6NE9eZujUr@z?Dx{0otnG{zeaO03iNo|gOTPGl;#k-C z{$R8yzQ1@@QTm9=k7ssFcVDP{sHE?-^SQRF;DOBkJeHrb0ipPiI;Z4F;xSdUy5TQk zE|2!1^jDZ-WC~`j_gJUc)5t_vpg7h|%I#6UOG++IN6UAGD?g&}t99WCUkm~?>EF&{ zgz5JuBT=suj<(Ww>Z?GG9e4wBVEwB=HJEj^xZI_zE!*oP^psgnc|b~4+lp)lGYqEM zy_gCAWDkm0u+@E+1WOX$YF3tNk*XH1?7+)($A~U^O`a~A@6c zuo)Q>_|_PHqQ|mcpDg+-448q1K&+0gfl#MJ*ygtwC^liO9ZrmWK_a##V%>^5pR1gL zd{QfWHZVZf55{CvZO4l;hSbyiF{^3Uj8paEMOQr!(NiTg=7#NgC9PoT^n2h_x#86b zedpJ%C3(>bwwj>fNNy9MAcD#3k{1*xod+WMA0R*br~3K%&dAA&KQG3ef;+YXldA+A zdmUO|GDJKQ_=`tg@D!xG)(y#<%jcx!EsuR?F@0T?M=|Bl6~5GWYfuE+8}i@3;;cb_ zV(7A6ev@3?)6x1D-7oF4>JXN4`olIsYjconoJBgSi#j(hXlp|7GZFYDL7*DkL~~_L z;=CE7S#ZwHA9re8=N#QxU*xf4f#

o?2vf!4bH3Z8bPC=0NfEUK=To1#`_0tve_ybrl3uUDe{8Ot>j{ zw}fuQSER#ru+9Ka+__S0y7SH14h?TokHYlZPKFgKLw!9!$>X!~$Ri`Y&XpO_6GI*b zQ&|QM_ayrd;7lw=*uGF~z8qiJWZ&Nkk@{N(p#`0_&d!3CTocMSLr98!5g+pPtMY*P z-eir&=&DeO-eod6RjU7!G3n?RGG{DO;ZT*h35R8wbUE)3^O*K3+aCE z|HC_-fY#fW-`btOwYQGs@6cOMNVNb?j`;K7Bm8%~$Ro|akLG7 zgHAsa&13^DUZr!b9jW8}jo&kB@N|*Cv5^RV>T*FgcR;TR5m>j&c8g@uZ9Gd{=8a71 zjgmS=r%rWJAJ3$!yd!n$%}#1OlX|V>?Wa@aStw7=q+Tki-E^uvOX>(oO$NsBD$dz< z_QnbL`9cLAE;&AOU=L{683J4Bz#28|WP!b`VU1VOz@zaFJIe8lkq<*C&K~;P&jifJ zf$Ir$1*Nsj-Ev+xWtDN6$9J?& zrV#oxJkBm8NkI#(p1SDS|Hjp?G1rHgR945AG<4LQbiEBz)JuEcv&puxQg1dW^OFPjba*Q1;3vhiMOeeQ%KZE;IfQ zd+!1sRdqG|XF`GrB%UCN#w$^w60gK7qo6r3qcb=`6sgvVwML`%Vijf-FF?|nXpYB$ z)LYTMt=ej9weP3aieMEp2_yj&19$=P5U2IU!I4Y zIs5Fr_TFo+z1G@muf4X}Pxkpon1RE5W?-l&f@XCELK+cL5i*_PQ-Cc#VP7l%r_J`k zy{%qDT~4ca>~>lmBeVT;_5c+klKJTyjI1*de)b3Q0g}tHhRf?nUadP|llCHhK^>Q} z%m~FB?~r-UK;6lCJQ?bT<*VsuJSKSRM;It-*P3bMT0%Za_HUT)do{9~ z#H>cX;O1RSa@7i-selNRfW>L|w_3-;FoD(hXTIC3VH<)ISalz?_>8!;lPf;!t*c#t z)Am()ZQsgAx_Lt+o73y#r=AmtwrhdJ7kPoi29|{zt(Onwi-Whyg~aKlRpL@Vf>2A= znGBe8bAPFcyv^h#OkDhg19y=CDX}~s;oULyU~YfTJ1h_{I#j}|;40|(%BrE};gu}y86>d$^&wLw z>rHuHS(+|375(^)Zj@zK!4ZNvsP528XRH`1q0zZ6m?bi@d(!g@BxaGy-EQ9Bxq0D{ z(Egd+Ef4J*B=#lp50&*)GaiS{+CPypO4iKS!3;YDP%w~N_$|aWQNG5@!n{hOcH+}5 z$>QKc^3SA%<)(dKG3~OeB<)QnEoOk4Ai8C-j^j-cNcPj99tw*No$0zWmw?awqF2`6 zozhKjNG*GIUC^D?_1SLTKakwFm&ZE2Y!n4Y9nYe{Z*8Y>XSj`Hv9@>PekhHD=4u!h zzqH2i*IUQBm7JYv(2as$(GRr7N=Y;}D&CB<%4T+rLY3V<^O}0Sa#89XcGwtf>b{z~ z;njZRm7>IH%AVlJQqk$mA@*6GELnXMH&)p7%NFIavm!&kmyF#3UTuUw{amN1$^i zG*L5r-Y;g3A~=Pk#s!oFm76IQNP9St%$oXCJNA=^7~r_RV>@@j7a)AC8FJq2RXNYs z&BRL=LAXIbf@3v@)fBQ8;si`r&25VGnnX`?CQF9PueKz_tPmiwB*#>&EfAkvpDJ4r zmWpxAEjy3mQgJ>NlcJ&o3ySB!sqMR^&++01!DjMycf?K`!&aL_0~mc0MN@CrFu6U> z##TNFB3{?fGTrz^J=YRnx&0Xz0n1uqgVfh7DfhiQJ_Br|0 zjTX{FbqR*|Lv5D$BxrMehv%4OFOva7;HaUIBUs6t){*}ww+7CVmi>m`M%i!qn>>`T zfRO{q!s%uwCbo4AeY2+k%Ex+Mz>sC;ApR2G`y=WLm)KZEB)KsBBRj~?XwT8%{+@gv znFFdF6-*FbIlMjoRDrgqmmikiwkB}I>ZRpEFk(&*CpOQVv{-1H27MFx2w7!b;-V-jRPNWq_Px-@;!VIMymoP=P}_nj1N! zBmWvQz#nt;#M(SxQ}I>2+UHAKYV$9W`UVtVAdjZv01rgnV!b^tkEy!I%s*B>#H-&U zwT0##DjB?;krR=3@Eq{4|2M)~p%`$U&)4)|$j0<>C|CBIR4lD^E&;@W0F&c1cC@6I zBlQIpe1G{%RvGyN_={3tpMuSam0aH)EM%;IAx zi_>Gi_0nvi?s8tGiJU|zF5%5(ZT;a#P=soEtiVya;@9gjbCUPBus z&h53u%g&Jo{u{Rn^OE3&!y?YRTBjJN{X1z!+4KDE$bXE#GO4U;_@py7WnQNjzi`Lr zW6t~~uc7to;=QmaZG=?I0qwy5G3C_`03M4!ph~sSB31(3dDZ*u*)!GGPMWF9?}kB;#E*d zTXSkyF4Z>k+=PRRJlDC;74Eaueg4&b{@#7w>pp+!KBu_PtK8>B?sJTKYC~c)JSPYL zr;jm`RKSq+KY;>MZApKxF8w{##g}8`OC0xfWs@!|msjNadND*yZmX+1F`c`vxzB!& zSvDO`7BF*-gamRK3w<1AbVhB=5Qnt}Dm%e_YY$cVnAC#k%F)li)RV-1O`Bqt*UL|2CDcBfp(@86^A10G0C` z>8)Y)O!q&!y!Wv=*Zk~{|-fV(e1h6vgmeC zIFKnK`$yUk(0BN@Mo2h*+9r8;zYf2z+9%6T*4(+^IohWB|9PLH)^XYO3$QG719z|f zC^O@Yvfoy%4T|JwgQl1Gv_bxgsJFj%*Ano6(iAUyNTzh!gGBmC`|6n>n|xY{Ua?6l zxwV`>H{s5DQ-PXB*7MK{UzwB~|5^ozV*#;A8-)823=y@D-*O_l?QZsqwGwJBnO?%i zx>n+^0G&5x;Q^kQd{7%wPh+IsAoV8i?0r9&cY7*><+kfqd9Uq#*X3QDn<;yr{60?x z*8R6;{T}11@G(O0F+#Re;(lkxn}rc>Q-0LI8U%;G$66Uh;>|mhCOND%Ui>RyW0AEg z=~2Lp^f-8UntYCXEXt`B=bQB?>w#vs{jMpIb^6bQd!5#DmS}KG8@Fh)u$BTR|F5Jd z(_>3H;}Lf*D1oRptXU|v)Z^mOs6sZ&#WG~r>fHeC09C6UBeTN4II)pBx9i)|3x zvF|S6?+NIaV#l?9EGx((Wlm3}yZqD)*!=jJDpLkCkQ&d}}z1pZ#Z%6(SiXom?&;LalNr7nhM(eL2kjU#xW!+#N{w9x({4cyBTu4APBe0;T{PiS-2=`Kn z|4Gk&Gn!2pSIWWwAG{?L>FXY*%&0P{Q3qqc)(QOr43}>dC zn|~SIR;@Lzkt)nHjO9)R4Qr)xtr6`F>e({w85JGSSV9!RTEGId?t~TczPGTt#PxADgCxTkkQoUy1l86(VOoHOnL(XGQH8H6Vy2K*F;6CzvEYQMT%SZ zQb~2w8G^oFo<;!&UuN0(k4m!}^o$jxPIUu*N(!-DVPnBpm!Z&5<^yLWLh>+Id*WyIY(6 zrPMl)Pc!9vz}v3PdQXzT|5`Kx;|%)_UVG)4eCXsufG=|WV;YFK%1eaYL;Z?)I9Sndc?qP>36mmJ1&!EoK3zd>+NL}Qvo@r zf5os#yg7!@E5GHkJ7KA=e4M}p^_)R`EvzN3uf)N74DlMJF4q}yGTuB0)*CnbWM z4tsm)bJR8?dnXL>Zc)T z$7j+MIwPc6Pxe4zgZUuzAkpZYJx6C0F@FY56BcNv$`1N5C^io-=Ut)-%1-s)RMO~S zJQO_;6I3E|x2L$ydP}$%;ZPWmBS8eCLa6+Za0_c9+`J)i;7AF8N?lw_%!^F_m3xSD2*mSCP^R1^!-Q{Br^RMTapXTCNq%^xv_1cF zQg{y-hhLP51HBsvJDNIYC9>QHnj)8k#mN%E3Nl4E!{NpQ~EdZ0ntO!JC>kyS@VA4UTG`4pP> zR$Bk)onI)UT1*Ttw;T(+bItrFGK#pLM_Nbz&Ac&1GRmzGXrLKdOuvM&R7jqV{BKTX z4)Cud|7-VGs_btCNj;l=M=z;A~Nw$Pf z*4dK7h;LvP?;M^UFP~XmB>PI<)+q)30x0ZDrVJD%Ergk4eYV51;&8??>wG~#w5Q;f z=>fCs|7?O&t*L7`lNSCkP&l#Kn!#1H8Dd9q+)16N)cD~eJ4D@#rVVL}5x96^?ZM0hLeHwXOgEN9v|#P|;B>XyDS=0J2memLBA=NJ&0vjb zvrc>QLcwql3|~CRY1}eB9!yWAC14nQ_)KXR^QZ;77)QH0r<6*&g5Kqk_0;avQJoX= ztV#|JA1Og|hU+U{Ep9Crs0TM6$LEq(KvnyXlss$rn-m+#SuK5dLnPUWul>H6(u<`Ev zoGTHHpC2aatBrQ6Uxby-MuY&KaLl?iKXU8^>GkI_;q0fXlcs_AWhqWP!2bzQKzQpv z0LggQyGk36C+dp!yaSoyoTpdT1MuaPF_ut7xi?!=rDiurx-y>osLwgsx@UdQ>p3~z zwwVXvg%j{_O1RD_Ixr0ndevhX136wK?@vXQG?3lJr}Mi>K~)us0$UuldM_S(MAM z1U?pHAFk9D)}L!skFHd98fx4@jZe5WHV|YgHM6iad`5@=qdcmV1J%h#dgrgW1tst7 zeV-???WHzaW&d1+lU#X7A^S>RMBXTTx%#iMk}hv)uZ|R$V~2Xj4xho^M8EnC6_G;% zwG)Rn6_t=2ZSfdmhk`gq7D8;T)^)eadTP&4F)G5Im)=HkbhJwyJA}f-^o=T*rG#sK zjYA=_jxzkKtcRxxv=T2NI<@iWQRdhpEx5_MQJb9vUdPxXTAuR7Z%By^<76}joFSu& zJT9Mv4V8vNrXSP8HtPaFpL=#k=Io69_*vpy0dOpml*GOTcK`anKu5N#uidwi)~tPySGQ1{UQz5iD*pO zRQ!^ZTsHA5lF*mqxN>>6CJ$~7)Q*Kxa?OcDqpcoe;?RJ1cX*U2)Zk{zLLse*L%kD+ z&seK17!NuJZ&_FoUTS^s7NATVnp~>Nx98Ad4)EVj0a${e{s-_lwgzI>i^1g^3x6ra4a$-fhStqN`f zoSQcw+Wn!gunXsiLSlF!x3=|*Si$&({X)iSU*)^jR&-hMSR66AZ60TFawwYylYGhP zw}7lMRwtj%>a5})edo8sd5H!O(L}fXLW{iy|M8nQvL4aRX$6Ew*9pEGZ8>0The$sy z_7T;o)hlL@;3;>EkXP^Y$X$+o5YU9a%f+zh@OFc1zr1 zqPu>fYY!x3AH9MT{IBl^P$Zky_%c77_BVWz!coDvU7DcHYNu6tdq$Vdk!O_EoU&YTsf)N_jq;f+=YRapEjLKypI);H$&z%J*pQenxy)D1MNXI_eqb| zRdxxVS}LfJp2Wn%!sp$t#W`Y=qgN7Y{PrS-33Xm;^phkInqH6}@n59)fcViG50iJ} zOFHTB`^PXNRh<@P#cD4Acx>D$a zhEH-TD7IjKrhB;E+BQX4jw@~iY$wNOXC9usNbyJDD*lnqphrLVOgRI{dq7?5KoyWn z9S-nVHe4w-7001HjJ3`CpyhHPL(Ab&^F_9*ebiq0;-D6Ls7ppdMDb%72ECG4oVOR* z5331}{<$w2Uw|vGf~wC~H0{!dy@maUN zM@xmiFv-{(X}AlH!J;}Ua+(nCa*H~z0wDQ{qO16{lwC>H;2{{FnrojfZ2k6v>{yuI0 z=*u4+O^a!P<+Fb-ES8s^j@EVec6S#0m=uf-_q@QLaz z9ra;MRExEyFuAMiKbZ-KllNGuu%*8XLGrI&H@4$27@Yt5YtBENYZQh34#AUmVfZ+f zE#dDu40wnv&MLb@N6Pj=zetJRo^yNa|i2np5RvECv~C&_Y1{G-CN^Hg(`cZ zEhF?Mbn0z|H?z)Mj?Z55v1V{J<2d#s{ECU{l`WVuv{`>-0@T#@U{_OQ294Etc3Jhm z5YOVzFojSmT);8c#&hTv5WGO3Rh8|=)FNJw-P+Lt1g&uve}(*;?&k;i6P6TP&hHFA z5)^5%w?Ts5?$0?P7>{^_WmF_5I`b#3ucX-pAH)A7AG!(goy~_Lo#+qALwe!5dJL(K zE<{isrN=d{m@$IjFIyJ%szV>Zhw4AB2zNTH=s*EIaj3vs=)&8R6S?$7r|E9ETzYq$ z^v*sUy6xpZA>#{BP_4!Ki&P?0g~$%Ohnc443mVZp5w}6@nJ$L&NKco27jq+nKN*k4 z+sI7}`}Q2xEZ2GLpQ^$xzu&srzMleV`ha~iMlvRbs505JLTkK?lq?-fn{@>Vf!d8} zI$#Gg==sK)_VbL4wMVJCszG!{mDXknKXLn?kvFF>FS0Vt+`z22chfRR#~vd%QT?qk zK86&PK~EYv`(|?3an*r(nJO7;va>{v-def~{Y{I#$u}$syU z-yV$DiJF)GoiKjTF0#YtQ0jEUvO*iw571K`pn`m=(s?h`V0+P8vg_=@)8#PZ~utS{2m z`3hP2Rp_Q(q#LiPi%i->#!|%%0#LB-ZJAlCn-`Y&DqFl=+N?ZSS7jHA9`HTu7+&0| zvt>pxOCq)&w~MeEA}u?IeN|^y5WH<|Rh%KlMHe~POO5l3Fh*5wY40ByYOj=fI&`&s z(YNRV+;+w${#kaJxTe6CL(RJ0~!5QLuo56MZ3yD!>8ChYW2+fA=N@~VlrVR8n zOZF*657FlCH(zv0&hYPtlcq;o&ZSg(*@HrSy5lE#*q*Herw%U2ybk`QTX*`P+;X`gV{aylib1ZALd_6rP_D@LWO zu`*{e^wNi@{MOgv^K(RIp0FgbHX_!NM>=r7r9ZET6VlicwaS$SikX*nj7x$(5!vr5 zJXrTRIi-Dn0!ISB8Tc^zR{`K*ty`k>w{-qm^24bjUnC!qbax%?>cv~f76|g4jjgDa zs}{%gbVJow!P7cg)t6x!GdI|!;DH(N?tED~S^fBKpO~RzhrF<#rt4pigM1%;VoP|; zW-g$-wE`j20n1Q(Z7<2t`OsoQ+A}PiWyvCj`bu$M^hC;Si9f~oVJL zK2KXVK6>R#U;BX~TAeQFa<9eGVC_ad(K94){jzK8>gocCZAbYk6X79_o}Nf-8=@l^ z1J}1WUwe+K>@*UQkIk{iOVq!jj$T`Y_rF&bs1f~c_4pxD!@j$MD_S{n0se3!; z(|w|zKvOx|csxs2Lkw0Uo63k-Krx_@7G7R!D~g3RL>K#sJ8b3QChdz~!r}diVgryZ zHfM)#vK?f{2cmc8hhx8-pv+d-h)dQ~qO8HSrhQ*WE5fAL6NpdhR<1Z}rgyVyh6npF z;{6TZa2(}%Yu6ik#QPz9s#(*cJW*QJ1tlUF_8+N&SuC88v8xiI4#LLsNA!L6_f#1y z2Cdd62v*9xdq!3n*WR#q`))1HKoWSFhKfemr=bJ)Zs<>`lp1NPIu;JzlZU18A^OsH z=rw15w_bDhHGAqcz5P4D?ces(`}8l{ZkRm)T9ZvzxYs$mcS0|HdUpa&j^=b3g@%+2 zf|DOJ(lA+1L{q!&7|)GU-gjo6$8?AZU#;AZr;syJD*WCiOQOOgOZU__+5~d1QZjQx z@))6OcDqiMQTpg=S7h~tCDT$qm${u3i=VPj!2_8#$u}4^p=5`i?V~gNxX)TGoAnJs;CB>fR zl^B+di)Zv_-^(Bjr|}irIxpgWadWG(eymEq(#wzL?@xo&3Af;K+gG_fu{Jlba$U%? zL^Cd=I>*eyvW2dA_$+-;Sw3Z#K#yPKu}6X?__gZhUHzp<1|k;(vXPJh>cH}>NGAvg zvAfJ;ITd-n7Z*KZrUL`vf_8s53ts?xm8WBI&t3votyyI&J7>qh_o!a6@A1S z=wwUVrDty71j+{i?^cX65vtW*99vOm_&=y)J~X~c0tQ?y_Cxt123vHO=(ZEJ*aIX) zw;dnuqJC>0PVUKf96doG4VLg}`>R3IW(}s%;Iq9yJsy@vwf4~WbS3mcAS8KCAmGP)t zE%;X|MmO&|q~}AIbo7G?Qmi)dAJ3luGT>_XV$#R-`~pAom40;}`EBtZbn%qdGj3OK zdNrsGS%W&kn#@<9hr8m8cRAeCaDIXG8A*k}aCZtO+YiAwGxAFGs*x;(Tu&_=MjcI( zThFW;r3uHY#z9BRYy)PbEAc6Pv+EJ;O8-&%(R!T6?O7u0)x3qKXH0b_07h3e?d@X9 z%LKAF@x!Gv@@ca-BYo{1Bxd33K7n_32A;6n&Ac(dc9kj~1FN#65yfQo3X<#uf5h(X zR4a_d{yze=cecy=!o7)9F~ctu2hHrGoa>l_+_oYgQf^A zYq1@?a?b8O!+$^CM-L;Bg2soOTAPzRvzeVJGqPDWE%LpQo*5-N&Dk3s9G zlaiw@yX8pExddx{jcij}scxbF5Sl~hWZ3V6&NxOt9Z|m>$2B?g6W!5IyXzZ%5QU*} z1;qY$e#6aI5EIPIWf+=%gccIdtB?D1rc18C)8>BPgE^Xe-|kd&Vb*NM4#Z8|l+4hi zu4Gz0NjVMItP<<9E_KDu1{}X|16nJ;%mcL-nVLI1;X%YZ;zvHWpJ9JukAy7|e@k>* zM2m&U$p$Hmrq!Aaqp|OXS@cqXv`1HVE?V_>WKfRU+H9yii2h9ToptNTG zG=c79-X_!POqo`+rGEQ$TI>oki_Ko)(`nRFzMD1o3-H9{LN4OWaj$JaRoI-E1Yw62!C5P#K*=@Jrvs_^J1p<;ue2ltIt@zb+xZ>dBPr2_|*dO zo2^`y_=1J^REA0%MYt(eeonotd~1GDJw(FVOmFCxtix!2j;w&B7<+WMOgzx47c6&_9A6<~U;*8C{3O&o z=TL6Dtj`%f`**a*;al#g%kb$Yt~^;I?F=$XON%w@Lkc~Et8j0Z{s0KKnQGE8kTQrv zF^AdbWN2GDf8oA!J}f!Q`sDmf2`<(3Y?u>7?k441dTPmZfA|AZ52Z~qY;u7ci^P^t zI=;c=W*H2$XbyhVclcX`rmRaYmHEX1^?1#Kv>|Rnfi+^1s7aHXL(X|!>`(<5k>zshR?MG31P3{XbgnkIOA9zvAStuaq$-+c5!5ky-;ns1}&?-o&130T~AM2{)B zfT}6TZ-m0b?`P)u3v3Aso4iYIGFN6N*uC<2Vb|S0nwGj0_E{TBz+&qWIEk9M(kD^mVzrwZv-Zxv4hO8TCmNO#UVy}z5U7AbWfKipX?80R?F9kQRvEEpBeF!aeZc3mM!z+ zI)mSg3Np3fN-egI&icF^cl_M7#fIY7tRl)qH+$C=_Pu;m`V_bKcGCv*{eY+4IuV*7 zH1sWK$-xfp%;XegMfj_bwP$!F&T*D3433qd5S;_T8HMUjA3Z8-O0b{l|AC_ za;X^QxH4H567wqnW33d9*1LX*Y_NYyWlH~7-=FXMUHKl>?I4GC%GOHed&!(!&f6k+ zi^&`Q;O_a4|6YHXgXsHz)E_46e4o2{6h0d7({d1xe2nC)-4ePju9Wt8rh+5idiRXj zhq;8#!u$K~!<-D)19|&HA?(APFZ(dbr=ZvK%afaX_2E9}LF4(4wE*ec{EwQ0qQh?N z<9~FROiuKC>u5oE#{cNQ(I4`qp9-IoVDR7K5BU&u55oS3{2|l(Raj>@qN!&0+u{+Y zW;gDL;y@NK-f(93rp)Xn{vxxx{f=8)!uG}Ml!M}pq>F>%LXTq~6o11k&LcJu{3(4# zxAGdCC3ZFK#iCmv6)o1pi?ZkUdSt%laIo+^VNyL%1WYRVqS&h{H_B9Gx@jtq_g?dT zJsh&ne0N(o`wAv+vLda|O8a!>NJgmmJTBO9`D0em8JF$RDBSP{id!V{U|mnVE8Lc~ z;g1eKXrDe#IV-hFKUi2Rb&&IcBAw1jBz0Mh@7`FgUxO!9XK91bifWBvK;+%pg zA!=_hV{hnV?@XU`$nv*+51o1+K8pVZ{QF35 zoO%`r{D&U53t5j?_nfClHdA!UB5}GsCV6>U@2_QEWb_8ay*n@d3HRHD&ZIatyM}LZ zzpeWx{BMsIojP-#@E`i$-i@k&o*?vsZ?3L|vVF|YUb1ih+oc)3ofW!_Q|vrazQzBR z@L7BL--<7aa+0gyM_(to{YlxwHTBwa|8@V{Rk9!-;`rYl3`qNS{?vW9|Lr|wfg;lW zx9e!QJNN!2|J#G9I_-b^J$?gnPygFWK=0AXU;5Sd3}&T&+5dJ8m1HCFzr_D`3NvjV z{hS4(@}=-U&zClj>C2ZQi$to5(^`x=;l9F`zFS_O`VZyx zY^RcJdA--k0GAK$?T=f`Qlyt3W&Cl)g|gQl*Wyj_>3#U)-ojkT^hf#Q{)F6F{ zh28$*k1H3Rr2CJupZ3SSoNU>%L~9&JO4hC(Zs=m!`6XmX*oz$NhqqeYZbu9Xagjssr^he*f#A^8cuR%2e@>%JxsW%5j*&g!P^N zDQE5JSM{IwPm%bJ|G)E3`Fc-3pMT(=(nkJ$`KLUs;PkGr`}(KE`TCFiQ*LFAp5b5O zpR$S}-j{z$z3jUGv;HY^VeWsWe@dJ97W_B(r}Q~r`+tpp?8m~Lzso=NZ{m2gZ~xdo z|5y0OKCWV}{v-d`FN(6(z)C)5{2=k?=<6T5jscW)^Gn%f(&w9}BqrYdw9skkc)cw!< zkAA!Vm9flmzB1mhUKy#B`zyuw%4Zgc`&ImkTosrsMVIK4znc&rhTqa&?C&~W^>w?F zUG6%eY6MJKkXwR^4iS{D#Ef+^DkeFQ0 z`iK|q(8ars{p7TpRiJW7VEK0JIo21@l=kA_EEg;ZfHN*=yjx@J@K7am>w(37FYpfuRC4!s7X0Nq;uBNWuK-Sz!+kkV^|l{>tvW7Z)9!jV zPwWOe+1&2pmpZdD9pzk?gC}g2uL+mwD!gA)e`ZF;XR9Ca5H89M8k>?gJNmZkkHvod zje2x99!1BIonQE5?Z?u~1VOlD?M}O7?cSG5)IjsqQ$Qv9?c+8(>`0#}-<{IwY0PHLvI5~&@p zkQVDNFhYTm)|Vl_s>SwVXi|zPeof4d`=6kcOOMuSW^R&DFCS@*;-BKUbNqH1-3u9$ z_T|pegtPZP+&O-HiX>0MokJDQcIQyY#GeC9+AmRujPJGjR=GSI7xsPx{0A_G) z-%CE#D7hz1eU?3Us6&86(jUcjCG(Lnl8s-yf2*wyTAqUa6(CIS9(>>IPP;5T?sItxurXQ?5JS@Un!;iockGS~1? z{Ij?Re#8f7l1|zjFlD0Rr+5YsoXNVv`KA06WlsBf#|z|xG%3<3JQ3GY6Tfgpyo>J~ zrMfK-XGAI6JK5mZ?nGnW9rk-R^{&UC(7u}bWnVgtkUZ&})2)ZZM(xw7l92ZWnE1uRQ$^Y0BFH$I8c#U<8O&>q5 zg_L&vxONJl@ATucn}j|bZ$L#iuAAL->57;l6koRfJQzScHWz~vw2HA7cWEl?> zm^r#3QGA=4WYP+&rqMUjLu7$H8^GyV+YhbNzCuc7d1op6PUB+b*CtMFE7$=Q>?pDA zwr(6i=;Z!9#F6VzK#0;a4;MC(ENMFreryU|*OCvW6!FQ>z-Gk5>uSW5+jSWX5R~rv z=WK5E@%0?@J7)MX@6p!3(iYVrmtQ-5lHR#P`W$8PCw5U*NI?gZWv!w3REnqLe+^fA z{Z(tC+YX&^$UNbFnf0fqg`*(x2?u$X+_9OZ=;wz(_2nGm&SR%dLR$4X&xoG~ku*5S zdFYHEDKJ%Q(&cq;*UYa0@D~6CSSK0f+FUIZug+@<;5*$CTO2-6tyi?U1AtD*omNj% z0rz)*DPczOd_>7@QB}I&*T9W-fOb!7H|YMeK2d&_Tq%Bi3FAX8;Ktfu_r;2-P3m^yp?uFq+^xx0XDj25?v6 z#-PzoZz?(b`bC9AAF1p_ZV+8*X8>UzUF!*X-ImKc=0} ztR!Hef^T|!M4*qhF&>G$P$f{2L9K=ks81`ne=gwtaOxV)P6Xq5F|z>W`Xtj&rnaZ*NGJ2xjZ|H_cp8FAf19yL>kFg`VKF^p8iypxnmB()6=`$|;rsDE46*W%3Xt)44NF8^fW{c4Acr6T5Shg9NXFPPG9xRyFF=I3x8FPKmogJc^l8Vhs?$#D)b9Et1$2%~ws1#Hsn4^-SP@99s|XZAyN%aD zDunG15SlKDADwCe&G{=G3UFS$Q&Ei$Rg-6z|q<1&i#Iep>4$wu~UC#lu!yjV+ zc+8Op2kZ}045Gs?2b^*$Ta8I`oO$E(On%m9Om6P*-y>htZBa5l+!WiB7r7d-3#Co! z)|EFjnpMriK*d)X`OvUXs5blXj=cqD>cEu|=sZxGnFc_c8Jpq~1wdY`PI7a?7UJ3m ztaSY0O!)$*eA`3m2B-t ztMzO{%PtgC;+8e^Y-K5`J=kJ2h8atho5jt!EL$aa?9u@;Kr)HtHUcens`}7RYpejC zS;KLUW)H*eF&b~Axbn?yTwzR_r(MvB1AOKn0OuxlTBA`QaPhBqUHst+kLuhdR3xS# ze`k1@S<|V`!^22}iRdQib`R8;RARXb}iHf4R&jH{iIlal?X^CL?{1?uab`eZ3gj1 zx`fWH3eGoH_v89L2)E zK-{Dq-x)BcKe|b~f=e+j@i0RXd0&$M*yYj0h$fAMR%f!ky}v3pEb(jgJY1ehpUb~7 z*2ORI7&SY+2`&C21HcrA1ixG%5}4mhrJ^*@aj9OY^+2VkZ<5kQJxgwWL7O`cbuaR$ z1jmL4Zq#Dm2OHYl0L0!JAbw!|HgEV7l-@_-l})S`su`o#IKxo^PHo{hl+)8>)Zt$x zxZabRXj%(qgL%SX7706A{~%*yOnyz;8BO$~C)RLLe9X!CeomUV2SsQx7!uU?n!tt# zWiE6mI%D)Xu{cj2YI*A7M=>tyT3V-_*m+xjR%+;XdNk=#XBg_5I~0uzG#ERw3+}=3 zUj|f>`p=mN*`yxi10CaUj(q?VlJXA2QV_32?}u}{trMm7->}VoTPq!Y1BvQh-%ykm zISw5#%l-~=aLeCogupV|p`OxKSppl+(h_J4ptGNl+1dDkGuCBGaiL}W9uT&xMLT6m zx94(XwJK#qkh_sb15y8@gh{J%2P$MNwmum|RruMn0N7@|D=%=p6+A&YjPFqh(`rW& z4+)r)yCteP3S2+a-=Y`pXZIKVm>H6u9%H5cZ=D`cSAM0FLsYtx637nNN1b*_@lj60 zktQMvT~ih3M@2dsAH%uK=}i)G^ANt8)1UNLe#5=zL-X{w-^1mw{++%`+q+zgn=DDp znpJUqmt3hHyOUR=$DBT|QXF}s+dSGMiN=&@OOLe1mWK-@tmlsz6?6I=kN;Vi!aW|; zqFsi6juM$Z!(R_IK51^qMjUPYqDudq$^%A?J?S>)}@=wi^ovwG!1(?3U#ewL?4KN{lmbo-2Jc5>q*2DJ($J~&$SB(-!| zUm{z~NjtH{(SgYb=QfHH6QPx?gCPW!X$hI+E47+6G3v|JwMW|FYmJWz=3SbjYCkuG z#QsgS0XmFa0{~c_y2aSa=O7S$6Gp)#vi?}cl9N%Pp0lBFAwvSn!7c0?m^Ch5P5*1E z@1W;`P9rYD!ss+=<{34w*>52i6cLk2N<+MI)M)D}fg!={((+SA&}aU9PF2eO5i|q+ zG%F1kDbxhu*yZ$LY`pY%j&l>^pDQF8AwkWX3;-=;xCAfg{ks&(I~gX}&Z8k?db5&T z6ySU0*&5>=8_rHAms?N5I+ehcnb~v|;?FnmnpIp94tBTXV9LFKq?-7(o*H8V^$v(m z@66R2+W@UMg@?i-=6RvV*g6uxnc$Eqkz*wQn|@Kjf!jjfFSXbJ_=5EW-&jHPe(tdD zB}p#*^Ao4^6Z(w0LrYhSRDDMoinsHo8}0EMM_30k#&T^C_u=ZsLhBNFHCl;&E2LQo z;?>wqnqz$qTF5xZ@IPrK;Qr>MCz1b!ty-f85|j>_Ied$Ddz4_^0m^HP?I5x%WKM6! zPd&QZtHq`v=ma;jUgn3(cl_~ltNcx@-gno;uj2TZgwXU!rxsh6QW5M(i>-mNs%t4E ziZ0CQD{HiTV*J@6dDI>c>#=?#DKcP-Y!40RATDiZNS~FFvQBV@wToeWmcALv7tN2} zUugxiIcP*>jW-6^%2(8PYhF^_nMt| z(6O(owxITiV)1A2VU8`0ZbQp@pWkBAn_Vxna%{PbT!f!IA86qiJhusRBDA^2*c@az zqSv22BK&pMc~YN2%%6l+qd6>v$*#@%J;l)o364|>MgnvE+ACK#lo6a1^d$UrrMDS15k%jAc2|@7ayd~6MRsixVWT8eQv*K*C8Z2NQ<#^4nV)LT2r{6R z@L%bf4g*sS7s)BhP1L?6w9#2tX~%ZP10$ODHzUo^g!BZ_O>@;(^p=F^EzR^BfWzA2 z((NzTBy}}D?ldFwxZUg}Gtwzeod=1) zk-exBRev&US9Csm6mJvx73*Lj?x3$=8h6KW^iQkMxYp!o-YLqv;0a9_N zzTVW|E>$*BcOu6H)bx9>bNKIJmQ-#>UVElLt9w=w=)su2)ANpQyk$(EW6KdwWpHo2 z7@n^v5H2S~*rg%y_oBfnlHB=+8WZ)umTp3OPL=&D8cu8!SgX%aJ5WA^y>*tFoH9A! zD%LA-V#N!E|FLotx$mp=--9BA2vwzsR7|VvllUV8t8nu&W?zaap#Xznt;LSaO^SC- zTBSg@DSqw9L~ZuV@Xg5n04EAWH}mT+yhm>@mDY-w(`KJ0s^r*m`v{(DoMC94E~kad z3bPe?6>Dc0rJy!TmP1O=#0D|fkY5BzZbxcKbCMT=lo)`S?;?S~xrCq;sUs)019TKo zBOQ<=Vng(h1NGB7kuQw(s-W?W+lxEcKlC9|5E9(@@To{SYaShCss6arzEw1ix;HXz zh=QAFmP-b(eu*Il>qidQ{g~~-NP~L)*frv7Z zEn6W`6nRjohns1%uB zMFsXVv=&8y(`UUT#3HFhk(@P zxDIKkJL**1gt%yeNMQRGXm0PN)4g;NDR20jGh)szg1W&vQf3^p>!eoguAf78a1uDP zNI!q`Z37|&PeR9UBhJz^Jfxn=m`vFFFG|%_YE zNqe|O^CujE=B_gB%g8Qy?5R{CY|aiTanUK2(1d%cVCg@fV_zoipFW4!gEh~>5Yx)N zeFW)>sJA)F*2NG7ave+}_dB%40(1#FBI;nah__pmAo{YUZ!@_qtKOdL6-JE~YF`1eA_Md-Eez5Mz`Hb} z0&DkHC80V9cYGD=`WE{Vfc4=?XF~?uBYk^$4jP9uI`*-oWnU-Kdp}wH_@RN?9}wUE z&7iSFPwdS1dDqW8Qtudp?#XoN7*j6K%mM2(e+tE~FR!Wns3v~-Z*$I%ho2xY>5%YM zK6C$9E66UpA?M~*zN4?SYq+WnHjy_94- zydSDu&!tJfWvN6Q>c!#X#15Ps=GqCsX2|=27X6`&C35Wv-llAKi{ykVExa&tbz_W( z``FoJ%Cy{(H-2MWIZ#=y@(q{YfyN*2$-V>0|q|C{c!Q~ zhs)pM>nUqJzHT>nmoFhZ9EJ>E1-7n^t{oomICuH6tHUjEzux4*22@W581CWEk(tWF zoo4=n>L-fD#bC$&iNdiXkH}~6G5POqxvY2w%D{J5{$(zhVt2XX5YtSEF}iU(;{kj6wW-GZOCWdphWG`fSIQ*fxDf{V56gL5_3aF z-jc}0@GJbbiY-!7Wdo!-Hc^tJ1%JkBT?&wkAJ$x`;``L6rhGx z6TjqOBI>8h)_C87qE&IV4IR+Nie0HEIiNWhUC1WoS5q(Wn}cLmR!nV4Rr|Y$_qt|@ z(&YuYYCo0j+SZV#C*)}%Xb5|%L5%ky@26AVm3b_X{Dv=YC*Y<$*SKb8Ve$ahuSrjM zpm{Evs$XzpaCoEfBM6v=scXf0w^%d!^d9H!(RPew+-}g#c1VK0C3fJ9xH&u##(Gq% zkPudm)ufZ?tXr4w2%pa7zC!iBfU$K;nJksai&-bS^{&-(qCF~+|6xQ<6(-G`{e6KimyBMpR4L0eNsYoIXomf z`o1N!L2HztK(u24Z>h3*pLufZP4vqjnEW`m^{)X-?YM9{OSCZ2~k4AD1HPv6&~ zcsZr@AyYgIKpu`BmGFpGW9&|+E>+L!DIW&mJT;ZcV08V?^W%Btjj4#TYnc;ZMHZI+ zPd#wDul&Y^40dNm4(gM2bwgo}LXc*xVK&)o`IDAE$n|aL=nj^`3(-C#a!XF~C0F07 zY6(Kl^dv;+F)BVa*_bt<-22kvqRZ>x^#|a!H0n3U?F`1J?9{ba78`HOuK-?jE0JhB z3BKera-*pMGp5CV^i9zF_0$Qvc~K7=NEcLMqwQq+@n^M=ePZPo#_Gb2E7t|%<9e7t z8_$sq)u4CjR6-q%+e`-3c3}Y zmB}QH!R=>EkG|51Ur^>VmaJUoD{SpkR_H=nxw>k_%I-|bK3THwcdXC`MRFADg0xwZ zZe--Gdsr_DEeX@UAH;~2VxuhG@eIOaB4L**M_`RZ?VWl9tJe~|x>90f*8H8^y$JIQ z)Ap}@+RH5e6Duv*q&`UD*l#Q)rkuWVJ?TDNhF99g7_7D1Jj(VQU4?OL++nOx5Q&is z0=0m*PKGwMS3-A}Cc5)|M*rwnLn=Fsep*Qce%b{QNl+%R3jeNJte||YYcDSbh9Ez# zR{)V!&5H1IW8<;h*IC3G{pX!Vueh{gFED9&f_-zGN1J;f1JU+dm!2_2V)thg>Wt`(@{|lGv;}a_|hvnJ0f- z2yAWT8@KUl<~U8{{rc?pzVMliNh$1Yo1)EUfxtcD&g;zw1>)zAaDbvskN=ppoI5Vo ze8~byv9y78Bzp3$Z;?9~&~mLAG^*kJ@|^ligZ8TLcBg`LeLvf0eJ5t>Yp5+x&19Xw z*cu}_E87Bz9eLNUQ5Bvq%B?IKhET1$>ZiYzZJwMA|ChnMEB`=AQaQ5P1O8`Vbzzq< zUK+$-D38mR(`a;|;a?UoKITT#3Bch5OgW@3?r8^$-+Rt27d4eADy0+`+$;Qu*OZTF zT5_pqx#RW};8xL*RV&<`g+PaI=m@$33VlN>Qe|x)$%;3;ANGF;`vq$-P3p)wmJG_w z=z#8(kM8<=q>7Hk;T9p1xPJ#uU4&S)e#iVWI;`0;&0d7Laib?&ZY|d7qUOv2mU9_x z7DwHuevZE(Cx_6-x$xE+BQV>nu{>(bWYHeab0DuwKFt@Zr%$h)5imC${<5ypQ(CBAQomdctQDgmc0}@62<)&mm-ZF0>x-zzhcqiJ#;%t{ys^ODx$n zg~X-#6*ZL`tv|Ayfz+2so`Ilmzd#535JDqD^XcYi>&I0selE9)PbbJY(FXmyll!~! zYz{4>PE}FJvx$nhy-igllrQ_sRJ2+ypskl0D4u+%&wRhwIT7oSxQxa!aF41WwOErW zB0KUmJi$e}J1n`@zk;QYVc_`AZji?Y6?Lz+UX#U_aF%K{27NDcW?H3&ZU4{%bN=>c zZnyLOA3X=S`O?n=-1q-|I{5qV#Y39Er-mK!fm7cA_qm-pE93jA`+V1ZE^(hPxzDHE z=fm#vZufbc`}~Rfyv%)$bDw9r&tu)^A?|a4``rGXTfh5!*L^N=pD(%3r`+em?(=T< zd7JzEiTk|FeU5XVXS&a0-RB|hbAbEYzDDZr#m`kPz5i>^bosQoOv(9%&#qJKNlrmn zC*LG{&neH0!2$E!g8GpsL+3|~nJ&0W=p?F55%;!zrk!S2ko*XcJC*th_l;lRIU`Qg} zuC;#c2GIpU7B2yYD+%AntA91^t6fGHz0*au;z#yqGU~~Y|%mRlX%&2r|>Wm zwkF+@z6?qC<-ofqc&b|Jw@0{rQeybu-^yJC$vnAEy|Allh04rz=;I6Oy(dHpt5($C z>IswS+rHI($G1z>x5#;@iZlKwY_27IR=^|xYKjfaTZg(W9_+N(>$KQf%mo7TK18j^xXRZ-=3V#T-aPT6?F=8QT{Yy7Yf)h8Yr>ai|`M=Gdj&GqY$`^9`p zl|6^v4o=3Op>SedD>ZN!DrNr>Pbz(DJN2MJ`H{k7wYe9cCY2sW-e9WTI)Qpa-ftqP zuEnX-X~EvB(X}=`3Cb6aG-|Zxa3sn_WD^gt~K9SD5T--IJZbw04IVd^o zH}X_Xvk#sKtgltvHs9f7@5aXVMvWFk}j4s%tcDe<(H(9sK|qpvm|69Bs>Gh-RiK z=cB=7h?hOW(ncoufPV0n+Vxc{#+jiFJ(eFk&^WVb13Qi=cW3a%=19Y?7NA9nt5%Gz zS70CGZ^N!`{zf!aJLj9P)MEHnz$|uFYxgG_cI7}EkwP^(oaUNBdIcP#VONEdPPJV5 z7`d!rSG|BKR2SutG1#!HSrP`m#HNNo8xcOeVb`OQlt=zyE|DEUFZ{+@-LUA(!A@VS zWgQTe4JE$Bo{c+LW%v9Z!s}sS4p#Pau+mPJ>iS*hMc9-PVmy<5MF#397j`S9f%?fw z3PaX3phi1W_Iyg+eV%93d6C21j1M^(-*+=!K*nV0sEZ>d3asjSs%$gJvQixE51GTR zqd*m|11D(jpdYhxxzcIC`4?dzX=ByWD41>B5;f9DDdY|;1mEDEy zMD35P!x&ij0UDtqXSsq@kPUyR2pFHH%8sJPTq@s_3SSJHO!w+D@X30Pj#azueWV?9 zodUlJpQt#Io_aG-yHa=7CK4_^VSR!HF!PP~*}PY6sh{aNPixd+R8I3Z;zDkp%x2gp@;V?|_zGYFo@3gEZw)@&oZ-l zRBLnJ@*CakOGpm&q0G-uyAXD$7}Ly=>~C)>N%JN)d&_?7w8naD(Qb#=%NB6i%WkSk zs{KbeIgHmi%4HU{TPLaED_%G+oh+L`*88Q z()bj?#mBO-(2<#~r_*+t_qH=+_T?ZsWadwx zv|8jIA<$T8P&K#@n5FHy$VNg`@WK8-s2=>$NMS@pDxYFxsjm8&xjEq>E+Kbms+Qll zgmLFW8rt7!Oth^Z!sw2J+?;=Oa{kWAnS7JV-G%oU*Lg5j@!~h+>u1Y$r*K0*mG^|azsI}%0J$W( zw>woo6&#JCefID9fVwwygbXjHMNt|8TH~2;TL=phQHsTJyawiob{UGFss>NLJ8$Ty z6ST(9#p0hL{_a{U1U#NdfrlMj*?$3{4{hCsfmpW1Uboiad{%{BtAhg#+N@c8)wKl| zhdliCg>rrIFrLFi z1T7;O!pJc$S-*k2#d<-uXUQgG|H}lUwOB?gp@e;C=txJyu3BLw1O#(#r1fh0mr^G} zwcXYeq)<)B_}FTdpOVcPr;xD@z@W>zDP2koD5vr=K7RG-1wpfDsCD|Aa3yL@$+p=^ zHD;cp<%Vc5#;M^nGbF=HLyvSDy1IoDZ&D&Tj03Koa9S_9i$UnLv(Oj&=& z5iG!gn1J^uL#L;6FC(`jOm`jcAfQ1CKu)RT>jp=Z7dEVw`P8tDzXjnzTxM1E`PLO& z?YuEHMAzi2KjcK%G2ZOZC`*+>7E3CrGu2oS%rTKrK_q=CrO|`JQ|Bru{X`lR_^PKnoKJW8h z&pEQZauS(*=>b~Xjk}~N9CyuD__nF1Uiv4&n+xAT*kTilb+YtG(PN8}#Wj;JeTPA% zx$}#IbRl1&@3&P&I*Ue=geyowTH0)+ZCTPQjI=gOI%uS)XGt$N(xNQsMMip%uY#px z>oL+FWl2{W>Fz9P(n!CUCB557H)lzoGSUrM(#MQ6lqKC|q!&#qZJ1X2t}N+yO$c+c zr2CBY5O1tb=lDlP`eK%JzmYzhB|TuI4^Jz-FH3sRxZRi~b(wZ^WtOzqNc~yTV~w;k zOImHDOS7a`80p+B=>tYOD@$tZ;ETWG)OWfZI*fJnv0-RSPb^~)A$Fkw<@}g^`^Crb z^imUUc1k1Wd1G0jkj+qM(LS{^X0NHgblNu#WuC~ylm0ba>}n7@>iitJbNyF?G7sd} zew&@%cW=s0x7=gUkoqyakx{cM`l9VF`WNzPf=~IEa!6gkG(fu^otm1w&<s# zuL1mX_pR6RvdVeK1=;DJ%(-s3(7wOd$ak3QNk?wbiT`gMn`5y^tlsJkB$83fHxi6m zL*8I0;IFb;BMHkF@dvDO_tNoFWgL1U$&lX)b1xR~`Yr!xJmF0w<5g(~-tgJxrl)%q zu7-p0L?C8G!d7A=7`LLa$Z*U%I*Mp8;PWQq0V|lWxG@@x$AjTv9d7klEQqJTa9wRq z!0|xB8YJqq(MT|yi2v7vZSwT?kWVL9g8`j@RIE*bA#XC2@I=Bx!Qo^q(Am@5*BEc@ zZtt@Ekw9FR#8@P@)>;?zlEFY`{zk|_m1T8@0$y?%4+OLWe_%9X&5cA8!AN*;A`yts zEmfY#=%_dBw}N3SFdpzF<(_IBj3;7VU&34Yq&U6rt2TCs2gX)e& ze1Uj864S{X@rLkOrIsh-maa|J?WLF}tmVOk>LTqiBW{r#OUXu}Rz*`sh! zuXVoGh51%RxnKUo=UYu36i45x-g=`YYT4%xO$DK5s1sTZ4G4N;VQRPDY6*GcBUU0f z8t_|@WTI4cP#&=fi?k*JKFPS9ic}4(3a<@E#=@2)-x}2l=`U61Z#^{i3FueQaoY|} z{R1SjRN76&^`NE8Ddkc%-JLdXXlQjLMtHe*SBnBp?@`}6vQHgjFzk&@EDuEn$wnAW z7R6o_9*hNjYpo9QAXOd?oBYy*VhLQNvYgY%oI11PSKHs*+uqv0s-W`(D3WslR`OV#Sep3e5p)_UvWNHS(cC9U3QG~kWJ zrPM~e>jIX}zjdi}3YS}wAn8IZk2fsg8k;ZSV~$eMr1EOVD|ywyEUyQnT}vDCRCpeV%jXT5WLQ^5 z!t`=+E1n33LZ)YCc6Ypr-RL@=T-seVoesv~rd+f7`@xWKBdUAVUT z+{JIu)1t*|s~0bPgPxWyU0YpO`^G#;e%^3QH4Dkp!Z%nDHH+PEGwNJF)%t z>sF-Aj&vU?`S_u!Z$XtT0j`5S$QtJxp~vx)kDn%}F`1y-l@SK!jU0~D)sDN}b@anB z=Iz65NUu;ww9~j;SL2@k#`qC^)E>ddx;nYxjA^uHi_M~0_XK2UXL;k+VA2@a47mOqN3x+{ zcx^xh;?cU=c&%?_C>d7th$2;kl(+O!ijhZBOHAt0!yTg!^z>-VM1~nKJqWV~I^`BI z#@1?2o3)Z~o$Kb_?z-CE+REO<1X@e(%rwKf-`VD=6!-3hwbR^PPU2dUVQYD+<97Tt zn$%`_s`RN!4`VoI+CXz){=|$V5F7IP0@PHy!`pMKRO9Ikpn%a>U??~)T}UOfAlg%a zHm9cmWY3gJN=MAxpxjrgDt*-+%NrX`jt0Uq$+G(~t2QN*(vd#DI@M|&S9H~55o?_{ zlnlh{jh&9$1?{)nxLi~)16ezW)pugoHd%U(wU!Q;&O~^EPbHL|lNp~L#9FOQ%P|eH zb%9u^g74L=)sqa%;Ge!E5F2H*8M6E+AUbdQc!r7rQF@u&IpyG_o6Irb@Q%`UWAOzv z-PDXyY>L;;5#?=%phs|~BvT>Oq(jII08d@?%QP;Tw+%%?p~x7itS_C>)S(Bhmif8I z-3uLIO@?rh2t8e$eLY<(ZLxd2#w|j7Qk3#uQzJsBZE7(tYencxt~|Yn5iYjF?C5Ch zY)XZ>B-3T%s=h99xm1MRJzcHKSGBlJn6)}~Beaw19EQpawDb&jwuBg}=4 zQ0LvaT;vFK-i>gvBh-mE!X=JSC*IS&oY{d9E%E3~wzOu5nncvw*0kDVi{0Z(ni58HTPheYsYPywm^?!Y&+;Ei&N8#*uoYw<|GKrvT=(J?JfiV8D zM~;Lj!Okt0nZG^nlwq@21Aky$(1(Aq&*ak?R+cIm`_x-N?YQLxI}#Yj;zWs9?6fimd-#rg7#7Guw7)Hwz}Gju&SgdVudhTSQkB@l<})%HYiTh0qR8u86%|b z5o)O&o`@5HFoIQaJV^zGgLb!KT}sgL%S)9dvs;FzAx0)ts7NiD#j>JZA`z6;0vOa(pflN z*#avtTxB`^D7MUWO~^AkTpdEv^04egF)-oKR@NSw)7?yvq%jJJTD2;?p*Y$?t1**# zD%h%Qwwh&hug4s6J;>NZPcMy<%L0SQ85;)TbVc?Qjj5KFdL7sFh7r9OA#NL4Pn7=A zmgqUHgcj2Qi-RVXxy%}yC5vn_5Rzp!x#yqep16^FL92HpGN#k2C(t5`TbKHEhvM`V zms^+W=BkTk^su|)r_V}tPF>;9gjF$`q*1=+16>XWfpz=!Tpg zX-P!Ul&VZ~vsd?lb{F28?!zy&``)#BfJ|oeEpsJdj#-zY;4(kejY>>_9&O{)>-Wc) zbT7cR__)bfJ4WxJm5_dIsayYaxx}nXsS>d#nPCxxF?fF_BtlFDh3Ybrm@Yo6W^vup zg%X!#b+X#WFoeWphaMoM6ZUkR^{Rk%w$|ITt+Sn_6>am+hrRbWE&NM*j1*Ew1)_LlJxBiF!u zZ6?-Om!{ihrD?D}r{`IqJ?Vy78D|ia(TXeASk0c5E9z_N-TYfxU#FecF6?N#((>sU zJQYDXrN+nh>hRg+@v~{D!O>_aAOk>b!{Mvyq%6K`YN{K$%AoK^L+{@`HT61fKMQ>w z{v1gBb@2SkU-IvIBJE}gy!hFd5$|uFPTxOLSi{8kyovu#_&LxWCXDO8J2mygoG_MU zT<FxL$5Xts1%FQ)zl-)vO}*<~7hG_GbgA|#LQ9&>-r>nBC@Lu^nN?O&c8XPI zxf`s8f%Ta#TzUBgg+;|B4w@4$}$lGFLT*Z)&_l6oV7t8tLYJ| zr@hxxd6BFR$r4joCK>EUL`XuV*Y=5Gh~~4{&RP^JjWG!#61H1_UhWl7cwz9sAVzj& zQsLU`?pS0NC9RP}A{wu+t{!GxGC5d9=UVM!&1xi8Ewk!%botEss@ct9rcqs6yF}uZ z30t}aIJuOZEnvDUqkd*mGKA4%kYIwu+BtGs6Lygqk3E2xF1Yr_?!ya;^atL{2uSi` z`Yzn*f;c=uP6$U#P_quoj4LzKV{{-p4`bAeOmfYb&Z;mfA{j(A%;H)T!z(d&+CWip zG81towpO#%6bmwyiW5fM7YhzjKeDG(f0R`)7F-*wZWq%R3hBC@$Na`08DoSe2*p)#)zqL zsxe^FrD?s@T@oQNhUp8)xI}ABmDS;$pr0LMi)=(ss7Wq8I*lh5WQR?1d?D)4BePJe zUR`~RYf4>RRFW?n^!(J-GhHqb zE3M@LQHcezcsn9Gfeo}BiVe~F6cb%S?Jw2QW&gQ+K8C9=wXq~a5R8S{y2K)~?2I|X zgosYaCIC&CsOPAbBx;me!DHYV4NcS&1$z(@L*-Ha$yfzMDeUb=ozBa#yMwICNt9JY z+8LoKnngsjBG+WD>(L6TTdx#m$`&nQwv{DVoFl-OUMfsNV}w*8K!Q!vPLDU+N)Qq;z^$rF-3X2tB{E(Ln3YeQ@dd8O{pP>wrzT8Uhe8i z6J~{tf5O*0NWFHa zOcSff(FY~5qjCo<=Y<)CgkXhY?xnmdZD!plHM#OBd z44QRp8MnJAQjo$}OcfKYeKGi_l}xKB(ziho*iG{sB4$UaqU4tMjP)Hrki8TACVjg#gny z#Km?x7f4$kvbT=88D;kvqfD!I*H*i0s@-(&IL=eIkDaI*kN@QN9x57ce(3DHhTE@O ze8Q4De)*k!yJi;12vw0T9{@X4;td-7WM6H+>qMnXw`ROGXZi_7XK=eB} z*>yte@x}Fz*Gj6M+}}Eb(0_g1z_aHvqP@tM;>i#{`*Hwhxk7R zN38&N9fbn;&L}R+QGw#S-h>Lgk7`P(KuNX={Kqa7tGH_Nt`Ca>T(DbIU`a`d5+%61 zZ3)Gz)hxe2ZCde_pB1?_?b+9Q?M=Tuw4tT`*2O5nZ7mxxPiPu?S;?f%*yHm|UK{Z|y`eJG6g4J(X2 zOIoFR)pFS7s!z44X4R=ysgBh3N+eCtMXFtSK&85I(aobC9<@jw_{h4h;ksS5s(!FX z`x34LnP9o9;x!T>6<77jQWf|fN9I;b)fzP)N&3E0m#Bc^BnHw!l~hCglj~}H2UJ)M ztArXM#8$2nxM@cg#a#jyEy%oZN!$mx*Tdf^A;q-ICa%`0pz?w3NIg)PI}%suO@(Nu zp^H!@g)50W%D;f}>zL!DBSiR0xvOdxRZ(Cg#O|jg{KzFnA9)*AqfkuMsoIP?Z9#ui ze`_ECwkCsq{oypO`K&+R$;o;P+4sSTg4wr08=H6nA>`(d< znI0Huv;-I?!~&@RvaY$`rI(!S&Cishc3IXwOy=iooIf*oa??$(&RTcC-{ehrZT~H? zK;STOw`ASpjhajnG1=46EKd#%F_KrFj{cPqpEnWcZwjpIWM;ZrMEL4wEW_l}xiWYA z$u8Z0Vj|^?8!X=Ur#AkM!o^C?M)u3WrXvR;PFC|SE_5KSwMsO@q7|*=pG9pa(KsJE z5!AXDM+aKanjqRBT4QlX^nREt(d{^QuGAq!@N3aV+X>6UWm=Oh+=v#71`ZLHXtzap zL41quO&7jb>t6)7(ptp*D1S$ZJEkVM8q(Z?I$Pw#)5jd6UCilow8%LxGT2G(G@4%qHSU~WBALotCo5rC0R{R&`Zu@q)FoG zq*O<-`XZ5DAxsR?4$|eFPUV>PB{fuypL8mfTAjMnLb%ehruVfPUsCHWIv>68(z}TJ zF4FK`P+IErezPrqh>)hY{L%w?DeuEmA~r(q^b<#r90W*(-HRP<*miHyuj^P^KtJV_ z+5h!Z4(a|cx0Gx>Xu_A&fRsX}U!FX+&zgJ8frdeCc&!L)9z!hnq~@A(@LVq^$a;@H zZ|AHu$w`+XyFW3rIVN5v)YLIGOP_&Do%dV3Fy$nDqTQS-o~w#CevHQzu?4mX%3d=}J#GBY#@)CWKGHgnvnXKSP18x4i( zK%Qu}`PRt;X(^E0HW*>b9z_ zg>W@;CSal4dY4tv+tg9ZUItK8T~T|*()sp@fR(%z>EuUHDPfL3b!CsrVg`xr8@^V9d4j&(geC1Qgz`(ClX zwjGyor}U>1v-Boj&>nsIj}S}R(n_zK9hX=`kxZXH$DT}=uXdf^!_zgSQ#$%*V(O)C zd^*i>-ABY3rB-r1qQ|S_lyfEZC1co1%2wtCJ@l5n*x)8|-G#)B%S!&r{J=D>qu77J zF+W*mQO;I;yCmhZnmNhTEX)dd0mt9tM8Qb-BiW9zU z)~Sy6&UR1R%J$9`{TzgEZ(ON-#FD`Jved8q30ZlH2NG&1l;p{W*my?R5-kU%Wx>Y$ zSdf>aQmmP$PY;x{R+X^Ilh&X&DUKxp<#EM-d!TNgF~F6qJn7w~bcm^4r*_$ovCooY zM*GF2_8VK;Z?BA1v3_bV8p=w0%5J3%>lmkeC2g|w6;C7w^=45-b|dBa3ON-ZcjW{f z7AYA{u+4Xf=m80z7P@_o?OC2#Ll%;vym08*}2DP*}io9vI1eYREpPA!Ul` z`7`chk{kv=UH6+qQ@fxa zLBE4UX7ZO_LDh$&sY0LFMX5SY?_|`mQ`dq^itXjH*~Lpv*!)9TFq7r7%|D!XU$L59 ztV%ZTdFc1*z>;FMe%{uf@7=Ke>XuE9y?)W0$2P3DLz%aw5O>Y_vpn6Ns!yC*JZIjf zyEmOV=d;%q78XDM%oB%hFFH7tc5VB~{G03lq&ll#lI%A$^}W2d!JKN*tKK4|(zAMqmw!8S%#T%O60 zeN~#Kd4i8cZNIcU`KQ3)q9c41>bN+1X1=9Xxi{5jiC^aJQBQq;xR5GBB_9B&ug$DD_iiXn5GTDWZB+?ZMM!m*Uq3*ILH#q8hRcasCj;fzEs18Wu$A z?Q=Pmquyw}RK__BZrfTUmv0>3Bo0Gp7bu|(QMN=n`MTdL`XztV9uYIUfl5HuJ(Q-53TB@d|zF3r|&4p=R zd+J~$;gs5XWVz({+jq4 zz7+S(y`IMI<|eCw(jonoobTb>C7Zvp8yE1cMVBno8e|fu9RqrlW!#U)fzukA!UF*DHq98uP|w9OMhiejyV+Rv^W+rk?5KOfcJYK_*Sw z#HLN>pft9y3@7w2;~=Y?op*3mYvzu<>|Y) zyV;!46I)<)uUfvc-DAx?r@FemsnZ$`C#xc{;p*z9z9wyKJM7cZ9XP#+V5+N|JLg(+ z<;)OAhT=Rw=nIUoo~k`jD%DVB+SF9}6aKjuEK3V6uq<!?$bM<+^x%T4*=g;Nb zq4~{~svJ&?h^%~kF8=VzzNucLwdAbd`E&KkfSgX8dqKH>S+#Rl;;6QxJS;lS5oSbI z`{p96c{6b>oF=XsNA{Ppw{ZFxooq@?UZC~Q`nt+`e}YlVG<4_d`y~cn{=NOag{2L) zJne9LuF-i|#m|v7_Luc=fTzm4IvU$M=Q9;D&$7rady-S)@;rJ45B73T|GLcTkbSb= z@!oY&b5G04uGRDPIRiOnO$&_60sJ^8;5jzUB*Dk=fbNxDy}df5z6htFj^L^<ulJpjlj>4!sQDLAi`ojxAm&4K=}2 z*m`iqhDyC{K^pDjy;gaY7A@lq`vh>Mc@kJz)83do&(M`sKhOb7FlcLZ4=c_#!F0LX>pU_V3U6 z8|1j2w9-uXl3K)vM-m^T)`9^uPLoQ^ZuaAKvb`rAlSYGv# zL+;~jSrin0CghY$MVKQ;XjBF3F0vOFVpUnGPH!g&*>sDw0lCb|^MwE*Hksi{kOHvHS2?t8$E z@7VqD55R@*{O#IV9<~0!l8If79<^ovwW}Ad^Qfmghesd#f=8YIv4I!X{Hv$omIue* z{-qO}x_|l8AG~ntil*D1>nQr(!S%9at$z>Sxc`nXKYQo0y3cQYZr<h6Ry(rq6Hj)0 z<=Nw$jXBp_bFS5^+3%xz(Ttaz^uLgEeIVz$A;-6T*bcmgFiUu7dJoGcKw0Sj}}%Gl;#Ala_{HnFZaIK zkIY}I$5U@rw05qVZ`IUQa$di#HuJW6>;7Bi^OkE|@RpO6+6^yQaf(v=-~|st zFTe|)!es0qykOO-O1%m%xCbivSC_{7PFHFUyx{$BSIUAH{L(wf7rfx+Gnfd#3tnw; zE*)O*sWX)tfEPS=u2Knj!98aw^#ORniFcA;c)_dAR%#Qx;1*~ryx?|d2fX0lLl3|U z{yVf2Uhr4YB)s59E66*%pe#9k8(whcyOi1wFF5BM$^l+bUZ8ytUeL{9)dD`VCs@Tx z`cHuuyaGB4UhsOT0$%Wp8l@J%3*KDM*M8syZ{@op>M+r7V^-*UUv@;PFZZIW@Pf}n3*ZGkeawpC1#f^F;03<}wZRLXwu-uj7rX>o126bV zXaHXD`hM~bFZjDb77O47zu-fk;dg-Fhql5C{tntMZoo1>^$suC1w8;S_#*T$yx^Gu z@(wT90_}$vycIeCFIdQ8(Fy}!Im-V9bT{l`Z2s9N2SyOc)@?0Q0f(U!CynO{>`Ov3cd_p@X;%21Mq_1gU*5% z{K5OtZFs@Ae*hhT7rX*$fERogYJ(R%oyD9!c){KeQC{$ZS3=|Pg3H&FcX+|?L!00Q zi?3GdUU!V8XVAn)*k*F!&s7d!+VfEPUD!_+mr;O)>W@PftH zD5ZWzT;ThmS@43NgHC}LJpNkh9bT~fI?4fFa6YsYUa$pP1}|8817!kV2F`|7!V7jn z-SC1Rf!4qaUT`Dj124D%ioy$i0UC!F{M=2H75onHE6@$_f?tJhffw8lZG;zWyczoo zFE|Koffsb$LYsmY^g$263w{rpgctn%M<`Etb*oZyq5bfJP0#^&!7HE_;RPT0C}j&T z_!9Idc)`;*(vE(P4uGqnS@41h=oEOt&p;OZ7Vr_M0$y+uS^zJ&3v$B??u8b@3!eNj z${$|vT&MwFZ~$t97u*PS!wYVQ*1!vHz72Qqg7b&;#&-?}Z+Q7rX)54KKLzlawvIU>CF>Uhwu$p||jYkN+Lz3BMQo zE%Yk9;Hh^~w(x?tKgFMJM0|FS!r>gctk==oNUuPk&yam@bWv z!q0*i{2nw1UhucjDe!`^t&|(QU;=W(3*HYcgct1l3h9Fvyb@XiFL>2gmAVXGFtQW> z@EYOQ!zaKA=o)yz4?#D;3tk1?0)G&!`x^QN-vE9cx)Xj9{0X!j{s8zqv_ss3>_Mvs z;05o2CgFF0UxD_*v!1}%jj0N=iga)7tMzk}M~w}5Bt#+}H)uR$UBN$|^0P{+c9FGDxL9|RkoB=7Ko zKZ7=k9E?7NZomtE9=aEP2RQF(>=?Wo9D=rs8}Kz~2fX?g<16R^;h!O0&`$Vn@ImNl z_(`yG4{Z?M4f>%M;iKSX-=<992f&?>`UUR6E53{Vzz=};evkeUeg`-OEreHlmHHUe z1iuCR+H?h<4em!``0pfUk2U{ErZ_yzVj8zMcji|L2KaG zgQ4G&PWUKz{_oLY_y+K#KT==t7FhfzbP~P{JlBOy6*u5(1unH4UKP?m&2Xt7!%u>D zl)BU_@LRwOXS!6uf8ZY6Jd3e5{1&kCWS2S%-VH{f26(}jp_T9l!IMvMsmtIk@UFK} z2JlC$HX3>uz8mz^xzy9bgAYUd;U~d~ zg)a31{Ce>GMK1L!d;|FT#iai~DMPS!Dg6L^12}XpX@`%3JE1oCN$|txk$(7%;AfV( zlplTz`1SL#2jT|&DRcw;LGY9duPqP4H3hOVAd0zSW_=0d0rpI~{5d zv;&@Rb11&kp&o!2+y+gGdvGW8ZE+9of%b}f@ORKYc-f7(4mtq85qu7M8U6tHvqqQt z6Z}DNiHExTCEQcL0Yf;G*g9X{GdSzSzem}~G|7u5{;k^e3HBp0rd z{KAsjf_zuE;d=~!d`bE7`LmXnxQhphqJ@+BdtKc#GTb&$KH~qy*-HHp5}PVGotsnU z(8eKgBbXJZq(P^nP?an%aOV%?MRi(Ai&SZCk-Ko9Ae!HuH>uswMhgaUUzD$kHsrZo z0}@t_zuaqaJ80aB|K-NdJsEM?ZU$UY?iClP;@W(79#=Z-!3=j2cJ6g%nsehmwnQD< zQ|g{EP!cWfE}AUZ%Xh#F^HgEX<<{}UOgx!soK>u54VqH#E||>QOPZW?J7wjRgIqiJ zGQ$vlxyf^;T*7v0)Cqe!nUsN(HYZNW+lGv?IBn+VPRpO|I#JDX&m1U?&X_FTTX-P< z;Iws@8=hR>X7cW&U*gFvzhjEkF|K#2v=-oIcBz`pm!?dt-6fMndkYTa9n8`Xr;LxE zp^j(5kX-|Waa@Ty&ULfOEM?csA~n->nsRb@*tJvUnR#(!4obW|)U9*vpicAcho||p znb%4ge#E(xS%yv>icUIpkXheSZyPdmfIEqA11RaJB^{Y{pR2o0+MKeQE;_jpFRNIr7gfKx6GW|l){T+^jH z)2$O{rk^A6j#~#M>{z-Lru0$57u)LSXmOq@b{&rmHCS4xN?j)?O3SwCj@;1~3IEsV zsZ;iua%o3S{F2Vh@^^SAe$m6sygK1HDBq^&rZ>tA%yiQh?|gCdV* zv~w4Ip@f;2r*yv|VT%9UIuU&soJJpkEEwg*twWlml95{9y$4Q>S{VS66PR& zr$fn)BhO5ygnN(aYi1Re&&oHgqZ{|)?wF$TWAf8IyR94N+4r0@4d5=5cjC#ENx6tl zh|KBFC448}XxL%pE$wSCr+sCHnWboksdlzUG7oHp}0vE8RR)-ls|i@PJ$ z-*E->Ju^#+8NHr=8PArvXKHseLSmm-l>mSg^Q5c zEl6a?6s@9u?n(7~Czdv!n4hwcsa)x_-Dbvyl8%`LMWi`35~HlL^OSo%vtSWv6|L#k`S`NQM`jvMEL}yu9c!J=cW#<;^C5NS zjG0d?T|^j83r~k}Vre<@<)-DQ<;N8-IxfGo$5_@$J$5>-xEz@?^0j4$r(qR!cw4Go zXBB2&=ho@$8LMXJAA6e_2Td04%|D>yI&J2IqQfUor^A_Lb9_mFxq#DC>A8R|M)Ic0vddCtw#8!g)-<@qm_Wp3FWZ5ic;D>{3mG@mx}2`TrtO;_%-iVJ7u8=Iv| zns6kn-0(B&C%61F?@gyqneE|7X`IgAk@Q&7H+x1oI#zp_j+GP^mgGCu1$Sk|mZll?x~x08K5y-#si zPjdnDCKOw4KL{i)0^@vLQ&d$YaI*dt ztv_zRlud$_5cF3-%v&5%Zh81O^`^F54?OuMuWHK`+wXxOLGrfgC=cDH0^`v~p0esE zkGv8t)0-U5*RJ%-E+j$1^hbI6NsHxK;S|#^4>0i}ZY`MR4HRiPj(7uHW|nw^Mn9jf z)Q|A-FpqZ1vtjZE=1gAFrms0V>x~9=@%VTWmuJsNIIq2vB$|5?hTxoEP!I;5Y z4SvetR)aeYK4b7jg9i;BGFbL5J3h}bQ`QU*kZ8T;2ML22Ezu&4Q?=alfg{}?=*Oy!5s#78hqT~GY0n= z{IS6o48Cme6@!NimMpOIb&^5L;JXYiGbG7a;r|O^cSMo7$lR8pc zTF@b1j}vcwk<~$ez{9KK)FlPoN!}GF=~lr4{lI-U@3xejQWg4@Xn~k|?_qby`TLTA zux~AzpUeCs8nRf#h;$l^pkM~f^{^oICKz~%4 zz^E5>Rbg)^5QwUK3j0EFis>Tx5UBdcLi2V2^OQel86AmEKIgg$<=f8GRxg9@P@rp2 zK7yl4ikwXMMN%c9PA}50uF=U~s`~pq{mwVB`t4Lva}CJ*Lq0x|Wmao>Z%{NVOq^I`9ot--hG`I zQtF>n|B!uuN=cG@Bb**`>BLaDqv`{${;*Ut-nWbSuUo}MrH zMp<=#Ca>TA*10Oq?;rEU{mH1hKHn>!7*U(^eY|KQ;$uFYZ>MWp{*XPtRNM21^xFeD zGnqf6XIfv&A2Nyi23#`XQ;%pI!~diC%r%*IO$w5yr}FuJV_>cNRzBan429Hp$eB!g zsO@|*BgLtHmrvB*5O4RCtJm}8r5BQxf&yNQqSIcexhV7aV&N!mPR@&*oXNU22yOvSX%df|+_Wy15O7Nsr}E-Vgu3hZyXb8@L55gFsXR4A+(C|KuY zQ6&l}EFIRB!fF2>5-#i`LDvdLV4N}+E`d2xUnr1LPeg)?7pfOEFJ=ACLNjCM-JZO! zteZE4@oxC^o6D5?tn&J#<#0ku$@|f$4W%o=ehHd-K#e3K;gEVzV_bcM&)@Jpdh+v4 zrN5D+9#b;2<&+wj5MR7>hckaFK9baLL{wN{6BvW6BK+%5hYcn}Yx@(tz#`7ex3Dmd z+!yi&N6|F&jQ6fnXRMVt_ozH)^&n%;&ij~6m>KsamEw2Yxu+-YoaJ+_wN@#0UFNkD zxV-eEe;pI&C=+OYGH3iNp%u+Noy{xjYODNICBHeO>wgoC#@G2`2|M={fYLZ zr}UQL|43wOR3&e8a!OiC`>o&KN(u11SA*;^Ge#?6+kJGM@4-MjU`)`MHswz6&3HutuMZQa`jwnewC-?nkvmTfz>O>Wz}?ZCE! m+tmGK_gnY7?{B!j`~HFZRYN{|EE1Qc Date: Thu, 14 Nov 2024 18:25:02 -0800 Subject: [PATCH 05/20] Further tweaks to vs code launch (need to backport to template). And, also, improvements to windows GDB. --- examples/debugprintfdemo/.vscode/launch.json | 10 ++----- examples/debugprintfdemo/.vscode/tasks.json | 14 +++++++++- minichlink/microgdbstub.h | 20 ++++++++++---- minichlink/minichgdb.c | 26 +++++++++++++------ minichlink/minichlink.exe | Bin 125440 -> 125440 bytes 5 files changed, 48 insertions(+), 22 deletions(-) diff --git a/examples/debugprintfdemo/.vscode/launch.json b/examples/debugprintfdemo/.vscode/launch.json index beab4027..6ec54fdc 100644 --- a/examples/debugprintfdemo/.vscode/launch.json +++ b/examples/debugprintfdemo/.vscode/launch.json @@ -11,13 +11,7 @@ "environment": [], "externalConsole": false, "MIMode": "gdb", - "deploySteps": [ - { - "type": "shell", - "continueOn": "GDBServer", - "command": "make --directory=${workspaceFolder} closechlink flash gdbserver" - }, - ], + "preLaunchTask": "run_flash_and_gdbserver", "setupCommands": [ { "description": "Enable pretty-printing for gdb", @@ -33,7 +27,7 @@ "type": "node", "request": "launch", "program": "", - "preLaunchTask": "run_flash_and_gdbserver", + "preLaunchTask": "run_flash_and_monitor", } ] } diff --git a/examples/debugprintfdemo/.vscode/tasks.json b/examples/debugprintfdemo/.vscode/tasks.json index d086ce20..5d5ffdf8 100644 --- a/examples/debugprintfdemo/.vscode/tasks.json +++ b/examples/debugprintfdemo/.vscode/tasks.json @@ -13,10 +13,22 @@ }, "command": "make closechlink flash", }, + { + "type": "shell", + "label": "run_flash_and_monitor", + "presentation": { + "echo": true, + "focus": false, + "group": "build", + "panel": "shared", + "showReuseMessage" : false + }, + "command": "make flash monitor", + }, { "type": "shell", "label": "run_flash_and_gdbserver", - "command": "make closechlink flash gdbserver", + "command": "make flash gdbserver", "presentation": { "echo": true, diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index 09daa57e..b8e30cc4 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -34,7 +34,7 @@ void RVNetConnect( void * dev ); int RVGetNumRegisters( void * dev ); int RVReadCPURegister( void * dev, int regno, uint32_t * regret ); int RVWriteCPURegister( void * dev, int regno, uint32_t value ); -int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume ); +int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume, int resume_from_other_address, uint32_t address ); int RVReadMem( void * dev, uint32_t memaddy, uint8_t * payload, int len ); int RVHandleBreakpoint( void * dev, int set, uint32_t address ); int RVWriteRAM(void * dev, uint32_t memaddy, uint32_t length, uint8_t * payload ); @@ -217,7 +217,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) if( StringMatch( data, "Attached" ) ) SendReplyFull( "1" ); //Attached to an existing process. else if( StringMatch( data, "Supported" ) ) - SendReplyFull( "PacketSize=f000;qXfer:memory-map:read+" ); + SendReplyFull( "PacketSize=f000;multiprocess+;hwbreak+;vContSupported+;qXfer:memory-map:read+" ); else if( StringMatch( data, "C") ) // Get Current Thread ID. (Can't be -1 or 0. Those are special) SendReplyFull( "QC1" ); else if( StringMatch( data, "fThreadInfo" ) ) // Query all active thread IDs (Can't be 0 or 1) @@ -306,13 +306,17 @@ void HandleGDBPacket( void * dev, char * data, int len ) break; case 'c': case 'C': - RVDebugExec( dev, (cmd == 'C')?HALT_TYPE_CONTINUE_WITH_SIGNAL:HALT_TYPE_CONTINUE ); + // TODO: Support continue-from-another-address + RVDebugExec( dev, (cmd == 'C')?HALT_TYPE_CONTINUE_WITH_SIGNAL:HALT_TYPE_CONTINUE, 0, 0 ); //SendReplyFull( "OK" ); ... this will be sent from RVNetPoll break; case 's': - RVDebugExec( dev, HALT_TYPE_SINGLE_STEP ); + case 'S': + // TODO: Support step-with-signal. + RVDebugExec( dev, HALT_TYPE_SINGLE_STEP, 0, 0 ); + //SendReplyFull( "T05" ); //SendReplyFull( "OK" ); // Will be sent from RVNetPoll - //RVHandleGDBBreakRequest( dev ); + RVHandleGDBBreakRequest( dev ); RVSendGDBHaltReason( dev ); break; case 'D': @@ -421,6 +425,12 @@ void HandleGDBPacket( void * dev, char * data, int len ) { SendReplyFull( "OK" ); } + else if( StringMatch( data, "Kill" ) ) //vKill + { + SendReplyFull( "OK" ); + fprintf( stderr, "Received Kill command. Exiting\n" ); + exit( 0 ); + } else if( StringMatch( data, "FlashErase" ) ) //vFlashErase { data += 10; // FlashErase diff --git a/minichlink/minichgdb.c b/minichlink/minichgdb.c index 508c5dc5..20f0f2dd 100644 --- a/minichlink/minichgdb.c +++ b/minichlink/minichgdb.c @@ -1,10 +1,8 @@ // This file is loosely based on aappleby's GDBServer. // Connect in with: -// gdb-multiarch -ex 'target remote :2000' ./blink.elf -// Optionally, use these commands: -// set debug remote 1 -// target extended-remote :2000 +// gdb-multiarch -ex "set debug remote 1" -ex "target extended-remote :2000" ./blink.elf +// gdb-multiarch -ex "target extended-remote :2000" ./blink.elf #include "minichlink.h" @@ -15,7 +13,7 @@ const char* MICROGDBSTUB_MEMORY_MAP = "l" "" "" -" " +" " " %d" " " " " @@ -113,7 +111,7 @@ void RVNetPoll(void * dev ) return; } int statusrunning = ((status & (1<<10))); - + static int laststatus; if( status != laststatus ) { @@ -210,7 +208,7 @@ int RVWriteCPURegister( void * dev, int regno, uint32_t value ) return 0; } -int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume ) +int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume, int resume_from_other_address, uint32_t address ) { struct InternalState * iss = (struct InternalState*)(((struct ProgrammerStructBase*)dev)->internal); int nrregs = iss->nr_registers_for_debug; @@ -220,6 +218,18 @@ int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume ) fprintf( stderr, "Error: Can't alter halt mode with this programmer.\n" ); exit( -6 ); } + + if( halt_reset_or_resume == HALT_TYPE_SINGLE_STEP ) + { + MCF.SetEnableBreakpoints( dev, 1, 1 ); + RVCommandEpilogue( dev ); + MCF.HaltMode( dev, HALT_MODE_RESUME ); + MCF.HaltMode( dev, HALT_MODE_HALT_BUT_NO_RESET ); + RVCommandPrologue( dev ); + MCF.SetEnableBreakpoints( dev, 1, 0 ); + return 0; + } + // Special case halt_reset_or_resume = 4: Skip instruction and resume. if( halt_reset_or_resume == HALT_TYPE_CONTINUE_WITH_SIGNAL || halt_reset_or_resume == HALT_TYPE_CONTINUE ) { @@ -296,7 +306,7 @@ int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume ) RVCommandEpilogue( dev ); } - MCF.HaltMode( dev, (halt_reset_or_resume == HALT_TYPE_SINGLE_STEP)?HALT_TYPE_CONTINUE:halt_reset_or_resume ); + MCF.HaltMode( dev, halt_reset_or_resume ); } shadow_running_state = halt_reset_or_resume >= HALT_TYPE_CONTINUE; diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index e6edd8c28bbff708d9c846827d328ac00330c840..5fdefc1362a243bc46523fd1fe11416182351c75 100755 GIT binary patch delta 28980 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 S9oKi<-64EjFjr=|?Ee6u6%G^t delta 28597 zcmeIbdw5LO_dkC2$dHhjNHP)RMiPmTNJum;Aw$B1Ac*_DL21>c5=Ai~2^nKFY>c+5 zRJF9IHYyR9CgOf;P_28TdO6c*i=rqwzt=kFOfLPrf6wRpd7kg*zi*#sS+Bj;+G}6V z-fQo(&z>~v+Xh+RHptJbH~p*F)t3GmuhP}m`m%03gtcXXd=TrQdD54!VFOqyzs*9S zaM6UasDfzCFU*v*g9*{6P6$j81fxaU8_DWKa_z*%?M#@mB(DFcOr0@3wVRQZFNsS{ z5`>H?$o40cX18rWFu@|^mSptWuYo&pb|)r?PEibw^}FE9;$e1oq!%gah7jzKOZMZN zoxE8jFLX+*KL|?El{0N87Q*ASLEfeCpJ;J5TD9-pf;)3!aG*Fjme1DuG96!~?Wwu( z3BRcA%oumA?-OqPj6AwEK_*FG=24HzPx}P(dnm|HNVa(S8qKA~>@sI@NG$)XelzEykL4;4;%DpoGYzk- zAJ@hFF%!O~PPEj|e!_IQpH@lI{s8KQ!j5RUBHRlh>SBd0>NgimEbYk0HV7W^78z-C zZ$OcKG;s8|@na2R%BDo>0&?Jj3e%5NGW7&IQJ)GDUqK%GOK>?Q-)KHz{~gF&D(-+Z z-DephN3J10(S`H7Hovf-cZ6=p&29TZzRG71JA1OKa7em6$d_* zr05d!o9@L$jpY6|_i>i=cQ0YumZ)Q;Y^d@u1-TlVx=q;scqZAwL7F6|K{r%RS}x zY)Dhu)9>&9(va&Hc)ojprprbCg?pGO?*bWOXa!~EC=W%_XER&Com8hfsjxb!=9EI16GG(q=}XB;j!9Q_j%tWV`#S-v zn{E)ddNnm&MygiilPz}C$g1P>I$2g7d}X^O|3UWpe~^v*53(f4;AEhrPXS8C18?G} zX-5b!up;D%j%B)?q<<1mYd0Wf{HRpQSt?F@AW22HQ7ySb>>PhX-_~^WEVZd_ zUHAM4*~b4M%Y&>=ZA=hQ(NXBLKL_IJ9}y488vu0WYtWrY4DKcgl3*;_Hp(^?K;pjM z&ZfJrs8eU{$FQglSuSV=8gL9=r~#(?l2j}_kpfWn6l+RwjG+jb5Wr_6Q*qz`wNZ_b zT2l28&B^ptV_!)(*-?q=s1qDj`oW7~KdgkL=#uEh81`L}QSO!_XZRQ1!J#+K$Qu$z zk&@mM2Dv4=T!b7)@4CG6uT;olk{(@d5UV~X*!T^XzJg!m#U&oimot?9?>A!&yMXO8?)$9zJ z&4XEGfZV4C9?{C7|FetSu}7h$Cp7s_Y=^F3;>L|0$0sz8WXJj2&3)Kce0%d$HiGXV%qAza`2e)?7mdb0 zm2XMXJy7LlrjuEwIFYEfUY zXsTNL?q6L>{lmhOm&l2{XTZL(pHj@38WSg&kOj7NRFNN4iyi)am*41KX~)S|hVmdK zz28g7Z`DtgjY>sci3o8V87&zYTND7tz#em?*oVB4pwV&O&%Z_2KaNq@Xjo^fat*RX zYj3BT=X+ANYE;K+FW=(t8NXT9xYp6Elx2dT6>2=plVxso>?ZO1{xjJ_J~6gWkB52I-0Q*LdPZxAzcW@xS9c(d9jncDxj?= z>JLsFGDy<5=T!mCeG^G}!qVHfUT>eyy`3@}JIt_T@|eIhc9xq1lcJWDQ3bL}Ry)<~ z^WKnUIi)DEm81M|kfm7MhV!bxe)>kTfhJ#*UmW5v_?wSw8Pwy_5t=a-HT`jf1i8Ow zgejGFG(pnufa2dRU&l*YM!8RdCRfUEQy0vLHLY5)BRr^8T&x)yir>zGngqOsxs*xz z#SpoaspBL245s_a21R1D|&t^CF=htRRcxT=~bzep0vx;gwAmYk&Bcp{di zZj#=qZeeB=_7q)$7}E{2>|t*z*I>RPZhgQT1}$Y1xHYIH>%>0~@?$>y9R7XAEAj6Q z?h@?B4)f4pKi|zIN~F@|TG4IEh%CxJ|GuQR@(ICV$vdNJsyRPNX@K9)2xOzk*jH(` zq>qQ6$Ec*Hdi9xujF=a*)jW27Az1G@07BFd@~x`8ls^sL>%IGHicgNc_Wbs8R##pY z65^bqB!c+8kXEdid$tZ?dwJ*9{wC{TSXug~)_L2RS1puZi|DaP`t)j{{Jx_I2UH7X zOXVe~bG5M6n^CYTr1(y~Bk7w%(woYbR~=d8T+2v#cY1sXU6OPtE2F8pj7CJt%}PrI zGnZEOz?5rvnEQsdX!(_5s>uviP47m?riqHF_%a_6>Tj9>E2Y5`5P#LGjFg4iHN+5= z>XU&~Ub}A57=c}(PO-jT`Z(#Jdq!`ykQquLVlTNq;!n3F=`dacB>N&n&)Oa&{XYkp zz#oOS^ga)u)FHK|4*Pk#uvP($m707*7N|+CQWN_EctlH!`0HW5Y&2gH7Q$BYJz=py z!^tqaEJ1!P2~_LUr5z2B`v^1`Bj>qun@|?ZquR`6>-Z;aI<*~t0K*lpWxAXn1VK>q z^lU5V!Lo=v^?NF<`I0+_cVeq}k8nTs10Ne6$==~B!&|y94~O2WUrMhJn2Rs?q43U{ zTl;x(yMQL=u%Drz;38D|pvqPI`TTai^(6f!-luI$<7v=V{$Q~54nx!#!_94@*~|Pu z+W_Z=P{6zw|FLZc7RL4MIxs6YwhMG$h)rQFf4lg+cEMgo2+dda)9Uli-%riQku#R> zY4@tj=|b5}y&@hIF^;A4r4c>Zc780v$OiJpk?q|>_mRGTs=UXR^ntv80 zkFY^2O!X^zGk!L*h5L)IXra>Oj>OzTDXsb6k$x@8RU!IWeMi)5WyjjbynTD0px;AK zidCFq_H`wfE8JzT)4v4{;OsQc0Ocl%oHNyF~fA zeyvCXAbH56qguJ&4wn5k?WXu0&eNj?#XYA|(!KT@*=gxVdXMf_>?CiX0_5x&C)FoB zLdm?UtCIOVzZ;d}_B^O2GWFw0(R~BA)slp(w%%88P_YIL5PxvtpGS9c8(7Q8g+GYy z=2pL!xhcp4g45^;%7g{21)qk&=_u+FowrltoQl-Dv7oC3OJ34mJxO~BX z?%0amZ zpLl($nkCfav_XW|Izg!5Cth-YX{?{z^ZvAX#Sp!8L7m}Cs;+TL_RVu)P1iayr2rP$BAn*@hwI8g(|#XjzhCP zVYD}|Z0VTVib*fkX!USC|r(U)AMZ-+VaR~!vzG}UhH}CB0VpUUb@gALh zBj>59VelmHrQ~e#9F;CPHeBhdQ8YJqjxxQ~LT*q;Re1j!#5{~!2`@o-oyv}1@F~SU zi@x4xOvvGBzi7|vN=ikfn^NM^x zwLB6%1pDqi6-D=I#STRgsmME3%OlUr8ColH?`rw$=eVJ(x9NqFt!jtd=JQ}m6E575 zvmI9CK|8c*>+0!6AatU$iNKd)4M~<`Bu-E9LNDpR z+g8_%c0@-UGHl8zT#;pgTA?=9EZMdUHvo6XsU;^LmysCPaPX&Zg9kC{#(3w znP2Y_7<=j?YS;Z@l;@1{u!qJdmGs3B>-KqdH=6CD6)w$B{x09H%XCgL-xe2L=1~dJ z-P2)$9FELN&gkoCO7~bg`0A&)@Fy4k6rf`&%p%lw0cmi6-U^Z9{4cQT3@h`2OB~?RzJsQN1X7@cWh-9{~Z25;L^=!rb_|%@ASquIl{vE_`^bFSg^o(nI4b;5$j1TG6 z#dG*GrId^w^5DjdvhvNnx_kWcRF#J-gI*uc@Ac}dS^AWBOPs+x_-BcUnsZP1{lo}O zV|N~y)Rnd2W0JC1YQfDUKgK!~{L?$Uo~A*gg3!Lv8kWXKrYvA13%*SWW-O-QY5)36 zvukVt8~CRNAKvc|%3&`R%pLrMHQbHRkdc~ViFlvSOG{%3{9Ia?#|aU2p)X~Q)8f{= z!O(eZ7tb0xT$B3>zdAI&>Bqk+HoBa7n1*VdnZzT8`LQm%->`n(t*b4bV@Iu8Ea5wc z^>K0e8H3KE|8gjQKJ1^UT~-Pyr!wkG`UNF8o3yxbNN5+OUsIzR4;8*OVv*#bBNEw2 zK7E9b=E;wI*@!?lf0&`V4e6P9@PZLZlheMYL(ZedGUfBK`HZfx(G--S6Z_sl+1X{9 zDdt{Pm3G(!jxLiwLdO}+--&6YmE&lp7W>x9*7O~|JqfL8!8l%$gMrnz7nKyn$BqnS zefZ*$9W`fe^MaB6G@H^fz#^XD8P^_QBhslz`gUU&YDiN*lN!-LYs8{7K5ts7}JWC@$fNSo6j_pugsg4wZS{(ZC6Tg0yfH$egHR(X{PyU5Px?} zx8b{gKm}non#ML7yh%+DPcc8E^eQ#o6OnpF1Wm{L;sRCH1+rzTY>Fz2AcN!|c*NMa zhU0HhkJ`oIxA@GliO#e0klhl|mme70u3l^&!is~Tlh#*e4xqVh9|U=9EbOe(X{`)K;Epuy(@jtS9GYJ zhEJEgXnfefpROYsK%kK>8_m7k$#JF@=i@_S$n$Y%DeN2ux7$&8uB6MkO%=8D3lvAd zD>Wdzy7G~{{RE$pi{xB$l)4B07o+d+DIpOZcnAkMY9-y|W+o~5+>rHDym4=3EOG%&28>Y9%;Zm3M zwx$#J1bp_eYKMp6^M^d4qfd!P@Chv|-g7CIk&Fh>CH7;qU$^+Rg$GnF2By*_M2mVb zK)>j6R*>H6*4Cl;afzysH~JR0Ym~P5o!LwI_5KdCAxoJ_anM&Tz^#Dntop_dgSL(W z!WBJN^vt2Ju0TUYKS$9&4^=C8ozhgn-_R1oz9EYKZ->5MiAgm$tr&Dv41RYQSR4*M zRrH>U{-&ZQ&#M*1vn;vh-#Rk(b!42a=&vdIQ#Bb!$O@BNsiHaR$m!z98K>mjqUehq z`rDMIlChbjHZ4)~dmQ@x4*e5(Zn#ZU^q)BNs~!3)q&HdI42r>8hru+50gm>lfM$w* zr9&^A)XWA7QUr`K=BO)go)D#n6Dbme~IHR@u^eSvs+x6>eKh;LRw1jGHlg5quQ7& z>5z!s5gY9x@^i$;MOtE_B>fg>U{D`+cqM5fWcn9VPvg`SH^O}R#A#jF7QS)XyPD${ zc-*VufiGV`nb}oRhKn3d%66g72uNY-vi}-i`syf6{sn&P)n$GY%IPz1KUeCFUQx!* z=jJ3Dv)^(TG6Td#<$TF&!$Kw_JEFvJN&neSjS&BHJ-nj@T6n(vtSwn!IO*cgU+ci8 z@b=T+U_t!D=@HnOl~4B{`1mu*o8f}aPBiz5qmP{yh-4=j0ciW@!Pp%l+zzETO-mz5 z?+SJFDRaNL%D%aei?G>|Qq1>t$;Zt{B>g=e|GF>h%16DvSF`UNcc0NrbLkv!J0k^$ z+w*3m(++UPuz+XS?l_JqM&V?VmYDZ&IIy3N=EWF3Xl4xiq+r?1-Hd(5V`nG&lzu^> z{;C*`7$=?2bR4W~N)|k4Deu%n#T95u;qMkhg7EZ?Ms*H=UQw4-L9jic+y;Uj+aAdb1LF zf2Le`#J;Z#XS!M3Z9%x^SSjzkU=)kyYZnA*9z_@IUoeen-Yw<93*$ATOL_XjROZ6> zF6^YaSiLBIKVRe% zbLbFt1FQ^1G3eIfWq98f-C>JGY~)mV(9rr$OPv||=!@c+ulYZVLj9UUc|0*VVY8V3 zwS0nbAbVkOOhV>fv|$GCvA7#6g^!&YhO_lCOL3uZVA6XoM7<6y3o`v%IrYOy- zgFMdEie2QRO=;`}-(&L8{M3%0HjQW5JUr`V+~c)ob<*rF=Et&H?

#jFWH=W|A+Oh9HQyI^HEa2FxxieezE0i}nbR<~4 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 From c75c9eadb38efccb42a8c1645e08ec6e8b286995 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Fri, 15 Nov 2024 01:26:54 -0800 Subject: [PATCH 06/20] * Optimize pgm-esp32-s2-ch32xx.c * Improve VS Code build * Fix stepping for older GDBs --- .../.vscode/c_cpp_properties.json | 19 ++- .../template/.vscode/c_cpp_properties.json | 41 ++++--- examples/template/.vscode/launch.json | 34 ++---- examples/template/.vscode/settings.json | 6 +- examples/template/.vscode/tasks.json | 49 ++++---- minichlink/microgdbstub.h | 11 +- minichlink/minichgdb.c | 27 ++--- minichlink/minichlink.exe | Bin 125440 -> 126464 bytes minichlink/pgm-esp32s2-ch32xx.c | 109 ++++++++++++++++++ 9 files changed, 209 insertions(+), 87 deletions(-) diff --git a/examples/debugprintfdemo/.vscode/c_cpp_properties.json b/examples/debugprintfdemo/.vscode/c_cpp_properties.json index b52c5f52..92c840b3 100644 --- a/examples/debugprintfdemo/.vscode/c_cpp_properties.json +++ b/examples/debugprintfdemo/.vscode/c_cpp_properties.json @@ -8,13 +8,28 @@ ], "defines": [], "compilerPath": "/usr/bin/clang", - "cppStandard": "c++14", + "cppStandard": "c++20", "intelliSenseMode": "linux-clang-x64", "compilerArgs": [ "-DCH32V003FUN_BASE" ], "configurationProvider": "ms-vscode.makefile-tools" + }, + { + "name": "Win32", + "includePath": [ + "${workspaceFolder}/**", + "${workspaceFolder}/../../ch32v003fun" + ], + "defines": [], + "compilerPath": "riscv64-unknown-elf-gcc-10.1.0.exe", + "cppStandard": "c++20", + "compilerArgs": [ + "-DCH32V003FUN_BASE" + ], + "configurationProvider": "ms-vscode.makefile-tools" } ], - "version": 4 + "version": 4, + "enableConfigurationSquiggles": true } \ No newline at end of file diff --git a/examples/template/.vscode/c_cpp_properties.json b/examples/template/.vscode/c_cpp_properties.json index 938ea5e9..92c840b3 100644 --- a/examples/template/.vscode/c_cpp_properties.json +++ b/examples/template/.vscode/c_cpp_properties.json @@ -1,26 +1,35 @@ { "configurations": [ { - "name": "RISCV32EC", + "name": "Linux", "includePath": [ "${workspaceFolder}/**", - "${workspaceFolder}/../../ch32v003fun", - "${workspaceFolder}/../../extralibs", - "/usr/include/newlib" //why? the configurationProvider ought to find this + "${workspaceFolder}/../../ch32v003fun" ], - "defines": [ - "CH32V003", - "__riscv", - "USE_SIGNALS", - "CH32V003FUN_BASE" + "defines": [], + "compilerPath": "/usr/bin/clang", + "cppStandard": "c++20", + "intelliSenseMode": "linux-clang-x64", + "compilerArgs": [ + "-DCH32V003FUN_BASE" + ], + "configurationProvider": "ms-vscode.makefile-tools" + }, + { + "name": "Win32", + "includePath": [ + "${workspaceFolder}/**", + "${workspaceFolder}/../../ch32v003fun" + ], + "defines": [], + "compilerPath": "riscv64-unknown-elf-gcc-10.1.0.exe", + "cppStandard": "c++20", + "compilerArgs": [ + "-DCH32V003FUN_BASE" ], - "compilerPath": "/usr/bin/riscv64-unknown-elf-gcc", - "cStandard": "gnu11", - "cppStandard": "gnu++17", - "intelliSenseMode": "gcc-x86", //works. Someday, intellisense might get riscv modes - "compilerArgs": [], "configurationProvider": "ms-vscode.makefile-tools" } ], - "version": 4 -} + "version": 4, + "enableConfigurationSquiggles": true +} \ No newline at end of file diff --git a/examples/template/.vscode/launch.json b/examples/template/.vscode/launch.json index de280e44..6ec54fdc 100644 --- a/examples/template/.vscode/launch.json +++ b/examples/template/.vscode/launch.json @@ -1,47 +1,33 @@ { "configurations": [ { - "name": "cppdbg GDB Debug Target", + "name": "GDB Debug Target", "type": "cppdbg", "request": "launch", - "program": "${workspaceFolder}/template.elf", + "program": "debugprintfdemo.elf", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", - "deploySteps": [ // 'make ...gdbserver' doesn't seem to work here. The Makefile calls 'minichlink -baG'... Needs -aG. Easier to add minichlink as a seperate step below - { - "type": "shell", //isn't there some way to call a task from tasks.json? - "command": "make --directory=${workspaceFolder} -j 1 closechlink flash", - }, - { - "type": "shell", - "command": "${workspaceFolder}/../../minichlink/minichlink -aG", - "continueOn": "gdbserver running" - }, - ], + "preLaunchTask": "run_flash_and_gdbserver", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", - "ignoreFailures": true, - }, + "ignoreFailures": true + } ], - "svdPath": "${workspaceFolder}/../../misc/CH32V003xx.svd", // extension 'Peripheral Viewer' by mcu-debug (cortex-debug) "miDebuggerPath": "gdb-multiarch", - "miDebuggerServerAddress": "localhost:2000", - "logging": { - "engineLogging": false - }, + "miDebuggerServerAddress": "127.0.0.1:2000" }, { "name": "Run Only (In Terminal)", "type": "node", "request": "launch", "program": "", - "preLaunchTask": "run_flash_and_gdbserver", - } - ] -} \ No newline at end of file + "preLaunchTask": "run_flash_and_monitor", + } + ] +} diff --git a/examples/template/.vscode/settings.json b/examples/template/.vscode/settings.json index 8b9feef1..e81e0118 100644 --- a/examples/template/.vscode/settings.json +++ b/examples/template/.vscode/settings.json @@ -3,7 +3,7 @@ "makefile.launchConfigurations": [ { "cwd": "", - "sbinaryPath": "template.elf", + "sbinaryPath": "debugprintfdemo.elf", "binaryArgs": [] } ], @@ -11,5 +11,5 @@ "editor.tabSize": 4, "files.associations": { "ch32v003fun.h": "c" - }, -} \ No newline at end of file + } +} diff --git a/examples/template/.vscode/tasks.json b/examples/template/.vscode/tasks.json index 006c40c5..5d5ffdf8 100644 --- a/examples/template/.vscode/tasks.json +++ b/examples/template/.vscode/tasks.json @@ -3,53 +3,49 @@ "tasks": [ { "type": "shell", - "label": "build", + "label": "flash", "presentation": { "echo": true, "focus": false, "group": "build", "panel": "shared", - "showReuseMessage": false + "showReuseMessage" : false }, - "group": { - "kind": "build", - "isDefault": true - }, - "command": "make closechlink clean; make", - "problemMatcher": { // https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher - "owner": "cpp", - "fileLocation": [ - "relative", - "${workspaceFolder}" - ], - "pattern": { - "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", - "file": 1, - "line": 2, - "column": 3, - "severity": 4, - "message": 5 - }, + "command": "make closechlink flash", + }, + { + "type": "shell", + "label": "run_flash_and_monitor", + "presentation": { + "echo": true, + "focus": false, + "group": "build", + "panel": "shared", + "showReuseMessage" : false }, + "command": "make flash monitor", }, { "type": "shell", "label": "run_flash_and_gdbserver", - "command": "make closechlink flash gdbserver", + "command": "make flash gdbserver", + "presentation": { "echo": true, "focus": false, "group": "build", "panel": "shared", - "showReuseMessage": false + "close": true, + "showReuseMessage" : false }, + "isBackground": true, "options": { "cwd": "${workspaceFolder}", }, "runOptions": { "instanceLimit": 2, - }, + }, "group": "build", "problemMatcher": { "pattern": [ @@ -60,12 +56,13 @@ "message": 3 } ], + "background": { "activeOnStart": false, "beginsPattern": "^.*Image written.*", "endsPattern": "^.*GDBServer*" } }, - }, + } ] -} \ No newline at end of file +} diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index b8e30cc4..b06fa253 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -210,7 +210,8 @@ void HandleGDBPacket( void * dev, char * data, int len ) data++; char cmd = *(data++); - // printf( "DATA: [%c] %c%c%c%c%c%c%c%c%c\n",cmd, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8] ); + //printf( "DATA: [%c] %c%c%c%c%c%c%c%c%c\n",cmd, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8] ); + switch( cmd ) { case 'q': @@ -298,9 +299,13 @@ void HandleGDBPacket( void * dev, char * data, int len ) snprintf( map, mslen, MICROGDBSTUB_MEMORY_MAP, iss->flash_size, iss->sector_size, iss->ram_size ); SendReplyFull( map ); } + else if( StringMatch( data, "ThreadExtraInfo" ) ) + SendReplyFull( "4E2F41" ); + else if( data[0] == 'P' ) + SendReplyFull( "m1" ); // Archaic threadid. else { - fprintf( stderr, "Unknown command: %s\n", data ); + fprintf( stderr, "Unknown q command: q%s\n", data ); SendReplyFull( "" ); } break; @@ -308,7 +313,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) case 'C': // TODO: Support continue-from-another-address RVDebugExec( dev, (cmd == 'C')?HALT_TYPE_CONTINUE_WITH_SIGNAL:HALT_TYPE_CONTINUE, 0, 0 ); - //SendReplyFull( "OK" ); ... this will be sent from RVNetPoll + //The real reply will be sent from RVNetPoll break; case 's': case 'S': diff --git a/minichlink/minichgdb.c b/minichlink/minichgdb.c index 20f0f2dd..1598b6db 100644 --- a/minichlink/minichgdb.c +++ b/minichlink/minichgdb.c @@ -35,7 +35,7 @@ void SendReplyFull( const char * replyMessage ); int shadow_running_state = 1; int last_halt_reason = 5; uint32_t backup_regs[33]; //0..15 + PC, or 0..32 + PC -int gdbasserting_break = 0; +//int gdbasserting_break = 0; #define MAX_SOFTWARE_BREAKPOINTS 128 int num_software_breakpoints = 0; @@ -89,7 +89,7 @@ void RVNetConnect( void * dev ) } int RVSendGDBHaltReason( void * dev ) -{ +{ char st[5]; sprintf( st, "T%02x", last_halt_reason ); SendReplyFull( st ); @@ -227,21 +227,22 @@ int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume, int MCF.HaltMode( dev, HALT_MODE_HALT_BUT_NO_RESET ); RVCommandPrologue( dev ); MCF.SetEnableBreakpoints( dev, 1, 0 ); + //printf( "STEP PC: %08x\n", backup_regs[iss->nr_registers_for_debug] ); return 0; } // Special case halt_reset_or_resume = 4: Skip instruction and resume. if( halt_reset_or_resume == HALT_TYPE_CONTINUE_WITH_SIGNAL || halt_reset_or_resume == HALT_TYPE_CONTINUE ) { - if( gdbasserting_break ) - { - // This is tricky, but I don't know how else to handle it. - // If GDB is stepping, and you ctrl+c, then, it will ignore that and keep going. - // Here I say if the user ctrl+c'd actually fail to switch run mode. - gdbasserting_break = 0; - SendReplyFull( "E 99" ); - return 1; - } + //if( gdbasserting_break ) + //{ + // // This is tricky, but I don't know how else to handle it. + // // If GDB is stepping, and you ctrl+c, then, it will ignore that and keep going. + // // Here I say if the user ctrl+c'd actually fail to switch run mode. + // gdbasserting_break = 0; + // SendReplyFull( "T99" ); + // return 1; + //} // First see if we already know about this breakpoint int matchingbreakpoint = -1; // For this we want to advance PC. @@ -494,8 +495,8 @@ void RVHandleDisconnect( void * dev ) void RVHandleGDBBreakRequest( void * dev ) { - if( !shadow_running_state ) - gdbasserting_break = 1; + // if( !shadow_running_state ) + // gdbasserting_break = 1; MCF.HaltMode( dev, 5 ); } diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index 5fdefc1362a243bc46523fd1fe11416182351c75..da76fd4346a04f1a83e62071538ca3f7ff78f740 100755 GIT binary patch delta 30712 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 z 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 z`*HTAinternal); + struct ESP32ProgrammerStruct * eps = (struct ESP32ProgrammerStruct *)dev; + ESPFlushLLCommands( dev ); + + Write2LE( eps, 0x05fe ); // Void ESP's internal high level state. + iss->statetag = STTAG( "RER2" ); // Void local high level state. + + ESPWriteReg32( dev, DMABSTRACTAUTO, 0x00000000 ); // Disable Autoexec. + MCF.DetermineChipType( dev ); + int i; + for( i = 0; i < iss->nr_registers_for_debug; i++ ) + { + ESPWriteReg32( dev, DMCOMMAND, 0x00220000 | 0x1000 | i ); // Read xN into DATA0. + Write1( eps, (DMDATA0<<1) | 0 ); + } + ESPWriteReg32( dev, DMCOMMAND, 0x00220000 | 0x7b1 ); // Read xN into DATA0. + Write1( eps, (DMDATA0<<1) | 0 ); + ESPFlushLLCommands( eps ); + if( eps->replylen - 1 != (iss->nr_registers_for_debug+1)*5 ) + { + fprintf( stderr, "Error: Weird reply trying to read all CPU registers (%d/%d)\n", eps->replylen - 1, (iss->nr_registers_for_debug+1)*5 ); + return -1; + } + uint8_t * e = eps->reply + 1; + for( i = 0; i < iss->nr_registers_for_debug + 1; i++ ) + { + if( *e ) + { + fprintf( stderr, "Error reading reg at %d %d\n", i, *e ); + return -2; + } + e++; + memcpy( regret + i, e, 4 ); + e += 4; + } + return 0; +} + +int DefaultReadBinaryBlob( void * dev, uint32_t address_to_read_from, uint32_t read_size, uint8_t * blob ); +int ESPReadBinaryBlob( void * dev, uint32_t address_to_read_from, uint32_t read_size, uint8_t * blob ) +{ + struct ESP32ProgrammerStruct * eps = (struct ESP32ProgrammerStruct *)dev; + + uint32_t address_to_read_from_2 = address_to_read_from; + uint8_t * blob_2 = blob; + int r = 0; + + if( read_size == 0 ) + { + return 0; + } + + if( address_to_read_from_2 & 3 ) + { + // We have to read out the first few bits. + int nrb2r = 4 - (address_to_read_from_2 & 3); + if( nrb2r < read_size ) nrb2r = read_size; + r = DefaultReadBinaryBlob( dev, address_to_read_from_2, read_size, blob_2 ); + if( r ) return r; + address_to_read_from_2 += nrb2r; + blob_2 += nrb2r; + read_size -= nrb2r; + } + + int words = read_size / 4; + + ESPFlushLLCommands( dev ); + int w = 0; + int words_this_group = 0; + while( w <= words ) + { + if( w < words ) + { + Write2LE( eps, 0x09fe ); + Write4LE( eps, address_to_read_from_2 ); + address_to_read_from_2 += 4; + read_size -= 4; + words_this_group++; + } + if( ( SRemain( eps ) < 7 ) || w == words ) + { + ESPFlushLLCommands( dev ); + uint8_t * resp = eps->reply + 1; + int i; + for( i = 0; i < words_this_group; i++ ) + { + if( resp[0] ) return resp[0]; + memcpy( blob_2, resp + 1, 4 ); + resp += 5; + blob_2 += 4; + } + } + w++; + } + + if( read_size ) + { + r = DefaultReadBinaryBlob( dev, address_to_read_from_2, read_size, blob_2 ); + if( r ) return r; + } + + return 0; +} + + int ESPFlushLLCommands( void * dev ) { struct ESP32ProgrammerStruct * eps = (struct ESP32ProgrammerStruct *)dev; @@ -448,6 +555,8 @@ void * TryInit_ESP32S2CHFUN() MCF.WaitForFlash = ESPWaitForFlash; MCF.WaitForDoneOp = ESPWaitForDoneOp; MCF.BlockWrite64 = ESPBlockWrite64; + MCF.ReadBinaryBlob = ESPReadBinaryBlob; + MCF.ReadAllCPURegisters = ESPReadAllCPURegisters; // Reset internal programmer state. Write2LE( eps, 0x0afe ); From 59e5ec6182e496217cda63ace56b90c25a008d32 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Fri, 15 Nov 2024 16:31:51 -0800 Subject: [PATCH 07/20] Properly define flash memory section. --- minichlink/minichgdb.c | 2 +- minichlink/minichlink.exe | Bin 126464 -> 126464 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/minichlink/minichgdb.c b/minichlink/minichgdb.c index 1598b6db..e3491d55 100644 --- a/minichlink/minichgdb.c +++ b/minichlink/minichgdb.c @@ -13,7 +13,7 @@ const char* MICROGDBSTUB_MEMORY_MAP = "l" "" "" -" " +" " " %d" " " " " diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index da76fd4346a04f1a83e62071538ca3f7ff78f740..29bafa88074ecec52c10c4a84e46b396b5a7051f 100755 GIT binary patch delta 416 zcmZp;!`^U*eL@G*`{xt8{FttJG~U{Ji*frT*0h|&;*9N6CNp|5ZhtU^aV9sT(e$bX ZjQXP#ZG&Jt*DA(eioodD&UOaK005MtgtPzv delta 414 zcmZp;!`^U*eL@G5kMP7UKPG|Z##>u&F>aqUZ3-jb_Jxxf?HRY Date: Fri, 15 Nov 2024 22:01:34 -0800 Subject: [PATCH 08/20] Cleanup and unify vscode projects. --- examples/debugprintfdemo/.vscode/launch.json | 33 +++-- .../debugprintfdemo/.vscode/settings.json | 6 +- examples/debugprintfdemo/.vscode/tasks.json | 123 +++++++++++++----- examples/template/.vscode/launch.json | 33 +++-- examples/template/.vscode/settings.json | 6 +- examples/template/.vscode/tasks.json | 123 +++++++++++++----- 6 files changed, 242 insertions(+), 82 deletions(-) diff --git a/examples/debugprintfdemo/.vscode/launch.json b/examples/debugprintfdemo/.vscode/launch.json index 6ec54fdc..f0b578dd 100644 --- a/examples/debugprintfdemo/.vscode/launch.json +++ b/examples/debugprintfdemo/.vscode/launch.json @@ -1,10 +1,10 @@ { "configurations": [ { - "name": "GDB Debug Target", + "name": "Debug Target", "type": "cppdbg", "request": "launch", - "program": "debugprintfdemo.elf", + "program": "${workspaceFolder}/debugprintfdemo.elf", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}", @@ -19,15 +19,30 @@ "ignoreFailures": true } ], + "svdPath": "${workspaceFolder}/../../misc/CH32V003xx.svd", // extension 'Peripheral Viewer' by mcu-debug (cortex-debug) "miDebuggerPath": "gdb-multiarch", - "miDebuggerServerAddress": "127.0.0.1:2000" + "miDebuggerServerAddress": "127.0.0.1:2000", }, { - "name": "Run Only (In Terminal)", + "name": "Flash and run in terminal", + "type": "node-terminal", + "request": "launch", + "internalConsoleOptions": "neverOpen", + "command": "make closechlink clean; make flash monitor", + }, + { + "name": "Compile and Flash", "type": "node", "request": "launch", - "program": "", - "preLaunchTask": "run_flash_and_monitor", - } - ] -} + "internalConsoleOptions": "neverOpen", + "preLaunchTask" : "kill_all_tasks", + "postDebugTask": "run_flash", + "presentation": { + "hidden": false, + "group": "terminaloutput", + "order": 1 + }, + "runtimeExecutable": "echo" + } + ] +} \ No newline at end of file diff --git a/examples/debugprintfdemo/.vscode/settings.json b/examples/debugprintfdemo/.vscode/settings.json index e81e0118..321e3cd9 100644 --- a/examples/debugprintfdemo/.vscode/settings.json +++ b/examples/debugprintfdemo/.vscode/settings.json @@ -3,7 +3,7 @@ "makefile.launchConfigurations": [ { "cwd": "", - "sbinaryPath": "debugprintfdemo.elf", + "sbinaryPath": "debugprintf.elf", "binaryArgs": [] } ], @@ -11,5 +11,5 @@ "editor.tabSize": 4, "files.associations": { "ch32v003fun.h": "c" - } -} + }, +} \ No newline at end of file diff --git a/examples/debugprintfdemo/.vscode/tasks.json b/examples/debugprintfdemo/.vscode/tasks.json index 5d5ffdf8..9ad0c3ef 100644 --- a/examples/debugprintfdemo/.vscode/tasks.json +++ b/examples/debugprintfdemo/.vscode/tasks.json @@ -9,60 +9,125 @@ "focus": false, "group": "build", "panel": "shared", + "close": true, "showReuseMessage" : false }, - "command": "make closechlink flash", - }, - { - "type": "shell", + "command": "make closechlink clean; make flash monitor", "label": "run_flash_and_monitor", - "presentation": { - "echo": true, - "focus": false, - "group": "build", - "panel": "shared", - "showReuseMessage" : false + "group": { + "kind": "build", + "isDefault": true }, - "command": "make flash monitor", + "runOptions": { + "instanceLimit": 1, + }, + "isBackground": true, + "problemMatcher": { // https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher + "owner": "cpp", + "fileLocation": [ + "relative", + "${workspaceFolder}" + ], + "pattern": { + "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5 + }, + "background": { + "activeOnStart": false, + "beginsPattern": "^.*Image written.*", + "endsPattern": "^.*GDBServer*" + }, + } }, { "type": "shell", "label": "run_flash_and_gdbserver", - "command": "make flash gdbserver", - + "command": "make clean closechlink; make flash gdbserver", "presentation": { "echo": true, - "focus": false, + "focus": true, "group": "build", "panel": "shared", + "reveal": "always", "close": true, - "showReuseMessage" : false + "showReuseMessage": false }, - "isBackground": true, "options": { "cwd": "${workspaceFolder}", }, "runOptions": { - "instanceLimit": 2, - }, + "instanceLimit": 1, + }, "group": "build", - "problemMatcher": { - "pattern": [ - { - "regexp": ".", - "file": 1, - "location": 2, - "message": 3 - } + "problemMatcher": { // https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher + "owner": "cpp", + "fileLocation": [ + "relative", + "${workspaceFolder}" ], - + "pattern": { + "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5 + }, "background": { "activeOnStart": false, "beginsPattern": "^.*Image written.*", "endsPattern": "^.*GDBServer*" - } + }, + } + }, + { + "type": "shell", + "label": "run_flash", + "command": "make clean closechlink; make flash", + "presentation": { + "echo": true, + "focus": true, + "group": "build", + "panel": "shared", + "close": true, + "reveal": "always", + "showReuseMessage": true }, + "isBackground": false, + "options": { + "cwd": "${workspaceFolder}", + }, + "runOptions": { + "instanceLimit": 1, + }, + "group": "build", + "problemMatcher": { // https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher + "owner": "cpp", + "fileLocation": [ + "relative", + "${workspaceFolder}" + ], + "pattern": { + "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5 + }, + } + }, + { + "type": "process", + "label" : "kill_all_tasks", + "command":[ + "${command:workbench.action.tasks.terminate} terminateAll", + ] } ] -} +} \ No newline at end of file diff --git a/examples/template/.vscode/launch.json b/examples/template/.vscode/launch.json index 6ec54fdc..e86da74b 100644 --- a/examples/template/.vscode/launch.json +++ b/examples/template/.vscode/launch.json @@ -1,10 +1,10 @@ { "configurations": [ { - "name": "GDB Debug Target", + "name": "Debug Target", "type": "cppdbg", "request": "launch", - "program": "debugprintfdemo.elf", + "program": "${workspaceFolder}/template.elf", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}", @@ -19,15 +19,30 @@ "ignoreFailures": true } ], + "svdPath": "${workspaceFolder}/../../misc/CH32V003xx.svd", // extension 'Peripheral Viewer' by mcu-debug (cortex-debug) "miDebuggerPath": "gdb-multiarch", - "miDebuggerServerAddress": "127.0.0.1:2000" + "miDebuggerServerAddress": "127.0.0.1:2000", }, { - "name": "Run Only (In Terminal)", + "name": "Flash and run in terminal", + "type": "node-terminal", + "request": "launch", + "internalConsoleOptions": "neverOpen", + "command": "make closechlink clean; make flash monitor", + }, + { + "name": "Compile and Flash", "type": "node", "request": "launch", - "program": "", - "preLaunchTask": "run_flash_and_monitor", - } - ] -} + "internalConsoleOptions": "neverOpen", + "preLaunchTask" : "kill_all_tasks", + "postDebugTask": "run_flash", + "presentation": { + "hidden": false, + "group": "terminaloutput", + "order": 1 + }, + "runtimeExecutable": "echo" + } + ] +} \ No newline at end of file diff --git a/examples/template/.vscode/settings.json b/examples/template/.vscode/settings.json index e81e0118..8b9feef1 100644 --- a/examples/template/.vscode/settings.json +++ b/examples/template/.vscode/settings.json @@ -3,7 +3,7 @@ "makefile.launchConfigurations": [ { "cwd": "", - "sbinaryPath": "debugprintfdemo.elf", + "sbinaryPath": "template.elf", "binaryArgs": [] } ], @@ -11,5 +11,5 @@ "editor.tabSize": 4, "files.associations": { "ch32v003fun.h": "c" - } -} + }, +} \ No newline at end of file diff --git a/examples/template/.vscode/tasks.json b/examples/template/.vscode/tasks.json index 5d5ffdf8..9ad0c3ef 100644 --- a/examples/template/.vscode/tasks.json +++ b/examples/template/.vscode/tasks.json @@ -9,60 +9,125 @@ "focus": false, "group": "build", "panel": "shared", + "close": true, "showReuseMessage" : false }, - "command": "make closechlink flash", - }, - { - "type": "shell", + "command": "make closechlink clean; make flash monitor", "label": "run_flash_and_monitor", - "presentation": { - "echo": true, - "focus": false, - "group": "build", - "panel": "shared", - "showReuseMessage" : false + "group": { + "kind": "build", + "isDefault": true }, - "command": "make flash monitor", + "runOptions": { + "instanceLimit": 1, + }, + "isBackground": true, + "problemMatcher": { // https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher + "owner": "cpp", + "fileLocation": [ + "relative", + "${workspaceFolder}" + ], + "pattern": { + "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5 + }, + "background": { + "activeOnStart": false, + "beginsPattern": "^.*Image written.*", + "endsPattern": "^.*GDBServer*" + }, + } }, { "type": "shell", "label": "run_flash_and_gdbserver", - "command": "make flash gdbserver", - + "command": "make clean closechlink; make flash gdbserver", "presentation": { "echo": true, - "focus": false, + "focus": true, "group": "build", "panel": "shared", + "reveal": "always", "close": true, - "showReuseMessage" : false + "showReuseMessage": false }, - "isBackground": true, "options": { "cwd": "${workspaceFolder}", }, "runOptions": { - "instanceLimit": 2, - }, + "instanceLimit": 1, + }, "group": "build", - "problemMatcher": { - "pattern": [ - { - "regexp": ".", - "file": 1, - "location": 2, - "message": 3 - } + "problemMatcher": { // https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher + "owner": "cpp", + "fileLocation": [ + "relative", + "${workspaceFolder}" ], - + "pattern": { + "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5 + }, "background": { "activeOnStart": false, "beginsPattern": "^.*Image written.*", "endsPattern": "^.*GDBServer*" - } + }, + } + }, + { + "type": "shell", + "label": "run_flash", + "command": "make clean closechlink; make flash", + "presentation": { + "echo": true, + "focus": true, + "group": "build", + "panel": "shared", + "close": true, + "reveal": "always", + "showReuseMessage": true }, + "isBackground": false, + "options": { + "cwd": "${workspaceFolder}", + }, + "runOptions": { + "instanceLimit": 1, + }, + "group": "build", + "problemMatcher": { // https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher + "owner": "cpp", + "fileLocation": [ + "relative", + "${workspaceFolder}" + ], + "pattern": { + "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$", + "file": 1, + "line": 2, + "column": 3, + "severity": 4, + "message": 5 + }, + } + }, + { + "type": "process", + "label" : "kill_all_tasks", + "command":[ + "${command:workbench.action.tasks.terminate} terminateAll", + ] } ] -} +} \ No newline at end of file From 497b7fc72cee78389063e3bb6ea9d7e0818756b8 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Sat, 16 Nov 2024 00:22:05 -0800 Subject: [PATCH 09/20] Super unbrick mode now unlocked. It just continuously tries to unbrick. --- minichlink/minichlink.c | 43 ++++++++++++++++++++----------------- minichlink/minichlink.exe | Bin 126464 -> 126464 bytes minichlink/pgm-wch-linke.c | 6 ++++-- 3 files changed, 27 insertions(+), 22 deletions(-) diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index f0e8c972..ae11522d 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -2297,11 +2297,11 @@ int DefaultUnbrick( void * dev ) MCF.DelayUS( dev, 60000 ); MCF.DelayUS( dev, 60000 ); MCF.Control3v3( dev, 1 ); - MCF.DelayUS( dev, 100 ); - MCF.FlushLLCommands( dev ); printf( "Connection starting\n" ); + MCF.FlushLLCommands( dev ); + int timeout = 0; - int max_timeout = 500; + int max_timeout = 50000; // An absurdly long time. uint32_t ds = 0; for( timeout = 0; timeout < max_timeout; timeout++ ) { @@ -2323,22 +2323,30 @@ int DefaultUnbrick( void * dev ) if( ds != 0xffffffff && ds != 0x00000000 ) break; } - // Make sure we are in halt. - MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // Make the debug module work properly. - MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // Initiate a halt request. - MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // No, really make sure. - MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); + if( timeout == max_timeout ) + { + fprintf( stderr, "Timed out trying to unbrick\n" ); + return -5; + } + + int i; + for( i = 0; i < 10; i++ ) + { + // Make sure we are in halt. + MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // Make the debug module work properly. + MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // Initiate a halt request. + MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // No, really make sure. + MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); + + // After more experimentation, it appaers to work best by not clearing the halt request. + MCF.FlushLLCommands( dev ); + } + + MCF.WriteReg32( dev, DMABSTRACTCS, 0x00000700 ); // Clear out possible abstractcs errors. int r = MCF.ReadReg32( dev, DMSTATUS, &ds ); printf( "DMStatus After Halt: /%d/%08x\n", r, ds ); -// Many times we would clear the halt request, but in this case, we want to just leave it here, to prevent it from booting. -// TODO: Experiment and see if this is needed/wanted in cases. NOTE: If you don't clear halt request, progarmmers can get stuck. -// MCF.WriteReg32( dev, DMCONTROL, 0x00000001 ); // Clear Halt Request. - - // After more experimentation, it appaers to work best by not clearing the halt request. - MCF.FlushLLCommands( dev ); - // Override all option bytes and reset to factory settings, unlocking all flash sections. uint8_t option_data[] = { 0xa5, 0x5a, 0x97, 0x68, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00 }; if( MCF.WriteBinaryBlob != DefaultWriteBinaryBlob ) @@ -2349,11 +2357,6 @@ int DefaultUnbrick( void * dev ) MCF.DelayUS( dev, 20000 ); - if( timeout == max_timeout ) - { - fprintf( stderr, "Timed out trying to unbrick\n" ); - return -5; - } MCF.Erase( dev, 0, 0, 1); MCF.FlushLLCommands( dev ); return -5; diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index 29bafa88074ecec52c10c4a84e46b396b5a7051f..25ef6cb64b63093fdec10ec40b4fcf88f620c1ee 100755 GIT binary patch delta 26003 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 Oyv@26&$`W)vi|}c^^JZ2 delta 25949 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 diff --git a/minichlink/pgm-wch-linke.c b/minichlink/pgm-wch-linke.c index cab605e6..c09a7c4b 100644 --- a/minichlink/pgm-wch-linke.c +++ b/minichlink/pgm-wch-linke.c @@ -518,6 +518,8 @@ static int LEControl5v( void * d, int bOn ) return 0; } +// Official unbrick unreliable on x-series devices. +/* static int LEUnbrick( void * d ) { printf( "Sending unbrick\n" ); @@ -526,7 +528,7 @@ static int LEUnbrick( void * d ) printf( "Done unbrick\n" ); return 0; } - +*/ static int LEConfigureNRSTAsGPIO( void * d, int one_if_yes_gpio ) { @@ -584,7 +586,7 @@ void * TryInit_WCHLinkE() MCF.SetupInterface = LESetupInterface; MCF.Control3v3 = LEControl3v3; MCF.Control5v = LEControl5v; - MCF.Unbrick = LEUnbrick; + //MCF.Unbrick = LEUnbrick; // MCF.ConfigureNRSTAsGPIO = LEConfigureNRSTAsGPIO; MCF.ConfigureReadProtection = LEConfigureReadProtection; From d1b10fe7d979f74082f716a38e3561913da15db0 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Sat, 16 Nov 2024 13:18:20 -0800 Subject: [PATCH 10/20] Working on trying to make the v307 unbrick work --- minichlink/minichlink.c | 31 +++++++++++++++++++++---------- minichlink/minichlink.h | 4 ++-- minichlink/pgm-b003fun.c | 4 ++-- minichlink/pgm-esp32s2-ch32xx.c | 2 +- minichlink/pgm-wch-linke.c | 6 +++--- 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index ae11522d..addd11f3 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -1273,10 +1273,11 @@ static int DefaultWriteWord( void * dev, uint32_t address_to_write, uint32_t dat return ret; } -int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob_size, uint8_t * blob ) +int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob_size, const uint8_t * blob ) { // NOTE IF YOU FIX SOMETHING IN THIS FUNCTION PLEASE ALSO UPDATE THE PROGRAMMERS. // this is only fallback functionality for really realy basic programmers. + // it is also used in unbrick. uint32_t rw; struct InternalState * iss = (struct InternalState*)(((struct ProgrammerStructBase*)dev)->internal); @@ -1324,10 +1325,13 @@ int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob { MCF.WriteWord( dev, 0x40022004, 0x45670123 ); // KEYR MCF.WriteWord( dev, 0x40022004, 0xCDEF89AB ); + + // These registers are not on or required on the v20x / v30x, but no harm in writing. MCF.WriteWord( dev, 0x40022008, 0x45670123 ); // OBWRE MCF.WriteWord( dev, 0x40022008, 0xCDEF89AB ); MCF.WriteWord( dev, 0x40022028, 0x45670123 ); //(FLASH_BOOT_MODEKEYP) MCF.WriteWord( dev, 0x40022028, 0xCDEF89AB ); //(FLASH_BOOT_MODEKEYP) + MCF.ReadWord( dev, 0x40022010, &temp ); MCF.ReadWord( dev, 0x4002200c, &temp ); } @@ -1336,15 +1340,14 @@ int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob if( temp & 0x8000 ) { fprintf( stderr, "Error: Critical memory zone is still locked out\n" ); - return -10; } if( MCF.WaitForFlash ) MCF.WaitForFlash( dev ); MCF.ReadWord( dev, 0x40022010, &temp ); + if( !(temp & (1<<9)) ) // Check OBWRE { - fprintf( stderr, "Error: Option Byte Unlock Failed\n" ); - return -10; + fprintf( stderr, "Error: Option Byte Unlock Failed (FLASH_CTRL=%08x)\n", temp ); } // Perform erase. @@ -2347,13 +2350,21 @@ int DefaultUnbrick( void * dev ) int r = MCF.ReadReg32( dev, DMSTATUS, &ds ); printf( "DMStatus After Halt: /%d/%08x\n", r, ds ); + DefaultDetermineChipType( dev ); + struct InternalState * iss = (struct InternalState*)(((struct ProgrammerStructBase*)dev)->internal); + printf( "Chip Type: %d\n", iss->target_chip_type ); + // Override all option bytes and reset to factory settings, unlocking all flash sections. - uint8_t option_data[] = { 0xa5, 0x5a, 0x97, 0x68, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00 }; - if( MCF.WriteBinaryBlob != DefaultWriteBinaryBlob ) - { - fprintf( stderr, "Warning, using nonstandard WriteBinaryBlob. Unbrick may not work.\n" ); - } - MCF.WriteBinaryBlob(dev, 0x1ffff800, sizeof( option_data ), option_data ); + static const uint8_t option_data_003_x03x[] = { 0xa5, 0x5a, 0x97, 0x68, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00 }; + static const uint8_t option_data_20x_30x[] = { 0xa5, 0x5a, 0x3f, 0xc0, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00 }; + + InternalUnlockFlash(dev, iss); + + const uint8_t * option_data = + ( iss->target_chip_type == CHIP_CH32X03x || iss->target_chip_type == CHIP_CH32V003 ) ? + option_data_003_x03x : option_data_20x_30x; + + DefaultWriteBinaryBlob(dev, 0x1ffff800, sizeof( option_data ), option_data ); MCF.DelayUS( dev, 20000 ); diff --git a/minichlink/minichlink.h b/minichlink/minichlink.h index 362fa278..0ed4a2f9 100644 --- a/minichlink/minichlink.h +++ b/minichlink/minichlink.h @@ -31,7 +31,7 @@ struct MiniChlinkFunctions int (*SetSplit)( void * dev, enum RAMSplit split ); // No boundary or limit rules. Must support any combination of alignment and size. - int (*WriteBinaryBlob)( void * dev, uint32_t address_to_write, uint32_t blob_size, uint8_t * blob ); + int (*WriteBinaryBlob)( void * dev, uint32_t address_to_write, uint32_t blob_size, const uint8_t * blob ); int (*ReadBinaryBlob)( void * dev, uint32_t address_to_read_from, uint32_t read_size, uint8_t * blob ); int (*Erase)( void * dev, uint32_t address, uint32_t length, int type ); //type = 0 for fast, 1 for whole-chip @@ -62,7 +62,7 @@ struct MiniChlinkFunctions int (*PrintChipInfo)( void * dev ); // Geared for flash, but could be anything. Note: If in flash, must also erase. - int (*BlockWrite64)( void * dev, uint32_t address_to_write, uint8_t * data ); + int (*BlockWrite64)( void * dev, uint32_t address_to_write, const uint8_t * data ); // Returns positive if received text. // Returns negative if error. diff --git a/minichlink/pgm-b003fun.c b/minichlink/pgm-b003fun.c index a84f4be6..ce9cebf8 100644 --- a/minichlink/pgm-b003fun.c +++ b/minichlink/pgm-b003fun.c @@ -232,7 +232,7 @@ static int B003FunDelayUS( void * dev, int microseconds ) } // Does not handle erasing -static int InternalB003FunWriteBinaryBlob( void * dev, uint32_t address_to_write_to, uint32_t write_size, uint8_t * blob ) +static int InternalB003FunWriteBinaryBlob( void * dev, uint32_t address_to_write_to, uint32_t write_size, const uint8_t * blob ) { struct B003FunProgrammerStruct * eps = (struct B003FunProgrammerStruct *)dev; @@ -436,7 +436,7 @@ static int B003FunReadWord( void * dev, uint32_t address_to_read, uint32_t * dat return B003FunReadBinaryBlob( dev, address_to_read, 4, (uint8_t*)data ); } -static int B003FunBlockWrite64( void * dev, uint32_t address_to_write, uint8_t * data ) +static int B003FunBlockWrite64( void * dev, uint32_t address_to_write, const uint8_t * data ) { struct B003FunProgrammerStruct * eps = (struct B003FunProgrammerStruct*) dev; struct InternalState * iss = eps->internal; diff --git a/minichlink/pgm-esp32s2-ch32xx.c b/minichlink/pgm-esp32s2-ch32xx.c index 031cac39..2c454a31 100644 --- a/minichlink/pgm-esp32s2-ch32xx.c +++ b/minichlink/pgm-esp32s2-ch32xx.c @@ -347,7 +347,7 @@ int ESPExit( void * dev ) return 0; } -int ESPBlockWrite64( void * dev, uint32_t address_to_write, uint8_t * data ) +int ESPBlockWrite64( void * dev, uint32_t address_to_write, const uint8_t * data ) { int writeretry = 0; struct ESP32ProgrammerStruct * eps = (struct ESP32ProgrammerStruct *)dev; diff --git a/minichlink/pgm-wch-linke.c b/minichlink/pgm-wch-linke.c index c09a7c4b..9b2ea655 100644 --- a/minichlink/pgm-wch-linke.c +++ b/minichlink/pgm-wch-linke.c @@ -69,7 +69,7 @@ static int checkChip(enum RiscVChip chip) { // For non-ch32v003 chips. //static int LEReadBinaryBlob( void * d, uint32_t offset, uint32_t amount, uint8_t * readbuff ); static int InternalLinkEHaltMode( void * d, int mode ); -static int LEWriteBinaryBlob( void * d, uint32_t address_to_write, uint32_t len, uint8_t * blob ); +static int LEWriteBinaryBlob( void * d, uint32_t address_to_write, uint32_t len, const uint8_t * blob ); #define WCHTIMEOUT 5000 #define WCHCHECK(x) if( (status = x) ) { fprintf( stderr, "Bad USB Operation on " __FILE__ ":%d (%d)\n", __LINE__, status ); exit( status ); } @@ -767,7 +767,7 @@ static int LEReadBinaryBlob( void * d, uint32_t offset, uint32_t amount, uint8_t } #endif -static int LEWriteBinaryBlob( void * d, uint32_t address_to_write, uint32_t len, uint8_t * blob ) +static int LEWriteBinaryBlob( void * d, uint32_t address_to_write, uint32_t len, const uint8_t * blob ) { libusb_device_handle * dev = ((struct LinkEProgrammerStruct*)d)->devh; struct InternalState * iss = (struct InternalState*)(((struct LinkEProgrammerStruct*)d)->internal); @@ -835,7 +835,7 @@ static int LEWriteBinaryBlob( void * d, uint32_t address_to_write, uint32_t len, } else { - WCHCHECK( libusb_bulk_transfer( (libusb_device_handle *)dev, 0x02, blob+pplace, iss->sector_size, &transferred, WCHTIMEOUT ) ); + WCHCHECK( libusb_bulk_transfer( (libusb_device_handle *)dev, 0x02, ((uint8_t*)blob)+pplace, iss->sector_size, &transferred, WCHTIMEOUT ) ); } } From d91e4732d08a6d78e3c710eb597299d8914ca49e Mon Sep 17 00:00:00 2001 From: cnlohr Date: Sat, 16 Nov 2024 13:54:18 -0800 Subject: [PATCH 11/20] Tested working unbrick for v30x (and by extension v20x) --- minichlink/minichlink.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index addd11f3..2cb80e40 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -1321,7 +1321,9 @@ int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob uint32_t temp; MCF.ReadWord( dev, 0x4002200c, &temp ); - if( temp & 0x8000 ) + //STATR & BOOT only exists on the 003 and x03x + // No issue if we force an unlock anyway. + //if( temp & 0x8000 ) { MCF.WriteWord( dev, 0x40022004, 0x45670123 ); // KEYR MCF.WriteWord( dev, 0x40022004, 0xCDEF89AB ); @@ -1331,9 +1333,6 @@ int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob MCF.WriteWord( dev, 0x40022008, 0xCDEF89AB ); MCF.WriteWord( dev, 0x40022028, 0x45670123 ); //(FLASH_BOOT_MODEKEYP) MCF.WriteWord( dev, 0x40022028, 0xCDEF89AB ); //(FLASH_BOOT_MODEKEYP) - - MCF.ReadWord( dev, 0x40022010, &temp ); - MCF.ReadWord( dev, 0x4002200c, &temp ); } MCF.ReadWord( dev, 0x4002200c, &temp ); @@ -1366,11 +1365,19 @@ int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob int i; for( i = 0; i < 8; i++ ) { + // OBPG = FLASH_CTLR_OPTPG MCF.WriteWord( dev, 0x40022010, FLASH_CTLR_OPTPG | FLASH_CTLR_OPTWRE ); MCF.WriteWord( dev, 0x40022010, FLASH_CTLR_OPTPG | FLASH_CTLR_STRT | FLASH_CTLR_OPTWRE ); - MCF.WriteHalfWord( dev, i*2+base, block[i*2+0] | (block[i*2+1]<<8) ); - + uint32_t writeaddy = i*2+base; + uint16_t writeword = block[i*2+0] | (block[i*2+1]<<8); + MCF.WriteHalfWord( dev, writeaddy, writeword ); if( MCF.WaitForFlash ) MCF.WaitForFlash( dev ); + uint16_t verify = 0; + MCF.ReadHalfWord( dev, writeaddy, &verify ); + if( verify != writeword ) + { + fprintf( stderr, "Warning when writing option bytes at %08x, %04x != %04x\n", writeaddy, writeword, verify ); + } MCF.ReadWord( dev, 0x4002200c, &temp ); if( temp & 0x10 ) { @@ -1378,8 +1385,9 @@ int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob return -9; } } - if( MCF.WaitForFlash ) MCF.WaitForFlash( dev ); + // Turn off OPTPG, OPTWRE. MCF.WriteWord( dev, 0x40022010, 0 ); + if( MCF.WaitForFlash ) MCF.WaitForFlash( dev ); return 0; } @@ -2355,8 +2363,8 @@ int DefaultUnbrick( void * dev ) printf( "Chip Type: %d\n", iss->target_chip_type ); // Override all option bytes and reset to factory settings, unlocking all flash sections. - static const uint8_t option_data_003_x03x[] = { 0xa5, 0x5a, 0x97, 0x68, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00 }; - static const uint8_t option_data_20x_30x[] = { 0xa5, 0x5a, 0x3f, 0xc0, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00 }; + static const uint8_t option_data_003_x03x[] = { 0xa5, 0x5a, 0x97, 0x68, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00 }; + static const uint8_t option_data_20x_30x[] = { 0xa5, 0x5a, 0x3f, 0xc0, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00 }; InternalUnlockFlash(dev, iss); @@ -2364,7 +2372,7 @@ int DefaultUnbrick( void * dev ) ( iss->target_chip_type == CHIP_CH32X03x || iss->target_chip_type == CHIP_CH32V003 ) ? option_data_003_x03x : option_data_20x_30x; - DefaultWriteBinaryBlob(dev, 0x1ffff800, sizeof( option_data ), option_data ); + DefaultWriteBinaryBlob(dev, 0x1ffff800, 16, option_data ); MCF.DelayUS( dev, 20000 ); From f364f46c60753e45df0a1abe3d1f01a53976e8f9 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Sat, 16 Nov 2024 15:44:17 -0800 Subject: [PATCH 12/20] Fix unaligned (start address) writes. --- minichlink/microgdbstub.h | 2 +- minichlink/minichlink.c | 3 +-- minichlink/pgm-esp32s2-ch32xx.c | 18 ++++++++++++------ 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index b06fa253..224c7ab2 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -814,7 +814,7 @@ void MicroGDBStubSendReply( const void * data, int len, int docs ) if( listenMode == 2 ) { - //printf( ">>>>%s<<<<(%d)\n", data ); + //printf( ">>>>%s<<<<\n", data ); send( serverSocket, data, len, MSG_NOSIGNAL ); } } diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index 2cb80e40..5cb697d4 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -1439,13 +1439,13 @@ int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob for( i = 0; i < sectorsize/64; i++ ) { int r = MCF.BlockWrite64( dev, base + i*64, blob + rsofar+i*64 ); - rsofar += 64; if( r ) { fprintf( stderr, "Error writing block at memory %08x (error = %d)\n", base, r ); return r; } } + rsofar += sectorsize; } else // Block Write not avaialble { @@ -1547,7 +1547,6 @@ int DefaultWriteBinaryBlob( void * dev, uint32_t address_to_write, uint32_t blob MCF.WriteWord( dev, j*4+base, *(uint32_t*)(tempblock + j * 4) ); // On the v2xx, v3xx, you also need to make sure FLASH->STATR & 2 is not set. This is only an issue when running locally. - rsofar += 4; } if( iss->target_chip_type == CHIP_CH32V20x || iss->target_chip_type == CHIP_CH32V30x ) diff --git a/minichlink/pgm-esp32s2-ch32xx.c b/minichlink/pgm-esp32s2-ch32xx.c index 2c454a31..54f2a6ac 100644 --- a/minichlink/pgm-esp32s2-ch32xx.c +++ b/minichlink/pgm-esp32s2-ch32xx.c @@ -132,10 +132,10 @@ int ESPReadAllCPURegisters( void * dev, uint32_t * regret ) } int DefaultReadBinaryBlob( void * dev, uint32_t address_to_read_from, uint32_t read_size, uint8_t * blob ); -int ESPReadBinaryBlob( void * dev, uint32_t address_to_read_from, uint32_t read_size, uint8_t * blob ) +int ESPReadBinaryBlob( void * dev, uint32_t address_to_read_from, uint32_t read_size_in, uint8_t * blob ) { + int read_size = read_size_in; struct ESP32ProgrammerStruct * eps = (struct ESP32ProgrammerStruct *)dev; - uint32_t address_to_read_from_2 = address_to_read_from; uint8_t * blob_2 = blob; int r = 0; @@ -157,6 +157,11 @@ int ESPReadBinaryBlob( void * dev, uint32_t address_to_read_from, uint32_t read_ read_size -= nrb2r; } + if( read_size <= 0 ) + { + return 0; + } + int words = read_size / 4; ESPFlushLLCommands( dev ); @@ -172,7 +177,7 @@ int ESPReadBinaryBlob( void * dev, uint32_t address_to_read_from, uint32_t read_ read_size -= 4; words_this_group++; } - if( ( SRemain( eps ) < 7 ) || w == words ) + if( ( SRemain( eps ) < 8 ) || ( words_this_group * 5 > eps->replysize - 4 ) || w == words ) { ESPFlushLLCommands( dev ); uint8_t * resp = eps->reply + 1; @@ -184,16 +189,17 @@ int ESPReadBinaryBlob( void * dev, uint32_t address_to_read_from, uint32_t read_ resp += 5; blob_2 += 4; } + words_this_group = 0; } w++; } - if( read_size ) + if( read_size > 0 ) { r = DefaultReadBinaryBlob( dev, address_to_read_from_2, read_size, blob_2 ); if( r ) return r; } - + return 0; } @@ -213,7 +219,7 @@ int ESPFlushLLCommands( void * dev ) int r; eps->commandbuffer[0] = 0xad; // Key report ID - eps->commandbuffer[eps->commandplace] = 0xff; + memset( eps->commandbuffer + eps->commandplace, 0xff, eps->commandbuffersize - eps->commandplace - 1 ); #if 0 int i; From 9de5fcfb7d0cd12ce4f4a25eddb62e8900e2f32d Mon Sep 17 00:00:00 2001 From: cnlohr Date: Sat, 16 Nov 2024 16:48:52 -0800 Subject: [PATCH 13/20] Add vCont support. --- minichlink/microgdbstub.h | 51 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 47 insertions(+), 4 deletions(-) diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index 224c7ab2..1b2cef09 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -98,6 +98,7 @@ uint8_t gdbchecksum = 0; int gdbbufferplace = 0; int gdbbufferstate = 0; int gdbrunningcsum = 0; +int gdbqnoackmode = 0; static inline char ToHEXNibble( int i ) { @@ -215,10 +216,11 @@ void HandleGDBPacket( void * dev, char * data, int len ) switch( cmd ) { case 'q': + case 'Q': if( StringMatch( data, "Attached" ) ) SendReplyFull( "1" ); //Attached to an existing process. else if( StringMatch( data, "Supported" ) ) - SendReplyFull( "PacketSize=f000;multiprocess+;hwbreak+;vContSupported+;qXfer:memory-map:read+" ); + SendReplyFull( "PacketSize=f000;hwbreak+;vContSupported+;qXfer:memory-map:read+;qXfer:threads:read+;QStartNoAckMode+" ); else if( StringMatch( data, "C") ) // Get Current Thread ID. (Can't be -1 or 0. Those are special) SendReplyFull( "QC1" ); else if( StringMatch( data, "fThreadInfo" ) ) // Query all active thread IDs (Can't be 0 or 1) @@ -230,6 +232,11 @@ void HandleGDBPacket( void * dev, char * data, int len ) SendReplyFull( "" ); else if( StringMatch( data, "Symbol" ) ) // Trace-Status SendReplyFull( "" ); + else if( StringMatch( data, "StartNoAckMode" ) ) + { + gdbqnoackmode = 1; + SendReplyFull( "OK" ); + } else if( StringMatch( data, "TStatus" ) ) // Trace-Status SendReplyFull( "" ); else if( StringMatch( data, "Rcmd," ) ) // "monitor " @@ -299,6 +306,11 @@ void HandleGDBPacket( void * dev, char * data, int len ) snprintf( map, mslen, MICROGDBSTUB_MEMORY_MAP, iss->flash_size, iss->sector_size, iss->ram_size ); SendReplyFull( map ); } + else if( StringMatch( data, "Xfer:threads" ) ) + { + static const char * emptyxml = "l\n\n"; + SendReplyFull( emptyxml ); + } else if( StringMatch( data, "ThreadExtraInfo" ) ) SendReplyFull( "4E2F41" ); else if( data[0] == 'P' ) @@ -418,9 +430,40 @@ void HandleGDBPacket( void * dev, char * data, int len ) case 'v': if( StringMatch( data, "Cont" ) ) // vCont? { - // Request a list of actions supported by the ‘vCont’ packet. - // We don't support vCont - SendReplyFull( "vCont;s;c;;" ); //no ;t because we don't implement them. + const char * de = data + 4; + if( de[0] == '?' ) + { + // Request a list of actions supported by the ‘vCont’ packet. + // We don't support vCont + SendReplyFull( "vCont;c;C;s;S" ); //no ;t because we don't implement them. + } + else if( de[0] == ';' ) + { + switch( de[1] ) + { + case 'c': + case 'C': + // TODO: Support continue-from-another-address + RVDebugExec( dev, (cmd == 'C')?HALT_TYPE_CONTINUE_WITH_SIGNAL:HALT_TYPE_CONTINUE, 0, 0 ); + //The real reply will be sent from RVNetPoll + break; + case 's': + case 'S': + // TODO: Support step-with-signal. + RVDebugExec( dev, HALT_TYPE_SINGLE_STEP, 0, 0 ); + //SendReplyFull( "T05" ); + //SendReplyFull( "OK" ); // Will be sent from RVNetPoll + RVHandleGDBBreakRequest( dev ); + RVSendGDBHaltReason( dev ); + break; + default: + SendReplyFull( "E 98" ); + } + } + else + { + SendReplyFull( "E 99" ); + } } else if( StringMatch( data, "MustReplyEmpty" ) ) //vMustReplyEmpty { From a884b4f1feae23f42932d45a58a2de8adeddd4a2 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Sat, 16 Nov 2024 16:57:29 -0800 Subject: [PATCH 14/20] remove threads as a feature --- minichlink/microgdbstub.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index 1b2cef09..3fdb3fe7 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -219,8 +219,8 @@ void HandleGDBPacket( void * dev, char * data, int len ) case 'Q': if( StringMatch( data, "Attached" ) ) SendReplyFull( "1" ); //Attached to an existing process. - else if( StringMatch( data, "Supported" ) ) - SendReplyFull( "PacketSize=f000;hwbreak+;vContSupported+;qXfer:memory-map:read+;qXfer:threads:read+;QStartNoAckMode+" ); + else if( StringMatch( data, "Supported" ) ) // qXfer:threads: + SendReplyFull( "PacketSize=f000;hwbreak+;vContSupported+;qXfer:memory-map:read+;read+;QStartNoAckMode+" ); else if( StringMatch( data, "C") ) // Get Current Thread ID. (Can't be -1 or 0. Those are special) SendReplyFull( "QC1" ); else if( StringMatch( data, "fThreadInfo" ) ) // Query all active thread IDs (Can't be 0 or 1) @@ -457,7 +457,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) RVSendGDBHaltReason( dev ); break; default: - SendReplyFull( "E 98" ); + SendReplyFull( "E 98" ); } } else From 9a6ea5bee091c0ea85bbc3fbb784b400a6ae23ae Mon Sep 17 00:00:00 2001 From: cnlohr Date: Sat, 16 Nov 2024 17:11:30 -0800 Subject: [PATCH 15/20] Update with s/c parsing --- minichlink/microgdbstub.h | 79 ++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index 3fdb3fe7..6baefa44 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -430,39 +430,58 @@ void HandleGDBPacket( void * dev, char * data, int len ) case 'v': if( StringMatch( data, "Cont" ) ) // vCont? { - const char * de = data + 4; - if( de[0] == '?' ) + char * de = data + 4; + char de0; + while( (de0 = *(de++)) ) { - // Request a list of actions supported by the ‘vCont’ packet. - // We don't support vCont - SendReplyFull( "vCont;c;C;s;S" ); //no ;t because we don't implement them. - } - else if( de[0] == ';' ) - { - switch( de[1] ) + printf( "DE0: %c\n", de0 ); + if( de0 == '?' ) { - case 'c': - case 'C': - // TODO: Support continue-from-another-address - RVDebugExec( dev, (cmd == 'C')?HALT_TYPE_CONTINUE_WITH_SIGNAL:HALT_TYPE_CONTINUE, 0, 0 ); - //The real reply will be sent from RVNetPoll - break; - case 's': - case 'S': - // TODO: Support step-with-signal. - RVDebugExec( dev, HALT_TYPE_SINGLE_STEP, 0, 0 ); - //SendReplyFull( "T05" ); - //SendReplyFull( "OK" ); // Will be sent from RVNetPoll - RVHandleGDBBreakRequest( dev ); - RVSendGDBHaltReason( dev ); - break; - default: - SendReplyFull( "E 98" ); + // Request a list of actions supported by the ‘vCont’ packet. + // We don't support vCont + SendReplyFull( "vCont;c;C;s;S" ); //no ;t because we don't implement them. + break; + } + else if( de0 == ';' ) + { + switch( de[0] ) + { + case 'c': + case 'C': + // TODO: Support continue-from-another-address + RVDebugExec( dev, (cmd == 'C')?HALT_TYPE_CONTINUE_WITH_SIGNAL:HALT_TYPE_CONTINUE, 0, 0 ); + //The real reply will be sent from RVNetPoll + break; + case 's': + case 'S': + // TODO: Support step-with-signal. + RVDebugExec( dev, HALT_TYPE_SINGLE_STEP, 0, 0 ); + //SendReplyFull( "T05" ); + //SendReplyFull( "OK" ); // Will be sent from RVNetPoll + //RVHandleGDBBreakRequest( dev ); + //RVSendGDBHaltReason( dev ); + break; + default: + SendReplyFull( "E 98" ); + break; + } + de++; + } + else if( de0 == ':' ) + { + // Parse off thread number and throw it away. + uint32_t signalnumber; + if( ReadHex( &de, -1, &signalnumber ) < 0 ) goto err; + } + else if( de0 == '#' ) + { + // We're done. + break; + } + else + { + SendReplyFull( "E 99" ); } - } - else - { - SendReplyFull( "E 99" ); } } else if( StringMatch( data, "MustReplyEmpty" ) ) //vMustReplyEmpty From 3010b31c18ca1b2ba8e64aef06db0a299d8b7380 Mon Sep 17 00:00:00 2001 From: cnlohr Date: Thu, 21 Nov 2024 23:52:39 -0800 Subject: [PATCH 16/20] Mirror c and s... let's try making s;c just single step normally. --- minichlink/microgdbstub.h | 10 ++++++---- minichlink/minichlink.exe | Bin 126464 -> 126976 bytes 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index 6baefa44..ca661702 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -211,7 +211,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) data++; char cmd = *(data++); - //printf( "DATA: [%c] %c%c%c%c%c%c%c%c%c\n",cmd, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8] ); + //printf( "DATA: [%c] %c%c%c%c%c%c%c%c%c%c%c%c\n",cmd, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], data[8], data[9], data[10], data[11] ); switch( cmd ) { @@ -430,9 +430,10 @@ void HandleGDBPacket( void * dev, char * data, int len ) case 'v': if( StringMatch( data, "Cont" ) ) // vCont? { + //printf( "CONT: %s\n", data ); char * de = data + 4; char de0; - while( (de0 = *(de++)) ) + if( (de0 = *(de++)) ) // was while? { printf( "DE0: %c\n", de0 ); if( de0 == '?' ) @@ -444,6 +445,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) } else if( de0 == ';' ) { + //printf( "de[0] = %c\n", de[0] ); switch( de[0] ) { case 'c': @@ -458,8 +460,8 @@ void HandleGDBPacket( void * dev, char * data, int len ) RVDebugExec( dev, HALT_TYPE_SINGLE_STEP, 0, 0 ); //SendReplyFull( "T05" ); //SendReplyFull( "OK" ); // Will be sent from RVNetPoll - //RVHandleGDBBreakRequest( dev ); - //RVSendGDBHaltReason( dev ); + RVHandleGDBBreakRequest( dev ); + RVSendGDBHaltReason( dev ); break; default: SendReplyFull( "E 98" ); diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index 25ef6cb64b63093fdec10ec40b4fcf88f620c1ee..f30d76f329cdae330af3823534eb62cc05d90415 100755 GIT binary patch delta 32697 zcmcG%34Bav`#*fnks-mDAS0IS5)y=jgoK2Q%rGG;_N~@fTSZA)T1<2jj4>K+I@VT| zR#jVDC1Ohiv6M!%O3_BEdPY<&rKsk--|L(+N%Z%;|L6UEKJVZ2+_|p%+V1_j*E7w! zRwt{xPVUm?e|AZl!m0o6aqWeAf)K%_@f>$&<(AIE+Lu@U(1#z)!uYnD&AWLnd}VNB zHkA*rd-)}ZctbCZt>@cD3`VTRza)+;Y(IPA_>A!!S2`4oS>O)`9LnzU%{vd)0WDPx zeDOb2liJT!REIZ!T)8TDgmoAC^XJ(Lp*3H|_6x0XW%umdAsBPKm+l5AncS=-t;N^&_gdY=*sdv zlIvUmTfDQE37S}8+YT15329;g$!Pa9J2V@9gh`t*G)OeXv)46#!n>cccQpp#}pqj%5##wxKS<2#kbp`>ChhjN0Q7oLDVB}qW9-fX)sb_1SbyN9IwxfHvPpV?MqwibJeo#NSNwVQda-63cE0{gmlfbery zcBgiiu3kvsDAlFCw)F|G%h^#WNe2R{GMrsdV1>93L}W%wnXzjhe}YVW*oBR*6FO`Z z32Ab!fnhx!G-}M)(T10cC%4xHX2S%froRGdC>;YRsZ9xqy`kgk0+W+-&9)NP@4#$D zq7Bqsv-M6mTIUhFTqltKjymFm*8sGP?U+fIS6Fo0 zTbwRQ5~{7h!>zMX)d{Mh(?-#;xRv5mB~Q1~R8{E?^5agZ!HWrbs5ZXO6KeLdQvHkt%e@ zEwoz^idTj9lhDf$LhVty_aG2u>Uf?0O8Cqxd*KB_C{zCBA>|FDN##hhsoXI9u zv(KDmel21wgSlEnRyx#P3o!R%zwqsg$OLg6`Q57L$FI-&YCy^R6es|iKZVA@&);$@TcN!Nxzh< z706i=<3Z;#lB3IP`VK%HX$P#&yxx2nX+C+0-EEN|{CJkN^IIVNBC*f>0xdmXf|q)X zZYkailiR=x15tAXHa!jbo>Y2=J`^&jWbu5pgy#|No)l=vud7JZQzdp*OVm{*YAX_d z_ET&utCpyJgnPnL{Oi@dqVlGOu`&Kl>mE|0y~0?Q|ET1Krzu|(nV05YWQ%*(shwhP_*I1-@>U6Evfvmq&F& z=Ezd@UXXfSrqvG;lB(rKE3_BnQe+y(X}D^+Sed5vZmF%2Z15>|B49?~?h?vTmcb*b zAjqAgO`zrc4%f1}gbfUAW0@+;ph>yv0u2VuXq(|@8wskSJU`j9+~X#z| z66P5+NU)t`ql1jm$tUGp7q0Xu2zKYXgG|dVLKZ^Yv=*SH+O<9>Sy@n@CZ|r2mXIst z7KFJa_MKoIgF}*X!7|m%goOw>zh{Ii<#3lu(odF+yjU3nPq5X&9U2CMl_Oz8gqh#cHpzo`pkrJr+IGq5sEB9kodO z%>|F~Ci%w%gRY=lHz(AHiLssRLL|Kr!m97oyHt&@pdrh<(=jYM#U;VVMnN$_(ia_n zAs05}Vn0Z5QwbQI7huJ!*kHRXj(fzehrA>BA7|rR1_eDVRvelxrzHw*$p6gt$GHLz zr67|2yJGfXOFtp6m>mUJSIn*hyj{%xZt3Sgx=Pc*aVWo7;O$oHQ_NyQTU(}KmUfq7 zXm6$5Km3Mrk0fb7xAe1PJogwy5Hgyp#gC$;heQ98s`D{)N_u-z!$e=L@K=TEK?vo6 zT$U=g5ON?`kDF-%E@nT3>by=t$?Vt}TF4%Rw(L68i{osi)I+31{PEOf8$q!y7{}?d zI}`6oblG2}wjtX;CI6Gz+F)Ji$z^zzn6|V2Va+T$h&Yz?@Z`!9yTf_umb9-0>(<0q zQ35X0o%_xm<=ne^$t89*$HZ(mjWgJu8>}}A9mYD6wY<<6UtU$(+KT)?sywYij1j-3 zI$kR@+xw*%Z9n(3xeWP995)hUZZ-x%io=-5+53$%+cT$Ptr}Z`UgS}Cmh|2Ow6S+&t}-3(UBDq4S~1(oJEGM8g1%&1MeQfZYH>QRz@ zCD=y0=@1PRuh}6+n`x`s2aZO`oUP~tom7+2vPmj+5autrPfGgUlz?0n8h*&uREMcRwyf_7LzC?b3MR+@l@YGmsO-RF@$$XNcHd?h92$gTZl%?#Lw^8P z#mO*PRT-2YNxvBVL(WOgn@9??sbIGL?VT}8DV}$A@rFQ9A*NLmlRz}+_QwPo93Fne zMO`9}b#l=yizjmHb<(KIdu+1Zlk^VRfaWCvSUG05qx9tVaRsX=O@vAtiAN|kO|V<| zEPA~vTnN-)9}{#S2~}siyzZ~3)&<)+M_F2G)4cO zl78J3ebZcP^i;cPwITla0%K2yPlpr?Z)!&C3Dm@SO43@KWIKuZJ4mh1-R;RM+{fI7 zI^1Q1gssSR9SIwx;}!di-Ci3vd#kGhWiB1drb3X%z|Xi5y#C~nMGj) zt+hS*>mk-Trp?Hg(LQN2|Aaqf)P4EOUk@=nZ40*AOxYFn4g7V=GI!7FiESFL2@iRK!RHPg&QL4I> z1zY1E>Rx(Cb*;;8NsbD(Q|(NcteyHrq{WBPz}5k~#gnB_;ilxfWas{{*?6 z4KBR;H*hcyx9YOLLCl`H)@Un7e_R_aMclKQa?v#LCA#G~;Gyj!$R1_&OY}FT?J4#l zVrs^Hk#S^sftqE<4GfsSX~678_6(6yiR&H~(v;(j*~nrlwsN(fND`LYjme%V`m{Um zGY&Doc7Y8?A3{xFHR8opG(`?p9Ac^M{CZ3J_MqD?AE4#6Qq}9IuK#*!J86usTC*6^?~P#X&Z@ZD@n?0-qou$sk>T`TGaiyKMt3 z>mZC+83FV>)n}>s^@jt9F3fqXGv6~grhmn`=3>igH|5HeZ!;}LFXklu7tlpLF14LZ zu@)wwmU4QdmQenlD8FjyqsRZTla03Dq9058lVGal$8bYS zA-{V-i_gqmh>9Arma=2Cd+f12GfO9}B_2{~#WjO{VYp-1-)w)o0E<#=sg&es?!n4S z8Rvsw1;&;W_#cJ;9(x~`0R=Yk|F}9orQ&W`*S*}x<*^SEa(RtZENPEOBtjSM%{k5l~%~E(JnKL_I_Cg>6k$(GFYE^Wad>2 zQmw_4wHU>k<;1_uSx*RXjBa}+$W={y)*=DcgbYtZ0oswP*d>{A4X9R^&h0bx8}q5+ zFf&esfTUl8X!PTX`tsT%=WDce#XX!@I3{^w?P6ew?PJ?#|4AJnHw{f3!TYCBNX1?*dLZZxkFKpK%` zq!dV~I#MTugW=Hs+8qE>+vRJLlusL5R~@oUOJFgNb?-1hxSq#WcJLLl^Vp6KVcOAo zlzyfeJ!DxPyVk)^8>3JHL7A4vG*Q6~hqjhY|COki{`xBG5|tKz9mO)I`y4RyXQZEL zbDU7%A@8_X?hjRBgz^a?Xz$%%kLB-4BX4EbqZ08+vH}v4>e=nhR_X+Yr;d-J2@= zH#lG`_rB z$)DLxud|0uiM0eB*(G<55VdnG36^W>L5y7c;y>T9+MNTM%!QBv9i7W6pwnDAlM{Eb zuATiO`pGO$?~tm!t)!0zjXI#QdfVD+7t8AGXW_tkVe9|Lmt?t-uBQ6c|3E7NjZCIi zn>-|oaY@*)2Dvk}S*B69ua;Xb(>%Rfa|M>FbA`Dessq{dA4)I+Y)Z~tZRRDAXn@ox zR43JP%>#=-RjkHIM17DJRsM-X>fp>)CB4J31#(a4Wr1>aOL0ndo4;iTyEL!=C!$4n zeQXazpK^AiOSgvO6tPlO?9xRR8P}>|ghJh;Qa`xJCdP%w+zXIRu2QL!FVfC0oDO*^ zg54fK5eZdAk}tBtxF$_M22~Nbh_NzKW$G`oyKyZB&rqZH%9Jg1sw`=w4YzdB?KeiK zLT6Q>g#RRDRE0h+W256kEklOMhp%R=QjY1N3F3esF$pSX2EJey zjJvINz^6NF#wuQjU4J3=4aLxVm5zG>F{E%Dr^Mo)0oT#aPnjgh5QHeEm|GLIWhIRw^~6u;9ri`}VU8g}U@j=3cB?>cGJ?ac8JK z=r80j3znNtWxNdj$)|gC7J#}p;I~vz0P+sol-=? zJ*((r@5%Izs{D4OuP8jnfJe!0ZM4=N< z=q|P96nY~!-J&T`noCd^1FI5#K%LyC>8WIBWEFj$VyKTopIt@os#NI&g?{@JB%I+9 zU0C6buH`Ea56vYIEAAAl{t9Vi}3i(HxQv0wYLhKWA)(iMKi81Vs%O4QdMq{h38!+Nsl zM4u``fEYN4y`JdPWq@k&B2Ho}qRrMGoGv?shO_Od7-6c)eRgb>BfErr#Ii$)A+;iT zp4~_c6CQ12p4~$%Yp^7)xtef9_JXfVb%b@6U7q{?ZO673#mFPS=cZvZ<#vAW$h1F> zeEwqrHd#Tkx2cqAKbBUWDe!R9Zp*Z}LoG3l3OwD!OEQtu?&7Lx$7Gt(*r`*s@)w}d zQmiV4Z6GM~p6w~T>ktej;#Z}X^CCZ1lEq0i1k8@al~`cIP6JgA*Gbf?Bz^Z9 zV&LD!(3I10^8;SwpI7;wZhqy~>U`40W|Xb=F|+M2@niORk6?Zi`=&<|{}qtY?f21h7H0?#@PI^$?L>nA7_6%c9c8wm)y*61hC!eFOE)T2k+>3j49r$$$KcR$$Z;yB^l{>NiKC$vRISub z-9Ai!_<_gh=i>F}EWT%4;MGdyp4KSK(xNCqSrlRV)j#RRa(lLji*AH^qNMMriC)Ae zpVl=lvyGCaw8gD3gfyE}r^&HjdUg+J`+rK{3hR*^5aJMoC!j4^;zZ^89aUkU8`|tTef+(DNTw z-#9}kd(P$?lM@`zIgD9NU)Yq>9am8YQ6r*Me{r&<=*Jk)nk-GDAfzgq9g$1Bs#Ugx9XEyYpEH-qzz49ly*>zT)S#x|EAgt} zG$7QVA3tU1OfC3#S)JYno?|J!yYekqcJDVrzrwN-i<&L8y0oWw=Ai!3-AeGDf)2Ve zQ39=#1(<_FXDNbj{T~DevUGD&-3Ulj)Ip)b*yrZhdVj)&$OWGL0Y4 za#BM0ShhVSoHwuwDIv|*$*!)bB1)<8QUlIo=)g&L8G`^^!V>QjK87L3Lrm9lIY5_G{ zqMp_*_SjKlsWU&dEeOZCwmmy^HF8^H;!1VIK96DBUizZNP<6W;b05t$S+*{d9I<2A zjQ;(2Jv-FDogj5$xBL6?wOF0BE&Lm7N7`V11e4N+#fD*SHQJ_!hSP+C`=}zZHO?aJ zCLE%My@DkIp3`Kuw^nw~jHu44p4kTs;On#N1DZGabrkjL<)O>v{83Lv6@SaL1Ecth ztoy)DfhRhm-M>QStcPSF57|zJuR;12k~>-Mz##8@$ROzotwJnjg#%~v9<0-#twZnA zl@oO&oW7kBdtnu5eLI{_wMSlqkIcY{c;s0i6}{07jWz?;Oxokn5I?#@M|*DK`0}mUtsxzo z#8er0PTri393}mito_j5UcN4*XV;G##ug5J8g<=)Ea#lgs4eMt6yh<6U0VzaId1*2 zYSz18VFIyfK4zZ`Gx9ceXIN9g^EXy|cu<3vAO^o&mnNf--&o9Wk zyu2oI_$5geEuH zlaYh@T-I+?n7-pOp35%Gz!@{<8p`H$N#B4i85JTtw6V`db#4BEOou{9zl{mime&lMMxUR&W{d;_q#XRPgg!b&hU72^;AdVMAl+VI3Lf9 zV?u=YZ?LIj3{6MfP_o??CB@A^BW1Y0Hh>k4@kzIoqiJmEL1uejZ!tuX)a7JB2Cop( ztZ&CiSS<|B#O>OBaS&u-W3XZal_0LgRgc+rlFp+?ksG-|)*PX|Dw@j68^}s}6N?)g z-v7^^aIb@hO@j2D*_P~0hBGy|sv8tTmM?)zOSkiYE(`}e+|XqsGpK{ULE=`zA z?2;pQ6RI?|z-Yk-{V}{#U$hr4-u#ix9v9i?s~@pMEi~I|nR6cFRM>W3(hC^qM8NZ} zQDchDwli>5Z)9V}mfwG2`LZ_xt%g~2cq-~!4P zwJv)Z@g3S%-Hb+V#_O`8wl2l({(tY26Gn$t^sVpk7R5jxMedhHki)AJx4LC4pN->I~0Dh z!uMDB#8{~?+9(Vkx8hrF#n%;nU4`#etvFm}ShV-EHRIiySQt{CFDU$HxU-Qf zy`h`mRN?Pd`1jm=7sV-OPvr5YU8(SYbMuSb{L93**tM@K0^hm?*0}|!TOk7}3jb?2 zUzVo?)++o6g@4q|m*wF>=0jJj@OHa-VT$dHap2vjy0_q%!_DMXrV-5Vi0RPpbMvk% z4V8iAsrG=vJLu-gaU@v(q-G6RysJODuecY>71aW|W+oV75H<^#_LNzXjt|8Z?59a} z_|fdQNhV7^M6e1bPe=2?Q%T`~Vaq zNKvSM%(A#KcW5op6FcKHDf+QX1NG>_=rVdjfyX9T4@vri3*{slTA$Qup79P8jhk*5rv^@rGRL2rV>Dae_U1AJMF&_kkEv9tcZ+geo?Mzy^-BC4B<> zaC!?qh#j8p*YH({(o7tOtdrCKgx#LLPTRr1svb^WV7ad~Yxv6rDzgc7r^p4fg4Ytg zPrOOzNVdz_Wz-1zMy$?^4i@_&A8N_;1AYLGG)%u|Rc_pu*!y>n#X4^p{&w z?I^gu?1(m&-~Ebu3e=?A|Fv=ia6#pbWe;byv83A08EwTTG&0TPf1*MSwr}wcvQ|c@czg@J zZ_wpn`N7E>En`G^{AFEgu{phzFNr8N^WWuMU3ki1`w_zpdsw^&6TiUWkD;hiFvZ_m z=wDEY%SiC76&`r*A-;!~f3|0Mbs_ zP)R)_pY@&HuK5z;QUjq#;zB(8L(>fg5NEKJvq$)hb9H2&(zc_3ix z!e`~Ic1AF-W#Jj^8|{?uq0Wk%F-eexW2@QJj0Fu+x6*OW4V!UaocP`u_AsNbGlr}jT1+!Sb{i6#gfDn6*G!GRLm^K z0>epUdjK(l{)Ez>CoqhIO7}2dkA9BBZ{#USOhT9oeASt2aS6>_{p6X; zgqiE?oIYmj0?b??;zwY?i_0??dHb(0*y!AS8T;dbNwt1JYAA6 z&2dhCmS)ZgX1kZ9pYQ=qrm^WV=sQljWVS1F9FTex>l-ERKZ(?6J@L7Mgo|4hBuU&L zBle|K7dP?t+1*gyFSl1{AvsIpnmX)bSM#O zwx|!d7Xp+MP~}>T!D*p>!39E#gu>PERuEj9qih?rr{5p zLuFD86>n1c?!=49XiqS|x7yVHkc1nv)VGYGf4m|uar9yMaCuSHRaJhBHnQ=7A~Z-!*jG9q1Ybp|4of ze0}Yq;E3y4-}xzS7|F`!Z-|-y zkZP#sTo58;-aES})k-|P5a;1WSDb|-#)3-fH}GClh%$zKxFDoS4?;VGX_h}yh#NJw zI5#(!U0RSJ)GcN{3loL2$Jn5SX~Mi?Y}>+Eq31DnZQ(1vmx^F%(Q#@!d83b-OZUZ5 z_Xn%=mSqO;=p!!F#_=o^70nVy8}~TzOQ^~BPVQ%94X}Du?o)iAPHp`@93Qe6c@#$A zFyajPF;tSpxNH@(C{>%rHAxnw?m!c`4SYDdZp6d`BX-{s?7ssdCyk*=n?(*}2p&W` z$0TL$LxU}39kLSm0c?6!r$(cbs`GjWT~PC!?aqp*)2Im=W783KBg@At?;_dNKhm?x ztZ%AqNeV{N1gC!Ma+#nKdtw0J_ zNau<4vqB0~NC)Nl1Q!$EV{s+vU!oN)=0Gs1a`o5-qL6WIq9G+moc#E_imCl~brwiByZ+nf*_CBKx@ z7U%hIy4p_%USj(lT;-s6k7*hoIuydus~V3n2Ib=lSxA>D6b3V?yjUUH%p zdS#iS|3)FZ6tegiruC|CpZ0>Mj0s=n@$R(d<8rC9MaE%a0Y~1XVvyN(n=<`jE?e?$ zn|gm^0#J4sYuKT8U*dbRdbwkx2bU?2h-<-r9q__Qt~d!EN`1(Y{TwAdKsy=n%oo&B z`o{iyH{{OYh4(&Z-mAuWU26|2xgJ((ZRYh#&6sIw2bEXjmDEkyXXvkcDpgCq=K!rD z#acKxrw^XZ@~zNW{E!`T=5COtMmOX*_{{Rvg|N~CPvta?Muy1`ggPhEEfh_V1RBJquvp*QIQ_QO&xL0% z9|EW5;f;3Dd^d>gWx<`FEv5yEzrB!l6Ov7H63Jz@s9sWjSw|^YCyYPWDe5Nn*!_!H z-PN(et3#P#b)07ySxDEmVT)EbwmirY;At{Ds|F1DrC6+?7wAZHqUR%jbEUZ-IOBbum-%}YFDL!jjHgCNH zlf*HcFfVZQ)R@;+eGt>SEgP_AW{clZK|-dl!B&a{uTyPBpT_G3Nq;??U0oB=WaOum zXESf+;bsiVw=`qgu;%YI7utNvI=}a_<)&3WhET5NF)!iE^rFMnJLstzC7*9#dy|j8 z##QJ_G&gZ+Lb!N`c4do>Uq%GexHWM-d^V?BU8sEVj>EXvOiUhT>ygc%!}*=9dNMs4 zX`nLO_Eqis!u|mSNu2))HmmBcS84*8htxapR^>gK#W8r?U-7k2Oa!PFzI(=Ab_O)L zqp$e{_^fPU?Le06?8t9r#m*3Z5xeDV8$RtI(yv~0Mj7pzfkblXr+Xkd$IGE@X?Qkc z@oW7o4Pg@<6Q>1O4;N+zspJ2dqR@sE$k`u{8#TuD1-uZAj&|~UPWj2c`_}P{BA=|t zi`kH@7!3E^&USLqEe^_#fKExhdFKIEx~{e7Oq%u_`fw(#3-C^%q#XL+1i8>+ zEf%@n*Czx-#oGzB6#A9F*zolM{5|&O`k?0D9FTQRq0`U=XoI6vJj-3Sd;P?qhPY-y z?>Q$W+Xrvs&<8_lounO^DtnDVFR|DS*M+Hh%x7Z=Z)9CI`cG`skajVJCfli0`@p&V z@RCv^*27jQ#a3i{V35k>WtICg)L--5nY*iIVB;fH8hwUJ*EGrl;V5L_Eatw%@8wjr zrF~fb#@_x@po`MJrz!?Rv0^5^arqYRsxR}~WUe35hu*Tpkc;wVvo?i#mtmzMdolEs z+Tw*j+15?LT|bnGSy?m+K-Y+ya5P6_6?rgA<<+nL65oWR+!i>fbwt|wGHFw+zv(L| zW}^RH5!<8JDEHkM62sC;G_BZx_d~Q@kZnodZ$6d;iS1d|`+ocxw(0!@%NiUb7?-`m zn;o+Svn_MDA?u%!mI(aqu3PaG3u1%ARFu#{x8!%=DCl~go@y0VO^{%3O7PV!Ij^uQ z{>8?U3rh2`k{07>rR~tp15SH?U-|grz6I=Q#BQOmr>Ja7T2bCf+<)Z5ciKEPvMNjD{K(}N%%=ELJF<5`b@0g6GNc@>OhGgB5)Q~!2A@&~zTOmrb zlsB=`QmU=YP*m=bVm&69FWfeG6&jZs^;s1KD9o0Blq%Z{ak&?vvsqe$ zu@Vf?4r+86NZ6|Cml0*2Y&JtzKt-nRwH2eN!T@$Au}8}6%o~WmO7T8q7E5f@b>;;S zM-wqtv4InQ?ITp3xQQhPml+p&viT(}Vte_W6O|@%Ec9Z_CR9jK1EoUlC8f!Mu!E+E+4rWJBWtv+b0HKKE zW;?t1VM|M0N(!#+g1k5U(=}AF97>jl!7@@015SM?mRNGf?m^smg`2E$eZe(k%?}mQ zblJ)9lWO5AktL;Y!4RaveFZ(&WULve!q~7a4cfXc&fXoeAF8Vz8Y)KLHJBS;tjuGoz}w)M z?WW;oM;f0M*VSwrGF+E48APRQDYoPCqN+$lhRQv}@hzBcTX@~^s&;b?Gi*!rYOY2v zvRzw!EJrX`*Jzl#6-rh<0hv<5Sf`XyZT*naDiB|6t?iipkaOD?=ohXzq~p*Zd`gAB zFD_I}W#jUVencR&j@f3)GAzpot(}zpSeHFembPf$e8h1{x+9mwS;!ZM?NynEPaqxI-%)U}LlHWuI_|oCF3TN& z91Xfh5XA$9(N39KOxo>lv$sA@sH;~DFFh~F{e{$PG@%P;p46MRfc#=>xiIB}lXC`j z;=($Ha@Cpau2fXA53@xd`>>9m=!I+-OZg<);*0H4L(5 z${AZdqq6^NFPqP7DHlh18n;&w7uP}-MScZ$GOiPHb!ex9<)U4fTKb)zxxLO(RVm%o zP}W*YlDVX1uf^(a53cuyFNPD|%O+0wi*?=}7%wXB6rVG0BM<7rohyE^B1<|c=?CCh z27DzwbF!9rVlEP&;X|B?qjYYZb%(9k9%u;w0eQRgSaz99zel~;*UW{TDsOg0oGz!J z%h^jzhwS4Vqq8Layw2~`I2+a(@f-<&5bEk*06ri6{DhF=U|BSyCEv!#!Wj29GBeQ*Z zDCJrFkjBt#x$kHSda%eHZ7nv4n$z{m02V#_2lM`$;npV$GO@y#2@;JkR|_aO`tUaG zB$9P#Cj%Il*2iUkOI=PS+M`613=*U`*B^-TnivvH*Te!Ol1<%`@2QEgj{?PDy&q(B zB=K^YEifdQbVp7bZJIh@8nLWSFyb9ToTUF?J9ToPbX!Po$k$_3q3VboB=*69ZHeY= zcXb(r`(FGW#gWtE2ps;PdJNVlLT2+4%?=1)EOUmU8y?1`+D{O5^`*?DYn;GG8tZCT z1A^rM!0qE{!$}VhdPa}mv?GQi=^CiG!Pbl;f%sFI?Xm5XJ&Lx`161ml=oLo0rVqI8 zil#%TP`2x{ro!n@*qP7#nv|h;P$_VvS|mi!ofCvUZ8?i_miP2>n2!L`T6WV@^chDhjv9H644bj{S(>Roh|F%!l?|c zGSW5PiL7L2ge4fwg%dJmKr8#{6(1{^#1FdZZ>i>!VIDuJ)2CL(OzhluCD7`9#dHBb zQMVm9y~uT+3a3FEibqsMx>`JdO`jyrMAxInXir0CD+ZfgJ2jyd&X-PSXvAOMrS3BV zw$LWHGPP;@0hb%muIZJ))_fjq(aEV^e^oy85D>w&0!|JPmp_QK#op~ko&E{_mS}#) zU+Rfs9k?Z>y7bGo$yp0hvu32*vPsC2{B2VPoonI&B9{cAbnO=C%ZC#<-&~I*47R?7 zSVhuLc8P~E-tF2&kPtcKJG!t$lYt23+@^Vj$Zw$374_tYH#iQ*3d))|1au+ON&3Hv zEcc6M7P?k)Jwf-ysl61|6NwP)sKO8xHd3LW!UwM?azCrEOohi(xJQLsRJclo@5r#~ z_XDkW+Ty%Jlk*WuYo|?KMu;xZ2p?4n>P(_K(ma(z1pT;=*qAR{2!sA%Z-3ccxHyy@ z{IYeUu3eS)AjPs8_H|v^pI;6U(x0=wyTZN3zk^nC#EyK2&EK`O*?j8T?n6vnU=}J0 zT>o(ong8xczAo##JMN_`7(*5BRWl>dN)?N%<4?hN%|S=f1tyX52=HC$)$w484?-Ng zIS<)|-6MqA4_UiC-F=$Gkpn-ApU_x=dkPd+;~B>m?inC_)rDQy)2`8yE|gdNR*u=0 z+O(;pUow&D_67_6yReRXBS(f2*VflFg&r3T!dbQ7L@IdZeo6mMIw@)ya)xh_CgPlq z@`k5T!ITZV=5}WckYTv!(Z)dpr;bgVirpba-}5-M9_+y04#Mir?DpOuVMb?Ge_vS0 zL0T8s{f`5bXu3mPt|^RHtgWKxiDG9qXkTBxJNsZ?kzl;fCVZ9E^8Fa(r%bn^7Fo8( zZWxd8fKQPYJeL~=*;o|AH2cGZp)su8{zBp2BX)OxM9AnrFg8kYUW%MFBm6jU+#b=v z>2N3w>BQpmx(dxYvCO=_d;%-Vixvtx?)@`w1RwTpwEWZ)Z<0r&0_^@{5vPY_opEB^ zVhoWImyc$%4|LVdg@AHk5oFiYi)IH8bh6yV?V1e^5I65vUnXJAAy5!E+x+*)STbta z8=4h6>1^`TT;+DxuGvVMXHoYJlzRZ2hA3rp#I93J;8z7@liFz%hi7RWT}I>Z40Z4p zaIbcry;jgdzY$V3Y#?<_a1`5A5aC_ffm&CWeFQa+DYXN;R1ngh&mkM{#lAgc5o~|3A&0vQDSxmvhZhQ`?=t<7?t<+u8**fY@bve+zaA+P zgvl%SZZEn}OW1p3@7pJ0nhKjv@7;afuHozMP5dQB5Q>Y~oL?sk(~9<9{q;v)a2(xx z@VBpcA@wMm?TXNKJBn7HKNzEoo;3vS-QnuN3x6GE6}LYV-kY*_ZN)ua7plbtx5n3HG2dNS_gTT`DT25r%TVr3+tWE&?bDa@cn9M?2r} zSo*9#hz+3q0^xp}E} z9PoVuqL6CyIFmV$u9ETKOM4C^Nw2%(^li(>3YOE(m)i2}nhJ$Hckz~^mxP-GNBx}E z$QQYX*3MOJ`IdsSwKK0R-=))vQz&8L_xLNA?e$B|Ha~=V_@YG3H%$-P(_qU4{2HmI z!WrC-FHg3XfCfj<-fZ`_CLTfzXN>yS05j5YA2rvHBs^1i~hu)I$r`DMHiamX3lfuGr^ zHTFe9=BKbU6qux+^_z2l2R=#|`nFT-z{dvnI7k_kG6JoMA03A%zJ8V)O?w_O{6fwx zXZI++Rg)(;{xaKo`B@Bi^7KbMz7b&fKnvcmCO#?f z$r;^+pCRP@!1e#(0zjz7r@<=33uyJA@7 zUvn<(%D*QBU2`_+#?KbMKHyx|jqf77dmyj48{eK6M&&ynCh#3B>wmyc4Py=S{|2|H z{Qm}bsB&(&M~(j%XbJl-0{@r!7U}0Q zjo@t+{-DA$DlAap4i&Cf;W8DzrNUQKI8uduRM=I8ZB*EtpalumRSC~7sTok=4=OyP z!U7fUP~mzRx{D))32IOJ-#}-tBtE4tX22g$E3ufPr5XIS z`<^ee5%~)J%}8gIfnOm6eCRAR@Xb0GHLJPF+vFUBmH;Zk>*b?)N90sXh6S_TNS0I7K=sZn{t@rN%$X#2JM)A2e|} z5pcYpL${P<3E%oObZ+d)cl0{%EoY-mr1Sfpy#LE{yP#AxE>P5+(n?4fbw^I19F5cr z*TOpxS7W*+v1!2u))b1>k098nX|KrUu!v!GMeb?DSG)))&?5rBi)aoR$RCWDnOS~ zGpld62{rcwjvv28@(FNGmwgf8&#&>X3AaUJPIs?pb|31KM*oM{3s#US5Qhv>M z09wm>^9j8({SM&zmO4p_BKe*wc@&ZrJ_&;}y=A-d5v-(Ny%9ZZ4}LuzpW`-#0#51d zkzZcGl!RNQaY_ze@9%uS7gj%KN}c(=_>OIkLC021-(U=`@f>F(Do=Sp_B28%v98GJ z)0^)d+fcAvFdx&sOM0>LlUVlpC&iz?p*qnnf^FN0emSRg*;W#z(J#d^@4hdgpU9AJi~Qks7Q> ziI0ysBUAWhUPBe~ur|*ADSV5@VaN;$+Z{`pGdRLME`D_0xgdr2ORlBJ1*_`wjvyaq z>P`-Q7tqLUoWhkBzT<;W^H#mbd8$cUNkw-^HE!d)h7^WuQ)zTLcLx;%O%q;p{wSZr zF$7UL$aUTvr8aHJ^Suqq=TMcVNrXBi?s`O?^ z=R-(x&4daLqVcl?V2N*?u9Qr8Yl4Hg$F5RbQ}mNRZFFdt68B|r@%xQ2kbaBesi&Q% z`|wx2S5l&gZA>PFODEaa@^5v~nKWIV4;P=LnmuV2AoIg0|j85e< z1=m^U_Eg?4@iKBm?}_Lo?GLRLnUsU*G~Xh>6=4SJKYZ11Anv3B;{~}Y7IM(Z_v8J2 z7J{q{{QWBDeu1-NKdcLPtZ`24$G0B6d5t{Id%y{zG&3P3W@7%3J97&CRDvk~{_0y0 z!?<^!#9gJ{<~dCql_H>L??GPJw<=Nb)<) zb8rwUr{W%M`C+?yv^;ACE-L5zftsVGQl;jwP*snmA=iE0s>yg>d`73N-`7O2$Q zc{OXIP^EtR0<}b?9(jQ(s?_Z-P<_KKN(Wl?0{Jy{%*}s+TBcGbzd)_6_zG7#E~wPO zTZleOLo*43ppU{9qoL$7LPq{b18>2mVzq)d;ZDy1e6wcuuPWs;FnRBUb*}nv^B8B> z0elI|s+HxfoaAsrR?+nf{@Xmxh6DN5br*lBL`!AK0Oz=Yd=`G=Ss_A9{x|DiajXtx z8(At$Gb!DGcb^l;~LM^9pIDZXgZ?(HpYKSme4NX-TsKQ9V0lV{hjo?QJ zje^2^r5XmA$0iRRn3@gbeHb9+d8N)<)A@kFZ6kXWauO%u|MLH~ zjdV_}5zo`T#&7csYk#UzG9nB^cm?4Hgart>2p_5O<9Syy`QD9IMtJ81E#*^r{l!O> zQZEE6!g_@L2p97f*?1<@F`A;#OzC-zmh*{%bMy+nLz8Z^Cyk%jw%dR~8RKVXyfo90 z{%XIO6DK+CEBM$3|DqjT!C#LXK6%pYt{GEFYYsO(p~u|UrU$(-Y4#lS!Nid0_E8}{ zy4Oum`M^53QRjwt`J{&F-IBY_={ATn1;xkFpLl2ayZpE4E1kWtY^o7%@~Aw7nzZB^ zd^i18t!kM{$gix#at?B3nrgaRw%9|VjTI#6HOOA`R6`n&lXYqk5Pum)NMH+u-GZYK z4@LqMpMV71^lLC&g@gBp^YxYdH!Gt&^O9EaS%RkUFqg!$*K7IZ-B``1^UclmCFyxR z^aun$;O!6+5bD>@8}lANfp1mnElK|lX}EJIS}q{rZ5ujoIr%mgv8yC`c2UBfL!x#KTFi=r@0HTo;y6DSm*R+b|SM#zX$XyvLQ7vifC_8^e)WI(sk2*{IM z%|zWe(P>Tyg53=16Mj(*!TQw3$g*?gCOw^4Nof?7urOcQ-ZN{{W zd0gJK4SZ{%=dLj?&fO4^=W1CPe@aij$p3ddYqzs(6aNKY?p*XfZ)wDxcu{@ak-SD9 z@Ez*s@jLn6yk&Vyj+=Oc=LoI}#eew^IKjOL*}w@NMOY4;U?D;-aDx9JtOicdBaGuV z0w=fyVKZ=ojjw)N88U$D5j=ns?1-;5Jb@Fug(Ib=zzMqIIW7h`!Dc;hrUabeID|Cd1cQ?;95)z| z;ADD2vMdNV!MOmUyaDreZUFcLO2ARVEaiZJ#d2C5K4g)EI}v-4rt*TOvY9a5rR7r z?g1zG&2+T!O%sn-+8mAYBk;g{kcZ5RV1RKpoiGdT$ zna6RLffHPXa1S`a4-ozYPH?Q{Ewnu%V*zI(c>anG0=W2XloU9@a|lg=6Kpge|G6^Y z1V=7F4FD(j&O&$z-~@{i1_LM91s(il-~<;TOa)FbKMUVW0JjkG6T)&t2!8So+8a2* zI4j03aDvkj@_`fFj8F)i;7zb;4b2YwImAwn*2f{zha z11H$jfsq27;39<0zzJ?a*bbbaVFmh-1rb6%LO2ARpzd8%DR6>aa#5wglK>|mlmjQ2 zjUWOi_&<-~|6!iRuMTFk%%(&~F&`fG;D|2Tst5-~*hXWgq?oAwuvcgmB>Hfd3#w z0Vl{Y3@zXUYazq|C+Llk0G!}3ge2eu=OLJZ6WolD2Ap6i!f@aO?;wo(4gQ~y%d1iC zU=Y0h9;zKU!6yj0zzNoNqI!W7^g&n)oZ!m{8-WviZ9T_r1y0b8a0ocT9SFyP6Fi0R zHE@E+w$j78u?UWOxqdjKc+HG(H_f-Z!n zzzNp-0JRI8U?f5~aDqb-qJR&z0NIEThX}z(2uZ*RcH4|<1Wqs$Ar&~mOCO>q11Gp) z3#t(~!A}up0Vf#y5ym%gf-4cSffIZmVL5Put+%56a}gorb%c$;39dre4xC^a!Y<$h zg>9%(-~^8$90yMDYlKqZ1d~5TjRGg={|RaoI6-MUIw^31LqA2$xlsB~G5(Wxpd%qd za3X>qaDo{Kp}+~QM+gT_(DyS`9dLrp5R!ls?2ljsPH+N3DsY1FdFX(^33e}lBLhyb z{UOwf3;v&wP6)YR5R5}u4V+*i!dl=2yCZA_z6C|;MhZPh9jss;Awz^EcjE3$T+~^M^SZz1EwR~0X_@x3c@|$<$yhlFwX-| z1N{6rI^At#2=FdK5b%3|&k@3bW97%uFF&*cUI-Xff?*7t;0Fjs;Firmf={7}hyfUK z8bgY3f(R3Vj|1F=Fcmn#erHgPz|#Or5#|CXSm!KON5H)Stq57ba{*5xWRncwh_B&2 zfsX@hbq?*n9FbY)IBqvWF7QG?zw@YS;6Z@P5w-)*1w4$fk7NLMeuF9nz6-EUDXJ8> zH{kmh&>?|u2E18@0Q??cmy4)H;7NdG2+x6+U$o%Aw{-=*u>#6~2d*J;;Dvw{(fR6+0aTCK2coJa#uc!%<0i1IiB?g`a*zXYv20RUL z2f{uJBD;XZ{Dsm0PXa7M_!@XQ;Ls=N6Trs-eu7X=@_-wkqJIG23^@I7I4Iz=0DDO& z44%!T0e0cwA%Q0W&eNbafoB26d!cg^9nkVn3t>b!{EqW^go(gQ0cYalx>>+y0gB!{ zHy`*tz{@SL<^x_1= z{sSHbxFi9~Zs56qb?`8HFmP|c06g)Y2s{XIY7dP6xrod{q?ZAu1fB*swkH&Uj{}^X zjM9+|;3|aez&8V)Lf8qs6z~zkF5sMz=b9kw10Do86yXr?ae%KP90!iGSnh3vQ^2z< zKz>8`8W9}IayW?Pz6DNjIKnmHIF#jHMJNZ3gIVrfgqy%~0h{&WxjVpv0LLQyN%Da7 zpD5+-0tY;3Mn3>v`2P$@Yj^_H0@(&Y+SChJ^cw&<4nW2XAa((=FZcp|83*(sutTx{ zNG}EAkavvJfkzy#owkQj$7lgiA<%4wE5Zy6&w&_J%7AE27GUSk30N#b<-Y*M*hN6{ z+vD~yvNKLE-OIR*?Wi=fFr(yj!+nen{2Z(d98D|+%n3{di~+!L)`ESEXIUAWwwoPc zJjTupyy$*9`x!>XR8R{N)Gh}#?m%sIP`ez|Fa$N3j{<2>YZKa<1UCjj4M|V~AJk3< zwcA1MZ%}(2)ZPZQQbBESSjPa=kOa5kxA&f5TrJ8A9^(SK8CYgJFm4Zg#JHDvq5;o# zzGsZTSebULo6hxyQH!f#;ev%L7H(L$W8w6$H;hW+2CE%b2dqw5U9h@g^@P<6R&Q8+ QVD*L754M-TVeDiC04CxR_5c6? delta 32337 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 Date: Thu, 21 Nov 2024 23:54:32 -0800 Subject: [PATCH 17/20] Announce steps. --- minichlink/microgdbstub.h | 3 ++- minichlink/minichlink.exe | Bin 126976 -> 126976 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index ca661702..f328d3d4 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -435,7 +435,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) char de0; if( (de0 = *(de++)) ) // was while? { - printf( "DE0: %c\n", de0 ); + //printf( "DE0: %c\n", de0 ); if( de0 == '?' ) { // Request a list of actions supported by the ‘vCont’ packet. @@ -462,6 +462,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) //SendReplyFull( "OK" ); // Will be sent from RVNetPoll RVHandleGDBBreakRequest( dev ); RVSendGDBHaltReason( dev ); + printf( "Step.\n" ); break; default: SendReplyFull( "E 98" ); diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index f30d76f329cdae330af3823534eb62cc05d90415..e9b3efd3fb6234d15caeb0b31651b3c69e3ce1b2 100755 GIT binary patch delta 13147 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 ZYJS-G;<$q?Zp+V9=ttkV{ch1i`Y+t5jS~O> delta 13052 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 From 0750ad8ebe37f8666dc9c430a1228fc0fd00739c Mon Sep 17 00:00:00 2001 From: cnlohr Date: Fri, 22 Nov 2024 23:41:26 -0800 Subject: [PATCH 18/20] Fix debug break behavior. --- minichlink/microgdbstub.h | 5 +++-- minichlink/minichgdb.c | 36 ++++++++++++++++++++++++------------ minichlink/minichlink.exe | Bin 126976 -> 126976 bytes 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h index f328d3d4..e0608f07 100644 --- a/minichlink/microgdbstub.h +++ b/minichlink/microgdbstub.h @@ -41,6 +41,7 @@ int RVWriteRAM(void * dev, uint32_t memaddy, uint32_t length, uint8_t * payload void RVCommandResetPart( void * dev, int mode ); void RVHandleDisconnect( void * dev ); void RVHandleGDBBreakRequest( void * dev ); +void RVHandleUnsolicitedGDBBreakRequest( void * dev ); void RVHandleKillRequest( void * dev ); int RVErase( void * dev, uint32_t memaddy, uint32_t length ); int RVWriteFlash( void * dev, uint32_t memaddy, uint32_t length, uint8_t * payload ); @@ -462,7 +463,7 @@ void HandleGDBPacket( void * dev, char * data, int len ) //SendReplyFull( "OK" ); // Will be sent from RVNetPoll RVHandleGDBBreakRequest( dev ); RVSendGDBHaltReason( dev ); - printf( "Step.\n" ); + fprintf( stderr, "Step.\n" ); break; default: SendReplyFull( "E 98" ); @@ -608,7 +609,7 @@ void MicroGDBStubHandleClientData( void * dev, const uint8_t * rxdata, int len ) } if( c == 3 && gdbbufferstate == 0 ) { - RVHandleGDBBreakRequest( dev ); + RVHandleUnsolicitedGDBBreakRequest( dev ); continue; } switch( gdbbufferstate ) diff --git a/minichlink/minichgdb.c b/minichlink/minichgdb.c index e3491d55..31c8d4b8 100644 --- a/minichlink/minichgdb.c +++ b/minichlink/minichgdb.c @@ -22,6 +22,9 @@ const char* MICROGDBSTUB_MEMORY_MAP = "l" " " " 4" " " +" " +" 4" +" " ""; #include "microgdbstub.h" @@ -35,7 +38,7 @@ void SendReplyFull( const char * replyMessage ); int shadow_running_state = 1; int last_halt_reason = 5; uint32_t backup_regs[33]; //0..15 + PC, or 0..32 + PC -//int gdbasserting_break = 0; +int gdbasserting_break = 0; #define MAX_SOFTWARE_BREAKPOINTS 128 int num_software_breakpoints = 0; @@ -91,6 +94,13 @@ void RVNetConnect( void * dev ) int RVSendGDBHaltReason( void * dev ) { char st[5]; + if( gdbasserting_break ) + { + gdbasserting_break = 0; + sprintf( st, "T%02x", 2 ); + SendReplyFull( st ); + return 0; + } sprintf( st, "T%02x", last_halt_reason ); SendReplyFull( st ); return 0; @@ -234,15 +244,6 @@ int RVDebugExec( void * dev, enum HaltResetResumeType halt_reset_or_resume, int // Special case halt_reset_or_resume = 4: Skip instruction and resume. if( halt_reset_or_resume == HALT_TYPE_CONTINUE_WITH_SIGNAL || halt_reset_or_resume == HALT_TYPE_CONTINUE ) { - //if( gdbasserting_break ) - //{ - // // This is tricky, but I don't know how else to handle it. - // // If GDB is stepping, and you ctrl+c, then, it will ignore that and keep going. - // // Here I say if the user ctrl+c'd actually fail to switch run mode. - // gdbasserting_break = 0; - // SendReplyFull( "T99" ); - // return 1; - //} // First see if we already know about this breakpoint int matchingbreakpoint = -1; // For this we want to advance PC. @@ -322,6 +323,13 @@ int RVReadMem( void * dev, uint32_t memaddy, uint8_t * payload, int len ) exit( -6 ); } int ret = MCF.ReadBinaryBlob( dev, memaddy, len, payload ); + //printf( "Read Mem: %08x %d\n", memaddy, len ); + //int i; + //for( i = 0; i < len; i++ ) + //{ + // printf( "%02x%c", payload[i], ((i&15)==15)?'\n':' ' ); + //} + //printf( "\n" ); if( ret < 0 ) { fprintf( stderr, "Error reading binary blob at %08x\n", memaddy ); @@ -495,11 +503,15 @@ void RVHandleDisconnect( void * dev ) void RVHandleGDBBreakRequest( void * dev ) { - // if( !shadow_running_state ) - // gdbasserting_break = 1; MCF.HaltMode( dev, 5 ); } +void RVHandleUnsolicitedGDBBreakRequest( void * dev ) +{ + fprintf( stderr, "Invoke Unsolicited Break\n" ); + MCF.HaltMode( dev, 5 ); + gdbasserting_break = 1; +} int PollGDBServer( void * dev ) { diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index e9b3efd3fb6234d15caeb0b31651b3c69e3ce1b2..4ac8f28ae4992482730cdb9926d37381ef5cef4f 100755 GIT binary patch delta 16481 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 delta 16207 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 From 1f97064e106936f1d6d2811e19a912a8cb35fcbd Mon Sep 17 00:00:00 2001 From: cnlohr Date: Fri, 22 Nov 2024 23:41:50 -0800 Subject: [PATCH 19/20] Fixup debug tasks.json double variable.: --- examples/debugprintfdemo/.vscode/tasks.json | 1 - examples/template/.vscode/tasks.json | 1 - 2 files changed, 2 deletions(-) diff --git a/examples/debugprintfdemo/.vscode/tasks.json b/examples/debugprintfdemo/.vscode/tasks.json index 9ad0c3ef..3f9ea798 100644 --- a/examples/debugprintfdemo/.vscode/tasks.json +++ b/examples/debugprintfdemo/.vscode/tasks.json @@ -3,7 +3,6 @@ "tasks": [ { "type": "shell", - "label": "flash", "presentation": { "echo": true, "focus": false, diff --git a/examples/template/.vscode/tasks.json b/examples/template/.vscode/tasks.json index 9ad0c3ef..3f9ea798 100644 --- a/examples/template/.vscode/tasks.json +++ b/examples/template/.vscode/tasks.json @@ -3,7 +3,6 @@ "tasks": [ { "type": "shell", - "label": "flash", "presentation": { "echo": true, "focus": false, From 828001392e28eccbe1ce637ae4e61351c350d120 Mon Sep 17 00:00:00 2001 From: monte-monte <6649967+monte-monte@users.noreply.github.com> Date: Sun, 24 Nov 2024 07:10:24 +0200 Subject: [PATCH 20/20] Fixed halt/resume on WCH-LinkE --- minichlink/minichlink.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index 5cb697d4..1e570be7 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -159,6 +159,8 @@ int main( int argc, char ** argv ) int must_be_end = 0; int skip_startup = + (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'e' ) | + (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'A' ) | (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'u' ) | (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'h' ) | (argc > 1 && argv[1][0] == '-' && argv[1][1] == 't' ) | @@ -700,7 +702,7 @@ int main( int argc, char ** argv ) if( MCF.FlushLLCommands ) MCF.FlushLLCommands( dev ); - if( MCF.Exit ) + if( MCF.Exit && !skip_startup ) MCF.Exit( dev ); return 0;