From 399c948a0ae138a4741bf53c20f125ffdb46a585 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Mon, 7 Aug 2023 01:09:21 +0100 Subject: [PATCH 01/37] Addition of experimental COBS decoder --- Inc/cobsDecoder.h | 84 +++++++++++++ Src/cobsDecoder.c | 309 ++++++++++++++++++++++++++++++++++++++++++++++ Src/orbuculum.c | 140 ++++++++++++++++++--- meson.build | 1 + 4 files changed, 519 insertions(+), 15 deletions(-) create mode 100644 Inc/cobsDecoder.h create mode 100644 Src/cobsDecoder.c diff --git a/Inc/cobsDecoder.h b/Inc/cobsDecoder.h new file mode 100644 index 00000000..7cd0f9d3 --- /dev/null +++ b/Inc/cobsDecoder.h @@ -0,0 +1,84 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +/* + * TPIU Decoder Module + * =================== + * + */ + +#ifndef _COBS_DECODER_ +#define _COBS_DECODER_ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +enum COBSPumpEvent +{ + COBS_EV_NONE, + COBS_EV_UNSYNCED, + COBS_EV_NEWSYNC, + COBS_EV_RXING, + COBS_EV_RXEDFRAME, + COBS_EV_ERROR +}; + +enum COBSPumpState +{ + COBS_UNSYNCED, + COBS_IDLE, + COBS_RXING, + COBS_ERROR +}; + +#define COBS_MAX_PACKET_LEN (4096) + +struct COBSDecoderStats +{ + uint32_t lostSync; /* Number of times sync has been lost */ + uint32_t syncCount; /* Number of times a sync event has been received */ + uint32_t halfSyncCount; /* Number of times a half sync event has been received */ + uint32_t packets; /* Number of packets received */ + uint32_t error; /* Number of times an error has been received */ +}; + +struct Frame +{ + unsigned int len; /* Received length (after pre-processing) */ + int8_t d[COBS_MAX_PACKET_LEN]; /* ...the data itself */ +}; + +struct COBSDecoder +{ + enum COBSPumpState s; /* Current state of TPIU decoder */ + uint8_t intervalCount; /* Current byte number in reception */ + bool maxCount; /* Is this interval maxed out? (So don't expect a SYNC at the end) */ + uint8_t currentStream; /* Currently selected stream */ + uint32_t syncMonitor; /* State of sync reception ... in case we loose sync */ + struct Frame f; /* Receive frame currently under construction */ + bool selfAllocated; /* Flag indicating that memory was allocated by the library */ + + struct COBSDecoderStats stats; /* Record of decoder stats */ +}; + +// ==================================================================================================== +void COBSDecoderForceSync( struct COBSDecoder *t ); +void COBSDecoderZeroStats( struct COBSDecoder *t ); +bool COBSDecoderSynced( struct COBSDecoder *t ); +struct COBSDecoderStats *COBSDecoderGetStats( struct COBSDecoder *t ); + +void COBSPump( struct COBSDecoder *t, uint8_t *incoming, int len, + void ( *packetRxed )( enum COBSPumpEvent e, struct Frame *p, void *param ), + void *param ); + +void COBSDecoderDelete( struct COBSDecoder *t ); +struct COBSDecoder *COBSDecoderInit( struct COBSDecoder *t ); +// ==================================================================================================== +#ifdef __cplusplus +} +#endif +#endif diff --git a/Src/cobsDecoder.c b/Src/cobsDecoder.c new file mode 100644 index 00000000..3106230a --- /dev/null +++ b/Src/cobsDecoder.c @@ -0,0 +1,309 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +/* + * COBS Decoder Module + * =================== + * + */ + +#include +#include +#include +#ifdef DEBUG + #include "generics.h" +#else + #define genericsReport(x...) +#endif +#include "cobsDecoder.h" + +#define COBS_SYNC_CHAR (0) + +// ==================================================================================================== +struct COBSDecoder *COBSDecoderInit( struct COBSDecoder *t ) + +/* Reset a COBSDecoder instance */ + +{ + if ( !t ) + { + t = ( struct COBSDecoder * )calloc( 1, sizeof( struct COBSDecoder ) ); + t->selfAllocated = true; + } + + t->s = COBS_UNSYNCED; + t->syncMonitor = 0; + COBSDecoderZeroStats( t ); + + return t; +} +// ==================================================================================================== +void COBSDecoderDelete( struct COBSDecoder *t ) + +/* Destroy a COBSDecoder instance, but only if we created it */ + +{ + if ( t->selfAllocated ) + { + free( t ); + t = NULL; + } +} + +// ==================================================================================================== +void COBSDecoderZeroStats( struct COBSDecoder *t ) + +{ + memset( &t->stats, 0, sizeof( struct COBSDecoderStats ) ); +} +// ==================================================================================================== +bool COBSDecoderSynced( struct COBSDecoder *t ) +{ + return t->s != COBS_UNSYNCED; +} +// ==================================================================================================== +struct COBSDecoderStats *COBSDecoderGetStats( struct COBSDecoder *t ) +{ + return &t->stats; +} +// ==================================================================================================== +void COBSDecoderForceSync( struct COBSDecoder *t ) + +/* Force the decoder into a specific sync state */ + +{ + if ( t->s == COBS_UNSYNCED ) + { + t->stats.syncCount++; + } + + t->s = COBS_IDLE; +} +// ==================================================================================================== + +void COBSPump( struct COBSDecoder *t, uint8_t *incoming, int len, + void ( *packetRxed )( enum COBSPumpEvent e, struct Frame *p, void *param ), + void *param ) + + +/* Assemble this packet into a complete frame and call back */ + +{ + uint8_t *fp = incoming; + + for ( unsigned int rlen = 0; rlen < len; rlen++, fp++ ) + { + switch ( t->s ) + { + case COBS_UNSYNCED: // ---------------------------------------------------------------- + + /* This case was already dealt with above */ + if ( COBS_SYNC_CHAR == *fp ) + { + packetRxed( COBS_EV_NEWSYNC, NULL, NULL ); + t->stats.syncCount++; + t->s = COBS_IDLE; + } + + break; + + case COBS_IDLE: // ------------------------------------------------------------------- + if ( COBS_SYNC_CHAR != *fp ) + { + t->f.len = 0; + t->intervalCount = *fp; + t->maxCount = ( *fp == 255 ); + t->s = COBS_RXING; + } + + break; + + case COBS_RXING: // ------------------------------------------------------------------- + t->intervalCount--; + + if ( !t->intervalCount ) + { + if ( COBS_SYNC_CHAR == *fp ) + { + /* This is the end of a packet */ + packetRxed( COBS_EV_RXEDFRAME, &t->f, param ); + t->s = COBS_IDLE; + } + else + { + if ( !t->maxCount ) + { + t->f.d[t->f.len++] = COBS_SYNC_CHAR; + } + + t->intervalCount = *fp; + t->maxCount = ( *fp == 255 ); + } + } + else + { + if ( COBS_SYNC_CHAR == *fp ) + { + /* This is the end of a packet and the lengths don't match */ + t->stats.error++; + packetRxed( COBS_EV_ERROR, &t->f, param ); + t->s = COBS_IDLE; + } + else + { + t->f.d[t->f.len++] = *fp; + } + } + + break; + + case COBS_ERROR: // ------------------------------------------------------------------ + t->s = COBS_UNSYNCED; + t->stats.error++; + packetRxed( COBS_EV_ERROR, NULL, NULL ); + break; + } + } +} + + +// ==================================================================================================== +// ==================================================================================================== +// ==================================================================================================== +// Test Cases +// ==================================================================================================== +// ==================================================================================================== +// ==================================================================================================== + +/* Build tests with; + * gcc -DTESTING_COBSDECODER cobsDecoder.c -I ../Inc -ggdb + * Execute with; + * ./a.out + */ + +#ifdef TESTING_COBSDECODER + +static void _printDigits( int length, uint8_t *d ) +{ + while ( length-- ) + { + fprintf( stderr, "%02x ", *d++ ); + } +} + + +struct test +{ + unsigned int unencLen; + char *unenc; + unsigned int encLen; + char *enc; +}; + +/* These tests are from https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing#Encoding_examples */ +struct test testSet[] = +{ + + /* 0 */ { 0, "", 1, "\x00" }, + /* 1 */ { 1, "\x00", 3, "\x01\x01\x00" }, + /* 2 */ { 2, "\x00\x00", 4, "\x01\x01\x01\x00" }, + /* 3 */ { 3, "\x00\x11\x00", 5, "\x01\x02\x11\x01\x00" }, + /* 4 */ { 4, "\x11\x22\x00\x33", 6, "\x03\x11\x22\x02\x33\x00" }, + /* 5 */ { 4, "\x11\x22\x33\x44", 6, "\x05\x11\x22\x33\x44\x00" }, + /* 6 */ { 4, "\x11\x00\x00\x00", 6, "\x02\x11\x01\x01\x01\x00" }, + /* 7 */ { 254, "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe", 256, "\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00" }, + /* 8 */ { 255, "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe", 257, "\x01\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00" }, + /* 9 */ { 255, "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff", 258, "\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x02\xff\x00" }, + /* 10 */ { 255, "\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00", 259, "\xff\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x01\x01\x00" }, + /* 11 */ { 255, "\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00\x01", 258, "\xfe\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x02\x01\x00" }, +}; + +// ==================================================================================================== + +static void _COBSpacketRxed( enum COBSPumpEvent e, struct Frame *p, void *param ) + +{ + struct test *t = ( struct test * )param; + + switch ( e ) + { + case COBS_EV_NONE: + fprintf( stderr, "COBS_EV_NONE\n" ); + break; + + case COBS_EV_UNSYNCED: + fprintf( stderr, "COBS_EV_UNSYNCED\n" ); + break; + + case COBS_EV_NEWSYNC: + fprintf( stderr, "COBS_EV_NEWSYNC\n" ); + break; + + case COBS_EV_ERROR: + fprintf( stderr, "COBS_EV_ERROR\n" ); + + if ( p->len ) + { + _printDigits( p->len, p->d ); + fprintf( stderr, "\n" ); + } + + break; + + case COBS_EV_RXEDFRAME: + printf( "COBS_EV_RXEDFRAME\n" ); + + for ( int i = 0; i < p->len; i++ ) + { + if ( p->d[i] != t->unenc[i] ) + { + fprintf( stderr, "*********FAILED\nWanted:" ); + _printDigits( testSet[i].unencLen, testSet[i].unenc ); + printf( "\nRecevd:" ); + _printDigits( p->len, p->d ); + fprintf( stderr, "\n" ); + return; + } + } + + if ( p->len != t->unencLen ) + { + fprintf( stderr, "**********LENGTH MISMATCH\n" ); + } + else + { + fprintf( stderr, "OK\n" ); + } + + break; + + default: + fprintf( stderr, "Unexpected event %d\n", e ); + break; + } +} + +// ==================================================================================================== + +int main( int argc, void **argv ) + +{ + struct COBSDecoder *d = COBSDecoderInit( NULL ); + + if ( d ) + { + fprintf( stderr, "COBS Decoder initialised to %llx\n", ( long long int )d ); + } + else + { + fprintf( stderr, "*** ERR: COBS Decoder not created\n" ); + } + + for ( int i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) + { + fprintf( stderr, "%d: ", i ); + COBSPump( d, testSet[i].enc, testSet[i].encLen, _COBSpacketRxed, &testSet[i] ); + } +} +#endif + +// ==================================================================================================== diff --git a/Src/orbuculum.c b/Src/orbuculum.c index bef1cdcc..6bbbc041 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause */ /* - * Orbuculum main receiver and TPIU demux - * ====================================== + * Orbuculum main receiver and TPIU/COBS demux + * =========================================== * */ @@ -53,6 +53,7 @@ #include "git_version_info.h" #include "generics.h" #include "tpiuDecoder.h" +#include "cobsDecoder.h" #include "nwclient.h" #include "orbtraceIf.h" #include "stream.h" @@ -76,6 +77,7 @@ struct Options char *port; /* Serial host connection */ int speed; /* Speed of serial link */ bool useTPIU; /* Are we using TPIU, and stripping TPIU frames? */ + bool useCOBS; /* Are we using COBS, and stripping COBS frames? */ uint32_t dataSpeed; /* Effective data speed (can be less than link speed!) */ char *file; /* File host connection */ bool fileTerminate; /* Terminate when file read isn't successful */ @@ -83,7 +85,7 @@ struct Options char *otcl; /* Orbtrace command line options */ uint32_t intervalReportTime; /* If we want interval reports about performance */ bool mono; /* Supress colour in output */ - char *channelList; /* List of TPIU channels to be serviced */ + char *channelList; /* List of TPIU/COBS channels to be serviced */ bool hiresTime; /* Use hiresolution time (shorter timeouts...more accurate but higher load */ char *sn; /* Any part serial number for identifying a specific device */ /* Network link */ @@ -101,6 +103,8 @@ struct handlers struct RunTime { struct TPIUDecoder t; /* TPIU decoder instance, in case we need it */ + struct COBSDecoder c; /* COBS decoder instance, in case we need it */ + struct OrbtraceIf *o; /* For accessing ORBTrace devices + BMPs */ uint64_t intervalBytes; /* Number of bytes transferred in current interval */ @@ -123,9 +127,9 @@ struct RunTime int rp; struct dataBlock rawBlock[NUM_RAW_BLOCKS]; /* Transfer buffers from the receiver */ - int numHandlers; /* Number of TPIU channel handlers in use */ + int numHandlers; /* Number of TPIU/COBS channel handlers in use */ struct handlers *handler; - struct nwclientsHandle *n; /* Link to the network client subsystem (used for non-TPIU case) */ + struct nwclientsHandle *n; /* Link to the network client subsystem (used for non-TPIU/COBS case) */ char *sn; /* Serial number for any device we've established contact with */ }; @@ -138,6 +142,7 @@ struct RunTime #define NWSERVER_PORT (2332) #define NUM_TPIU_CHANNELS 0x80 +#define NUM_COBS_CHANNELS 0xFF #define INTERVAL_100US (100U) #define INTERVAL_1MS (10*INTERVAL_100US) @@ -341,6 +346,7 @@ void _printHelp( const char *const progName ) { genericsPrintf( "Usage: %s [options]" EOL, progName ); genericsPrintf( " -a, --serial-speed: to use" EOL ); + genericsPrintf( " -c, --cobs: Use COBS channels (and strip COBS framing from output flows)" EOL ); genericsPrintf( " -E, --eof: When reading from file, terminate at end of file" EOL ); genericsPrintf( " -f, --input-file: Take input from specified file" EOL ); genericsPrintf( " -h, --help: This help" EOL ); @@ -368,6 +374,7 @@ void _printVersion( void ) static struct option _longOptions[] = { {"serial-speed", required_argument, NULL, 'a'}, + {"cobs", required_argument, NULL, 'c'}, {"eof", no_argument, NULL, 'E'}, {"input-file", required_argument, NULL, 'f'}, {"help", no_argument, NULL, 'h'}, @@ -393,7 +400,7 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) int c, optionIndex = 0; #define DELIMITER ',' - while ( ( c = getopt_long ( argc, argv, "a:Ef:hHVl:m:Mn:o:O:p:s:t:v:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "a:c:Ef:hHVl:m:Mn:o:O:p:s:t:v:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -404,6 +411,13 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ + case 'c': + r->options->useCOBS = true; + r->options->channelList = optarg; + break; + + // ------------------------------------ + case 'E': r->options->fileTerminate = true; break; @@ -581,6 +595,15 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) genericsReport( V_INFO, "Use/Strip TPIU : False" EOL ); } + if ( r->options->useCOBS ) + { + genericsReport( V_INFO, "Use/Strip COBS : True (Channel List %s)" EOL, r->options->channelList ); + } + else + { + genericsReport( V_INFO, "Use/Strip COBS : False" EOL ); + } + if ( r->options->otcl ) { genericsReport( V_INFO, "Orbtrace CL : %s" EOL, r->options->otcl ); @@ -611,6 +634,12 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) return false; } + if ( ( r->options->useCOBS ) && ( r->options->useTPIU ) ) + { + genericsReport( V_ERROR, "Cannot specify COBS and TPIU at the same time" EOL ); + return false; + } + if ( ( r->options->port ) && ( r->options->nwserverPort ) ) { genericsReport( V_ERROR, "Cannot specify port and NW Server at same time" EOL ); @@ -658,7 +687,7 @@ void *_checkInterval( void *params ) h = r->handler; uint64_t totalDat = 0; - if ( ( r->intervalBytes ) && ( r->options->useTPIU ) ) + if ( ( r->intervalBytes ) && ( ( r->options->useTPIU ) || ( r->options->useCOBS ) ) ) { for ( int chIndex = 0; chIndex < r->numHandlers; chIndex++ ) { @@ -694,7 +723,7 @@ static void _purgeBlock( struct RunTime *r ) { /* Now send any packets to clients who want it */ - if ( r->options->useTPIU ) + if ( ( r->options->useTPIU ) || ( r->options->useCOBS ) ) { struct handlers *h = r->handler; int i = r->numHandlers; @@ -772,6 +801,70 @@ static void _TPIUpacketRxed( enum TPIUPumpEvent e, struct TPIUPacket *p, void *p break; } } +// ==================================================================================================== + +static void _COBSpacketRxed( enum COBSPumpEvent e, struct Frame *p, void *param ) + +/* Callback for when a COBS frame has been assembled */ + +{ + struct RunTime *r = ( struct RunTime * )param; + + struct handlers *h; + int chIndex; + int incomingChannel; + + switch ( e ) + { + case COBS_EV_RXEDFRAME: + if ( p->len > 1 ) + { + incomingChannel = p->d[0]; + /* Search for channel amongst the handlers */ + + h = r->handler; + + for ( chIndex = 0; chIndex < r->numHandlers; chIndex++ ) + { + if ( h->channel == incomingChannel ) + { + break; + } + + h++; + } + + /* We must have found a match for this at some point, so add it to the queue */ + if ( ( chIndex != r->numHandlers ) && ( h ) ) + { + for ( int i = 1; i < p->len; i++ ) + { + h->strippedBlock->buffer[h->strippedBlock->fillLevel++] = p->d[i]; + + if ( h->strippedBlock->fillLevel == sizeof( h->strippedBlock->buffer ) ) + { + _purgeBlock( r ); + } + } + + _purgeBlock( r ); + } + } + + break; + + case COBS_EV_ERROR: + genericsReport( V_WARN, "****ERROR****%s" EOL, ( r->options->intervalReportTime ) ? EOL : "" ); + break; + + case COBS_EV_NEWSYNC: + case COBS_EV_RXING: + case COBS_EV_NONE: + case COBS_EV_UNSYNCED: + default: + break; + } +} // ==================================================================================================== static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer ) @@ -810,7 +903,12 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer } } - if ( r-> options->useTPIU ) + if ( r-> options->useCOBS ) + { + /* Strip the COBS framing from this input */ + COBSPump( &r->c, r->rawBlock[r->rp].buffer, r->rawBlock[r->rp].fillLevel, _COBSpacketRxed, r ); + } + else if ( r-> options->useTPIU ) { /* Strip the TPIU framing from this input */ TPIUPump2( &r->t, r->rawBlock[r->rp].buffer, r->rawBlock[r->rp].fillLevel, _TPIUpacketRxed, r ); @@ -889,7 +987,12 @@ static void _usb_callback( struct libusb_transfer *t ) #endif - if ( _r.options->useTPIU ) + if ( _r.options->useCOBS ) + { + /* Strip the COBS framing from this input */ + COBSPump( &_r.c, t->buffer, t->actual_length, _COBSpacketRxed, &_r ); + } + else if ( _r.options->useTPIU ) { /* Strip the TPIU framing from this input */ TPIUPump2( &_r.t, t->buffer, t->actual_length, _TPIUpacketRxed, &_r ); @@ -1325,9 +1428,6 @@ int main( int argc, char *argv[] ) WSAStartup( MAKEWORD( 2, 2 ), &wsaData ); #endif - /* Setup TPIU in case we call it into service later */ - TPIUDecoderInit( &_r.t ); - if ( pthread_mutex_init( &_r.dataForClients_m, NULL ) != 0 ) { genericsExit( -1, "Failed to establish mutex for condition variablee" EOL ); @@ -1344,6 +1444,16 @@ int main( int argc, char *argv[] ) genericsExit( -1, "" EOL ); } + if ( _r.options->useTPIU ) + { + TPIUDecoderInit( &_r.t ); + } + + if ( _r.options->useCOBS ) + { + COBSDecoderInit( &_r.c ); + } + genericsScreenHandling( !_r.options->mono ); /* Make sure the network clients get removed at the end */ @@ -1365,7 +1475,7 @@ int main( int argc, char *argv[] ) #endif - if ( _r.options->useTPIU ) + if ( _r.options->useTPIU || _r.options->useCOBS ) { char *c = _r.options->channelList; int x = 0; @@ -1390,7 +1500,7 @@ int main( int argc, char *argv[] ) if ( x ) { /* This is a good number, so open */ - if ( ( x < 0 ) || ( x >= NUM_TPIU_CHANNELS ) ) + if ( ( x < 0 ) || ( ( x >= NUM_TPIU_CHANNELS ) && _r.options->useTPIU ) || ( ( x >= NUM_COBS_CHANNELS ) && _r.options->useCOBS ) ) { genericsExit( -1, "Channel number out of range" EOL ); } diff --git a/meson.build b/meson.build index dfad6f27..15c12479 100644 --- a/meson.build +++ b/meson.build @@ -72,6 +72,7 @@ executable('orbuculum', 'Src/orbuculum.c', 'Src/nwclient.c', 'Src/orbtraceIf.c', + 'Src/cobsDecoder.c', git_version_info_h, ], include_directories: incdirs, From efe6cd3cedeea42ccb10251da6dae81e3202da28 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Thu, 31 Aug 2023 23:58:31 +0100 Subject: [PATCH 02/37] Temporary patch to support COBS carrying raw TPIU frames --- Src/orbuculum.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Src/orbuculum.c b/Src/orbuculum.c index 6bbbc041..7d25a584 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -808,6 +808,8 @@ static void _COBSpacketRxed( enum COBSPumpEvent e, struct Frame *p, void *param /* Callback for when a COBS frame has been assembled */ { + + struct RunTime *r = ( struct RunTime * )param; struct handlers *h; @@ -817,6 +819,13 @@ static void _COBSpacketRxed( enum COBSPumpEvent e, struct Frame *p, void *param switch ( e ) { case COBS_EV_RXEDFRAME: + ///////////////////////////////////////////////////////////////////// + //// HACK FOR CASE THAT COBS IS JUST TRANSITING RAW TPIU FRAMES ///// + TPIUPump2( &r->t, p->d, p->len, _TPIUpacketRxed, r ); + _purgeBlock( r ); + break; + ///////////////////////////////////////////////////////////////////// + if ( p->len > 1 ) { incomingChannel = p->d[0]; From 5b0abe43be52c859980b728a8b170a241f8cfacb Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Sat, 2 Sep 2023 01:03:36 +0100 Subject: [PATCH 03/37] Next stage of COBS development, with TPIU channels in COBS frame header --- Src/cobsDecoder.c | 10 ++++++++-- Src/orbuculum.c | 12 ++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Src/cobsDecoder.c b/Src/cobsDecoder.c index 3106230a..01d030a2 100644 --- a/Src/cobsDecoder.c +++ b/Src/cobsDecoder.c @@ -95,8 +95,6 @@ void COBSPump( struct COBSDecoder *t, uint8_t *incoming, int len, switch ( t->s ) { case COBS_UNSYNCED: // ---------------------------------------------------------------- - - /* This case was already dealt with above */ if ( COBS_SYNC_CHAR == *fp ) { packetRxed( COBS_EV_NEWSYNC, NULL, NULL ); @@ -154,6 +152,14 @@ void COBSPump( struct COBSDecoder *t, uint8_t *incoming, int len, } } + /* Check for frame overflow ... if it's max then error */ + if ( COBS_MAX_PACKET_LEN == t->f.len ) + { + t->stats.error++; + packetRxed( COBS_EV_ERROR, &t->f, param ); + t->s = COBS_IDLE; + } + break; case COBS_ERROR: // ------------------------------------------------------------------ diff --git a/Src/orbuculum.c b/Src/orbuculum.c index 7d25a584..dee6458a 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -809,7 +809,7 @@ static void _COBSpacketRxed( enum COBSPumpEvent e, struct Frame *p, void *param { - + struct RunTime *r = ( struct RunTime * )param; struct handlers *h; @@ -819,13 +819,6 @@ static void _COBSpacketRxed( enum COBSPumpEvent e, struct Frame *p, void *param switch ( e ) { case COBS_EV_RXEDFRAME: - ///////////////////////////////////////////////////////////////////// - //// HACK FOR CASE THAT COBS IS JUST TRANSITING RAW TPIU FRAMES ///// - TPIUPump2( &r->t, p->d, p->len, _TPIUpacketRxed, r ); - _purgeBlock( r ); - break; - ///////////////////////////////////////////////////////////////////// - if ( p->len > 1 ) { incomingChannel = p->d[0]; @@ -855,8 +848,6 @@ static void _COBSpacketRxed( enum COBSPumpEvent e, struct Frame *p, void *param _purgeBlock( r ); } } - - _purgeBlock( r ); } } @@ -916,6 +907,7 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer { /* Strip the COBS framing from this input */ COBSPump( &r->c, r->rawBlock[r->rp].buffer, r->rawBlock[r->rp].fillLevel, _COBSpacketRxed, r ); + _purgeBlock( r ); } else if ( r-> options->useTPIU ) { From dc8f24e70fa1277eaedd14765d1757032fbc7993 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Thu, 14 Sep 2023 08:58:11 +0100 Subject: [PATCH 04/37] Emergency commit due to duff laptop. Do not use --- Inc/cobs.h | 67 ++++++++ Inc/cobsDecoder.h | 84 --------- Inc/itmfifos.h | 17 +- Inc/nw.h | 3 + Inc/nwclient.h | 2 +- Inc/orbtraceIf.h | 2 + Src/cobs.c | 424 ++++++++++++++++++++++++++++++++++++++++++++++ Src/cobsDecoder.c | 315 ---------------------------------- Src/itmfifos.c | 75 +++++--- Src/nwclient.c | 4 +- Src/orbcat.c | 138 +++++++++++---- Src/orbdump.c | 143 +++++++++++++--- Src/orbfifo.c | 110 +++++++++--- Src/orblcd.c | 119 ++++++++++--- Src/orbmortem.c | 218 ++++++++++++++++-------- Src/orbprofile.c | 123 +++++++++++--- Src/orbstat.c | 115 +++++++++++-- Src/orbtop.c | 123 +++++++++++--- Src/orbtraceIf.c | 10 ++ Src/orbuculum.c | 222 +++++++++++------------- Src/orbzmq.c | 121 ++++++++++--- meson.build | 2 +- 22 files changed, 1627 insertions(+), 810 deletions(-) create mode 100644 Inc/cobs.h delete mode 100644 Inc/cobsDecoder.h create mode 100644 Src/cobs.c delete mode 100644 Src/cobsDecoder.c diff --git a/Inc/cobs.h b/Inc/cobs.h new file mode 100644 index 00000000..4bd26c1b --- /dev/null +++ b/Inc/cobs.h @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +/* + * COBS Module + * =========== + * + */ + +#ifndef _COBS_ +#define _COBS_ + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define COBS_MAX_PACKET_LEN (4096) +#define COBS_MAX_ENC_PACKET_LEN (COBS_MAX_PACKET_LEN + COBS_MAX_PACKET_LEN / 254) + +enum COBSPumpState +{ + COBS_IDLE, + COBS_RXING +}; + +struct Frame +{ + unsigned int len; /* Received length (after pre-processing) */ + uint8_t d[COBS_MAX_ENC_PACKET_LEN]; /* ...the data itself + room for worst case overhead */ +}; + +struct COBS +{ + struct Frame f; /* Decoded frame currently under construction */ + enum COBSPumpState s; + int intervalCount; + bool maxCount; + int error; + struct Frame partf; /* Partial frame that is being collected */ + bool selfAllocated; /* Flag indicating that memory was allocated by the library */ +}; + +#define COBS_EOP_LEN (1) +extern const uint8_t cobs_eop[COBS_EOP_LEN]; + +// ==================================================================================================== + +const uint8_t *COBSgetFrameExtent( const uint8_t *inputEnc, int len ); +const uint8_t *COBSsimpleDecode( const uint8_t *inputEnc, int len, struct Frame *o ); +bool COBSisEOFRAME( const uint8_t *inputEnc ); + +void COBSEncode( const uint8_t *inputMsg, int len, struct Frame *o ); + +/* Context free functions */ +void COBSPump( struct COBS *t, uint8_t *incoming, int len, + void ( *packetRxed )( struct Frame *p, void *param ), + void *param ); +void COBSDelete( struct COBS *t ); +struct COBS *COBSInit( struct COBS *t ); +// ==================================================================================================== +#ifdef __cplusplus +} +#endif +#endif diff --git a/Inc/cobsDecoder.h b/Inc/cobsDecoder.h deleted file mode 100644 index 7cd0f9d3..00000000 --- a/Inc/cobsDecoder.h +++ /dev/null @@ -1,84 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause */ - -/* - * TPIU Decoder Module - * =================== - * - */ - -#ifndef _COBS_DECODER_ -#define _COBS_DECODER_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -enum COBSPumpEvent -{ - COBS_EV_NONE, - COBS_EV_UNSYNCED, - COBS_EV_NEWSYNC, - COBS_EV_RXING, - COBS_EV_RXEDFRAME, - COBS_EV_ERROR -}; - -enum COBSPumpState -{ - COBS_UNSYNCED, - COBS_IDLE, - COBS_RXING, - COBS_ERROR -}; - -#define COBS_MAX_PACKET_LEN (4096) - -struct COBSDecoderStats -{ - uint32_t lostSync; /* Number of times sync has been lost */ - uint32_t syncCount; /* Number of times a sync event has been received */ - uint32_t halfSyncCount; /* Number of times a half sync event has been received */ - uint32_t packets; /* Number of packets received */ - uint32_t error; /* Number of times an error has been received */ -}; - -struct Frame -{ - unsigned int len; /* Received length (after pre-processing) */ - int8_t d[COBS_MAX_PACKET_LEN]; /* ...the data itself */ -}; - -struct COBSDecoder -{ - enum COBSPumpState s; /* Current state of TPIU decoder */ - uint8_t intervalCount; /* Current byte number in reception */ - bool maxCount; /* Is this interval maxed out? (So don't expect a SYNC at the end) */ - uint8_t currentStream; /* Currently selected stream */ - uint32_t syncMonitor; /* State of sync reception ... in case we loose sync */ - struct Frame f; /* Receive frame currently under construction */ - bool selfAllocated; /* Flag indicating that memory was allocated by the library */ - - struct COBSDecoderStats stats; /* Record of decoder stats */ -}; - -// ==================================================================================================== -void COBSDecoderForceSync( struct COBSDecoder *t ); -void COBSDecoderZeroStats( struct COBSDecoder *t ); -bool COBSDecoderSynced( struct COBSDecoder *t ); -struct COBSDecoderStats *COBSDecoderGetStats( struct COBSDecoder *t ); - -void COBSPump( struct COBSDecoder *t, uint8_t *incoming, int len, - void ( *packetRxed )( enum COBSPumpEvent e, struct Frame *p, void *param ), - void *param ); - -void COBSDecoderDelete( struct COBSDecoder *t ); -struct COBSDecoder *COBSDecoderInit( struct COBSDecoder *t ); -// ==================================================================================================== -#ifdef __cplusplus -} -#endif -#endif diff --git a/Inc/itmfifos.h b/Inc/itmfifos.h index b7b55f57..8d212951 100644 --- a/Inc/itmfifos.h +++ b/Inc/itmfifos.h @@ -11,6 +11,7 @@ #include "tpiuDecoder.h" #include "itmDecoder.h" +#include "cobs.h" #include "generics.h" @@ -26,24 +27,26 @@ extern "C" { struct Channel; struct itmfifosHandle; +enum Prot { PROT_COBS, PROT_ITM, PROT_TPIU, PROT_UNKNOWN }; + /* Fifos running */ void itmfifoForceSync( struct itmfifosHandle *f, bool synced ); /* Force sync status */ -void itmfifoProtocolPump( struct itmfifosHandle *f, uint8_t c ); /* Send undecoded data to the fifo */ +void itmfifoProtocolPump( struct itmfifosHandle *f, uint8_t *c, int len ); /* Send undecoded data to the fifo */ /* Getters and setters */ void itmfifoSetChannel( struct itmfifosHandle *f, int chan, char *n, char *s ); void itmfifoSetChanPath( struct itmfifosHandle *f, char *s ); -void itmfifoSetUseTPIU( struct itmfifosHandle *f, bool s ); +void itmfifoSetProtocol( struct itmfifosHandle *f, enum Prot p ); void itmfifoSetForceITMSync( struct itmfifosHandle *f, bool s ); -void itmfifoSettpiuITMChannel( struct itmfifosHandle *f, int channel ); +void itmfifoSettag( struct itmfifosHandle *f, int tag ); char *itmfifoGetChannelName( struct itmfifosHandle *f, int chan ); char *itmfifoGetChannelFormat( struct itmfifosHandle *f, int chan ); char *itmfifoGetChanPath( struct itmfifosHandle *f ); -bool itmfifoGetUseTPIU( struct itmfifosHandle *f ); +enum Prot itmfifoGetProtocol( struct itmfifosHandle *f ); struct TPIUCommsStats *itmfifoGetCommsStats( struct itmfifosHandle *f ); struct ITMDecoderStats *itmfifoGetITMDecoderStats( struct itmfifosHandle *f ); bool itmfifoGetForceITMSync( struct itmfifosHandle *f ); -int itmfifoGettpiuITMChannel( struct itmfifosHandle *f ); +int itmfifoGettag( struct itmfifosHandle *f ); void itmfifoUsePermafiles( struct itmfifosHandle *f, bool usePermafilesSet ); /* Filewriting */ @@ -52,9 +55,7 @@ void itmfifoFilewriter( struct itmfifosHandle *f, bool useFilewriter, char *work /* Fifos management */ bool itmfifoCreate( struct itmfifosHandle *f ); /* Create the fifo set */ void itmfifoShutdown( struct itmfifosHandle *f ); /* Destroy the fifo set */ -struct itmfifosHandle *itmfifoInit( bool forceITMSyncSet, - bool useTPIUSet, - int TPIUchannelSet ); /* Create an instance */ +struct itmfifosHandle *itmfifoInit( bool forceITMSyncSet, enum Prot p, int tag ); // ==================================================================================================== #ifdef __cplusplus } diff --git a/Inc/nw.h b/Inc/nw.h index 95484788..2d393a53 100644 --- a/Inc/nw.h +++ b/Inc/nw.h @@ -17,9 +17,12 @@ extern "C" { // ==================================================================================================== +#define OTCLIENT_SERVER_PORT (3402) /* ORBTrace COBS server port definition */ #define NWCLIENT_SERVER_PORT (3443) /* Server port definition */ #define TRANSFER_SIZE (65536*4) +#define DEFAULT_ITM_STREAM 1 +#define DEFAULT_ETM_STREAM 2 // ==================================================================================================== #ifdef __cplusplus diff --git a/Inc/nwclient.h b/Inc/nwclient.h index bb0a40a3..9f9c6e0a 100644 --- a/Inc/nwclient.h +++ b/Inc/nwclient.h @@ -23,7 +23,7 @@ struct nwclientsHandle; // ==================================================================================================== -void nwclientSend( struct nwclientsHandle *h, uint32_t len, uint8_t *ipbuffer ); +void nwclientSend( struct nwclientsHandle *h, uint32_t len, const uint8_t *ipbuffer ); void nwclientShutdown( struct nwclientsHandle *h ); bool nwclientShutdownComplete( struct nwclientsHandle *h ); diff --git a/Inc/orbtraceIf.h b/Inc/orbtraceIf.h index cbf1a0f5..fc047752 100644 --- a/Inc/orbtraceIf.h +++ b/Inc/orbtraceIf.h @@ -90,6 +90,7 @@ struct OrbtraceIf int numBlocks; /* ...and how many */ uint8_t ep; /* Endpoint used for data transfer */ uint8_t iface; /* ...and the interface */ + bool isOrbtrace; /* Is this an orbtrace device? */ int numDevices; /* Number of matching devices found */ struct OrbtraceIfDevice *devices; /* List of matching devices found */ @@ -148,6 +149,7 @@ bool OrbtraceIfOpenDevice( struct OrbtraceIf *o, int entry ); bool OrbtraceGetIfandEP( struct OrbtraceIf *o ); void OrbtraceIfCloseDevice( struct OrbtraceIf *o ); enum Channel OrbtraceIfNameToChannel( char *x ); +bool OrbtraceIsOrbtrace( struct OrbtraceIf *o ); /* Device manipulation */ bool OrbtraceIfSetTraceWidth( struct OrbtraceIf *o, int width ); diff --git a/Src/cobs.c b/Src/cobs.c new file mode 100644 index 00000000..5038566f --- /dev/null +++ b/Src/cobs.c @@ -0,0 +1,424 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +/* + * COBS Encoder/Decoder Module + * =========================== + * + * Routines based on code from http://www.stuartcheshire.org/papers/COBSforToN.pdf + * + */ + +#include +#include +#include "cobs.h" + +#define COBS_SYNC_CHAR (0) + +const uint8_t cobs_eop[COBS_EOP_LEN] = { COBS_SYNC_CHAR }; + +// ==================================================================================================== +struct COBS *COBSInit( struct COBS *t ) + +/* Reset a COBS instance */ + +{ + if ( !t ) + { + t = ( struct COBS * )calloc( 1, sizeof( struct COBS ) ); + t->selfAllocated = true; + } + + return t; +} +// ==================================================================================================== +void COBSDelete( struct COBS *t ) + +/* Destroy a COBS instance, but only if we created it */ + +{ + if ( t->selfAllocated ) + { + free( t ); + t = NULL; + } +} + +// ==================================================================================================== + +void COBSEncode( const uint8_t *inputMsg, int len, struct Frame *o ) + +/* Encode frame and write into provided output Frame buffer */ + +{ + uint8_t *wp = o->d; + o->len = 0; + + /* We always start a frame with a sync so the receivers got a chance */ + *wp++ = COBS_SYNC_CHAR; + + if ( len ) + { + uint8_t *cp = wp++; + int seglen = 1; + + for ( const uint8_t *rp = inputMsg; len--; rp++ ) + { + if ( COBS_SYNC_CHAR != *rp ) + { + *wp++ = *rp; + seglen++; + } + + if ( ( COBS_SYNC_CHAR == *rp ) || ( 0xff == seglen ) ) + { + *cp = seglen; + seglen = 1; + cp = wp; + + if ( ( COBS_SYNC_CHAR == *rp ) || len ) + { + wp++; + } + } + } + + *cp = seglen; + } + + + o->len = ( wp - o->d ); +} + +// ==================================================================================================== + +bool COBSisEOFRAME( const uint8_t *inputEnc ) + +{ + return ( COBS_SYNC_CHAR == *inputEnc ); +} + +// ==================================================================================================== + +void COBSPump( struct COBS *t, uint8_t *incoming, int len, + void ( *packetRxed )( struct Frame *p, void *param ), + void *param ) + + +/* Assemble this packet into a complete frame and call back */ + +{ + uint8_t *fp = incoming; + + for ( unsigned int rlen = 0; rlen < len; rlen++, fp++ ) + { + switch ( t->s ) + { + case COBS_IDLE: // ------------------------------------------------------------------- + if ( COBS_SYNC_CHAR != *fp ) + { + t->f.len = 0; + t->intervalCount = *fp; + t->maxCount = ( *fp == 255 ); + t->s = COBS_RXING; + } + + break; + + case COBS_RXING: // ------------------------------------------------------------------- + t->intervalCount--; + + if ( !t->intervalCount ) + { + if ( COBS_SYNC_CHAR == *fp ) + { + /* This is the end of a packet */ + packetRxed( &t->f, param ); + t->s = COBS_IDLE; + } + else + { + if ( !t->maxCount ) + { + t->f.d[t->f.len++] = COBS_SYNC_CHAR; + } + + t->intervalCount = *fp; + t->maxCount = ( *fp == 255 ); + } + } + else + { + if ( COBS_SYNC_CHAR == *fp ) + { + /* This is the end of a packet and the lengths don't match */ + t->error++; + t->s = COBS_IDLE; + } + else + { + t->f.d[t->f.len++] = *fp; + } + } + + /* Check for frame overflow ... if it's max then error */ + if ( COBS_MAX_PACKET_LEN == t->f.len ) + { + t->error++; + t->s = COBS_IDLE; + } + + break; + } + } +} + +// ==================================================================================================== +const uint8_t *COBSSimpleDecode( const uint8_t *inputEnc, int len, struct Frame *o ) + +/* Decode frame and write decoded frame into provided Frame buffer */ +/* Returns pointer to first character after frame (should be COBS_SYNC_CHAR) */ +/* or NULL if packet did not decode...and store the fragment. */ + +{ + const uint8_t *fp = inputEnc; + const uint8_t *efp = inputEnc + len; + + uint8_t *op = o->d; + + int interval; + + /* Deal with possibility of sync chars on the front */ + while ( ( COBS_SYNC_CHAR == *fp ) && ( fp < efp ) ) + { + fp++; + } + + while ( fp < efp ) + { + interval = *fp++; + + if ( COBS_SYNC_CHAR == interval ) + { + /* We have finished...for better or worse */ + break; + } + + for ( int i = 1; i < interval; i++ ) + { + /* Deal with possibility of illegal sync chars in the flow */ + if ( *fp == COBS_SYNC_CHAR ) + { + break; + } + + *op++ = *fp++; + } + + if ( interval < 0xff ) + { + *op++ = COBS_SYNC_CHAR; + } + } + + // if ( ( COBSisEOFRAME( fp ) ) && ( op - o->d ) ) + if ( op - o->d ) + { + o->len = op - o->d; + return fp; + } + + return NULL; +} + +// ==================================================================================================== + +const uint8_t *COBSgetFrameExtent( const uint8_t *inputEnc, int len ) + +/* Look through memory until an end of frame marker is found, or memory is exhausted. */ + +{ + /* Go find the next sync */ + while ( !COBSisEOFRAME( inputEnc ) && --len ) + { + inputEnc++; + } + + return inputEnc; +} + +// ==================================================================================================== +// ==================================================================================================== +// ==================================================================================================== +// Test Cases +// ==================================================================================================== +// ==================================================================================================== +// ==================================================================================================== + +/* Build tests with; + * gcc -DTESTING_COBS cobs.c -I ../Inc -ggdb + * Execute with; + * ./a.out + */ + +#ifdef TESTING_COBS + +#include + +static void _printDigits( int length, uint8_t *d ) +{ + while ( length-- ) + { + fprintf( stderr, "%02x ", *d++ ); + } +} + + +struct test +{ + struct Frame dec; + struct Frame enc; +}; + +/* These tests are from https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing#Encoding_examples */ +struct test testSet[] = +{ + /* 1 */ { { 1, "\x00" }, { 3, "\x01\x01\x00" } }, + /* 2 */ { { 2, "\x00\x00" }, { 4, "\x01\x01\x01\x00" } }, + /* 3 */ { { 3, "\x00\x11\x00" }, { 5, "\x01\x02\x11\x01\x00" } }, + /* 4 */ { { 4, "\x11\x22\x00\x33"}, { 6, "\x03\x11\x22\x02\x33\x00" } }, + /* 5 */ { { 4, "\x11\x22\x33\x44"}, { 6, "\x05\x11\x22\x33\x44\x00" } }, + /* 6 */ { { 4, "\x11\x00\x00\x00"}, { 6, "\x02\x11\x01\x01\x01\x00" } }, + /* 7 */ { { 254, "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe"}, {256, "\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00" }}, + /* 8 */ {{ 255, "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe"}, {257, "\x01\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00" }}, + /* 9 */ { {255, "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"}, {258, "\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x02\xff\x00"} }, + /* 10 */ { {255, "\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00"}, {258, "\xff\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x01\x01\x00" }}, + /* 11 */ { {255, "\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00\x01"}, {257, "\xfe\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x02\x01\x00" }}, +}; + +// ==================================================================================================== + +void _packetRxed ( struct Frame *p, void *param ) + +{ + struct test *t = ( struct test * )param; + int k; + + for ( k = 0; ( ( k < p->len ) && ( p->d[k] == t->dec.d[k] ) ); k++ ) {} + + if ( k != p->len ) + { + fprintf( stderr, "*********FAILED\nWanted:" ); + _printDigits( t->dec.len, t->dec.d ); + fprintf( stderr, "\nRecevd:" ); + _printDigits( p->len, p->d ); + fprintf( stderr, "\n" ); + } + else + { + fprintf( stderr, "OK\n" ); + } +} +// ==================================================================================================== + +int main( int argc, void **argv ) + +{ + struct COBS *d = COBSInit( NULL ); + struct Frame o; + int i, j, k; + + int oplen; + + if ( d ) + { + fprintf( stderr, "COBS initialised to %llx\n", ( long long int )d ); + } + else + { + fprintf( stderr, "*** ERR: COBS not created\n" ); + } + + fprintf( stderr, "Testing simple decode;\n" ); + + for ( i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) + { + fprintf( stderr, "%d: ", i + 1 ); + + /* The +1 here is because we have a COBS_SYNC_CHAR on the end of each frame */ + if ( testSet[i].enc.len != COBSgetFrameExtent( testSet[i].enc.d, testSet[i].enc.len ) - testSet[i].enc.d + 1 ) + { + fprintf( stderr, "Failed, packet length doesn't match (%d vs wanted %d\n", COBSgetFrameExtent( testSet[i].enc.d, testSet[i].enc.len ) - o.d, testSet[i].enc.len ); + continue; + } + + if ( !COBSSimpleDecode( testSet[i].enc.d, testSet[i].enc.len, &o ) ) + { + fprintf( stderr, "Failed, Packet did not decode\n" ); + continue; + } + + for ( k = 0; ( ( k < o.len ) && ( o.d[k] == testSet[i].dec.d[k] ) ); k++ ) {} + + if ( k != o.len ) + { + fprintf( stderr, "*********FAILED\nWanted:" ); + _printDigits( testSet[i].dec.len, testSet[i].dec.d ); + fprintf( stderr, "\nRecevd:" ); + _printDigits( o.len, o.d ); + fprintf( stderr, "\n" ); + continue; + } + + fprintf( stderr, "OK\n" ); + } + + + + fprintf( stderr, "Testing pumped decode;\n" ); + + for ( i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) + { + fprintf( stderr, "%d: ", i + 1 ); + COBSPump( d, testSet[i].enc.d, testSet[i].enc.len, _packetRxed, &testSet[i] ); + } + + fprintf( stderr, "\nTesting encode;\n" ); + + for ( int i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) + { + fprintf( stderr, "%d: ", i + 1 ); + COBSEncode( testSet[i].dec.d, testSet[i].dec.len, &o ); + + if ( o.len != COBSgetFrameExtent( o.d, o.len ) - o.d ) + { + fprintf( stderr, "Static framelen assessment failed %d vs expected %d\n", o.len, COBSgetFrameExtent( o.d, o.len ) - o.d ); + continue; + } + + if ( o.len != testSet[i].enc.len ) + { + fprintf( stderr, "Length mismatch correct=%d vs actual=%d\n", testSet[i].enc.len, o.len ); + + for ( int j = 0; j < o.len; j++ ) + { + if ( o.d[j] != testSet[i].enc.d[j] ) + { + fprintf( stderr, "*********FAILED\nWanted:" ); + _printDigits( testSet[i].enc.len, testSet[i].enc.d ); + fprintf( stderr, "\nRecevd:" ); + _printDigits( o.len, o.d ); + fprintf( stderr, "\n" ); + break; + } + } + + } + else + { + fprintf( stderr, "OK\n" ); + } + } +} +#endif + +// ==================================================================================================== diff --git a/Src/cobsDecoder.c b/Src/cobsDecoder.c deleted file mode 100644 index 01d030a2..00000000 --- a/Src/cobsDecoder.c +++ /dev/null @@ -1,315 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause */ - -/* - * COBS Decoder Module - * =================== - * - */ - -#include -#include -#include -#ifdef DEBUG - #include "generics.h" -#else - #define genericsReport(x...) -#endif -#include "cobsDecoder.h" - -#define COBS_SYNC_CHAR (0) - -// ==================================================================================================== -struct COBSDecoder *COBSDecoderInit( struct COBSDecoder *t ) - -/* Reset a COBSDecoder instance */ - -{ - if ( !t ) - { - t = ( struct COBSDecoder * )calloc( 1, sizeof( struct COBSDecoder ) ); - t->selfAllocated = true; - } - - t->s = COBS_UNSYNCED; - t->syncMonitor = 0; - COBSDecoderZeroStats( t ); - - return t; -} -// ==================================================================================================== -void COBSDecoderDelete( struct COBSDecoder *t ) - -/* Destroy a COBSDecoder instance, but only if we created it */ - -{ - if ( t->selfAllocated ) - { - free( t ); - t = NULL; - } -} - -// ==================================================================================================== -void COBSDecoderZeroStats( struct COBSDecoder *t ) - -{ - memset( &t->stats, 0, sizeof( struct COBSDecoderStats ) ); -} -// ==================================================================================================== -bool COBSDecoderSynced( struct COBSDecoder *t ) -{ - return t->s != COBS_UNSYNCED; -} -// ==================================================================================================== -struct COBSDecoderStats *COBSDecoderGetStats( struct COBSDecoder *t ) -{ - return &t->stats; -} -// ==================================================================================================== -void COBSDecoderForceSync( struct COBSDecoder *t ) - -/* Force the decoder into a specific sync state */ - -{ - if ( t->s == COBS_UNSYNCED ) - { - t->stats.syncCount++; - } - - t->s = COBS_IDLE; -} -// ==================================================================================================== - -void COBSPump( struct COBSDecoder *t, uint8_t *incoming, int len, - void ( *packetRxed )( enum COBSPumpEvent e, struct Frame *p, void *param ), - void *param ) - - -/* Assemble this packet into a complete frame and call back */ - -{ - uint8_t *fp = incoming; - - for ( unsigned int rlen = 0; rlen < len; rlen++, fp++ ) - { - switch ( t->s ) - { - case COBS_UNSYNCED: // ---------------------------------------------------------------- - if ( COBS_SYNC_CHAR == *fp ) - { - packetRxed( COBS_EV_NEWSYNC, NULL, NULL ); - t->stats.syncCount++; - t->s = COBS_IDLE; - } - - break; - - case COBS_IDLE: // ------------------------------------------------------------------- - if ( COBS_SYNC_CHAR != *fp ) - { - t->f.len = 0; - t->intervalCount = *fp; - t->maxCount = ( *fp == 255 ); - t->s = COBS_RXING; - } - - break; - - case COBS_RXING: // ------------------------------------------------------------------- - t->intervalCount--; - - if ( !t->intervalCount ) - { - if ( COBS_SYNC_CHAR == *fp ) - { - /* This is the end of a packet */ - packetRxed( COBS_EV_RXEDFRAME, &t->f, param ); - t->s = COBS_IDLE; - } - else - { - if ( !t->maxCount ) - { - t->f.d[t->f.len++] = COBS_SYNC_CHAR; - } - - t->intervalCount = *fp; - t->maxCount = ( *fp == 255 ); - } - } - else - { - if ( COBS_SYNC_CHAR == *fp ) - { - /* This is the end of a packet and the lengths don't match */ - t->stats.error++; - packetRxed( COBS_EV_ERROR, &t->f, param ); - t->s = COBS_IDLE; - } - else - { - t->f.d[t->f.len++] = *fp; - } - } - - /* Check for frame overflow ... if it's max then error */ - if ( COBS_MAX_PACKET_LEN == t->f.len ) - { - t->stats.error++; - packetRxed( COBS_EV_ERROR, &t->f, param ); - t->s = COBS_IDLE; - } - - break; - - case COBS_ERROR: // ------------------------------------------------------------------ - t->s = COBS_UNSYNCED; - t->stats.error++; - packetRxed( COBS_EV_ERROR, NULL, NULL ); - break; - } - } -} - - -// ==================================================================================================== -// ==================================================================================================== -// ==================================================================================================== -// Test Cases -// ==================================================================================================== -// ==================================================================================================== -// ==================================================================================================== - -/* Build tests with; - * gcc -DTESTING_COBSDECODER cobsDecoder.c -I ../Inc -ggdb - * Execute with; - * ./a.out - */ - -#ifdef TESTING_COBSDECODER - -static void _printDigits( int length, uint8_t *d ) -{ - while ( length-- ) - { - fprintf( stderr, "%02x ", *d++ ); - } -} - - -struct test -{ - unsigned int unencLen; - char *unenc; - unsigned int encLen; - char *enc; -}; - -/* These tests are from https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing#Encoding_examples */ -struct test testSet[] = -{ - - /* 0 */ { 0, "", 1, "\x00" }, - /* 1 */ { 1, "\x00", 3, "\x01\x01\x00" }, - /* 2 */ { 2, "\x00\x00", 4, "\x01\x01\x01\x00" }, - /* 3 */ { 3, "\x00\x11\x00", 5, "\x01\x02\x11\x01\x00" }, - /* 4 */ { 4, "\x11\x22\x00\x33", 6, "\x03\x11\x22\x02\x33\x00" }, - /* 5 */ { 4, "\x11\x22\x33\x44", 6, "\x05\x11\x22\x33\x44\x00" }, - /* 6 */ { 4, "\x11\x00\x00\x00", 6, "\x02\x11\x01\x01\x01\x00" }, - /* 7 */ { 254, "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe", 256, "\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00" }, - /* 8 */ { 255, "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe", 257, "\x01\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00" }, - /* 9 */ { 255, "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff", 258, "\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x02\xff\x00" }, - /* 10 */ { 255, "\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00", 259, "\xff\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x01\x01\x00" }, - /* 11 */ { 255, "\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00\x01", 258, "\xfe\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x02\x01\x00" }, -}; - -// ==================================================================================================== - -static void _COBSpacketRxed( enum COBSPumpEvent e, struct Frame *p, void *param ) - -{ - struct test *t = ( struct test * )param; - - switch ( e ) - { - case COBS_EV_NONE: - fprintf( stderr, "COBS_EV_NONE\n" ); - break; - - case COBS_EV_UNSYNCED: - fprintf( stderr, "COBS_EV_UNSYNCED\n" ); - break; - - case COBS_EV_NEWSYNC: - fprintf( stderr, "COBS_EV_NEWSYNC\n" ); - break; - - case COBS_EV_ERROR: - fprintf( stderr, "COBS_EV_ERROR\n" ); - - if ( p->len ) - { - _printDigits( p->len, p->d ); - fprintf( stderr, "\n" ); - } - - break; - - case COBS_EV_RXEDFRAME: - printf( "COBS_EV_RXEDFRAME\n" ); - - for ( int i = 0; i < p->len; i++ ) - { - if ( p->d[i] != t->unenc[i] ) - { - fprintf( stderr, "*********FAILED\nWanted:" ); - _printDigits( testSet[i].unencLen, testSet[i].unenc ); - printf( "\nRecevd:" ); - _printDigits( p->len, p->d ); - fprintf( stderr, "\n" ); - return; - } - } - - if ( p->len != t->unencLen ) - { - fprintf( stderr, "**********LENGTH MISMATCH\n" ); - } - else - { - fprintf( stderr, "OK\n" ); - } - - break; - - default: - fprintf( stderr, "Unexpected event %d\n", e ); - break; - } -} - -// ==================================================================================================== - -int main( int argc, void **argv ) - -{ - struct COBSDecoder *d = COBSDecoderInit( NULL ); - - if ( d ) - { - fprintf( stderr, "COBS Decoder initialised to %llx\n", ( long long int )d ); - } - else - { - fprintf( stderr, "*** ERR: COBS Decoder not created\n" ); - } - - for ( int i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) - { - fprintf( stderr, "%d: ", i ); - COBSPump( d, testSet[i].enc, testSet[i].encLen, _COBSpacketRxed, &testSet[i] ); - } -} -#endif - -// ==================================================================================================== diff --git a/Src/itmfifos.c b/Src/itmfifos.c index 5dabffa1..c182580a 100644 --- a/Src/itmfifos.c +++ b/Src/itmfifos.c @@ -21,6 +21,7 @@ #include "generics.h" #include "tpiuDecoder.h" #include "itmDecoder.h" +#include "cobs.h" #include "fileWriter.h" #include "itmfifos.h" #include "msgDecoder.h" @@ -55,6 +56,7 @@ struct itmfifosHandle struct ITMPacket h; struct TPIUDecoder t; struct TPIUPacket p; + struct COBS cobs; enum timeDelay timeStatus; /* Indicator of if this time is exact */ uint64_t timeStamp; /* Latest received time */ @@ -63,13 +65,15 @@ struct itmfifosHandle /* Configuration information */ char *chanPath; /* Path to where to put the fifos */ - bool useTPIU; /* Is the TPIU active? */ bool filewriter; /* Is the filewriter in use? */ bool forceITMSync; /* Is ITM to be forced into sync? */ bool permafile; /* Use permanent files rather than fifos */ - int tpiuITMChannel; /* TPIU channel on which ITM appears */ + int tag; /* Which COBS or TPIU stream are we decoding? */ + struct Frame cobsPart; /* Any part frame that has been received */ bool amEnding; /* Flag indicating end is in progress */ + enum Prot protocol; /* What protocol to communicate (default to COBS (== orbuculum)) */ + struct Channel c[NUM_CHANNELS + 1]; /* Output for each channel */ }; @@ -515,7 +519,7 @@ static void _tpiuProtocolPump( struct itmfifosHandle *f, uint8_t c ) for ( uint32_t g = 0; g < f->p.len; g++ ) { - if ( f->p.packet[g].s == f->tpiuITMChannel ) + if ( f->p.packet[g].s == f->tag ) { _itmPumpProcess( f, f->p.packet[g].d ); continue; @@ -538,6 +542,24 @@ static void _tpiuProtocolPump( struct itmfifosHandle *f, uint8_t c ) } } +// ==================================================================================================== + +static void _COBSpacketRxed ( struct Frame *p, void *param ) + +{ + struct itmfifosHandle *f = ( struct itmfifosHandle * )param; + + if ( p->d[0] == f->tag ) + { + for ( int i = 1; i < p->len; i++ ) + { + _itmPumpProcess( f, p->d[i] ); + } + } +} + +// ==================================================================================================== + // ==================================================================================================== // ==================================================================================================== // ==================================================================================================== @@ -589,10 +611,10 @@ void itmfifoSetChannel( struct itmfifosHandle *f, int chan, char *n, char *s ) } #pragma GCC diagnostic pop // ==================================================================================================== -void itmfifoSetUseTPIU( struct itmfifosHandle *f, bool s ) +void itmfifoSetProtocol( struct itmfifosHandle *f, enum Prot p ) { - f->useTPIU = s; + f->protocol = p; } // ==================================================================================================== void itmfifoSetForceITMSync( struct itmfifosHandle *f, bool s ) @@ -601,10 +623,10 @@ void itmfifoSetForceITMSync( struct itmfifosHandle *f, bool s ) f->forceITMSync = s; } // ==================================================================================================== -void itmfifoSettpiuITMChannel( struct itmfifosHandle *f, int channel ) +void itmfifoSettag( struct itmfifosHandle *f, int stream ) { - f->tpiuITMChannel = channel; + f->tag = stream; } // ==================================================================================================== char *itmfifoGetChannelName( struct itmfifosHandle *f, int chan ) @@ -627,10 +649,10 @@ char *itmfifoGetChanPath( struct itmfifosHandle *f ) return f->chanPath; } // ==================================================================================================== -bool itmfifoGetUseTPIU( struct itmfifosHandle *f ) +enum Prot itmfifoGetProtocol( struct itmfifosHandle *f ) { - return f->useTPIU; + return f->protocol; } // ==================================================================================================== bool itmfifoGetForceITMSync( struct itmfifosHandle *f ) @@ -639,10 +661,10 @@ bool itmfifoGetForceITMSync( struct itmfifosHandle *f ) return f->forceITMSync; } // ==================================================================================================== -int itmfifoGettpiuITMChannel( struct itmfifosHandle *f ) +int itmfifoGettag( struct itmfifosHandle *f ) { - return f->tpiuITMChannel; + return f->tag; } // ==================================================================================================== struct TPIUCommsStats *itmfifoGetCommsStats( struct itmfifosHandle *f ) @@ -659,20 +681,29 @@ struct ITMDecoderStats *fifoGetITMDecoderStats( struct itmfifosHandle *f ) // ==================================================================================================== // Main interface components // ==================================================================================================== -void itmfifoProtocolPump( struct itmfifosHandle *f, uint8_t c ) +void itmfifoProtocolPump( struct itmfifosHandle *f, uint8_t *c, int len ) /* Top level protocol pump */ { - if ( f->useTPIU ) + + if ( PROT_COBS == f->protocol ) { - _tpiuProtocolPump( f, c ); + COBSPump( &f->cobs, c, len, _COBSpacketRxed, f ); } else - { - /* There's no TPIU in use, so this goes straight to the ITM layer */ - _itmPumpProcess( f, c ); - } + while ( len-- ) + { + if ( PROT_TPIU == f->protocol ) + { + _tpiuProtocolPump( f, *c++ ); + } + else + { + /* There's no TPIU in use, so this goes straight to the ITM layer */ + _itmPumpProcess( f, *c++ ); + } + } } // ==================================================================================================== void itmfifoForceSync( struct itmfifosHandle *f, bool synced ) @@ -696,6 +727,7 @@ bool itmfifoCreate( struct itmfifosHandle *f ) /* Reset the TPIU handler before we start */ TPIUDecoderInit( &f->t ); + COBSInit( &f->cobs ); ITMDecoderInit( &f->i, f->forceITMSync ); /* Cycle through channels and create a fifo for each one that is enabled */ @@ -831,7 +863,7 @@ void itmfifoUsePermafiles( struct itmfifosHandle *f, bool usePermafilesSet ) f->permafile = usePermafilesSet; } // ==================================================================================================== -struct itmfifosHandle *itmfifoInit( bool forceITMSyncSet, bool useTPIUSet, int TPIUchannelSet ) +struct itmfifosHandle *itmfifoInit( bool forceITMSyncSet, enum Prot p, int tag ) { struct itmfifosHandle *f = ( struct itmfifosHandle * )calloc( 1, sizeof( struct itmfifosHandle ) ); @@ -839,10 +871,9 @@ struct itmfifosHandle *itmfifoInit( bool forceITMSyncSet, bool useTPIUSet, int T MEMCHECK( f, NULL ); f->chanPath = strdup( "" ); - f->useTPIU = useTPIUSet; + f->protocol = p; f->forceITMSync = forceITMSyncSet; - f->tpiuITMChannel = TPIUchannelSet; - + f->tag = tag; return f; } // ==================================================================================================== diff --git a/Src/nwclient.c b/Src/nwclient.c index d63ca460..2ea27315 100644 --- a/Src/nwclient.c +++ b/Src/nwclient.c @@ -230,7 +230,7 @@ static void *_listenTask( void *arg ) if ( pthread_mutex_init( &client->dataAvailable_m, NULL ) != 0 ) { - genericsExit( -1, "Failed to establish mutex for condition variablee" EOL ); + genericsExit( -1, "Failed to establish mutex for condition variable" EOL ); } if ( pthread_cond_init( &client->dataAvailable, NULL ) != 0 ) @@ -277,7 +277,7 @@ static void *_listenTask( void *arg ) // ==================================================================================================== // ==================================================================================================== // ==================================================================================================== -void nwclientSend( struct nwclientsHandle *h, uint32_t len, uint8_t *ipbuffer ) +void nwclientSend( struct nwclientsHandle *h, uint32_t len, const uint8_t *ipbuffer ) { const struct timespec ts = {.tv_sec = 1, .tv_nsec = 0}; diff --git a/Src/orbcat.c b/Src/orbcat.c index 7998daf7..4b6bd153 100644 --- a/Src/orbcat.c +++ b/Src/orbcat.c @@ -24,6 +24,7 @@ #include "msgDecoder.h" #include "msgSeq.h" #include "stream.h" +#include "cobs.h" #define NUM_CHANNELS 32 #define HW_CHANNEL (NUM_CHANNELS) /* Make the hardware fifo on the end of the software ones */ @@ -47,14 +48,17 @@ #define STAMP_FORMAT_MS_DELTA "%5" PRIu64 ".%03" PRIu64 "_%03" PRIu64 "|" enum TSType { TSNone, TSAbsolute, TSRelative, TSDelta, TSStamp, TSStampDelta, TSNumTypes }; + +enum Prot { PROT_COBS, PROT_ITM, PROT_TPIU, PROT_UNKNOWN }; +const char *protString[] = {"COBS", "ITM", "TPIU", NULL}; + const char *tsTypeString[TSNumTypes] = { "None", "Absolute", "Relative", "Delta", "System Timestamp", "System Timestamp Delta" }; // Record for options, either defaults or from command line struct { /* Config information */ - bool useTPIU; - uint32_t tpiuChannel; + uint32_t tag; /* Which TPIU or COBS stream are we decoding? */ bool forceITMSync; uint64_t cps; /* Cycles per second for target CPU */ @@ -62,12 +66,14 @@ struct char *tsLineFormat; char tsTrigger; + /* Sink information */ - char *presFormat[NUM_CHANNELS + 1]; + char *presFormat[NUM_CHANNELS + 1]; /* Format string for each channel */ /* Source information */ - int port; - char *server; + int port; /* What port to connect to on the server (default to orbuculum) */ + char *server; /* Which server to connect to (default to localhost) */ + enum Prot protocol; /* What protocol to communicate (default to COBS (== orbuculum)) */ char *file; /* File host connection */ bool endTerminate; /* Terminate when file/socket "ends" */ @@ -75,8 +81,8 @@ struct } options = { .forceITMSync = true, - .tpiuChannel = 1, - .port = NWCLIENT_SERVER_PORT, + .tag = 1, + .port = OTCLIENT_SERVER_PORT, .server = "localhost", .tsTrigger = DEFAULT_TS_TRIGGER }; @@ -88,7 +94,10 @@ struct struct MSGSeq d; struct ITMPacket h; struct TPIUDecoder t; - struct TPIUPacket p; + struct COBS c; + + struct Frame cobsPart; /* Any part frame that has been received */ + struct TPIUPacket p; /* Any TPIU packet that has been recevied */ enum timeDelay timeStatus; /* Indicator of if this time is exact */ uint64_t timeStamp; /* Latest received time */ uint64_t lastTimeStamp; /* Last received time */ @@ -383,7 +392,7 @@ static void _itmPumpProcess( char c ) static void _protocolPump( uint8_t c ) { - if ( options.useTPIU ) + if ( options.protocol == PROT_TPIU ) { switch ( TPIUPump( &_r.t, c ) ) { @@ -408,7 +417,7 @@ static void _protocolPump( uint8_t c ) for ( uint32_t g = 0; g < _r.p.len; g++ ) { - if ( _r.p.packet[g].s == options.tpiuChannel ) + if ( _r.p.packet[g].s == options.tag ) { _itmPumpProcess( _r.p.packet[g].d ); continue; @@ -433,6 +442,7 @@ static void _protocolPump( uint8_t c ) } } // ==================================================================================================== + static void _printHelp( const char *const progName ) { @@ -445,8 +455,10 @@ static void _printHelp( const char *const progName ) fprintf( stdout, " -g, --trigger: to use to trigger timestamp (default is newline)" EOL ); fprintf( stdout, " -h, --help: This help" EOL ); fprintf( stdout, " -n, --itm-sync: Enforce sync requirement for ITM (i.e. ITM needs to issue syncs)" EOL ); + fprintf( stdout, " -p, --protocol: Protocol to communicate. Defaults to COBS if -s is not set, otherwise ITM unless" EOL \ + " explicitly set to TPIU to decode TPIU frames on channel set by -t" EOL ); fprintf( stdout, " -s, --server: : to use" EOL ); - fprintf( stdout, " -t, --tpiu: : Use TPIU decoder on specified channel (normally 1)" EOL ); + fprintf( stdout, " -t, --tag: : Which TPIU stream or COBS tag to use (normally 1)" EOL ); fprintf( stdout, " -T, --timestamp: : Add absolute, relative (to session start)," EOL " delta, system timestamp or system timestamp delta to output. Note" EOL " a,r & d are host dependent and you may need to run orbuculum with -H." EOL ); @@ -469,6 +481,7 @@ static struct option _longOptions[] = {"help", no_argument, NULL, 'h'}, {"trigger", required_argument, NULL, 'g' }, {"itm-sync", no_argument, NULL, 'n'}, + {"protocol", required_argument, NULL, 'p'}, {"server", required_argument, NULL, 's'}, {"tpiu", required_argument, NULL, 't'}, {"timestamp", required_argument, NULL, 'T'}, @@ -483,9 +496,12 @@ bool _processOptions( int argc, char *argv[] ) int c, optionIndex = 0; unsigned int chan; char *chanIndex; + bool protExplicit = false; + bool serverExplicit = false; + #define DELIMITER ',' - while ( ( c = getopt_long ( argc, argv, "c:C:Ef:g:hVns:t:T:v:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "c:C:Ef:g:hVnp:s:t:T:v:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -524,9 +540,33 @@ bool _processOptions( int argc, char *argv[] ) options.forceITMSync = false; break; + // ------------------------------------ + + case 'p': + options.protocol = PROT_UNKNOWN; + protExplicit = true; + + for ( int i = 0; protString[i]; i++ ) + { + if ( !strcmp( protString[i], optarg ) ) + { + options.protocol = i; + break; + } + } + + if ( options.protocol == PROT_UNKNOWN ) + { + genericsReport( V_ERROR, "Unrecognised protocol type" EOL ); + return false; + } + + break; + // ------------------------------------ case 's': options.server = optarg; + serverExplicit = true; // See if we have an optional port number too char *a = optarg; @@ -551,8 +591,7 @@ bool _processOptions( int argc, char *argv[] ) // ------------------------------------ case 't': - options.useTPIU = true; - options.tpiuChannel = atoi( optarg ); + options.tag = atoi( optarg ); break; // ------------------------------------ @@ -654,10 +693,10 @@ bool _processOptions( int argc, char *argv[] ) // ------------------------------------ } - if ( ( options.useTPIU ) && ( !options.tpiuChannel ) ) + /* If we set an explicit server and port and didn't set a protocol chances are we want ITM, not COBS */ + if ( serverExplicit && !protExplicit ) { - genericsReport( V_ERROR, "TPIU set for use but no channel set for ITM output" EOL ); - return false; + options.protocol = PROT_ITM; } genericsReport( V_INFO, "orbcat version " GIT_DESCRIBE EOL ); @@ -691,13 +730,23 @@ bool _processOptions( int argc, char *argv[] ) } } - if ( options.useTPIU ) + switch ( options.protocol ) { - genericsReport( V_INFO, "Using TPIU : true (ITM on channel %d)" EOL, options.tpiuChannel ); - } - else - { - genericsReport( V_INFO, "Using TPIU : false" EOL ); + case PROT_COBS: + genericsReport( V_INFO, "Decoding COBS (Orbuculum) with ITM in stream %d" EOL, options.tag ); + break; + + case PROT_ITM: + genericsReport( V_INFO, "Decoding ITM" EOL ); + break; + + case PROT_TPIU: + genericsReport( V_INFO, "Using TPIU with ITM in stream %d" EOL, options.tag ); + break; + + default: + genericsReport( V_INFO, "Decoding unknown" EOL ); + break; } genericsReport( V_INFO, "Channels :" EOL ); @@ -712,8 +761,9 @@ bool _processOptions( int argc, char *argv[] ) return true; } + // ==================================================================================================== -static struct Stream *_tryOpenStream() +static struct Stream *_tryOpenStream( void ) { if ( options.file != NULL ) { @@ -725,6 +775,21 @@ static struct Stream *_tryOpenStream() } } // ==================================================================================================== + +static void _COBSpacketRxed ( struct Frame *p, void *param ) + +{ + if ( p->d[0] == options.tag ) + { + for ( int i = 1; i < p->len; i++ ) + { + _itmPumpProcess( p->d[i] ); + } + } +} + +// ==================================================================================================== + static void _feedStream( struct Stream *stream ) { struct timeval t; @@ -735,7 +800,7 @@ static void _feedStream( struct Stream *stream ) size_t receivedSize; t.tv_sec = 0; - t.tv_usec = 10000; + t.tv_usec = 100000; enum ReceiveResult result = stream->receive( stream, cbw, TRANSFER_SIZE, &t, &receivedSize ); if ( result != RECEIVE_RESULT_OK ) @@ -750,14 +815,26 @@ static void _feedStream( struct Stream *stream ) } } - unsigned char *c = cbw; - while ( receivedSize-- ) + if ( receivedSize ) { - _protocolPump( *c++ ); - } + if ( PROT_COBS == options.protocol ) + { + COBSPump( &_r.c, cbw, receivedSize, _COBSpacketRxed, &_r ); + } + else + { + /* Both ITM and TPIU go directly through the protocol pump */ + unsigned char *c = cbw; + + while ( receivedSize-- ) + { + _protocolPump( *c++ ); + } + } - fflush( stdout ); + fflush( stdout ); + } } } @@ -775,6 +852,7 @@ int main( int argc, char *argv[] ) /* Reset the TPIU handler before we start */ TPIUDecoderInit( &_r.t ); ITMDecoderInit( &_r.i, options.forceITMSync ); + COBSInit( &_r.c ); MSGSeqInit( &_r.d, &_r.i, MSG_REORDER_BUFLEN ); while ( true ) diff --git a/Src/orbdump.c b/Src/orbdump.c index 2317c7d6..a842e5cd 100644 --- a/Src/orbdump.c +++ b/Src/orbdump.c @@ -16,6 +16,7 @@ #include "git_version_info.h" #include "generics.h" #include "tpiuDecoder.h" +#include "cobs.h" #include "itmDecoder.h" #include "stream.h" @@ -26,14 +27,16 @@ #define DEFAULT_OUTFILE "/dev/stdout" #define DEFAULT_TIMELEN 10000 +enum Prot { PROT_COBS, PROT_ITM, PROT_TPIU, PROT_UNKNOWN }; +const char *protString[] = {"COBS", "ITM", "TPIU", NULL}; + /* ---------- CONFIGURATION ----------------- */ struct /* Record for options, either defaults or from command line */ { /* Config information */ - bool useTPIU; bool forceITMSync; - uint32_t tpiuITMChannel; + uint32_t tag; /* File to output dump to */ char *outfile; @@ -49,14 +52,14 @@ struct /* Record for options, either defaul /* Source information */ int port; char *server; + enum Prot protocol; } options = { .forceITMSync = true, - .useTPIU = false, - .tpiuITMChannel = 1, + .tag = 1, .outfile = DEFAULT_OUTFILE, .timelen = DEFAULT_TIMELEN, - .port = NWCLIENT_SERVER_PORT, + .port = OTCLIENT_SERVER_PORT, .server = "localhost" }; @@ -68,6 +71,7 @@ struct struct ITMPacket h; struct TPIUDecoder t; struct TPIUPacket p; + struct COBS c; } _r; // ==================================================================================================== @@ -97,7 +101,7 @@ void _protocolPump( uint8_t c ) /* Top level protocol pump */ { - if ( options.useTPIU ) + if ( PROT_TPIU == options.protocol ) { switch ( TPIUPump( &_r.t, c ) ) { @@ -126,7 +130,7 @@ void _protocolPump( uint8_t c ) for ( uint32_t g = 0; g < _r.p.len; g++ ) { - if ( _r.p.packet[g].s == options.tpiuITMChannel ) + if ( _r.p.packet[g].s == options.tag ) { ITMPump( &_r.i, _r.p.packet[g].d ); continue; @@ -163,9 +167,10 @@ void _printHelp( const char *const progName ) genericsPrintf( " -M, --no-colour: Supress colour in output" EOL ); genericsPrintf( " -n, --itm-sync: Enforce sync requirement for ITM (i.e. ITM needs to issue syncs)" EOL ); genericsPrintf( " -o, --output-file: to be used for dump file (defaults to %s)" EOL, options.outfile ); - genericsPrintf( " -p, --port: to use" EOL ); - genericsPrintf( " -s, --server: to use" EOL ); - genericsPrintf( " -t, --tpiu: Use TPIU decoder on specified channel, normally 1" EOL ); + genericsPrintf( " -p, --protocol: Protocol to communicate. Defaults to COBS if -s is not set, otherwise ITM unless" EOL \ + " explicitly set to TPIU to decode TPIU frames on channel set by -t" EOL ); + genericsPrintf( " -s, --server: : to use" EOL ); + genericsPrintf( " -t, --tag: Which TPIU stream or COBS tag to use (normally 1)" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); genericsPrintf( " -w, --sync-write: Write synchronously to the output file after every packet" EOL ); @@ -185,9 +190,9 @@ static struct option _longOptions[] = {"no-colour", no_argument, NULL, 'M'}, {"no-color", no_argument, NULL, 'M'}, {"output-file", required_argument, NULL, 'o'}, - {"port", required_argument, NULL, 'p'}, + {"protocol", required_argument, NULL, 'p'}, {"server", required_argument, NULL, 's'}, - {"tpiu", required_argument, NULL, 't'}, + {"tag", required_argument, NULL, 't'}, {"verbose", required_argument, NULL, 'v'}, {"version", no_argument, NULL, 'V'}, {"sync-write", no_argument, NULL, 'w'}, @@ -198,6 +203,8 @@ bool _processOptions( int argc, char *argv[] ) { int c, optionIndex = 0; + bool protExplicit = false; + bool serverExplicit = false; while ( ( c = getopt_long ( argc, argv, "hVl:Mno:p:s:t:v:w", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) @@ -233,19 +240,59 @@ bool _processOptions( int argc, char *argv[] ) break; case 't': - options.useTPIU = true; - options.tpiuITMChannel = atoi( optarg ); + options.tag = atoi( optarg ); break; - /* Source information */ + // ------------------------------------ + case 'p': - options.port = atoi( optarg ); + options.protocol = PROT_UNKNOWN; + protExplicit = true; + + for ( int i = 0; protString[i]; i++ ) + { + if ( !strcmp( protString[i], optarg ) ) + { + options.protocol = i; + break; + } + } + + if ( options.protocol == PROT_UNKNOWN ) + { + genericsReport( V_ERROR, "Unrecognised protocol type" EOL ); + return false; + } + break; + // ------------------------------------ case 's': options.server = optarg; + serverExplicit = true; + + // See if we have an optional port number too + char *a = optarg; + + while ( ( *a ) && ( *a != ':' ) ) + { + a++; + } + + if ( *a == ':' ) + { + *a = 0; + options.port = atoi( ++a ); + } + + if ( !options.port ) + { + options.port = NWCLIENT_SERVER_PORT; + } + break; + // ------------------------------------ case 'h': _printHelp( argv[0] ); return false; @@ -272,16 +319,17 @@ bool _processOptions( int argc, char *argv[] ) return false; } - if ( ( options.useTPIU ) && ( !options.tpiuITMChannel ) ) + /* If we set an explicit server and port and didn't set a protocol chances are we want ITM, not COBS */ + if ( serverExplicit && !protExplicit ) { - genericsReport( V_ERROR, "TPIU set for use but no channel set for ITM output" EOL ); - return false; + options.protocol = PROT_ITM; } genericsReport( V_INFO, "orbdump version " GIT_DESCRIBE EOL ); genericsReport( V_INFO, "Server : %s:%d" EOL, options.server, options.port ); genericsReport( V_INFO, "ForceSync : %s" EOL, options.forceITMSync ? "true" : "false" ); + if ( options.timelen ) { genericsReport( V_INFO, "Rec Length: %dmS" EOL, options.timelen ); @@ -293,15 +341,45 @@ bool _processOptions( int argc, char *argv[] ) genericsReport( V_INFO, "Sync Write: %s" EOL, options.writeSync ? "true" : "false" ); - if ( options.useTPIU ) + switch ( options.protocol ) { - genericsReport( V_INFO, "Using TPIU: true (ITM on channel %d)" EOL, options.tpiuITMChannel ); + case PROT_COBS: + genericsReport( V_INFO, "Decoding COBS (Orbuculum) with ITM in stream %d" EOL, options.tag ); + break; + + case PROT_ITM: + genericsReport( V_INFO, "Decoding ITM" EOL ); + break; + + case PROT_TPIU: + genericsReport( V_INFO, "Using TPIU with ITM in stream %d" EOL, options.tag ); + break; + + default: + genericsReport( V_INFO, "Decoding unknown" EOL ); + break; } return true; } -static struct Stream *_tryOpenStream() +// ==================================================================================================== + +static void _COBSpacketRxed ( struct Frame *p, void *param ) + +{ + if ( p->d[0] == options.tag ) + { + for ( int i = 1; i < p->len; i++ ) + { + ITMPump( &_r.i, p->d[i] ); + } + } +} + +// ==================================================================================================== + +static struct Stream *_tryOpenStream( void ) { return streamCreateSocket( options.server, options.port ); } @@ -329,7 +407,7 @@ int main( int argc, char *argv[] ) /* Reset the TPIU handler before we start */ TPIUDecoderInit( &_r.t ); ITMDecoderInit( &_r.i, options.forceITMSync ); - + COBSInit( &_r.c ); struct Stream *stream = _tryOpenStream(); if ( stream == NULL ) @@ -374,13 +452,22 @@ int main( int argc, char *argv[] ) break; } - uint8_t *c = cbw; - - t = receivedSize; - while ( t-- ) + if ( PROT_COBS == options.protocol ) { - _protocolPump( *c++ ); + COBSPump( &_r.c, cbw, receivedSize, _COBSpacketRxed, &_r ); + } + else + { + + uint8_t *c = cbw; + + t = receivedSize; + + while ( t-- ) + { + _protocolPump( *c++ ); + } } /* Check to make sure there's not an unexpected TPIU in here */ diff --git a/Src/orbfifo.c b/Src/orbfifo.c index a215be7a..f71d0b08 100644 --- a/Src/orbfifo.c +++ b/Src/orbfifo.c @@ -29,6 +29,7 @@ #include "itmfifos.h" +const char *protString[] = {"COBS", "ITM", "TPIU", NULL}; //#define DUMP_BLOCK @@ -50,7 +51,7 @@ struct } options = { - .port = NWCLIENT_SERVER_PORT, + .port = OTCLIENT_SERVER_PORT, .server = "localhost" }; @@ -78,7 +79,10 @@ static void _printHelp( const char *const progName ) genericsPrintf( " -h, --help: This help" EOL ); genericsPrintf( " -M, --no-colour: Supress colour in output" EOL ); genericsPrintf( " -P, --permanent: Create permanent files rather than fifos" EOL ); - genericsPrintf( " -t, --tpiu: Use TPIU decoder on specified channel, normally 1" EOL ); + genericsPrintf( " -p, --protocol: Protocol to communicate. Defaults to COBS if -s is not set, otherwise ITM unless" EOL \ + " explicitly set to TPIU to decode TPIU frames on stream set by -t" EOL ); + genericsPrintf( " -s, --server: : to use" EOL ); + genericsPrintf( " -t, --tag: Which TPIU stream or COBS tag to use (normally 1)" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); genericsPrintf( " -W, --writer-path: Enable filewriter functionality using specified base path" EOL ); @@ -100,7 +104,9 @@ struct option _longOptions[] = {"no-colour", no_argument, NULL, 'M'}, {"no-color", no_argument, NULL, 'M'}, {"permanent", no_argument, NULL, 'P'}, - {"tpiu", required_argument, NULL, 't'}, + {"protocol", required_argument, NULL, 'p'}, + {"server", required_argument, NULL, 's'}, + {"tag", required_argument, NULL, 't'}, {"verbose", required_argument, NULL, 'v'}, {"version", no_argument, NULL, 'V'}, {"writer-path", required_argument, NULL, 'W'}, @@ -117,8 +123,10 @@ static bool _processOptions( int argc, char *argv[] ) char *chanName; uint chan; char *chanIndex; + bool protExplicit = false; + bool serverExplicit = false; - while ( ( c = getopt_long ( argc, argv, "b:c:Ef:hVn:Pt:v:w:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "b:c:Ef:hVn:Pp:s:t:v:w:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -167,9 +175,58 @@ static bool _processOptions( int argc, char *argv[] ) // ------------------------------------ + case 'p': + enum Prot p = PROT_UNKNOWN; + protExplicit = true; + + for ( int i = 0; protString[i]; i++ ) + { + if ( !strcmp( protString[i], optarg ) ) + { + p = i; + break; + } + } + + if ( PROT_UNKNOWN == p ) + { + genericsReport( V_ERROR, "Unrecognised protocol type" EOL ); + return false; + } + + itmfifoSetProtocol( _r.f, p ); + break; + + // ------------------------------------ + case 's': + options.server = optarg; + serverExplicit = true; + + // See if we have an optional port number too + char *a = optarg; + + while ( ( *a ) && ( *a != ':' ) ) + { + a++; + } + + if ( *a == ':' ) + { + *a = 0; + options.port = atoi( ++a ); + } + + if ( !options.port ) + { + options.port = NWCLIENT_SERVER_PORT; + } + + break; + + // ------------------------------------ + case 't': - itmfifoSetUseTPIU( _r.f, true ); - itmfifoSettpiuITMChannel( _r.f, atoi( optarg ) ); + itmfifoSettag( _r.f, atoi( optarg ) ); break; // ------------------------------------ @@ -265,18 +322,16 @@ static bool _processOptions( int argc, char *argv[] ) // ------------------------------------ } - /* ... and dump the config if we're being verbose */ - genericsReport( V_INFO, "orbfifo version " GIT_DESCRIBE EOL ); - - if ( itmfifoGetUseTPIU( _r.f ) ) - { - genericsReport( V_INFO, "Using TPIU : true (ITM on channel %d)" EOL, itmfifoGettpiuITMChannel( _r.f ) ); - } - else + /* If we set an explicit server and port and didn't set a protocol chances are we want ITM, not COBS */ + if ( serverExplicit && !protExplicit ) { - genericsReport( V_INFO, "Using TPIU : false" EOL ); + itmfifoSetProtocol( _r.f, PROT_ITM ); } + + /* ... and dump the config if we're being verbose */ + genericsReport( V_INFO, "orbfifo version " GIT_DESCRIBE EOL ); + if ( options.file ) { genericsReport( V_INFO, "Input File : %s", options.file ); @@ -291,6 +346,26 @@ static bool _processOptions( int argc, char *argv[] ) } } + + switch ( itmfifoGetProtocol( _r.f ) ) + { + case PROT_COBS: + genericsReport( V_INFO, "Decoding COBS (Orbuculum) with ITM in stream %d" EOL, itmfifoGettag( _r.f ) ); + break; + + case PROT_ITM: + genericsReport( V_INFO, "Decoding ITM" EOL ); + break; + + case PROT_TPIU: + genericsReport( V_INFO, "Using TPIU with ITM in stream %d" EOL, itmfifoGettag( _r.f ) ); + break; + + default: + genericsReport( V_INFO, "Decoding unknown" EOL ); + break; + } + genericsReport( V_INFO, "Channels :" EOL ); for ( int g = 0; g < NUM_CHANNELS; g++ ) @@ -333,10 +408,7 @@ static void _processBlock( int s, unsigned char *cbw ) #endif - while ( s-- ) - { - itmfifoProtocolPump( _r.f, *cbw++ ); - } + itmfifoProtocolPump( _r.f, cbw, s ); } } diff --git a/Src/orblcd.c b/Src/orblcd.c index 51c0e087..bf2dbeb1 100644 --- a/Src/orblcd.c +++ b/Src/orblcd.c @@ -25,6 +25,7 @@ #include "tpiuDecoder.h" #include "itmDecoder.h" #include "msgDecoder.h" +#include "cobs.h" #include "stream.h" #include "nw.h" #include "orblcd_protocol.h" @@ -64,20 +65,24 @@ struct TApp }; /************** APPLICATION SPECIFIC ENDS ***************************************************************/ +enum Prot { PROT_COBS, PROT_ITM, PROT_TPIU, PROT_UNKNOWN }; +const char *protString[] = {"COBS", "ITM", "TPIU", NULL}; + /* Record for options, either defaults or from command line */ struct Options { /* Source information */ int port; /* Source port, or zero if no port set */ char *server; /* Source server */ + enum Prot protocol; /* What protocol to communicate (default to COBS (== orbuculum)) */ char *file; /* File host connection */ bool fileTerminate; /* Terminate when file read isn't successful */ /* Demux information */ - int tpiuChannel; /* TPIU channel to be used (for case TPIU present, 0 otherwise) */ + uint32_t tag; /* Which TPIU or COBS stream are we decoding? */ bool forceITMSync; /* Do we need ITM syncs? */ -} _options = {.forceITMSync = true, .port = NWCLIENT_SERVER_PORT, .server = "localhost"}; +} _options = {.forceITMSync = true, .tag = 1, .port = OTCLIENT_SERVER_PORT, .server = "localhost"}; struct RunTime { @@ -86,10 +91,12 @@ struct RunTime struct ITMPacket h; struct TPIUDecoder t; struct TPIUPacket p; + struct COBS c; bool ending; /* Flag indicating app is terminating */ bool errored; /* Flag indicating problem in reception process */ + struct Frame cobsPart; /* Any part frame that has been received */ int f; /* File handle to data source */ struct Options *options; /* Command line options (reference to above) */ struct TApp *app; /* Data storage for target application */ @@ -329,7 +336,7 @@ static void _TPIUpacketRxed( enum TPIUPumpEvent e, struct TPIUPacket *p, void *p case TPIU_EV_RXEDPACKET: for ( uint32_t g = 0; g < p->len; g++ ) { - if ( 1 == p->packet[g].s ) + if ( r->options->tag == p->packet[g].s ) { _itmPumpProcess( p->packet[g].d, r ); } @@ -365,6 +372,22 @@ static struct Stream *_tryOpenStream( struct RunTime *r ) } // ==================================================================================================== +static void _COBSpacketRxed ( struct Frame *p, void *param ) + +{ + struct RunTime *r = ( struct RunTime * )param; + + if ( p->d[0] == r->options->tag ) + { + for ( int i = 1; i < p->len; i++ ) + { + _itmPumpProcess( p->d[i], r ); + } + } +} + +// ==================================================================================================== + static bool _feedStream( struct Stream *stream, struct RunTime *r ) { unsigned char cbw[TRANSFER_SIZE]; @@ -389,7 +412,6 @@ static bool _feedStream( struct Stream *stream, struct RunTime *r ) } } - if ( result != RECEIVE_RESULT_OK ) { if ( result == RECEIVE_RESULT_EOF && r->options->fileTerminate ) @@ -406,17 +428,24 @@ static bool _feedStream( struct Stream *stream, struct RunTime *r ) } } - unsigned char *c = cbw; - - if ( _r.options->tpiuChannel ) + if ( PROT_COBS == r->options->protocol ) { - TPIUPump2( &r->t, cbw, receivedSize, _TPIUpacketRxed, r ); + COBSPump( &_r.c, cbw, receivedSize, _COBSpacketRxed, &_r ); } else { - while ( receivedSize-- ) + unsigned char *c = cbw; + + if ( PROT_TPIU == _r.options->tag ) { - _itmPumpProcess( *c++, r ); + TPIUPump2( &r->t, cbw, receivedSize, _TPIUpacketRxed, r ); + } + else + { + while ( receivedSize-- ) + { + _itmPumpProcess( *c++, r ); + } } } } @@ -435,9 +464,11 @@ void _printHelp( const char *const progName ) genericsPrintf( " -f, --input-file: Take input from specified file" EOL ); genericsPrintf( " -h, --help: This help" EOL ); genericsPrintf( " -n, --itm-sync: Enforce sync requirement for ITM (i.e. ITM needsd to issue syncs)" EOL ); + genericsPrintf( " -p, --protocol: Protocol to communicate. Defaults to COBS if -s is not set, otherwise ITM unless" EOL \ + " explicitly set to TPIU to decode TPIU frames on channel set by -t" EOL ); genericsPrintf( " -s, --server: : to use" EOL ); genericsPrintf( " -S, --sbcolour: to be used for single bit renders, ignored for other bit depths" EOL ); - genericsPrintf( " -t, --tpiu: : Use TPIU decoder on specified channel (normally 1)" EOL ); + genericsPrintf( " -t, --tag: : Which TPIU stream or COBS tag to use (normally 1)" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); genericsPrintf( " -w, --window: Set title for output window" EOL ); @@ -458,6 +489,7 @@ static struct option _longOptions[] = {"help", no_argument, NULL, 'h'}, {"input-file", required_argument, NULL, 'f'}, {"itm-sync", no_argument, NULL, 'n'}, + {"protocol", required_argument, NULL, 'p'}, {"server", required_argument, NULL, 's'}, {"sbcolour", required_argument, NULL, 'S'}, {"sbcolor", required_argument, NULL, 'S'}, @@ -473,8 +505,10 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) { int c, optionIndex = 0; + bool protExplicit = false; + bool serverExplicit = false; - while ( ( c = getopt_long ( argc, argv, "c:Ef:hns:S:t:v:Vw:z:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "c:Ef:hnp:s:S:t:v:Vw:z:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -503,6 +537,29 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) r->options->forceITMSync = false; break; + // ------------------------------------ + + case 'p': + r->options->protocol = PROT_UNKNOWN; + protExplicit = true; + + for ( int i = 0; protString[i]; i++ ) + { + if ( !strcmp( protString[i], optarg ) ) + { + r->options->protocol = i; + break; + } + } + + if ( r->options->protocol == PROT_UNKNOWN ) + { + genericsReport( V_ERROR, "Unrecognised protocol type" EOL ); + return false; + } + + break; + // ------------------------------------ case 'V': _printVersion(); @@ -511,6 +568,7 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ case 's': r->options->server = optarg; + serverExplicit = true; // See if we have an optional port number too char *a = optarg; @@ -540,7 +598,7 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ case 't': - r->options->tpiuChannel = atoi( optarg ); + r->options->tag = atoi( optarg ); break; // ------------------------------------ @@ -587,6 +645,12 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) /* ... and dump the config if we're being verbose */ _printVersion(); + /* If we set an explicit server and port and didn't set a protocol chances are we want ITM, not COBS */ + if ( serverExplicit && !protExplicit ) + { + r->options->protocol = PROT_ITM; + } + genericsReport( V_INFO, "App Channel : Data=%d, Control=%d" EOL, r->app->chan, r->app->chan + 1 ); genericsReport( V_INFO, "SB Colour : 0x%x" EOL, r->app->sbcolour ); genericsReport( V_INFO, "Relative Scale : %1.2f:1" EOL, r->app->scale ); @@ -597,15 +661,6 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) genericsReport( V_INFO, "NW SERVER H&P : %s:%d" EOL, r->options->server, r->options->port ); } - if ( r->options->tpiuChannel ) - { - genericsReport( V_INFO, "Use/Strip TPIU : True, channel %d" EOL, r->options->tpiuChannel ); - } - else - { - genericsReport( V_INFO, "Use/Strip TPIU : False" EOL ); - } - if ( r->options->file ) { genericsReport( V_INFO, "Input File : %s", r->options->file ); @@ -626,6 +681,25 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) return false; } + switch ( r->options->protocol ) + { + case PROT_COBS: + genericsReport( V_INFO, "Decoding COBS (Orbuculum) with ITM in stream %d" EOL, r->options->tag ); + break; + + case PROT_ITM: + genericsReport( V_INFO, "Decoding ITM" EOL ); + break; + + case PROT_TPIU: + genericsReport( V_INFO, "Using TPIU with ITM in stream %d" EOL, r->options->tag ); + break; + + default: + genericsReport( V_INFO, "Decoding unknown" EOL ); + break; + } + return true; } // ==================================================================================================== @@ -648,6 +722,7 @@ int main( int argc, char *argv[] ) /* Reset the TPIU handler before we start */ TPIUDecoderInit( &_r.t ); ITMDecoderInit( &_r.i, _r.options->forceITMSync ); + COBSInit( &_r.c ); if ( SDL_Init( SDL_INIT_VIDEO ) < 0 ) { diff --git a/Src/orbmortem.c b/Src/orbmortem.c index 8dd8a389..db8c4649 100644 --- a/Src/orbmortem.c +++ b/Src/orbmortem.c @@ -21,12 +21,16 @@ #include "nw.h" #include "traceDecoder.h" #include "tpiuDecoder.h" +#include "cobs.h" #include "symbols.h" #include "sio.h" #include "stream.h" #define REMOTE_SERVER "localhost" +enum Prot { PROT_COBS, PROT_ITM, PROT_TPIU, PROT_UNKNOWN }; +const char *protString[] = {"COBS", "ITM", "TPIU", NULL}; + #define SCRATCH_STRING_LEN (65535) /* Max length for a string under construction */ //#define DUMP_BLOCK #define DEFAULT_PM_BUFLEN_K (32) /* Default size of the Postmortem buffer */ @@ -49,23 +53,23 @@ struct Options char *odoptions; /* Options to pass directly to objdump */ int buflen; /* Length of post-mortem buffer, in bytes */ - bool useTPIU; /* Are we using TPIU, and stripping TPIU frames? */ - int channel; /* When TPIU is in use, which channel to decode? */ + int tag; /* ch TPIU or COBS stream are we decoding? */ int port; /* Source information */ char *server; + enum Prot protocol; bool mono; /* Supress colour in output */ - enum TRACEprotocol protocol; /* Encoding protocol to use */ + enum TRACEprotocol tProtocol; /* Encoding protocol to use */ bool noAltAddr; /* Flag to *not* use alternate addressing */ char *openFileCL; /* Command line for opening refernced file */ } _options = { - .port = NWCLIENT_SERVER_PORT, - .server = REMOTE_SERVER, - .demangle = true, - .protocol = TRACE_PROT_ETM35, - .channel = 2, - .buflen = DEFAULT_PM_BUFLEN_K * 1024 + .port = OTCLIENT_SERVER_PORT, + .server = REMOTE_SERVER, + .demangle = true, + .tProtocol = TRACE_PROT_ETM35, + .tag = 2, + .buflen = DEFAULT_PM_BUFLEN_K * 1024 }; /* A block of received data */ @@ -89,7 +93,7 @@ struct RunTime { struct TRACEDecoder i; struct TPIUDecoder t; - + struct COBS c; const char *progName; /* Name by which this program was called */ struct SymbolSet *s; /* Symbols read from elf */ bool ending; /* Flag indicating app is terminating */ @@ -162,9 +166,10 @@ static void _printHelp( const char *const progName ) genericsPrintf( " -h, --help: This help" EOL ); genericsPrintf( " -M, --no-colour: Supress colour in output" EOL ); genericsPrintf( " -O, --objdump-opts: Options to pass directly to objdump" EOL ); - genericsPrintf( " -p, --trace-proto: {ETM35|MTB} trace protocol to use, default is ETM35" EOL ); + genericsPrintf( " -p, --protocol: Protocol to communicate. Defaults to COBS if -s is not set, otherwise TPIU" EOL ); + genericsPrintf( " -P, --trace-proto: {ETM35|MTB} trace protocol to use, default is ETM35" EOL ); genericsPrintf( " -s, --server: : to use" EOL ); - genericsPrintf( " -t, --tpiu: : Use TPIU to strip TPIU on specfied channel" EOL ); + genericsPrintf( " -t, --tag: : Which TPIU stream or COBS tag to use (normally 2)" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); genericsPrintf( EOL "(Will connect one port higher than that set in -s when TPIU is not used)" EOL ); @@ -193,7 +198,8 @@ static struct option _longOptions[] = {"no-colour", no_argument, NULL, 'M'}, {"no-color", no_argument, NULL, 'M'}, {"objdump-opts", required_argument, NULL, 'O'}, - {"trace-proto", required_argument, NULL, 'p'}, + {"trace-proto", required_argument, NULL, 'P'}, + {"protocol", required_argument, NULL, 'p'}, {"server", required_argument, NULL, 's'}, {"tpiu", required_argument, NULL, 't'}, {"verbose", required_argument, NULL, 'v'}, @@ -205,8 +211,10 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) { int c, optionIndex = 0; + bool protExplicit = false; + bool serverExplicit = false; - while ( ( c = getopt_long ( argc, argv, "Ab:C:Dd:Ee:f:hVMO:p:s:t:v:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "Ab:C:Dd:Ee:f:hVMO:p:P:s:t:v:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -274,19 +282,43 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) break; // ------------------------------------ - case 'p': + case 'P': /* Index through protocol strings looking for match or end of list */ - for ( r->options->protocol = TRACE_PROT_LIST_START; - ( ( r->options->protocol != TRACE_PROT_LIST_END ) && strcasecmp( optarg, TRACEprotocolString[r->options->protocol] ) ); - r->options->protocol++ ) + for ( r->options->tProtocol = TRACE_PROT_LIST_START; + ( ( r->options->tProtocol != TRACE_PROT_LIST_END ) && strcasecmp( optarg, TRACEprotocolString[r->options->tProtocol] ) ); + r->options->tProtocol++ ) {} break; // ------------------------------------ + case 'p': + r->options->protocol = PROT_UNKNOWN; + protExplicit = true; + + for ( int i = 0; protString[i]; i++ ) + { + if ( !strcmp( protString[i], optarg ) ) + { + r->options->protocol = i; + break; + } + } + + if ( r->options->protocol == PROT_UNKNOWN ) + { + genericsReport( V_ERROR, "Unrecognised protocol type" EOL ); + return false; + } + + break; + + // ------------------------------------ + case 's': + serverExplicit = true; r->options->server = optarg; // See if we have an optional port number too @@ -313,8 +345,7 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ case 't': - r->options->useTPIU = true; - r->options->channel = atoi( optarg ); + r->options->tag = atoi( optarg ); break; // ------------------------------------ @@ -350,19 +381,25 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ } + /* If we set an explicit server and port and didn't set a protocol chances are we want TPIU, not COBS */ + if ( serverExplicit && !protExplicit ) + { + r->options->protocol = PROT_TPIU; + } + /* ... and dump the config if we're being verbose */ genericsReport( V_INFO, "orbmortem version " GIT_DESCRIBE EOL ); - if ( r->options->protocol >= TRACE_PROT_NONE ) + if ( r->options->tProtocol >= TRACE_PROT_NONE ) { genericsExit( V_ERROR, "Unrecognised decode protocol" EOL ); } else { - genericsReport( V_INFO, "Protocol %s" EOL, TRACEprotocolString[r->options->protocol] ); + genericsReport( V_INFO, "Protocol %s" EOL, TRACEprotocolString[r->options->tProtocol] ); } - if ( ( r->options->protocol == TRACE_PROT_MTB ) && ( !r->options->file ) ) + if ( ( r->options->tProtocol == TRACE_PROT_MTB ) && ( !r->options->file ) ) { genericsExit( V_ERROR, "MTB only makes sense when input is from a file" EOL ); } @@ -377,9 +414,54 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) genericsExit( -1, "Illegal value for Post Mortem Buffer length" EOL ); } + switch ( r->options->protocol ) + { + case PROT_COBS: + genericsReport( V_INFO, "Decoding COBS (Orbuculum) with ITM in stream %d" EOL, r->options->tag ); + break; + + case PROT_ITM: + genericsReport( V_INFO, "Decoding ITM...not legal for TRACE" EOL ); + return false; + + case PROT_TPIU: + genericsReport( V_INFO, "Using TPIU with ITM in stream %d" EOL, r->options->tag ); + break; + + default: + genericsReport( V_INFO, "Decoding unknown" EOL ); + break; + } + return true; } // ==================================================================================================== +static bool _rxAdd( struct RunTime *r, uint8_t c ) + +{ + r->newTotalBytes ++; + + r->pmBuffer[r->wp] = c; + uint32_t nwp = ( r->wp + 1 ) % r->options->buflen; + + if ( nwp == r->rp ) + { + if ( r->singleShot ) + { + r->held = true; + return true; + } + else + { + r->rp = ( r->rp + 1 ) % r->options->buflen; + } + } + + r->wp = nwp; + return false; +} +// ==================================================================================================== + static void _processBlock( struct RunTime *r ) /* Generic block processor for received data */ @@ -409,7 +491,7 @@ static void _processBlock( struct RunTime *r ) y = r->rawBlock.fillLevel; #endif - if ( r->options->useTPIU ) + if ( PROT_TPIU == r->options->protocol ) { struct TPIUPacket p; @@ -426,59 +508,50 @@ static void _processBlock( struct RunTime *r ) /* Iterate through the packet, putting bytes for TRACE into the processing buffer */ for ( uint32_t g = 0; g < p.len; g++ ) { - if ( r->options->channel == p.packet[g].s ) + if ( r->options->tag == p.packet[g].s ) { - r->pmBuffer[r->wp] = p.packet[g].d; - r->newTotalBytes++; - uint32_t nwp = ( r->wp + 1 ) % r->options->buflen; - - if ( nwp == r->rp ) + if ( _rxAdd( r, p.packet[g].d ) ) { - if ( r->singleShot ) - { - r->held = true; - return; - } - else - { - r->rp = ( r->rp + 1 ) % r->options->buflen; - } + return; } - - r->wp = nwp; } } } } - } - } - else - { - r->newTotalBytes += y; - - while ( y-- ) - { - r->pmBuffer[r->wp] = *c++; - uint32_t nwp = ( r->wp + 1 ) % r->options->buflen; - - if ( nwp == r->rp ) + else { - if ( r->singleShot ) + while ( y-- ) { - r->held = true; - return; - } - else - { - r->rp = ( r->rp + 1 ) % r->options->buflen; + if ( _rxAdd( r, *c++ ) ) + { + return; + } } } + } + } + } +} + +// ==================================================================================================== + +static void _COBSpacketRxed ( struct Frame *p, void *param ) - r->wp = nwp; +{ + struct RunTime *r = ( struct RunTime * )param; + + if ( p->d[0] == r->options->tag ) + { + for ( int i = 1; i < p->len; i++ ) + { + if ( _rxAdd( r, p->d[i] ) ) + { + return; } } } } + // ==================================================================================================== static void _flushBuffer( struct RunTime *r ) @@ -597,7 +670,7 @@ static void _traceCB( void *d ) /* address reporting is switched on. It will give 'false positives' for uncalculable instructions (e.g. bx lr) but */ /* it's a decent safety net to be sure the jump decoder is working correctly. */ - if ( r->options->protocol != TRACE_PROT_MTB ) + if ( r->options->tProtocol != TRACE_PROT_MTB ) { _appendToOPBuffer( r, r->op.currentLine, LT_DEBUG, "%sCommanded CPU Address change (Was:0x%08x Commanded:0x%08x)" EOL, ( r->op.workingAddr == cpu->addr ) ? "" : "***INCONSISTENT*** ", r->op.workingAddr, cpu->addr ); @@ -630,7 +703,7 @@ static void _traceCB( void *d ) if ( TRACEStateChanged( &r->i, EV_CH_EX_ENTRY ) ) { - if ( r->options->protocol != TRACE_PROT_MTB ) + if ( r->options->tProtocol != TRACE_PROT_MTB ) { _appendToOPBuffer( r, r->op.currentLine, LT_EVENT, "========== Exception Entry%s (%d at 0x%08x) ==========", TRACEStateChanged( &r->i, EV_CH_CANCELLED ) ? ", Last Instruction Cancelled" : "", cpu->exception, cpu->addr ); @@ -1270,15 +1343,16 @@ int main( int argc, char *argv[] ) /* Create the buffer memory */ _r.pmBuffer = ( uint8_t * )calloc( 1, _r.options->buflen ); - TRACEDecoderInit( &_r.i, _r.options->protocol, !( _r.options->noAltAddr ) ); + TRACEDecoderInit( &_r.i, _r.options->tProtocol, !( _r.options->noAltAddr ) ); + COBSInit( &_r.c ); - if ( _r.options->useTPIU ) + if ( PROT_TPIU == _r.options->protocol ) { TPIUDecoderInit( &_r.t ); } /* Put a record of the protocol in use on screen */ - SIOtagText( _r.sio, TRACEprotocolString[_r.options->protocol] ); + SIOtagText( _r.sio, TRACEprotocolString[_r.options->tProtocol] ); while ( !_r.ending ) { @@ -1292,7 +1366,7 @@ int main( int argc, char *argv[] ) /* Keep trying to open a network connection at half second intervals */ while ( 1 ) { - stream = streamCreateSocket( _r.options->server, _r.options->port + ( _r.options->useTPIU ? 0 : 1 ) ); + stream = streamCreateSocket( _r.options->server, _r.options->port ); if ( stream ) { @@ -1349,7 +1423,15 @@ int main( int argc, char *argv[] ) if ( !_r.held ) { /* Pump all of the data through the protocol handler */ - _processBlock( &_r ); + + if ( PROT_COBS == _r.options->protocol ) + { + COBSPump( &_r.c, _r.rawBlock.buffer, _r.rawBlock.fillLevel, _COBSpacketRxed, &_r ); + } + else + { + _processBlock( &_r ); + } } /* Update the outputs and deal with any keys that made it up this high */ diff --git a/Src/orbprofile.c b/Src/orbprofile.c index 8333118d..abe8931f 100644 --- a/Src/orbprofile.c +++ b/Src/orbprofile.c @@ -21,6 +21,7 @@ #include "uthash.h" #include "generics.h" #include "traceDecoder.h" +#include "cobs.h" #include "symbols.h" #include "nw.h" #include "ext_fileformats.h" @@ -30,6 +31,9 @@ #define DEFAULT_DURATION_MS (1000) /* Default time to sample, in mS */ #define HANDLE_MASK (0xFFFFFF) /* cachegrind cannot cope with large file handle numbers */ +enum Prot { PROT_COBS, PROT_ITM, PROT_TPIU, PROT_UNKNOWN }; +const char *protString[] = {"COBS", "ITM", "TPIU", NULL}; + /* How many transfer buffers from the source to allocate */ #define NUM_RAW_BLOCKS (1000) @@ -61,19 +65,21 @@ struct Options /* Record for options, either defaults int sampleDuration; /* How long we are going to sample for */ bool mono; /* Supress colour in output */ bool noaltAddr; /* Dont use alternate addressing */ - bool useTPIU; /* Are we using TPIU, and stripping TPIU frames? */ - int channel; /* When TPIU is in use, which channel to decode? */ - enum TRACEprotocol protocol; /* Encoding protocol to use */ + int tag; /* Which TPIU or COBS stream are we decoding? */ + enum TRACEprotocol tProtocol; /* Encoding protocol to use */ int port; /* Source information for where to connect to */ char *server; + enum Prot protocol; /* What protocol to communicate (default to COBS (== orbuculum)) */ + } _options = { .demangle = true, .sampleDuration = DEFAULT_DURATION_MS, - .port = NWCLIENT_SERVER_PORT, - .protocol = TRACE_PROT_ETM35, + .port = OTCLIENT_SERVER_PORT, + .tProtocol = TRACE_PROT_ETM35, + .tag = 2, .server = "localhost" }; @@ -110,6 +116,7 @@ struct RunTime /* Subsystem data support */ struct TRACEDecoder i; struct SymbolSet *s; /* Symbols read from elf */ + struct COBS c; /* Calls related info */ struct edge *calls; /* Call data table */ @@ -461,9 +468,10 @@ static void _printHelp( const char *const progName ) genericsPrintf( " -I, --interval: Time between samples (in ms)" EOL ); genericsPrintf( " -M, --no-colour: Supress colour in output" EOL ); genericsPrintf( " -O, --objdump-opts: Options to pass directly to objdump" EOL ); - genericsPrintf( " -p, --trace-proto: {ETM35|MTB} trace protocol to use, default is ETM35" EOL ); + genericsPrintf( " -P, --trace-proto: {ETM35|MTB} trace protocol to use, default is ETM35" EOL ); + genericsPrintf( " -p, --protocol: Protocol to communicate. Defaults to COBS if -s is not set, otherwise TPIU" EOL ); genericsPrintf( " -s, --server: : to use" EOL ); - //genericsPrintf( " -t, --tpiu: : Use TPIU to strip TPIU on specfied channel (defaults to 2)" EOL ); + genericsPrintf( " -t, --tag: : Which TPIU stream or COBS tag to use (normally 2)" EOL ); genericsPrintf( " -T, --all-truncate: truncate -d material off all references (i.e. make output relative)" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); @@ -491,9 +499,11 @@ static struct option _longOptions[] = {"no-colour", no_argument, NULL, 'M'}, {"no-color", no_argument, NULL, 'M'}, {"objdump-opts", required_argument, NULL, 'O'}, - {"trace-proto", required_argument, NULL, 'p'}, + {"trace-proto", required_argument, NULL, 'P'}, + {"protocol", required_argument, NULL, 'p'}, {"server", required_argument, NULL, 's'}, {"all-truncate", no_argument, NULL, 'T'}, + {"tag", required_argument, NULL, 't'}, {"verbose", required_argument, NULL, 'v'}, {"version", no_argument, NULL, 'V'}, {"graph-file", required_argument, NULL, 'y'}, @@ -505,8 +515,10 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) { int c, optionIndex = 0; + bool protExplicit = false; + bool serverExplicit = false; - while ( ( c = getopt_long ( argc, argv, "ADd:e:Ef:hVI:MO:p:s:Tv:y:z:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "ADd:e:Ef:hVI:MO:P:p:s:t:Tv:y:z:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { @@ -569,19 +581,43 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ - case 'p': + case 'P': /* Index through protocol strings looking for match or end of list */ - for ( r->options->protocol = TRACE_PROT_LIST_START; - ( ( r->options->protocol != TRACE_PROT_LIST_END ) && strcasecmp( optarg, TRACEprotocolString[r->options->protocol] ) ); - r->options->protocol++ ) + for ( r->options->tProtocol = TRACE_PROT_LIST_START; + ( ( r->options->tProtocol != TRACE_PROT_LIST_END ) && strcasecmp( optarg, TRACEprotocolString[r->options->tProtocol] ) ); + r->options->tProtocol++ ) {} break; + // ------------------------------------ + + case 'p': + r->options->protocol = PROT_UNKNOWN; + protExplicit = true; + + for ( int i = 0; protString[i]; i++ ) + { + if ( !strcmp( protString[i], optarg ) ) + { + r->options->protocol = i; + break; + } + } + + if ( r->options->protocol == PROT_UNKNOWN ) + { + genericsReport( V_ERROR, "Unrecognised protocol type" EOL ); + return false; + } + + break; + // ------------------------------------ case 's': r->options->server = optarg; + serverExplicit = true; // See if we have an optional port number too char *a = optarg; @@ -604,6 +640,11 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) break; + // ------------------------------------ + case 't': + r->options->tag = atoi( optarg ); + break; + // ------------------------------------ case 'T': r->options->truncateDeleteMaterial = true; @@ -650,6 +691,12 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ } + /* If we set an explicit server and port and didn't set a protocol chances are we want TPIU, not COBS */ + if ( serverExplicit && !protExplicit ) + { + r->options->protocol = PROT_TPIU; + } + if ( !r->options->elffile ) { genericsExit( -2, "Elf File not specified" EOL ); @@ -660,7 +707,7 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) genericsExit( -2, "Illegal sample duration" EOL ); } - if ( r->options->protocol >= TRACE_PROT_NONE ) + if ( r->options->tProtocol >= TRACE_PROT_NONE ) { genericsExit( V_ERROR, "Unrecognised decode protocol" EOL ); } @@ -671,14 +718,33 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) genericsReport( V_INFO, "Delete Material : %s" EOL, r->options->deleteMaterial ? r->options->deleteMaterial : "None" ); genericsReport( V_INFO, "Elf File : %s (%s Names)" EOL, r->options->elffile, r->options->truncateDeleteMaterial ? "Truncate" : "Don't Truncate" ); genericsReport( V_INFO, "Objdump options : %s" EOL, r->options->odoptions ? r->options->odoptions : "None" ); - genericsReport( V_INFO, "Protocol : %s" EOL, TRACEprotocolString[r->options->protocol] ); + genericsReport( V_INFO, "Protocol : %s" EOL, TRACEprotocolString[r->options->tProtocol] ); + genericsReport( V_INFO, "Tag (TPIU/COBS) : %d" EOL, r->options->tag ); genericsReport( V_INFO, "DOT file : %s" EOL, r->options->dotfile ? r->options->dotfile : "None" ); genericsReport( V_INFO, "Sample Duration : %d mS" EOL, r->options->sampleDuration ); + switch ( r->options->protocol ) + { + case PROT_COBS: + genericsReport( V_INFO, "Decoding COBS (Orbuculum) with ITM in stream %d" EOL, r->options->tag ); + break; + + case PROT_ITM: + genericsReport( V_INFO, "Decoding ITM. Not sensible for this application" EOL ); + return false; + + case PROT_TPIU: + genericsReport( V_INFO, "Using TPIU with ITM in stream %d" EOL, r->options->tag ); + break; + + default: + genericsReport( V_INFO, "Decoding unknown" EOL ); + break; + } + return true; } // ==================================================================================================== -// ==================================================================================================== static void _doExit( void ) /* Perform any explicit exit functions */ @@ -698,6 +764,16 @@ static void _intHandler( int sig ) _doExit(); } +// ==================================================================================================== + +static void _COBSpacketRxed ( struct Frame *p, void *param ) + +{ + if ( p->d[0] == _r.options->tag ) + { + TRACEDecoderPump( &_r.i, &( p->d[1] ), p->len - 1, _traceCB, genericsReport, &_r ); + } +} // ==================================================================================================== static void *_processBlocks( void *params ) @@ -738,8 +814,16 @@ static void *_processBlocks( void *params ) } #endif - /* Pump all of the data through the protocol handler */ - TRACEDecoderPump( &r->i, r->rawBlock[r->rp].buffer, r->rawBlock[r->rp].fillLevel, _traceCB, genericsReport, &_r ); + + if ( PROT_COBS == r->options->protocol ) + { + COBSPump( &_r.c, r->rawBlock[r->rp].buffer, r->rawBlock[r->rp].fillLevel, _COBSpacketRxed, &_r ); + } + else + { + /* Pump all of the data through the protocol handler */ + TRACEDecoderPump( &r->i, r->rawBlock[r->rp].buffer, r->rawBlock[r->rp].fillLevel, _traceCB, genericsReport, &_r ); + } r->rp = ( r->rp + 1 ) % NUM_RAW_BLOCKS; } @@ -798,7 +882,8 @@ int main( int argc, char *argv[] ) #endif - TRACEDecoderInit( &_r.i, _r.i.protocol, !_r.options->noaltAddr ); + TRACEDecoderInit( &_r.i, _r.options->tProtocol, !_r.options->noaltAddr ); + COBSInit( &_r.c ); while ( !_r.ending ) { diff --git a/Src/orbstat.c b/Src/orbstat.c index 7f2328d4..aba4cbc7 100644 --- a/Src/orbstat.c +++ b/Src/orbstat.c @@ -21,6 +21,7 @@ #include "itmDecoder.h" #include "tpiuDecoder.h" #include "msgDecoder.h" +#include "cobs.h" #include "symbols.h" #include "nw.h" #include "ext_fileformats.h" @@ -37,6 +38,9 @@ #define IN_EVENT (0x40000000) #define OUT_EVENT (0x50000000) +enum Prot { PROT_COBS, PROT_ITM, PROT_TPIU, PROT_UNKNOWN }; +const char *protString[] = {"COBS", "ITM", "TPIU", NULL}; + /* States for sample reception state machine */ enum CDState { CD_waitinout, CD_waitsrc, CD_waitdst }; @@ -62,20 +66,21 @@ struct Options /* Record for options, either defaults bool forceITMSync; /* Do we assume ITM starts synced? */ bool mono; /* Supress colour in output */ - bool useTPIU; /* Are we using TPIU, and stripping TPIU frames? */ - uint32_t tpiuITMChannel; /* Which TPIU channel to use for ITM */ + uint32_t tag; /* Which TPIU or COBS stream are we decoding? */ int port; /* Source information for where to connect to */ char *server; + enum Prot protocol; /* What protocol to communicate (default to COBS (== orbuculum)) */ } _options = { .demangle = true, .sampleDuration = DEFAULT_DURATION_MS, - .port = NWCLIENT_SERVER_PORT, + .port = OTCLIENT_SERVER_PORT, .traceChannel = DEFAULT_TRACE_CHANNEL, .fileChannel = DEFAULT_FILE_CHANNEL, .forceITMSync = true, + .tag = 1, .server = "localhost" }; @@ -93,6 +98,7 @@ struct RunTime struct ITMPacket h; struct TPIUDecoder t; struct TPIUPacket p; + struct COBS c; struct msg m; /* Decoded message out of ITM layer */ const char *progName; /* Name by which this program was called */ @@ -403,7 +409,7 @@ void _protocolPump( struct RunTime *r, uint8_t c ) /* Top level protocol pump */ { - if ( r->options->useTPIU ) + if ( PROT_TPIU == r->options->protocol ) { switch ( TPIUPump( &r->t, c ) ) { @@ -435,7 +441,7 @@ void _protocolPump( struct RunTime *r, uint8_t c ) for ( uint32_t g = 0; g < r->p.len; g++ ) { - if ( r->p.packet[g].s == r->options->tpiuITMChannel ) + if ( r->p.packet[g].s == r->options->tag ) { _itmPumpProcess( r, r->p.packet[g].d ); continue; @@ -478,8 +484,10 @@ static void _printHelp( struct RunTime *r ) genericsPrintf( " -n, --itm-sync: Enforce sync requirement for ITM (i.e. ITM needs to issue syncs)" EOL ); genericsPrintf( " -M, --no-colour: Supress colour in output" EOL ); genericsPrintf( " -O, --objdump-opts: Options to pass directly to objdump" EOL ); + genericsPrintf( " -p, --protocol: Protocol to communicate. Defaults to COBS if -s is not set, otherwise ITM unless" EOL \ + " explicitly set to TPIU to decode TPIU frames on channel set by -t" EOL ); genericsPrintf( " -s, --server: : to use" EOL ); - genericsPrintf( " -t, --tpiu: : Use TPIU to strip TPIU on specfied channel (defaults to 1)" EOL ); + genericsPrintf( " -t, --tag: : Which TPIU stream or COBS tag to use (normally 1)" EOL ); genericsPrintf( " -T, --all-truncate: truncate -d material off all references (i.e. make output relative)" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); @@ -509,6 +517,7 @@ static struct option _longOptions[] = {"no-colour", no_argument, NULL, 'M'}, {"no-color", no_argument, NULL, 'M'}, {"objdump-opts", required_argument, NULL, 'O'}, + {"protocol", required_argument, NULL, 'p'}, {"server", required_argument, NULL, 's'}, {"tpiu", required_argument, NULL, 't'}, {"all-truncate", no_argument, NULL, 'T'}, @@ -523,8 +532,10 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) { int c, optionIndex = 0; + bool protExplicit = false; + bool serverExplicit = false; - while ( ( c = getopt_long ( argc, argv, "Dd:e:Ef:g:hI:nO:s:t:Tv:Vy:z:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "Dd:e:Ef:g:hI:nO:p:s:t:Tv:Vy:z:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -588,9 +599,33 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) r->options->odoptions = optarg; break; + // ------------------------------------ + + case 'p': + r->options->protocol = PROT_UNKNOWN; + protExplicit = true; + + for ( int i = 0; protString[i]; i++ ) + { + if ( !strcmp( protString[i], optarg ) ) + { + r->options->protocol = i; + break; + } + } + + if ( r->options->protocol == PROT_UNKNOWN ) + { + genericsReport( V_ERROR, "Unrecognised protocol type" EOL ); + return false; + } + + break; + // ------------------------------------ case 's': r->options->server = optarg; + serverExplicit = true; // See if we have an optional port number too char *a = optarg; @@ -620,8 +655,7 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ case 't': - r->options->tpiuITMChannel = atoi( optarg ); - r->options->useTPIU = !r->options->useTPIU; + r->options->tag = atoi( optarg ); break; // ------------------------------------ @@ -665,6 +699,12 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ } + /* If we set an explicit server and port and didn't set a protocol chances are we want ITM, not COBS */ + if ( serverExplicit && !protExplicit ) + { + r->options->protocol = PROT_ITM; + } + if ( !r->options->elffile ) { genericsReport( V_ERROR, "Elf File not specified" EOL ); @@ -683,9 +723,28 @@ static bool _processOptions( int argc, char *argv[], struct RunTime *r ) genericsReport( V_INFO, "Elf File : %s %s" EOL, r->options->elffile, r->options->truncateDeleteMaterial ? "(Truncate)" : "(Don't Truncate)" ); genericsReport( V_INFO, "DOT file : %s" EOL, r->options->dotfile ? r->options->dotfile : "None" ); genericsReport( V_INFO, "ForceSync : %s" EOL, r->options->forceITMSync ? "true" : "false" ); - genericsReport( V_INFO, "Trace Channel : %d" EOL, r->options->traceChannel ); genericsReport( V_INFO, "Sample Duration : %d mS" EOL, r->options->sampleDuration ); genericsReport( V_INFO, "Objdump options : %s" EOL, r->options->odoptions ? r->options->odoptions : "None" ); + + switch ( r->options->protocol ) + { + case PROT_COBS: + genericsReport( V_INFO, "Decoding COBS (Orbuculum) with ITM in stream %d" EOL, r->options->tag ); + break; + + case PROT_ITM: + genericsReport( V_INFO, "Decoding ITM" EOL ); + break; + + case PROT_TPIU: + genericsReport( V_INFO, "Using TPIU with ITM in stream %d" EOL, r->options->tag ); + break; + + default: + genericsReport( V_INFO, "Decoding unknown" EOL ); + break; + } + return true; } // ==================================================================================================== @@ -707,6 +766,22 @@ static void _intHandler( int sig ) /* CTRL-C exit is not an error... */ _doExit(); } +// ==================================================================================================== + +static void _COBSpacketRxed ( struct Frame *p, void *param ) + +{ + struct RunTime *r = ( struct RunTime * )param; + + if ( p->d[0] == r->options->tag ) + { + for ( int i = 1; i < p->len; i++ ) + { + _itmPumpProcess( r, p->d[i] ); + } + } +} + // ==================================================================================================== int main( int argc, char *argv[] ) @@ -751,6 +826,7 @@ int main( int argc, char *argv[] ) /* Reset the TPIU handler before we start */ TPIUDecoderInit( &_r.t ); ITMDecoderInit( &_r.i, _r.options->forceITMSync ); + COBSInit( &_r.c ); while ( !_r.ending ) { @@ -831,13 +907,20 @@ int main( int argc, char *argv[] ) /* ...and record the fact that we received some data */ _r.intervalBytes += _r.rawBlock.fillLevel; - /* Pump all of the data through the protocol handler */ - uint8_t *c = _r.rawBlock.buffer; - - while ( _r.rawBlock.fillLevel > 0 ) + if ( PROT_COBS == _r.options->protocol ) { - _protocolPump( &_r, *c++ ); - _r.rawBlock.fillLevel--; + COBSPump( &_r.c, _r.rawBlock.buffer, _r.rawBlock.fillLevel, _COBSpacketRxed, &_r ); + } + else + { + /* Pump all of the data through the protocol handler */ + uint8_t *c = _r.rawBlock.buffer; + + while ( _r.rawBlock.fillLevel > 0 ) + { + _protocolPump( &_r, *c++ ); + _r.rawBlock.fillLevel--; + } } /* Check to make sure there's not an unexpected TPIU in here */ diff --git a/Src/orbtop.c b/Src/orbtop.c index 11485be8..2ac65654 100644 --- a/Src/orbtop.c +++ b/Src/orbtop.c @@ -24,6 +24,7 @@ #include "generics.h" #include "tpiuDecoder.h" #include "itmDecoder.h" +#include "cobs.h" #include "symbols.h" #include "msgSeq.h" #include "nw.h" @@ -52,6 +53,9 @@ struct reportLine struct nameEntry *n; }; +enum Prot { PROT_COBS, PROT_ITM, PROT_TPIU, PROT_UNKNOWN }; +const char *protString[] = {"COBS", "ITM", "TPIU", NULL}; + struct exceptionRecord /* Record of exception activity */ { @@ -73,10 +77,9 @@ struct exceptionRecord /* Record of exception activity */ /* ---------- CONFIGURATION ----------------- */ struct /* Record for options, either defaults or from command line */ { - bool useTPIU; /* Are we decoding via the TPIU? */ + uint32_t tag; /* Which TPIU or COBS stream are we decoding? */ bool reportFilenames; /* Report filenames for each routine? */ bool outputExceptions; /* Set to include exceptions in output flow */ - uint32_t tpiuITMChannel; /* What channel? */ bool forceITMSync; /* Must ITM start synced? */ char *file; /* File host connection */ @@ -99,19 +102,20 @@ struct /* Record for options, either defau int port; /* Source information */ char *server; + enum Prot protocol; /* What protocol to communicate (default to COBS (== orbuculum)) */ + } options = { .forceITMSync = true, - .useTPIU = false, - .tpiuITMChannel = 1, + .tag = 1, .outfile = NULL, .logfile = NULL, .lineDisaggregation = false, .maxRoutines = 8, .demangle = true, .displayInterval = TOP_UPDATE_INTERVAL * 1000, - .port = NWCLIENT_SERVER_PORT, + .port = OTCLIENT_SERVER_PORT, .server = "localhost" }; @@ -123,8 +127,10 @@ struct struct ITMPacket h; struct TPIUDecoder t; struct TPIUPacket p; + struct COBS c; enum timeDelay timeStatus; /* Indicator of if this time is exact */ uint64_t timeStamp; /* Latest received time */ + struct Frame cobsPart; /* Any part frame that has been received */ struct SymbolSet *s; /* Symbols read from elf */ struct nameEntry *n; /* Current table of recognised names */ @@ -873,7 +879,7 @@ void _protocolPump( uint8_t c ) /* Top level protocol pump */ { - if ( options.useTPIU ) + if ( PROT_TPIU == options.protocol ) { switch ( TPIUPump( &_r.t, c ) ) { @@ -905,7 +911,7 @@ void _protocolPump( uint8_t c ) for ( uint32_t g = 0; g < _r.p.len; g++ ) { - if ( _r.p.packet[g].s == options.tpiuITMChannel ) + if ( _r.p.packet[g].s == options.tag ) { _itmPumpProcess( _r.p.packet[g].d ); continue; @@ -952,10 +958,12 @@ void _printHelp( const char *const progName ) genericsPrintf( " -n, --itm-sync: Enforce sync requirement for ITM (i.e. ITM needs to issue syncs)" EOL ); genericsPrintf( " -o, --output-file: to be used for output live file" EOL ); genericsPrintf( " -O, --objdump-opts: Options to pass directly to objdump" EOL ); + genericsPrintf( " -p, --protocol: Protocol to communicate. Defaults to COBS if -s is not set, otherwise ITM unless" EOL \ + " explicitly set to TPIU to decode TPIU frames on channel set by -t" EOL ); genericsPrintf( " -r, --routines: to record in live file (default %d routines)" EOL, options.maxRoutines ); genericsPrintf( " -R, --report-files: Report filenames as part of function discriminator" EOL ); genericsPrintf( " -s, --server: : to use" EOL ); - genericsPrintf( " -t, --tpiu: Use TPIU decoder on specified channel" EOL ); + genericsPrintf( " -t, --tag: Which TPIU stream or COBS tag to use (normally 1)" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); genericsPrintf( EOL "Environment Variables;" EOL ); @@ -986,6 +994,7 @@ static struct option _longOptions[] = {"no-color", no_argument, NULL, 'M'}, {"output-file", required_argument, NULL, 'o'}, {"objdump-opts", required_argument, NULL, 'O'}, + {"protocol", required_argument, NULL, 'p'}, {"routines", required_argument, NULL, 'r'}, {"report-files", no_argument, NULL, 'R'}, {"server", required_argument, NULL, 's'}, @@ -999,8 +1008,10 @@ bool _processOptions( int argc, char *argv[] ) { int c, optionIndex = 0; + bool protExplicit = false; + bool serverExplicit = false; - while ( ( c = getopt_long ( argc, argv, "c:d:DEe:f:g:hVI:j:lMnO:o:r:Rs:t:v:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "c:d:DEe:f:g:hVI:j:lMnO:o:p:r:Rs:t:v:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -1077,6 +1088,29 @@ bool _processOptions( int argc, char *argv[] ) // ------------------------------------ + case 'p': + options.protocol = PROT_UNKNOWN; + protExplicit = true; + + for ( int i = 0; protString[i]; i++ ) + { + if ( !strcmp( protString[i], optarg ) ) + { + options.protocol = i; + break; + } + } + + if ( options.protocol == PROT_UNKNOWN ) + { + genericsReport( V_ERROR, "Unrecognised protocol type" EOL ); + return false; + } + + break; + + // ------------------------------------ + case 'O': options.odoptions = optarg; break; @@ -1094,8 +1128,7 @@ bool _processOptions( int argc, char *argv[] ) // ------------------------------------ case 't': - options.useTPIU = true; - options.tpiuITMChannel = atoi( optarg ); + options.tag = atoi( optarg ); break; // ------------------------------------ @@ -1106,6 +1139,7 @@ bool _processOptions( int argc, char *argv[] ) // ------------------------------------ case 's': options.server = optarg; + serverExplicit = true; // See if we have an optional port number too char *a = optarg; @@ -1158,10 +1192,10 @@ bool _processOptions( int argc, char *argv[] ) // ------------------------------------ } - if ( ( options.useTPIU ) && ( !options.tpiuITMChannel ) ) + /* If we set an explicit server and port and didn't set a protocol chances are we want ITM, not COBS */ + if ( serverExplicit && !protExplicit ) { - genericsReport( V_ERROR, "TPIU set for use but no channel set for ITM output" EOL ); - return -EINVAL; + options.protocol = PROT_ITM; } if ( !options.elffile ) @@ -1189,20 +1223,44 @@ bool _processOptions( int argc, char *argv[] ) genericsReport( V_INFO, "Log File : %s" EOL, options.logfile ? options.logfile : "None" ); genericsReport( V_INFO, "Objdump options : %s" EOL, options.odoptions ? options.odoptions : "None" ); - if ( options.useTPIU ) - { - genericsReport( V_INFO, "Using TPIU : true (ITM on channel %d)" EOL, options.tpiuITMChannel ); - } - else + switch ( options.protocol ) { - genericsReport( V_INFO, "Using TPIU : false" EOL ); + case PROT_COBS: + genericsReport( V_INFO, "Decoding COBS (Orbuculum) with ITM in stream %d" EOL, options.tag ); + break; + + case PROT_ITM: + genericsReport( V_INFO, "Decoding ITM" EOL ); + break; + + case PROT_TPIU: + genericsReport( V_INFO, "Using TPIU with ITM in stream %d" EOL, options.tag ); + break; + + default: + genericsReport( V_INFO, "Decoding unknown" EOL ); + break; } return OK; } // ==================================================================================================== -static struct Stream *_openStream() +static void _COBSpacketRxed ( struct Frame *p, void *param ) + +{ + if ( p->d[0] == options.tag ) + { + for ( int i = 1; i < p->len; i++ ) + { + _itmPumpProcess( p->d[i] ); + } + } +} + +// ==================================================================================================== + +static struct Stream *_openStream( void ) { if ( options.file != NULL ) { @@ -1272,6 +1330,7 @@ int main( int argc, char *argv[] ) /* Reset the TPIU handler before we start */ TPIUDecoderInit( &_r.t ); ITMDecoderInit( &_r.i, options.forceITMSync ); + COBSInit( &_r.c ); MSGSeqInit( &_r.d, &_r.i, MSG_REORDER_BUFLEN ); /* First interval will be from startup to first packet arriving */ @@ -1388,13 +1447,25 @@ int main( int argc, char *argv[] ) genericsReport( V_WARN, "Loaded %s" EOL, options.elffile ); } - /* Pump all of the data through the protocol handler */ - uint8_t *c = cbw; - while ( receivedSize > 0 ) + + if ( receivedSize ) { - _protocolPump( *c++ ); - receivedSize--; + if ( PROT_COBS == options.protocol ) + { + COBSPump( &_r.c, cbw, receivedSize, _COBSpacketRxed, &_r ); + } + else + { + /* Pump all of the data through the protocol handler */ + uint8_t *c = cbw; + + while ( receivedSize > 0 ) + { + _protocolPump( *c++ ); + receivedSize--; + } + } } /* See if its time to post-process it */ diff --git a/Src/orbtraceIf.c b/Src/orbtraceIf.c index a5cf6407..1e55769a 100644 --- a/Src/orbtraceIf.c +++ b/Src/orbtraceIf.c @@ -467,6 +467,7 @@ bool OrbtraceGetIfandEP( struct OrbtraceIf *o ) case DEVICE_BMP: // ----------------------------------------------------------------------------- o->iface = BMP_IFACE; o->ep = BMP_EP; + o->isOrbtrace = false; break; case DEVICE_ORBTRACE_MINI: // ------------------------------------------------------------------- @@ -517,6 +518,7 @@ bool OrbtraceGetIfandEP( struct OrbtraceIf *o ) return false; } + o->isOrbtrace = true; break; } @@ -537,6 +539,14 @@ bool OrbtraceGetIfandEP( struct OrbtraceIf *o ) // ==================================================================================================== +bool OrbtraceIsOrbtrace( struct OrbtraceIf *o ) + +{ + return o->isOrbtrace; +} + +// ==================================================================================================== + bool OrbtraceIfSetupTransfers( struct OrbtraceIf *o, bool hiresTime, struct dataBlock *d, int numBlocks, libusb_transfer_cb_fn callback ) { diff --git a/Src/orbuculum.c b/Src/orbuculum.c index dee6458a..c3348b71 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -53,7 +53,7 @@ #include "git_version_info.h" #include "generics.h" #include "tpiuDecoder.h" -#include "cobsDecoder.h" +#include "cobs.h" #include "nwclient.h" #include "orbtraceIf.h" #include "stream.h" @@ -77,7 +77,6 @@ struct Options char *port; /* Serial host connection */ int speed; /* Speed of serial link */ bool useTPIU; /* Are we using TPIU, and stripping TPIU frames? */ - bool useCOBS; /* Are we using COBS, and stripping COBS frames? */ uint32_t dataSpeed; /* Effective data speed (can be less than link speed!) */ char *file; /* File host connection */ bool fileTerminate; /* Terminate when file read isn't successful */ @@ -85,7 +84,7 @@ struct Options char *otcl; /* Orbtrace command line options */ uint32_t intervalReportTime; /* If we want interval reports about performance */ bool mono; /* Supress colour in output */ - char *channelList; /* List of TPIU/COBS channels to be serviced */ + char *channelList; /* List of TPIU channels to be serviced */ bool hiresTime; /* Use hiresolution time (shorter timeouts...more accurate but higher load */ char *sn; /* Any part serial number for identifying a specific device */ /* Network link */ @@ -103,7 +102,9 @@ struct handlers struct RunTime { struct TPIUDecoder t; /* TPIU decoder instance, in case we need it */ - struct COBSDecoder c; /* COBS decoder instance, in case we need it */ + struct COBS c; /* COBS instance, in case we need it */ + + struct Frame cobsPart; /* COBS part frame for maintaining continuity across packets */ struct OrbtraceIf *o; /* For accessing ORBTrace devices + BMPs */ @@ -127,7 +128,9 @@ struct RunTime int rp; struct dataBlock rawBlock[NUM_RAW_BLOCKS]; /* Transfer buffers from the receiver */ - int numHandlers; /* Number of TPIU/COBS channel handlers in use */ + struct nwclientsHandle *cobsHandler; /* Handle to COBS output handler */ + + int numHandlers; /* Number of TPIU channel handlers in use */ struct handlers *handler; struct nwclientsHandle *n; /* Link to the network client subsystem (used for non-TPIU/COBS case) */ char *sn; /* Serial number for any device we've established contact with */ @@ -141,8 +144,7 @@ struct RunTime #define NWSERVER_HOST "localhost" /* Address to connect to NW Server */ #define NWSERVER_PORT (2332) -#define NUM_TPIU_CHANNELS 0x80 -#define NUM_COBS_CHANNELS 0xFF +#define NUM_COBS_CHANNELS 0x7F #define INTERVAL_100US (100U) #define INTERVAL_1MS (10*INTERVAL_100US) @@ -153,7 +155,7 @@ struct RunTime struct Options _options = { - .listenPort = NWCLIENT_SERVER_PORT, + .listenPort = OTCLIENT_SERVER_PORT, .nwserverHost = NWSERVER_HOST, }; @@ -346,7 +348,6 @@ void _printHelp( const char *const progName ) { genericsPrintf( "Usage: %s [options]" EOL, progName ); genericsPrintf( " -a, --serial-speed: to use" EOL ); - genericsPrintf( " -c, --cobs: Use COBS channels (and strip COBS framing from output flows)" EOL ); genericsPrintf( " -E, --eof: When reading from file, terminate at end of file" EOL ); genericsPrintf( " -f, --input-file: Take input from specified file" EOL ); genericsPrintf( " -h, --help: This help" EOL ); @@ -359,7 +360,7 @@ void _printHelp( const char *const progName ) genericsPrintf( " -O, --orbtrace: \"\" run orbtrace with specified options on each new ORBTrace device connect" EOL ); genericsPrintf( " -p, --serial-port: to use" EOL ); genericsPrintf( " -s, --server: : to use" EOL ); - genericsPrintf( " -t, --tpiu: Use TPIU channels (and strip TPIU framing from output flows)" EOL ); + genericsPrintf( " -t, --tpiu: Decode TPIU channels (and strip TPIU framing from output flows)" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); } @@ -374,7 +375,6 @@ void _printVersion( void ) static struct option _longOptions[] = { {"serial-speed", required_argument, NULL, 'a'}, - {"cobs", required_argument, NULL, 'c'}, {"eof", no_argument, NULL, 'E'}, {"input-file", required_argument, NULL, 'f'}, {"help", no_argument, NULL, 'h'}, @@ -400,7 +400,7 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) int c, optionIndex = 0; #define DELIMITER ',' - while ( ( c = getopt_long ( argc, argv, "a:c:Ef:hHVl:m:Mn:o:O:p:s:t:v:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "a:Ef:hHVl:m:Mn:o:O:p:s:t:v:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -411,13 +411,6 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ - case 'c': - r->options->useCOBS = true; - r->options->channelList = optarg; - break; - - // ------------------------------------ - case 'E': r->options->fileTerminate = true; break; @@ -438,6 +431,7 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) break; // ------------------------------------ + case 'V': _printVersion(); return false; @@ -595,15 +589,6 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) genericsReport( V_INFO, "Use/Strip TPIU : False" EOL ); } - if ( r->options->useCOBS ) - { - genericsReport( V_INFO, "Use/Strip COBS : True (Channel List %s)" EOL, r->options->channelList ); - } - else - { - genericsReport( V_INFO, "Use/Strip COBS : False" EOL ); - } - if ( r->options->otcl ) { genericsReport( V_INFO, "Orbtrace CL : %s" EOL, r->options->otcl ); @@ -634,12 +619,6 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) return false; } - if ( ( r->options->useCOBS ) && ( r->options->useTPIU ) ) - { - genericsReport( V_ERROR, "Cannot specify COBS and TPIU at the same time" EOL ); - return false; - } - if ( ( r->options->port ) && ( r->options->nwserverPort ) ) { genericsReport( V_ERROR, "Cannot specify port and NW Server at same time" EOL ); @@ -687,7 +666,7 @@ void *_checkInterval( void *params ) h = r->handler; uint64_t totalDat = 0; - if ( ( r->intervalBytes ) && ( ( r->options->useTPIU ) || ( r->options->useCOBS ) ) ) + if ( ( r->intervalBytes ) && ( r->options->useTPIU ) ) { for ( int chIndex = 0; chIndex < r->numHandlers; chIndex++ ) { @@ -723,7 +702,7 @@ static void _purgeBlock( struct RunTime *r ) { /* Now send any packets to clients who want it */ - if ( ( r->options->useTPIU ) || ( r->options->useCOBS ) ) + if ( r->options->useTPIU ) { struct handlers *h = r->handler; int i = r->numHandlers; @@ -803,67 +782,80 @@ static void _TPIUpacketRxed( enum TPIUPumpEvent e, struct TPIUPacket *p, void *p } // ==================================================================================================== -static void _COBSpacketRxed( enum COBSPumpEvent e, struct Frame *p, void *param ) - -/* Callback for when a COBS frame has been assembled */ +static void _cobsDispatch( struct RunTime *r, const uint8_t *buffer, int length ) { + const uint8_t *flen; + const uint8_t *b = buffer; - - struct RunTime *r = ( struct RunTime * )param; - - struct handlers *h; - int chIndex; - int incomingChannel; - - switch ( e ) + if ( r->cobsPart.len ) { - case COBS_EV_RXEDFRAME: - if ( p->len > 1 ) + /* We already have a part cobs frame...complete it using whatever we've just received */ + flen = COBSgetFrameExtent( b, length ); + + if ( COBSisEOFRAME( flen ) ) + { + /* There is an end of packet here...we can complete the send */ + if ( ( flen - b + r->cobsPart.len ) <= COBS_MAX_ENC_PACKET_LEN ) { - incomingChannel = p->d[0]; - /* Search for channel amongst the handlers */ + /* This is the rest of a part COBS frame, complete it and send it */ + memcpy( &r->cobsPart.d[r->cobsPart.len], b, flen - b ); + r->cobsPart.len += flen - b; - h = r->handler; + nwclientSend( r->cobsHandler, r->cobsPart.len, r->cobsPart.d ); + nwclientSend( r->cobsHandler, COBS_EOP_LEN, cobs_eop ); + } - for ( chIndex = 0; chIndex < r->numHandlers; chIndex++ ) - { - if ( h->channel == incomingChannel ) - { - break; - } + r->cobsPart.len = 0; + length -= flen - b; + b = flen; + } + else + { + /* This is _another_ part packet ... add it to the one we are building */ + if ( ( length + r->cobsPart.len ) <= COBS_MAX_ENC_PACKET_LEN ) + { + memcpy( &r->cobsPart.d[r->cobsPart.len], b, length ); + r->cobsPart.len += length; + } + else + { + r->cobsPart.len = 0; + } - h++; - } + length = 0; + } + } - /* We must have found a match for this at some point, so add it to the queue */ - if ( ( chIndex != r->numHandlers ) && ( h ) ) - { - for ( int i = 1; i < p->len; i++ ) - { - h->strippedBlock->buffer[h->strippedBlock->fillLevel++] = p->d[i]; + /* Now send out whatever complete frames we have in this block */ + while ( true ) + { + /* Flush any extra EOPs that may have existed in the original frame */ + while ( length && COBSisEOFRAME( b ) ) + { + b++; + length--; + } - if ( h->strippedBlock->fillLevel == sizeof( h->strippedBlock->buffer ) ) - { - _purgeBlock( r ); - } - } - } - } + flen = COBSgetFrameExtent( b, length ); + if ( !( length && COBSisEOFRAME( flen ) ) ) + { break; + } - case COBS_EV_ERROR: - genericsReport( V_WARN, "****ERROR****%s" EOL, ( r->options->intervalReportTime ) ? EOL : "" ); - break; + /* This is a complete COBS frame to send */ + nwclientSend( r->cobsHandler, flen - b, b ); + /* We need an end of packet on the end of every packet */ + nwclientSend( r->cobsHandler, COBS_EOP_LEN, cobs_eop ); - case COBS_EV_NEWSYNC: - case COBS_EV_RXING: - case COBS_EV_NONE: - case COBS_EV_UNSYNCED: - default: - break; + length -= flen - b; + b = flen; } + + /* Whatever we have left we keep for next time */ + memcpy( r->cobsPart.d, b, length ); + r->cobsPart.len = length; } // ==================================================================================================== @@ -892,7 +884,6 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer genericsPrinttf( EOL ); } } - #endif if ( r->opFileHandle ) @@ -903,13 +894,8 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer } } - if ( r-> options->useCOBS ) - { - /* Strip the COBS framing from this input */ - COBSPump( &r->c, r->rawBlock[r->rp].buffer, r->rawBlock[r->rp].fillLevel, _COBSpacketRxed, r ); - _purgeBlock( r ); - } - else if ( r-> options->useTPIU ) + + if ( r-> options->useTPIU ) { /* Strip the TPIU framing from this input */ TPIUPump2( &r->t, r->rawBlock[r->rp].buffer, r->rawBlock[r->rp].fillLevel, _TPIUpacketRxed, r ); @@ -988,44 +974,37 @@ static void _usb_callback( struct libusb_transfer *t ) #endif - if ( _r.options->useCOBS ) - { - /* Strip the COBS framing from this input */ - COBSPump( &_r.c, t->buffer, t->actual_length, _COBSpacketRxed, &_r ); - } - else if ( _r.options->useTPIU ) + if ( OrbtraceIsOrbtrace( _r.o ) ) { - /* Strip the TPIU framing from this input */ - TPIUPump2( &_r.t, t->buffer, t->actual_length, _TPIUpacketRxed, &_r ); - _purgeBlock( &_r ); + _cobsDispatch( &_r, t->buffer, t->actual_length ); } else { - /* Do it the old fashioned way and send out the unfettered block */ - nwclientSend( _r.n, t->actual_length, t->buffer ); + _processBlock( &_r, t->actual_length, t->buffer ); } - } - if ( ( t->status != LIBUSB_TRANSFER_COMPLETED ) && - ( t->status != LIBUSB_TRANSFER_TIMED_OUT ) && - ( t->status != LIBUSB_TRANSFER_CANCELLED ) - ) - { - if ( !_r.errored ) + if ( ( t->status != LIBUSB_TRANSFER_COMPLETED ) && + ( t->status != LIBUSB_TRANSFER_TIMED_OUT ) && + ( t->status != LIBUSB_TRANSFER_CANCELLED ) + ) { - genericsReport( V_WARN, "Errored out with status %d (%s)" EOL, t->status, libusb_error_name( t->status ) ); - } + if ( !_r.errored ) + { + genericsReport( V_WARN, "Errored out with status %d (%s)" EOL, t->status, libusb_error_name( t->status ) ); + } - _r.errored = true; - } - else - { - if ( t->status != LIBUSB_TRANSFER_CANCELLED ) + _r.errored = true; + } + else { - libusb_submit_transfer( t ); + if ( t->status != LIBUSB_TRANSFER_CANCELLED ) + { + libusb_submit_transfer( t ); + } } } } + // ==================================================================================================== void _actionOrbtraceCommand( struct RunTime *r, char *sn, enum ORBTraceDevice d ) @@ -1450,10 +1429,7 @@ int main( int argc, char *argv[] ) TPIUDecoderInit( &_r.t ); } - if ( _r.options->useCOBS ) - { - COBSDecoderInit( &_r.c ); - } + COBSInit( &_r.c ); genericsScreenHandling( !_r.options->mono ); @@ -1476,7 +1452,7 @@ int main( int argc, char *argv[] ) #endif - if ( _r.options->useTPIU || _r.options->useCOBS ) + if ( _r.options->channelList ) { char *c = _r.options->channelList; int x = 0; @@ -1498,10 +1474,12 @@ int main( int argc, char *argv[] ) genericsExit( -1, "Illegal character in channel list (%c)" EOL, *c ); } + _r.cobsHandler = nwclientStart( OTCLIENT_SERVER_PORT ); + if ( x ) { /* This is a good number, so open */ - if ( ( x < 0 ) || ( ( x >= NUM_TPIU_CHANNELS ) && _r.options->useTPIU ) || ( ( x >= NUM_COBS_CHANNELS ) && _r.options->useCOBS ) ) + if ( ( x < 0 ) || ( x >= NUM_COBS_CHANNELS ) ) { genericsExit( -1, "Channel number out of range" EOL ); } diff --git a/Src/orbzmq.c b/Src/orbzmq.c index 7f67addd..cb653bf3 100644 --- a/Src/orbzmq.c +++ b/Src/orbzmq.c @@ -17,6 +17,7 @@ #include "tpiuDecoder.h" #include "itmDecoder.h" #include "msgDecoder.h" +#include "cobs.h" #define NUM_CHANNELS 32 #define HWFIFO_NAME "hwevent" @@ -24,6 +25,9 @@ #define DEFAULT_ZMQ_BIND_URL "tcp://*:3442" /* by default bind to all source interfaces */ +enum Prot { PROT_COBS, PROT_ITM, PROT_TPIU, PROT_UNKNOWN }; +const char *protString[] = {"COBS", "ITM", "TPIU", NULL}; + // Record for options, either defaults or from command line struct Channel @@ -35,8 +39,7 @@ struct Channel struct { /* Config information */ - bool useTPIU; - uint32_t tpiuChannel; + uint32_t tag; bool forceITMSync; uint32_t hwOutputs; @@ -47,6 +50,7 @@ struct /* Source information */ int port; char *server; + enum Prot protocol; /* What protocol to communicate (default to COBS (== orbuculum)) */ bool mono; /* Supress colour in output */ char *file; /* File host connection */ @@ -55,9 +59,9 @@ struct } options = { .forceITMSync = true, - .tpiuChannel = 1, + .tag = 1, .bindUrl = DEFAULT_ZMQ_BIND_URL, - .port = NWCLIENT_SERVER_PORT, + .port = OTCLIENT_SERVER_PORT, .server = "localhost" }; @@ -68,6 +72,7 @@ struct struct ITMPacket h; struct TPIUDecoder t; struct TPIUPacket p; + struct COBS c; /* Timestamp info */ uint64_t lastHWExceptionTS; @@ -408,7 +413,7 @@ void _itmPumpProcess( char c ) // ==================================================================================================== void _protocolPump( uint8_t c ) { - if ( options.useTPIU ) + if ( PROT_TPIU == options.protocol ) { switch ( TPIUPump( &_r.t, c ) ) { @@ -433,7 +438,7 @@ void _protocolPump( uint8_t c ) for ( uint32_t g = 0; g < _r.p.len; g++ ) { - if ( _r.p.packet[g].s == options.tpiuChannel ) + if ( _r.p.packet[g].s == options.tag ) { _itmPumpProcess( _r.p.packet[g].d ); continue; @@ -469,8 +474,10 @@ void _printHelp( const char *const progName ) genericsPrintf( " -h, --help: This help" EOL ); genericsPrintf( " -M, --no-colour: Supress colour in output" EOL ); genericsPrintf( " -n, --itm-sync: Enforce sync requirement for ITM (i.e. ITM needs to issue syncs)" EOL ); + genericsPrintf( " -p, --protocol: Protocol to communicate. Defaults to COBS if -s is not set, otherwise ITM unless" EOL \ + " explicitly set to TPIU to decode TPIU frames on channel set by -t" EOL ); genericsPrintf( " -s, --server: : to use, default %s:%d" EOL, options.server, options.port ); - genericsPrintf( " -t, --tpiu: : Use TPIU decoder on specified channel (normally 1)" EOL ); + genericsPrintf( " -t, --tag: : Which TPIU stream or COBS tag to use (normally 1)" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); genericsPrintf( " -z, --zbind: : ZeroMQ bind URL, default %s" EOL, options.bindUrl ); @@ -553,6 +560,7 @@ static struct option _longOptions[] = {"itm-sync", no_argument, NULL, 'n'}, {"no-colour", no_argument, NULL, 'M'}, {"no-color", no_argument, NULL, 'M'}, + {"protocol", required_argument, NULL, 'p'}, {"server", required_argument, NULL, 's'}, {"tpiu", required_argument, NULL, 't'}, {"verbose", required_argument, NULL, 'v'}, @@ -570,13 +578,15 @@ bool _processOptions( int argc, char *argv[] ) unsigned int chan; char *chanIndex; int32_t hwOutputs; + bool protExplicit = false; + bool serverExplicit = false; for ( int g = 0; g < NUM_CHANNELS; g++ ) { options.channel[g].topic = NULL; } - while ( ( c = getopt_long ( argc, argv, "c:e:Ef:hns:t:v:Vz:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "c:e:Ef:hnp:s:t:v:Vz:", _longOptions, &optionIndex ) ) != -1 ) { switch ( c ) { @@ -610,9 +620,33 @@ bool _processOptions( int argc, char *argv[] ) options.forceITMSync = false; break; + // ------------------------------------ + + case 'p': + options.protocol = PROT_UNKNOWN; + protExplicit = true; + + for ( int i = 0; protString[i]; i++ ) + { + if ( !strcmp( protString[i], optarg ) ) + { + options.protocol = i; + break; + } + } + + if ( options.protocol == PROT_UNKNOWN ) + { + genericsReport( V_ERROR, "Unrecognised protocol type" EOL ); + return false; + } + + break; + // ------------------------------------ case 's': options.server = optarg; + serverExplicit = true; // See if we have an optional port number too char *a = optarg; @@ -637,8 +671,7 @@ bool _processOptions( int argc, char *argv[] ) // ------------------------------------ case 't': - options.useTPIU = true; - options.tpiuChannel = atoi( optarg ); + options.tag = atoi( optarg ); break; // ------------------------------------ @@ -745,10 +778,10 @@ bool _processOptions( int argc, char *argv[] ) } } - if ( ( options.useTPIU ) && ( !options.tpiuChannel ) ) + /* If we set an explicit server and port and didn't set a protocol chances are we want ITM, not COBS */ + if ( serverExplicit && !protExplicit ) { - genericsReport( V_ERROR, "TPIU set for use but no channel set for ITM output" EOL ); - return false; + options.protocol = PROT_ITM; } genericsReport( V_INFO, "orbzmq version " GIT_DESCRIBE EOL ); @@ -770,15 +803,7 @@ bool _processOptions( int argc, char *argv[] ) } } - if ( options.useTPIU ) - { - genericsReport( V_INFO, "Using TPIU : true (ITM on channel %d)" EOL, options.tpiuChannel ); - } - else - { - genericsReport( V_INFO, "Using TPIU : false" EOL ); - } - + genericsReport( V_INFO, "Tag : " EOL, options.tag ); genericsReport( V_INFO, "ZeroMQ bind : %s" EOL, options.bindUrl ); genericsReport( V_INFO, "Channels :" EOL ); @@ -807,6 +832,25 @@ bool _processOptions( int argc, char *argv[] ) genericsReport( V_INFO, " HW [Predefined] [%s]" EOL, hwEventNames[g] ); } + switch ( options.protocol ) + { + case PROT_COBS: + genericsReport( V_INFO, "Decoding COBS (Orbuculum) with ITM in stream %d" EOL, options.tag ); + break; + + case PROT_ITM: + genericsReport( V_INFO, "Decoding ITM" EOL ); + break; + + case PROT_TPIU: + genericsReport( V_INFO, "Using TPIU with ITM in stream %d" EOL, options.tag ); + break; + + default: + genericsReport( V_INFO, "Decoding unknown" EOL ); + break; + } + return true; } @@ -823,6 +867,21 @@ static struct Stream *_tryOpenStream() return streamCreateSocket( options.server, options.port ); } } +// ==================================================================================================== + +static void _COBSpacketRxed ( struct Frame *p, void *param ) + +{ + + if ( p->d[0] == options.tag ) + { + for ( int i = 1; i < p->len; i++ ) + { + _itmPumpProcess( p->d[i] ); + } + } +} + // ==================================================================================================== static void _feedStream( struct Stream *stream ) { @@ -849,14 +908,21 @@ static void _feedStream( struct Stream *stream ) } } - unsigned char *c = cbw; - - while ( receivedSize-- ) + if ( PROT_COBS == options.protocol ) { - _protocolPump( *c++ ); + COBSPump( &_r.c, cbw, receivedSize, _COBSpacketRxed, &_r ); } + else + { + unsigned char *c = cbw; + + while ( receivedSize-- ) + { + _protocolPump( *c++ ); + } - fflush( stdout ); + fflush( stdout ); + } } } @@ -879,6 +945,7 @@ int main( int argc, char *argv[] ) /* Reset the TPIU handler before we start */ TPIUDecoderInit( &_r.t ); ITMDecoderInit( &_r.i, options.forceITMSync ); + COBSInit( &_r.c ); while ( true ) { diff --git a/meson.build b/meson.build index 15c12479..7bde989a 100644 --- a/meson.build +++ b/meson.build @@ -57,6 +57,7 @@ liborb = library('orb', 'Src/itmDecoder.c', 'Src/tpiuDecoder.c', 'Src/msgDecoder.c', + 'Src/cobs.c', 'Src/msgSeq.c', 'Src/traceDecoder.c', 'Src/generics.c', @@ -72,7 +73,6 @@ executable('orbuculum', 'Src/orbuculum.c', 'Src/nwclient.c', 'Src/orbtraceIf.c', - 'Src/cobsDecoder.c', git_version_info_h, ], include_directories: incdirs, From 9c6a2512ef97422c2ad492b0d8879ee7b96bc66f Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Tue, 19 Sep 2023 00:56:29 +0100 Subject: [PATCH 05/37] Basic testing of COBS flows done. In progress --- Inc/nw.h | 2 + Src/orbuculum.c | 185 ++++++++++++++++++++++++++---------------------- 2 files changed, 103 insertions(+), 84 deletions(-) diff --git a/Inc/nw.h b/Inc/nw.h index 2d393a53..479c589e 100644 --- a/Inc/nw.h +++ b/Inc/nw.h @@ -19,6 +19,8 @@ extern "C" { #define OTCLIENT_SERVER_PORT (3402) /* ORBTrace COBS server port definition */ #define NWCLIENT_SERVER_PORT (3443) /* Server port definition */ +#define LEGACY_SERVER_PORT_OFS (NWCLIENT_SERVER_PORT-OTCLIENT_SERVER_PORT) + #define TRANSFER_SIZE (65536*4) #define DEFAULT_ITM_STREAM 1 diff --git a/Src/orbuculum.c b/Src/orbuculum.c index c3348b71..dffaddbb 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -108,7 +108,8 @@ struct RunTime struct OrbtraceIf *o; /* For accessing ORBTrace devices + BMPs */ - uint64_t intervalBytes; /* Number of bytes transferred in current interval */ + uint64_t intervalRawBytes; /* Number of bytes transferred in current interval */ + uint64_t cobsDataLenRxed; /* Number of bytes of decoded COBS data */ pthread_t intervalThread; /* Thread reporting on intervals */ pthread_t processThread; /* Thread for processing prior to distributing to clients */ @@ -129,7 +130,7 @@ struct RunTime struct dataBlock rawBlock[NUM_RAW_BLOCKS]; /* Transfer buffers from the receiver */ struct nwclientsHandle *cobsHandler; /* Handle to COBS output handler */ - + int numHandlers; /* Number of TPIU channel handlers in use */ struct handlers *handler; struct nwclientsHandle *n; /* Link to the network client subsystem (used for non-TPIU/COBS case) */ @@ -151,12 +152,11 @@ struct RunTime #define INTERVAL_100MS (100*INTERVAL_1MS) #define INTERVAL_1S (10*INTERVAL_100MS) -//#define DUMP_BLOCK - struct Options _options = { .listenPort = OTCLIENT_SERVER_PORT, .nwserverHost = NWSERVER_HOST, + .channelList = "1" }; struct RunTime _r; @@ -360,7 +360,8 @@ void _printHelp( const char *const progName ) genericsPrintf( " -O, --orbtrace: \"\" run orbtrace with specified options on each new ORBTrace device connect" EOL ); genericsPrintf( " -p, --serial-port: to use" EOL ); genericsPrintf( " -s, --server: : to use" EOL ); - genericsPrintf( " -t, --tpiu: Decode TPIU channels (and strip TPIU framing from output flows)" EOL ); + genericsPrintf( " -T, --tpiu: Decode TPIU channels (and strip TPIU framing from output flows)" EOL ); + genericsPrintf( " -t, --tag: List of streams to decode (and onward route) from COBS or TPIU frames" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); } @@ -388,7 +389,8 @@ static struct option _longOptions[] = {"orbtrace", required_argument, NULL, 'O'}, {"serial-port", required_argument, NULL, 'p'}, {"server", required_argument, NULL, 's'}, - {"tpiu", required_argument, NULL, 't'}, + {"tpiu", required_argument, NULL, 'T'}, + {"tag", required_argument, NULL, 't'}, {"verbose", required_argument, NULL, 'v'}, {"version", no_argument, NULL, 'V'}, {NULL, no_argument, NULL, 0} @@ -400,7 +402,7 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) int c, optionIndex = 0; #define DELIMITER ',' - while ( ( c = getopt_long ( argc, argv, "a:Ef:hHVl:m:Mn:o:O:p:s:t:v:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "a:Ef:hHVl:m:Mn:o:O:p:s:T:t:v:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -505,8 +507,12 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) break; // ------------------------------------ - case 't': + case 'T': r->options->useTPIU = true; + break; + + // ------------------------------------ + case 't': r->options->channelList = optarg; break; @@ -580,14 +586,8 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) genericsReport( V_INFO, "NW SERVER H&P : %s:%d" EOL, r->options->nwserverHost, r->options->nwserverPort ); } - if ( r->options->useTPIU ) - { - genericsReport( V_INFO, "Use/Strip TPIU : True (Channel List %s)" EOL, r->options->channelList ); - } - else - { - genericsReport( V_INFO, "Use/Strip TPIU : False" EOL ); - } + genericsReport( V_INFO, "Use/Strip TPIU : %s" EOL, r->options->useTPIU ? "True" : "False" ); + genericsReport( V_INFO, "Decode/Forward : %s" EOL, r->options->channelList ); if ( r->options->otcl ) { @@ -642,7 +642,7 @@ void *_checkInterval( void *params ) usleep( r->options->intervalReportTime * INTERVAL_1MS ); /* Grab the interval and scale to 1 second */ - snapInterval = r->intervalBytes * 1000 / r->options->intervalReportTime; + snapInterval = r->intervalRawBytes * 1000 / r->options->intervalReportTime; snapInterval *= 8; @@ -666,22 +666,31 @@ void *_checkInterval( void *params ) h = r->handler; uint64_t totalDat = 0; - if ( ( r->intervalBytes ) && ( r->options->useTPIU ) ) + /* If we are decoding from TPIU then calculate per channel */ + if ( ( r->intervalRawBytes ) && ( r->options->useTPIU ) ) { for ( int chIndex = 0; chIndex < r->numHandlers; chIndex++ ) { - genericsPrintf( " %d:%3d%% ", h->channel, ( h->intervalBytes * 100 ) / r->intervalBytes ); + genericsPrintf( " %d:%3d%% ", h->channel, ( h->intervalBytes * 100 ) / r->intervalRawBytes ); totalDat += h->intervalBytes; - /* TODO: This needs a mutex */ h->intervalBytes = 0; - h++; } - genericsPrintf( " Waste:%3d%% ", 100 - ( ( totalDat * 100 ) / r->intervalBytes ) ); + genericsPrintf( " Waste:%3d%% ", 100 - ( ( totalDat * 100 ) / r->intervalRawBytes ) ); + } + else + { + /* Either raw ITM or COBs frames */ + if ( OrbtraceIsOrbtrace( _r.o ) && r->intervalRawBytes ) + { + int w = 1000 - ( ( r->cobsDataLenRxed * 1000 ) / r->intervalRawBytes ); + genericsPrintf( " Waste:%01d.%01d%%", w / 10, w % 10 ); + } } - r->intervalBytes = 0; + r->cobsDataLenRxed = 0; + r->intervalRawBytes = 0; if ( r->options->dataSpeed > 100 ) { @@ -702,22 +711,19 @@ static void _purgeBlock( struct RunTime *r ) { /* Now send any packets to clients who want it */ - if ( r->options->useTPIU ) - { - struct handlers *h = r->handler; - int i = r->numHandlers; + struct handlers *h = r->handler; + int i = r->numHandlers; - while ( i-- ) + while ( i-- ) + { + if ( h->strippedBlock->fillLevel ) { - if ( h->strippedBlock->fillLevel ) - { - nwclientSend( h->n, h->strippedBlock->fillLevel, h->strippedBlock->buffer ); - h->intervalBytes += h->strippedBlock->fillLevel; - h->strippedBlock->fillLevel = 0; - } - - h++; + nwclientSend( h->n, h->strippedBlock->fillLevel, h->strippedBlock->buffer ); + h->intervalBytes += h->strippedBlock->fillLevel; + h->strippedBlock->fillLevel = 0; } + + h++; } } // ==================================================================================================== @@ -802,8 +808,8 @@ static void _cobsDispatch( struct RunTime *r, const uint8_t *buffer, int length memcpy( &r->cobsPart.d[r->cobsPart.len], b, flen - b ); r->cobsPart.len += flen - b; - nwclientSend( r->cobsHandler, r->cobsPart.len, r->cobsPart.d ); - nwclientSend( r->cobsHandler, COBS_EOP_LEN, cobs_eop ); + nwclientSend( r->cobsHandler, r->cobsPart.len, r->cobsPart.d ); + nwclientSend( r->cobsHandler, COBS_EOP_LEN, cobs_eop ); } r->cobsPart.len = 0; @@ -845,9 +851,9 @@ static void _cobsDispatch( struct RunTime *r, const uint8_t *buffer, int length } /* This is a complete COBS frame to send */ - nwclientSend( r->cobsHandler, flen - b, b ); - /* We need an end of packet on the end of every packet */ - nwclientSend( r->cobsHandler, COBS_EOP_LEN, cobs_eop ); + nwclientSend( r->cobsHandler, flen - b, b ); + /* We need an end of packet on the end of every packet */ + nwclientSend( r->cobsHandler, COBS_EOP_LEN, cobs_eop ); length -= flen - b; b = flen; @@ -867,24 +873,7 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer if ( fillLevel ) { /* Account for this reception */ - r->intervalBytes += fillLevel; - -#ifdef DUMP_BLOCK - uint8_t *c = buffer; - uint32_t y = fillLevel; - - genericsPrintf( EOL ); - - while ( y-- ) - { - genericsPrintf( "%02X ", *c++ ); - - if ( !( y % 16 ) ) - { - genericsPrinttf( EOL ); - } - } -#endif + r->intervalRawBytes += fillLevel; if ( r->opFileHandle ) { @@ -894,7 +883,6 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer } } - if ( r-> options->useTPIU ) { /* Strip the TPIU framing from this input */ @@ -938,45 +926,71 @@ static void _dataAvailable( struct RunTime *r ) pthread_cond_signal( &r->dataForClients ); } // ==================================================================================================== -static void _usb_callback( struct libusb_transfer *t ) -/* For the USB case the ringbuffer isn't used .. packets are sent directly from this callback */ +static void _COBSpacketRxed( struct Frame *p, void *param ) + +/* Put the packet into the correct output buffer */ { - /* Whatever the status that comes back, there may be data... */ - if ( t->actual_length > 0 ) + int chIndex; + struct handlers *h = _r.handler; + + /* Record the length we received...first byte is channel number */ + _r.cobsDataLenRxed += p->len - 1; + + /* Search for channel */ + for ( chIndex = 0; chIndex < _r.numHandlers; chIndex++ ) { - _r.intervalBytes += t->actual_length; + if ( h->channel == p->d[0] ) + { + break; + } - if ( _r.opFileHandle ) + h++; + } + + if ( ( chIndex != _r.numHandlers ) && ( h ) ) + { + /* We must have found a match for this at some point, so add it to the queue */ + for ( int i = 1; i < p->len; i++ ) { - if ( write( _r.opFileHandle, t->buffer, t->actual_length ) < 0 ) + h->strippedBlock->buffer[h->strippedBlock->fillLevel++] = p->d[i]; + + if ( h->strippedBlock->fillLevel == sizeof( h->strippedBlock->buffer ) ) { - genericsExit( -4, "Writing to file failed (%s)" EOL, strerror( errno ) ); + /* We filled this block...better send it right now */ + nwclientSend( h->n, h->strippedBlock->fillLevel, h->strippedBlock->buffer ); + h->strippedBlock->fillLevel = 0; } } + } +} +// ==================================================================================================== -#ifdef DUMP_BLOCK - uint8_t *c = t->buffer; - uint32_t y = t->actual_length; +static void _usb_callback( struct libusb_transfer *t ) - genericsPrintf( stderr, EOL ); +/* For the USB case the ringbuffer isn't used .. packets are sent directly from this callback */ - while ( y-- ) - { - genericsPrintf( stderr, "%02X ", *c++ ); +{ + /* Whatever the status that comes back, there may be data... */ + if ( t->actual_length > 0 ) + { + _r.intervalRawBytes += t->actual_length; - if ( !( y % 16 ) ) + if ( _r.opFileHandle ) + { + if ( write( _r.opFileHandle, t->buffer, t->actual_length ) < 0 ) { - genericsPrintf( stderr, EOL ); + genericsExit( -4, "Writing to file failed (%s)" EOL, strerror( errno ) ); } } -#endif - if ( OrbtraceIsOrbtrace( _r.o ) ) { _cobsDispatch( &_r, t->buffer, t->actual_length ); + /* We need to decode this so it can go through the 'normal' output channels too */ + COBSPump( &_r.c, t->buffer, t->actual_length, _COBSpacketRxed, &_r ); + _purgeBlock( &_r ); } else { @@ -1454,6 +1468,7 @@ int main( int argc, char *argv[] ) if ( _r.options->channelList ) { + /* Channel list is only needed for legacy ports that we are re-exporting (i.e. clean unencapsulated flows) */ char *c = _r.options->channelList; int x = 0; @@ -1474,8 +1489,6 @@ int main( int argc, char *argv[] ) genericsExit( -1, "Illegal character in channel list (%c)" EOL, *c ); } - _r.cobsHandler = nwclientStart( OTCLIENT_SERVER_PORT ); - if ( x ) { /* This is a good number, so open */ @@ -1488,8 +1501,8 @@ int main( int argc, char *argv[] ) _r.handler[_r.numHandlers].channel = x; _r.handler[_r.numHandlers].strippedBlock = ( struct dataBlock * )calloc( 1, sizeof( struct dataBlock ) ); - _r.handler[_r.numHandlers].n = nwclientStart( _r.options->listenPort + _r.numHandlers ); - genericsReport( V_WARN, "Started Network interface for channel %d on port %d" EOL, x, _r.options->listenPort + _r.numHandlers ); + _r.handler[_r.numHandlers].n = nwclientStart( _r.options->listenPort + LEGACY_SERVER_PORT_OFS + _r.numHandlers ); + genericsReport( V_WARN, "Started Network interface for legacy channel %d on port %d" EOL, x, _r.options->listenPort + LEGACY_SERVER_PORT_OFS + _r.numHandlers ); _r.numHandlers++; x = 0; } @@ -1503,12 +1516,16 @@ int main( int argc, char *argv[] ) } else { - if ( !( _r.n = nwclientStart( _r.options->listenPort ) ) ) + if ( !( _r.n = nwclientStart( _r.options->listenPort + LEGACY_SERVER_PORT_OFS ) ) ) { genericsExit( -1, "Failed to make network server" EOL ); } } + /* The COBS handler doesn't need a channel list ... it works on all channels */ + _r.cobsHandler = nwclientStart( _r.options->listenPort ); + genericsReport( V_WARN, "Started Network interface for COBS on port %d" EOL, _r.options->listenPort ); + if ( _r.options->intervalReportTime ) { pthread_create( &_r.intervalThread, NULL, &_checkInterval, &_r ); From 40194b02c2bf6bec61b4736167dac6f8bd7bc36c Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Tue, 31 Oct 2023 22:51:01 +0000 Subject: [PATCH 06/37] More WIP --- Inc/cobs.h | 8 ++++--- Inc/orbtraceIf.h | 2 +- Src/cobs.c | 22 ++++++++++++------- Src/orbuculum.c | 57 ++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 68 insertions(+), 21 deletions(-) diff --git a/Inc/cobs.h b/Inc/cobs.h index 4bd26c1b..0a04c668 100644 --- a/Inc/cobs.h +++ b/Inc/cobs.h @@ -17,8 +17,10 @@ extern "C" { #endif +#define COBS_FRONTMATTER (10) #define COBS_MAX_PACKET_LEN (4096) -#define COBS_MAX_ENC_PACKET_LEN (COBS_MAX_PACKET_LEN + COBS_MAX_PACKET_LEN / 254) +#define COBS_OVERALL_MAX_PACKET_LEN (COBS_MAX_PACKET_LEN+COBS_FRONTMATTER) +#define COBS_MAX_ENC_PACKET_LEN (COBS_OVERALL_MAX_PACKET_LEN + COBS_OVERALL_MAX_PACKET_LEN / 254) enum COBSPumpState { @@ -52,8 +54,8 @@ const uint8_t *COBSgetFrameExtent( const uint8_t *inputEnc, int len ); const uint8_t *COBSsimpleDecode( const uint8_t *inputEnc, int len, struct Frame *o ); bool COBSisEOFRAME( const uint8_t *inputEnc ); -void COBSEncode( const uint8_t *inputMsg, int len, struct Frame *o ); - +void COBSEncode( const uint8_t *frontMsg, int lfront, const uint8_t *inputMsg, int len, struct Frame *o ); + /* Context free functions */ void COBSPump( struct COBS *t, uint8_t *incoming, int len, void ( *packetRxed )( struct Frame *p, void *param ), diff --git a/Inc/orbtraceIf.h b/Inc/orbtraceIf.h index fc047752..eedd24d3 100644 --- a/Inc/orbtraceIf.h +++ b/Inc/orbtraceIf.h @@ -70,7 +70,7 @@ struct OrbtraceIfDevice const struct OrbtraceInterfaceType *type; }; -struct dataBlock + struct __attribute__((packed)) dataBlock { ssize_t fillLevel; /* How full this block is */ uint8_t buffer[USB_TRANSFER_SIZE]; /* Block buffer */ diff --git a/Src/cobs.c b/Src/cobs.c index 5038566f..267dbebc 100644 --- a/Src/cobs.c +++ b/Src/cobs.c @@ -10,6 +10,7 @@ #include #include +#include #include "cobs.h" #define COBS_SYNC_CHAR (0) @@ -45,7 +46,7 @@ void COBSDelete( struct COBS *t ) // ==================================================================================================== -void COBSEncode( const uint8_t *inputMsg, int len, struct Frame *o ) +void COBSEncode( const uint8_t *frontMsg, int lfront, const uint8_t *inputMsg, int len, struct Frame *o ) /* Encode frame and write into provided output Frame buffer */ @@ -53,16 +54,20 @@ void COBSEncode( const uint8_t *inputMsg, int len, struct Frame *o ) uint8_t *wp = o->d; o->len = 0; - /* We always start a frame with a sync so the receivers got a chance */ - *wp++ = COBS_SYNC_CHAR; + len+=lfront; + + assert(len<=COBS_OVERALL_MAX_PACKET_LEN); if ( len ) { uint8_t *cp = wp++; int seglen = 1; - for ( const uint8_t *rp = inputMsg; len--; rp++ ) + for ( int i = 0; len--; i++ ) { + /* Take byte either from frontmatter or main message */ + const uint8_t* rp = (ilen = ( wp - o->d ); } @@ -387,11 +393,11 @@ int main( int argc, void **argv ) for ( int i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) { fprintf( stderr, "%d: ", i + 1 ); - COBSEncode( testSet[i].dec.d, testSet[i].dec.len, &o ); + COBSEncode( NULL, 0, testSet[i].dec.d, testSet[i].dec.len, &o ); - if ( o.len != COBSgetFrameExtent( o.d, o.len ) - o.d ) + if ( o.len != COBSgetFrameExtent( o.d, o.len ) - o.d + 1 ) { - fprintf( stderr, "Static framelen assessment failed %d vs expected %d\n", o.len, COBSgetFrameExtent( o.d, o.len ) - o.d ); + fprintf( stderr, "Static framelen assessment failed %d vs expected %d\n", o.len, COBSgetFrameExtent( o.d, o.len ) - o.d + 1 ); continue; } diff --git a/Src/orbuculum.c b/Src/orbuculum.c index dffaddbb..1bc7c07a 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -65,6 +65,9 @@ #define ORBTRACE "orbtrace" #define ORBTRACEENVNAME "ORBTRACE" +// Define this to use original clean ORBTRACE code +#define LEGACY_ORBTRACE 1 + /* Record for options, either defaults or from command line */ struct Options { @@ -105,7 +108,7 @@ struct RunTime struct COBS c; /* COBS instance, in case we need it */ struct Frame cobsPart; /* COBS part frame for maintaining continuity across packets */ - + struct Frame cobsOtg; /* Outgoing COBS frame for legacy use */ struct OrbtraceIf *o; /* For accessing ORBTrace devices + BMPs */ uint64_t intervalRawBytes; /* Number of bytes transferred in current interval */ @@ -402,7 +405,7 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) int c, optionIndex = 0; #define DELIMITER ',' - while ( ( c = getopt_long ( argc, argv, "a:Ef:hHVl:m:Mn:o:O:p:s:T:t:v:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "a:Ef:hHVl:m:Mn:o:O:p:s:Tt:v:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -679,6 +682,7 @@ void *_checkInterval( void *params ) genericsPrintf( " Waste:%3d%% ", 100 - ( ( totalDat * 100 ) / r->intervalRawBytes ) ); } +#ifndef LEGACY_ORBTRACE else { /* Either raw ITM or COBs frames */ @@ -688,6 +692,7 @@ void *_checkInterval( void *params ) genericsPrintf( " Waste:%01d.%01d%%", w / 10, w % 10 ); } } +#endif r->cobsDataLenRxed = 0; r->intervalRawBytes = 0; @@ -720,9 +725,23 @@ static void _purgeBlock( struct RunTime *r ) { nwclientSend( h->n, h->strippedBlock->fillLevel, h->strippedBlock->buffer ); h->intervalBytes += h->strippedBlock->fillLevel; + + /* The COBs encoded version goes out on the combined COBs channel, with a specific channel header */ + int j=h->strippedBlock->fillLevel; + const uint8_t frontMatter[1] = { h->channel }; + const uint8_t* b = h->strippedBlock->buffer; + + while ( j ) + { + COBSEncode( frontMatter, 1, + b,(jcobsOtg ); + nwclientSend( _r.cobsHandler, r->cobsOtg.len,r->cobsOtg.d ); + b+= (jstrippedBlock->fillLevel = 0; } - h++; } } @@ -788,7 +807,7 @@ static void _TPIUpacketRxed( enum TPIUPumpEvent e, struct TPIUPacket *p, void *p } // ==================================================================================================== -static void _cobsDispatch( struct RunTime *r, const uint8_t *buffer, int length ) +static void _cobsIncoming( struct RunTime *r, const uint8_t *buffer, int length ) { const uint8_t *flen; @@ -868,6 +887,7 @@ static void _cobsDispatch( struct RunTime *r, const uint8_t *buffer, int length static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer ) { + static const uint8_t frontMatter[1] = { DEFAULT_ITM_STREAM }; genericsReport( V_DEBUG, "RXED Packet of %d bytes%s" EOL, fillLevel, ( r->options->intervalReportTime ) ? EOL : "" ); if ( fillLevel ) @@ -886,13 +906,26 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer if ( r-> options->useTPIU ) { /* Strip the TPIU framing from this input */ - TPIUPump2( &r->t, r->rawBlock[r->rp].buffer, r->rawBlock[r->rp].fillLevel, _TPIUpacketRxed, r ); + TPIUPump2( &r->t, buffer, fillLevel, _TPIUpacketRxed, r ); _purgeBlock( r ); } else { /* Do it the old fashioned way and send out the unfettered block */ - nwclientSend( _r.n, r->rawBlock[r->rp].fillLevel, r->rawBlock[r->rp].buffer ); + nwclientSend( _r.n, fillLevel, buffer ); + + /* The COBs encoded version goes out on the default COBs channel */ + uint8_t* b = buffer; + while ( fillLevel ) + { + COBSEncode( frontMatter, 1, + b, + (fillLevelcobsOtg ); + nwclientSend( _r.cobsHandler, r->cobsOtg.len,r->cobsOtg.d ); + b+=(fillLevelactual_length > 0 ) { - _r.intervalRawBytes += t->actual_length; - if ( _r.opFileHandle ) { if ( write( _r.opFileHandle, t->buffer, t->actual_length ) < 0 ) @@ -985,16 +1016,20 @@ static void _usb_callback( struct libusb_transfer *t ) } } +#ifndef LEGACY_ORBTRACE if ( OrbtraceIsOrbtrace( _r.o ) ) { - _cobsDispatch( &_r, t->buffer, t->actual_length ); + _cobsIncoming( &_r, t->buffer, t->actual_length ); /* We need to decode this so it can go through the 'normal' output channels too */ COBSPump( &_r.c, t->buffer, t->actual_length, _COBSpacketRxed, &_r ); + _r.intervalRawBytes += t->actual_length; _purgeBlock( &_r ); } else +#endif { _processBlock( &_r, t->actual_length, t->buffer ); + _r.intervalRawBytes += t->actual_length; } if ( ( t->status != LIBUSB_TRANSFER_COMPLETED ) && @@ -1466,7 +1501,11 @@ int main( int argc, char *argv[] ) #endif +#ifndef LEGACY_ORBTRACE if ( _r.options->channelList ) +#else + if ( ( _r.options->channelList ) && ( _r.options->useTPIU )) +#endif { /* Channel list is only needed for legacy ports that we are re-exporting (i.e. clean unencapsulated flows) */ char *c = _r.options->channelList; From 8a22abe345305b005ba91decbe10c2e08b6ada57 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Mon, 15 Jan 2024 21:35:33 +0000 Subject: [PATCH 07/37] More WIP --- Inc/cobs.h | 4 +-- Inc/orbtraceIf.h | 8 ++--- Src/cobs.c | 87 +++++++++++++++++++++++++++++++++++++----------- Src/orbuculum.c | 69 +++++++++++++++++++++----------------- 4 files changed, 112 insertions(+), 56 deletions(-) diff --git a/Inc/cobs.h b/Inc/cobs.h index 0a04c668..bbe5c4d3 100644 --- a/Inc/cobs.h +++ b/Inc/cobs.h @@ -51,11 +51,11 @@ extern const uint8_t cobs_eop[COBS_EOP_LEN]; // ==================================================================================================== const uint8_t *COBSgetFrameExtent( const uint8_t *inputEnc, int len ); -const uint8_t *COBSsimpleDecode( const uint8_t *inputEnc, int len, struct Frame *o ); +bool COBSSimpleDecode( const uint8_t *inputEnc, int len, struct Frame *o ); bool COBSisEOFRAME( const uint8_t *inputEnc ); void COBSEncode( const uint8_t *frontMsg, int lfront, const uint8_t *inputMsg, int len, struct Frame *o ); - + /* Context free functions */ void COBSPump( struct COBS *t, uint8_t *incoming, int len, void ( *packetRxed )( struct Frame *p, void *param ), diff --git a/Inc/orbtraceIf.h b/Inc/orbtraceIf.h index eedd24d3..0f5fd6b0 100644 --- a/Inc/orbtraceIf.h +++ b/Inc/orbtraceIf.h @@ -70,11 +70,11 @@ struct OrbtraceIfDevice const struct OrbtraceInterfaceType *type; }; - struct __attribute__((packed)) dataBlock +struct __attribute__( ( packed ) ) dataBlock { - ssize_t fillLevel; /* How full this block is */ - uint8_t buffer[USB_TRANSFER_SIZE]; /* Block buffer */ - struct libusb_transfer *usbtfr; /* USB Transfer handle */ + ssize_t fillLevel; /* How full this block is */ + uint8_t buffer[USB_TRANSFER_SIZE]; /* Block buffer */ + struct libusb_transfer *usbtfr; /* USB Transfer handle */ }; struct OrbtraceIf diff --git a/Src/cobs.c b/Src/cobs.c index 267dbebc..9f835c8c 100644 --- a/Src/cobs.c +++ b/Src/cobs.c @@ -54,19 +54,19 @@ void COBSEncode( const uint8_t *frontMsg, int lfront, const uint8_t *inputMsg, i uint8_t *wp = o->d; o->len = 0; - len+=lfront; + len += lfront; - assert(len<=COBS_OVERALL_MAX_PACKET_LEN); + assert( len <= COBS_OVERALL_MAX_PACKET_LEN ); if ( len ) { uint8_t *cp = wp++; int seglen = 1; - for ( int i = 0; len--; i++ ) + for ( int i = 0; len--; i++ ) { - /* Take byte either from frontmatter or main message */ - const uint8_t* rp = (ilen = ( wp - o->d ); @@ -179,7 +180,7 @@ void COBSPump( struct COBS *t, uint8_t *incoming, int len, } // ==================================================================================================== -const uint8_t *COBSSimpleDecode( const uint8_t *inputEnc, int len, struct Frame *o ) +bool COBSSimpleDecode( const uint8_t *inputEnc, int len, struct Frame *o ) /* Decode frame and write decoded frame into provided Frame buffer */ /* Returns pointer to first character after frame (should be COBS_SYNC_CHAR) */ @@ -191,7 +192,7 @@ const uint8_t *COBSSimpleDecode( const uint8_t *inputEnc, int len, struct Frame uint8_t *op = o->d; - int interval; + uint8_t interval; /* Deal with possibility of sync chars on the front */ while ( ( COBS_SYNC_CHAR == *fp ) && ( fp < efp ) ) @@ -214,26 +215,22 @@ const uint8_t *COBSSimpleDecode( const uint8_t *inputEnc, int len, struct Frame /* Deal with possibility of illegal sync chars in the flow */ if ( *fp == COBS_SYNC_CHAR ) { - break; + /* return false...no good packet here */ + o->len = 0; + return false; } *op++ = *fp++; } - if ( interval < 0xff ) + if (( interval != 0xff ) && ( *op != COBS_SYNC_CHAR )) { *op++ = COBS_SYNC_CHAR; } } - // if ( ( COBSisEOFRAME( fp ) ) && ( op - o->d ) ) - if ( op - o->d ) - { - o->len = op - o->d; - return fp; - } - - return NULL; + o->len = op - o->d; + return op != o->d; } // ==================================================================================================== @@ -326,6 +323,31 @@ void _packetRxed ( struct Frame *p, void *param ) } // ==================================================================================================== +/* These need to be global to support the callback */ + +#define TEST_PACKET_LEN (COBS_MAX_PACKET_LEN-5) + +uint8_t ipPacket[TEST_PACKET_LEN]; + +void _packetRxed2( struct Frame *p, void *param ) +{ + if ( p->len != TEST_PACKET_LEN ) + { + fprintf( stderr, "(%s) Received frame length doesn't match %d vs rxed %d\n",param, TEST_PACKET_LEN, p->len ); + } + + for ( int i = 0; i < TEST_PACKET_LEN; i++ ) + { + if ( ipPacket[i] != p->d[i] ) + { + fprintf( stderr, "\n(%s) First inconsistency at displacement %d\n", param, i ); + break; + } + } +} + +///// + int main( int argc, void **argv ) { @@ -375,7 +397,7 @@ int main( int argc, void **argv ) continue; } - fprintf( stderr, "OK\n" ); + fprintf( stderr, "OK %d\n",o.len ); } @@ -424,6 +446,33 @@ int main( int argc, void **argv ) fprintf( stderr, "OK\n" ); } } + + // exit(-1); + fprintf( stderr, "Testing multiple full packets...\n" ); + uint8_t opPacket[TEST_PACKET_LEN]; + struct Frame opFrame; + + for ( int iteration = 0; iteration < 10000; iteration++ ) + { + fprintf(stderr,"%d ",iteration); + /* Build a random packet */ + for ( int i = 0; i < TEST_PACKET_LEN; i++ ) + { + ipPacket[i] = random() % 256; + } + + COBSEncode( NULL, 0, ipPacket, TEST_PACKET_LEN, &opFrame ); + if (COBSSimpleDecode( opFrame.d, opFrame.len, &d->f )) + { + _packetRxed2( &d->f, "COBSSimpleDecode" ); + } + else + { + fprintf(stderr,"Bad packet\n"); + } + + // COBSPump( d, ipPacket, COBS_MAX_PACKET_LEN, _packetRxed2, "COBSPump" ); + } } #endif diff --git a/Src/orbuculum.c b/Src/orbuculum.c index 1bc7c07a..49291acc 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -682,6 +682,7 @@ void *_checkInterval( void *params ) genericsPrintf( " Waste:%3d%% ", 100 - ( ( totalDat * 100 ) / r->intervalRawBytes ) ); } + #ifndef LEGACY_ORBTRACE else { @@ -692,6 +693,7 @@ void *_checkInterval( void *params ) genericsPrintf( " Waste:%01d.%01d%%", w / 10, w % 10 ); } } + #endif r->cobsDataLenRxed = 0; @@ -726,22 +728,24 @@ static void _purgeBlock( struct RunTime *r ) nwclientSend( h->n, h->strippedBlock->fillLevel, h->strippedBlock->buffer ); h->intervalBytes += h->strippedBlock->fillLevel; - /* The COBs encoded version goes out on the combined COBs channel, with a specific channel header */ - int j=h->strippedBlock->fillLevel; - const uint8_t frontMatter[1] = { h->channel }; - const uint8_t* b = h->strippedBlock->buffer; - - while ( j ) - { - COBSEncode( frontMatter, 1, - b,(jcobsOtg ); - nwclientSend( _r.cobsHandler, r->cobsOtg.len,r->cobsOtg.d ); - b+= (jstrippedBlock->fillLevel; + const uint8_t frontMatter[1] = { h->channel }; + const uint8_t *b = h->strippedBlock->buffer; + + while ( j ) + { + COBSEncode( frontMatter, 1, + b, ( j < COBS_MAX_PACKET_LEN ) ? j : COBS_MAX_PACKET_LEN, + &r->cobsOtg ); + nwclientSend( _r.cobsHandler, r->cobsOtg.len, r->cobsOtg.d ); + b += ( j < COBS_MAX_PACKET_LEN ) ? j : COBS_MAX_PACKET_LEN; + j -= ( j < COBS_MAX_PACKET_LEN ) ? j : COBS_MAX_PACKET_LEN; + } + h->strippedBlock->fillLevel = 0; } + h++; } } @@ -887,7 +891,7 @@ static void _cobsIncoming( struct RunTime *r, const uint8_t *buffer, int length static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer ) { - static const uint8_t frontMatter[1] = { DEFAULT_ITM_STREAM }; + static const uint8_t frontMatter[1] = { DEFAULT_ITM_STREAM }; genericsReport( V_DEBUG, "RXED Packet of %d bytes%s" EOL, fillLevel, ( r->options->intervalReportTime ) ? EOL : "" ); if ( fillLevel ) @@ -914,18 +918,19 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer /* Do it the old fashioned way and send out the unfettered block */ nwclientSend( _r.n, fillLevel, buffer ); - /* The COBs encoded version goes out on the default COBs channel */ - uint8_t* b = buffer; - while ( fillLevel ) - { - COBSEncode( frontMatter, 1, - b, - (fillLevelcobsOtg ); - nwclientSend( _r.cobsHandler, r->cobsOtg.len,r->cobsOtg.d ); - b+=(fillLevelcobsOtg ); + nwclientSend( _r.cobsHandler, r->cobsOtg.len, r->cobsOtg.d ); + b += ( fillLevel < COBS_MAX_PACKET_LEN ) ? fillLevel : COBS_MAX_PACKET_LEN; + fillLevel -= ( fillLevel < COBS_MAX_PACKET_LEN ) ? fillLevel : COBS_MAX_PACKET_LEN; + } } } } @@ -1017,19 +1022,20 @@ static void _usb_callback( struct libusb_transfer *t ) } #ifndef LEGACY_ORBTRACE + if ( OrbtraceIsOrbtrace( _r.o ) ) { _cobsIncoming( &_r, t->buffer, t->actual_length ); /* We need to decode this so it can go through the 'normal' output channels too */ COBSPump( &_r.c, t->buffer, t->actual_length, _COBSpacketRxed, &_r ); - _r.intervalRawBytes += t->actual_length; + _r.intervalRawBytes += t->actual_length; _purgeBlock( &_r ); } else #endif { _processBlock( &_r, t->actual_length, t->buffer ); - _r.intervalRawBytes += t->actual_length; + _r.intervalRawBytes += t->actual_length; } if ( ( t->status != LIBUSB_TRANSFER_COMPLETED ) && @@ -1501,10 +1507,11 @@ int main( int argc, char *argv[] ) #endif -#ifndef LEGACY_ORBTRACE +#ifndef LEGACY_ORBTRACE + if ( _r.options->channelList ) #else - if ( ( _r.options->channelList ) && ( _r.options->useTPIU )) + if ( ( _r.options->channelList ) && ( _r.options->useTPIU ) ) #endif { /* Channel list is only needed for legacy ports that we are re-exporting (i.e. clean unencapsulated flows) */ From 8448cf26b827562a6c6209d6e0175c61004589b6 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Thu, 14 Mar 2024 00:03:09 +0000 Subject: [PATCH 08/37] Working, largely untested, version. Beware changes to command line parameters in orbuculum related to TPIU --- Inc/nwclient.h | 1 - README.md | 6 +- Src/cobs.c | 248 ++---------------------------------------------- Src/nwclient.c | 195 ++++++++++--------------------------- Src/orbuculum.c | 38 +++++++- 5 files changed, 95 insertions(+), 393 deletions(-) diff --git a/Inc/nwclient.h b/Inc/nwclient.h index 9f9c6e0a..f564f59e 100644 --- a/Inc/nwclient.h +++ b/Inc/nwclient.h @@ -26,7 +26,6 @@ struct nwclientsHandle; void nwclientSend( struct nwclientsHandle *h, uint32_t len, const uint8_t *ipbuffer ); void nwclientShutdown( struct nwclientsHandle *h ); -bool nwclientShutdownComplete( struct nwclientsHandle *h ); struct nwclientsHandle *nwclientStart( int port ); // ==================================================================================================== diff --git a/README.md b/README.md index 23181aad..5e901ba9 100644 --- a/README.md +++ b/README.md @@ -384,9 +384,13 @@ For `orbuculum`, the specific command line options of note are; `-p, --serial-port [serialPort]`: to use. If not specified then the program defaults to Blackmagic probe. + `-P, --pace [microseconds>]`: delay in block of data transmission to clients. Used when source is a file. + `-s, --server [address]:[port]`: Set address for explicit TCP Source connection, (default none:2332). - `-t, --tpiu x,y,...`: Remove TPIU formatting and issue streams x, y etc over incrementing IP port numbers. + `-T, --tpiu`: Remove TPIU formatting from incoming data stream. + + `-t, --tag x,y,...`: List of streams to decode (and onward route) from the probe (low stream numbers are TPIU channels). Orbfifo diff --git a/Src/cobs.c b/Src/cobs.c index 9f835c8c..478686c9 100644 --- a/Src/cobs.c +++ b/Src/cobs.c @@ -5,6 +5,8 @@ * =========================== * * Routines based on code from http://www.stuartcheshire.org/papers/COBSforToN.pdf + * IEEE/ACM TRANSACTIONS ON NETWORKING, VOL.7, NO. 2, APRIL 1999 + * Consistent Overhead Byte Stuffing, Stuart Cheshire and Mary Baker * */ @@ -155,9 +157,9 @@ void COBSPump( struct COBS *t, uint8_t *incoming, int len, } else { - if ( COBS_SYNC_CHAR == *fp ) + /* Check for frame overflow ... if it's max then error */ + if ( ( t->f.len > COBS_MAX_PACKET_LEN ) || ( COBS_SYNC_CHAR == *fp ) ) { - /* This is the end of a packet and the lengths don't match */ t->error++; t->s = COBS_IDLE; } @@ -167,13 +169,6 @@ void COBSPump( struct COBS *t, uint8_t *incoming, int len, } } - /* Check for frame overflow ... if it's max then error */ - if ( COBS_MAX_PACKET_LEN == t->f.len ) - { - t->error++; - t->s = COBS_IDLE; - } - break; } } @@ -215,15 +210,15 @@ bool COBSSimpleDecode( const uint8_t *inputEnc, int len, struct Frame *o ) /* Deal with possibility of illegal sync chars in the flow */ if ( *fp == COBS_SYNC_CHAR ) { - /* return false...no good packet here */ - o->len = 0; - return false; + /* return false...no good packet here */ + o->len = 0; + return false; } *op++ = *fp++; } - if (( interval != 0xff ) && ( *op != COBS_SYNC_CHAR )) + if ( ( interval != 0xff ) && ( *fp != COBS_SYNC_CHAR ) ) { *op++ = COBS_SYNC_CHAR; } @@ -250,230 +245,3 @@ const uint8_t *COBSgetFrameExtent( const uint8_t *inputEnc, int len ) } // ==================================================================================================== -// ==================================================================================================== -// ==================================================================================================== -// Test Cases -// ==================================================================================================== -// ==================================================================================================== -// ==================================================================================================== - -/* Build tests with; - * gcc -DTESTING_COBS cobs.c -I ../Inc -ggdb - * Execute with; - * ./a.out - */ - -#ifdef TESTING_COBS - -#include - -static void _printDigits( int length, uint8_t *d ) -{ - while ( length-- ) - { - fprintf( stderr, "%02x ", *d++ ); - } -} - - -struct test -{ - struct Frame dec; - struct Frame enc; -}; - -/* These tests are from https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing#Encoding_examples */ -struct test testSet[] = -{ - /* 1 */ { { 1, "\x00" }, { 3, "\x01\x01\x00" } }, - /* 2 */ { { 2, "\x00\x00" }, { 4, "\x01\x01\x01\x00" } }, - /* 3 */ { { 3, "\x00\x11\x00" }, { 5, "\x01\x02\x11\x01\x00" } }, - /* 4 */ { { 4, "\x11\x22\x00\x33"}, { 6, "\x03\x11\x22\x02\x33\x00" } }, - /* 5 */ { { 4, "\x11\x22\x33\x44"}, { 6, "\x05\x11\x22\x33\x44\x00" } }, - /* 6 */ { { 4, "\x11\x00\x00\x00"}, { 6, "\x02\x11\x01\x01\x01\x00" } }, - /* 7 */ { { 254, "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe"}, {256, "\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00" }}, - /* 8 */ {{ 255, "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe"}, {257, "\x01\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00" }}, - /* 9 */ { {255, "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"}, {258, "\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x02\xff\x00"} }, - /* 10 */ { {255, "\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00"}, {258, "\xff\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x01\x01\x00" }}, - /* 11 */ { {255, "\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00\x01"}, {257, "\xfe\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x02\x01\x00" }}, -}; - -// ==================================================================================================== - -void _packetRxed ( struct Frame *p, void *param ) - -{ - struct test *t = ( struct test * )param; - int k; - - for ( k = 0; ( ( k < p->len ) && ( p->d[k] == t->dec.d[k] ) ); k++ ) {} - - if ( k != p->len ) - { - fprintf( stderr, "*********FAILED\nWanted:" ); - _printDigits( t->dec.len, t->dec.d ); - fprintf( stderr, "\nRecevd:" ); - _printDigits( p->len, p->d ); - fprintf( stderr, "\n" ); - } - else - { - fprintf( stderr, "OK\n" ); - } -} -// ==================================================================================================== - -/* These need to be global to support the callback */ - -#define TEST_PACKET_LEN (COBS_MAX_PACKET_LEN-5) - -uint8_t ipPacket[TEST_PACKET_LEN]; - -void _packetRxed2( struct Frame *p, void *param ) -{ - if ( p->len != TEST_PACKET_LEN ) - { - fprintf( stderr, "(%s) Received frame length doesn't match %d vs rxed %d\n",param, TEST_PACKET_LEN, p->len ); - } - - for ( int i = 0; i < TEST_PACKET_LEN; i++ ) - { - if ( ipPacket[i] != p->d[i] ) - { - fprintf( stderr, "\n(%s) First inconsistency at displacement %d\n", param, i ); - break; - } - } -} - -///// - -int main( int argc, void **argv ) - -{ - struct COBS *d = COBSInit( NULL ); - struct Frame o; - int i, j, k; - - int oplen; - - if ( d ) - { - fprintf( stderr, "COBS initialised to %llx\n", ( long long int )d ); - } - else - { - fprintf( stderr, "*** ERR: COBS not created\n" ); - } - - fprintf( stderr, "Testing simple decode;\n" ); - - for ( i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) - { - fprintf( stderr, "%d: ", i + 1 ); - - /* The +1 here is because we have a COBS_SYNC_CHAR on the end of each frame */ - if ( testSet[i].enc.len != COBSgetFrameExtent( testSet[i].enc.d, testSet[i].enc.len ) - testSet[i].enc.d + 1 ) - { - fprintf( stderr, "Failed, packet length doesn't match (%d vs wanted %d\n", COBSgetFrameExtent( testSet[i].enc.d, testSet[i].enc.len ) - o.d, testSet[i].enc.len ); - continue; - } - - if ( !COBSSimpleDecode( testSet[i].enc.d, testSet[i].enc.len, &o ) ) - { - fprintf( stderr, "Failed, Packet did not decode\n" ); - continue; - } - - for ( k = 0; ( ( k < o.len ) && ( o.d[k] == testSet[i].dec.d[k] ) ); k++ ) {} - - if ( k != o.len ) - { - fprintf( stderr, "*********FAILED\nWanted:" ); - _printDigits( testSet[i].dec.len, testSet[i].dec.d ); - fprintf( stderr, "\nRecevd:" ); - _printDigits( o.len, o.d ); - fprintf( stderr, "\n" ); - continue; - } - - fprintf( stderr, "OK %d\n",o.len ); - } - - - - fprintf( stderr, "Testing pumped decode;\n" ); - - for ( i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) - { - fprintf( stderr, "%d: ", i + 1 ); - COBSPump( d, testSet[i].enc.d, testSet[i].enc.len, _packetRxed, &testSet[i] ); - } - - fprintf( stderr, "\nTesting encode;\n" ); - - for ( int i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) - { - fprintf( stderr, "%d: ", i + 1 ); - COBSEncode( NULL, 0, testSet[i].dec.d, testSet[i].dec.len, &o ); - - if ( o.len != COBSgetFrameExtent( o.d, o.len ) - o.d + 1 ) - { - fprintf( stderr, "Static framelen assessment failed %d vs expected %d\n", o.len, COBSgetFrameExtent( o.d, o.len ) - o.d + 1 ); - continue; - } - - if ( o.len != testSet[i].enc.len ) - { - fprintf( stderr, "Length mismatch correct=%d vs actual=%d\n", testSet[i].enc.len, o.len ); - - for ( int j = 0; j < o.len; j++ ) - { - if ( o.d[j] != testSet[i].enc.d[j] ) - { - fprintf( stderr, "*********FAILED\nWanted:" ); - _printDigits( testSet[i].enc.len, testSet[i].enc.d ); - fprintf( stderr, "\nRecevd:" ); - _printDigits( o.len, o.d ); - fprintf( stderr, "\n" ); - break; - } - } - - } - else - { - fprintf( stderr, "OK\n" ); - } - } - - // exit(-1); - fprintf( stderr, "Testing multiple full packets...\n" ); - uint8_t opPacket[TEST_PACKET_LEN]; - struct Frame opFrame; - - for ( int iteration = 0; iteration < 10000; iteration++ ) - { - fprintf(stderr,"%d ",iteration); - /* Build a random packet */ - for ( int i = 0; i < TEST_PACKET_LEN; i++ ) - { - ipPacket[i] = random() % 256; - } - - COBSEncode( NULL, 0, ipPacket, TEST_PACKET_LEN, &opFrame ); - if (COBSSimpleDecode( opFrame.d, opFrame.len, &d->f )) - { - _packetRxed2( &d->f, "COBSSimpleDecode" ); - } - else - { - fprintf(stderr,"Bad packet\n"); - } - - // COBSPump( d, ipPacket, COBS_MAX_PACKET_LEN, _packetRxed2, "COBSPump" ); - } -} -#endif - -// ==================================================================================================== diff --git a/Src/nwclient.c b/Src/nwclient.c index 2ea27315..55c78b34 100644 --- a/Src/nwclient.c +++ b/Src/nwclient.c @@ -41,9 +41,6 @@ #endif #endif -/* Shared ring buffer for data */ -#define SHARED_BUFFER_SIZE (8*TRANSFER_SIZE) - /* Master structure for the set of nwclients */ struct nwclientsHandle @@ -51,12 +48,8 @@ struct nwclientsHandle volatile struct nwClient *firstClient; /* Head of linked list of network clients */ pthread_mutex_t clientList; /* Lock for list of network clients */ - int wp; /* Next write to shared buffer */ - uint8_t sharedBuffer[SHARED_BUFFER_SIZE]; /* Data waiting to be sent to the clients */ - int sockfd; /* The socket for the inferior */ pthread_t ipThread; /* The listening thread for n/w clients */ - bool finish; /* Its time to leave */ }; /* Descriptor for individual connected network clients */ @@ -64,17 +57,12 @@ struct nwClient { int handle; /* Handle to client */ - pthread_t thread; /* Execution thread */ struct nwclientsHandle *parent; /* Who owns this list */ volatile struct nwClient *nextClient; volatile struct nwClient *prevClient; - bool finish; /* Flag indicating it's time to cease operation */ - pthread_cond_t dataAvailable; /* Semaphore counting data for clients */ - pthread_mutex_t dataAvailable_m; /* Mutex for counting data for clients */ /* Parameters used to run the client */ int portNo; /* Port of connection */ - int rp; /* Current read pointer in data stream */ }; // ==================================================================================================== @@ -107,20 +95,11 @@ static int _lock_with_timeout( pthread_mutex_t *mutex, const struct timespec *ts // ==================================================================================================== // Network server implementation for raw SWO feed // ==================================================================================================== -static void _clientRemove( struct nwClient *c ) +static void _clientRemoveNoLock( volatile struct nwClient *c ) { - const struct timespec ts = {.tv_sec = 1, .tv_nsec = 0}; - close( c->portNo ); - /* First of all, make sure we can get access to the client list */ - - if ( _lock_with_timeout( &c->parent->clientList, &ts ) < 0 ) - { - genericsExit( -1, "Failed to acquire mutex" EOL ); - } - if ( c->prevClient ) { c->prevClient->nextClient = c->nextClient; @@ -135,58 +114,8 @@ static void _clientRemove( struct nwClient *c ) c->nextClient->prevClient = c->prevClient; } - /* OK, we made our modifications */ - pthread_mutex_unlock( &c->parent->clientList ); - /* Remove the memory that was allocated for this client */ - free( c ); -} -// ==================================================================================================== -static void *_client( void *args ) - -/* Handle an individual network client account */ - -{ - struct nwClient *c = ( struct nwClient * )args; - ssize_t readDataLen; - uint8_t *p; - ssize_t sent = 0; - - while ( !c->finish ) - { - /* Spin until we're told there's something to send along */ - pthread_cond_wait( &c->dataAvailable, &c->dataAvailable_m ); - - while ( c->rp != c->parent->wp ) - { - /* Data to send is either to the end of the ring buffer or to the wp, whichever is first */ - readDataLen = ( c->rp < c->parent->wp ) ? c->parent->wp - c->rp : SHARED_BUFFER_SIZE - c->rp; - p = &( c->parent->sharedBuffer[c->rp] ); - c->rp = ( c->rp + readDataLen ) % SHARED_BUFFER_SIZE; - - while ( ( readDataLen > 0 ) && ( sent >= 0 ) ) - { - sent = send( c->portNo, ( const void * )p, readDataLen, MSG_NOSIGNAL ); - p += sent; - readDataLen -= sent; - } - - if ( c->finish || readDataLen ) - { - /* This port went away, so remove it */ - if ( !c->finish ) - { - genericsReport( V_INFO, "Connection dropped" EOL ); - } - - c->finish = true; - break; - } - } - } - - _clientRemove( c ); - return NULL; + free( ( void * )c ); } // ==================================================================================================== static void *_listenTask( void *arg ) @@ -207,11 +136,11 @@ static void *_listenTask( void *arg ) clilen = sizeof( cli_addr ); listen( h->sockfd, 5 ); - while ( !h->finish ) + while ( true ) { newsockfd = accept( h->sockfd, ( struct sockaddr * ) &cli_addr, &clilen ); - if ( h->finish ) + if ( newsockfd < 0 ) { close( newsockfd ); break; @@ -226,48 +155,32 @@ static void *_listenTask( void *arg ) client->parent = h; client->portNo = newsockfd; - client->rp = h->wp; - if ( pthread_mutex_init( &client->dataAvailable_m, NULL ) != 0 ) + /* Hook into linked list */ + if ( _lock_with_timeout( &h->clientList, &ts ) < 0 ) { - genericsExit( -1, "Failed to establish mutex for condition variable" EOL ); + genericsExit( -1, "Failed to acquire mutex" EOL ); } - if ( pthread_cond_init( &client->dataAvailable, NULL ) != 0 ) - { - genericsExit( -1, "Failed to establish condition variable" EOL ); - } - if ( pthread_create( &( client->thread ), NULL, &_client, client ) ) + client->nextClient = h->firstClient; + client->prevClient = NULL; + + if ( client->nextClient ) { - genericsExit( -1, "Failed to create thread" EOL ); + client->nextClient->prevClient = client; } - else - { - /* Auto-cleanup for this thread */ - pthread_detach( client->thread ); - /* Hook into linked list */ - if ( _lock_with_timeout( &h->clientList, &ts ) < 0 ) - { - genericsExit( -1, "Failed to acquire mutex" EOL ); - } + h->firstClient = client; - client->nextClient = h->firstClient; - client->prevClient = NULL; - - if ( client->nextClient ) - { - client->nextClient->prevClient = client; - } - - h->firstClient = client; + pthread_mutex_unlock( &h->clientList ); + } - pthread_mutex_unlock( &h->clientList ); - } + if ( h->sockfd ) + { + close( h->sockfd ); } - close( h->sockfd ); return NULL; } // ==================================================================================================== @@ -281,38 +194,41 @@ void nwclientSend( struct nwclientsHandle *h, uint32_t len, const uint8_t *ipbuf { const struct timespec ts = {.tv_sec = 1, .tv_nsec = 0}; - int newWp = ( h->wp + len ); - int toEnd = ( newWp > SHARED_BUFFER_SIZE ) ? SHARED_BUFFER_SIZE - h->wp : len; - int fromStart = len - toEnd; - /* Copy the received data into the shared buffer */ - memcpy( &h->sharedBuffer[h->wp], ipbuffer, toEnd ); - - if ( fromStart ) + if ( _lock_with_timeout( &h->clientList, &ts ) < 0 ) { - memcpy( h->sharedBuffer, &ipbuffer[toEnd], fromStart ); + genericsExit( -1, "Failed to acquire mutex" EOL ); } - h->wp = newWp % SHARED_BUFFER_SIZE; + /* Now kick all the clients that new data arrived for them to distribute */ + volatile struct nwClient *n = h->firstClient; - if ( !h->finish ) + while ( n ) { - if ( _lock_with_timeout( &h->clientList, &ts ) < 0 ) + ssize_t t = len; + ssize_t sent = 0; + void *p = ( void * )ipbuffer; + + while ( t && ( sent >= 0 ) ) { - genericsExit( -1, "Failed to acquire mutex" EOL ); + sent = send( n->portNo, p, t, MSG_NOSIGNAL ); + p += sent; + t -= sent; } - /* Now kick all the clients that new data arrived for them to distribute */ - volatile struct nwClient *n = h->firstClient; - - while ( n ) + if ( t ) + { + volatile struct nwClient *newn = n->nextClient; + _clientRemoveNoLock( n ); + n = newn; + } + else { - pthread_cond_signal( ( pthread_cond_t * )&n->dataAvailable ); n = n->nextClient; } - - pthread_mutex_unlock( &h->clientList ); } + + pthread_mutex_unlock( &h->clientList ); } // ==================================================================================================== struct nwclientsHandle *nwclientStart( int port ) @@ -378,8 +294,10 @@ void nwclientShutdown( struct nwclientsHandle *h ) return; } - /* Flag that we're ending */ - h->finish = true; + /* Flag that we're ending - this ensures the listening thread dies */ + int tsockfd = h->sockfd; + h->sockfd = 0; + close( tsockfd ); if ( _lock_with_timeout( &h->clientList, &ts ) < 0 ) { @@ -388,30 +306,15 @@ void nwclientShutdown( struct nwclientsHandle *h ) volatile struct nwClient *c = h->firstClient; - /* Tell all the clients to terminate */ + /* Terminate all the clients */ while ( c ) { - c->finish = true; - - /* Closing the connection will kill the client */ - close( c->handle ); - - /* This is safe because we are locked by the mutex */ - c = c->nextClient; + volatile struct nwClient *newc = c->nextClient; + _clientRemoveNoLock( c ); + c = newc; } pthread_mutex_unlock( &h->clientList ); -} -// ==================================================================================================== -bool nwclientShutdownComplete( struct nwclientsHandle *h ) - -{ - if ( ! h->firstClient ) - { - free( h ); - return true; - } - - return false; + free( h ); } // ==================================================================================================== diff --git a/Src/orbuculum.c b/Src/orbuculum.c index 49291acc..d2fee599 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -87,6 +87,7 @@ struct Options char *otcl; /* Orbtrace command line options */ uint32_t intervalReportTime; /* If we want interval reports about performance */ bool mono; /* Supress colour in output */ + int paceDelay; /* Delay between blocks of data transmission in file readout */ char *channelList; /* List of TPIU channels to be serviced */ bool hiresTime; /* Use hiresolution time (shorter timeouts...more accurate but higher load */ char *sn; /* Any part serial number for identifying a specific device */ @@ -111,6 +112,7 @@ struct RunTime struct Frame cobsOtg; /* Outgoing COBS frame for legacy use */ struct OrbtraceIf *o; /* For accessing ORBTrace devices + BMPs */ + uint64_t intervalBytes; /* Number of bytes transferred in current interval */ uint64_t intervalRawBytes; /* Number of bytes transferred in current interval */ uint64_t cobsDataLenRxed; /* Number of bytes of decoded COBS data */ @@ -362,6 +364,7 @@ void _printHelp( const char *const progName ) genericsPrintf( " -o, --output-file: to be used for dump file" EOL ); genericsPrintf( " -O, --orbtrace: \"\" run orbtrace with specified options on each new ORBTrace device connect" EOL ); genericsPrintf( " -p, --serial-port: to use" EOL ); + genericsPrintf( " -P, --pace: delay in block of data transmission to clients. Used when source is a file." EOL ); genericsPrintf( " -s, --server: : to use" EOL ); genericsPrintf( " -T, --tpiu: Decode TPIU channels (and strip TPIU framing from output flows)" EOL ); genericsPrintf( " -t, --tag: List of streams to decode (and onward route) from COBS or TPIU frames" EOL ); @@ -391,6 +394,7 @@ static struct option _longOptions[] = {"output-file", required_argument, NULL, 'o'}, {"orbtrace", required_argument, NULL, 'O'}, {"serial-port", required_argument, NULL, 'p'}, + {"pace", required_argument, NULL, 'P'}, {"server", required_argument, NULL, 's'}, {"tpiu", required_argument, NULL, 'T'}, {"tag", required_argument, NULL, 't'}, @@ -405,7 +409,7 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) int c, optionIndex = 0; #define DELIMITER ',' - while ( ( c = getopt_long ( argc, argv, "a:Ef:hHVl:m:Mn:o:O:p:s:Tt:v:", _longOptions, &optionIndex ) ) != -1 ) + while ( ( c = getopt_long ( argc, argv, "a:Ef:hHVl:m:Mn:o:O:p:P:s:Tt:v:", _longOptions, &optionIndex ) ) != -1 ) switch ( c ) { // ------------------------------------ @@ -485,6 +489,12 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ + case 'P': + r->options->paceDelay = atoi( optarg ); + break; + + // ------------------------------------ + case 's': r->options->nwserverHost = optarg; @@ -604,6 +614,7 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) if ( r->options->file ) { + genericsReport( V_INFO, "Pace Delay : %dus" EOL, r->options->paceDelay ); genericsReport( V_INFO, "Input File : %s", r->options->file ); if ( r->options->fileTerminate ) @@ -622,6 +633,12 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) return false; } + if ( ( r->options->paceDelay ) && ( !r->options->file ) ) + { + genericsReport( V_ERROR, "Pace Delay only makes sense when input is from a file" EOL ); + return false; + } + if ( ( r->options->port ) && ( r->options->nwserverPort ) ) { genericsReport( V_ERROR, "Cannot specify port and NW Server at same time" EOL ); @@ -730,6 +747,7 @@ static void _purgeBlock( struct RunTime *r ) /* The COBs encoded version goes out on the combined COBs channel, with a specific channel header */ int j = h->strippedBlock->fillLevel; + const uint8_t frontMatter[1] = { h->channel }; const uint8_t *b = h->strippedBlock->buffer; @@ -792,6 +810,10 @@ static void _TPIUpacketRxed( enum TPIUPumpEvent e, struct TPIUPacket *p, void *p /* We must have found a match for this at some point, so add it to the queue */ h->strippedBlock->buffer[h->strippedBlock->fillLevel++] = p->packet[g].d; } + else + { + genericsReport( V_WARN, "No handler for %d" EOL, p->packet[g].s ); + } } break; @@ -901,7 +923,7 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer if ( r->opFileHandle ) { - if ( write( r->opFileHandle, buffer, fillLevel ) < 0 ) + if ( write( r->opFileHandle, buffer, fillLevel ) <= 0 ) { genericsExit( -3, "Writing to file failed" EOL ); } @@ -1421,17 +1443,21 @@ static int _fileFeeder( struct RunTime *r ) } } - /* We can probably read from file faster than we can process.... */ - _dataAvailable( r ); int nwp = ( r->wp + 1 ) % NUM_RAW_BLOCKS; /* Spin waiting for buffer space to become available */ while ( nwp == r->rp ) { - usleep( INTERVAL_100MS ); + usleep( INTERVAL_1MS ); } r->wp = nwp; + _dataAvailable( r ); + + if ( r->options->paceDelay ) + { + usleep( r->options->paceDelay ); + } } r->conn = false; @@ -1588,6 +1614,8 @@ int main( int argc, char *argv[] ) } } + sleep( 3 ); + if ( ( _r.options->nwserverPort ) || ( _r.options->port ) || ( _r.options->file ) ) { /* Start the distribution task */ From 37a40181fc852528ccefa5a7bc473899f4998762 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Sat, 16 Mar 2024 23:35:53 +0000 Subject: [PATCH 09/37] Tested with experimental orbtrace COBS code --- Inc/orbtraceIf.h | 7 ++++++ Src/orbtraceIf.c | 4 ++++ Src/orbuculum.c | 56 ++++++++++++++++++------------------------------ 3 files changed, 32 insertions(+), 35 deletions(-) diff --git a/Inc/orbtraceIf.h b/Inc/orbtraceIf.h index 0f5fd6b0..d08e204a 100644 --- a/Inc/orbtraceIf.h +++ b/Inc/orbtraceIf.h @@ -91,6 +91,7 @@ struct OrbtraceIf uint8_t ep; /* Endpoint used for data transfer */ uint8_t iface; /* ...and the interface */ bool isOrbtrace; /* Is this an orbtrace device? */ + bool supportsCOBS; /* ...and does it support COBs for transfer? */ int numDevices; /* Number of matching devices found */ struct OrbtraceIfDevice *devices; /* List of matching devices found */ @@ -141,6 +142,11 @@ static inline libusb_device_handle *OrbtraceIfGetHandle( struct OrbtraceIf *o ) return o->handle; } +static inline bool OrbtraceSupportsCOBS( struct OrbtraceIf *o ) +{ + return o->supportsCOBS; +} + /* Device selection management */ int OrbtraceIfGetDeviceList( struct OrbtraceIf *o, char *sn, uint32_t devmask ); void OrbtraceIfListDevices( struct OrbtraceIf *o ); @@ -150,6 +156,7 @@ bool OrbtraceGetIfandEP( struct OrbtraceIf *o ); void OrbtraceIfCloseDevice( struct OrbtraceIf *o ); enum Channel OrbtraceIfNameToChannel( char *x ); bool OrbtraceIsOrbtrace( struct OrbtraceIf *o ); +bool OrbtraceSupportsCOBS( struct OrbtraceIf *o ); /* Device manipulation */ bool OrbtraceIfSetTraceWidth( struct OrbtraceIf *o, int width ); diff --git a/Src/orbtraceIf.c b/Src/orbtraceIf.c index 1e55769a..a6d79584 100644 --- a/Src/orbtraceIf.c +++ b/Src/orbtraceIf.c @@ -22,6 +22,8 @@ static const struct OrbtraceInterfaceType _validDevices[DEVICE_NUM_DEVICES] = { 0, 0 } }; +#define LAST_NONCOBS_ORBTRACE "v1.3.2-0" + /* BMP Interface and endpoint are fixed, so we can return those on request */ #define BMP_IFACE (5) #define BMP_EP (0x85) @@ -468,6 +470,7 @@ bool OrbtraceGetIfandEP( struct OrbtraceIf *o ) o->iface = BMP_IFACE; o->ep = BMP_EP; o->isOrbtrace = false; + o->supportsCOBS = false; break; case DEVICE_ORBTRACE_MINI: // ------------------------------------------------------------------- @@ -519,6 +522,7 @@ bool OrbtraceGetIfandEP( struct OrbtraceIf *o ) } o->isOrbtrace = true; + o->supportsCOBS = strncmp( LAST_NONCOBS_ORBTRACE, o->devices[o->activeDevice].version, strlen( LAST_NONCOBS_ORBTRACE ) ) > 0; break; } diff --git a/Src/orbuculum.c b/Src/orbuculum.c index d2fee599..eabbfe94 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -65,9 +65,6 @@ #define ORBTRACE "orbtrace" #define ORBTRACEENVNAME "ORBTRACE" -// Define this to use original clean ORBTRACE code -#define LEGACY_ORBTRACE 1 - /* Record for options, either defaults or from command line */ struct Options { @@ -686,33 +683,32 @@ void *_checkInterval( void *params ) h = r->handler; uint64_t totalDat = 0; - /* If we are decoding from TPIU then calculate per channel */ - if ( ( r->intervalRawBytes ) && ( r->options->useTPIU ) ) + if ( r->intervalRawBytes ) { - for ( int chIndex = 0; chIndex < r->numHandlers; chIndex++ ) + if ( r->options->useTPIU ) { - genericsPrintf( " %d:%3d%% ", h->channel, ( h->intervalBytes * 100 ) / r->intervalRawBytes ); - totalDat += h->intervalBytes; - h->intervalBytes = 0; - h++; - } - - genericsPrintf( " Waste:%3d%% ", 100 - ( ( totalDat * 100 ) / r->intervalRawBytes ) ); - } + /* If we are decoding from TPIU then calculate per channel */ + for ( int chIndex = 0; chIndex < r->numHandlers; chIndex++ ) + { + genericsPrintf( " %d:%3d%% ", h->channel, ( h->intervalBytes * 100 ) / r->intervalRawBytes ); + totalDat += h->intervalBytes; + h->intervalBytes = 0; + h++; + } -#ifndef LEGACY_ORBTRACE - else - { - /* Either raw ITM or COBs frames */ - if ( OrbtraceIsOrbtrace( _r.o ) && r->intervalRawBytes ) + genericsPrintf( " Waste:%3d%% ", 100 - ( ( totalDat * 100 ) / r->intervalRawBytes ) ); + } + else { - int w = 1000 - ( ( r->cobsDataLenRxed * 1000 ) / r->intervalRawBytes ); - genericsPrintf( " Waste:%01d.%01d%%", w / 10, w % 10 ); + /* Either raw ITM or COBs frames */ + if ( OrbtraceSupportsCOBS( _r.o ) ) + { + int w = 1000 - ( ( r->cobsDataLenRxed * 1000 ) / r->intervalRawBytes ); + genericsPrintf( " Waste:%01d.%01d%%", w / 10, w % 10 ); + } } } -#endif - r->cobsDataLenRxed = 0; r->intervalRawBytes = 0; @@ -1043,9 +1039,7 @@ static void _usb_callback( struct libusb_transfer *t ) } } -#ifndef LEGACY_ORBTRACE - - if ( OrbtraceIsOrbtrace( _r.o ) ) + if ( OrbtraceSupportsCOBS( _r.o ) ) { _cobsIncoming( &_r, t->buffer, t->actual_length ); /* We need to decode this so it can go through the 'normal' output channels too */ @@ -1054,7 +1048,6 @@ static void _usb_callback( struct libusb_transfer *t ) _purgeBlock( &_r ); } else -#endif { _processBlock( &_r, t->actual_length, t->buffer ); _r.intervalRawBytes += t->actual_length; @@ -1533,12 +1526,7 @@ int main( int argc, char *argv[] ) #endif -#ifndef LEGACY_ORBTRACE - - if ( _r.options->channelList ) -#else - if ( ( _r.options->channelList ) && ( _r.options->useTPIU ) ) -#endif + if ( _r.options->channelList && _r.options->useTPIU ) { /* Channel list is only needed for legacy ports that we are re-exporting (i.e. clean unencapsulated flows) */ char *c = _r.options->channelList; @@ -1614,8 +1602,6 @@ int main( int argc, char *argv[] ) } } - sleep( 3 ); - if ( ( _r.options->nwserverPort ) || ( _r.options->port ) || ( _r.options->file ) ) { /* Start the distribution task */ From 06c8d96e41df6ee46457cc4a314bb4b4428c86c3 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Mon, 1 Apr 2024 16:01:15 +0100 Subject: [PATCH 10/37] Disconnect clients that take too long in processing --- .github/workflows/build-linux.yml | 1 + Src/nwclient.c | 33 +++++++++++++++++++++++-------- Src/orbuculum.c | 2 -- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index ed31f6bf..7640dbe7 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -8,6 +8,7 @@ jobs: linux: runs-on: ubuntu-latest steps: + - run: sudo apt-get update - run: sudo apt-get install -y libusb-1.0-0-dev libzmq3-dev meson libsdl2-dev - uses: actions/checkout@v3 - run: meson setup ./build diff --git a/Src/nwclient.c b/Src/nwclient.c index 55c78b34..b6868b9d 100644 --- a/Src/nwclient.c +++ b/Src/nwclient.c @@ -9,6 +9,7 @@ #include #include #include +#include #ifdef WIN32 #include #include @@ -149,13 +150,29 @@ static void *_listenTask( void *arg ) inet_ntop( AF_INET, &cli_addr.sin_addr, s, 99 ); genericsReport( V_INFO, "New connection from %s" EOL, s ); - /* We got a new connection - spawn a thread to handle it */ + /* We got a new connection - spawn a record to handle it */ client = ( struct nwClient * )calloc( 1, sizeof( struct nwClient ) ); MEMCHECK( client, NULL ); client->parent = h; client->portNo = newsockfd; + /* Make port non-blocking */ +#ifdef WIN32 + unsigned long mode = 0; + ioctlsocket( newsockfd, FIONBIO, &mode ) == 0 ); +#else + int flags = fcntl( newsockfd, F_GETFL, 0 ); + + if ( flags == -1 ) + { + return false; + } + + flags |= O_NONBLOCK; + fcntl( newsockfd, F_SETFL, flags ); +#endif + /* Hook into linked list */ if ( _lock_with_timeout( &h->clientList, &ts ) < 0 ) { @@ -167,16 +184,16 @@ static void *_listenTask( void *arg ) client->prevClient = NULL; if ( client->nextClient ) - { - client->nextClient->prevClient = client; - } + { + client->nextClient->prevClient = client; + } - h->firstClient = client; + h->firstClient = client; - pthread_mutex_unlock( &h->clientList ); - } + pthread_mutex_unlock( &h->clientList ); +} - if ( h->sockfd ) +if ( h->sockfd ) { close( h->sockfd ); } diff --git a/Src/orbuculum.c b/Src/orbuculum.c index eabbfe94..d113788f 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -325,8 +325,6 @@ static void _doExit( void ) _r.ending = true; nwclientShutdown( _r.n ); - /* Give them a bit of time, then we're leaving anyway */ - usleep( INTERVAL_100MS ); if ( _r.opFileHandle ) { From e337b2318330afed6e19eee0ce9194cf0965cfab Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Wed, 17 Apr 2024 11:53:20 +0100 Subject: [PATCH 11/37] Simplify different protocol handling, WIP --- COPYING | 37 ------------------- Src/orbuculum.c | 98 ++++++++++++++++++++++++++++--------------------- 2 files changed, 56 insertions(+), 79 deletions(-) delete mode 100644 COPYING diff --git a/COPYING b/COPYING deleted file mode 100644 index 665eeea0..00000000 --- a/COPYING +++ /dev/null @@ -1,37 +0,0 @@ -The BSD 3 Clause License applies to all files in this distribution unless -specifically indicated in the head of any specific file or in a file -called LICENSE in a specific directory (affecting that directory and all -of its descendants). - -Specifically, please take note that SUMP2 has different licencing; - -The FPGA for SUMP2 in orbtrace/src/sump2 is under CERN Open Hardware Licence V1.2 - -Sump2 itself is GPL and is downloadable directly from Kevin Hubbards site at -https://blackmesalabs.wordpress.com/2016/10/24/sump2-96-msps-logic-analyzer-for-22/ - -BSD License -=========== - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the names Orbtrace, Orbuculum nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Src/orbuculum.c b/Src/orbuculum.c index d113788f..c6e968bb 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -950,35 +950,6 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer } } } - -// ==================================================================================================== -static void *_processBlocksQueue( void *params ) - -/* Generic block processor task for received data */ - -{ - struct RunTime *r = ( struct RunTime * )params; - - while ( !r->ending ) - { - pthread_cond_wait( &r->dataForClients, &r->dataForClients_m ); - - if ( r->rp != r->wp ) - { - _processBlock( r, r->rawBlock[r->rp].fillLevel, r->rawBlock[r->rp].buffer ); - r->rp = ( r->rp + 1 ) % NUM_RAW_BLOCKS; - } - } - - return NULL; -} - -// ==================================================================================================== -static void _dataAvailable( struct RunTime *r ) - -{ - pthread_cond_signal( &r->dataForClients ); -} // ==================================================================================================== static void _COBSpacketRxed( struct Frame *p, void *param ) @@ -1020,6 +991,58 @@ static void _COBSpacketRxed( struct Frame *p, void *param ) } } // ==================================================================================================== +static void _handleBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer, bool isOTag ) + +/* Handle an incoming block in either 'conventional' or OTag format */ + +{ + + if ( isOTag ) + { + _cobsIncoming( r, buffer, fillLevel ); + + /* We need to decode this so it can go through the 'normal' output channels too */ + COBSPump( &r->c, buffer, fillLevel, _COBSpacketRxed, r ); + r->intervalRawBytes += fillLevel; + _purgeBlock( r ); + } + else + { + _processBlock( r, fillLevel, buffer ); + } + + r->intervalRawBytes += fillLevel; +} +// ==================================================================================================== +static void *_processBlocksQueue( void *params ) + +/* Generic block processor task for received data */ + +{ + struct RunTime *r = ( struct RunTime * )params; + + while ( !r->ending ) + { + pthread_cond_wait( &r->dataForClients, &r->dataForClients_m ); + + if ( r->rp != r->wp ) + { + _processBlock( r, r->rawBlock[r->rp].fillLevel, r->rawBlock[r->rp].buffer ); + r->rp = ( r->rp + 1 ) % NUM_RAW_BLOCKS; + } + } + + return NULL; +} + +// ==================================================================================================== +static void _dataAvailable( struct RunTime *r ) + +{ + pthread_cond_signal( &r->dataForClients ); +} +// ==================================================================================================== + static void _usb_callback( struct libusb_transfer *t ) @@ -1037,19 +1060,7 @@ static void _usb_callback( struct libusb_transfer *t ) } } - if ( OrbtraceSupportsCOBS( _r.o ) ) - { - _cobsIncoming( &_r, t->buffer, t->actual_length ); - /* We need to decode this so it can go through the 'normal' output channels too */ - COBSPump( &_r.c, t->buffer, t->actual_length, _COBSpacketRxed, &_r ); - _r.intervalRawBytes += t->actual_length; - _purgeBlock( &_r ); - } - else - { - _processBlock( &_r, t->actual_length, t->buffer ); - _r.intervalRawBytes += t->actual_length; - } + _handleBlock( &_r, t->actual_length, t->buffer, OrbtraceSupportsCOBS( _r.o ) ); if ( ( t->status != LIBUSB_TRANSFER_COMPLETED ) && ( t->status != LIBUSB_TRANSFER_TIMED_OUT ) && @@ -1224,6 +1235,8 @@ static int _nwserverFeeder( struct RunTime *r ) rxBlock->fillLevel = receivedSize; r->wp = ( r->wp + 1 ) % NUM_RAW_BLOCKS; + + _dataAvailable( r ); } @@ -1443,6 +1456,7 @@ static int _fileFeeder( struct RunTime *r ) } r->wp = nwp; + _dataAvailable( r ); if ( r->options->paceDelay ) From f82a194db7ef34570c975c1d53d594ee03c153e0 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Sun, 26 May 2024 19:08:05 +0100 Subject: [PATCH 12/37] Move to use of OTAG for protocol descriptor rather than COBS. Fix versioning of probe. --- Inc/orbtraceIf.h | 8 +-- README.md | 42 ++++++++++++++-- Src/orbtraceIf.c | 10 ++-- Src/orbuculum.c | 128 +++++++++++++++++++++++++++-------------------- 4 files changed, 122 insertions(+), 66 deletions(-) diff --git a/Inc/orbtraceIf.h b/Inc/orbtraceIf.h index d08e204a..fd2d302c 100644 --- a/Inc/orbtraceIf.h +++ b/Inc/orbtraceIf.h @@ -91,7 +91,7 @@ struct OrbtraceIf uint8_t ep; /* Endpoint used for data transfer */ uint8_t iface; /* ...and the interface */ bool isOrbtrace; /* Is this an orbtrace device? */ - bool supportsCOBS; /* ...and does it support COBs for transfer? */ + bool supportsOTAG; /* ...and does it support OTAG for transfer? */ int numDevices; /* Number of matching devices found */ struct OrbtraceIfDevice *devices; /* List of matching devices found */ @@ -142,9 +142,9 @@ static inline libusb_device_handle *OrbtraceIfGetHandle( struct OrbtraceIf *o ) return o->handle; } -static inline bool OrbtraceSupportsCOBS( struct OrbtraceIf *o ) +static inline bool OrbtraceSupportsOTAG( struct OrbtraceIf *o ) { - return o->supportsCOBS; + return o->supportsOTAG; } /* Device selection management */ @@ -156,7 +156,7 @@ bool OrbtraceGetIfandEP( struct OrbtraceIf *o ); void OrbtraceIfCloseDevice( struct OrbtraceIf *o ); enum Channel OrbtraceIfNameToChannel( char *x ); bool OrbtraceIsOrbtrace( struct OrbtraceIf *o ); -bool OrbtraceSupportsCOBS( struct OrbtraceIf *o ); +bool OrbtraceSupportsOTAG( struct OrbtraceIf *o ); /* Device manipulation */ bool OrbtraceIfSetTraceWidth( struct OrbtraceIf *o, int width ); diff --git a/README.md b/README.md index 5e901ba9..8a5858a1 100644 --- a/README.md +++ b/README.md @@ -37,12 +37,10 @@ these data gives you a huge amount of insight into what is really going on insid your CPU. The tools are all mix-and-match according to what you are trying to do. The current set is; * orbuculum: The main program which interfaces to the trace probe and then issues a network -interface to which an arbitary number of clients can connect, by default on TCP/3443. This is +interface to which an arbitary number of clients can connect. This is used by a base interface to the target by other programmes in the suite. Generally you configure this for the TRACE tool you're using and then you can just leave it running and it'll grab -data from the target and make it available to clients whenever it can. Note that some -debug probes can now create an orbuculum-compatible interface on TCP/3443, and then you can -connect the rest of the suite to that directly, without needing to use the orbuculum mux itself. +data from the target and make it available to clients whenever it can. * orbfifo: The fifo pump: Turns a trace feed into a set of fifos (or permanent files). @@ -325,6 +323,40 @@ In order to get single folder with Orbuculum and MinGW dependencies run: Orbuculum executables along with MinGW-w64 dependencies will be installed into `build/install` and can be transfered to different machine or used outside of MSys2 shell. +Communications +============== + +Originally orbuculum provided a TCP/3443 port to which an arbitary number of clients could connect +and each one would receive a clean copy of the data from the probe. Optionally, the TPIU framing could +be stripped off by orbuculum so that individual clients didn't have to do it and each TPIU port would then +appear on consecutive ports; Generally, that means that ITM message appeared on TCP/3443 and ETM on TCP/3444. + +Some debug drivers (e.g. openocd, pyocd) can now create an orbuculum-compatible interface on TCP/3443, which +allows you to connect the rest of the suite to that directly, without needing to use the orbuculum mux itself. + +However, times have moved on. Passing all those data through transparently was wasteful as a fair bit of it +was 'nothing to see here', so Orbuculum now supports a new protocol, OTAG. OTAG is always carried on TCP/3402 and +is a bit more intelligent than simply passing through the messages from the probe. It turns the stream of data into +COBS encoded sequenced messages with defined message boundries and it also removes the redundant data. When used +in conjunction with an ORBTrace probe the OTAG messages are created in the probe itself, providing a further +performance improvement. + +Basically, all of this is mostly transparent to the regular end user. OTAG is automatically used for communication +between orbuculum and its clients if it's available, and Orbuculum still provides the TCP/3443 port it always did, +which you can connect to in the same way as you used to if you've got custom clients. OTAG will give you a performance +improvement, but it's otherwise mostly transparent. + +There are come slight changes to the command line options though. Historically, when using TPIU decoding, +you had to specify the channels to be decoded with an option like `-T 1,2`. You now simply need to tell orbuculum +which tags to process with `-t 1,2` and, if your probe doesn't remove TPIU framing automatically, specify the `-T` +option on its own....if you try to specify the `-T` option and you've got an ORBTrace that supports OTAG protocol +then you'll get a warning, because TPIU framing removal is done automatically in the probe in that case, so you +don't generally need it. + +Why have we made this change? Well, decoding TPIU on the probe saves a huge amount of bandwidth, and moving to the +tag based approach lets us convey other information from the probe too such as timestamps, voltages and currents. + + Using ===== @@ -390,7 +422,7 @@ For `orbuculum`, the specific command line options of note are; `-T, --tpiu`: Remove TPIU formatting from incoming data stream. - `-t, --tag x,y,...`: List of streams to decode (and onward route) from the probe (low stream numbers are TPIU channels). + `-t, --tag x,y,...`: List of streams to decode (and onward route) from the probe (low stream numbers are TPIU channels). *By default only stream 1 (ITM) is routed.* Orbfifo diff --git a/Src/orbtraceIf.c b/Src/orbtraceIf.c index a6d79584..e48b073b 100644 --- a/Src/orbtraceIf.c +++ b/Src/orbtraceIf.c @@ -22,7 +22,8 @@ static const struct OrbtraceInterfaceType _validDevices[DEVICE_NUM_DEVICES] = { 0, 0 } }; -#define LAST_NONCOBS_ORBTRACE "v1.3.2-0" +#define LAST_NONOTAG_ORBTRACE "v1.3.1-0" +#define SPECIAL_MATCH "v1.3.2-0" /* BMP Interface and endpoint are fixed, so we can return those on request */ #define BMP_IFACE (5) @@ -470,7 +471,7 @@ bool OrbtraceGetIfandEP( struct OrbtraceIf *o ) o->iface = BMP_IFACE; o->ep = BMP_EP; o->isOrbtrace = false; - o->supportsCOBS = false; + o->supportsOTAG = false; break; case DEVICE_ORBTRACE_MINI: // ------------------------------------------------------------------- @@ -522,7 +523,10 @@ bool OrbtraceGetIfandEP( struct OrbtraceIf *o ) } o->isOrbtrace = true; - o->supportsCOBS = strncmp( LAST_NONCOBS_ORBTRACE, o->devices[o->activeDevice].version, strlen( LAST_NONCOBS_ORBTRACE ) ) > 0; + /* This is ick and will be changed soon */ + o->supportsOTAG = ( ( strncmp( LAST_NONOTAG_ORBTRACE, o->devices[o->activeDevice].version, strlen( LAST_NONOTAG_ORBTRACE ) ) < 0 ) + && strncmp ( SPECIAL_MATCH, o->devices[o->activeDevice].version, strlen( SPECIAL_MATCH ) ) ); + break; } diff --git a/Src/orbuculum.c b/Src/orbuculum.c index c6e968bb..182979a8 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: BSD-3-Clause */ /* - * Orbuculum main receiver and TPIU/COBS demux + * Orbuculum main receiver and TPIU/OTAG demux * =========================================== * */ @@ -65,6 +65,10 @@ #define ORBTRACE "orbtrace" #define ORBTRACEENVNAME "ORBTRACE" +#define OTAG_MAX_PACKET_LEN (COBS_MAX_PACKET_LEN) +#define OTAG_MAX_ENC_PACKET_LEN (COBS_MAX_ENC_PACKET_LEN) +#define OTAG_EOP_LEN (COBS_EOP_LEN) + /* Record for options, either defaults or from command line */ struct Options { @@ -103,15 +107,15 @@ struct handlers struct RunTime { struct TPIUDecoder t; /* TPIU decoder instance, in case we need it */ - struct COBS c; /* COBS instance, in case we need it */ + struct COBS c; /* COBS instance for OTAG, in case we need it */ - struct Frame cobsPart; /* COBS part frame for maintaining continuity across packets */ - struct Frame cobsOtg; /* Outgoing COBS frame for legacy use */ + struct Frame otagPart; /* OTAG part frame for maintaining continuity across packets */ + struct Frame otagOtg; /* Outgoing OTAG frame for legacy use */ struct OrbtraceIf *o; /* For accessing ORBTrace devices + BMPs */ uint64_t intervalBytes; /* Number of bytes transferred in current interval */ uint64_t intervalRawBytes; /* Number of bytes transferred in current interval */ - uint64_t cobsDataLenRxed; /* Number of bytes of decoded COBS data */ + uint64_t otagDataLenRxed; /* Number of bytes of decoded OTAG data */ pthread_t intervalThread; /* Thread reporting on intervals */ pthread_t processThread; /* Thread for processing prior to distributing to clients */ @@ -131,11 +135,11 @@ struct RunTime int rp; struct dataBlock rawBlock[NUM_RAW_BLOCKS]; /* Transfer buffers from the receiver */ - struct nwclientsHandle *cobsHandler; /* Handle to COBS output handler */ + struct nwclientsHandle *otagHandler; /* Handle to OTAG output handler */ int numHandlers; /* Number of TPIU channel handlers in use */ struct handlers *handler; - struct nwclientsHandle *n; /* Link to the network client subsystem (used for non-TPIU/COBS case) */ + struct nwclientsHandle *n; /* Link to the network client subsystem (used for non-TPIU/OTAG case) */ char *sn; /* Serial number for any device we've established contact with */ }; @@ -147,7 +151,7 @@ struct RunTime #define NWSERVER_HOST "localhost" /* Address to connect to NW Server */ #define NWSERVER_PORT (2332) -#define NUM_COBS_CHANNELS 0x7F +#define NUM_OTAG_CHANNELS 0x7F #define INTERVAL_100US (100U) #define INTERVAL_1MS (10*INTERVAL_100US) @@ -362,7 +366,7 @@ void _printHelp( const char *const progName ) genericsPrintf( " -P, --pace: delay in block of data transmission to clients. Used when source is a file." EOL ); genericsPrintf( " -s, --server: : to use" EOL ); genericsPrintf( " -T, --tpiu: Decode TPIU channels (and strip TPIU framing from output flows)" EOL ); - genericsPrintf( " -t, --tag: List of streams to decode (and onward route) from COBS or TPIU frames" EOL ); + genericsPrintf( " -t, --tag: List of streams to decode (and onward route) from OTag or TPIU frames" EOL ); genericsPrintf( " -v, --verbose: Verbose mode 0(errors)..3(debug)" EOL ); genericsPrintf( " -V, --version: Print version and exit" EOL ); } @@ -559,6 +563,12 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) /* ... and dump the config if we're being verbose */ genericsReport( V_INFO, "orbuculum version " GIT_DESCRIBE EOL ); + if ( r->options->port ) + { + /* For the base of a UART only 8 of 10 bits contain useful data */ + r->options->dataSpeed = ( r->options->dataSpeed * 8 ) / 10; + } + if ( r->options->intervalReportTime ) { genericsReport( V_INFO, "Report Intv : %d mS" EOL, r->options->intervalReportTime ); @@ -663,7 +673,7 @@ void *_checkInterval( void *params ) if ( r->conn ) { - genericsPrintf( C_PREV_LN C_CLR_LN C_DATA ); + genericsPrintf( C_CLR_LN C_DATA ); if ( snapInterval / 1000000 ) { @@ -698,16 +708,16 @@ void *_checkInterval( void *params ) } else { - /* Either raw ITM or COBs frames */ - if ( OrbtraceSupportsCOBS( _r.o ) ) + /* Either raw ITM or OTag frames */ + if ( OrbtraceSupportsOTAG( _r.o ) ) { - int w = 1000 - ( ( r->cobsDataLenRxed * 1000 ) / r->intervalRawBytes ); + int w = 1000 - ( ( r->otagDataLenRxed * 1000 ) / r->intervalRawBytes ); genericsPrintf( " Waste:%01d.%01d%%", w / 10, w % 10 ); } } } - r->cobsDataLenRxed = 0; + r->otagDataLenRxed = 0; r->intervalRawBytes = 0; if ( r->options->dataSpeed > 100 ) @@ -717,7 +727,7 @@ void *_checkInterval( void *params ) genericsPrintf( "(" C_DATA " %3d%% " C_RESET "full)", ( fullPercent > 100 ) ? 100 : fullPercent ); } - genericsPrintf( C_RESET EOL ); + genericsPrintf( C_RESET EOL C_PREV_LN ); } } @@ -739,7 +749,7 @@ static void _purgeBlock( struct RunTime *r ) nwclientSend( h->n, h->strippedBlock->fillLevel, h->strippedBlock->buffer ); h->intervalBytes += h->strippedBlock->fillLevel; - /* The COBs encoded version goes out on the combined COBs channel, with a specific channel header */ + /* The OTAG encoded version goes out on the combined OTAG channel, with a specific channel header */ int j = h->strippedBlock->fillLevel; const uint8_t frontMatter[1] = { h->channel }; @@ -748,11 +758,11 @@ static void _purgeBlock( struct RunTime *r ) while ( j ) { COBSEncode( frontMatter, 1, - b, ( j < COBS_MAX_PACKET_LEN ) ? j : COBS_MAX_PACKET_LEN, - &r->cobsOtg ); - nwclientSend( _r.cobsHandler, r->cobsOtg.len, r->cobsOtg.d ); - b += ( j < COBS_MAX_PACKET_LEN ) ? j : COBS_MAX_PACKET_LEN; - j -= ( j < COBS_MAX_PACKET_LEN ) ? j : COBS_MAX_PACKET_LEN; + b, ( j < OTAG_MAX_PACKET_LEN ) ? j : OTAG_MAX_PACKET_LEN, + &r->otagOtg ); + nwclientSend( _r.otagHandler, r->otagOtg.len, r->otagOtg.d ); + b += ( j < OTAG_MAX_PACKET_LEN ) ? j : OTAG_MAX_PACKET_LEN; + j -= ( j < OTAG_MAX_PACKET_LEN ) ? j : OTAG_MAX_PACKET_LEN; } h->strippedBlock->fillLevel = 0; @@ -827,13 +837,13 @@ static void _TPIUpacketRxed( enum TPIUPumpEvent e, struct TPIUPacket *p, void *p } // ==================================================================================================== -static void _cobsIncoming( struct RunTime *r, const uint8_t *buffer, int length ) +static void _otagIncoming( struct RunTime *r, const uint8_t *buffer, int length ) { const uint8_t *flen; const uint8_t *b = buffer; - if ( r->cobsPart.len ) + if ( r->otagPart.len ) { /* We already have a part cobs frame...complete it using whatever we've just received */ flen = COBSgetFrameExtent( b, length ); @@ -841,31 +851,31 @@ static void _cobsIncoming( struct RunTime *r, const uint8_t *buffer, int length if ( COBSisEOFRAME( flen ) ) { /* There is an end of packet here...we can complete the send */ - if ( ( flen - b + r->cobsPart.len ) <= COBS_MAX_ENC_PACKET_LEN ) + if ( ( flen - b + r->otagPart.len ) <= OTAG_MAX_ENC_PACKET_LEN ) { - /* This is the rest of a part COBS frame, complete it and send it */ - memcpy( &r->cobsPart.d[r->cobsPart.len], b, flen - b ); - r->cobsPart.len += flen - b; + /* This is the rest of a part OTAG frame, complete it and send it */ + memcpy( &r->otagPart.d[r->otagPart.len], b, flen - b ); + r->otagPart.len += flen - b; - nwclientSend( r->cobsHandler, r->cobsPart.len, r->cobsPart.d ); - nwclientSend( r->cobsHandler, COBS_EOP_LEN, cobs_eop ); + nwclientSend( r->otagHandler, r->otagPart.len, r->otagPart.d ); + nwclientSend( r->otagHandler, OTAG_EOP_LEN, cobs_eop ); } - r->cobsPart.len = 0; + r->otagPart.len = 0; length -= flen - b; b = flen; } else { /* This is _another_ part packet ... add it to the one we are building */ - if ( ( length + r->cobsPart.len ) <= COBS_MAX_ENC_PACKET_LEN ) + if ( ( length + r->otagPart.len ) <= OTAG_MAX_ENC_PACKET_LEN ) { - memcpy( &r->cobsPart.d[r->cobsPart.len], b, length ); - r->cobsPart.len += length; + memcpy( &r->otagPart.d[r->otagPart.len], b, length ); + r->otagPart.len += length; } else { - r->cobsPart.len = 0; + r->otagPart.len = 0; } length = 0; @@ -889,18 +899,18 @@ static void _cobsIncoming( struct RunTime *r, const uint8_t *buffer, int length break; } - /* This is a complete COBS frame to send */ - nwclientSend( r->cobsHandler, flen - b, b ); + /* This is a complete OTAG frame to send */ + nwclientSend( r->otagHandler, flen - b, b ); /* We need an end of packet on the end of every packet */ - nwclientSend( r->cobsHandler, COBS_EOP_LEN, cobs_eop ); + nwclientSend( r->otagHandler, OTAG_EOP_LEN, cobs_eop ); length -= flen - b; b = flen; } /* Whatever we have left we keep for next time */ - memcpy( r->cobsPart.d, b, length ); - r->cobsPart.len = length; + memcpy( r->otagPart.d, b, length ); + r->otagPart.len = length; } // ==================================================================================================== @@ -934,25 +944,25 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer /* Do it the old fashioned way and send out the unfettered block */ nwclientSend( _r.n, fillLevel, buffer ); - /* The COBs encoded version goes out on the default COBs channel */ + /* The OTAG encoded version goes out on the default OTAG channel */ uint8_t *b = buffer; while ( fillLevel ) { COBSEncode( frontMatter, 1, b, - ( fillLevel < COBS_MAX_PACKET_LEN ) ? fillLevel : COBS_MAX_PACKET_LEN, - &r->cobsOtg ); - nwclientSend( _r.cobsHandler, r->cobsOtg.len, r->cobsOtg.d ); - b += ( fillLevel < COBS_MAX_PACKET_LEN ) ? fillLevel : COBS_MAX_PACKET_LEN; - fillLevel -= ( fillLevel < COBS_MAX_PACKET_LEN ) ? fillLevel : COBS_MAX_PACKET_LEN; + ( fillLevel < OTAG_MAX_PACKET_LEN ) ? fillLevel : OTAG_MAX_PACKET_LEN, + &r->otagOtg ); + nwclientSend( _r.otagHandler, r->otagOtg.len, r->otagOtg.d ); + b += ( fillLevel < OTAG_MAX_PACKET_LEN ) ? fillLevel : OTAG_MAX_PACKET_LEN; + fillLevel -= ( fillLevel < OTAG_MAX_PACKET_LEN ) ? fillLevel : OTAG_MAX_PACKET_LEN; } } } } // ==================================================================================================== -static void _COBSpacketRxed( struct Frame *p, void *param ) +static void _OTAGpacketRxed( struct Frame *p, void *param ) /* Put the packet into the correct output buffer */ @@ -961,7 +971,7 @@ static void _COBSpacketRxed( struct Frame *p, void *param ) struct handlers *h = _r.handler; /* Record the length we received...first byte is channel number */ - _r.cobsDataLenRxed += p->len - 1; + _r.otagDataLenRxed += p->len - 1; /* Search for channel */ for ( chIndex = 0; chIndex < _r.numHandlers; chIndex++ ) @@ -999,10 +1009,10 @@ static void _handleBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer, if ( isOTag ) { - _cobsIncoming( r, buffer, fillLevel ); + _otagIncoming( r, buffer, fillLevel ); /* We need to decode this so it can go through the 'normal' output channels too */ - COBSPump( &r->c, buffer, fillLevel, _COBSpacketRxed, r ); + COBSPump( &r->c, buffer, fillLevel, _OTAGpacketRxed, r ); r->intervalRawBytes += fillLevel; _purgeBlock( r ); } @@ -1060,7 +1070,7 @@ static void _usb_callback( struct libusb_transfer *t ) } } - _handleBlock( &_r, t->actual_length, t->buffer, OrbtraceSupportsCOBS( _r.o ) ); + _handleBlock( &_r, t->actual_length, t->buffer, OrbtraceSupportsOTAG( _r.o ) ); if ( ( t->status != LIBUSB_TRANSFER_COMPLETED ) && ( t->status != LIBUSB_TRANSFER_TIMED_OUT ) && @@ -1172,6 +1182,16 @@ static int _usbFeeder( struct RunTime *r ) break; } + if ( OrbtraceSupportsOTAG( r->o ) ) + { + genericsReport( V_INFO, "Orbtrace supports OTAG protocol" EOL ); + + if ( r->options->useTPIU ) + { + genericsReport( V_WARN, "TPIU decoding specified, but ORBTrace supports OTAG, are you sure?" EOL ); + } + } + genericsReport( V_DEBUG, "USB Interface claimed, ready for data" EOL ); /* Create the USB transfer blocks .. if we are connected depends on if there was an error submitting the requests */ @@ -1564,7 +1584,7 @@ int main( int argc, char *argv[] ) if ( x ) { /* This is a good number, so open */ - if ( ( x < 0 ) || ( x >= NUM_COBS_CHANNELS ) ) + if ( ( x < 0 ) || ( x >= NUM_OTAG_CHANNELS ) ) { genericsExit( -1, "Channel number out of range" EOL ); } @@ -1594,9 +1614,9 @@ int main( int argc, char *argv[] ) } } - /* The COBS handler doesn't need a channel list ... it works on all channels */ - _r.cobsHandler = nwclientStart( _r.options->listenPort ); - genericsReport( V_WARN, "Started Network interface for COBS on port %d" EOL, _r.options->listenPort ); + /* The OTAG handler doesn't need a channel list ... it works on all channels */ + _r.otagHandler = nwclientStart( _r.options->listenPort ); + genericsReport( V_WARN, "Started Network interface for OTAG on port %d" EOL, _r.options->listenPort ); if ( _r.options->intervalReportTime ) { From b9d5d2664bf67b7914088e68dd6bcb6a61bc07a9 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Fri, 31 May 2024 18:16:12 +0100 Subject: [PATCH 13/37] Add OTAG format file save/playback and simplify threading arrangements --- Inc/cobs.h | 7 +- Inc/otag.h | 68 ++++++++++++++ Src/cobs.c | 2 - Src/orbuculum.c | 186 ++++++++++++++----------------------- Src/otag.c | 125 +++++++++++++++++++++++++ Tests/test_cobs.c | 229 ++++++++++++++++++++++++++++++++++++++++++++++ meson.build | 1 + 7 files changed, 498 insertions(+), 120 deletions(-) create mode 100644 Inc/otag.h create mode 100644 Src/otag.c create mode 100644 Tests/test_cobs.c diff --git a/Inc/cobs.h b/Inc/cobs.h index bbe5c4d3..2277843f 100644 --- a/Inc/cobs.h +++ b/Inc/cobs.h @@ -17,10 +17,11 @@ extern "C" { #endif -#define COBS_FRONTMATTER (10) -#define COBS_MAX_PACKET_LEN (4096) +#define COBS_FRONTMATTER (10) +#define COBS_MAX_PACKET_LEN (4096) +#define COBS_SYNC_CHAR (0) #define COBS_OVERALL_MAX_PACKET_LEN (COBS_MAX_PACKET_LEN+COBS_FRONTMATTER) -#define COBS_MAX_ENC_PACKET_LEN (COBS_OVERALL_MAX_PACKET_LEN + COBS_OVERALL_MAX_PACKET_LEN / 254) +#define COBS_MAX_ENC_PACKET_LEN (COBS_OVERALL_MAX_PACKET_LEN + COBS_OVERALL_MAX_PACKET_LEN / 254) enum COBSPumpState { diff --git a/Inc/otag.h b/Inc/otag.h new file mode 100644 index 00000000..10aa93e7 --- /dev/null +++ b/Inc/otag.h @@ -0,0 +1,68 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +/* + * OTAG Module + * =========== + * + */ + +#ifndef _OTAG_ +#define _OTAG_ + +#include +#include +#include +#include "cobs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct OTAGFrame +{ + unsigned int len; /* Received length (after pre-processing) */ + uint8_t tag; /* Tag (packet type) */ + uint64_t tstamp; /* Timestamp for the packet */ + uint8_t *d; /* ...pointer to the data itself */ +}; + +struct OTAG +{ + bool selfAllocated; /* Flag indicating that memory was allocated by the library */ + struct COBS c; + struct OTAGFrame f; + + /* Materials for callback */ + void ( *cb )( struct OTAGFrame *p, void *param ); + void *param; +}; + +#define OTAG_MAX_PACKET_LEN (COBS_MAX_PACKET_LEN) +#define OTAG_MAX_ENC_PACKET_LEN (COBS_MAX_ENC_PACKET_LEN) +#define OTAG_EOP_LEN (COBS_EOP_LEN) +#define OTAG_TS_RESOLUTION (1000000000L) + +// ==================================================================================================== + +static inline uint64_t OTAGResolution( struct OTAG *t ) +{ + return OTAG_TS_RESOLUTION; +} + +const uint8_t *OTAGgetFrameExtent( const uint8_t *inputEnc, int len ); +bool OTAGisEOFRAME( const uint8_t *inputEnc ); + +void OTAGEncode( const uint8_t channel, const uint64_t tstamp, const uint8_t *inputMsg, int len, struct Frame *o ); + +/* Context free functions */ +void OTAGPump( struct OTAG *t, uint8_t *incoming, int len, + void ( *packetRxed )( struct OTAGFrame *p, void *param ), + void *param ); + +void OTAGDelete( struct OTAG *t ); +struct OTAG *OTAGInit( struct OTAG *t ); +// ==================================================================================================== +#ifdef __cplusplus +} +#endif +#endif diff --git a/Src/cobs.c b/Src/cobs.c index 478686c9..110f0f8c 100644 --- a/Src/cobs.c +++ b/Src/cobs.c @@ -15,8 +15,6 @@ #include #include "cobs.h" -#define COBS_SYNC_CHAR (0) - const uint8_t cobs_eop[COBS_EOP_LEN] = { COBS_SYNC_CHAR }; // ==================================================================================================== diff --git a/Src/orbuculum.c b/Src/orbuculum.c index 182979a8..96bdf942 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -53,21 +53,21 @@ #include "git_version_info.h" #include "generics.h" #include "tpiuDecoder.h" -#include "cobs.h" +#include "otag.h" #include "nwclient.h" #include "orbtraceIf.h" #include "stream.h" -/* How many transfer buffers from the source to allocate */ -#define NUM_RAW_BLOCKS (32) - #define MAX_LINE_LEN (1024) #define ORBTRACE "orbtrace" #define ORBTRACEENVNAME "ORBTRACE" -#define OTAG_MAX_PACKET_LEN (COBS_MAX_PACKET_LEN) -#define OTAG_MAX_ENC_PACKET_LEN (COBS_MAX_ENC_PACKET_LEN) -#define OTAG_EOP_LEN (COBS_EOP_LEN) +/* Multiple blocks are used for USB, otherwise just the one */ +#define NUM_RAW_BLOCKS (32) + +/* File header for OTAG formatted file */ +#define OTAG_SIG (const char*)"%%OTAG1.0.0%%" +#define OTAG_SIG_LEN (strlen(OTAG_SIG)) /* Record for options, either defaults or from command line */ struct Options @@ -107,7 +107,7 @@ struct handlers struct RunTime { struct TPIUDecoder t; /* TPIU decoder instance, in case we need it */ - struct COBS c; /* COBS instance for OTAG, in case we need it */ + struct OTAG otag; /* OTAG instance, in case we need it */ struct Frame otagPart; /* OTAG part frame for maintaining continuity across packets */ struct Frame otagOtg; /* Outgoing OTAG frame for legacy use */ @@ -115,13 +115,9 @@ struct RunTime uint64_t intervalBytes; /* Number of bytes transferred in current interval */ uint64_t intervalRawBytes; /* Number of bytes transferred in current interval */ - uint64_t otagDataLenRxed; /* Number of bytes of decoded OTAG data */ + uint64_t otagDataLenRxed; /* Number of bytes of decoded OTAG data */ pthread_t intervalThread; /* Thread reporting on intervals */ - pthread_t processThread; /* Thread for processing prior to distributing to clients */ - pthread_t usbThread; /* Thread for usb thread (this sometimes dies, so needs restarting) */ - pthread_cond_t dataForClients; /* Semaphore counting data for clients */ - pthread_mutex_t dataForClients_m; /* Mutex for counting data for clients */ bool ending; /* Flag indicating app is terminating */ bool errored; /* Flag indicating problem in reception process */ bool conn; /* Flag indicating that we have a good connection */ @@ -131,11 +127,10 @@ struct RunTime int opFileHandle; /* Handle if we're writing orb output locally */ struct Options *options; /* Command line options (reference to above) */ - int wp; /* Read and write pointers into transfer buffers */ - int rp; struct dataBlock rawBlock[NUM_RAW_BLOCKS]; /* Transfer buffers from the receiver */ struct nwclientsHandle *otagHandler; /* Handle to OTAG output handler */ + bool usingOTAG; /* Flag that OTAG protocol is in use */ int numHandlers; /* Number of TPIU channel handlers in use */ struct handlers *handler; @@ -709,7 +704,7 @@ void *_checkInterval( void *params ) else { /* Either raw ITM or OTag frames */ - if ( OrbtraceSupportsOTAG( _r.o ) ) + if ( _r.usingOTAG ) { int w = 1000 - ( ( r->otagDataLenRxed * 1000 ) / r->intervalRawBytes ); genericsPrintf( " Waste:%01d.%01d%%", w / 10, w % 10 ); @@ -751,15 +746,11 @@ static void _purgeBlock( struct RunTime *r ) /* The OTAG encoded version goes out on the combined OTAG channel, with a specific channel header */ int j = h->strippedBlock->fillLevel; - - const uint8_t frontMatter[1] = { h->channel }; const uint8_t *b = h->strippedBlock->buffer; while ( j ) { - COBSEncode( frontMatter, 1, - b, ( j < OTAG_MAX_PACKET_LEN ) ? j : OTAG_MAX_PACKET_LEN, - &r->otagOtg ); + OTAGEncode( h->channel, 0, b, ( j < OTAG_MAX_PACKET_LEN ) ? j : OTAG_MAX_PACKET_LEN, &r->otagOtg ); nwclientSend( _r.otagHandler, r->otagOtg.len, r->otagOtg.d ); b += ( j < OTAG_MAX_PACKET_LEN ) ? j : OTAG_MAX_PACKET_LEN; j -= ( j < OTAG_MAX_PACKET_LEN ) ? j : OTAG_MAX_PACKET_LEN; @@ -846,9 +837,9 @@ static void _otagIncoming( struct RunTime *r, const uint8_t *buffer, int length if ( r->otagPart.len ) { /* We already have a part cobs frame...complete it using whatever we've just received */ - flen = COBSgetFrameExtent( b, length ); + flen = OTAGgetFrameExtent( b, length ); - if ( COBSisEOFRAME( flen ) ) + if ( OTAGisEOFRAME( flen ) ) { /* There is an end of packet here...we can complete the send */ if ( ( flen - b + r->otagPart.len ) <= OTAG_MAX_ENC_PACKET_LEN ) @@ -886,15 +877,15 @@ static void _otagIncoming( struct RunTime *r, const uint8_t *buffer, int length while ( true ) { /* Flush any extra EOPs that may have existed in the original frame */ - while ( length && COBSisEOFRAME( b ) ) + while ( length && OTAGisEOFRAME( b ) ) { b++; length--; } - flen = COBSgetFrameExtent( b, length ); + flen = OTAGgetFrameExtent( b, length ); - if ( !( length && COBSisEOFRAME( flen ) ) ) + if ( !( length && OTAGisEOFRAME( flen ) ) ) { break; } @@ -917,7 +908,6 @@ static void _otagIncoming( struct RunTime *r, const uint8_t *buffer, int length static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer ) { - static const uint8_t frontMatter[1] = { DEFAULT_ITM_STREAM }; genericsReport( V_DEBUG, "RXED Packet of %d bytes%s" EOL, fillLevel, ( r->options->intervalReportTime ) ? EOL : "" ); if ( fillLevel ) @@ -949,8 +939,7 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer while ( fillLevel ) { - COBSEncode( frontMatter, 1, - b, + OTAGEncode( DEFAULT_ITM_STREAM, 0, b, ( fillLevel < OTAG_MAX_PACKET_LEN ) ? fillLevel : OTAG_MAX_PACKET_LEN, &r->otagOtg ); nwclientSend( _r.otagHandler, r->otagOtg.len, r->otagOtg.d ); @@ -962,7 +951,7 @@ static void _processBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer } // ==================================================================================================== -static void _OTAGpacketRxed( struct Frame *p, void *param ) +static void _OTAGpacketRxed( struct OTAGFrame *p, void *param ) /* Put the packet into the correct output buffer */ @@ -970,13 +959,13 @@ static void _OTAGpacketRxed( struct Frame *p, void *param ) int chIndex; struct handlers *h = _r.handler; - /* Record the length we received...first byte is channel number */ - _r.otagDataLenRxed += p->len - 1; + /* Record the length we received */ + _r.otagDataLenRxed += p->len; /* Search for channel */ for ( chIndex = 0; chIndex < _r.numHandlers; chIndex++ ) { - if ( h->channel == p->d[0] ) + if ( h->channel == p->tag ) { break; } @@ -987,7 +976,7 @@ static void _OTAGpacketRxed( struct Frame *p, void *param ) if ( ( chIndex != _r.numHandlers ) && ( h ) ) { /* We must have found a match for this at some point, so add it to the queue */ - for ( int i = 1; i < p->len; i++ ) + for ( int i = 0; i < p->len; i++ ) { h->strippedBlock->buffer[h->strippedBlock->fillLevel++] = p->d[i]; @@ -1001,18 +990,18 @@ static void _OTAGpacketRxed( struct Frame *p, void *param ) } } // ==================================================================================================== -static void _handleBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer, bool isOTag ) +static void _handleBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer ) /* Handle an incoming block in either 'conventional' or OTag format */ { - if ( isOTag ) + if ( r->usingOTAG ) { _otagIncoming( r, buffer, fillLevel ); /* We need to decode this so it can go through the 'normal' output channels too */ - COBSPump( &r->c, buffer, fillLevel, _OTAGpacketRxed, r ); + OTAGPump( &r->otag, buffer, fillLevel, _OTAGpacketRxed, r ); r->intervalRawBytes += fillLevel; _purgeBlock( r ); } @@ -1024,35 +1013,6 @@ static void _handleBlock( struct RunTime *r, ssize_t fillLevel, uint8_t *buffer, r->intervalRawBytes += fillLevel; } // ==================================================================================================== -static void *_processBlocksQueue( void *params ) - -/* Generic block processor task for received data */ - -{ - struct RunTime *r = ( struct RunTime * )params; - - while ( !r->ending ) - { - pthread_cond_wait( &r->dataForClients, &r->dataForClients_m ); - - if ( r->rp != r->wp ) - { - _processBlock( r, r->rawBlock[r->rp].fillLevel, r->rawBlock[r->rp].buffer ); - r->rp = ( r->rp + 1 ) % NUM_RAW_BLOCKS; - } - } - - return NULL; -} - -// ==================================================================================================== -static void _dataAvailable( struct RunTime *r ) - -{ - pthread_cond_signal( &r->dataForClients ); -} -// ==================================================================================================== - static void _usb_callback( struct libusb_transfer *t ) @@ -1070,7 +1030,7 @@ static void _usb_callback( struct libusb_transfer *t ) } } - _handleBlock( &_r, t->actual_length, t->buffer, OrbtraceSupportsOTAG( _r.o ) ); + _handleBlock( &_r, t->actual_length, t->buffer ); if ( ( t->status != LIBUSB_TRANSFER_COMPLETED ) && ( t->status != LIBUSB_TRANSFER_TIMED_OUT ) && @@ -1134,6 +1094,7 @@ void _actionOrbtraceCommand( struct RunTime *r, char *sn, enum ORBTraceDevice d static int _usbFeeder( struct RunTime *r ) { + bool firstRunThrough = true; int workingDev; /* Copy any part serial number across */ @@ -1182,7 +1143,9 @@ static int _usbFeeder( struct RunTime *r ) break; } - if ( OrbtraceSupportsOTAG( r->o ) ) + r->usingOTAG = OrbtraceSupportsOTAG( r->o ); + + if ( r->usingOTAG ) { genericsReport( V_INFO, "Orbtrace supports OTAG protocol" EOL ); @@ -1190,6 +1153,17 @@ static int _usbFeeder( struct RunTime *r ) { genericsReport( V_WARN, "TPIU decoding specified, but ORBTrace supports OTAG, are you sure?" EOL ); } + + if ( firstRunThrough && _r.opFileHandle ) + { + if ( write( _r.opFileHandle, OTAG_SIG, OTAG_SIG_LEN ) < 0 ) + { + genericsExit( -4, "Could not write OTAG signature to file (%s)" EOL, strerror( errno ) ); + } + } + + /* We only attempt to write the file header on the first run through */ + firstRunThrough = false; } genericsReport( V_DEBUG, "USB Interface claimed, ready for data" EOL ); @@ -1227,7 +1201,10 @@ static int _usbFeeder( struct RunTime *r ) } // ==================================================================================================== static int _nwserverFeeder( struct RunTime *r ) + { + struct dataBlock *rxBlock = &r->rawBlock[0]; + while ( true ) { struct Stream *stream = streamCreateSocket( r->options->nwserverHost, r->options->nwserverPort ); @@ -1243,21 +1220,16 @@ static int _nwserverFeeder( struct RunTime *r ) while ( !r->ending ) { - struct dataBlock *rxBlock = &r->rawBlock[r->wp]; - - size_t receivedSize; - enum ReceiveResult result = stream->receive( stream, rxBlock->buffer, USB_TRANSFER_SIZE, NULL, &receivedSize ); + size_t fl; + enum ReceiveResult result = stream->receive( stream, rxBlock->buffer, USB_TRANSFER_SIZE, NULL, &fl ); + rxBlock->fillLevel = fl; if ( result != RECEIVE_RESULT_OK ) { break; } - rxBlock->fillLevel = receivedSize; - r->wp = ( r->wp + 1 ) % NUM_RAW_BLOCKS; - - - _dataAvailable( r ); + _handleBlock( r, rxBlock->fillLevel, rxBlock->buffer ); } if ( !r->ending ) @@ -1325,7 +1297,7 @@ static int _serialFeeder( struct RunTime *r ) continue; } - struct dataBlock *rxBlock = &r->rawBlock[r->wp]; + struct dataBlock *rxBlock = &r->rawBlock[0]; DWORD transferSize = stats.cbInQue; @@ -1334,18 +1306,14 @@ static int _serialFeeder( struct RunTime *r ) transferSize = USB_TRANSFER_SIZE; } - DWORD readBytes = 0; - ReadFile( portHandle, rxBlock->buffer, transferSize, &readBytes, NULL ); - - rxBlock->fillLevel = readBytes; + ReadFile( portHandle, rxBlock->buffer, transferSize, &rxBlock->fillLevel, NULL ); if ( rxBlock->fillLevel <= 0 ) { break; } - r->wp = ( r->wp + 1 ) % NUM_RAW_BLOCKS; - _dataAvailable( r ); + _handleBlock( r, rxBlock->fillLevel, rxBlock->buffer ); } r->conn = false; @@ -1369,6 +1337,7 @@ static int _serialFeeder( struct RunTime *r ) static int _serialFeeder( struct RunTime *r ) { int ret; + struct dataBlock *rxBlock = &r->rawBlock[0]; while ( !r->ending ) { @@ -1412,15 +1381,12 @@ static int _serialFeeder( struct RunTime *r ) while ( !r->ending ) { - struct dataBlock *rxBlock = &r->rawBlock[r->wp]; - if ( ( rxBlock->fillLevel = read( r->f, rxBlock->buffer, USB_TRANSFER_SIZE ) ) <= 0 ) { break; } - r->wp = ( r->wp + 1 ) % NUM_RAW_BLOCKS; - _dataAvailable( r ); + _handleBlock( r, rxBlock->fillLevel, rxBlock->buffer ); } r->conn = false; @@ -1441,6 +1407,9 @@ static int _serialFeeder( struct RunTime *r ) static int _fileFeeder( struct RunTime *r ) { + struct dataBlock *rxBlock = &r->rawBlock[0]; + + if ( ( r->f = open( r->options->file, O_RDONLY ) ) < 0 ) { genericsExit( -4, "Can't open file %s" EOL, r->options->file ); @@ -1448,11 +1417,19 @@ static int _fileFeeder( struct RunTime *r ) r->conn = true; - while ( !r->ending ) + /* Start off by checking if this is OTAG formatted */ + rxBlock->fillLevel = read( r->f, rxBlock->buffer, OTAG_SIG_LEN ); + r->usingOTAG = ( ( OTAG_SIG_LEN == rxBlock->fillLevel ) && ( !strncmp( OTAG_SIG, ( char * )rxBlock->buffer, OTAG_SIG_LEN ) ) ); + genericsReport( V_INFO, "File is %sin OTAG format" EOL, ( r->usingOTAG ) ? "" : "not " ); + + if ( r->usingOTAG ) { - struct dataBlock *rxBlock = &r->rawBlock[r->wp]; + /* This is OTAG, so we need to read the first data after the header */ rxBlock->fillLevel = read( r->f, rxBlock->buffer, USB_TRANSFER_SIZE ); + } + while ( !r->ending ) + { if ( !rxBlock->fillLevel ) { if ( r->options->fileTerminate ) @@ -1467,22 +1444,14 @@ static int _fileFeeder( struct RunTime *r ) } } - int nwp = ( r->wp + 1 ) % NUM_RAW_BLOCKS; - - /* Spin waiting for buffer space to become available */ - while ( nwp == r->rp ) - { - usleep( INTERVAL_1MS ); - } - - r->wp = nwp; - - _dataAvailable( r ); + _handleBlock( r, rxBlock->fillLevel, rxBlock->buffer ); if ( r->options->paceDelay ) { usleep( r->options->paceDelay ); } + + rxBlock->fillLevel = read( r->f, rxBlock->buffer, USB_TRANSFER_SIZE ); } r->conn = false; @@ -1514,16 +1483,6 @@ int main( int argc, char *argv[] ) WSAStartup( MAKEWORD( 2, 2 ), &wsaData ); #endif - if ( pthread_mutex_init( &_r.dataForClients_m, NULL ) != 0 ) - { - genericsExit( -1, "Failed to establish mutex for condition variablee" EOL ); - } - - if ( pthread_cond_init( &_r.dataForClients, NULL ) != 0 ) - { - genericsExit( -1, "Failed to establish condition variablee" EOL ); - } - if ( !_processOptions( argc, argv, &_r ) ) { /* processOptions generates its own error messages */ @@ -1535,7 +1494,7 @@ int main( int argc, char *argv[] ) TPIUDecoderInit( &_r.t ); } - COBSInit( &_r.c ); + OTAGInit( &_r.otag ); genericsScreenHandling( !_r.options->mono ); @@ -1636,9 +1595,6 @@ int main( int argc, char *argv[] ) if ( ( _r.options->nwserverPort ) || ( _r.options->port ) || ( _r.options->file ) ) { - /* Start the distribution task */ - pthread_create( &_r.processThread, NULL, &_processBlocksQueue, &_r ); - if ( _r.options->nwserverPort ) { exit( _nwserverFeeder( &_r ) ); diff --git a/Src/otag.c b/Src/otag.c new file mode 100644 index 00000000..1dec4439 --- /dev/null +++ b/Src/otag.c @@ -0,0 +1,125 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +/* + * OTAG Encoder/Decoder Module + * =========================== + * + * + */ + +#include +#include +#include +#include +#include "cobs.h" +#include "otag.h" + +// ==================================================================================================== +struct OTAG *OTAGInit( struct OTAG *t ) + +/* Reset a OTAG instance */ + +{ + if ( !t ) + { + t = ( struct OTAG * )calloc( 1, sizeof( struct OTAG ) ); + t->selfAllocated = true; + } + + /* Initialise the containing COBS instance */ + COBSInit( &t->c ); + + return t; +} +// ==================================================================================================== +void OTAGDelete( struct OTAG *t ) + +/* Destroy a OTAG instance, but only if we created it */ + +{ + /* Need to remove the containing COBS instance */ + COBSDelete( &t->c ); + + if ( t->selfAllocated ) + { + free( t ); + t = NULL; + } +} + +// ==================================================================================================== + +void OTAGEncode( const uint8_t channel, const uint64_t tstamp, const uint8_t *inputMsg, int len, struct Frame *o ) + +/* Encode frame and write into provided output Frame buffer */ + +{ + const uint8_t frontMatter[1] = { channel }; + COBSEncode( frontMatter, 1, inputMsg, len, o ); +} + +// ==================================================================================================== + +bool OTAGisEOFRAME( const uint8_t *inputEnc ) + +{ + return ( COBS_SYNC_CHAR == *inputEnc ); +} + +// ==================================================================================================== +static void _pumpcb( struct Frame *p, void *param ) + +{ + /* Callback function when a COBS packet is complete */ + struct timespec ts; + struct OTAG *t = ( struct OTAG * )param; + + t->f.len = p->len - 1; /* OTAG frames have the first element representing the tag */ + clock_gettime(CLOCK_REALTIME,&ts); + t->f.tstamp = ts.tv_sec * OTAG_TS_RESOLUTION + ts.tv_nsec; /* For now, fake the timestamp */ + t->f.d = &p->d[1]; + + ( t->cb )( &t->f, t->param ); +} + +void OTAGPump( struct OTAG *t, uint8_t *incoming, int len, + void ( *packetRxed )( struct OTAGFrame *p, void *param ), + void *param ) + + +/* Assemble this packet into a complete frame and call back */ + +{ + t->cb = packetRxed; + t->param = param; + COBSPump( &t->c, incoming, len, _pumpcb, t ); +} + +// ==================================================================================================== + +bool OTAGSimpleDecode( const uint8_t *inputEnc, int len, struct Frame *o ) + +/* Decode frame and write decoded frame into provided Frame buffer */ +/* Returns FALSE if packet did not decode...and store the fragment. */ + +{ + return COBSSimpleDecode( inputEnc, len, o ); +} + +// ==================================================================================================== + +const uint8_t *OTAGgetFrameExtent( const uint8_t *inputEnc, int len ) + +/* Look through memory until an end of frame marker is found, or memory is exhausted. */ + +{ + /* Go find the next sync */ + while ( !OTAGisEOFRAME( inputEnc ) && --len ) + { + inputEnc++; + } + + return inputEnc; +} + +// ==================================================================================================== diff --git a/Tests/test_cobs.c b/Tests/test_cobs.c new file mode 100644 index 00000000..2d439e45 --- /dev/null +++ b/Tests/test_cobs.c @@ -0,0 +1,229 @@ +// ==================================================================================================== +// ==================================================================================================== +// ==================================================================================================== +// Test Cases +// ==================================================================================================== +// ==================================================================================================== +// ==================================================================================================== + +/* Build tests with; + * gcc Src/cobs.c Tests/test_cobs.c -IInc -ggdb + * Execute with; + * ./a.out + */ + +#include +#include + +#include "cobs.h" + +// ==================================================================================================== + +static void _printDigits( int length, uint8_t *d ) +{ + while ( length-- ) + { + fprintf( stderr, "%02x ", *d++ ); + } +} + + +struct test +{ + struct Frame dec; + struct Frame enc; +}; + +/* These tests are from https://en.wikipedia.org/wiki/Consistent_Overhead_Byte_Stuffing#Encoding_examples */ +struct test testSet[] = +{ + /* 1 */ { { 1, "\x00" }, { 3, "\x01\x01\x00" } }, + /* 2 */ { { 2, "\x00\x00" }, { 4, "\x01\x01\x01\x00" } }, + /* 3 */ { { 3, "\x00\x11\x00" }, { 5, "\x01\x02\x11\x01\x00" } }, + /* 4 */ { { 4, "\x11\x22\x00\x33"}, { 6, "\x03\x11\x22\x02\x33\x00" } }, + /* 5 */ { { 4, "\x11\x22\x33\x44"}, { 6, "\x05\x11\x22\x33\x44\x00" } }, + /* 6 */ { { 4, "\x11\x00\x00\x00"}, { 6, "\x02\x11\x01\x01\x01\x00" } }, + /* 7 */ { { 254, "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe"}, {256, "\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00" }}, + /* 8 */ {{ 255, "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe"}, {257, "\x01\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00" }}, + /* 9 */ { {255, "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"}, {258, "\xff\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x02\xff\x00"} }, + /* 10 */ { {255, "\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00"}, {258, "\xff\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x01\x01\x00" }}, + /* 11 */ { {255, "\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00\x01"}, {257, "\xfe\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x02\x01\x00" }}, +}; + +// ==================================================================================================== + +void _packetRxed ( struct Frame *p, void *param ) + +{ + struct test *t = ( struct test * )param; + int k; + + for ( k = 0; ( ( k < p->len ) && ( p->d[k] == t->dec.d[k] ) ); k++ ) {} + + if ( k != p->len ) + { + fprintf( stderr, "*********FAILED\nWanted:" ); + _printDigits( t->dec.len, t->dec.d ); + fprintf( stderr, "\nRecevd:" ); + _printDigits( p->len, p->d ); + fprintf( stderr, "\n" ); + } + else + { + fprintf( stderr, "OK\n" ); + } +} +// ==================================================================================================== + +/* These need to be global to support the callback */ + +#define TEST_PACKET_LEN (COBS_MAX_PACKET_LEN-5) + +uint8_t ipPacket[TEST_PACKET_LEN]; + +void _packetRxed2( struct Frame *p, void *param ) +{ + if ( p->len != TEST_PACKET_LEN ) + { + fprintf( stderr, "(%s) Received frame length doesn't match %d vs rxed %d\n", param, TEST_PACKET_LEN, p->len ); + } + + for ( int i = 0; i < TEST_PACKET_LEN; i++ ) + { + if ( ipPacket[i] != p->d[i] ) + { + fprintf( stderr, "\n(%s) First inconsistency at displacement %d\n", param, i ); + break; + } + } +} + +///// + +int main( int argc, void **argv ) + +{ + struct COBS *d = COBSInit( NULL ); + struct Frame o; + int i, j, k; + + int oplen; + + if ( d ) + { + fprintf( stderr, "COBS initialised to %llx\n", ( long long int )d ); + } + else + { + fprintf( stderr, "*** ERR: COBS not created\n" ); + } + + fprintf( stderr, "Testing simple decode;\n" ); + + for ( i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) + { + fprintf( stderr, "%d: ", i + 1 ); + + /* The +1 here is because we have a COBS_SYNC_CHAR on the end of each frame */ + if ( testSet[i].enc.len != COBSgetFrameExtent( testSet[i].enc.d, testSet[i].enc.len ) - testSet[i].enc.d + 1 ) + { + fprintf( stderr, "Failed, packet length doesn't match (%d vs wanted %d\n", COBSgetFrameExtent( testSet[i].enc.d, testSet[i].enc.len ) - o.d, testSet[i].enc.len ); + continue; + } + + if ( !COBSSimpleDecode( testSet[i].enc.d, testSet[i].enc.len, &o ) ) + { + fprintf( stderr, "Failed, Packet did not decode\n" ); + continue; + } + + for ( k = 0; ( ( k < o.len ) && ( o.d[k] == testSet[i].dec.d[k] ) ); k++ ) {} + + if ( k != o.len ) + { + fprintf( stderr, "*********FAILED\nWanted:" ); + _printDigits( testSet[i].dec.len, testSet[i].dec.d ); + fprintf( stderr, "\nRecevd:" ); + _printDigits( o.len, o.d ); + fprintf( stderr, "\n" ); + continue; + } + + fprintf( stderr, "OK %d\n", o.len ); + } + + + + fprintf( stderr, "Testing pumped decode;\n" ); + + for ( i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) + { + fprintf( stderr, "%d: ", i + 1 ); + COBSPump( d, testSet[i].enc.d, testSet[i].enc.len, _packetRxed, &testSet[i] ); + } + + fprintf( stderr, "\nTesting encode;\n" ); + + for ( int i = 0; i < sizeof( testSet ) / sizeof( struct test ); i++ ) + { + fprintf( stderr, "%d: ", i + 1 ); + COBSEncode( NULL, 0, testSet[i].dec.d, testSet[i].dec.len, &o ); + + if ( o.len != COBSgetFrameExtent( o.d, o.len ) - o.d + 1 ) + { + fprintf( stderr, "Static framelen assessment failed %d vs expected %d\n", o.len, COBSgetFrameExtent( o.d, o.len ) - o.d + 1 ); + continue; + } + + if ( o.len != testSet[i].enc.len ) + { + fprintf( stderr, "Length mismatch correct=%d vs actual=%d\n", testSet[i].enc.len, o.len ); + + for ( int j = 0; j < o.len; j++ ) + { + if ( o.d[j] != testSet[i].enc.d[j] ) + { + fprintf( stderr, "*********FAILED\nWanted:" ); + _printDigits( testSet[i].enc.len, testSet[i].enc.d ); + fprintf( stderr, "\nRecevd:" ); + _printDigits( o.len, o.d ); + fprintf( stderr, "\n" ); + break; + } + } + + } + else + { + fprintf( stderr, "OK\n" ); + } + } + + fprintf( stderr, "Testing multiple full packets...\n" ); + uint8_t opPacket[TEST_PACKET_LEN]; + struct Frame opFrame; + + for ( int iteration = 0; iteration < 10000; iteration++ ) + { + /* Build a random packet */ + for ( int i = 0; i < TEST_PACKET_LEN; i++ ) + { + ipPacket[i] = random() % 256; + } + + COBSEncode( NULL, 0, ipPacket, TEST_PACKET_LEN, &opFrame ); + + if ( COBSSimpleDecode( opFrame.d, opFrame.len, &d->f ) ) + { + _packetRxed2( &d->f, "COBSSimpleDecode" ); + } + else + { + fprintf( stderr, "Bad packet\n" ); + } + + // COBSPump( d, ipPacket, COBS_MAX_PACKET_LEN, _packetRxed2, "COBSPump" ); + } +} + +// ==================================================================================================== diff --git a/meson.build b/meson.build index 7bde989a..00936359 100644 --- a/meson.build +++ b/meson.build @@ -58,6 +58,7 @@ liborb = library('orb', 'Src/tpiuDecoder.c', 'Src/msgDecoder.c', 'Src/cobs.c', + 'Src/otag.c', 'Src/msgSeq.c', 'Src/traceDecoder.c', 'Src/generics.c', From da93b33ca2d33b3c9c05cfc1c392f9cdea7e9717 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Sun, 9 Jun 2024 18:06:52 +0100 Subject: [PATCH 14/37] Improve handling of slow arriving usb packets to ensure orbtop accuracy --- Src/orbtop.c | 11 ++++++----- Src/orbtraceIf.c | 16 +++++++++++----- Src/orbuculum.c | 21 ++++++++++++++++++--- Src/otag.c | 2 +- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/Src/orbtop.c b/Src/orbtop.c index 2ac65654..d3a71886 100644 --- a/Src/orbtop.c +++ b/Src/orbtop.c @@ -745,10 +745,10 @@ static void _outputTop( uint32_t total, uint32_t reportLines, struct reportLine if ( ( _r.lastReportTicks ) && ( lastTime != _r.lastReportus ) ) genericsPrintf( "Interval = " C_DATA "%" PRIu64 "ms " C_RESET "/ "C_DATA "%" PRIu64 C_RESET " (~" C_DATA "%" PRIu64 C_RESET " Ticks/ms)" EOL, - ( ( lastTime - _r.lastReportus ) + 500 ) / 1000, _r.timeStamp - _r.lastReportTicks, ( ( _r.timeStamp - _r.lastReportTicks ) * 1000 ) / ( lastTime - _r.lastReportus ) ); + ( ( lastTime - _r.lastReportus ) ) / 1000, _r.timeStamp - _r.lastReportTicks, ( ( _r.timeStamp - _r.lastReportTicks ) * 1000 ) / ( lastTime - _r.lastReportus ) ); else { - genericsPrintf( C_RESET "Interval = " C_DATA "%" PRIu64 C_RESET "ms" EOL, ( ( lastTime - _r.lastReportus ) + 500 ) / 1000 ); + genericsPrintf( C_RESET "Interval = " C_DATA "%" PRIu64 C_RESET "ms" EOL, ( ( lastTime - _r.lastReportus ) ) / 1000 ); } genericsReport( V_INFO, " Ovf=%3d ITMSync=%3d TPIUSync=%3d ITMErrors=%3d" EOL, @@ -1382,12 +1382,11 @@ int main( int argc, char *argv[] ) /* ...just in case we have any readings from a previous incantation */ _flushHash( ); - _r.lastReportus = _timestamp(); + thisTime = _r.lastReportus = _timestamp(); while ( 1 ) { - thisTime = _timestamp(); - remainTime = ( ( _r.lastReportus + options.displayInterval - thisTime ) ) + 500; + remainTime = ( ( _r.lastReportus + options.displayInterval - thisTime ) ); if ( remainTime > 0 ) { @@ -1401,6 +1400,8 @@ int main( int argc, char *argv[] ) receivedSize = 0; } + thisTime = _timestamp(); + if ( receiveResult == RECEIVE_RESULT_ERROR ) { /* Something went wrong in the receive */ diff --git a/Src/orbtraceIf.c b/Src/orbtraceIf.c index e48b073b..0ef8de34 100644 --- a/Src/orbtraceIf.c +++ b/Src/orbtraceIf.c @@ -30,6 +30,7 @@ static const struct OrbtraceInterfaceType _validDevices[DEVICE_NUM_DEVICES] = #define BMP_EP (0x85) #define SCRATCH_STRINGLEN (255) +#define MAX_DESC_FIELDLEN (50) #define MIN_GENERIC_VOLTAGE_MV (900) #define MAX_GENERIC_VOLTAGE_MV (5000) @@ -128,6 +129,11 @@ static int _compareFunc( const void *vd1, const void *vd2 ) const struct OrbtraceIfDevice *d2 = ( const struct OrbtraceIfDevice * )vd2; int r = 0; + if ( d1->devtype != d2->devtype ) + { + return ( d1->devtype - d2->devtype ); + } + if ( ( r = _strcmpint( d1->manufacturer, d2->manufacturer ) ) ) { return r; @@ -395,13 +401,13 @@ void OrbtraceIfListDevices( struct OrbtraceIf *o ) char printConstruct[SCRATCH_STRINGLEN]; /* Get longest line */ - genericsPrintf( C_RESET " Id | Description | Serial | Version" EOL ); - genericsPrintf( " ---+------------------------------------------+------------------+----------------------------" EOL ); + genericsPrintf( C_RESET " Id | Description | Serial | Version" EOL ); + genericsPrintf( " ---+---------------------------------------------------+------------------+----------------------------" EOL ); for ( int i = 0; i < o->numDevices; i++ ) { - snprintf( printConstruct, SCRATCH_STRINGLEN, "%s %s", OrbtraceIfGetManufacturer( o, i ), OrbtraceIfGetProduct( o, i ) ) ; - genericsPrintf( C_SEL " %2d " C_RESET "|"C_ELEMENT" %-40s "C_RESET"|"C_ELEMENT" %16s "C_RESET"|"C_ELEMENT" %s" C_RESET EOL, + snprintf( printConstruct, MAX_DESC_FIELDLEN, "%s %s", OrbtraceIfGetManufacturer( o, i ), OrbtraceIfGetProduct( o, i ) ) ; + genericsPrintf( C_SEL " %2d " C_RESET "|"C_ELEMENT" %-49s "C_RESET"|"C_ELEMENT" %16s "C_RESET"|"C_ELEMENT" %s" C_RESET EOL, i + 1, printConstruct, OrbtraceIfGetSN( o, i ), OrbtraceIfGetVersion( o, i ) ); } } @@ -577,7 +583,7 @@ bool OrbtraceIfSetupTransfers( struct OrbtraceIf *o, bool hiresTime, struct data USB_TRANSFER_SIZE, callback, &o->d[t].usbtfr, - hiresTime ? 1 : 0 /* Use timeout if hires mode */ + hiresTime ? 1 : 100 /* Use 1ms timeout if hires mode, otherwise 100ms */ ); if ( libusb_submit_transfer( o->d[t].usbtfr ) ) diff --git a/Src/orbuculum.c b/Src/orbuculum.c index 96bdf942..dbf54ef7 100644 --- a/Src/orbuculum.c +++ b/Src/orbuculum.c @@ -367,10 +367,25 @@ void _printHelp( const char *const progName ) } // ==================================================================================================== -void _printVersion( void ) +void _printVersion( struct RunTime *r ) { - genericsPrintf( "orbuculum version " GIT_DESCRIBE ); + genericsPrintf( "orbuculum version " GIT_DESCRIBE EOL ); + r->o = OrbtraceIfCreateContext(); + int ndevices = OrbtraceIfGetDeviceList( r->o, NULL, DEVTYPE( DEVICE_ORBTRACE_MINI ) | DEVTYPE( DEVICE_BMP ) ); + + if ( !ndevices ) + { + genericsPrintf( "No devices found" EOL ); + } + else + { + genericsPrintf( "Device%s Found;" EOL, ( ndevices > 1 ) ? "s" : "" ); + OrbtraceIfListDevices( r->o ); + } + + OrbtraceIfDestroyContext( r->o ); + r->o = NULL; } // ==================================================================================================== static struct option _longOptions[] = @@ -436,7 +451,7 @@ bool _processOptions( int argc, char *argv[], struct RunTime *r ) // ------------------------------------ case 'V': - _printVersion(); + _printVersion( r ); return false; // ------------------------------------ diff --git a/Src/otag.c b/Src/otag.c index 1dec4439..f4c4baf6 100644 --- a/Src/otag.c +++ b/Src/otag.c @@ -75,7 +75,7 @@ static void _pumpcb( struct Frame *p, void *param ) struct OTAG *t = ( struct OTAG * )param; t->f.len = p->len - 1; /* OTAG frames have the first element representing the tag */ - clock_gettime(CLOCK_REALTIME,&ts); + clock_gettime( CLOCK_REALTIME, &ts ); t->f.tstamp = ts.tv_sec * OTAG_TS_RESOLUTION + ts.tv_nsec; /* For now, fake the timestamp */ t->f.d = &p->d[1]; From 7f651ca7ea643d70a2d3276126c85c90c6ad6ec0 Mon Sep 17 00:00:00 2001 From: Dave Marples Date: Sun, 9 Jun 2024 18:38:12 +0100 Subject: [PATCH 15/37] Patch to allow build under windows CI --- .github/workflows/build-linux.yml | 5 +- .github/workflows/build-windows.yml | 2 + Inc/orbtraceIf.h | 2 +- Src/nwclient.c | 2 +- Src/orbmortem.c | 1 + meson.build | 41 +- subprojects/.gitignore | 2 + subprojects/libdwarf.wrap | 8 + ...source_root-for-subproject-compatibi.patch | 34 + .../libdwarf/0002-fix-compilation-clang.patch | 15 + .../0003-Fixed-calloc-arguments-order.patch | 157 + subprojects/tomlplusplus-3.3.0/.clang-format | 214 + subprojects/tomlplusplus-3.3.0/.editorconfig | 25 + subprojects/tomlplusplus-3.3.0/.gitattributes | 38 + .../tomlplusplus-3.3.0/.github/FUNDING.yml | 1 + .../.github/ISSUE_TEMPLATE/bug_report.md | 86 + .../.github/ISSUE_TEMPLATE/config.yml | 1 + .../.github/ISSUE_TEMPLATE/feature_request.md | 38 + .../.github/ISSUE_TEMPLATE/spec_bug_report.md | 55 + .../.github/pull_request_template.md | 42 + .../.github/workflows/ci.yaml | 191 + .../.github/workflows/gh-pages.yaml | 43 + subprojects/tomlplusplus-3.3.0/.gitignore | 372 + subprojects/tomlplusplus-3.3.0/.gitmodules | 0 .../.meson-subproject-wrap-hash.txt | 1 + subprojects/tomlplusplus-3.3.0/.runsettings | 20 + subprojects/tomlplusplus-3.3.0/.tipi/deps | 3 + subprojects/tomlplusplus-3.3.0/CHANGELOG.md | 725 + subprojects/tomlplusplus-3.3.0/CMakeLists.txt | 40 + .../tomlplusplus-3.3.0/CODE_OF_CONDUCT.md | 76 + .../tomlplusplus-3.3.0/CONTRIBUTING.md | 81 + subprojects/tomlplusplus-3.3.0/LICENSE | 16 + subprojects/tomlplusplus-3.3.0/README.md | 353 + .../cmake/install-rules.cmake | 52 + .../cmake/project-is-top-level.cmake | 6 + .../cmake/tomlplusplusConfig.cmake | 1 + .../cmake/tomlplusplusConfig.cmake.meson.in | 29 + .../tomlplusplusConfigVersion.cmake.meson.in | 48 + .../tomlplusplus-3.3.0/cmake/variables.cmake | 18 + subprojects/tomlplusplus-3.3.0/cpp.hint | 39 + .../docs/images/badge-C++17.svg | 1 + .../docs/images/badge-C++20.svg | 1 + .../docs/images/badge-TOML.svg | 1 + .../docs/images/badge-awesome.svg | 1 + .../docs/images/badge-gitter.svg | 1 + .../docs/images/badge-license-MIT.svg | 1 + .../docs/images/badge-sponsor.svg | 1 + .../tomlplusplus-3.3.0/docs/images/banner.ai | 2182 ++ .../tomlplusplus-3.3.0/docs/images/banner.png | Bin 0 -> 11547 bytes .../tomlplusplus-3.3.0/docs/images/banner.svg | 1 + .../docs/images/favicon.ico | Bin 0 -> 1150 bytes .../tomlplusplus-3.3.0/docs/images/logo.ai | 2318 ++ .../tomlplusplus-3.3.0/docs/images/logo.svg | 15 + .../docs/pages/main_page.dox | 597 + subprojects/tomlplusplus-3.3.0/docs/poxy.toml | 104 + .../examples/CMakeLists.txt | 27 + .../examples/benchmark_data.toml | 578 + .../examples/error_printer.cpp | 159 + .../examples/error_printer.vcxproj | 61 + .../tomlplusplus-3.3.0/examples/example.toml | 102 + .../tomlplusplus-3.3.0/examples/examples.h | 62 + .../examples/merge_base.toml | 5 + .../examples/merge_overrides.toml | 8 + .../tomlplusplus-3.3.0/examples/meson.build | 30 + .../examples/parse_benchmark.cpp | 81 + .../examples/parse_benchmark.vcxproj | 62 + .../examples/simple_parser.cpp | 36 + .../examples/simple_parser.vcxproj | 62 + .../examples/toml_generator.cpp | 322 + .../examples/toml_generator.vcxproj | 62 + .../examples/toml_merger.cpp | 101 + .../examples/toml_merger.vcxproj | 63 + .../examples/toml_to_json_transcoder.cpp | 36 + .../examples/toml_to_json_transcoder.vcxproj | 62 + .../tomlplusplus-3.3.0/include/meson.build | 52 + .../include/toml++/impl/array.h | 1727 ++ .../include/toml++/impl/array.inl | 382 + .../include/toml++/impl/at_path.h | 97 + .../include/toml++/impl/at_path.inl | 290 + .../include/toml++/impl/date_time.h | 468 + .../include/toml++/impl/formatter.h | 191 + .../include/toml++/impl/formatter.inl | 513 + .../toml++/impl/forward_declarations.h | 1058 + .../include/toml++/impl/header_end.h | 11 + .../include/toml++/impl/header_start.h | 13 + .../include/toml++/impl/json_formatter.h | 142 + .../include/toml++/impl/json_formatter.inl | 121 + .../include/toml++/impl/key.h | 335 + .../include/toml++/impl/make_node.h | 182 + .../include/toml++/impl/node.h | 1115 + .../include/toml++/impl/node.inl | 141 + .../include/toml++/impl/node_view.h | 839 + .../include/toml++/impl/parse_error.h | 139 + .../include/toml++/impl/parse_result.h | 499 + .../include/toml++/impl/parser.h | 390 + .../include/toml++/impl/parser.inl | 3917 +++ .../include/toml++/impl/path.h | 851 + .../include/toml++/impl/path.inl | 523 + .../include/toml++/impl/preprocessor.h | 1237 + .../include/toml++/impl/print_to_stream.h | 129 + .../include/toml++/impl/print_to_stream.inl | 490 + .../include/toml++/impl/simd.h | 35 + .../include/toml++/impl/source_region.h | 223 + .../include/toml++/impl/std_except.h | 12 + .../toml++/impl/std_initializer_list.h | 10 + .../include/toml++/impl/std_map.h | 11 + .../include/toml++/impl/std_new.h | 18 + .../include/toml++/impl/std_optional.h | 32 + .../include/toml++/impl/std_string.h | 53 + .../include/toml++/impl/std_string.inl | 99 + .../include/toml++/impl/std_utility.h | 10 + .../include/toml++/impl/std_variant.h | 10 + .../include/toml++/impl/std_vector.h | 11 + .../include/toml++/impl/table.h | 1961 ++ .../include/toml++/impl/table.inl | 318 + .../include/toml++/impl/toml_formatter.h | 153 + .../include/toml++/impl/toml_formatter.inl | 405 + .../include/toml++/impl/unicode.h | 197 + .../include/toml++/impl/unicode.inl | 60 + .../toml++/impl/unicode_autogenerated.h | 182 + .../include/toml++/impl/value.h | 1256 + .../include/toml++/impl/version.h | 13 + .../include/toml++/impl/yaml_formatter.h | 139 + .../include/toml++/impl/yaml_formatter.inl | 165 + .../tomlplusplus-3.3.0/include/toml++/toml.h | 220 + subprojects/tomlplusplus-3.3.0/meson.build | 207 + .../tomlplusplus-3.3.0/meson_options.txt | 14 + .../tomlplusplus-3.3.0/src/meson.build | 88 + subprojects/tomlplusplus-3.3.0/src/toml.cpp | 13 + .../tomlplusplus-3.3.0/tests/at_path.cpp | 119 + .../tests/conformance_burntsushi_invalid.cpp | 1839 ++ .../tests/conformance_burntsushi_valid.cpp | 4691 ++++ .../tests/conformance_iarna_invalid.cpp | 451 + .../tests/conformance_iarna_valid.cpp | 2210 ++ subprojects/tomlplusplus-3.3.0/tests/cpp.hint | 1 + .../tomlplusplus-3.3.0/tests/for_each.cpp | 372 + .../tomlplusplus-3.3.0/tests/formatters.cpp | 332 + .../tomlplusplus-3.3.0/tests/impl_toml.cpp | 407 + .../tomlplusplus-3.3.0/tests/leakproof.h | 19 + .../tomlplusplus-3.3.0/tests/lib_catch2.h | 44 + subprojects/tomlplusplus-3.3.0/tests/main.cpp | 98 + .../tests/manipulating_arrays.cpp | 536 + .../tests/manipulating_parse_result.cpp | 115 + .../tests/manipulating_tables.cpp | 601 + .../tests/manipulating_values.cpp | 590 + .../tomlplusplus-3.3.0/tests/meson.build | 106 + .../tomlplusplus-3.3.0/tests/odr_test_1.cpp | 9 + .../tomlplusplus-3.3.0/tests/odr_test_2.cpp | 2 + .../tests/parsing_arrays.cpp | 181 + .../tests/parsing_booleans.cpp | 32 + .../tests/parsing_comments.cpp | 110 + .../tests/parsing_dates_and_times.cpp | 174 + .../tests/parsing_floats.cpp | 242 + .../tests/parsing_integers.cpp | 177 + .../tests/parsing_key_value_pairs.cpp | 399 + .../tests/parsing_spec_example.cpp | 92 + .../tests/parsing_strings.cpp | 211 + .../tests/parsing_tables.cpp | 595 + subprojects/tomlplusplus-3.3.0/tests/path.cpp | 592 + .../tomlplusplus-3.3.0/tests/settings.h | 98 + .../tomlplusplus-3.3.0/tests/tests.cpp | 230 + subprojects/tomlplusplus-3.3.0/tests/tests.h | 410 + .../tests/user_feedback.cpp | 396 + .../tests/using_iterators.cpp | 52 + .../tomlplusplus-3.3.0/tests/visit.cpp | 139 + .../tests/vs/odr_test.vcxproj | 82 + .../tests/vs/test_debug_x64.vcxproj | 146 + .../tests/vs/test_debug_x64_cpplatest.vcxproj | 127 + .../test_debug_x64_cpplatest_noexcept.vcxproj | 127 + ...debug_x64_cpplatest_noexcept_unrel.vcxproj | 127 + .../vs/test_debug_x64_cpplatest_unrel.vcxproj | 127 + .../tests/vs/test_debug_x64_noexcept.vcxproj | 127 + .../vs/test_debug_x64_noexcept_unrel.vcxproj | 127 + .../tests/vs/test_debug_x64_unrel.vcxproj | 127 + .../tests/vs/test_debug_x86.vcxproj | 127 + .../tests/vs/test_debug_x86_cpplatest.vcxproj | 127 + .../test_debug_x86_cpplatest_noexcept.vcxproj | 127 + ...debug_x86_cpplatest_noexcept_unrel.vcxproj | 127 + .../vs/test_debug_x86_cpplatest_unrel.vcxproj | 127 + .../tests/vs/test_debug_x86_noexcept.vcxproj | 127 + .../vs/test_debug_x86_noexcept_unrel.vcxproj | 127 + .../tests/vs/test_debug_x86_unrel.vcxproj | 127 + .../tests/vs/test_release_x64.vcxproj | 127 + .../vs/test_release_x64_cpplatest.vcxproj | 127 + ...est_release_x64_cpplatest_noexcept.vcxproj | 127 + ...lease_x64_cpplatest_noexcept_unrel.vcxproj | 127 + .../test_release_x64_cpplatest_unrel.vcxproj | 127 + .../vs/test_release_x64_noexcept.vcxproj | 127 + .../test_release_x64_noexcept_unrel.vcxproj | 127 + .../tests/vs/test_release_x64_unrel.vcxproj | 127 + .../tests/vs/test_release_x86.vcxproj | 127 + .../vs/test_release_x86_cpplatest.vcxproj | 127 + ...est_release_x86_cpplatest_noexcept.vcxproj | 127 + ...lease_x86_cpplatest_noexcept_unrel.vcxproj | 127 + .../test_release_x86_cpplatest_unrel.vcxproj | 127 + .../vs/test_release_x86_noexcept.vcxproj | 127 + .../test_release_x86_noexcept_unrel.vcxproj | 127 + .../tests/vs/test_release_x86_unrel.vcxproj | 127 + .../tests/windows_compat.cpp | 97 + .../tomlplusplus-3.3.0/toml++.code-workspace | 22 + subprojects/tomlplusplus-3.3.0/toml++.natvis | 148 + subprojects/tomlplusplus-3.3.0/toml++.props | 199 + subprojects/tomlplusplus-3.3.0/toml++.sln | 318 + subprojects/tomlplusplus-3.3.0/toml++.vcxproj | 142 + .../tomlplusplus-3.3.0/toml++.vcxproj.filters | 300 + .../tomlplusplus-3.3.0/toml-test/README.md | 52 + .../tomlplusplus-3.3.0/toml-test/meson.build | 34 + subprojects/tomlplusplus-3.3.0/toml-test/tt.h | 43 + .../toml-test/tt_decoder.cpp | 113 + .../toml-test/tt_decoder.vcxproj | 59 + .../toml-test/tt_encoder.cpp | 214 + .../toml-test/tt_encoder.vcxproj | 59 + subprojects/tomlplusplus-3.3.0/toml.hpp | 17265 ++++++++++++ .../tools/ci_single_header_check.py | 31 + .../tomlplusplus-3.3.0/tools/clang_format.bat | 40 + .../tools/generate_conformance_tests.py | 635 + .../tools/generate_single_header.bat | 19 + .../tools/generate_single_header.py | 260 + .../tools/generate_windows_test_targets.py | 181 + .../tomlplusplus-3.3.0/tools/requirements.txt | 4 + subprojects/tomlplusplus-3.3.0/tools/utils.py | 55 + .../tomlplusplus-3.3.0/tools/version.py | 68 + .../tomlplusplus-3.3.0/vendor/README.md | 7 + .../tomlplusplus-3.3.0/vendor/catch.hpp | 17976 ++++++++++++ .../tomlplusplus-3.3.0/vendor/json.hpp | 23352 ++++++++++++++++ 225 files changed, 114312 insertions(+), 11 deletions(-) create mode 100644 subprojects/.gitignore create mode 100644 subprojects/libdwarf.wrap create mode 100644 subprojects/packagefiles/libdwarf/0001-fix-Use-project_source_root-for-subproject-compatibi.patch create mode 100644 subprojects/packagefiles/libdwarf/0002-fix-compilation-clang.patch create mode 100644 subprojects/packagefiles/libdwarf/0003-Fixed-calloc-arguments-order.patch create mode 100644 subprojects/tomlplusplus-3.3.0/.clang-format create mode 100644 subprojects/tomlplusplus-3.3.0/.editorconfig create mode 100644 subprojects/tomlplusplus-3.3.0/.gitattributes create mode 100644 subprojects/tomlplusplus-3.3.0/.github/FUNDING.yml create mode 100644 subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/bug_report.md create mode 100644 subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/config.yml create mode 100644 subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/feature_request.md create mode 100644 subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/spec_bug_report.md create mode 100644 subprojects/tomlplusplus-3.3.0/.github/pull_request_template.md create mode 100644 subprojects/tomlplusplus-3.3.0/.github/workflows/ci.yaml create mode 100644 subprojects/tomlplusplus-3.3.0/.github/workflows/gh-pages.yaml create mode 100644 subprojects/tomlplusplus-3.3.0/.gitignore create mode 100644 subprojects/tomlplusplus-3.3.0/.gitmodules create mode 100644 subprojects/tomlplusplus-3.3.0/.meson-subproject-wrap-hash.txt create mode 100644 subprojects/tomlplusplus-3.3.0/.runsettings create mode 100644 subprojects/tomlplusplus-3.3.0/.tipi/deps create mode 100644 subprojects/tomlplusplus-3.3.0/CHANGELOG.md create mode 100644 subprojects/tomlplusplus-3.3.0/CMakeLists.txt create mode 100644 subprojects/tomlplusplus-3.3.0/CODE_OF_CONDUCT.md create mode 100644 subprojects/tomlplusplus-3.3.0/CONTRIBUTING.md create mode 100644 subprojects/tomlplusplus-3.3.0/LICENSE create mode 100644 subprojects/tomlplusplus-3.3.0/README.md create mode 100644 subprojects/tomlplusplus-3.3.0/cmake/install-rules.cmake create mode 100644 subprojects/tomlplusplus-3.3.0/cmake/project-is-top-level.cmake create mode 100644 subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfig.cmake create mode 100644 subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfig.cmake.meson.in create mode 100644 subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfigVersion.cmake.meson.in create mode 100644 subprojects/tomlplusplus-3.3.0/cmake/variables.cmake create mode 100644 subprojects/tomlplusplus-3.3.0/cpp.hint create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/badge-C++17.svg create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/badge-C++20.svg create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/badge-TOML.svg create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/badge-awesome.svg create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/badge-gitter.svg create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/badge-license-MIT.svg create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/badge-sponsor.svg create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/banner.ai create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/banner.png create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/banner.svg create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/favicon.ico create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/logo.ai create mode 100644 subprojects/tomlplusplus-3.3.0/docs/images/logo.svg create mode 100644 subprojects/tomlplusplus-3.3.0/docs/pages/main_page.dox create mode 100644 subprojects/tomlplusplus-3.3.0/docs/poxy.toml create mode 100644 subprojects/tomlplusplus-3.3.0/examples/CMakeLists.txt create mode 100644 subprojects/tomlplusplus-3.3.0/examples/benchmark_data.toml create mode 100644 subprojects/tomlplusplus-3.3.0/examples/error_printer.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/examples/error_printer.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/examples/example.toml create mode 100644 subprojects/tomlplusplus-3.3.0/examples/examples.h create mode 100644 subprojects/tomlplusplus-3.3.0/examples/merge_base.toml create mode 100644 subprojects/tomlplusplus-3.3.0/examples/merge_overrides.toml create mode 100644 subprojects/tomlplusplus-3.3.0/examples/meson.build create mode 100644 subprojects/tomlplusplus-3.3.0/examples/parse_benchmark.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/examples/parse_benchmark.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/examples/simple_parser.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/examples/simple_parser.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/examples/toml_generator.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/examples/toml_generator.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/examples/toml_merger.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/examples/toml_merger.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/examples/toml_to_json_transcoder.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/examples/toml_to_json_transcoder.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/include/meson.build create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/array.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/array.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/at_path.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/at_path.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/date_time.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/formatter.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/formatter.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/forward_declarations.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/header_end.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/header_start.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/json_formatter.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/json_formatter.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/key.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/make_node.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/node.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/node.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/node_view.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/parse_error.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/parse_result.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/parser.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/parser.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/path.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/path.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/preprocessor.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/print_to_stream.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/print_to_stream.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/simd.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/source_region.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/std_except.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/std_initializer_list.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/std_map.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/std_new.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/std_optional.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/std_string.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/std_string.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/std_utility.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/std_variant.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/std_vector.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/table.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/table.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/toml_formatter.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/toml_formatter.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/unicode.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/unicode.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/unicode_autogenerated.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/value.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/version.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/yaml_formatter.h create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/impl/yaml_formatter.inl create mode 100644 subprojects/tomlplusplus-3.3.0/include/toml++/toml.h create mode 100644 subprojects/tomlplusplus-3.3.0/meson.build create mode 100644 subprojects/tomlplusplus-3.3.0/meson_options.txt create mode 100644 subprojects/tomlplusplus-3.3.0/src/meson.build create mode 100644 subprojects/tomlplusplus-3.3.0/src/toml.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/at_path.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/conformance_burntsushi_invalid.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/conformance_burntsushi_valid.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/conformance_iarna_invalid.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/conformance_iarna_valid.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/cpp.hint create mode 100644 subprojects/tomlplusplus-3.3.0/tests/for_each.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/formatters.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/impl_toml.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/leakproof.h create mode 100644 subprojects/tomlplusplus-3.3.0/tests/lib_catch2.h create mode 100644 subprojects/tomlplusplus-3.3.0/tests/main.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/manipulating_arrays.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/manipulating_parse_result.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/manipulating_tables.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/manipulating_values.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/meson.build create mode 100644 subprojects/tomlplusplus-3.3.0/tests/odr_test_1.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/odr_test_2.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/parsing_arrays.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/parsing_booleans.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/parsing_comments.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/parsing_dates_and_times.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/parsing_floats.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/parsing_integers.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/parsing_key_value_pairs.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/parsing_spec_example.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/parsing_strings.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/parsing_tables.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/path.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/settings.h create mode 100644 subprojects/tomlplusplus-3.3.0/tests/tests.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/tests.h create mode 100644 subprojects/tomlplusplus-3.3.0/tests/user_feedback.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/using_iterators.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/visit.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/odr_test.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x64.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x64_cpplatest.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x64_cpplatest_noexcept.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x64_cpplatest_noexcept_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x64_cpplatest_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x64_noexcept.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x64_noexcept_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x64_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x86.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x86_cpplatest.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x86_cpplatest_noexcept.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x86_cpplatest_noexcept_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x86_cpplatest_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x86_noexcept.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x86_noexcept_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_debug_x86_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x64.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x64_cpplatest.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x64_cpplatest_noexcept.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x64_cpplatest_noexcept_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x64_cpplatest_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x64_noexcept.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x64_noexcept_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x64_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x86.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x86_cpplatest.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x86_cpplatest_noexcept.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x86_cpplatest_noexcept_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x86_cpplatest_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x86_noexcept.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x86_noexcept_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/vs/test_release_x86_unrel.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/tests/windows_compat.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/toml++.code-workspace create mode 100644 subprojects/tomlplusplus-3.3.0/toml++.natvis create mode 100644 subprojects/tomlplusplus-3.3.0/toml++.props create mode 100644 subprojects/tomlplusplus-3.3.0/toml++.sln create mode 100644 subprojects/tomlplusplus-3.3.0/toml++.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/toml++.vcxproj.filters create mode 100644 subprojects/tomlplusplus-3.3.0/toml-test/README.md create mode 100644 subprojects/tomlplusplus-3.3.0/toml-test/meson.build create mode 100644 subprojects/tomlplusplus-3.3.0/toml-test/tt.h create mode 100644 subprojects/tomlplusplus-3.3.0/toml-test/tt_decoder.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/toml-test/tt_decoder.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/toml-test/tt_encoder.cpp create mode 100644 subprojects/tomlplusplus-3.3.0/toml-test/tt_encoder.vcxproj create mode 100644 subprojects/tomlplusplus-3.3.0/toml.hpp create mode 100755 subprojects/tomlplusplus-3.3.0/tools/ci_single_header_check.py create mode 100644 subprojects/tomlplusplus-3.3.0/tools/clang_format.bat create mode 100755 subprojects/tomlplusplus-3.3.0/tools/generate_conformance_tests.py create mode 100644 subprojects/tomlplusplus-3.3.0/tools/generate_single_header.bat create mode 100755 subprojects/tomlplusplus-3.3.0/tools/generate_single_header.py create mode 100755 subprojects/tomlplusplus-3.3.0/tools/generate_windows_test_targets.py create mode 100644 subprojects/tomlplusplus-3.3.0/tools/requirements.txt create mode 100644 subprojects/tomlplusplus-3.3.0/tools/utils.py create mode 100644 subprojects/tomlplusplus-3.3.0/tools/version.py create mode 100644 subprojects/tomlplusplus-3.3.0/vendor/README.md create mode 100644 subprojects/tomlplusplus-3.3.0/vendor/catch.hpp create mode 100644 subprojects/tomlplusplus-3.3.0/vendor/json.hpp diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index 7640dbe7..51be1c18 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -9,8 +9,9 @@ jobs: runs-on: ubuntu-latest steps: - run: sudo apt-get update - - run: sudo apt-get install -y libusb-1.0-0-dev libzmq3-dev meson libsdl2-dev - - uses: actions/checkout@v3 + - run: sudo apt-get install -y libusb-1.0-0-dev libzmq3-dev meson libsdl2-dev libdwarf-dev libdw-dev libelf-dev libcapstone-dev python3-pip ninja-build + - run: sudo pip3 install meson==1.2.0 + - uses: actions/checkout@v4 - run: meson setup ./build - run: ninja -C ./build - run: meson install -C ./build --destdir ./install diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 6e67555f..c49a190d 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -20,10 +20,12 @@ jobs: mingw-w64-x86_64-toolchain mingw-w64-x86_64-zeromq mingw-w64-x86_64-SDL2 + mingw-w64-x86_64-libelf git zip mingw-w64-x86_64-meson mingw-w64-x86_64-autotools + mingw-w64-x86_64-ca-certificates - uses: actions/checkout@v3 with: path: ./orbuculum diff --git a/Inc/orbtraceIf.h b/Inc/orbtraceIf.h index fd2d302c..a7ea684b 100644 --- a/Inc/orbtraceIf.h +++ b/Inc/orbtraceIf.h @@ -72,7 +72,7 @@ struct OrbtraceIfDevice struct __attribute__( ( packed ) ) dataBlock { - ssize_t fillLevel; /* How full this block is */ + long unsigned int fillLevel; /* How full this block is */ uint8_t buffer[USB_TRANSFER_SIZE]; /* Block buffer */ struct libusb_transfer *usbtfr; /* USB Transfer handle */ }; diff --git a/Src/nwclient.c b/Src/nwclient.c index b6868b9d..75a53d57 100644 --- a/Src/nwclient.c +++ b/Src/nwclient.c @@ -160,7 +160,7 @@ static void *_listenTask( void *arg ) /* Make port non-blocking */ #ifdef WIN32 unsigned long mode = 0; - ioctlsocket( newsockfd, FIONBIO, &mode ) == 0 ); + ioctlsocket( newsockfd, FIONBIO, &mode ); #else int flags = fcntl( newsockfd, F_GETFL, 0 ); diff --git a/Src/orbmortem.c b/Src/orbmortem.c index db8c4649..bd276416 100644 --- a/Src/orbmortem.c +++ b/Src/orbmortem.c @@ -15,6 +15,7 @@ #include #include #include +#include #include "git_version_info.h" #include "generics.h" diff --git a/meson.build b/meson.build index 00936359..e6c05f85 100644 --- a/meson.build +++ b/meson.build @@ -1,11 +1,21 @@ -project('orbuculum', 'c') +project('orbuculum', 'c', version:'2.1.0', meson_version: '>=0.63') + +uicolours_default = declare_dependency(compile_args: ['-include', 'uicolours_default.h']) + +cc = meson.get_compiler('c') + +sockets = declare_dependency( + dependencies: host_machine.system() == 'windows' ? [cc.find_library('ws2_32')] : [] +) dependencies = [ dependency('threads'), dependency('libusb-1.0'), dependency('libzmq'), - dependency('SDL2'), - dependency('ncurses', 'ncursesw') + dependency('ncurses', 'ncursesw'), + dependency('libelf'), + uicolours_default, + sockets, ] incdirs = include_directories(['Inc', 'Inc/external']) @@ -18,10 +28,16 @@ if host_machine.system() == 'windows' ] elif host_machine.system() == 'darwin' add_project_arguments('-DOSX', language: 'c') +elif host_machine.system() == 'freebsd' + add_project_arguments('-DFREEBSD', language: 'c') + add_project_arguments('-ggdb', language: 'c') + add_project_arguments('-D_GNU_SOURCE', language: 'c') else add_project_arguments('-DLINUX', language: 'c') + add_project_arguments('-ggdb', language: 'c') add_project_arguments('-D_GNU_SOURCE', language: 'c') - install_data('Support/60-orbcode.rules', install_dir : '/etc/udev/rules.d') + + install_data('Support/60-orbcode.rules', install_dir : 'lib/udev/rules.d') install_data('Support/gdbtrace.init', install_dir : 'share/orbcode') endif @@ -29,6 +45,14 @@ add_project_arguments('-DSCREEN_HANDLING', language: 'c') add_project_arguments('-Wno-error=deprecated-declarations', language: 'c') add_project_arguments(['-include', 'uicolours_default.h'], language: 'c') +libdwarf = subproject('libdwarf').get_variable('libdwarf') +dependencies += libdwarf + +libSDL2 = dependency('SDL2', required: false) +if not libSDL2.found() + libSDL2 = disabler() +endif + if host_machine.system() == 'windows' stream_src = [ 'Src/stream_win32.c', @@ -64,8 +88,8 @@ liborb = library('orb', 'Src/generics.c', ] + stream_src, include_directories: incdirs, - dependencies: dependencies, - soversion: 0, + dependencies: sockets, + soversion: meson.project_version(), install: true, ) @@ -201,7 +225,10 @@ executable('orblcd', git_version_info_h, ], include_directories: incdirs, - dependencies: dependencies, + dependencies: dependencies + [ + libSDL2, + ], + link_with: liborb, install: true, ) diff --git a/subprojects/.gitignore b/subprojects/.gitignore new file mode 100644 index 00000000..50455363 --- /dev/null +++ b/subprojects/.gitignore @@ -0,0 +1,2 @@ +libdwarf-* +packagecache \ No newline at end of file diff --git a/subprojects/libdwarf.wrap b/subprojects/libdwarf.wrap new file mode 100644 index 00000000..7bfd9379 --- /dev/null +++ b/subprojects/libdwarf.wrap @@ -0,0 +1,8 @@ +[wrap-file] +directory = libdwarf-0.7.0 + +source_url = https://www.prevanders.net/libdwarf-0.7.0.tar.xz +source_filename = libdwarf-0.7.0.tar.xz +source_hash = 23b71829de875fa5842e49f232c8ee1a5043805749738bc61424d9abc1189f38 + +diff_files = ./libdwarf/0001-fix-Use-project_source_root-for-subproject-compatibi.patch, ./libdwarf/0002-fix-compilation-clang.patch, ./libdwarf/0003-Fixed-calloc-arguments-order.patch diff --git a/subprojects/packagefiles/libdwarf/0001-fix-Use-project_source_root-for-subproject-compatibi.patch b/subprojects/packagefiles/libdwarf/0001-fix-Use-project_source_root-for-subproject-compatibi.patch new file mode 100644 index 00000000..a7f18132 --- /dev/null +++ b/subprojects/packagefiles/libdwarf/0001-fix-Use-project_source_root-for-subproject-compatibi.patch @@ -0,0 +1,34 @@ +From 3a91e8fbd873c35615319615ea57ef36910be258 Mon Sep 17 00:00:00 2001 +From: Maciej Nowak +Date: Sat, 29 Jul 2023 12:46:32 +0200 +Subject: [PATCH] fix: Use project_source_root for subproject compatibility + +--- + meson.build | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/meson.build b/meson.build +index 83ecd99..4d3fb4e 100644 +--- a/meson.build ++++ b/meson.build +@@ -1,7 +1,7 @@ + project('libdwarf', ['c','cpp'], + version: '0.7.0', + default_options : ['buildtype=debugoptimized', 'warning_level=3', 'werror=true'], +- meson_version : '>=0.53' ++ meson_version : '>=0.56' + ) + + v_arr = meson.project_version().split('.') +@@ -191,7 +191,7 @@ pkgconf.set('requirements_libdwarf_libs', '') + pkg_install_dir = '@0@/pkgconfig'.format(get_option('libdir')) + + configure_file( +- input : join_paths(meson.source_root(), 'libdwarf.pc.in'), ++ input : join_paths(meson.project_source_root(), 'libdwarf.pc.in'), + output : 'libdwarf.pc', + configuration : pkgconf, + install_dir : pkg_install_dir +-- +2.39.0.windows.1 + diff --git a/subprojects/packagefiles/libdwarf/0002-fix-compilation-clang.patch b/subprojects/packagefiles/libdwarf/0002-fix-compilation-clang.patch new file mode 100644 index 00000000..44afce2e --- /dev/null +++ b/subprojects/packagefiles/libdwarf/0002-fix-compilation-clang.patch @@ -0,0 +1,15 @@ +diff --git a/meson.build b/meson.build +index 83ecd99..4d3fb4e 100644 +--- a/meson.build ++++ b/meson.build +@@ -84,6 +84,10 @@ libdwarf_args = [ '-D__USE_MINGW_ANSI_STDIO=0' ] + if cc.get_id() == 'msvc' + libdwarf_args += [ '-D_CRT_NONSTDC_NO_WARNINGS', '-D_CRT_SECURE_NO_WARNINGS' ] + endif ++if cc.get_id() == 'clang' ++ add_project_arguments('-Wno-error=unused-but-set-variable', language: 'c') ++ add_project_arguments('-Wno-error=strict-prototypes', language: 'c') ++endif + + config_dir = [include_directories('.')] + diff --git a/subprojects/packagefiles/libdwarf/0003-Fixed-calloc-arguments-order.patch b/subprojects/packagefiles/libdwarf/0003-Fixed-calloc-arguments-order.patch new file mode 100644 index 00000000..209454bf --- /dev/null +++ b/subprojects/packagefiles/libdwarf/0003-Fixed-calloc-arguments-order.patch @@ -0,0 +1,157 @@ +From b92a03a9ebc35b1b26eda285cc34672384fe723c Mon Sep 17 00:00:00 2001 +From: Maciej Nowak +Date: Mon, 3 Jun 2024 20:08:06 +0200 +Subject: [PATCH] Fixed calloc arguments order + +--- + src/bin/dwarfdump/dd_tsearchbal.c | 2 +- + src/bin/dwarfdump/print_debug_names.c | 4 ++-- + src/lib/libdwarf/dwarf_frame.c | 2 +- + src/lib/libdwarf/dwarf_harmless.c | 3 +-- + src/lib/libdwarf/dwarf_machoread.c | 13 +++++++------ + src/lib/libdwarf/dwarf_ranges.c | 2 +- + src/lib/libdwarf/dwarf_tsearchhash.c | 8 ++++---- + 7 files changed, 17 insertions(+), 17 deletions(-) + +diff --git a/src/bin/dwarfdump/dd_tsearchbal.c b/src/bin/dwarfdump/dd_tsearchbal.c +index f8bce3d..23a3e82 100644 +--- a/src/bin/dwarfdump/dd_tsearchbal.c ++++ b/src/bin/dwarfdump/dd_tsearchbal.c +@@ -726,7 +726,7 @@ tdelete_inner(const void *key, + /* Allocate extra, head is on the stack we create + here and the depth might increase. */ + depth = depth + 4; +- pkarray = calloc(sizeof(struct pkrecord),depth); ++ pkarray = calloc(depth,sizeof(struct pkrecord)); + if (!pkarray) { + /* Malloc fails, we could abort... */ + return NULL; +diff --git a/src/bin/dwarfdump/print_debug_names.c b/src/bin/dwarfdump/print_debug_names.c +index a2fba1b..c16d2dc 100644 +--- a/src/bin/dwarfdump/print_debug_names.c ++++ b/src/bin/dwarfdump/print_debug_names.c +@@ -433,8 +433,8 @@ print_dnames_abbrevtable(unsigned int indent,Dwarf_Dnames_Head dn, + res = DW_DLV_OK; + abblist_count = i; + if (abblist_count) { +- abblist = calloc(sizeof(struct Dnames_Abb_Check_s), +- abblist_count); ++ abblist = calloc(abblist_count, ++ sizeof(struct Dnames_Abb_Check_s)); + if (!abblist) { + printf("ERROR: Unable to allocate %" DW_PR_DUu + "entries of a struct to check " +diff --git a/src/lib/libdwarf/dwarf_frame.c b/src/lib/libdwarf/dwarf_frame.c +index 18f9513..56a069a 100644 +--- a/src/lib/libdwarf/dwarf_frame.c ++++ b/src/lib/libdwarf/dwarf_frame.c +@@ -2955,7 +2955,7 @@ init_reg_rules_alloc(Dwarf_Debug dbg,struct Dwarf_Frame_s *f, + { + f->fr_reg_count = count; + f->fr_reg = (struct Dwarf_Reg_Rule_s *) +- calloc(sizeof(struct Dwarf_Reg_Rule_s), count); ++ calloc(count, sizeof(struct Dwarf_Reg_Rule_s)); + if (f->fr_reg == 0) { + if (error) { + _dwarf_error(dbg, error, DW_DLE_DF_ALLOC_FAIL); +diff --git a/src/lib/libdwarf/dwarf_harmless.c b/src/lib/libdwarf/dwarf_harmless.c +index 803e9a8..972ebd9 100644 +--- a/src/lib/libdwarf/dwarf_harmless.c ++++ b/src/lib/libdwarf/dwarf_harmless.c +@@ -195,8 +195,7 @@ _dwarf_harmless_init(struct Dwarf_Harmless_s *dhp,unsigned size) + unsigned i = 0; + memset(dhp,0,sizeof(*dhp)); + dhp->dh_maxcount = size +1; +- dhp->dh_errors = (char **)calloc(sizeof(char *), +- dhp->dh_maxcount); ++ dhp->dh_errors = (char **)calloc(dhp->dh_maxcount, sizeof(char *)); + if (!dhp->dh_errors) { + dhp->dh_maxcount = 0; + return; +diff --git a/src/lib/libdwarf/dwarf_machoread.c b/src/lib/libdwarf/dwarf_machoread.c +index 8fff3f1..1a5924d 100644 +--- a/src/lib/libdwarf/dwarf_machoread.c ++++ b/src/lib/libdwarf/dwarf_machoread.c +@@ -511,8 +511,8 @@ _dwarf_macho_load_segment_commands( + } + mfp->mo_segment_commands = + (struct generic_macho_segment_command *) +- calloc(sizeof(struct generic_macho_segment_command), +- (size_t)mfp->mo_segment_count); ++ calloc((size_t)mfp->mo_segment_count, ++ sizeof(struct generic_macho_segment_command)); + if (!mfp->mo_segment_commands) { + *errcode = DW_DLE_ALLOC_FAIL; + return DW_DLV_ERROR; +@@ -555,8 +555,9 @@ _dwarf_macho_load_dwarf_section_details32( + struct generic_macho_section *secs = 0; + + secs = (struct generic_macho_section *)calloc( +- sizeof(struct generic_macho_section), +- (size_t)secalloc); ++ (size_t)secalloc, ++ sizeof(struct generic_macho_section) ++ ); + if (!secs) { + *errcode = DW_DLE_ALLOC_FAIL; + return DW_DLV_OK; +@@ -643,8 +644,8 @@ _dwarf_macho_load_dwarf_section_details64( + struct generic_macho_section *secs = 0; + + secs = (struct generic_macho_section *)calloc( +- sizeof(struct generic_macho_section), +- (size_t)secalloc); ++ (size_t)secalloc, ++ sizeof(struct generic_macho_section)); + if (!secs) { + *errcode = DW_DLE_ALLOC_FAIL; + return DW_DLV_ERROR; +diff --git a/src/lib/libdwarf/dwarf_ranges.c b/src/lib/libdwarf/dwarf_ranges.c +index 4c65f73..0d8fbd4 100644 +--- a/src/lib/libdwarf/dwarf_ranges.c ++++ b/src/lib/libdwarf/dwarf_ranges.c +@@ -267,7 +267,7 @@ int dwarf_get_ranges_b(Dwarf_Debug dbg, + dwarfstring_destructor(&m); + return DW_DLV_ERROR; + } +- re = calloc(sizeof(struct ranges_entry),1); ++ re = calloc(1,sizeof(struct ranges_entry)); + if (!re) { + free_allocated_ranges(base); + _dwarf_error(dbg, error, DW_DLE_DEBUG_RANGES_OUT_OF_MEM); +diff --git a/src/lib/libdwarf/dwarf_tsearchhash.c b/src/lib/libdwarf/dwarf_tsearchhash.c +index 89476ae..a768f5f 100644 +--- a/src/lib/libdwarf/dwarf_tsearchhash.c ++++ b/src/lib/libdwarf/dwarf_tsearchhash.c +@@ -190,7 +190,7 @@ dwarf_initialize_search_hash( void **treeptr, + /* initialized already. */ + return base ; + } +- base = calloc(sizeof(struct hs_base),1); ++ base = calloc(1,sizeof(struct hs_base)); + if (!base) { + /* Out of memory. */ + return NULL ; +@@ -223,7 +223,7 @@ printf("debugging: initial alloc prime to use %lu\n",prime_to_use); + /* hashtab_ is an array of hs_entry, + indexes 0 through tablesize_ -1. */ + base->hashfunc_ = hashfunc; +- base->hashtab_ = calloc(sizeof(struct ts_entry),base->tablesize_); ++ base->hashtab_ = calloc(base->tablesize_,sizeof(struct ts_entry)); + if (!base->hashtab_) { + free(base); + return NULL; +@@ -368,8 +368,8 @@ resize_table(struct hs_base *head, + return; + } + newhead.tablesize_entry_index_ = new_entry_index; +- newhead.hashtab_ = calloc(sizeof(struct ts_entry), +- newhead.tablesize_); ++ newhead.hashtab_ = calloc(newhead.tablesize_, ++ sizeof(struct ts_entry)); + if (!newhead.hashtab_) { + /* Oops, too large. Leave table size as is, though + things will get slow as it overfills. */ +-- +2.43.0.windows.1 + diff --git a/subprojects/tomlplusplus-3.3.0/.clang-format b/subprojects/tomlplusplus-3.3.0/.clang-format new file mode 100644 index 00000000..e3c1e576 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.clang-format @@ -0,0 +1,214 @@ +--- +Language: Cpp +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveMacros: Consecutive +AlignConsecutiveAssignments: Consecutive +AlignConsecutiveBitFields: Consecutive +AlignConsecutiveDeclarations: None +AlignEscapedNewlines: Right +AlignOperands: AlignAfterOperator +AlignTrailingComments: true +AllowAllArgumentsOnNextLine: false +AllowAllConstructorInitializersOnNextLine: false +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortEnumsOnASingleLine: false +AllowShortBlocksOnASingleLine: Never +AllowShortCaseLabelsOnASingleLine: true +AllowShortFunctionsOnASingleLine: None +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: Yes +AttributeMacros: + - TOML_ABSTRACT_INTERFACE + - TOML_CALLCONV + - TOML_CLOSED_ENUM + - TOML_CLOSED_FLAGS_ENUM + - TOML_EMPTY_BASES + - TOML_EXPORTED_CLASS + - TOML_FLAGS_ENUM + - TOML_OPEN_ENUM + - TOML_OPEN_FLAGS_ENUM + - TOML_TRIVIAL_ABI + - TOML_UNLIKELY_CASE +BinPackArguments: false +BinPackParameters: false +BraceWrapping: + AfterCaseLabel: true + AfterClass: true + AfterControlStatement: Always + AfterEnum: true + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: false + AfterStruct: true + AfterUnion: true + AfterExternBlock: true + BeforeCatch: true + BeforeElse: true + BeforeLambdaBody: true + BeforeWhile: true + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeConceptDeclarations: true +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 120 +CommentPragmas: '^([/*!#]|\s*(===|---|clang-format))' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DeriveLineEnding: false +DerivePointerAlignment: false +DisableFormat: false +EmptyLineBeforeAccessModifier: LogicalBlock +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +StatementAttributeLikeMacros: + - Q_EMIT +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + CaseSensitive: false + - Regex: '.*' + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' +IndentCaseLabels: true +IndentCaseBlocks: false +IndentGotoLabels: true +IndentPPDirectives: None +IndentExternBlock: Indent +IndentRequires: false +IndentWidth: 4 +IndentWrappedFunctionNames: false +InsertTrailingCommas: None +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: All +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 2 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 1 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 1000000 +PenaltyIndentedWhitespace: 0 +PointerAlignment: Left +ReflowComments: true +SortIncludes: false +SortJavaStaticImport: Before +SortUsingDeclarations: false +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceAroundPointerQualifiers: Default +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyBlock: false +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInConditionalStatement: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpaceBeforeSquareBrackets: false +BitFieldColonSpacing: Both +Standard: Latest +StatementMacros: + - __pragma + - _Pragma + - TOML_ALWAYS_INLINE + - TOML_API + - TOML_ATTR + - TOML_CONST_GETTER + - TOML_CONST_INLINE_GETTER + - TOML_EXPORTED_CLASS + - TOML_EXPORTED_MEMBER_FUNCTION + - TOML_EXPORTED_FREE_FUNCTION + - TOML_EXPORTED_STATIC_FUNCTION + - TOML_EXTERN + - TOML_EXTERNAL_LINKAGE + - TOML_INTERNAL_LINKAGE + - TOML_LIKELY_CASE + - TOML_MEMBER_ATTR + - TOML_NEVER_INLINE + - TOML_NODISCARD + - TOML_NODISCARD_CTOR + - TOML_PRAGMA_CLANG + - TOML_PRAGMA_CLANG_GE_9 + - TOML_PRAGMA_CLANG_GE_10 + - TOML_PRAGMA_CLANG_GE_11 + - TOML_PRAGMA_GCC + - TOML_PRAGMA_MSVC + - TOML_PRAGMA_ICC + - TOML_PURE_GETTER + - TOML_PURE_INLINE_GETTER + - TOML_RETURNS_BY_THROWING +TabWidth: 4 +TypenameMacros: +UseCRLF: false +UseTab: Always +WhitespaceSensitiveMacros: + - STRINGIZE + - PP_STRINGIZE + - BOOST_PP_STRINGIZE + - TOML_ATTR + - TOML_CONCAT + - TOML_HAS_INCLUDE + - TOML_LIKELY + - TOML_MAKE_STRING + - TOML_PRAGMA_CLANG + - TOML_PRAGMA_CLANG_GE_9 + - TOML_PRAGMA_CLANG_GE_10 + - TOML_PRAGMA_CLANG_GE_11 + - TOML_PRAGMA_GCC + - TOML_PRAGMA_MSVC + - TOML_PRAGMA_ICC + - TOML_UNLIKELY +... + diff --git a/subprojects/tomlplusplus-3.3.0/.editorconfig b/subprojects/tomlplusplus-3.3.0/.editorconfig new file mode 100644 index 00000000..43b1c146 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.editorconfig @@ -0,0 +1,25 @@ +root = true + +[*] +insert_final_newline = true +indent_style = tab +indent_size = 4 +tab_width = 4 +end_of_line = lf +trim_trailing_whitespace = true +charset = utf-8 + +[*.{md,markdown}] +trim_trailing_whitespace = false + +[*.{gitattributes,yaml,yml,vcxproj,vcxproj.filters,sln,rc,clang-format,toml}] +indent_style = space + +[{Doxyfile,Doxyfile-mcss}] +indent_style = space + +[*.{hlsl,rc,sln,vcxproj,vcxproj.filters}] +end_of_line = crlf + +[*.{sln,vcxproj,vcxproj.filters}] +charset = utf-8-bom diff --git a/subprojects/tomlplusplus-3.3.0/.gitattributes b/subprojects/tomlplusplus-3.3.0/.gitattributes new file mode 100644 index 00000000..bb99cdaa --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.gitattributes @@ -0,0 +1,38 @@ +* text eol=lf encoding=UTF-8 +*.hlsl text eol=crlf encoding=UTF-8 +*.rc text eol=crlf encoding=UTF-8 +*.sln text eol=crlf encoding=UTF-8-BOM +*.vcxproj text eol=crlf encoding=UTF-8-BOM +*.vcxproj.filters text eol=crlf encoding=UTF-8-BOM + +*.cs eol=lf diff=csharp + +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain + +*.ai binary +*.bin binary +*.bmp binary +*.dat binary +*.gif binary +*.ico binary +*.jpeg binary +*.jpg binary +*.otf binary +*.png binary +*.psd binary +*.rc binary +*.ttf binary +*.woff binary +*.woff2 binary +*.xlsx binary + +vendor/* linguist-vendored diff --git a/subprojects/tomlplusplus-3.3.0/.github/FUNDING.yml b/subprojects/tomlplusplus-3.3.0/.github/FUNDING.yml new file mode 100644 index 00000000..c1c954eb --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.github/FUNDING.yml @@ -0,0 +1 @@ +github: marzer diff --git a/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/bug_report.md b/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..f04197a8 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,86 @@ +--- +name: Bug report +about: Regular ol' bugs. +title: '' +labels: [ "bug" ] +assignees: marzer + +--- + + + + + +## Environment +**toml++ version and/or commit hash:** + + + +**Compiler:** + + + + +**C++ standard mode:** + + + + +**Target arch:** + + + + +**Library configuration overrides:** + + + + +**Relevant compilation flags:** + + + + +## Describe the bug + + + + +## Steps to reproduce (or a small repro code sample) + + + + +## Additional information + diff --git a/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/config.yml b/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..3ba13e0c --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/feature_request.md b/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..76688cda --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,38 @@ +--- +name: Feature request +about: Want to see something added or improved? Tell me all about it. +title: '' +labels: feature +assignees: marzer + +--- + + + + + +**Is your feature request related to a problem? Please describe.** + + + + +**Describe the solution you'd like** + + + + + +**Additional context** + diff --git a/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/spec_bug_report.md b/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/spec_bug_report.md new file mode 100644 index 00000000..fbb3aeac --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.github/ISSUE_TEMPLATE/spec_bug_report.md @@ -0,0 +1,55 @@ +--- +name: TOML spec conformance bug +about: Bugs relating to the library's TOML spec conformance (or lack thereof). +title: '' +labels: [ "bug", "TOML spec" ] +assignees: marzer + +--- + + + + +## The non-conforming TOML snippet +```toml + +# your TOML here + +``` + + +## What you expected + + + +## What you got + + + +## Environment +**toml++ version and/or commit hash:** + + +**Any other useful information:** + diff --git a/subprojects/tomlplusplus-3.3.0/.github/pull_request_template.md b/subprojects/tomlplusplus-3.3.0/.github/pull_request_template.md new file mode 100644 index 00000000..1d269acb --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.github/pull_request_template.md @@ -0,0 +1,42 @@ + + + + +**What does this change do?** + + + + +**Is it related to an exisiting bug report or feature request?** + + + + +**Pre-merge checklist** + +- [ ] I've read [CONTRIBUTING.md] +- [ ] I've rebased my changes against the current HEAD of `origin/master` (if necessary) +- [ ] I've added new test cases to verify my change +- [ ] I've regenerated toml.hpp ([how-to]) +- [ ] I've updated any affected documentation +- [ ] I've rebuilt and run the tests with at least one of: + - [ ] Clang 6 or higher + - [ ] GCC 7 or higher + - [ ] MSVC 19.20 (Visual Studio 2019) or higher +- [ ] I've added my name to the list of contributors in [README.md](https://github.com/marzer/tomlplusplus/blob/master/README.md) + + + +[CONTRIBUTING.md]: https://github.com/marzer/tomlplusplus/blob/master/CONTRIBUTING.md +[how-to]: https://github.com/marzer/tomlplusplus/blob/master/CONTRIBUTING.md#regenerating-tomlhpp +[README.md]: https://github.com/marzer/tomlplusplus/blob/master/README.md \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/.github/workflows/ci.yaml b/subprojects/tomlplusplus-3.3.0/.github/workflows/ci.yaml new file mode 100644 index 00000000..0469c07c --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.github/workflows/ci.yaml @@ -0,0 +1,191 @@ +name: ci + +on: + push: + branches-ignore: + - "gh-pages" + paths: + - "**.h" + - "**.hpp" + - "**.cpp" + - "**.inl" + - "**.py" + - "**/meson.build" + - "**/workflows/**.yaml" + pull_request: + branches-ignore: + - "gh-pages" + paths: + - "**.h" + - "**.hpp" + - "**.cpp" + - "**.inl" + - "**.py" + - "**/meson.build" + - "**/workflows/**.yaml" + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +env: + clang_version: "14" + gcc_version: "11" + +jobs: + linux: + strategy: + fail-fast: false + matrix: + compiler: + - "clang" + - "gcc" + linker: + - "lld" + type: + - "debug" + - "release" + + runs-on: ubuntu-latest + + defaults: + run: + shell: bash + + steps: + - name: Install base dependencies + run: | + sudo apt -y update + sudo apt -y install --no-install-recommends git python3 python3-pip ninja-build libstdc++-${{ env.gcc_version }}-dev locales-all + + - uses: actions/checkout@v3 + + - name: Install python dependencies + run: | + sudo -H pip3 install --no-cache-dir --upgrade meson + sudo -H pip3 install --no-cache-dir --upgrade -r tools/requirements.txt + + - name: Check toml.hpp + run: | + cd tools + python3 ci_single_header_check.py + + - name: Install lld + if: ${{ startsWith(matrix.linker, 'lld') }} + run: | + sudo apt -y install --no-install-recommends lld-${{ env.clang_version }} + sudo update-alternatives --install /usr/bin/ld.lld ld.lld /usr/bin/ld.lld-${{ env.clang_version }} 1000 + + - name: Install clang + if: ${{ startsWith(matrix.compiler, 'clang') }} + run: | + sudo apt -y install --no-install-recommends clang-${{ env.clang_version }} + sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++-${{ env.clang_version }} 1000 + sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang-${{ env.clang_version }} 1000 + + - name: Install gcc + if: ${{ startsWith(matrix.compiler, 'gcc') }} + run: | + sudo apt -y install --no-install-recommends gcc-${{ env.gcc_version }} g++-${{ env.gcc_version }} + sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-${{ env.gcc_version }} 1000 + sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-${{ env.gcc_version }} 1000 + + - name: Configure locales + run: | + sudo locale-gen 'en_US.utf8' 'ja_JP.utf8' 'de_DE.utf8' 'it_IT.utf8' 'tr_TR.utf8' 'fi_FI.utf8' 'fr_FR.utf8' 'zh_CN.utf8' + + - name: Configure Meson + run: | + CXX=c++ CXX_LD=${{ matrix.linker }} meson setup build --buildtype=${{ matrix.type }} -Ddevel=true -Db_lto=false + + - name: Build + run: meson compile -C build + + - name: Test + run: meson test -C build --verbose + + windows: + strategy: + fail-fast: false + matrix: + type: + - "debug" + - "release" + + runs-on: windows-2022 + + defaults: + run: + shell: cmd + + steps: + - name: Install dependencies + run: | + python3 -m pip install -U pip + pip3 install meson ninja + + - uses: actions/checkout@v3 + + - uses: ilammy/msvc-dev-cmd@v1 + + - name: Configure Meson + run: meson setup build --vsenv --buildtype=${{ matrix.type }} -Ddevel=true -Db_lto=false + + - name: Build + run: meson compile -C build + + - name: Test + run: meson test -C build --verbose +# tipi-build-linux: +# name: tipi.build project build and dependency resolution +# runs-on: ubuntu-latest +# if: github.ref == 'refs/heads/master' +# container: tipibuild/tipi-ubuntu +# +# env: +# HOME: /root +# +# steps: +# - uses: actions/checkout@v3 +# - run: mkdir -p ~/.tipi +# +# # checking if the tomlplusplus project builds and passes tests +# - name: Build as project target linux-cxx17 (run tests 'odr_test_1' and 'main') +# run: tipi . --dont-upgrade --verbose -t linux-cxx17 --test "odr_test_1|main" +# +# - name: Build as project target linux-cxx20 (run tests 'odr_test_1' and 'main') +# run: tipi . --dont-upgrade --verbose -t linux-cxx20 --test "odr_test_1|main" +# +# - name: Cleanup project builds +# run: rm -r ./build +# +# - name: "Get branch name and save to env" +# env: +# IS_PR: ${{ github.EVENT_NAME == 'pull_request' }} +# run: | +# if ${IS_PR}; then +# BRANCH_NAME="${GITHUB_HEAD_REF}" +# else +# BRANCH_NAME="${GITHUB_REF##*/}" +# fi +# echo "BRANCH_NAME=${BRANCH_NAME}" >> $GITHUB_ENV +# +# # trying if pulling the dependency with tipi works properly +# - name: Build as dependency +# run: | +# cd examples/ +# +# # create test directory and copy the simple_parser.cpp in there +# mkdir test-as-dep +# cp examples.h test-as-dep/. +# cp simple_parser.cpp test-as-dep/. +# cd test-as-dep/ +# +# # create a deps file referencing the commit that triggered this build as dependency +# mkdir .tipi +# echo '{ "requires": { "${{ github.event.repository.full_name }}": { "@": "${{ env.BRANCH_NAME }}" } } }' > .tipi/deps +# +# # build +# tipi . --dont-upgrade --verbose -t linux-cxx17 +# ./build/linux-cxx17/bin/simple_parser ../example.toml diff --git a/subprojects/tomlplusplus-3.3.0/.github/workflows/gh-pages.yaml b/subprojects/tomlplusplus-3.3.0/.github/workflows/gh-pages.yaml new file mode 100644 index 00000000..620aa343 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.github/workflows/gh-pages.yaml @@ -0,0 +1,43 @@ +name: gh-pages + +on: + push: + branches: + - master + paths: + - '**.h' + - '**.hpp' + - '**.dox' + - '**.md' + - 'docs/**' + workflow_dispatch: + +jobs: + gh-pages: + runs-on: ubuntu-latest + container: + image: debian:testing + + defaults: + run: + shell: bash + + steps: + - uses: actions/checkout@v3 + + - name: Install dependencies + run: | + apt -y update + apt -y install --no-install-recommends git python3 python3-pip doxygen + pip3 install --upgrade poxy + + - name: Generate docs + run: | + cd docs + poxy --verbose + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/html diff --git a/subprojects/tomlplusplus-3.3.0/.gitignore b/subprojects/tomlplusplus-3.3.0/.gitignore new file mode 100644 index 00000000..96219e78 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.gitignore @@ -0,0 +1,372 @@ +emojis.json +UnicodeData.txt +meson-info/ +meson-logs/ +meson-private/ +*.o +.ninja_* +build.ninja +compile_commands.json +[Bb]uild*/ + +# documentation +*.xml +*.xslt +*.xsd +*.html +*.temp +docs/html +docs/xml + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +.vscode/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc +*.Designer.cs.dll +unsuccessfulbuild +*.lastbuildstate +*.psess +*.vsp +*.vspx +*.tlog + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Windows +Thumbs.db +ehthumbs.db +Desktop.ini +$RECYCLE.BIN/ +*.cab +*.msi +*.msm +*.msp +*.lnk + +# Clangd cache +/.cache/clangd diff --git a/subprojects/tomlplusplus-3.3.0/.gitmodules b/subprojects/tomlplusplus-3.3.0/.gitmodules new file mode 100644 index 00000000..e69de29b diff --git a/subprojects/tomlplusplus-3.3.0/.meson-subproject-wrap-hash.txt b/subprojects/tomlplusplus-3.3.0/.meson-subproject-wrap-hash.txt new file mode 100644 index 00000000..f1a6e4fe --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.meson-subproject-wrap-hash.txt @@ -0,0 +1 @@ +e53a0d9379f5d224d0a9c7e1c273b53af06ef2fc26d82b8f44b7df3f2d58aebd diff --git a/subprojects/tomlplusplus-3.3.0/.runsettings b/subprojects/tomlplusplus-3.3.0/.runsettings new file mode 100644 index 00000000..aa596528 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.runsettings @@ -0,0 +1,20 @@ + + + + + 0 + build\TestResults + 60000 + + + + + --verbosity high --list-tests * + 500 + (?i:test) + Solution + tests\ + AdditionalInfo + + + diff --git a/subprojects/tomlplusplus-3.3.0/.tipi/deps b/subprojects/tomlplusplus-3.3.0/.tipi/deps new file mode 100644 index 00000000..3944afa7 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/.tipi/deps @@ -0,0 +1,3 @@ +{ + "requires": {} +} diff --git a/subprojects/tomlplusplus-3.3.0/CHANGELOG.md b/subprojects/tomlplusplus-3.3.0/CHANGELOG.md new file mode 100644 index 00000000..849e47e4 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/CHANGELOG.md @@ -0,0 +1,725 @@ +# Changelog + + + +## v3.3.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v3.3.0) 2023-01-29 + +#### Fixes: + +- fixed null pointer dereference in parser when exceptions are disabled (#169) (@ncaklovic) +- fixed spurious warnings in MSVC 19.34 +- fixed `toml::parse_file()` on windows for non-ASCII paths +- fixed a spurious table redefinition error (#187) (@jorisvr) +- fixed UB edge-case in integer parsing (#188) (@jorisvr) +- fixed some build issues with Apple-flavoured Clang (#189) (@eddelbuettel) + +#### Additions: + +- added `toml::format_flags::terse_key_value_pairs` +- added `TOML_ENABLE_FLOAT16` config (#178) (@Scrumplex) + +#### Removals: + +- removed automatic detection of `_Float16` (you must explicitly set `TOML_ENABLE_FLOAT16` to enable it) (#186) (@benthetechguy) + +#### Build system: + +- re-wrote the meson scripts to fix a number of issues (#185, #186) (@Tachi107, @benthetechguy) +- increased the minimum required meson version to `0.61.0` + +

+ +## v3.2.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v3.2.0) 2022-08-29 + +#### Fixes: + +- fixed `[dotted.table]` source columns sometimes being off by one (#152) (@vaartis) +- fixed spurious `Wnull-dereference` warning on GCC (#164) (@zaporozhets) +- fixed `print_to_stream` ambiguity for `size_t` (#167) (@acronce) + +#### Additions: + +- added value type deduction to `emplace()` methods +- added `toml::path` utility type (#153, #156, #168) (@jonestristand, @kcsaul) +- added config option `TOML_CALLCONV` +- added missing relational operators for `source_position` + +#### Changes: + +- relaxed cvref requirements of `is_homogeneous()`, `emplace()`, `emplace_back()`, `emplace_hint()` +- relaxed mantissa and digits10 requirements of extended float support + +

+ +## v3.1.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v3.1.0) 2022-04-22 + +#### Fixes: + +- fixed potential segfault when calling `at_path()` with an empty string +- fixed UB in internal unicode machinery (#144) (@kchalmer) +- fixed a number of spurious warnings with Clang 10 (#145, #146) (@chronoxor) + +#### Additions: + +- added `toml::array::for_each()` +- added `toml::table::for_each()` +- added config options `TOML_EXPORTED_CLASS`, `TOML_EXPORTED_MEMBER_FUNCTION`, `TOML_EXPORTED_STATIC_FUNCTION` & `TOML_EXPORTED_FREE_FUNCTION` +- added support for escape sequence `\e` when using `TOML_ENABLE_UNRELEASED_FEATURES` ([toml/790](https://github.com/toml-lang/toml/pull/790)) +- added support for more unicode in bare keys when using `TOML_ENABLE_UNRELEASED_FEATURES` ([toml/891](https://github.com/toml-lang/toml/pull/891)) + +#### Removals/Deprecations: + +- deprecated old `TOML_API` option in favour new `TOML_EXPORTED_X` options + (it will continue to work as it did before if none of the new function export options are defined) + +#### Build system: + +- meson: added `compile_library` option (@Tachi107) +- meson: added `ubsan_tests` and `ubsan_examples` options +- meson: use system dependencies where available when building tests (@Tachi107) + +

+ +## v3.0.1 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v3.0.1) 2022-01-13 + +This is a single-bugfix release to fix an ODR issue for people using header-only mode in multiple +translation units. If you aren't seeing linker errors because of `toml::array::insert_at()`, +this release holds nothing of value over v3.0.0. + +#### Fixes: + +- fixed erroneous use of `TOML_API` causing ODR issue (#136) (@Azarael) + +

+ +## v3.0.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v3.0.0) 2022-01-11 + +This release will be a major version bump, so it's ABI breaks all around. +Any changes that are likely to cause migration issues (API changes, build system breakage, etc.) are indicated with âš ️. + +#### Fixes: + +- âš ️ fixed `toml::table` init-list constructor requiring double-brackets +- âš ️ fixed `TOML_API` + extern templates causing linker errors in some circumstances +- âš ️ fixed incorrect `noexcept` specifications on many functions +- âš ️ fixed missing `TOML_API` on some interfaces +- fixed `toml::json_formatter` not formatting inf and nan incorrectly +- fixed a number of spec conformance issues (#127, #128, #129, #130, #131, #132, #135) (@moorereason) +- fixed an illegal table redefinition edge case (#112) (@python36) +- fixed documentation issues +- fixed GCC bug causing memory leak during parse failures (#123, #124) (@rsmmr, @ronalabraham) +- fixed incorrect handling of vertical whitespace in keys when printing TOML to streams +- fixed incorrect source position in redefinition error messages +- fixed missing includes ``, `` +- fixed parser not correctly round-tripping the format of binary and octal integers in some cases +- fixed some incorrect unicode scalar sequence transformations (#125) +- fixed strong exception guarantee edge-cases in `toml::table` and `toml::array` + +#### Additions: + +- added value flags to array + table insert methods (#44) (@levicki) +- added support for Unicode 14.0 +- added support for ref categories and cv-qualifiers in `toml::node::ref()` +- added magic `toml::value_flags` constant `toml::preserve_source_value_flags` +- added clang's enum annotation attributes to all enums +- added `TOML_ENABLE_FORMATTERS` option +- added `toml::yaml_formatter` +- added `toml::value` copy+move constructor overloads with flags override +- added `toml::table::prune()` +- added `toml::table::lower_bound()` (same semantics as `std::map::lower_bound()`) +- added `toml::table::emplace_hint()` (same semantics as `std::map::emplace_hint()`) +- added `toml::table::at()` (same semantics as `std::map::at()`) +- added `toml::node_view::operator==` +- added `toml::key` - provides a facility to access the source_regions of parsed keys (#82) (@vaartis) +- added `toml::is_key<>` and `toml::is_key_or_convertible<>` metafunctions +- added `toml::format_flags::relaxed_float_precision` (#89) (@vaartis) +- added `toml::format_flags::quote_infinities_and_nans` +- added `toml::format_flags::indent_sub_tables` (#120) (@W4RH4WK) +- added `toml::format_flags::indent_array_elements` (#120) (@W4RH4WK) +- added `toml::format_flags::allow_unicode_strings` +- added `toml::format_flags::allow_real_tabs_in_strings` +- added `toml::format_flags::allow_octal_integers` +- added `toml::format_flags::allow_hexadecimal_integers` +- added `toml::format_flags::allow_binary_integers` +- added `toml::date_time` converting constructors from `toml::date` and `toml::time` +- added `toml::at_path()`, `toml::node::at_path()` and `toml::node_view::at_path()` for qualified path-based lookups (#118) (@ben-crowhurst) +- added `toml::array::resize()` param `default_init_flags` +- added `toml::array::replace()` (#109) (@LebJe) +- added `toml::array::prune()` +- added `toml::array::at()` (same semantics as `std::vector::at()`) +- added `parse_benchmark` example +- added `operator->` to `toml::value` for class types + +#### Changes: + +- âš ️ `toml::format_flags` is now backed by `uint64_t` (was previously `uint8_t`) +- âš ️ `toml::source_index` is now an alias for `uint32_t` unconditionally (was previously dependent on `TOML_LARGE_FILES`) +- âš ️ `toml::table` now uses `toml::key` as the key type (was previously `std::string`) +- âš ️ `toml::value_flags` is now backed by `uint16_t` (was previously `uint8_t`) +- âš ️ made all overloaded operators 'hidden friends' where possible +- âš ️ renamed `toml::default_formatter` to `toml::toml_formatter` (`toml::default_formatter` is now an alias) +- âš ️ renamed `TOML_PARSER` option to `TOML_ENABLE_PARSER` (`TOML_PARSER` will continue to work but is deprecated) +- âš ️ renamed `TOML_UNRELEASED_FEATURES` to `TOML_ENABLE_UNRELEASED_FEATURES` (`TOML_UNRELEASED_FEATURES` will continue to work but is deprecated) +- âš ️ renamed `TOML_WINDOWS_COMPAT` to `TOML_ENABLE_WINDOWS_COMPAT` (`TOML_WINDOWS_COMPAT` will continue to work but is deprecated) +- applied clang-format to all the things 🎉️ +- exposed `TOML_NAMESPACE_START` and `TOML_NAMESPACE_END` macros to help with ADL specialization scenarios +- improved performance of parser +- made date/time constructors accept any integral types +- moved all implementation headers to `/impl` +- renamed all implementation headers to `.h` and 'source' headers to `.inl` +- updated conformance tests + +#### Removals: + +- âš ️ removed `toml::format_flags::allow_value_format_flags` +- âš ️ removed `TOML_LARGE_FILES` (it is now default - explicitly setting `TOML_LARGE_FILES` to `0` will invoke an `#error`) +- âš ️ removed unnecessary template machinery (esp. where ostreams were involved) +- removed unnecessary uses of `final` + +#### Build system: + +- âš ️ increased minimum required meson version to `0.54.0` +- disabled 'install' path when being used as a meson subproject (#114) (@Tachi107) +- fixed builds failing with meson 0.6.0 (#117) (@Tachi107) +- general meson improvements and fixes (#115) (@Tachi107) +- used `override_dependency` where supported (#116) (@Tachi107) + +

+ +## v2.5.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v2.5.0) 2021-07-11 + +#### Fixes: + +- fixed linkage error with windows compat mode +- fixed `TOML_CONSTEVAL` broken in MSVC (again) +- fixed minor documentation bugs +- fixed cmake project version being incorrect (#110) (@GiulioRomualdi) + +#### Additions: + +- added support for lowercase 't' and 'z' in datetimes (per spec) +- added natvis file to cmake install (#106) (@Ryan-rsm-McKenzie) +- added VS cpp.hint file to cmake install +- added metafunctions `is_container`, `is_chronological`, `is_value`, `is_node`, `inserted_type_of` + +#### Changes: + +- improved debug code size by removing unnecessary std::forwards and std::moves +- modernized the CMake build files (#102, #103, #105) (@friendlyanon) +- updated conformance tests + +

+ +## v2.4.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v2.4.0) 2021-05-19 + +#### Fixes: + +- fixed `node::value()` not retrieving inf and nan correctly +- fixed dotted kvps being unable to add subtables (#61) (@Validark) +- fixed linker error on linux ICC (#83) (@blackwer) +- fixed segfault JSON-formatting a failed `parse_result` (#96) (@proydakov) +- fixed spurious newline after JSON formatting a table +- fixed VS intellisense not detecting `TOML_COMPILER_EXCEPTIONS` correctly +- fixed crash with pathologically-nested inputs (#100) (@geeknik) +- fixed `parse_result` natvis +- fixed false-positive `char8_t` support detection on older compilers +- fixed unnecessary `#include ` Windows builds (@BeastLe9enD) +- fixed `TOML_CONSTEVAL` breaking on VS 16.10.0pre2 +- fixed spurious warnings with MSVC /Wall +- fixed missing blank lines between consecutive empty tables/A-o-T +- fixed unnecessary `TOML_API` declarations +- fixed many small documentation issues + +#### Additions: + +- added proper cmake support (#85) (@ClausKlein) +- added cmake FetchContent information to documentation (#101) (@proydakov) + +#### Removals: + +- removed explicit `#include ` requirement for `parse_file()` + +

+ +## v2.3.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v2.3.0) 2020-12-29 + +#### Fixes: + +- fixed compiler errors caused by `` with Apple-flavoured clang +- fixed array and table iterators missing `iterator_category` (#77) (@HazardyKnusperkeks) +- fixed `Wuseless-cast` warnings on GCC 10 (#75) (@HazardyKnusperkeks) +- fixed formatter not correctly line wrapping in some rare circumstances (#73) (@89z) +- fixed an unnecessary global compiler flag breaking builds when used as a meson subproject (#72) (@jamabr) +- fixed link error caused by `` on emscripten (#71) (@suy) +- fixed ambiguity with the `toml::literals` inline namespace (#69) (@std-any-emplace) +- fixed formatter emitting superfluous newlines after printing tables (#68) (@std-any-emplace) +- fixed array and table iterators not converting between const and non-const versions of themselves (#67) (@std-any-emplace) +- fixed some parser crashes when given pathologically-malformed UTF-8 (#65) (@sneves) + +

+ +## v2.2.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v2.2.0) 2020-08-09 + +#### Fixes: + +- fixed some issues building with VS2017 (#55) (@sobczyk) +- fixed `_Float16` erroneously detected as supported on g++ (#57) (@sobczyk) +- fixed `` causing compilation failure on mingw (#63) (@rezahousseini) +- fixed CMake and pkg-config files not being installed into architecture-agnostic directories (#59) (@tambry) +- fixed memory leak during parsing (#64) (@sneves) +- fixed ambiguous `operator==` error on MSVC (#56) (@HellsingDarge) + +#### Additions: + +- added additional node_view constructors +- added ability to specify serialization format of integer values +- added integer value serialization format round trip (e.g. hex in, hex out) + +#### Changes: + +- updated conformance tests +- TOML version bump to v1.0.0-rc.3 +- refactors and cleanups based on feedback given [here](https://medium.com/@julienjorge/code-review-of-toml-f816a6071120) + +#### Build system: + +- renamed build options to `snake_case` +- tests, examples and cmake config now explicitly disabled when used as a subproject +- removed small_binaries (it's now implicit when building as release) +- bumped minimum meson version to 0.53 + +

+ +## v2.1.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v2.1.0) 2020-07-11 + +#### Fixes: + +- fixed inconsistent emission of leading/trailing newlines when writing a table to an ostream (#48) (@levicki) +- fixed `Wcast-align` warning spam on ARM +- fixed `array::insert` not working correctly in some cases +- fixed `node::value_or()` not having the same semantics as `node::value()` (#50) (@whiterabbit963) +- fixed 'misleading assignment' of rvalue node_views (#52) (@Reedbeta) +- fixed some issues handling infinities and NaNs (#51) (@Reedbeta) +- fixed some minor documentation issues + +#### Additions: + +- added support for `__fp16`, `_Float16`, `__float128`, `__int128_t` and `__uint128_t` +- added copy construction/assignment for arrays, tables and values +- added insert, emplace, push_back etc. compatibility with node_views +- added `node::is_homogenous` +- added `table::is_homogenous` +- added `value::is_homogenous` (just for generic code's sake) +- added `is_homogenous` overload for identifying failure-causing element +- added implicit conversion operator from `node` to `node_view` (#52) (@Reedbeta) + +#### Changes: + +- renamed `TOML_ALL_INLINE` to `TOML_HEADER_ONLY` (the old name will still work, but is no longer documented) +- general cleanup + +

+ +## v2.0.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v2.0.0) 2020-07-20 + +This release contains a fairly significant number of 'quality of life' improvements, yay! But also necessitates an ABI +break (hence the version number bump). Changes that might block a migration are annotated with âš ️. + +#### Fixes: + +- fixed infinity and NaN-related code breaking when using `-ffast-math` and friends +- fixed narrowing conversion warnings when constructing int values from unsigned +- fixed Visual Studio debugger native visualizations for `date`, `time`, `time_offset`, `date_time` +- fixed some static assert messages being badly formatted on clang +- fixed internal macro `assert_or_assume` leaking out of `toml_parser.hpp` + +#### Additions: + +- added additional types allowed in `node::value()` and `node::value_or()` ([see `value()` dox for examples](https://marzer.github.io/tomlplusplus/classtoml_1_1node.html#ab144c1ae90338b6b03f6af0574c87993)) +- added additional types allowed in `node_view::value()` and `node_view::value_or()` +- added `node::value_exact()` and `node_view::value_exact()` +- added support for interop with wide strings on Windows: + - added wide-string path arg overloads of `parse()` and `parse_file()` + - added wide-string support to all relevant `table` and `array` ops + - added wide-string support to `node::value(), node::value_or()` + - added wide-string support to `node_view::value(), node_view::value_or()` + - added wide-string support to `value` constructor + - added wide-string overloads of `node_view::operator[]` + - added `source_region::wide_path()` + - added `TOML_WINDOWS_COMPAT` switch for explicitly enabling/disabling this stuff +- added emission of 'literal' strings to the TOML serializer +- added lots of minor documentation fixes and improvements +- added Visual Studio debugger native visualizations for `table`, `array`, `parse_result`, and `parse_error` (#46) (@Reedbeta) +- added non-template version of `array::is_homogeneous()` +- added explicit instantiations of more template types when `!TOML_ALL_INLINE` + +#### Changes: + +- âš ️ deprecated `parse_result::get()` in favour of `parse_result::table()` +- âš ️ deprecated `node_view::get()` in favour of `node_view::node()` +- âš ️ simplified internal ABI namespaces +- improved the quality of many static_assert error messages + +#### Removals: + +- âš ️ renamed `date_time::time_offset` to just 'offset' +- âš ️ removed `TOML_CHAR_8_STRINGS` since it no longer makes sense + +

+ +## v1.3.3 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v1.3.3) 2020-06-29 + +#### Fixes: + +- fixed some minor TOML spec conformance bugs +- fixed BOM check causing EOF on very short iostream inputs +- fixed `std::numeric_limits::max()` getting broken by macros in some environments +- fixed 'unknown pragma' warning spam in older versions of GCC +- fixed a few minor documentation issues + +#### Additions: + +- added rvalue overload of `array::flatten` +- added conformance tests from `BurntSushi/toml-test` and `iarna/toml-spec-tests` +- added `toml::inserter` as a workaround for nested construction of single-element `toml::arrays` performing move-construction instead +- added license boilerplate to test files + +#### Changes: + +- refactored the parser to reduce binary size + +

+ +## v1.3.2 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v1.3.2) 2020-06-19 + +#### Fixes: + +- fixed single-digit negative integers parsing as positive +- fixed parse failure when parsing an empty file +- fixed multi-line strings being allowed in keys +- fixed overflow for very long binary integer literals + +#### Changes: + +- improved the performance of toml::parse_file +- improved the performance of printing to streams for deepy-nested TOML data + +

+ +## v1.3.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v1.3.0) 2020-06-02 + +#### Fixes: + +- fixed `formatter::print_inline()` causing compilation failures in DLL builds +- fixed BOMs occasionally causing overflow/crash in char8 mode +- fixed some spurious warnings in GCC 10 +- fixed clang static analyzer warning in BOM handling code + +#### Additions: + +- added `table_iterator::operator ->` +- added `array::resize()` and `array::truncate()` +- added `array::capacity()`, `array::shrink_to_fit()`, `array::max_size()` +- added non-const -> const conversion for table and array iterators + +#### Changes: + +- renamed table iterator proxy pair members to `first` and `second` to match STL + +

+ +## v1.2.5 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v1.2.5) 2020-04-24 + +#### Fixes: + +- fixed some multi-line string parsing issues +- fixed pedantic warnings on gcc 10 and clang 11 +- fixed `is_unicode_XXXXXX` functions being wrong in some cases +- fixed `TOML_LIKELY` not being correct on older versions of gcc and clang +- fixed minor documentation issues (#26, #38) (@prince-chrismc) + +#### Additions: + +- added additional error message cases to the parser +- added `error_printer` example +- added `toml_generator` example + +#### Changes: + +- improved unicode-related codegen + +

+ +## v1.2.3 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v1.2.3) 2020-04-11 + +#### Fixes: + +- fixed printing of inf and nan +- fixed parser not handling floats with leading '.' characters +- fixed pedantic vtable warnings on clang with -Weverything +- fixed a number of documentation bugs +- fixed `TOML_UNRELEASED_FEATURES` default being 1 (it should have been 0) + +#### Additions: + +- added `TOML_PARSER` configuration option +- added `TOML_LIB_SINGLE_HEADER` indicator +- added doxygen page for the configuration options +- added SPDX-License-Identifiers around the place + +#### Changes: + +- split some header files up to make future maintenance easier +- refactored and greatly simplified parser + +

+ +## v1.2.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v1.2.0) 2020-04-07 + +#### Fixes: + +- fixed some parsing and printing ops being locale-dependent +- fixed some parsing errors at EOF when `TOML_EXCEPTIONS = 0` +- fixed some unreferenced variable warnings on older compilers +- fixed some 'maybe-uninitialized' false-positives on GCC9 +- fixed pkgconfig subdir being wrong + +#### Additions: + +- added support for implementations without `` +- added cmake package config generator (#22) (@GiulioRomualdi) +- added build config feature option `GENERATE_CMAKE_CONFIG` +- added many new tests + +

+ +## v1.1.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v1.1.0) 2020-04-03 + +#### Fixes: + +- fixed some parser error paths not returning early enough `TOML_EXCEPTIONS=0` +- fixed a number of minor documentation issues + +#### Additions: + +- added support for [TOML 1.0.0-rc.1](https://github.com/toml-lang/toml/releases/tag/v1.0.0-rc.1) 🎉 +- added `operator[]`, `begin()`, `end()` to `toml::parse_result` for `TOML_EXCEPTIONS=0` +- added additional compilation speed improvements for `TOML_ALL_INLINE=0` +- added more specific error messages for parsing errors relating to prohibited codepoints +- added a large number of additional tests +- added support for installation with meson (#16) (@ximion) +- added the array and table iterators to the `toml` namespace + +

+ +## v1.0.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/1.0.0) 2020-03-28 + +#### Fixes: + +- fixed minor documentation issues + +#### Changes: + +- refactoring of ABI-based inline namespaces + +

+ +## v0.6.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v0.6.0) 2020-03-24 + +#### Fixes: + +- fixed minor preprocessor/macro issues +- fixed minor documentation issues + +#### Additions: + +- added `` include directly in 'debug' builds when `TOML_ASSERT` isn't defined +- added Clang's `[[trivial_abi]]` attribute to `date`, `time`, `time_offset` + +

+ +## v0.5.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v0.5.0) 2020-03-18 + +#### Fixes: + +- fixed crash when reaching EOF while parsing a string when exceptions are disabled +- fixed some attribute warnings in GCC +- fixed build with GCC 8.2.0 (#15) (@shdnx) +- fixed exception mode detection sometimes being incorrect on MSVC +- fixed compilation on older implementations without `std::launder` +- fixed `json_formatter` type deduction on older compilers + +#### Additions: + +- added support for Unicode 13.0 +- added support for `\xHH` escape sequences ([toml/pull/796](https://github.com/toml-lang/toml/pull/796)) +- added short-form license preamble to all source files +- added build configuration option for compiling examples + +

+ +## v0.4.3 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v0.4.3) 2020-03-10 + +#### Fixes: + +- fixed ICE in VS2019 when using `/std:c++17` instead of `/std:c++latest` + +#### Additions: + +- added `#error` when `TOML_EXCEPTIONS` is set to `1` but compiler exceptions were disabled + +#### Changes: + +- parsing performance improvements + +

+ +## v0.4.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v0.4.0) 2020-03-05 + +#### Fixes: + +- fixed `parse_file()` failing to compile with plain string literals +- fixed tests being built when used as a meson subproject (#14) (@shdnx) + +#### Additions: + +- added support for compiling into DLLs on windows (`TOML_API`) +- added support for explicitly setting the `TOML_EXCEPTION` mode +- added `TOML_OPTIONAL_TYPE` customization point +- added `node::ref()` and `node_view::ref()` + +

+ +## v0.3.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v0.3.0) 2020-03-01 + +#### Fixes: + +- fixed some pedantic clang warnings +- fixed some minor documentation errors + +#### Additions: + +- added `node::value()` and `node::value_or()` +- added `node_view::value()` +- added relops for the date/time classes +- added `TOML_ALL_INLINE` and `TOML_IMPLEMENTATION` options +- added preliminary support for ICC + +#### Removals: + +- removed `` dependency + +

+ +## v0.2.1 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v0.2.1) 2020-02-26 + +#### Fixes: + +- fixed minor printing bug in `operator<<(ostream, source_position)` +- fixed minor documentation issues + +#### Additions: + +- added `operator<<(ostream&, parse_error)` + +#### Changes: + +- improved quality of error messages for boolean and inf/nan parsing + +

+ +## v0.2.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v0.2.0) 2020-02-23 + +#### Fixes: + +- fixed truncation of floating-point values when using ostreams +- fixed missing value deduction guides for dates and times +- fixed potential ODR issues relating to exception mode handling etc. +- fixed some documentation issues + +#### Additions: + +- added serialization round-trip tests +- added `node::is_number()` +- added `node_view::is_number()` +- added `node_view::value_or()` +- added hexfloat parsing support for all implementations (not just `` ones) + +

+ +## v0.1.0 + +[Released](https://github.com/marzer/tomlplusplus/releases/tag/v0.1.0) 2020-02-20 + +- First public release, yay! 🎉️ diff --git a/subprojects/tomlplusplus-3.3.0/CMakeLists.txt b/subprojects/tomlplusplus-3.3.0/CMakeLists.txt new file mode 100644 index 00000000..1179d375 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) + +project( + tomlplusplus + VERSION 3.3.0 + DESCRIPTION "Header-only TOML config file parser and serializer for C++17" + HOMEPAGE_URL "https://marzer.github.io/tomlplusplus/" + LANGUAGES CXX +) + +include(cmake/project-is-top-level.cmake) +include(cmake/variables.cmake) + +# ---- Declare library ---- + +add_library(tomlplusplus_tomlplusplus INTERFACE) +add_library(tomlplusplus::tomlplusplus ALIAS tomlplusplus_tomlplusplus) + +set_property( + TARGET tomlplusplus_tomlplusplus PROPERTY + EXPORT_NAME tomlplusplus +) + +target_include_directories( + tomlplusplus_tomlplusplus + ${tomlplusplus_warning_guard} # unquoted for list expansion + INTERFACE + "$" +) + +target_compile_features(tomlplusplus_tomlplusplus INTERFACE cxx_std_17) + +# ---- Install rules and examples ---- +if(PROJECT_IS_TOP_LEVEL) + include(cmake/install-rules.cmake) + option(BUILD_EXAMPLES "Build examples tree." OFF) + if(BUILD_EXAMPLES) + add_subdirectory(examples) + endif() +endif() diff --git a/subprojects/tomlplusplus-3.3.0/CODE_OF_CONDUCT.md b/subprojects/tomlplusplus-3.3.0/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..8f30d260 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at mark.gillard@outlook.com.au. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/subprojects/tomlplusplus-3.3.0/CONTRIBUTING.md b/subprojects/tomlplusplus-3.3.0/CONTRIBUTING.md new file mode 100644 index 00000000..f1170164 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/CONTRIBUTING.md @@ -0,0 +1,81 @@ +# Contributing to toml++ + +Contributions are very welcome! Either by [reporting issues] or submitting pull requests. +If you wish to submit a PR, please be aware that: + +- The single-header file `toml.hpp` is generated by a script; make your changes in the files in + `include`, **not** in `toml.hpp`. +- Your changes should compile warning-free on at least one of: + - GCC 8 or higher + - Clang 8 or higher + - MSVC 19.2X (Visual Studio 2019) or higher +- You should regenerate the single-header file as part of your PR (a CI check will fail if you don't). + +
+ +## Regenerating toml.hpp + +1. Make your changes as necessary + - If you've added a new header file that isn't going to be transitively included by one of the + others, add an include directive to `include/toml++/toml.h` +2. Install the prerequisite python packages: `pip3 install -r tools/requirements.txt` +3. Run `tools/generate_single_header.py` + +
+ +## Building and running the tests + +Testing is done using [Catch2]. + +### Testing on Windows with Visual Studio + +Install [Visual Studio] and [Test Adapter for Catch2], then open `toml++.sln` and build the +projects in the `tests` solution folder. Visual Studio's Test Explorer should pick these up and +allow you to run the tests directly. + +If test discovery fails you can usually fix it by enabling +`Auto Detect runsettings Files` (settings gear icon > `Configure Run Settings`). + +### Testing on Linux (and WSL) + +```bash +# install ninja, meson, locales (first time only) +sudo apt update && sudo apt install -y locales python3 python3-pip ninja-build +sudo pip3 install meson +sudo locale-gen 'en_US.utf8' \ + 'ja_JP.utf8' \ + 'de_DE.utf8' \ + 'it_IT.utf8' \ + 'tr_TR.utf8' \ + 'fi_FI.utf8' \ + 'fr_FR.utf8' \ + 'zh_CN.utf8' + +# create the build configs (first time only) +meson setup build-debug --buildtype=debug -Ddevel=true +meson setup build-release --buildtype=release -Ddevel=true + +# run the tests +cd build-debug && ninja && ninja test \ + && cd ../build-release && ninja && ninja test \ + && cd .. +``` + +> ℹ️ Pass `-Duse_vendored_libs=false` to Meson if you wish to use the system-installed version +> of Catch2 rather than the vendored one. + +
+ +## Testing with the [toml-test] suite + +As an optional extra you may wish to test against the 'official' test TOML test suite, [BurntSushi/toml-test]. See the +instructions at [toml-test/README](./toml-test/README.md). Note that the toml++ tests already consume tests from the +offical suite via a C++ code-generation script so you are not expected to take this extra step as part of contributing +to the library. + +[visual studio]: https://visualstudio.microsoft.com/vs/ +[test adapter for catch2]: https://marketplace.visualstudio.com/items?itemName=JohnnyHendriks.ext01 +[reporting issues]: https://github.com/marzer/tomlplusplus/issues +[catch2]: https://github.com/catchorg/Catch2 +[toml-test]: https://github.com/BurntSushi/toml-test +[burntsushi/toml-test]: https://github.com/BurntSushi/toml-test diff --git a/subprojects/tomlplusplus-3.3.0/LICENSE b/subprojects/tomlplusplus-3.3.0/LICENSE new file mode 100644 index 00000000..261cd615 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/LICENSE @@ -0,0 +1,16 @@ +MIT License + +Copyright (c) Mark Gillard + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +documentation files (the "Software"), to deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the +Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/subprojects/tomlplusplus-3.3.0/README.md b/subprojects/tomlplusplus-3.3.0/README.md new file mode 100644 index 00000000..117af5fb --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/README.md @@ -0,0 +1,353 @@ +[![banner](docs/images/banner.png)][homepage] +[![Releases](https://img.shields.io/github/v/release/marzer/tomlplusplus?style=flat-square)](https://github.com/marzer/tomlplusplus/releases) +[![C++17](docs/images/badge-C++17.svg)][cpp_compilers] +[![TOML](docs/images/badge-TOML.svg)][v1.0.0] +[![MIT license](docs/images/badge-license-MIT.svg)](./LICENSE) +[![ci](https://github.com/marzer/tomlplusplus/actions/workflows/ci.yaml/badge.svg?branch=master)](https://github.com/marzer/tomlplusplus/actions/workflows/ci.yaml) +[![Mentioned in Awesome C++](docs/images/badge-awesome.svg)](https://github.com/fffaraz/awesome-cpp) +[![Sponsor](docs/images/badge-sponsor.svg)](https://github.com/sponsors/marzer) +[![Gitter](docs/images/badge-gitter.svg)](https://gitter.im/marzer/tomlplusplus) +==== + +## toml++ homepage + +

+ ✨️ This README is fine, but the toml++ homepage is better. ✨️ +

+ +
+ +## Library features + +- Header-only (optional!) +- Supports the latest [TOML] release ([v1.0.0]), plus optional support for some unreleased TOML features +- Passes all tests in the [toml-test](https://github.com/BurntSushi/toml-test) suite +- Supports serializing to JSON and YAML +- Proper UTF-8 handling (incl. BOM) +- C++17 (plus some C++20 features where available, e.g. experimental support for [char8_t] strings) +- Doesn't require RTTI +- Works with or without exceptions +- Tested on Clang (6+), GCC (7+) and MSVC (VS2019) +- Tested on x64, x86 and ARM + +
+ +## Basic usage + +> ℹ️ _The following example favours brevity. If you'd prefer full API documentation and lots of specific code snippets +instead, visit the project [homepage]_ + +Given a [TOML] file `configuration.toml` containing the following: + +```toml +[library] +name = "toml++" +authors = ["Mark Gillard "] + +[dependencies] +cpp = 17 +``` + +Reading it in C++ is easy with toml++: + +```cpp +#include + +auto config = toml::parse_file( "configuration.toml" ); + +// get key-value pairs +std::string_view library_name = config["library"]["name"].value_or(""sv); +std::string_view library_author = config["library"]["authors"][0].value_or(""sv); +int64_t depends_on_cpp_version = config["dependencies"]["cpp"].value_or(0); + +// modify the data +config.insert_or_assign("alternatives", toml::array{ + "cpptoml", + "toml11", + "Boost.TOML" +}); + +// use a visitor to iterate over heterogenous data +config.for_each([](auto& key, auto& value) +{ + std::cout << value << "\n"; + if constexpr (toml::is_string) + do_something_with_string_values(value); +}); + +// you can also iterate more 'traditionally' using a ranged-for +for (auto&& [k, v] : config) +{ + // ... +} + +// re-serialize as TOML +std::cout << config << "\n"; + +// re-serialize as JSON +std::cout << toml::json_formatter{ config } << "\n"; + +// re-serialize as YAML +std::cout << toml::yaml_formatter{ config } << "\n"; + +``` + +You'll find some more code examples in the `examples` directory, and plenty more as part of the [API documentation]. + +
+ +## Adding toml++ to your project + +`toml++` comes in two flavours: Single-header and Regular. The API is the same for both. + +### ðŸ¦️ Single-header flavour + +1. Drop [`toml.hpp`] wherever you like in your source tree +2. There is no step two + +### ðŸ¨️ Regular flavour + +1. Clone the repository +2. Add `tomlplusplus/include` to your include paths +3. `#include ` + +### Conan + +Add `tomlplusplus/3.3.0` to your conanfile. + +### DDS + +Add `tomlpp` to your `package.json5`, e.g.: + +```plaintext +depends: [ + 'tomlpp^3.3.0', +] +``` + +> ℹ️ _[What is DDS?](https://dds.pizza/)_ + +### Tipi.build + +`tomlplusplus` can be easily used in [tipi.build](https://tipi.build) projects by adding the following entry to your `.tipi/deps`: + +```json +{ + "marzer/tomlplusplus": { } +} +``` + +### Vcpkg + +```plaintext +vcpkg install tomlplusplus +``` + +### Meson + +You can install the wrap with: + +```plaintext +meson wrap install tomlplusplus +``` + +After that, you can use it like a regular dependency: + +```meson +tomlplusplus_dep = dependency('tomlplusplus') +``` + +You can also add it as a subproject directly. + +### CMake FetchContent + +```cmake +include(FetchContent) +FetchContent_Declare( + tomlplusplus + GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git + GIT_TAG v3.3.0 +) +FetchContent_MakeAvailable(tomlplusplus) +``` + +> ℹ️ _[What is FetchContent?](https://cmake.org/cmake/help/latest/module/FetchContent.html)_ + +### Git submodules + +```plaintext +git submodule add --depth 1 https://github.com/marzer/tomlplusplus.git tomlplusplus +git config -f .gitmodules submodule.tomlplusplus.shallow true +``` + +> âš ️ The toml++ repository has some submodules of its own, but **they are only used for testing**! +> You should **not** use the `--recursive` option for regular library consumption. + +### Other environments and package managers + +The C++ tooling ecosystem is a fractal nightmare of unbridled chaos so naturally I'm not up-to-speed with all of the +available packaging and integration options. I'm always happy to see new ones supported, though! If there's some +integration you'd like to see and have the technical know-how to make it happen, feel free to +[make a pull request](./CONTRIBUTING.md). + +### What about dependencies? + +If you just want to consume `toml++` as a regular library then you don't have any dependencies to worry about. +There's a few test-related dependencies to be aware of if you're working on the library, though. +See [CONTRIBUTING] for information. + +
+ +## Configuration + +A number of configurable options are exposed in the form of preprocessor `#defines` Most likely you +won't need to mess with these at all, but if you do, set them before including toml++. + +| Option | Type | Description | Default | +|-----------------------------------|:--------------:|----------------------------------------------------------------------------------------------------------|------------------------| +| `TOML_ASSERT(expr)` | function macro | Sets the assert function used by the library. | `assert()` | +| `TOML_CALLCONV` | define | Calling convention to apply to exported free/static functions. | undefined | +| `TOML_CONFIG_HEADER` | string literal | Includes the given header file before the rest of the library. | undefined | +| `TOML_ENABLE_FORMATTERS` | boolean | Enables the formatters. Set to `0` if you don't need them to improve compile times and binary size. | `1` | +| `TOML_ENABLE_FLOAT16` | boolean | Enables support for the built-in `_Float16` type. | per compiler settings | +| `TOML_ENABLE_PARSER` | boolean | Enables the parser. Set to `0` if you don't need it to improve compile times and binary size. | `1` | +| `TOML_ENABLE_UNRELEASED_FEATURES` | boolean | Enables support for [unreleased TOML language features]. | `0` | +| `TOML_ENABLE_WINDOWS_COMPAT` | boolean | Enables support for transparent conversion between wide and narrow strings. | `1` on Windows | +| `TOML_EXCEPTIONS` | boolean | Sets whether the library uses exceptions. | per compiler settings | +| `TOML_EXPORTED_CLASS` | define | API export annotation to add to classes. | undefined | +| `TOML_EXPORTED_MEMBER_FUNCTION` | define | API export annotation to add to non-static class member functions. | undefined | +| `TOML_EXPORTED_FREE_FUNCTION` | define | API export annotation to add to free functions. | undefined | +| `TOML_EXPORTED_STATIC_FUNCTION` | define | API export annotation to add to static functions. | undefined | +| `TOML_HEADER_ONLY` | boolean | Disable this to explicitly control where toml++'s implementation is compiled (e.g. as part of a library).| `1` | +| `TOML_IMPLEMENTATION` | define | Define this to enable compilation of the library's implementation when `TOML_HEADER_ONLY` == `0`. | undefined | +| `TOML_OPTIONAL_TYPE` | type name | Overrides the `optional` type used by the library if you need [something better than std::optional]. | undefined | +| `TOML_SMALL_FLOAT_TYPE` | type name | If your codebase has a custom 'small float' type (e.g. half-precision), this tells toml++ about it. | undefined | +| `TOML_SMALL_INT_TYPE` | type name | If your codebase has a custom 'small integer' type (e.g. 24-bits), this tells toml++ about it. | undefined | + +> ℹ️ _A number of these have ABI implications; the library uses inline namespaces to prevent you from accidentally +linking incompatible combinations together._ + +
+ +## TOML Language Support + +At any given time the library aims to support whatever the [most recently-released version] of TOML is, with opt-in +support for a number of unreleased features from the [TOML master] and some sane cherry-picks from the +[TOML issues list] where the discussion strongly indicates inclusion in a near-future release. + +The library advertises the most recent numbered language version it fully supports via the preprocessor +defines `TOML_LANG_MAJOR`, `TOML_LANG_MINOR` and `TOML_LANG_PATCH`. + +### **Unreleased language features:** + +- [#516]: Allow newlines and trailing commas in inline tables +- [#562]: Allow hex floating-point values +- [#644]: Support `+` in key names +- [#671]: Local time of day format should support `09:30` as opposed to `09:30:00` +- [#687]: Relax bare key restrictions to allow additional unicode characters +- [#790]: Include an `\e` escape code sequence (shorthand for `\u001B`) +- [#796]: Include an `\xHH` escape code sequence +- [#891]: Allow non-English scripts for unquoted keys + +> ℹ️ _`#define TOML_ENABLE_UNRELEASED_FEATURES 1` to enable these features (see [Configuration](#Configuration))._ + +### 🔹️ **TOML v1.0.0:** + +All features supported, including: + +- [#356]: Allow leading zeros in the exponent part of a float +- [#567]: Control characters are not permitted in comments +- [#571]: Allow raw tabs inside strings +- [#665]: Make arrays heterogeneous +- [#766]: Allow comments before commas in arrays + +### 🔹️ **TOML v0.5.0:** + +All features supported. + +
+ +## Contributing + +Contributions are very welcome! Either by [reporting issues] or submitting pull requests. +If you wish to submit a pull request, please see [CONTRIBUTING] for all the details you need to get going. + +
+ +## License and Attribution + +toml++ is licensed under the terms of the MIT license - see [LICENSE]. + +UTF-8 decoding is performed using a state machine based on Bjoern Hoehrmann's '[Flexible and Economical UTF-8 Decoder]'. + +### With thanks to: + +- **[@beastle9end](https://github.com/beastle9end)** - Made Windows.h include bypass +- **[@bjadamson](https://github.com/bjadamson)** - Reported some bugs and helped design a new feature +- **[@bobfang1992](https://github.com/bobfang1992)** - Reported a bug and created a [wrapper in python](https://github.com/bobfang1992/pytomlpp) +- **[@GiulioRomualdi](https://github.com/GiulioRomualdi)** - Added cmake+meson support +- **[@jonestristand](https://github.com/jonestristand)** - Designed and implemented the `toml::path`s feature +- **[@kcsaul](https://github.com/kcsaul)** - Fixed a bug +- **[@levicki](https://github.com/levicki)** - Helped design some new features +- **[@moorereason](https://github.com/moorereason)** - Reported a whole bunch of bugs +- **[@mosra](https://github.com/mosra)** - Created the awesome [m.css] used to generate the API docs +- **[@ned14](https://github.com/ned14)** - Reported a bunch of bugs and helped design some new features +- **[@okureta](https://github.com/okureta)** - Reported a bug +- **[@prince-chrismc](https://github.com/prince-chrismc)** - Added toml++ to ConanCenter, and fixed some typos +- **[@rbrugo](https://github.com/rbrugo)** - Helped design a new feature +- **[@Reedbeta](https://github.com/Reedbeta)** - Fixed a bug and added additional Visual Studio debugger native visualizers +- **[@Ryan-rsm-McKenzie](https://github.com/Ryan-rsm-McKenzie)** - Add natvis file to cmake install script +- **[@shdnx](https://github.com/shdnx)** - Fixed a bug on GCC 8.2.0 and some meson config issues +- **[@sneves](https://github.com/sneves)** - Helped fix a number of parser bugs +- **[@sobczyk](https://github.com/sobczyk)** - Reported some bugs +- **[@std-any-emplace](https://github.com/std-any-emplace)** - Reported some bugs +- **[@Tachi107](https://github.com/Tachi107)** - Made some tweaks to meson.build, added compile_library build option +- **[@traversaro](https://github.com/traversaro)** - Added vcpkg support and reported a bunch of bugs +- **[@whiterabbit963](https://github.com/whiterabbit963)** - Fixed a bug with value_or conversions +- **[@ximion](https://github.com/ximion)** - Added support for installation with meson +- **[@a-is](https://github.com/a-is)** - Fixed a bug + +
+ +## Contact + +For bug reports and feature requests please consider using the [issues] system here on GitHub. For anything else +though you're welcome to reach out via other means. In order of likely response time: + +- Gitter: [marzer/tomlplusplus](https://gitter.im/marzer/tomlplusplus) ("Discord for repos") +- Twitter: [marzer8789](https://twitter.com/marzer8789) +- Email: [mark.gillard@outlook.com.au](mailto:mark.gillard@outlook.com.au) +- Facebook: [marzer](https://www.facebook.com/marzer) +- LinkedIn: [marzer](https://www.linkedin.com/in/marzer/) + +[API documentation]: https://marzer.github.io/tomlplusplus/ +[homepage]: https://marzer.github.io/tomlplusplus/ +[unreleased TOML language features]: #unreleased-language-features +[most recently-released version]: https://github.com/toml-lang/toml/releases +[char8_t]: https://en.cppreference.com/w/cpp/keyword/char8_t +[TOML]: https://toml.io/ +[TOML master]: https://github.com/toml-lang/toml/blob/master/README.md +[TOML issues list]: https://github.com/toml-lang/toml/issues +[v1.0.0]: https://toml.io/en/v1.0.0 +[CONTRIBUTING]: ./CONTRIBUTING.md +[LICENSE]: ./LICENSE +[Flexible and Economical UTF-8 Decoder]: http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ +[cpp_compilers]: https://en.cppreference.com/w/cpp/compiler_support +[reporting issues]: https://github.com/marzer/tomlplusplus/issues/new/choose +[issues]: https://github.com/marzer/tomlplusplus/issues +[#356]: https://github.com/toml-lang/toml/issues/356 +[#516]: https://github.com/toml-lang/toml/issues/516 +[#562]: https://github.com/toml-lang/toml/issues/562 +[#567]: https://github.com/toml-lang/toml/issues/567 +[#571]: https://github.com/toml-lang/toml/issues/571 +[#644]: https://github.com/toml-lang/toml/issues/644 +[#665]: https://github.com/toml-lang/toml/issues/665 +[#671]: https://github.com/toml-lang/toml/issues/671 +[#687]: https://github.com/toml-lang/toml/issues/687 +[#766]: https://github.com/toml-lang/toml/issues/766 +[#790]: https://github.com/toml-lang/toml/pull/790 +[#796]: https://github.com/toml-lang/toml/pull/796 +[#891]: https://github.com/toml-lang/toml/pull/891 +[something better than std::optional]: https://github.com/TartanLlama/optional +[m.css]: https://mcss.mosra.cz/documentation/doxygen +[`toml.hpp`]: https://raw.githubusercontent.com/marzer/tomlplusplus/master/toml.hpp diff --git a/subprojects/tomlplusplus-3.3.0/cmake/install-rules.cmake b/subprojects/tomlplusplus-3.3.0/cmake/install-rules.cmake new file mode 100644 index 00000000..22180255 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/cmake/install-rules.cmake @@ -0,0 +1,52 @@ +include(CMakePackageConfigHelpers) +include(GNUInstallDirs) + +install( + FILES "${PROJECT_SOURCE_DIR}/toml++.natvis" "${PROJECT_SOURCE_DIR}/cpp.hint" + DESTINATION "${CMAKE_INSTALL_DATADIR}/tomlplusplus" + COMPONENT tomlplusplus_Development +) + +install( + DIRECTORY "${PROJECT_SOURCE_DIR}/include/" + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" + COMPONENT tomlplusplus_Development +) + +install( + TARGETS tomlplusplus_tomlplusplus + EXPORT tomlplusplusTargets + INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}" +) + +write_basic_package_version_file( + tomlplusplusConfigVersion.cmake + COMPATIBILITY SameMajorVersion + ARCH_INDEPENDENT +) + +set( + tomlplusplus_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/tomlplusplus" + CACHE STRING "CMake package config location relative to the install prefix" +) + +mark_as_advanced(tomlplusplus_INSTALL_CMAKEDIR) + +install( + FILES + "${PROJECT_SOURCE_DIR}/cmake/tomlplusplusConfig.cmake" + "${PROJECT_BINARY_DIR}/tomlplusplusConfigVersion.cmake" + DESTINATION "${tomlplusplus_INSTALL_CMAKEDIR}" + COMPONENT tomlplusplus_Development +) + +install( + EXPORT tomlplusplusTargets + NAMESPACE tomlplusplus:: + DESTINATION "${tomlplusplus_INSTALL_CMAKEDIR}" + COMPONENT tomlplusplus_Development +) + +if(PROJECT_IS_TOP_LEVEL) + include(CPack) +endif() diff --git a/subprojects/tomlplusplus-3.3.0/cmake/project-is-top-level.cmake b/subprojects/tomlplusplus-3.3.0/cmake/project-is-top-level.cmake new file mode 100644 index 00000000..3435fc0e --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/cmake/project-is-top-level.cmake @@ -0,0 +1,6 @@ +# This variable is set by project() in CMake 3.21+ +string( + COMPARE EQUAL + "${CMAKE_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}" + PROJECT_IS_TOP_LEVEL +) diff --git a/subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfig.cmake b/subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfig.cmake new file mode 100644 index 00000000..ec9f7a00 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfig.cmake @@ -0,0 +1 @@ +include(${CMAKE_CURRENT_LIST_DIR}/tomlplusplusTargets.cmake) diff --git a/subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfig.cmake.meson.in b/subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfig.cmake.meson.in new file mode 100644 index 00000000..b007b685 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfig.cmake.meson.in @@ -0,0 +1,29 @@ +@PACKAGE_INIT@ + +# If tomlplusplus::tomlplusplus target is not defined it will be included +if(NOT TARGET tomlplusplus::tomlplusplus) + + if (@compile_library@) + set(imported_type UNKNOWN) + else() + set(imported_type INTERFACE) + endif() + + # Import tomlplusplus interface library + add_library(tomlplusplus::tomlplusplus ${imported_type} IMPORTED) + set_target_properties(tomlplusplus::tomlplusplus PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${PACKAGE_PREFIX_DIR}/@includedir@") + + # Require C++17 + target_compile_features(tomlplusplus::tomlplusplus INTERFACE cxx_std_17) + + # Set the path to the installed library so that users can link to it + if (@compile_library@) + set_target_properties(tomlplusplus::tomlplusplus PROPERTIES + IMPORTED_LOCATION "${PACKAGE_PREFIX_DIR}/@libdir@/@lib_name@" + ) + # compile_options not quoted on purpose + target_compile_options(tomlplusplus::tomlplusplus INTERFACE @compile_options@) + endif() + +endif() diff --git a/subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfigVersion.cmake.meson.in b/subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfigVersion.cmake.meson.in new file mode 100644 index 00000000..16b97493 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/cmake/tomlplusplusConfigVersion.cmake.meson.in @@ -0,0 +1,48 @@ +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version. +# The variable CVF_VERSION must be set before calling configure_file(). + +set(PACKAGE_VERSION "@version@") + +if (PACKAGE_FIND_VERSION_RANGE) + # Package version must be in the requested version range + if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN) + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + endif() +else() + if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed project requested no architecture check, don't perform the check +if("True") + return() +endif() + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "8" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8") + math(EXPR installedBits "8 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/subprojects/tomlplusplus-3.3.0/cmake/variables.cmake b/subprojects/tomlplusplus-3.3.0/cmake/variables.cmake new file mode 100644 index 00000000..3660bfbc --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/cmake/variables.cmake @@ -0,0 +1,18 @@ +# ---- Warning guard ---- + +# target_include_directories with the SYSTEM modifier will request the compiler +# to omit warnings from the provided paths, if the compiler supports that +# This is to provide a user experience similar to find_package when +# add_subdirectory or FetchContent is used to consume this project +set(tomlplusplus_warning_guard "") +if(NOT PROJECT_IS_TOP_LEVEL) + option( + tomlplusplus_INCLUDES_WITH_SYSTEM + "Use SYSTEM modifier for tomlplusplus's includes, disabling warnings" + ON + ) + mark_as_advanced(tomlplusplus_INCLUDES_WITH_SYSTEM) + if(tomlplusplus_INCLUDES_WITH_SYSTEM) + set(tomlplusplus_warning_guard SYSTEM) + endif() +endif() diff --git a/subprojects/tomlplusplus-3.3.0/cpp.hint b/subprojects/tomlplusplus-3.3.0/cpp.hint new file mode 100644 index 00000000..7dcca90c --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/cpp.hint @@ -0,0 +1,39 @@ +#define TOML_ABI_NAMESPACE_BOOL(...) static_assert(true) +#define TOML_ABI_NAMESPACE_END static_assert(true) +#define TOML_ABSTRACT_INTERFACE +#define TOML_ALWAYS_INLINE inline +#define TOML_ANON_NAMESPACE_END static_assert(true) +#define TOML_ANON_NAMESPACE_START namespace +#define TOML_API +#define TOML_ATTR(...) +#define TOML_CLOSED_ENUM +#define TOML_CLOSED_FLAGS_ENUM +#define TOML_CONST_GETTER +#define TOML_CONST_INLINE_GETTER inline +#define TOML_CONSTRAINED_TEMPLATE(cond, ...) template <__VA_ARGS__> +#define TOML_EMPTY_BASES +#define TOML_EXPORTED_CLASS +#define TOML_EXPORTED_FREE_FUNCTION +#define TOML_EXPORTED_MEMBER_FUNCTION +#define TOML_EXPORTED_STATIC_FUNCTION +#define TOML_EXTERNAL_LINKAGE +#define TOML_FLAGS_ENUM +#define TOML_HIDDEN_CONSTRAINT(cond, ...) template <__VA_ARGS__> +#define TOML_IMPL_NAMESPACE_END static_assert(true) +#define TOML_IMPL_NAMESPACE_START namespace toml::impl +#define TOML_INTERNAL_LINKAGE static +#define TOML_LIKELY(...) (__VA_ARGS__) +#define TOML_LIKELY_CASE +#define TOML_NAMESPACE_END static_assert(true) +#define TOML_NAMESPACE_START namespace toml +#define TOML_NEVER_INLINE +#define TOML_NODISCARD +#define TOML_NODISCARD_CTOR +#define TOML_OPEN_ENUM +#define TOML_OPEN_FLAGS_ENUM +#define TOML_PURE_GETTER +#define TOML_PURE_INLINE_GETTER inline +#define TOML_RETURNS_BY_THROWING +#define TOML_TRIVIAL_ABI +#define TOML_UNLIKELY(...) (__VA_ARGS__) +#define TOML_UNLIKELY_CASE diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/badge-C++17.svg b/subprojects/tomlplusplus-3.3.0/docs/images/badge-C++17.svg new file mode 100644 index 00000000..14d427e4 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/images/badge-C++17.svg @@ -0,0 +1 @@ + standardC++17 \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/badge-C++20.svg b/subprojects/tomlplusplus-3.3.0/docs/images/badge-C++20.svg new file mode 100644 index 00000000..92e9684c --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/images/badge-C++20.svg @@ -0,0 +1 @@ + standardC++20 \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/badge-TOML.svg b/subprojects/tomlplusplus-3.3.0/docs/images/badge-TOML.svg new file mode 100644 index 00000000..01db3c41 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/images/badge-TOML.svg @@ -0,0 +1 @@ +TOML: v1.0.0TOMLv1.0.0 \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/badge-awesome.svg b/subprojects/tomlplusplus-3.3.0/docs/images/badge-awesome.svg new file mode 100644 index 00000000..5d9da969 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/images/badge-awesome.svg @@ -0,0 +1 @@ +Mentioned in an Awesome list diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/badge-gitter.svg b/subprojects/tomlplusplus-3.3.0/docs/images/badge-gitter.svg new file mode 100644 index 00000000..08a42236 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/images/badge-gitter.svg @@ -0,0 +1 @@ +chat: on gitterchaton gitter \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/badge-license-MIT.svg b/subprojects/tomlplusplus-3.3.0/docs/images/badge-license-MIT.svg new file mode 100644 index 00000000..52456a74 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/images/badge-license-MIT.svg @@ -0,0 +1 @@ + licenseMIT \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/badge-sponsor.svg b/subprojects/tomlplusplus-3.3.0/docs/images/badge-sponsor.svg new file mode 100644 index 00000000..f3c196b8 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/images/badge-sponsor.svg @@ -0,0 +1 @@ +sponsor: â¤sponsor⤠\ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/banner.ai b/subprojects/tomlplusplus-3.3.0/docs/images/banner.ai new file mode 100644 index 00000000..dceba32a --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/images/banner.ai @@ -0,0 +1,2182 @@ +%PDF-1.5 %âãÏÓ +1 0 obj <>/OCGs[7 0 R 8 0 R 36 0 R 37 0 R 66 0 R 67 0 R 65 0 R 97 0 R 98 0 R 99 0 R 131 0 R 132 0 R 133 0 R 164 0 R 165 0 R 166 0 R 197 0 R 198 0 R 199 0 R 231 0 R 232 0 R 233 0 R 265 0 R 266 0 R 267 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + toml-banner + + + Adobe Illustrator CC 23.0 (Windows) + 2022-09-07T16:13:54+03:00 + 2022-09-07T16:56+03:00 + 2022-09-07T16:56+03:00 + + + + 256 + 76 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgATAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8ANs6p5t2KvD9Q/wB77n/j K/8AxI5cHHKHwodirsVdir2Hyn/yjlh/xiH6zlUubfHkm+RZPa/y0/5Q6z/1pv8Ak62aDXf3p+H3 O60f92GUZiOU7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXzZnVPNvFtXn nGq3oEjACeWgqf5zlwcc80D13OFDWKuxV2KuxVeJplFBIwA6AE4EvY/LZJ0DTyTUmBKk/wCrlR5t 8eT338tP+UOs/wDWm/5OtnP67+9Pw+53ej/uwyjMRynYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq+bM6p5tC/lJ+U3lbzv/iC61l7lZbO/aKL6vIqDi1WNeSP3zD1urniIEa3 Dk6PSxyAmXe9C/6Fh/Lf/fuo/wDI+P8A6pZhfynl8nM/k3H5u/6Fh/Lf/fuo/wDI+P8A6pY/ynl8 l/k3H5u/6Fh/Lf8A37qP/I+P/qlj/KeXyX+Tcfm+e/zU8sab5X8+6poWmGQ2Vn6HpGZg7/vbeOVq sAo+057ZuNLlOTGJHmf1up1OMQyGI5MTzIcd2KvZfLP/ACj+nf8AGCP/AIjlJ5uRHk9+/LT/AJQ6 z/1pv+TrZz+u/vT8Pud3o/7sMozEcp2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KvmzOqebYFoH5p+bPJd5q1rokkKRXd28swliEh5KxUUJO22QzaWGWjJcWpnjsRZt5F/P38w 9Z85aNpV7NbG0vruKCcJAqsUdgDQ12zEz6DHGBIuwHKw67JKYB6l9B+cNTutK8pa3qdoQLqwsLq5 tyw5KJIYWdKjuOS5p8MRKYB6kO2yyMYEjoC+X/8AoZT8z/8Af9p/0jr/AFze/wAm4vN0n8oZfJgH mjzLqnmbXbnW9UZGv7vh6zRrwX93GsS0UdPhQZmYsYhHhHIOLkyGcuI80qyxrdir2Xyz/wAo/p3/ ABgj/wCI5SebkR5Pfvy0/wCUOs/9ab/k62c/rv70/D7nd6P+7DKMxHKdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdir5szqnm3ier/8da9/4zy/8TOXBxzzT78q/wDyZHlr/to2 /wDycGUar+6l7m7Tf3kfe+wPzF/8l95n/wC2Tff9Qz5zmn/vI/1h970Go/u5f1T9z488geSLzzX5 j0/TCJraxvHdH1BIWkROCM3X4V6rTrnR6jOMcSeoefwYTOQHQpt+an5WXPknWorG0kn1O0e0W7lv fQKIhaSRChKl12EYO575XpdUMsbOxts1OmOOVDfZBflt+Xt35w8xWmmymeysLlJW/SCwmRAYkY0B JVTVl49cnqdQMcSeZ7mGnwHJIDkFX8zfy3uvJvmCXToGnv7KKGOVr8wFEBk6gkF1FD74NNqRkjfI p1OnOOVcwzDyz/yj+nf8YI/+I5YeaI8nv35af8odZ/603/J1s5/Xf3p+H3O70f8AdhlGYjlOxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV82Z1TzbxPV/+Ote/8Z5f+JnLg455 p9+Vf/kyPLX/AG0bf/k4Mo1X91L3N2m/vI+99gfmL/5L7zP/ANsm+/6hnznNP/eR/rD73oNR/dy/ qn7niX/OPf5p29mumeRDpzvLd3E7i/EoCryUyf3fGp+xT7WbTtDSk3kvk63Qamqx0yr8+/zUt9Bt 7zyc+nPcS6xpjOt4JQqx+u0kO6cTWnp165j6DSmZE75Fv12p4bhXMJN/zj1+advJbaN5A/RziaJL p/0h6o4mry3P93xr0bj9rLe0NKbOS+79TXoNTsMdd/60R/zkF+advZ22qeRDpzvLd28Li/EoCryd ZP7vjU/Yp9rI9n6UkjJfJOu1NA46Yd5Z/wCUf07/AIwR/wDEc2x5uujye/flp/yh1n/rTf8AJ1s5 /Xf3p+H3O70f92GUZiOU7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXzZn VPNvE9X/AOOte/8AGeX/AImcuDjnmn35V/8AkyPLX/bRt/8Ak4Mo1X91L3N2m/vI+99gfmL/AOS+ 8z/9sm+/6hnznNP/AHkf6w+96DUf3cv6p+58K51bzDsVdirsVey+Wf8AlH9O/wCMEf8AxHKTzciP J79+Wn/KHWf+tN/ydbOf1396fh9zu9H/AHYZRmI5TsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVfNmdU828T1f/jrXv/GeX/iZy4OOeaJ8q65+gPMmm616H1n9HXEdx9X5enz9 NuXHnR+NfGhyGWHHEx72eKfDIS7nsHmP/nJ/9M+XtU0f/DXofpK0ntPX+vc+HrxNHz4/V15ceVaV Ga3H2ZwyEuLke79rsMnaXFEjh5jv/Y8KzbOrdirsVdir2Xyz/wAo/p3/ABgj/wCI5SebkR5Pfvy0 /wCUOs/9ab/k62c/rv70/D7nd6P+7DKMxHKdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdir5szqnm0km8l+Wppnmks+UkjF3b1JRVmNSdnyXEWPCHlF5Gkd3PGgoiSMqjwAYgZY 0lRwodirsVdir0ny95Q8u3ei2dzcWnOeWMNI/qSipr4BgMrMi3RiKZVbW0Nrbx28C8IYlCRrUmij YCpqcize4flp/wAodZ/603/J1s5/Xf3p+H3O60f92GUZiOU7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXl/8AyB7/AIs/6es2/wDhX4p1n+Dfi3f8ge/4s/6esf8ACvxS/wCD fi2E3H/Qp/ryetz9Xk3qf8db7Vd+m3XJf4Z+OFr/AME/HEs/6xJ/y/8Aub4/4Z+OFf8ABPxxO/6x J/y/+5vj/hn44V/wT8cTv+sSf8v/ALm+P+GfjhX/AAT8cTv+sSf8v/ub4/4Z+OFf8E/HEy7Sv+VH fo6D9Hep9S4/uP8Aez7P+z+L78ifzX44WY/Lfi0X/wAge/4s/wCnrH/CvxSf8G/Fs78r/oX9Cwfo Wv6Oq/pcuda8zy+38X2q5rtRx8Z4/qc7Dw8Pp5JrlLa7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FX/9k= + + + + proof:pdf + uuid:65E6390686CF11DBA6E2D887CEACB407 + xmp.did:1ae51725-ff00-b141-90e0-f817e42ff815 + uuid:4e43f135-b3db-4ac9-b557-bde286ffd245 + + xmp.iid:5570a217-d8c0-2f45-aba7-0d76b8c47f45 + xmp.did:5570a217-d8c0-2f45-aba7-0d76b8c47f45 + uuid:65E6390686CF11DBA6E2D887CEACB407 + proof:pdf + + + + + saved + xmp.iid:b83112e6-012d-3948-9314-fc73643b718f + 2020-02-25T23:22:59+02:00 + Adobe Illustrator CC 22.1 (Windows) + / + + + saved + xmp.iid:1ae51725-ff00-b141-90e0-f817e42ff815 + 2022-09-07T16:13:54+03:00 + Adobe Illustrator CC 23.0 (Windows) + / + + + + + + + EmbedByReference + + D:\Repositories\tomlplusplus\docs\images\logo.ai + xmp.did:76ecb5d0-0c0b-7e4b-b891-4dbb246228bd + uuid:9c54a817-4ce5-4a64-99ce-c0de4cc76998 + + + + + + + + D:\Repositories\tomlplusplus\docs\images\logo.ai + xmp.did:76ecb5d0-0c0b-7e4b-b891-4dbb246228bd + uuid:9c54a817-4ce5-4a64-99ce-c0de4cc76998 + + + + Web + Document + 1 + False + False + + 1280.000000 + 400.000000 + Pixels + + + + + MyriadPro-Bold + Myriad Pro + Bold + Open Type + Version 2.062;PS 2.000;hotconv 1.0.57;makeotf.lib2.0.21895 + False + MYRIADPRO-BOLD.OTF + + + MyriadPro-BoldCond + Myriad Pro + Bold Condensed + Open Type + Version 2.062;PS 2.000;hotconv 1.0.57;makeotf.lib2.0.21895 + False + MYRIADPRO-BOLDCOND.OTF + + + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 0 + 0 + 0 + + + RGB Red + RGB + PROCESS + 255 + 0 + 0 + + + RGB Yellow + RGB + PROCESS + 255 + 255 + 0 + + + RGB Green + RGB + PROCESS + 0 + 255 + 0 + + + RGB Cyan + RGB + PROCESS + 0 + 255 + 255 + + + RGB Blue + RGB + PROCESS + 0 + 0 + 255 + + + RGB Magenta + RGB + PROCESS + 255 + 0 + 255 + + + R=193 G=39 B=45 + RGB + PROCESS + 193 + 39 + 45 + + + R=237 G=28 B=36 + RGB + PROCESS + 237 + 28 + 36 + + + R=241 G=90 B=36 + RGB + PROCESS + 241 + 90 + 36 + + + R=247 G=147 B=30 + RGB + PROCESS + 247 + 147 + 30 + + + R=251 G=176 B=59 + RGB + PROCESS + 251 + 176 + 59 + + + R=252 G=238 B=33 + RGB + PROCESS + 252 + 238 + 33 + + + R=217 G=224 B=33 + RGB + PROCESS + 217 + 224 + 33 + + + R=140 G=198 B=63 + RGB + PROCESS + 140 + 198 + 63 + + + R=57 G=181 B=74 + RGB + PROCESS + 57 + 181 + 74 + + + R=0 G=146 B=69 + RGB + PROCESS + 0 + 146 + 69 + + + R=0 G=104 B=55 + RGB + PROCESS + 0 + 104 + 55 + + + R=34 G=181 B=115 + RGB + PROCESS + 34 + 181 + 115 + + + R=0 G=169 B=157 + RGB + PROCESS + 0 + 169 + 157 + + + R=41 G=171 B=226 + RGB + PROCESS + 41 + 171 + 226 + + + R=0 G=113 B=188 + RGB + PROCESS + 0 + 113 + 188 + + + R=46 G=49 B=146 + RGB + PROCESS + 46 + 49 + 146 + + + R=27 G=20 B=100 + RGB + PROCESS + 27 + 20 + 100 + + + R=102 G=45 B=145 + RGB + PROCESS + 102 + 45 + 145 + + + R=147 G=39 B=143 + RGB + PROCESS + 147 + 39 + 143 + + + R=158 G=0 B=93 + RGB + PROCESS + 158 + 0 + 93 + + + R=212 G=20 B=90 + RGB + PROCESS + 212 + 20 + 90 + + + R=237 G=30 B=121 + RGB + PROCESS + 237 + 30 + 121 + + + R=199 G=178 B=153 + RGB + PROCESS + 199 + 178 + 153 + + + R=153 G=134 B=117 + RGB + PROCESS + 153 + 134 + 117 + + + R=115 G=99 B=87 + RGB + PROCESS + 115 + 99 + 87 + + + R=83 G=71 B=65 + RGB + PROCESS + 83 + 71 + 65 + + + R=198 G=156 B=109 + RGB + PROCESS + 198 + 156 + 109 + + + R=166 G=124 B=82 + RGB + PROCESS + 166 + 124 + 82 + + + R=140 G=98 B=57 + RGB + PROCESS + 140 + 98 + 57 + + + R=117 G=76 B=36 + RGB + PROCESS + 117 + 76 + 36 + + + R=96 G=56 B=19 + RGB + PROCESS + 96 + 56 + 19 + + + R=66 G=33 B=11 + RGB + PROCESS + 66 + 33 + 11 + + + + + + Grays + 1 + + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + R=26 G=26 B=26 + RGB + PROCESS + 26 + 26 + 26 + + + R=51 G=51 B=51 + RGB + PROCESS + 51 + 51 + 51 + + + R=77 G=77 B=77 + RGB + PROCESS + 77 + 77 + 77 + + + R=102 G=102 B=102 + RGB + PROCESS + 102 + 102 + 102 + + + R=128 G=128 B=128 + RGB + PROCESS + 128 + 128 + 128 + + + R=153 G=153 B=153 + RGB + PROCESS + 153 + 153 + 153 + + + R=179 G=179 B=179 + RGB + PROCESS + 179 + 179 + 179 + + + R=204 G=204 B=204 + RGB + PROCESS + 204 + 204 + 204 + + + R=230 G=230 B=230 + RGB + PROCESS + 230 + 230 + 230 + + + R=242 G=242 B=242 + RGB + PROCESS + 242 + 242 + 242 + + + + + + Web Color Group + 1 + + + + R=63 G=169 B=245 + RGB + PROCESS + 63 + 169 + 245 + + + R=122 G=201 B=67 + RGB + PROCESS + 122 + 201 + 67 + + + R=255 G=147 B=30 + RGB + PROCESS + 255 + 147 + 30 + + + R=255 G=29 B=37 + RGB + PROCESS + 255 + 29 + 37 + + + R=255 G=123 B=172 + RGB + PROCESS + 255 + 123 + 172 + + + R=189 G=204 B=212 + RGB + PROCESS + 189 + 204 + 212 + + + + + + + Adobe PDF library 15.00 + 21.0.0 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 10 0 obj <>/Resources<>/ExtGState<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 273 0 R/TrimBox[0.0 0.0 1280.0 400.0]/Type/Page>> endobj 269 0 obj <>stream +H‰ÔTÛnÛ0 }×Wð1Faš”D]^ë†Å0¿­Å¤M[ I×dOûúÑvš8Žû3`^Žt¨CIPuWC5¯ ®¿Ô`næjªâªêË=ÚÕ +ì—[SÝêÈóÞ°$ðõÿîɬ ¡ËVçòj“õ=å¸-¤VIH¤£N³~°Ü˜v¨µe[gmBĘâ8³Ñ!¥¤ˆäËÜ9 Ö é#€4|Qßr\ ìÓ'r>*8‹á¬äpA£ä >¡K2ÊNB¸Ý‘ñÙ$èˆ0y”Hn¨‰îŸd­à½µ@ÈW Œ Sæ)äH*µ“§©íòì1d-Å)¡x>)+YPO»%ÂÞ¶õ<º y7Õg½*çqÉÙÊ`ærðÇÅ.#‡ñÅñ aôÚÇÝÏucª†µ 5+ÖúîÔ «îö̉4ósö§˜½mÖWWÅCóµãqÏóÒÑÔu,«· è%ìXM¡üÙÝü,ß¶÷äâ3ü^ìöO;XlAýëbýú·ˆ0ShU$]bõa›æì}±ƒ'çŸÅê% +endstream endobj 273 0 obj <>stream +8;Z\63tfLT#]-?s4rsohm<&Jt%jnK)"e-\\%PpZ7]!H9@mjg.[WeaV(@EI_E"#W6K +&JmW07P>_%K9aQHUF#_$H@JAn +endstream endobj 274 0 obj [/Indexed/DeviceRGB 255 275 0 R] endobj 275 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 265 0 obj <> endobj 266 0 obj <> endobj 267 0 obj <> endobj 280 0 obj [/View/Design] endobj 281 0 obj <>>> endobj 278 0 obj [/View/Design] endobj 279 0 obj <>>> endobj 276 0 obj [/View/Design] endobj 277 0 obj <>>> endobj 263 0 obj <> endobj 264 0 obj <> endobj 283 0 obj <> endobj 284 0 obj <> endobj 285 0 obj <>stream +H‰|T{TgŸ!™ hœm‡ìf43í¶k­ +V4.§.TÔ]NQkå¡‘MÁ’˜ B +WðτǪDTDªPA×µÊ]]këúXTv»­ìJ—­ìáýس;¡ý£í™sî¹ïûÝ{ß½ƒcÒ Çqå–ø ±Ñë–l>hÒk´ñ&ã²c†v­Ñ õG9a.Ì— + å zU}—òÝ»Üø L½øÕ‚@.“à¸ôÑ?Òvé×3E€½û,ü+–úåÊY¹z)¿bùòå³r%­5îÑñ ÍÝ~3¿Éj4eM‹NÊGgdð³fÞ¤3ëLV¿óû²x½™×é-ût&^#÷êÅû&–·˜4ZÝ~)7ú#?2ÓþO*^oàE,~›Aï·,¢ÓÌk Ú0Å8›%ÕxÀ`1éuæÐ°Ø„­3uü/y­. ÃpñÃäö +†-ñå¶ +Ãb0l{Ã6cد°KÄðæ }ñ˜û{ŒÇã­ø`@x€9àk‰Zb—ΑÆJ“¤§¤ß‰D7@F‘SCÂø.ÊW†$R¡t:~¦”„*t•A‘PKÀ‰xô[üÆLl†L™Õ!‰6)\büò[²S°«Ý +ÖG8Ô=‘@àceD@²>+d +}[‚œ)9d*9À¾¹å:¬‚7oݸëk-.jæèž èÛuöôºd)ÐK¯¡´õz ¢û{jê¼e¯‰0lï‚Br5®€E ÃHARPê†wP´uZm >%\§3k‘{¦ÕR‘ÛP)A÷ä¨sß*ˆ +,%?¼—󧃣۠ô§ˆ#éÌÄÿ¨ ’ `¯ºU=êüâgNÒãYݸ- +ˆ§ä5(n¼äyÜð¹*_{då‘w©/@ +{€Ä‡¨œŽ9…£8´y©aÌÿê9Ô@h2l@j®‘̰‡GsÐB뢄í†âW}¹ÄQíVaæá E(DSófH4æ’”Ïñ,Êê³Bá“ãÁ^xa:RÃ3ažD‹cäU¿YAxNœt÷²Ÿtµ\¾ IÊñb”tʪßm¾{®×ÛsLUEÒ‘5‰„HMÉ©²³½JÚ‹˜>¦°¼¨¬He(´Ø°¶LÏ…?þ¾ù\%G­/ž‚³S¸B$p $LQÞ¡ÒlvKÚå/G{†¯w´”vs­Ï —ÝX“Á"vÅËh +Y/ôœªu5r”cêWVAØn ADEAçBçôF•–ɺìY»Ùˆ¨Õ(’£Ñ H6y¾××íñ™[³•‚,ë/»< ÎËÄŠ™Æ^ž_Z¤Òdæ°{Mƒc[o kÉÜ„sVä*©cÅ“OAúL,š†@˜+óïdœMNïGJX¼åñË(`Õb–}ÊÁ‹u§T9'ætGûnJ×½rî©t°Òsýc¶·egGñâËðc“Sù¶àÛbõ÷!)DàGÇÔ2z¬Sv®åÌù–¦²Ãõ*ú~ó·=æÊΪֳɚÜýFN›úáŽeö¦Ð›3¼ŒBIÏ'žC÷·¯‚$ø0@ˆ`#Â"ø+C_s^¬êW!I½O”‘g²ÓÛµìÑKÑjtÉïéöœlåœûɨ¬]›tu f•ùDîG}ŽöÎ¥¶îÓ\ï™¶«ÿV"¼(r”[’¯Ê*8$r¤ËøúÏÞŸt4e[]\UÓnWR(Rl*Ïö~.nåÀlWëC„<‘à<ÙéXfoºqW%GiÊON³gOø>.çèûç ]:…Ö´[§7Úpñšd@œÓéþíûC»ÿ³p“"b¿?FŠÀeÞª–#õ*_§¹ƒ=SŸº‡C×Ä1¿%<ínèM–Τ*#éþ¢+"Hg’3i»’:㘀kþÁÒ?|¡„y=l Z‡Â? ƒ »@ Án‹G\ù"¦ß­Þ¸6?bw’ý³'·êG/pzË +qSÐ7Ëw¿˜O +!ôH?Úʈz®“´47eß{1°`ñÉi¦T'2î/„ô²3^I€ÂÌ4T6V׫:«½Þ6¶·óýÐÈœ ɹ9µ' +¸’ú²æ%õšØ¾8Û…¶c¶Îï­ô÷N’þ´Íé9âV 5õx»Xw]Ey-G×#£+EE•yì¾Tã{Vî0I-º3K@²s{¢’Š-þ†ÿ‰ùiK¼LNÇ…ü>ö_Ÿ_ž¸’yqm—|<¿±]ÙÑÜÖ}¬³0ß«ê|F4f¥×ïaÇm OiÛñ0…;gj:dR²sõìmjÈVQšŠ)èš +öÀMtèQOÜœBkªHw›÷d‹/¾ AFü ð°¤TVmûàPf =ŠäÈ@PÏ~Ø[›DBôøì6€t†Xyèp«l ­ïÎYŸÃÑ©¢G<Ï z¼!KS›Ä¢õ©ˆŠã²~XGí´ºm«‡%µ]M3ÉÕ¤æB+]3©µ½®¶zY¾{ZÝ€RÜætÏXj…·](Î5ct÷»|® Uûîõ…Mÿ•ÍÅ\PTËçUÊ)!a¾°ùŸ\•êJ +endstream endobj 282 0 obj <> endobj 286 0 obj <>stream +H‰|PoHa¾×Í;­5K=‹&Û EjÍKR¿¦ZÚH¥ÓV;u¨;wwÍ %ŠiNšÙ™fÍ@¨Ä jV…DF EDRßÚ‡„èËïÖ;¨Û$èSïžç÷üþñ"JC!„RjêÊ­î©ì6»Uà3÷óíöˆcR HIÖ*©:–ä“‘Tmð—+^$ÀÛ-_C=‰T BŸ¾•ðjcK«„s -ææE1ߌ-999QÌÃÅvþ‡«»E‰ëq¹ó4/tò‚MâìY¸¸½GGˆXàDNpG’ëç`‡ˆ9‡ÔÊ Ø¦š-µ_àìXlv®Ã&´a>âü#›ÿ³ +;œX…kŽˆª–Ô¤ˆmN{¶:…n9ÍŸqJ‚ƒ³²Ëªkº;9\€í\3¥>UIUQVª–¢ÕS©D ¡t M*žK‹Ê÷E¤âÎEÍ%­â YÃFÈK–Á•XÒ“ç,DDx” ÓQEDÕ´òŒ0Qz%8åWwM^e–%NÂeG\kà.H8p2zðO¹Cõ]h Ìš¥0‡ê‰™Ö‡~L¹=$œïJ\‚ô¿‘œšPkÒé¤Ïð€¹6> endobj 271 0 obj [/ICCBased 287 0 R] endobj 287 0 obj <>stream +H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤  + 2y­.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ +V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= +€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ßÞô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(ЇR¡,¨*T2B-Ð +¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…寒°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 +N'çÎ)Î].ÂuæJ¸rî +î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö +n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîƕƩºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_pß¶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ +¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû +endstream endobj 270 0 obj <> endobj 288 0 obj <> endobj 289 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 17.0 +%%AI8_CreatorVersion: 23.0.1 +%%For: (Mark Gillard) () +%%Title: (banner.ai) +%%CreationDate: 9/7/2022 4:56 PM +%%Canvassize: 16383 +%%BoundingBox: 158 -1276 1215 -970 +%%HiResBoundingBox: 158 -1276 1215 -970 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%DocumentFiles:D:\Repositories\tomlplusplus\docs\images\logo.ai +%AI5_FileFormat 13.0 +%AI12_BuildNumber: 540 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0 0 0 ([Registration]) +%AI3_Cropmarks: 0.000000000000909 -1322 1280 -922 +%AI3_TemplateBox: 640.5 -320.5 640.5 -320.5 +%AI3_TileBox: 219.055114746094 -1419.63778686523 1060.97509765625 -824.317779541016 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 6 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 3 +%AI9_OpenToView: -960 168 1 3338 1967 18 1 0 116 129 0 0 0 1 1 0 0 1 0 0 +%AI5_OpenViewLayers: 377 +%%PageOrigin:240 -620 +%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 290 0 obj <>stream +%%BoundingBox: 158 -1276 1215 -970 +%%HiResBoundingBox: 158 -1276 1215 -970 +%AI7_Thumbnail: 128 40 8 +%%BeginData: 4801 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C455B5A5A5A5B5A5A5A2F060D060D070D060D070D060D070D060D070D +%062F5A5A5A5B5A5A5A85FD5BFFFD085A07070607060D0607060D0607060D +%0607060D060707FD085AFD5BFF5A5A5B5A5A5A5B5A2F060D060D060D060D +%060D060D060D060D060D062F5A5B5A5A5A5B5A5AAFFD5AFF5A5A36FD055A +%070606070607060706070607060706070607060707FD055A365A5AFD5BFF +%5A5A5B5A5A0D302F2F060D070D060D070D060D070D060D070D060D062F2F +%302F5A5A5B5A5AAFFD5AFFFD045A0D0606070607060D0607060D0607060D +%0607060D0607060D060706070DFD045AFD5BFF5B5A5A5A30060D060D060D +%060D060D060D060D060D060D060D060D060D060D06305A5A5A5BFD5BFF36 +%5A5A5A0D0706070607060706070607060706070607060706070607060706 +%060DFD045AFD5BFF5B5A5A5A300607060D0607060D0607060D0607060D07 +%0D060D070D060D070D06305A5A5A85FD5BFFFD045A0D0DFD0E2F0D0D0607 +%060D0607060D06060DFD045AFD5BFF5A5A5B5A2F2FFD0FFF060D060D060D +%060D060D062F5A5B5A5AAFFD5AFF5A5A365A072FFD0FFF0D060706070607 +%060706070D5A365A5AFD5BFF5A5A5B5A2F2FFD0FFF070D070D060D070D06 +%0D062F5A5B5A5AAFFD5AFFFD045A072FA8FFA8A9A8FD05FFA8AFA8FFA80D +%060D0607060D060706070DFD045AFD5BFF5B5A5A5A30062F062F070D7EFF +%FFFF5A0D072F062F060D060D060D060D060D06305A5A5A5BFD5BFF365A5A +%5A0D07060706070684FFFFFF5A010706070607060706070607060706060D +%FD045AFD5BFF5B5A5A5A30060D060D06077EFFFFFF5A07070D060D070D06 +%0D070D060D070D06305A5A5A85FD5BFFFD045A0D070607060D0684FFFFFF +%7E060D060706070607060D0606060706060DFD045AFD5BFF5A5A5B5A2F06 +%0D060D06077EFFFFFF5A07060D2F590D0D060D062F2F35060D062F5A5B5A +%5AAFFD5AFF5A5A365A0D06060706070684FFFFFF7E060606AFFF5A010706 +%0606FFFF2F01070D5A365A5AFD5BFF5A5A5B5A2F060D070D060D84FFFFFF +%5A072F5AAFFF845A0D0D2F7EFFFF5A5A062F5A5B5A5AAFFD5AFFFD045A0D +%06060D06070684FFFFFF7E06A8FD05FF5A06FD06FF2F0DFD045AFD5BFF5B +%5A5A5A30060D060D06077EFFFFFF5907A8FD05FF590DFD06FF0D2F5A5A5A +%5BFD5BFF365A5A5A0D07060706070684FFFFFF7E012F2FAFFF842F2F062F +%53FFFF7E2F0707FD045AFD5BFF5B5A5A5A30060D060D06077EFFFFFF5A07 +%0607A9FF5A06060D062FFFFF2F0706305A5A5A85FD5BFFFD045A0D070607 +%060D0684FFFFFF7E060D062F2F2F0607060D062F2F2F06060DFD045AFD5B +%FF5A5A5B5A2F060D060D06077EFFFFFF5A07060D0607060D060D060D0607 +%060D062F5A5B5A5AAFFD5AFF5A5A365A0D06060706070684FFFFFF7E0607 +%06070607060706070607060706070D5A365A5AFD5BFF5A5A5B5A2F060D07 +%0D060D84FFFFFF5A07060D070D060D070D060D070D060D062F5A5B5A5AAF +%FD5AFFFD045A0D06060D06070684FFFFFF7E0607060D0607060D0607060D +%060706070DFD045AFD5BFF5B5A5A5A30060D060D060784FFFFFF7E07060D +%060D060D060D060D060D060D06305A5A5A5BFD5BFF365A5A5A0D07060706 +%0706597E847E2F060706070607060706070607060706060DFD045AFD5BFF +%5B5A5A5A30060D060D070D06070607062F070D060D070D060D070D060D07 +%0D06305A5A5A85FD5BFFFD045A07070606060D0607060D0607060D060706 +%0D0607060D06070607060607FD045AFD5BFF5A5A5B5A36072F0D0D060D06 +%0D060D060D060D060D060D060D060D060D0D2F0D365A5B5A5AAFFD5AFF5A +%5A36FD055A070606070607060706070607060706070607060707FD055A36 +%5A5AFD5BFF5A5A5B5A5A5A5B5A2F060D070D060D070D060D070D060D070D +%060D062F5A5B5A5A5A5B5A5AAFFD5AFF5A5A365A5A5A365A070606070607 +%0607060706070607060706070607075A365A5A5A365A5AFD5BFF855A5A5A +%855A5A5A360D2F072F0D2F072F0D2F072F0D2F072F0D2F06365A5A5A855A +%5A5A85FD5BFFA8FFA9FFA8FFA9FFA8FFA8FFA8FFA8FFA8FFA8FFA8FFA8FF +%A8FFA8FFA8FFA9FFA8FFA9FFA8FD5AFFFF +%%EndData + +endstream endobj 291 0 obj <>stream +%AI12_CompressedDataxœì½ks7–%úÝúç~航¹SG‰7à;q#H²Æ=Ue‡íêé¹Ý +–IJÙ%‘Jªjϯ¿km<2ÈCÒ²e«»MØ’˜@H<6ösáïþ¯/¾úÍÉ‹Û?]ýÆì§Ý“OþîïÎî®.ßÞÞ}º“Ç»Ï^¾|÷æíýêË_ïTØO,uòY|VJþÃÕÝ›ëÛ›OwUìs/øþ¯~y÷—Ýo¯_¾¼¼{ñëݯ~Íœ¯¯ß¾¼BÞŸ.on®îö—׿nm¢ŽÃå[d¦§á©ž´ÞÙOß}ñ{)qyó×Ë7o®ÿò•7Ñðáéí»›×7ßœÞþžº¸ûÒÁï”Vn÷›¤£ÿýúË«7)x¸}þîÕÕÍÛ/înŸ_½ysvûòöîͧ»³ï.ov¿¿ü9—»ÿuõòåíßv§//ŸÿeùÎÅíÍ[”ýýww×—/PÁoNo_¾`ÿ»{vv{óbùâ®®^\½xï×/®_^½ùôðé?yõúöÍ5&ãúêÍ?¿½}õò5fÿÿó‹Ûçoþùú>àÍ?¿¼ýæCŽN>sÏø2&êÕåÛ22«'Ÿ)ýìôÝõËx÷êOW˜CgósóLÆãoPÆ„ÿ–çáÙg¬ú««·o1¼øÊ/{ºE<•ô«úòê›kYL˜ëùu­ùîöõ+,¾½Ÿ?iJ˜(ƒ… tœ0QZ—W¾¾zõú%֊̧·ÓÓh4ÿZþR ã;¥ Vi?9§” ÖOÉ¢r‹GÞ„}ôN›šü´OÁM)xç5jŠÚî +!$gÕ¤|©t^-W½¾úÛ§»?ÜÞ\•=¹{ûU^¨ÖNSþ³d}ùîåÕÝo®9ݹª”Gö÷·/®^⹊‹——2 ’Ôüg)ñõåÝ7Wo±¶o_¾{+Û/¶V0{¿»üîŠË×”F>}uóõí?HW“<êòõcðWòa§¢T¯·EjÍŽ ³&ÖÓZsþ–Áçw×ß\ß|ª-&Ë멬ßÞ]¿˜Hл˜ÿJ÷1ϵRIO‰ ?îI’Ÿà±™•ÕyRÃúöíÕMj,ø³ß/–ï´ÿýWüœól¶Wœá7Bi°po°¦±ƒJîü‹ä¡Šw¯Ÿ|òOO>1ééÿ~wûöê j|yµKþé7w—½â~zþîî›mZ”øÓ囫§Æ +¸¾ÉO_ü)?©¹~ýæÍ?}qùÍ7Wwå/ä?}~}‡å÷ç—WÿöôõÕÝÛooß½¹¼yñô«ç—w·7O¿Á–º_^ýùíÓÏϱ]®›PŸüsõíÛÖ¤­¿ä¬?½ÃÓ·O¯n^\¾ùöéÕ+ùë-ˆÃÕSláWܳ¨ìM×h~ùöêé‹[zlÜôô½¸¾ºÃ¿Ù=}óúò9†ÃÛ§ÏßÝÝ]Ý<ÿ¿ø§º»ýËÕÍŸ.AX°6ŸÖòOŸß¾þ®Ôy÷âÏW¯®o®oðzÐO1þ×Ï/_Þܾ}úíw¯¿½ºyz'ô/¾xúêò9»…aÅ$=%)Ä›ïÞ<}û·Û7ï0h×·wOß~{wuÕ~»|þîíÕÓWï°ÌSyöâ9æ_j{~õ‚çjÂ6oo C¯.ß<÷Rz#3ÿ÷»Ë;¼Ã~{ùòϹòð ¶š~z"ëUäO³y’Ç÷¤}ý ?àéÉùÓ³Ò…§çòúÓsyµœ/^?oï}–K}–›ølQæ³Væüí·Oÿ ¢šÏó Ÿç>_¼ðyîÓçí½Wï^¾½~ýò»§Ÿ¿yÉ5ñÇúAÌ/ÿqñòÛ[ÿ+g~ýííVËÎ,µ7O/s×õ{.o_æ¦/[%—2—WOŸ×á¸Ê¯_åÚ¯æ—QÕU{ï:—ºÎ¥®M\·2WŽ›Üàm.~[ût»xá¶iクþë5äÁx—_}—[z·êÏ»öÎw9û­ Æwõñ“O¾>ÏTÖýý³¯ßà€Yœ+晚ó›ç·de>Ý=[óûðOO»O»2eÿúÿ{"µƒ¦Õº3ë÷õw¯¯Þ»7äT6™—¡W|ütãåG÷.÷äºöVÇ[Ùðx-yñÙ/ß!ó·w·ï^vóçÛ'Ÿü*³µÿpõœÜÒÿ¹z±ûüOÿŠ_À  ++³ûú+ðæüÞÊ€gzýë*üâååÍåÝN2ðn~ø»kþ/.Ñ«]~9,xõöSçáêÏàÏæWóÓó›¿^½¼}}5?ÏåÕK¡×ø,é—”éz|OEÖcšÂA{·è£üZÿ~Ìû¿#Qíº Ï@Jÿv{÷NØ,›ì¯þíê¡¿úËÕÛçßöu–§ï]ë—o¿…D€còMÅüëüñ\ùÙc¾üìG?ÈÈëo¯ŸïNïÞ½ùv÷õííËVûF~ki™'Y|ó1~õÝ«?ݾ¼~óª5³|ò†çúùË«¯¾Ãñú¸•F6ëîæó›<>ãW”ý€óÍï|¯Þÿ´­µ·¶ZBæ¿§VÀ3rd¶ÚXgµvÊã°•:É`ƒ°y¸{Ë|õ·Kƒß]ÿéÊaþóõÍ ôû«w×o¯æ½yûê5• »¯¾½|}%;§–üj®Òñ<[žX¿ùÍýg¤²Ó›e‘ßÞ‘)ºyûéîW¿Å‰yu³û’‡º¶ühؾ¹dZü§êv÷wÏNÁqÿ7<ÞúQ‹¤ÉH²]rË„¤é9…EJ«t²H§’ÎäÿCIçòÿj¼(é|Ù1µüÑ‹dÉ®’Còæå_a‘â"%¤“òç‰:]¤³–øïCûí€Ï‘Hçêb™–Ã'Ý«?f‘œ¶HõOÏôä“ü·‹”éd‘NszòÉÿ{lNóMݬr6×ó:ί›,jìf¹Ì±Ãœ.g9MikžÓb¦ñ'j\Î9Ó<çL2ÛuÞÑqþ™¦Í9‡œ/ó­1ËyæÌ8f»Î:R?Ûœã(³<Ït›cÔÈ¿ÏËÌ®g³6kd.mINgŠ3%åÙŠœ'Ìiž+ÎÙYIIç%]0™2!\Ýœ*™-[Æ?–q=Ë#VÆÄÊ—òëø=éµ*½ôÒ£®i÷BZ1Æo‚‰&™S¤ƒ9ÇÔ+k¬µÎí Ò™=Øs{á4HÖy\r'î éà°OÑ%…·Þùà£?A:õgþà/°8 º|!†NÃY8„ ,…A²ÑECLñ$žÆC<X8øöd’M.ùD­Îi:Kçé¬N :äNÂIò‚‡ú„*“žå9ÊØð®Åd@d0ÚmüuMK™)¬’_¤¥f«\†M!ù'óü+‘xÍ-¤ÀJ:Š„˜‰ÖóRŠ<[I—§Ì¤öwìRèS‘e]“t\'óÚ&-“ÞHå5.¦1Í’ÙBJ;/òÛy“ßË™=JI¯Êz9IéhjšÔºäïM½ô:$Ñ[äÔë7JfH²4P£~dÚä„7&ã‡üÑÿ|5.ŽWÝ6ó¿•‹?””ù¶ª ©;–½s*Úìê,§W©½êcæ­ÐïíÊûžu©ìZÙÕU‹Põ +icÏú’æ;ë¥f•&kñð>å9Ù6iÑ“dMÉboÖÝy£©êXÎûó´éa¶wg¿S›NGt8ýnÝ~-¥{ö+Ï{ð{ìØ ä°7EsõÐŽ=¾Û^žõe¨q;ïûíèúslWÿ ýïaWazO‹`‹ ì„Î\KåXRáW‚p+:óƒÂ0‘#©üˆ/B¥nâÕEãJD\p%z%bQÈ‚ˆõäY³²e(d‰ˆ•…¬3Ñ:eA‹¢V´L´(jAÌ:A+fAëÉ'"l)Ù("Ø*ˆµ²°EqKgqK®C¸NEàÊ"—‡ÈER†µSÄ® »(xeÑëÄG¿œˆ_VÄ/å.°­¨U8¸"ÿB£Ð,‹BÒ‚ˆfJR¢:ì rò‰e'Ë(˜Uь™6ã›è\¸ºÌ×I¢o”ðwäð‚pyž/þ¨JÝ e?4ª>óq3 ϼš +¾¤Ý ª-ô:ë ª>7ÿ½¤É~A…_½µÛtv ¥+ÎFÒ&ƒS)bMKMù1:wÚà'~ Õø‘wuEsZjÈ–?k¥àBÕ¹ÔÉÜ#IDUDÚ9™UZëü\—ü*XiC§eŒ+ d*‚ó2ö©h4—é0¤ñçbLuµ@.Orµ‘ôf2›©jÇäŽ$45}2j ]Š÷¦ô@KÑéµ·Òé#“P|ÔxöÈtx\BãÓ­©|tBÇòÞóg8^ßûg¡ šß«‹%§ªCÍ'JÕ¯†’ªþ5•T´³¨1kkëO%óªÓRémÕW®¿jгÞë»n²ñ¦¦PRl)•tÒÒéÍÂOÓioP«‘N­(Ô6mZÛ)V4é5:F…–”çTôAÇiÏ=4gEc +]Úq³AY¢(¨ñ^:ò +ÒQ +±r5ªñÞ”b±ûÒ‰GR…‘ܳ«ïO?á®þ^jÛ•âŒÝY֥С˜¼˜±Øƒ`½ŒÉ&‚onFã 2®.†c'¦ãÆ“æãS1ŸË¡“ ÈFXVç½Ç#Œl*¦d“ÏÅœœ ʆ\hpbVΆåa•i\æfÊfš˜ÉŠ™ùÉ'bjŽäÊÅÜ| +òthFç \"9Nž³éÙ§ ,|;"Fè3óbŠžN°cÀôkaþi”v´{‹išÆéÙ< Ôç²0'1S“Ç5b¬¦¹š¼{£u„è‘Ät}rz*dò &ìsY´•W\io¥º•ÚfJ[h,èm¥®3U­Ôt¦£3õœ©æL-—42SÇU\QÙ®y²%µ[S8 hÙLÙÖ´¬£^œÑHŸ–<Ï6_sŒêt\É2¡Æ{¨ÈƒTã±§ÿûïꪧë×"œGí4þåwqÚ[ì]0{ìÍ |yö˜²§o6êdðÕÎM»¨öýñ +û‚RÛ^yȃSÂnÇ_Þ¢˜JV+U€f–”ã…\ŒÚ8¬BŽÃ“PA‘É7µr :X7¥ˆ6UiQïÍäìܵŸ´ÕüS@ý µYüïCÞÂy$‚+(#[Ã(OA3C«¤IjLÊ­°TmJò‰^>paѳŸ@÷þ³v£Œ„KÑbèŒI Ý` ‚óPñŽA¥¥ò„Q‡\n&gr˜kqí¬ƒ-¦Æ~‹Î“RëUÜ4¥å@üŒ½ø‰V¾{~›.¤Ÿrù÷MoQŽ2()íÛwŒl¬K±žÓÃìK[Ýa¸È~~÷üÛëôŽ-ÿBÅzé»÷^5p8d8œ¬OcôFGy°QUÇYÐÂõLËëËïSO}ûêwCí9Ȳ¯z7Ô\(2FBMÓr°>TeÆ~Ôê9—Öïq ì#Ö­|ÏóÕ_¾ãrá_xÙÖµòß +³³4È›æ_QÙ™ÔŒóg…i)^…1±ÍCÐWœ‡*VØRú@ž +;z!zâ̆za@O„õ<ž„®x@F°˜ÔF6ü³¯oµ±Èd%ù¿iå¤P+ŸQwWñÖO¯Üöw ¡xe"ñ"j~D‡…B;{e¢ìQT|ŠD¥}^¼ŠÎ\sT¸ß[ªùJ=ÒSªw5h¼ø’¯®3³óÌùíÂkWšÊ_§êDsh·p¼Íre¨Ùé–.·Qn))QN¢£-e£3¬ÂIl]q¯=„æÿ‘G¹¹#TO¤•/SQwOÍ&f¿¬ÀEQm‹ÉKÍfœGz“ÅÇy’5ß—jÀ±Å©DgÀâùw(Þ~ÕËo6ç¸âË—}ø&aÐÏ7‘…«us¶ÎöÖìïaš¼ëDæõb¶ˆ%%‘³Ì„Ùjp!²ð, gçiÎc–ˆ³LÜKÅY.Ö2»”Œ)ƒ<ˆ|E>®ò!KÉb5P½œ,×I\®«ÓµHÊUVÆ.[KË\%Iäå³¢";oîØºÈÊ®¤(Òò‰HÊgURÆÜgYÙ'mW$åTÕa!%+±äd ÙŠ„šóv“!G²|Ü$dµ)#»YF^Hȧ"%‹ŒÜˆÕùÂåbéà[œTúŸ·¯Ÿ–w¥Æ„2£¬ ïËßùïæ@£›É^×Àq³™CVjàÊü·YýmA õï¥ãOvòÍ´5:Ô?k°C yH-ìaüCŠË’„@Ìáç‹Ð‡9ða_q-ð!«ÄæׂT$ìàlvÐâòeÚÎóm×å}'KGLŠsXÓµ•ïïé†ïo(^¿³Çoõô->¾™JTÓ/hû©œ'²Â¢¬7_NlÖ2X“¬Ô¥9ødaöíD1X×Z†º†Ò½L73嬴³QÏF?+\¡¢ £O>)”tIK—Ôté™»öÍ]{ç6ÿÜ'ŸäÓT”$£‡î1Ý{¼tå4«Î}ïåÞ§ÚnÞòÐï=ÐïñПõûEãæ¤ÙÖ^éÇ=Ó¾é%-<ÓQãýÞéÇ×g,–’Î/+{öL_ú¥OmÍ^eÙ¡8-œ ¿SWo^¿Ih¥¬b¬ì¼’½PÒy=›â7™‰@öø©kû¼ ÙÙÂå!¯s$¬ì¼ÚCYñ^˜R9æò–•­Ÿ M¶Œçp.»@öAsÙ²Nöñ(}Ú¶êÁŽ1D¬lF®¬£(†(¬Ã!–¥‹²ØŽhé£ZZdËFÆݲŒËx(Âň{ôv”ËfœË{è@ïÍtº°ŸÍ{i¹Ÿ»jÐLî“÷Ô“`§;•lI.NÞñ|ÉwT­(ÐAÐA¨H–*¦I…ò’pd€Oʪ)³P?@ ¤¢1QÉ¥´· š MÈÏÚ¬N*PÁDч*›‚†œ&Ðvô¤hDð|TÇtj¹YÕä÷ŽPOó—~Ðfò—‹fòqSʱÔ&@°ÇñVÕ–ö³öHá¯*žš† Cîz ç÷¢Ÿš¿ë'l´èíÀ$[* }4Nt“3‡ N/Ã3´4)Ä…®p¢Š×êd-YqûÍ®ÿs`î>½ Ľ_.,ü©ÄÍ’aj’áI• %Wéò!Ùö©øçª\I"ÊHŠˆf…´å ÍÂOeB +Ù¯†­ì7V<š›ë^­œ¢È”¡¤XR*©0Ͱ±<ÍI¡ú©5ßeás2-¹–æŸÐRj餥Ó9¡ÆêºÈ4;o¬uKïáu „Y$>H»¶%·JãOìRÚHàÃÉÎŽ¤Ã=©™©ü;â1D}<˜dAC*Ð?FBÎUÙÍ5è<‡ç ýóÊ0GOyéÔ"n*ïKìÀ¢R\FN‰4xQd@î±ÙË`ö3Èšî[÷ +õ)Ø/'%4ºØIôdU—âËzŸõ'ÔžäUlDêqe}FYüÿ kqö0àŠ¢¾$ß‚ѬÉ<ŠƒnÕ–¸¦¾Íº’Ù«àBô$Ä/´MK’½ Ró%8¥.I¢ž¹jI¼p×äµOEO"^EO2{dMÉìI0û,u$”–> /Èk?¿ò&˜ý fŸ­æ£µðÎÒ%|>{c­ý°–qÁ-nya-½®š¿U‘+_›Éjå‡+ŸÜ{rŽS /©??zKsÏ<¦æß6dŽÇøP÷¥ÚòÚ<æ±yoª:µŽP¯±é³ã}ZÄ¢×8ô*…ͱçS "ùHFrk>Gï‡ZXe—9ª|O¾?ŠÔ1K³l±”Ñgù|)™7¹|)˜µ<¾­-dñN/’xñŠ\Ëâki|-¯%ò¬Y +M&‡T®¬Êå³l^¥sÝ¢§…Œ~±ÔÏÛfjAð µñù'µ[šµùv-Ù9¡F³Hs¤¥Z¥¥7üÚ¡f)ˤ‚BÎál•N‡tÒ¥­ÈÕBc×ió`ÍÛñÔ%ÔèŽ$û½“mnò#¤÷B(¸£@{±ס½#NÁ:ÀwU°D+(8¬n¿²ÂÍv¸ÃJºÒžf‹\³ÉU«ÜI›çPæ)«îÂkΞAê‚l̬A-:Ôó€µ(àT¶B*–©rS­”YŸ:Û)×–Êj«ÌØÞc唜l±œm–ÕjYì–¢o=‘%EëZõ®®ðòFô¯ÚîP +zØ‹" ÔÓ¢“=‘…:^4´9\'ìd)D à£&ÑÚ^HPv á99æT´¸'E“[ƒy–á<¾E¨1X•"-ÕHê,E­ƒ8…qž‰N¸ä¯×¸gVõX0÷œì*-A·Þ=þŒñ–Ç"ü6ŽzzÔn„ïô'ŸøØÄµÅvêÇá&,~£¸j’2&{2MdØÃDd,n¥'±ª“¦é=Q>PßSWñÇ››ËWW/vß”G;E½ÅÆÓ¥/о–uEUU0>v ì`;`‡³â5QàDÝ@‡ê¬`hðÆÚÚñ&#n-ÍÄj°í³ë4ÈÃà“¡JÏMQ¸øÖû“ÒûlÔ¼XˆjUX›¿âT ~‡¦Fy¬c¸?îŽuܾê={]G]/z¼yôZp÷ŠÚgç(j- ’mgv#Žìe&Öh]èGÃ:š1€>0vÑ/½î{½²pR4Z¬Î“ê'• X<%´ŽvJÚ:m`Bvºô«Ÿð¨'Û4ùçëivöÙ“GsŸV0eŸ¦mÚŽç¨ÞõÔ] B]ÎÄ9ƒô$Nâ™Ðn#‰¤  Y…>dǬŒ‡ˆéÎŽYB™I•ɲºCC@ôÍ1«¬¨âžE盦"A*U‰ô䓿t“ÕH'ÅáFÜm$4eLq w›˜’CSÍíLDQ*e¬:à˜"ȹªâÂ_\„­Ì?E„a²Š–+û_@çØ«˜DsS€’ÙLöHrëTDèíä¦p<‰Ù|;Å÷KYàqiCS úÓ/5+±àa*·èU9/PbF\²–¬Z¥‚P—¬òVw•¥Ã]­îŸbì)¦Ìý-‚æš+`u\„ÊAð¬.€5T®ºþÅâúwZŒçbvX‡ÊeLV_TÚâuºPmÊTÂæ&XÐEB´ *•CèÂJ“Pc£]9ͪŸÃ’–eG‘5+—–*'aµÅÙjNæžd»ä†$Ô5ú£iÃ*t$ͪ¶XÜf¾Oô^ë„(ñ}Ó£k|ôjü‘þcÔøEYÐÕĤÖ@}‘pªtIɦH– (g"ÓP¢qÇ™\ËEs'Ÿ1œ[nq,6Å”{E©4eIUÖá·}®iT%Ëp¶.œ‹—¡¸çmÉÔE5(?Ó”©³"Vè (JhÔ¦þÌËu›Æô”fEq2µ¢:S§ì^Q ÔQžN…~?U:ž” +5ŽÔëþtœ¦=LõÞ+ýRãOUã÷ŒØyôϽ5Ž7 ¬µ:a¥Õ)z(ÁwÍZHjƒZ­0©YóTù¦ê&à‹Mœl2çÔ473fýÅ +³>‡Ðœ—€‹â`Š3‰HuB¹ÈÎ%O>'€ì:BÒBAù¢/„ó¿+Þ#$;Ù’È€°L¹2G”i”TŠ’ÎJDǦbþÏ©îñ:§•€UcÞ,y‰´%àÏ Éj)9-% µüÒs·‹ŸâØH#þQ¶¬O÷&]°÷—ìcRq‘~8ùÇ&Ôøè²ÿ™j\(åšÚ]˜ u~q~D¾ ÔÄe> >/Ø{“ îŠ‚Í‹rM‰bjµTL‚¶`ëQ™F#àŒ¦—C&‚¤—%\EÐ_ƒ*ÇÎ+Áeà(jHÄc`Ê{ òU>B<ù¤çªa®åL ˆPÍwX„Eœ\5¿¹ aD'®‹+àÔLn³Á­šÛfSÛlh[šÙÌlb¯·0±­Ìk½q­7­1ª=ù¤3«3ª­Lj÷™ÓÄýkÓœ¶eJ{„ñì zÿǦ»u3•;_NÇZClØ5ýG¨q† ú…¢üBQ~¡(¿P”Zã/åŠò Eù…¢üx5v€j÷^¤ùþ™â+°E£M!LØÉ‹yÝY3áωî.t’òNùð‡µÊX ËÃ6çvŠ´ M4ï«i»÷¨'ŒS~Ë}àcêUõ( D‘2;§öhíʯ Ëjo ÈñjO†±{¯`p÷éj¨ØitmÚÂV }‘¹†¶\!–ϸ7„>â ¡é aÞÃúì´¾NgÇS=kW>gï“ZM£›úɽv§ÁFÖÀªPuššûP‚œ|ŸúÓå}›aáxÒîÌXÞ¥qÞ§¶¦%”Q]k÷d´Ùéçm1ï­Lܰ +6Ï‘ìãç»Ãêõ\GkÝ2ÃÅðÐvèG)³&ÁÆb“II£}0Æ‹ÎØ„ä3­#ƒgAð¦ \Ž„ +*–½ž|Lô=•ðáŒhõäˆ÷ÖÇң܂VÖKlªD…3 b.u7 •«¾O NÀyq™±èÌ€†T0d>ÇùÓ‚t(1ü9^_Ç‘ì6rR ט…y4°¬.k ˜¥Å7d‘ +šµ„ÍZ~è¬Ð¯vÏR üªw-=´ž¿Kú‘=ùx—ô•ÿ!]º-ô¡šÈ'2Ž5«-çPã\cõF)¼A¸•´oµû% Îd—ÁËîþ8õý` +·I@ì¡e*b½9`‰XYèÂt×¥¸¸« Ç_¬ŽOÍÝ©½sÞ\ÉgwM½rÕ Á±¦îhv˜0²¿O‹‹„‘}œBkçÈmÎGPâ~Âw–B‡f…=£¢¹Uôõy½@ý«Bou¯Bë­ÆO·ƒ· ¶±+¹(»Š®V‹؆›VHâ çª\2a¢a[Û~ÑÒ©mÙšjqÛç]›'k2Üâ¢;R\bp% +·Ý!D庣ºATëksª0žTª'ôÊ¢ýI®ÎK¢H7¨åFÕ¹©¦Âþ¢êãbs¨^ê‚õ +Éê¶{mqsÊìfYSÖ¸°k +8ÒÀ¢pØ@?©\”^…‹,?–! Gþ…SjX9£žÍ.î›´v‹Ú +žáŒ|[oˆi®¡K'Ï>üféèÝœ‚—7×T§Ù®ÛTÝ t}v¸?]8¿ž=Ýêë:\¨©jÚJY†.Tç;q½;r~¸á¡[(…8Ô9q¤;:#Nst•;÷8+Îpt€£»›—¶$Žjt@£ãXë]Á ¯¦²ÕtÓtÑ4_U.Õï}YyÁß>ý¥w?°w+æ×Þe¢5ÕA~*À~‚úEçx%7{xªV¼OóÍü–6•‚ æéüï1Of@Çsy÷ÍÇÕ­Âdƒÿża·)°Æˆï¨„7*2€ˆØaˆd¼ Åk%|³O$*Ôyé‘Y]ò¸'­G^ï!,/¤ù˜zUÔƒ?«Õ«vIíÉç|4Ƹ®[eEM“FK§…㇩âU9wÿ”Ÿ`•ëÌù1Jò䣞BP¹°n91Ã¥:?Ù–û>ŽýPÁÑnʶ·âá¨Ô;ÇXá3åW…= „ÿ¢ÊñàŽÅ{üLŽÎ|ýœ)Ï‘-bìcU7ŠºI‰º©BÃù•²©]-·¼Xn}Qç“OÖWtv—s.qã*g„„+Wϵ+9·~6ÐÜL¼7ü{ÞñøPújlªjSî}ɱd9î"G½Ç,¡`–8%#ã$ dïÍ#3xdÿO3ðb]Ôå‹P E+ èE‰²Ð§j8¨ÄZ€Õ¨*Â|7`øÌ>À³âˆŽs(Ãb)õÀšÇà27’ÛLVt†[É¿o’K(Ôôýklk$zÆrÑK6’„µ³í åó$ÿÊÏ]¹Á<ßVnÛ=å¦FæÌõâOµ¸¿|ZÜd¾Œ'z\ÜÑ{ýüRãcߘoiš°=Ï üEl_‹­ÃÏOTãýűÛxKi]¯†{ö9-Å &5)6Í@’)HEÀ:í<Ò땚…V-.ù±«K~¢yùŠŸ³CuÞðu«û>Cöˆ²;cìæ‹vR3RVÇPôVçr½.5U¼D.×m76ÿìŒôªñˆÈq$AEPÖirÖBÐB@Úºj5¶«uJ:-ÈQó:AJ0¤¦†#µÄ§›âQ¤Òãý9³îSsI˜¯¨5írÚ(È]Y[~^´åYWÅÜ|&r%g‡.S#Þ ~~FúƒÔx¯HB“Ç÷A‹™cLÖi¥êõÀµÅf­"½Ìbœ/öŠ0_cƒS»Êfy™ÍlÃX[1´¸Îšf»¨V‹X­`­‹m¶&H¢1ì´Ý‡õ—}Ðf~¨ÁÒm,]ïë¾é¶:º¿D»µKöv·úòfõå½ê:Ü ¯qõO]þœÿµäH{ͯè‚Q£íØ¥úçšmr•S]ßa]¿¿;x‘¯;éÓ9ß­’õ¬é!Mkqq_Þît±¸ýv¼Ý)-î­]ßïdÛýNèÉÑ;žÎVA™UÇ—ùñ>@‹>MSÀÚQ1‰G÷¤#†s8Ü5g²?÷4läåUJ/=¼{¬ôÓB¹4TCžæ²Åb7ÂÚñ“$b2¿¼g6ßæ9„l¥Î}þˆËûjàS†í0÷K ™ñ_â`~‰ƒùãÓ& Àãª7®¯ižî?¾Þo}^?j<êf’Å–šodœïd<-·)Ô{c»—q¾™Ñ–Û#Û½÷çç9Ö{ãƒ5Q®°î·Z/öc~èê ÛÌm¸Ûnõ½Bji<\¿´ŒÕ8m¼¾U{Ø« “6ã™ï‰b¾ÿÚ«{û|.³\î&püõrr”¶â?,n¨^_ìÑ.õxòIßÏ*Óª.}ÜåBë«…DM*,è‰Ýª 1-vK¸þ÷ŒÞ*©¡5Ðê^UÙ)?ôÅyƒ‰â½¯Î¾~ÍŠ»íT.„©šùR˜zÃ,´«a ‡$ ߪ’Èy“E¼¦»¦(Þ»ëÞ'bnyúy¾lá}cæÖC‹K«¶€§6Œ¾çšxüµ„Óu1aq¿îWÄÅêÞû~E+"˧v¾ÜãÞ5ñðëB¼~HœbOÙî‡~¯HÅ“ñŠžùž­Kl:ÀªO‚¨rÄOXã–áw©·tÓ|9Ãbu£ÆCGñ6%­Í+Ö4”ØÐ'ŸüÀèÐãCçèP¬²÷Ž-æºÓ¬!í9àT½Ðžì| ìÝLù~šßMÏ*¹âÑºßæc[=l+tía¯ÅxgÅ‘Ø6øÚãl×ðµ%ª<ÏŠ+͸ų\âJ±ÊÞ;²T¼ÊéIä‹79ýȹ·.:¹° 6÷ËšøeMü²&~Y÷®‰5àäŽt8"H~¨&>¨JOžýáö拻뛷×7ßüæ7KÀ2çÉ'x-y&ç}qùöíÕÝͧ»_¼üîÍ›KêÊ¿v)í“׉î +¦ÍN[»Ÿ’ I2à;wZù=#“u`ilÊ_p’ÿúÇ¿•_¯ø÷»üK™ü.ÿþ÷ø÷¿âéß0D»ßïþé_¦Ý‹'òö—,P{Ð7´{ÅÜû³ûÝf±ú=¿[6±ùp»ÂþñôäîíáúùÛëۛ˻ïvŸfåÌÓÓÛÛ—ËÏʸ>;qýööîÙéåó¿`ôŸ}}ýòêÙ—WÏßþz÷_ùÆÿÃ?6Æ)ÿò_ÞåZùáçy…jˆØE2uÎè¬4ŽØÚpµŸ”Ĺ[ŸRÀŽ }¯°É~iv¥ +j¸¡Ú.tÊ:¸Ý?^æ¬çÍ(µŸŒÇ B¾ã¹sqo þ”iÁèéàQ5 ›dç­*ͤölÆŒ.‘4#^]ÀܦÀìœÛ+ÌÒî¹TÝäLsæ”b5z韛fo5v%¯ážLØÙ´‡Üä‘á÷ÊÖZãôΚ=h’®õ¥ý m8),ƒÒAº¤[:î1.O{—0éšíF¬û°Çˆ©RM°{Hx;í Þx´š•¾&µ3:3èf‚ŒDGíÁ0@†(Õ WQ40 unB_í>*´åÃÌ=ª£"#):Π ƒ¥èð‚ag3´‰u°ü„V5ÃȤˆ1ñ{^^¹Ó|ŵ )o¡>µ7†-ýÆím«Mí!? ˜Äi +m´w{Ú_Ñ»z˜2PìÄÞù½U]¦ÊÂì”Ã:õ¾Öç÷ Gra[w쓊I>ÊžŒ8Wp +íÐn´ :ƒ5 #ˆÅ +ä€jõa°8c¿Q{|gÞÄýDOT“¢g¿,¦Ÿ† ôÜ{Ðo¬O 3{ìWêÁð\0vâ‘v*”Á± é‰@À LªÆÊµNž[n+Œ &MÖŒ‰©®0C²ÁTøœk·ÞIíž×Ä£“ŽŠ^cóú²XŽÎbJÜÞGS×—Q{ü2¥"ùíœßSÙŒ×Ü'_³šcå-žÃÇ[ 6ÃD‰ßytŠK4ׇݦ´ßO¨”(Sˆó¥ „]|+ªñôòÒ €Cƒeïy˜ï0i»sÞ= <w^´lÄ©ÉìÌ„¡I4š­×»h÷×%È›±9Á”†Ú{¦Th€d™ö ^ žf÷œ˜Œ-&Q½ÃvÂÂÊ»^èQ§tÞ€¹>¬PŒ±G. õŸ$xîF¼=vRÄ`ƒ6b8&RÍ£4Lêûs¦¸‡¼zã”&p«Fì Ô äæÕV&vã¼eCƒKÞ‘ˆ`KqX´ 7h¬áUÖø¾ò¼ì|SâòÂrG5¿Šdu˯µð618“ÝPö“7tÈëÛ¯óF]öz~­ƒÖÎöØÌƒ²¸× JLß`ö\yøÆ\›7&[Ør€7ÆŽFXD)Éà¹4 –lhe]a/aB‘‹… +²9¿fsGõDFW/ê3JÿJ}}®ÞƒÀºR{0[ý+¥¾þ³Úký@´†ŽŒß<Äÿåüó߃+ùìͳß_‚1<»}ýݳÛ? —òÛ»Ûw¯ [²ýÊ—W¯¯.ß^½x†Fzþ%í~õëÝ?þÏG²2XÇ ÓZ®»I– ¼vL~á7C»6#ø“‰j6p NX˜¤Vn™›,LP+>§²06îCr`H0¨ŠóE‚cË.s }D³:6¨H¢‚lƒ X>Òc Çoy\#ˆ-/€蕧;“Æ\!êhî‹\è^~-Ñî‚ËÝ2Ry#××çâ|`¶£'M”“K“Åy 9ç>:¨|)1¡ïX/º=ù 4H$ß¡DnÊòcE8%üä7*ÂæÏMr#˜Ã)òÛÙ¢8Þ‡‰Ïícú\-BL†Yˆ<Óø¼ÎÝ@ªqdbº ‡aJèý.j¬œ¯¶s!ð Ã>Ójéí¤À Ô3L‘Yâádg ÙëYûÇ}-Ë)7žàó`Ó¢™+2JŸæ•²ÊUXÁ‘}êÛ™2imš¤vü‚VºÿæVÿ‘¡êéÊ‘ ö 6#80'®+>F&ìjG¥Ÿà\%—x [î|Yú­p£ÇΑ +OVNä¶la fÓÎ\ÓäqØYJ>®Ä$ÈZ®²·…k²{qh‡Èî œï<·$9â |2ÀÇXqГrN` æ'K^BÉÚ>{‡`¼0O‹)ÙÍÓOƒ&ÈbÝ‘_xµËX^¶@U”,<*AÀúX~l@_èÖ 2ðÝÞµŒvt[9M¸>1&í5ËŽà›ECCFéßóJ+Ö¹û|ÓØæêþ•ŒrõŸÕ^ë¢6tlü)Kÿ =*z'Oš!¬êµŒC3ÜQÙåL¥Æq7[ðÀ—u¥è*{oeÁ£¦´lx+ð©Í‚—Õc!«Ç&êRÕV`¨'1òpk [ƒØ¨žŠ ­<ò#¹ä£p0WSž 2ï .Ѷ·4å ’ùª‰'e³é) Ö4X/† + Õ¦Ç ì¨µ)OiK ݵ…YMyä]Àô ï‚©ôÍ”'Ç?FžÇ?U+Kž08eªì! ÄE X5àÕ‚ »¹ké÷‚:ú¹J+šœ(“èHÜój·St&Š©"ÔÚnÇ\¬~AŠ›Á ¼“f§Vv6•Åž˜ôל nû ç·èRÎÖjpCöDäJžV(쪕Á µd*„Ån9—Õà†´'¸?¸zøšl€ìE°Œí_ÜÍ!5;Ù_Ê`5¦Ä4;›Š:ïMÈ>;zef#ÿ‡ã„ªmO}Jµ²)ˆ€Îa…:ªÚL3²%3#_(¸ + <,˜ô••mÈ­¦0®Ðè ÀxRƒÅb¦´\а²®‘Ãÿ=‘ÃãyÛÊ*Ú®)*Ðø©gÞ±²n¹Å&6´ShµS+“Ûðsé~Djýdžj} ChÃ$zž$~mts‹-Œ'ŸI®Í ÕæƒNNÖp¬lmkŒ%£8©P·‚-MXFpoókô: VüBp^ê]ŒÅŧÏH‰=jªÿ.—ädòrƒ¡MlT$HNNlD-Š#aù} cL·ª è`…Ú÷%ʈÆ} ¨Y AO SMj¨u#Žªšýb aʦsð9´Ú›Á3ŽlFœ].†b8aÁþRBw¡â•@¯£©OrL€{v$²š + ::ZÖŒ },QÖ踄3p¢ÒX‘¦ÏÏFòóþ šŸ‡dâ˜D0fT*ÙÝØuƒn©»¥6úÝ—( ô0T4Žuß™g㣕nßêÀ…P`pš˜#ŽŠÔŠÑF–l¢Ý5E¾o°“`qz{×EÊã=©2“æêúé}Á>^‹Åȫљ$<ñD9c2Å‘*’uóôFu$¡5Õ¹7ŠPJ‡W篿ù9’)Ãê„)K4öÔ;Ú%/÷™ªsPñ|¤l7%s“ÒdGHžäy0 VP²|!É0RçE¨ C‰yÛ)’ü&8Wò›A3ÜzpD‹{:7b¸HhG7IZ/0Ð<À[4gÐÞû‘ +LšÙQL3 +otœÄdã+'”ÀÄ™GJ2T¸‘ˆ³^| £;xUŠê"fŽð¿[î•´{DšöDK{ÄÏRw,Ü­½Ã%}­øH=/•ˆJõcŠç¥è÷©ù¢~?ˆ@Ùy`R”‘ ÝÍÔ†+¦ålcg@FŸíâ˜[ùd‚ï•q÷w}3ö‰Ê3.iÞ½Õ»iŠ5‡'ó]³gMN&˜6Ðø½ã&M +˜hž†¢GN.ŸÉÒ\±xv9î}9E'GK4ur¼7kpêÔ“Á¡ˆ6ƒfôîCù‘ÒdÀþm[§¸yjqX£V€Ýp÷”  CŸÞÞqE½ß'›AÓTA!1 ôíý7©\AÁ‚B¢¦ÅÛPKÝ|ã:ŸP­©·%ò½ 9Ρš,UÖ +§1z‰Ò‚"Ä +kœÝ;â.J$ûF$¹µÑo”Jd0™XBÕOit ™=IùF¦õ8T¢RÛ.¥<•¬ÅDà°£SÊè[JSq´Ž¥ô)Á™ˆ!WŒ”Kâ¥A¨p„ŒÜtc‰¢ÄŒT³Ó’Bå÷F1pràËÉì‘Öv£c‰îcJS}1 ¨hÀv9aÔ‡ÎXœ^š +SªíýÆGuž×#c2¼ÝæÐ§å‘’óÏï%OßGÙ”Iì#îòô_‘ e„I™»Îož¾a¿ÃÊŽÙp Ç.£ñ'fÀù*tžôâs“ä ¦ÖWžó<KŸSp[L©L7ùØ#>ö`{s1ôŽ_5úØcK š‹X´ò±JlûØõ>òZ¨¬agèl°á…OùJ寚¨E9âlO_á„lÞuÃTjúM ÷n¨OÝ(ѯ‰‡Ýð5ÕcZøt%°†ÛþøZSÖ¡la"Ê£cþ [Toø!cÛY|¿÷¿û0–è>fÛ‘_dLe“IËÇô¡B<§Åª +â“_>¦ÏØöñßxСÍÌGëþO>§)­ÿ“8¥m[†bÕº0øTë7­5=q¦ 3¯¬ <…1Ü´Òš„Bͺ@¸".—'0BLͺ@û\öFˆØ5Wf†Þø_­ ƒí¾š è „’ôK¤z\[h" \ÒFNMCµ)ÔßW¦„úp° ÐGÈÇ ³€x? ?¢8sÄp@“v°ÔÕ8žëv£¢a{ÃÁÃó¼a<öÙH÷ÔèÒÃÁX¬×Ú‹iU61x<Þt>èûùÀóÄô<^ƒ>b8S/•¯¢áô[©Ê¥`·ˆÕtèÌPbS¿Q¬Óäé­ãWmšÆá+fbèÌCsu<ìág𓲮ù| ]¨éZ$ZXª¥Så°Çb<Œ9R`Ï‚„’Ùâ­MuwaÈÊϪ¯3í&Ú…|CK4Ÿ*|Š£½býöX4Å–ŽcOºüîƒÚÁ¹*”h$kB º|R­»ž:9úRù¤¢øŒõßÓ—h>]«që†vèËCsôG^hž"žác ú +Ye?E)pWS•v{q;·:q´©©ÒN&PçjÄÑ +ûHQ›Äó—¶ÐóMtØäûpºH˜£‚KI±‰0ÔÍù‘ úÊZƒÖ8ºô!ÓJÖè’Ž¬"ÇàUÌ{>rw{‘xr\/ŠIŒ£‹ù¬Ðt`Æús®:àSS­ÅÝñ¦#bS>+À$MlI²”—€¬,:Ù¹‰hwAEÑ'Qdù+OÏ^š!,‰(XØÐp q”±€V¢2,。Æóc©8Hâa@[ +9ƒ4Å#ˆMmQ¢²+Õ!./;C@,;ZÓª‡Å{Åb`Ù©Á„ì§èŠI¾è*qˆk¯¦»*e¥,ee¬\ñÆ–õtk1ž|V>`Óm -œÀ¦€ìá£<%ÒÅH=D'[eê̂ڊÌ@Í4ë+”U”ŽÅ±äüw8æÛ¨)rNø8²%ô™ÃtçÁu´ ‡ÌMGj!ØAŒ‹âƒÆõ.®è.†‚ Ã&Á¤ˆE;LÙpäÎ ÝÌJŽq{ô•ÀÄSd§ -ýÕ {ï‚—ÀaÑ€C§_,úöš”Cx|22S/ïAYèºF\-Ìmµ“м¿g˜G’1i†××I“¡7W/Û ´g„|÷ð–ÿš†9M2Bš…J!BN¬4pϼ:R¬˜ +iû2:›D ã*=ÊqO)飿¾ØV¼3Êö6%Þ;qûuMKãVË5£ëy©·æÒqS‰®/Ñœ=6¨³¼áÑÆÜ¢¿]F#GÝ÷ïc6tá¡ÁÿXÕ1Ú1”‰f_²fVDY«½Z_m•JS[²*G'ª\°Û£)/`-*ÆÙOºúxrÛG/ôrí¼Ö + ”‰rØþèK9‚ò!<¥Q¬—s8‹($xNO bdŠbÖÊ0„AJ‰Òìdrw-ÃÈKR»›õŸ˜B <ÔYDÊ©7 +´À®Lƒ°îpLoÔRfè§k‚),(K$ÂïæHÑš@Üž2ÇÜ•(Ê•ªî™x¸øŠlQ†óÆ1yê’É }xH“‡ ÁEŽSÄ™OZ &+„­²õD´À1¢Ä;ñî-„P´MŽæâ²üjÆ¢­î’%Ò‘¬rGÆ¢Ô£Ëðf¾ŽÉ#ÏD<È]Å1.Šõ8•²\'n,ÑÉ\©'ˆÌŲ ãÉpŠr-Ñ ÄŠn‘^¬"÷Ec{QË—Š¶ÜÑ#¢ù¨â\ÏÁ€„¤=xÒEK9LÆ?•… F@‰k<rD½y:‡µ2ÚA”›ôðr®–˜¡¸$bÅ7‘a…ÙŽNû•%سBMeáwí³ý36~‰Y4Ùï%» »£ÌßZ(Ç-˜O#~±ÎgÝ*Ïšô‰Â(Ö‹éøD½ûn£9šÑ7YðÆª­~w%Jý÷õ C8ô塹X8³ƒ~e÷o†˜pÛ¸˜ysPÈÈ ùêH±Tœ~€dr´sv0§c¨jòr%¤¼ÛX¯q¤Ãz_ œ)ËÒßËR¨ÜPÎ A‘çñ¹Ñ—¡D÷Q­©®XÈÊ0Á„©öað=ˆ<Ý{xR÷Õ(-õƒ3Ö3 ðЗ‡fj1«XÓ {t§£4™ílúI;½N+ø@_ŒòTkö²ûÄLŒMã]6,F +ãŠÙó%šmÈhÇÞdƒ„‹3Xkë}Ë›éýE~`« C‰þ[JSC1JõdD ¯K´»±3 °´ò å÷rŒv_^ CÛ·óààÏE×(:$r°SÊÛÈSL¹>g¯Ž³Tª‰üe­ëØó––:U‘ºx—5 6žò)Ýtÿ[ž¤%Ê¡Nƒ+]i@3Å$¼]Ó†·#X;vf£D÷U¥©¡˜¦…ME†Æí6:CçMSœ7é’7~UWâyÀnx†Š†!î:óð\-æÕ0ªFžÔà;ŒÄ*“~á¥Â jž†bt¡®'€nÓ1”lÍD1ª3%YUZ2> É›è.Éë<ìXày•~y±’¨’ÚªG¢ø(Lâ[èL1ôe(ÑT+»bÅxÊ ŠÄœØ÷Tjü”ò¼ø{ö#QßǺkïÁÉøhír ¹ZãÉ»+^—Öø\dÜ©zIóFø£¨‹ü6•)ØÐä1݈ØEÃ'aï0@4¤5ɲÃî¢ÊSœ¤)*µâE8-GOœb–~?šDŸ9‹Äœúy©®`½¨4Šäù{X/. ±û€k¥9b€÷bU3ëÖÃ{‰×Ò/ŽöY?Â|‰´n²L‰3y÷EVˤcx_}Më¢g~3ÑáB c€•äDãòЄo°ÞĈŸ:ÆAlc‚Q×Ì7dô[@µDØ"´-.]×Pây[…K,¯ŠÖ(`]è +ôŸÒ´ÛëRqO‹±è8h ynöëKúMM##1¾?Œumú¡I8nyûùÇı]Ë€`&A£óƒ>+\·¼¦¿66Q”Pøåk(Q¬ªJØFEk|±¹åþy×ñR_ +™Ÿ²p&BÕØýÐè.`Ek5|IW¢Ù‡ÕVîÆØ }xhì=¾Hyó1“Ä +ÇkÀÏnÆ>½Ú.fpÒNâ¶ †”«Ò2|ššþÀ»02jqú¬P9(!XgôÇQåÓX¢S¾–®-84²Å¦¯ÈÐ//nô¡fôßÐŽyÉ¥+G4“¸r8!î}‹Üí–7€È½q£ë}‰¢éÇ`¨hÇ¡3NÈGlð¤H§]vK#d–ZCÓ‰âÂMb)¤¢Žd×݉W½)á”;¬:ꥆ [ƒ~³ªcZ'ù¬›´\b°F¯£8Î DÈ´Gqkîaì†EüÎxvãû=Bµ~Y¹çi°2%’ªªÐ@/äª¬îŠ ¿D•š ,¦FÌ;Qôˆ²Ô3ªpüŽìQV…’éiFÐacÒ#yûK1î¸ZEÿƒ¥$Jn(ái›ôŒ›-»c)ÈØŠ£µ(Ü^‡ÇXr ‰#€ôxC‰"¼¯1ðÆzzì:ÐÉyh&¬Y£6JT#&,Ú4EüPLQµ9bßiñ²¦ÂŒ^éb6í°ïîeШ5nà‰=ö]]ÅYƒnkb ï±ïè¡ÊÀ¨$ÎS±ï¨•¥`Üâ^ŠúŽqjøiè&IgúN»˜cQì:áÈ:<öVT½¼ô‘xÓóV]‚à1$‘PYûŽkËœÌ5ïR#y_,aÖiį:€ ö37ÐðÈËÇYþJjð }Ùz(6î Êò˜BLéääq‚’f,Q,¸ò{X8™ T¹ú¼mÝ(ÝüVg·ÑàP¢ëyia(¦²Ñˆ–ûªŠY÷À ‡[‚u°ñ }ÒR?c=Ã(}yh:*ÍqØTØžqÆ=ÀèúRž‰§øýbíËT%\5 ˜ªæ…bôS`Ì›l·0ãiQòª¤`Œª««Oê +”–:0ºz:<»¾ %¶?j(6ŒÎЙ~€ïŸ¦Å„ö¸nÜñAZ'š‘OGòÄÜAŸ%ÈßXŸHy*òìMb2¡8 Òõ“°´ªé¡ðÆžŒ%ºOz^ÉKWLeë²ã¤SÁõÄxʼnp–Ö[Ÿ´.P»adúj†Áí{òà,=RwöÀðmUT<¾Ÿbæ€*„¾m Šªoª0û ŠÁÁ~¨b@ñ€*8¿±bÀõÛF¬þèŠéo€®¨Ûˆö߀X1 öˆ}@À6`EEûp*|À§¢½º O1Ä C9€ð(‚[ðœàO1â +öðÀà +žbp**ÐàOÑ7Q)ô`FQ1 ŠŠF¸ =Qa 쉊O8@NT¤Âm¤‰ +Y8LTìÂW¢‚nÃI h†=®Ä€j8àJ ð†+\‰ÞpÀ•pÇØ­ñpW¢Bpâ'у!n£Iô¨ˆ˜D8`I<|lļt(€Û`Å:(‡€p¨¸…Û Üáø~”8öa,±ǰQ¬ƒu:3 CÔÙF–cãýa@û><83ks=¸-±Q¬Cz¨`‡b€F\AJ ˆŠókãFCC‰-d†bk„‡± bìùR¢}g+=ŒLßÎC#|Ìê1ÆTÐÃCf¡p¡Cu|‹ÑdH&Ãc·“vê´—M—J2@o{“õ‘–Øj£D1Ú‘íµˆ¹–±"↊ :µ[»Õ‡¡D÷1³}p] tZx8‚;ÅlËï:Sä4°M Vq뫺¥©:*ýûã€ö}xpfäò§·]õ׋Y@ð¶¸ÿm69Q^£ª +gO5ŒÅ!µ¬Ôlc—OÓk "G^êàÚ¸Ôy1ˆh¸ “ijc}9hFfQŽÓ=iµU¥©Çmv¤Ïî>çyuY—2ùn ›Ñ®vý+K3Œ¥”4¹ïé +”††qêFvèËCS´\Q?ƒ=„a“ài8+`ôᥠ2SÅ¡ý¨éÅÎöÑÑÐJx®àÈÿ¢§ì”±*2 +>ÍMn,QïS¾Ðë)›9úzÓ]pNÈQ…®Œ%ºo*œb_,eQ·!Ðaf7ôB’3燄5õßÔ—(ßÔÍXO?¼cWš§ÅÙoc‘=‰¸^"€y%yj°“aÛèŠq²Þr~QŠ¢ÂŸH:_‹Åk)´ Y0bOÉ= +ŒˆaÜ™òË03›á ŠI™ZªNœ)voôc(Ð}Oãü‡b‘ÄÛsc˜#¾î +4âøùq©µ„úÎÆ w­=4 ?ëaÒß½.V ñѧþ&”Àa â§?QuŒØ(FÜr¶–ö±|Ñ X/¾O“}(^ñÇJÀº mÙha¼+0“yÏ MEáe«š‰w °@P²ùÆž %ºOjf÷¡XÐå5ƒ×:çˆÜ›5´òý.*+²ƒH£ެèBðƒ‰ÞF ñn]Œš J7‘ &£ +ë,ïŒ-JÛ‰BHÄV-C÷Å…A®8èK´3™A¸<÷@ËÌVEœª´Õ‡šÑ}C;‚snÈz–ž§.‡ýu-Ælza4‹x>Œ]ïJ4a®ƒ¡¢a‡Î<4!?³0×/ íŠ/ï„•ÈT<€Xsuv‹Ñ+Q<·\ˆú'S$tÛäÅ]+fe™#+Ä0|صŒ¢ˆ¡Ï:ýæiºKvñÚT¼Ñm¹1~h°/Ðw¼40#Ò‡è¯0Ç!ûy¯» fažÆàç5ïÃ'ô%JSýŒ ƒ=tæ¡éø¨´Kd/|¹˜VI%x b¾Zçêb†ŠXë.£¶8Á5ÃR•+G3N=áLUÛCnýFFÑ”›½gŒ/6X ¸ñ}ÒqŠk‰‘a«C‰îšR¾+FoØ ñÍùZÔ±3~‰ZÀÉŶícºŒÒÂ0Ãûu‡¦ ÿÇEcÄöJ{?ÆpÒ6»g±™î Ê­Ëe(F{¸Ëöp[dñl¸KÂlv¡ùœ±ûžÐŸ ˜Hâˆ,w0 ʈӒ&Wà:ªu6ª™ªÑ{áÇÇž %ºOj-uÅt> ±áƾû‚41Ò11.ü¦¾D[¨ë±+ÆwèÌCõó +Œõ6Ù÷ÝSŠb(xµÎ¼fކºÉ G§ú—ˆg'AàŸmöÙíaét{Àw†±D‘ðl¾™Ò¡–û‡Š ¬óbiÁq2~«3C‰îcšYw] ëcAÕ‘×.f÷ÎugPB@¡½€&ù¯êK<¯ã¶ž±¢2²cŽLȼL~Lhôï‰xþ„ÜF‚›ÀjDVbÒ#ªaX'BŒ @j*U´‰Ÿ §GÔ4ºsL.Ž`i‹L»# i y„0b£!ƒø´#$šç-\h›Hh-êڠч”`À=£fÇàÎèË5i3¢œYÁo1#¸™#, ¸m`š¡{¼'g„2“›#hðï̈òû7ŒQ+¼²¥"†±Q¹­(L®Í¥ilŒšª€Ý®ðÁ@¤œI gw Ô; ¢qŸ :g¨ë»Þ| îËleM#¦×tÄkQ»„%Hº¬KS“x ¢‹‹–K—/é1´x;¶÷G ¸xáñV¦eø”t ܲ¥•M˜-¿õÀZ®Ìÿ€§Åà0Îÿ6Œ·7!tô,vHÖSšÅí8·ï4 õe’_À²81Fœ;Œ,¯Jý›ÐX8€œ#ç‹ÞEòV„CÉØÄ¿Rriá¬á©1à_[¶ÀzxS„Ÿ§ž²n_͹Ú”Üë[¯çoòc;sÆÔœÛaIÍ u0Tsÿ¶P¬ÚWu™ó0tí½yœiÏL[UsnU<¡)¢†c(TaOä-ð©=WÛæTÍØ†šª¹=ªSmh„*ÝÛÆ“*ßÔg΃Ð5stìæá5rõË1¨¨–ÛÃ3‘*ÞÙ#;nO¼ýmŠÆcÁUìß"‹H§³¡š± ¦4çv`Lµ‚ÞÔ:µ„zjŸP µ‘è+;6Dó(òºp5m ½ZçvˆIœHÁ´éÁ–¯)w o‚59A´¯ÑS=è†ZÆvÑœÛaÍ u°Isÿ¶`—æÏê_kÑ7tlüæ!¦¡ÐCTª™=vè ï½ahýäuäÛ°I8þ¬¹ôn,Í¡¡š±‰14ç®!ŠZ;Ó¨õj‰€Ô¾¡ªÑÕud|޹â2êCƒ `Á)Ñ«w\b,Ö;ð. •µì‚Ö!B€ÓÅ$Û#ˆ ¦Pr‰E—‹3Äfh¯elb/´Ü»¡5ÔÃ>´þmÂFô_×ǧoøáþ0j¥tãÞÑŽ¸i÷ôË«ËUµlùöîÙáúÕ³/®îž_ݼ}ö?®¾+µÛÝÓÏnÞnç_—zy•?àw·Ï/h^W y6ùõ5ÞÿŸ×/Þ~[^tÇZûâîê¯×WCc/ß Å— W×Wo–}:ZüwW~û 3qqw{óöÁÒ_ß¾ +zzÒ/ÐMÌêýßû߯®¿ùöíc?øËÛ¿½9:Ñçøíä3óìüæEy½<8½úæú¦<út÷«¿¿þëÕ¯Ÿ|’ÿÅ–°Ë¼*€LEЄºÏª¤˜òÍXJnŠMÄåçâ §Søü×?þmKÑùºu+KË´û{üû_ñôoht÷ûÝ?ýË´{ñDjù2 K¹G}ƒs¬ç}ÝÚýn«Ôðu¿[¶tîv 7ßcw—Y<½|þ—ë›oòÄyõ|س¸s÷yþ° \â~ª)ÀOö­À#€ATD9–«­ˆ³C§?MÝ'µ$º¹tPìÄ‹cûBL—¯±ð<×ñ80,ÕÕˆ[æÊ]lÈÿ 4Ò lb†c`cÜ”¯q”Qô„ ™BΘ¯m!ý‚µ£7 +syÙwŽd77•Ê/+NB2çu&û gôróöYæÕU¾ûÁñzìAÚ¼C\g ¡X¼™1D¥¤x#AÓ?ÖA w‰jl™ì¢Ù´Ÿ*¹·ÎYñÞšR,wcåqàMÚ’¡•èSƒ¿›&òåj¦|ý£#y¹½+l]QåÍØª(Jt'7k“_%4á’Ö9ÃèyÔD×r‘m0tQ";ˆ3„Љ_Ƀ43d`~ tK8¹ ‹ÁÁyÈÀBb£²Î0¨Ž™)ßì©örëWØk‰Çåïž#…> {ÁùÃùç§vÑçXÊby²” ³€p“žË#6ñ® B¯ád¥–%,ƒŸPˆ 5‰µ-mñu(Æûä˜+shÑÙ•_Ü\È*HÔ-ß'’"[й !?¶ “a×ha)Õj°ŠêN"‚+Þ–h[Ç8qÐxmš(ˆDˆf.V{í’'¸—¶#Er†ÝZQñ¹”™ó oa- ü&αÀ•ÛÝë‹æœfMjÎ çRðùŠ iÕÂ) +²Vàž°º˜ÛoËp=¡@Ò3hKgœ%/HìIå«'æB£øàHï·æ–&ƒF·… P[C̦¸Q2¤“L-6› Ž µ•äÉÊMR‚² JÈ¡J̤„š/‡•bQŠ1TŠ%BÆc)gT{vÆKü+#›¬(yÈÏåP.q} âÈ Ü3€¹/ya ãš3„ŒÑÕ‚Ú3Q¶ê²GBQ¾ê Ê×bp¼çŽo*ÄrÅ*åŠí‡N:‡íY;@a'ÆZbpdYÞ:Ãã†zFTO>#äbž©OɱÍ2 ü.²I¬p\ø‚_Ÿ7,Ñ— +C>©zäFŒp,&š’¤h©£4á@„»§6a1ŒX f’å“÷Žf@\ƒA¢?§•b^ðø¹Ê@YÌXÁ?Ô¸N'Ut¤B.ñâ$‰%h/ãòD¡¹~,k %$@.–±=x¨ð9ºs÷8¤ÐD'“šö)]nl›x¥U’. ÍÝ™Ö"ª¨èíLƒ÷›ô”HEGà pJ§èÅ5~¢ë'/y#ä£éNeg 6Å$tÐ3´ù¬µÀ8>´ÀzÒ _L?hÞE€Ö3­MôúÏhÇJn HRÃú”õí&&jA"ÑÒ¬ž2Õ©-NŸ°jÃçSÔÙÕV“‚È)®J¼½^ÔÆPof‰±öù{%Þˆt9Ó; ¦ÎðÒÜŽ|xs•<·MaE'lú§NiÌ%œ@a€¬1È+#ÊÅ‘gM¼Ž² ,Žp/þ©TåœåÎùµÀzúr¹7 +V1í+V]ëa¥"Õ¡ÖêÊÉ[\ÅU×Y±ǽ„ÀãqpF.w¥Nšñ1—‰ÖsÔÖd­pl± éá =Ža’JHx/+Ú‚@Ø4ºbƒ"ºbï.f;D1“QÑ{[¸0¨N*‘—@p wÖîc‰ïm0w «Ž*_5G˜2Wà~iF£‚™ÎÁ)_f¨Ó´A¸&AðMòœ¬÷mܧz[N µZ2M©dšœÜyt#,>š]ä~^ˆÁ$ÚÖÔ±™KšÈ\ð³Ì%ŽS~M‰[æ"3”—ðl_ +˜/õ©euS°¢øÃ”·&#Gn[†!PoÉ—LqÕå-Ì@;’¡m<:„3P•v™OV 8‚€† Œ~¾F…FŒd×i*˜ZÜ(]¯ävwðÇàb"ü4*‰ñž¨x¼:9˜|«™’¸ 7,-ì*5"ÈÉj}ž~ñ-ÐrKªÉÙQ®âq¯(f„ØŠ8!Aüß@©q27¦ BêÅjBAiaŽ, åÒ +3H€ñäâFæìM(Oºåš’ñ¼ªc„5õ v"ðÖלÎ!Ià:É%ÓX?¥r[Y=:•0¦•fQgµ:(‚ÞkžÊ)ÓZÁı⠄Ѡ5ìÊÕD/ZHCLº1(ÝpSü”÷rM2’;ÙüQTÊËG‘A]<] èÄH[©Lµ«a©{‚tD y#¹bÂö‚”.J G|MÍAˆYÓ<¡‘áók¢NÅ×+ñ>WlE¥AÄ}å²_P– !‡‘»Ÿ5½ñ7By)¦ôJœÎ2³jjp[D›ŒÈ­d¥$7„\X_#0´DC†QâÊnò‰È7h$163~eôðU‰ 6³2ñ8˜üÄŒ”dΣ!êµ"\ÚI.:EHt)Ή"ueÁ ›©8ÛLj¡"¯q‡!#Û‹= QŽ«E†¸Ü´úÊhÄ üDªÃ¤Éñ¡4)%L×$ ]-úHŠäHæÓ‚â(;M[Êý8oòQBw:Fâ*Úa#¹JÄ—²%‰¯ép´ZcΪrEq!ŽN¤®Nk2€p4NôÈrÀYAfâaÃp¢°³Š7*4-¸¸‰(yJ0_w¢2%wÙR•Åkˆ`*_™XȹŒ‹ ²ù÷yÓµÓË ¿k#Ndd8ñR¥¿%Cæé +|0ýæZ$ô +\?Sø&ŽlÎßt ƒ•A{2¨š¢ìíLK8-?“«ÊqÎeÄcÐg]‘µù‚Oñü½MHε29VÜ1éDàzÒ@I®6Äa3åã›âq=òǦìÈ›®b¾¥ÝqˆL'ƒš‘{Ú+ÞIŒ¸eXw{ |¹%ÿ ¨8 ±A13$uP RôwsK!“Êsð¼”íé±·Ãz*DOF90a „ÿ«×æ‚2l†7\7i‚¹hFœÑ'ÄVÖ­Ê·½ UK)x®+.«œ‘”ØèÈ?if€˜†¹>Úî˜KÔ$ææuÊ ÞåÆ "ÙÊäˆ,à’A_"Ɉ J ¢;#_vXÐ6«Å´|·PÿT0rý#ÿ8šT£•9…Pêy¡/Ö-fï½)·ÙzbÉYÑ ç8jÞ}CC#ã6…ßX]ñ=µÁ™§âÈëxH|ðÜvrm¸¦=tÜ1Ê â€ÎÆ ‚YJkÉà¹Á -pײַî?È̱M&ïn™=rJ å&÷‚˜ÞKÒAÊI{U–;†ç“oühŸ‹Ž\—8Å4”r¢@tˬë'7µÇeˉˆ '­ï}ÇÐ["kÒõFÝùZ MŸK3µ=t[Ë} Oúf©$#ÕïQ+1€íö ÞÎÍ3qÐåhÏn‡Jíƒ§Ž–ìMKyFg [$cF[N×Ms›ÎZdœ óÌ5*fÑÝ-Xfˆ—‰N$f¤<áf² /l„æë¬Vã*u.uªR³R2¬ç ׄ֗ռ8«xó%í ¢çÑCŸÓIV•ËW}Q%GºkD_•ÙñBߣ˜ðieu)›JÇ|Û9#XñDšÊžÒ@ +“в‹™t‰žÁBQŒ6­{$l¼¦*ÏœY®ºJùbv3£²Yæ’Ý%—Y%Éë¯TÖí µóäíÜ7×0t ×ÍKŸ|u_£R r)¥mŽ2h_ÆÑ bÃêàedˆç¡ÏÕÔ +@/B­Ê"“é Ó!¶$B;=³yç`Å_xét’×Dí쩊•[Ë¹Ê /¿ë9xÕû)áŽ-}ÑåÎ¥ q#š*3Á‰ …+%›IŽ^àME§†>DéMÄHpú’)“rM]²Ϫ‘ðSVlL’‰œK&¼qrû=àÅúC,áqA•q®M¹÷7Ôß›‰ ÷s!jIÀí -›ÚïttÍDQÒí²á. + + +ÎÙ|ÍCÙ%Ǥü…ó+o¥˜! ˆX™BÀâµ;¾è®*ü„ßçk#(ø—Á(·Ñ_Ô +B¼¡^ˆ×;k©._˜õž¼‚Ê;¹²E|Åx˜ !š‰5þ¨ø>Ø)=¨nˆ!M“•žiµÛF \T½_‹òN^'œlö„B†tñž /õ8ÈÚò…¢sÐ<…ÈÛjw3„½%ëÆ»ÅŒÍud90èÇÏMQ d1ÆÇm7EXn–prPH—cî2Öa)Á¾( ìÓ@ÔÙ87EtŽ”§¸ºžÑï\¤ç=8ÜïI°g±DIy Œ°r´dÊ/Œ˜ÉwÜY¹ŠœÇL¶˜¢oU™obÖa02S±UÑøXqGä-%Ô¡2t[ŒdÄ 5Ö‡- b—$bÖä/‘àK°9¼`à % œ¬ÜN.c«óØ’qÖ‚ýLSÆT.¼b ÚÀ9?r³·!ÿG¢IŠ*7Eë*눱¡^p© +ž'³ôˆç2âI +I%j‘·æe¾òŸ’ù…KPíÀr£“°œ~ñ1ôæÇÐ*ž/ä à “–×Å w²ˆ³» ›€Ì‚àÈ•U–¡&c–qÞHQEˆ*66M«ˆ +­Yp +ŽŸ¸ž„ÙÌrŒà7’«PAË•™TåUÞ_ÆHT•jøŽ\H:ÉÛbÁa#±ÁE™¤‰ Í»qÀ¦iØ +Ò´Ä» ½Î"AʦmÌÆ´¸&‚ƒþöÞ¥Wš¤;¯û+ï°•‘qÍ¡øÙ040`È{Fm0/ ©ÿ½c­UYu^}JðÀ@w£OETVVVf\ö~ö³ +_—t*Ë ‚Qt§b#é·jô¸eÔÅ9 +{Êa2wË\…®„u¬áÇ&ãp_,nU좪‚3º•èáFŽ Éü#O8××Í,Úƒ…sT¤‡XPŸ˜Ñ°$¬/ß“#ÆÌÍ\¹æÏaãqÎ`»é‘ â¹2†Êá[¶,=Z|)(–v868ÐÐ`Xd öøp¢4js! +ËÒ«{iké&œï58ް]î3oÂóØÃúD²¤¨èRú»²u˜ËÎËa91>’Œ>æå¼Â§ÆÍeÒ1™¡£«¼Ó?9Êwå±QâDC%|8º‹s¢ófžïgù=$ðÔÚT#š†6–¯ôú„2â@×ê5(ëX»ÇQ“Š1ºf{'=>ÛéLOÑtŽ•nëkŒ¯³G¿‹NÕ$[µÆ_?Rä- p<$ ©¾ÌÅe3ÞGØ–ºˆ,†”ø8鯔àœò/ÓžP?b|ÖÎp®ŽÇ)G‚Ä(Ù72/#$c¸¹Äž’ónÌ#`ŒJ ß}†?Æx>ñΙ§È=øËvc$U´ü•BóQI>ž±w Ö÷~û‹ÍëDԧǶãênGƵuV@žáºZiº¡zb’K|”[Pz±}™»#;UtàËñI!–$4zØ£µkCyÖK=tS§%èIEŸ_lÄH˜;g¼¥+J ‚b‡®ƒGèXË/bŸ¤’ââw¬!×0ÛR«,«kˆÃW I¹†J†‹T0æ©üé+?:4ù‡çj#ˆÑ#¹Ôº½¦õ÷(9Î'®aîáoï„2ÛY&Pcºû$pë7$)—eˆ% +ÿPCÍ||m¨ÇÆ”+CÏ^™YTÒ^BgæÇu:¿$ӥܓîžI¸ÜVZíÀ‚‘"¿Ú³Bm.F0 +)&E8—Ü|b&$Ä©„FùdÍæú:Ñ.˜wÞÔ™Òš(STí… Ü¯»ï2véë AÄ|QŒˆ¾‘´’BІ‡+ã=tÌ]¼ÀÙÖjÁ†gÇý /µF Ë@ð âÀ #.£Ï[ë±8â>1LêxìÏç• ÑEiÆabˆgÔ¿–´ÔÉÏÄ—„RxXÓíb_e~§žcw¶f9¦a¯?ªBE­#Œ“:œ³ _GK(y¢2S)×þ:­&Lø0yçg‹ääl€+£WB-Ar¸®ì;Â.M^‚9Á Kö2–fQã–›-ÿ¼vc%~4-sù7׬™Aã šZwfWžSiñ~…§¨óòÂå™H'™åºõºâ\úÛ*uNC,v-q²•Ði´eà Ct*¾ÛåËó+ú2z,ûŸùíhƒUàlN´‚½GV ª*ü:)6¦Rû^Ï" +fkcvTOÆbÀ„Ý)ÚbOÀo.mãæmÄ‚&úqÇmžD+»nZ›hZYZÒàz{6d\€¯$´.6\©Ž—K/bÂ@ï9ÉÒšÈ_{|vT³an~* î™=-tÃTl©IÛ§E·Sbá|_ã˜ç^ƒ77PàºOzù#ò˜¬&Ø­u¶ÝG©ßyEfó—`ÙJ!ç:A)å.ÊDDª£i¦ÀíÔ×Ök ó4´;µCë|‘U0Ä›½sÅçá +ÍšB M8ùzßh[‰ågkQÕð&°•ßž¯1PÇ+76Bý")æ9Íqra¦«8ŽXáìQÚ¾ˆÄ[.yxµ¨è=Âÿt·}W­g·é<N2G ÒíuRü>7º„ê•ÓݺB¶ïgL€±N“ÞU¤ë]‡§5—r)¸¡B=ÉLÍã6íæçe¶›N÷&,ñ–x¹·3ÙˆÓOý†¸ƒè¤twƒQ,=z \Tb™8ElÕe(b¹Ôœ  çr…êWÝ÷ç/8L~¥ÓÀI +D‡øJÇulSG21^š†öŒXù8#@Šã‚[÷¡Já{8*"8j` =l?MHR]ƒ7 ×Ûá°˜¡©©R•Ô‚ ¦¸½vŠà}SW)œBA@ªO“b6öÈÇ*ÌI¥Fböàöœ›xÕ\ß×Ûvþ¾`@ŠñåöR,WÖyp%lÅs}9/yÒÉiÓËgw¢*áË`Wþ¸¼í¯ª*…oT¹Q×µÐS޵ýÐue¾Íßoù˜öð15I7Tì|›òJ<•-, +i 6JªÞâCZ~ú ¾Ù>¿3(3íhÿp’÷*){«X`'Lïø¸K{HôøûÎQN’õåâÌÈ9/ªãÀ`Íœ®†5—ˆ_V´o^…õ6¬ÃŒ²·˜Ãè°š§¥Ùh›¢¸ùs´çI“F¯†`…¢¯Ï‹ÁóHÿFÄ®øZ°¾Ž‚e•)tróWõFN—·F­û~Ö q®f#/{’Bã¡"Ðïæ-P—©ºgO4xÌñŠ˜õwR±¾ctŸ×*ø5FÞ‹íŒüz,4bÉad +U,«öÓYóSP{9×÷,i(©BÁNÃXb—Š¢N‚ Á*ØHX¨X0„q$¿{}«äQÌÉVþDÄca+@â,õ“Ö+ÍûÕuÄ›Ì5\WÁE((õµ™W[dsõàóźÁÆ[Ì?¡ûx7+l>»¸¼’Jõæš}$qœ~Ô¥¯ª-nï„‘PC>’(&ÚWmtE¶ê§oÊ\ñØKôö£Xë0§2×DlDøU®»‚ÐVÔ·³µ â¥U]6:ô¤å9.jÜšÅ_ä­ È#4ˆVúëxs½éëü.WÜ,·yþ|- +y+ÆTpH(ÇÜ«¨ÅFáx kAÂn%_hŽ˜øÏ[œ7jæÆOÙÚo÷ÚÛÿª±a.ÈÊ\m̦dY IŸÃqà°ÕÂ(A«îëÖý6ŸÔö_|†Ûü|.N?è ;(ê›û°ˆ7‘{þÃn%×O+jƶ +ÇÌüFž<µ$4N´sYbáàO3kèÕ°C‹s„Ã…>“ᤵ´…‹;ÏÀdj±kŒ=^à€ƒýfB%Ê}GaÓŠ©ž:\°7ÓŠŸ!Q<阊GÈ$mŸ®•Ž[ÌAc£äõuõ>¶´,Õó¹Yæ…ùUº:$ë xTÄ#ÍšgLî5“þÔzšLF““|Ýø9µ‘0‡ÇU(Ì"=Š4Î7æû£|D«nðg«fm"Îl¸|¸&Ÿ}"ë‰Õ‚{ìsx¼a²Ÿ ‡¬ËD•ÈŸU¢±üq#ì+7•1m™?9B.MZ1L +§í<7æÚ¹f3·†z¦} ’¬œØá„±bvŽñݺڮxØÀRù +“:hçžõÍŒBÀ@4`ËJ>‹•æÅËAé蜄LÃZG†‹öv˜ð“‹‚dí¯"†Ð-ó»QÂìÙ´EŠecDCÞTIRq^ƒ?\Rð¥Ì"têBþ tÆ•<×{÷7¡Èº:ŒÌ¹m$Ë•Ì_dHX^Íïqâ6ZW‰ I*ëŽ*Þ.ê^c©†=1y=‚ð¬Ê¸5áDÜ“Ô=#•Á™I'"¡â¬óÊÒ8bŽ:,¹¢&W€9 :9Ï?.…”£D”¿JÌ¡i/[t† –ó””8Þ`râ†l5åYÚmƒKÛÌžÆ)ïÜŠ$y樛á™gVOÝ•´ËUãy˜v1%GáÍ`_ˆoä‰n ÛÞ:q¼;û +çlɽ»aÇnÏ"§¾ò–Õê‡Æa¬6Þáz9¶°5gZ‰5ÍŸŸ!ÕÕ™þ†I%x6n8^‡auFk +q©‹çɪ¦¤•;/РÂd…¸¢FÃÖøõî.™°:‰A3‰Â¤cÌeL·ªó¢hdî1åˆÁ)®åoƒš';ýcõCP¦¶7è¼Û2äŽjÄ#ª“(‰dˆŽÓ¢•åÒlí-ª|C|‰pÑb™¹fiÕ—8£+¯ g6UþxÄw§ÕÍreSש‡+ëð¡VäuýaœYrÔ$ï]o…eŒˆê@íœlI¡µ†€ù*¬´‰Z&4Jg)SØÎZLÅ`º®²¼æ(ÁOBPLjH”²…턯õ8·äŒâ§0¤™wļ‹0ïx«Ê;zS­g¢1¬xýŠ×I½Ðå:Mƒ[M=ÒÅuH±U^‡Ë!p¤H¾Íl[²|µzz•Ëù~¼9ÃXøÆR0ÎàUJÜn9£q"|ÁEŒ#¯Çœ¨ê¹JDzĆæwÉÌ…ýOwh$Îo^ +W"ÛjÁ´®—/b£®N¸MÃ>Ïš‰‚ºš´ví¤ ó÷r%v©‡?•–<ª¡¿bYvXÄœôŠšïµ£îñ°>î"ß«¡pÝ;…s)B3»Ó(mçÑgLj†Šª{gÈàwõ)/ârÍfƒ4‡­®fƒiÐÙ›ÊDZ ¤Whèc{Ô×áüŒ†yUó;`¾<;î&;Ö ±}²X”̧”|*ñðeÚú¤Ma™ÝÜX»C+J@£x,ö)T˜2-ÐøÍ'K¬GšcÄ'hÉ7»d£íQã Ãgëœã^‰\lø5$HÃ«Ž’ÉW¨N#¸¹l€H® +\D«QæEteŽSÝÇë8ˆ0çì]9”2ÐÖY¡¶2ä’V‘ÑRÊ"—«g8õ¡ Þˆ§T;úJkDE¹nI‡^ËXi°.îÇæf_'©î¶‘ AÜ”lP|GÛ´·qè³ÑÁ` &vq& Ó ÚƒÈ5ùº>Vy§âù2-~Þ=.ò°-G:¡4¨ÒwŽ¡ˆYïT½?gÖÀ ÛQOç!=8ç³Åx{F ½ïòþšï"òÇÚ'Ô†°Db‘Öhx¥-ܼÆ5˜» +V+',÷+tÅÝoypçëcôá½÷Ш(ï®Ë«£#!¬Ê ©ái ®á4’ˆÌqâ<Õ¥YÏø§$Åu {y,<„çõ„…5ʼ?ÃRº/-è±´ —xžŒ`|!AOPQ¿ Ø6À¤„¡§¬Íéè¸Dƒµã]‹`¢ ­-f´Å4Ìnò LGƒÀ›¼áÏX,?Þ£ùD¾‚e:åÌÖÂv“ â ifƒø“dbÎÏ¡ö^Nsñí5[‡cð'=W.x6âÎgXÇ‚Â(Ó P°S/ëÞü‘pô¹èŸ—ŠôeÝÅ8(ù‘ÓÌñ•Xå^1ÃjÖ—)ÇîÎØWHyœöŸK¶C‘,’©B»3ËSu™pÃI)Ä®ì0@…2š£}Â^fïXNïÙSa”ÔÄD0¹Å¥‹ÕеPë»sÑ›_²¨Q øäŒ¾|ÑØî¸ËØf\7Ûù²!#ð8ÆõÈ¡îã”f2¦‡^å±z¤}: ,–™#>hÞ÷ÝãÉjGÙ²F‹‡2”¬UëiL_<ª"#îâ*ÜÈ OìñAø+ ž ü¿¤º½¾t{U÷Ÿ³©ÌQÐŒ ¨8qê&OÒ­sÖ»æð”ÉŒBà8½’×é|/Ýõ…¢aø­FV„fôȱb^(’`q_÷ZŽVnÜÌc`£bðx—™Ð<—òå ž…QTfß`D}­†éH‡4o,áÜXò÷±ôHëï¹51²Þ½^Ì+Ú¿¶±=…}Ó©¡ +=,þϲÖ³Èn ®Cc¯·e2YÎð†KÙ¨ÛÇëW-¯£=G íÆ©ž„sÀìažœÒlŠx‘·\eë>qhè>{‘Д"tIu¥*‹\ü6¿ØfêVGä%®ú.¦Ugcžß+~É8‘ĵ¤íʾËTœ2µ^|Îqèó Û¤ÉQ€ +²¬NÎíaõ=†´ç‹]¼#Î3w¹{^c*²ƒŒƒí¢Ñ{8J …s+Cq‚–¡MµæpÆAõ·ç” oénÇ´yO:hòf"ø•GäTlz6KPRuñ;_)”™K¨üŠ+ñâ\+ø´4óˆÎW(ç¬4Ÿ^wo®™ +AÉ­¾ä£lÉ4•Ôq¿QÎÎÌ슚ñµ'‹ÃS/OCy 3üð +^ÑæuÅ»¢‰£.kŠ hëñ沩jÒÄ-1x(ÎSê:!­.çò©^o·­Õ´å˜“õ fK],F;¢,46Ê †"?A_«ÒŽÀ›\~Q~ßÈC¯™ •½e 1ÊRgõ§úºEl |??§k –GXDPû˜®(-±Q:[z=³P9è4‡Ý ëR4;–(öðV#Ât…‘íAbžd×0ÉŠ#ËÑ-æË=@‰ý¬ +á»–ÜóA(E9h_æ¿dQÜÙeÓoc=NxÒ¤8Pü'œ§=̨áƒ<ÖGo%›N%¥“hfª…7 õŸº=,Îy&"ÐÖbšÒBž¯X;ïò†Fä¾CÙr¿Ë<²åÏÇq¬m¢;–Že B~òÓJ`–¡ÒU¸1'Šòz`H½óð²a¥ÀÉ÷'fvˆVaZSÖÆÚ̈(V½–zU¢°vöh¯y‚nÜÄœHQlÜp¡è˜óä(Ô¼R¼ßlÐlÀ}7ê3™m \óºz¨š&3¼7Êc£„%@‘nØ©Î]>ÕŽ¤†™lİt¿Â< +¹5*–PÚ“ÁLw)Ý›¡Ð^Ôº(Ap¶@ÉV ûÐâ”ÈÚG0mN$µÓÚí|Mñ+æíwÃ+KgÚŠïúzÛqÞ9¿yô0§Iá?CYSú¡a!ŠñJ[kÿÝ­…Ï5{Œ¾Ò‹}¸61f$uê¿þ|xåß>²£%L„CæC¥ä3Æ£Í@´ô¾§9Z膃y¸Ž•xÍ‘ºFyIåÎejPšÆ!ÁËŠàdxÝQÉMr›:‹pƒÂ üH†ȯÆr·jËrŸ¸_B”\GdøDàØwYúV—Ù·E}¿°P¤² Ζ.hƆ²kÛi½°.oPhçŽàu<ƒp8+á+ÛöiDƒ"©×þÕÓÒÙ&B¹–sQz<È \$Û<KäZÎHÆÕ d¨ýQÐŒ +‡D2UšûQëÁÇ".&µÔsFø•Þ¢ñz)^òkãÌB}ÁmíµGkuÝõ¶O›?SŠw¼¾é¶Κ'SP6|Ö|[(ÌÎÐ ó·Þƒ *°œÍ/PN+{˜ù³bæª*Ðd*^ßn„Jõ…^Gä“â0,Ù…7 ×–É›Áƒ$NbÙ'b……~»sEl]ÅÃohsèø± Ûº–‰ÌBGêÿLš•ËF‹D ûp%dX 7à>C+¨çqà^x­ª8€¶Âtû+[Ý]–´¿1ÌÇšÐüaÄrÁAºü{ÂIs͇hhÅ©ofuŠâ»o”Â’Ï÷|*Ô°~±–{Î[³ êò22$Û—5™E6wýúËã‹TÁˆïCÞ•g5cÙ;H#'/¤ÃK ¼ž>£s¦EUjÂph²ØKÚ² n†ðbI%·=Ç’PmÇD}gê0o¤Vz.t«CF8û]õQ&’jd³÷ñúP°›1à¥uKrC¾@ŒŒ‰¼­Üº9µ3pÇæü[Œ¯L•ƒê#‰‚1¦J)H‹R€ju,^H]~ús_9L!Q¼—óZÑ4ó£åtz!m”#©>ÌÙÍE€ë Ô}5j4Q3P'žï‰ÄAå/×*5KÎŒÒçw6ˆâá]W¼FάŒp zXêЪƟôˆ$œÐF¼ í ,è±fVq,ä[8@nÍ!›(”‚e¦ê@Ì·Ÿs+Á·k`Öe°tPô+&ómK9­ +)$%fá¥põ¤Š"¯Ä´jcž3ˆ÷ˆñóùŒU -’¡S£­ú )¢ÎºK¾ÓlPÕRqKRb Ó¿Ò¦Cõ2{ µÚV~¹Uç;£Þ]-¹¦e9SëFK+ßN|ú ò£î×_n»9¢cáæ9¼SƦë”+r ó’àX«LÊ +RÖ¸™£ÏX5%y9ß:ÉÃÿ訙GÿöYi…G:zÀh¼­·ÛÚÃ’š â0¯˜ï¸ºLŠÑµªå{¼ŽÇÊã{ÎĈ*Á÷ ¾‘.”ÌãÌ[õÌ=)þ±a‡IÔI$©ÒsA:<Ñö`·³”¡Já_^²A®ppºvØ«Q_µn¶3”·ÔãÏÕ–ž€&ú)Ñ0·‘[ÕeN)%x•˜£n¥{øn¡;W“n…P¸Y•…óõÁÓUAapë”DÕU4û(,­á÷Õ´—¯!xóO-&Ý¿ñòØ‘FL½ÂQ‰Q§YÕBêþÅàÌn©ëYâ÷²,ý¥PÈíFTÛ¯»ŒÑÊsš¿Ê¡êÑXY¾¼‹©Ô,¸Ž0%FËfW޳Ûò”JÈ¥È aˆÅWr^ËKî=.¼êhÐ$…”K¬~‰ÕÑpî»,ÇšÑ +%‡`/<ßSâÚܧe³55Ëà1Ï •õù\;höÐ.„«Üs=Jªo¯ è+AuT™KÊ9ÃäåÉGcÓež2‰UŸÌ¨î»j°jò cC¬Ô5V›úÙÀÕÈ+K´W­Šž­<çËÑׇõ™á2 Ë5›Ýãï·³êaãÞ‰Þ5G}µHežh—è†_ÂÈõ*C9É’|ÌGäpD@byorˆ?(ýé¼5E¡ç±V©—2_F±eÛ´a¡hç7Ü…i_rèô¬4-FƒyìÃk|.í FfźHåÚëbYºM²*eÁѵ d¹ò¼Vx'¯(ñºUGzÀ^-^ß•+¨9WH™”8œÄ6Fêà(Jp„¹ÇOì }nñÛÞ_ 9iòê/­¹F˜bF‹’ŽÒ|=Ø(ºtžÙšóô¾ö¡jbXã=ï?}9–*‹†ðÁ£²†åâr¶Y²Õú²þÔrǬü90qÕ®…ËOýl¨Ë¹1@pÇ*êÐÓ‹§ež`_­Øð0ÃPÝÀ·î±Ïr=÷Y%–<¡zÒš\ú<©ùT;Q{Zû¬¶ý¹laÌÅ^WØ¿3ò<ÞÁླྀðãg¨^ëka‡(¹aºæX:”#Ë: ¦°+–ý&)]ï;r½‹ŸµÈ–ßÐÃÅUtÚ¼ŸQ^QƒâëJOcDÛGQ4ÞAGðØŒ0±* ex¶qcý."ðß øÀ ›2_ÈÇù ø(P÷ÓÌrĉ}2ëz eíþ­B¾˜Mê"¿Gì¹€4#y¨ý0IIK-qê™Sp+Ꭼá¿Ë*AaÔwr<Ÿ]ö_n¦uar,·ÎÂúˆ³¨wƒ ñÙ0â¬\ݧ·fåÐ¥ÇjIfƒu­¨œçÍF"-[s™ok>’¸ãK²«(”1b4¼|¼Ð‹‹°ðt{Ñ5"å>G–XÀ;ÂV]ZënXâ»c\5m¯VŠÙü9 +é0MäíG¬Ý*ù 4ÚÐp¦Û#ëŠÝ}Z+zkåC¾òǬg\VM(PáDôàzŵbI63ET© »'Îõ8÷ÛlP§‡}òs¶¼Ñƒ_oËö²J–*Ad ]$³™ìŽÎŽNe7¬üpÿ°{s<+ºÙÍ[Ø2DáφQ‡ùhEð.nsÜ+W\cI¡\ÁV#XYó™Iþß k6B懒Ìÿ~ÛņZ¤ÑP\ž,Xüj8Þê¼¾ZG[«"²ÃTOÖpCYåŽRŽ‚þ\ Õ‘Û~SŽ=¦ü|4[-µAmmá'ÔmJl ÷@¦ã¹…Í!޲gœË¿Ü¡„L,9®ùCQßé¬Åùu7÷&gÝ ëx=\åç}Ÿ„žQܧ¯kàùѸ:s-þ©¡$%®V"žK¨LQÉ|êSmÿ.+WƒÌϧiÈÅ‚.á㪆áU×ak8/Ìg¬Æ­åvüŠX¿ÖKªŸ} + í58^ËYc¶ž«q‡ZÀEÉi pª‰k«Hý!1I~l©> ]ˆ$bB½ ˜\Âý0²j\o²jéXþwž‰mþâ·£·V$u—wòœ€9±‹Qx›ºu%¼sÝšNpbh01jꔯ3N±·¥•¡t¬5¯Ç£ð€ã¡4EGá:„¤¨°4éC¹„–ËûxJs±‹Ë¡²°TK[8¾NQäÛô‘æuJÆE!ä¯`)náR SÑBF&RVNÞ +Ÿ-šçD|ƒÕ%ÞéeѮͯiäîé)ò#ÁWíýÚX>KpÜUJXØáD­Çö¼Y¦kE¹Téj÷ÚC¨Ïø—rY†zE¡2ËBï„Û‚™í´ˆ[.@˜Ë¶øÅˆÐc!­—_¾‹žm­¾Xµ/)³s1üË30ôú—¸xÕ¦æ‰ú–Ì&›1r1ßCl®‘Шõ§í‹ŸÕåµ÷ƒr+M/}uQ5Æ•Œ±D!¬JûªFzLwúði¥§Ú1Õú‚ù°ô¡ ©´>BţǴÏÒ¹žß=ÖäÑÅ[+¥Oå‡!;2WG`™L~Žeæ@”û-Eê,˜`ºYmÃ+r!Tøh’!£[ñ›*·Âª…ÑúZ8‹K/h´Mg|”Õ#ð {x ¿Y* $ξÿ” xº^›KkfZ‹5Êh¥;+KoÜY1ÿ¢G¬«°A]Ÿ SÇØZ¬áR[wc[wc_1áê¦5Ü–‘øóÂz=½›¯Ü¯æ?ôV‘4¿+à„¦Ë”‹\y*Õª7H¶ìYë(}ÄæôŒ!îäl‚üˆ~Ë.®Q&íUá¸m-¬C’ј–j_Pž#a]ibSÕT ¦wï+2ÅŽÐ~‰÷‘ëÕ†X˜é°ãÜùfõ§ä‹á5 R|pœË„–T3OÈ<ÆÈoA5ïò»ØžÑÔâŽ\¥b‹…,êà@õ˜Šè’¨7ìD÷_d¥c­Øæ’¤‘Ú>Ö"`2'ô”ð¤¦]íìµÖçc=ÉÇ 2žK´rŒ×*sˆ÷+S÷¤ÂxsAÎ&c‚Lìñ]-"ZÉßd.âÒ»5}š)’*ÚÚ§ØG‹O„²ƹ>ø&MeÑÁÙ°ŒŽ·nð"Åj|Ò쇻;%TŸ¦+î˘4á±V¨GÀ5Y[/õöxP7²èÄ˃•Òöd¨=âzGCÅŠüßÇîîOÿæûÇ(¿ÿ·:Úo–~ýû¿ú§ú¿~ýÅøÿËßüë¿þÝ¿üã_ÿÇÿû¯ÿç¿ùûüë?ýÓ?ÿ?ýOÿÇ_ÿÿùïÿõú—ú/ÿ¼úó[þÓßýóßýÍ¿þÝþëù!ŸŸ~ýú‹÷ëÿßøßÛO࿼ÿñ0 7p­†iÃ6” à¼ùæo_4ßÅuýà6š?R…°yBµÅ/àÜ&ÉÍÞa¡LÚþ/oôtÀël.moòáÂàé8؉GÍ0”"pšl}õŠ›QÖ7WfÄš²F¬§¦uäÖlË©Ô$#Ö¨/váCî Ð4 ,?Ã}䊀҈tþZP¶Ó\•×°¶\ï×q›Â·­b<1#|{J¼Y,ŽCH²F7(µ39)[îp(ó­÷µfȹc.Íûhñz¨ßz·Æ„Ú“¼–(øÿ"Þó1ç¨ß ûj}[ù ß¾¢3ÆX{jS³6ŸX{Bk^æiöw½ðÄ^ï)×ìúæj?ë ‚PVûÉ©ïì|ÚØxzÖŠGú ”Þ¥f½¾Yôú“¥ôCíë¡ÿB¯[Vj7{×´~Õoä< ãúiž½vs÷ù˜ï éÓúÁ•ï%Ì8y6ôÔißùQÿ ýµáñȘaÕ=˜ñ8.ö¨ÔÑO`þ}åQ7"ž¿S’áyqÌ„ç¸TR/<;”3þû€ÆÜ¯}ghC|ÓÞ9wÄ‹È;µRÔóßlw};³é«9µ¶Ùî®<."â' +„óÉvuIYë’tm¸» ’j!FÂyÃÝ£X,­b±ë|ÂÝ­ÃKd¶–#ªšMTS"–ꆺû÷á]À¿<¡îÞü2Ò žuCÝùùŽóué§ësç²a{3ÜcœÓ¸9Ù w—WXñ°¼"÷`¸G«KTìªú¦©Ópœú¾—EÄ‹yv„ƒ0~B`^0woÓk3Ü]¿¡Ûý;5ßµ}òoÿùÎׯ!ŒéñÆjÏ ô©ïÞ‚*Tò2á¬÷‚h£†nˆ5ìv5ª)á@VSÛgæ&U‹NÅÍùP­|ö(›KH5àÔá @4ƒ÷ƒB ¹’Æ Ÿv·v¾˜ÓàF}¸ßYÓ”éPžs³¦…ˆÖbš¿íÞÑÒ' ¹tn¢ôÉ‘›#Í{˜BÞéÑ9ǽ½ ÑHèXYÞ¬èœãª<Ñ(`ÎÈÄzCŒS É|›{•ùq49õ7h4:_wä7õùðNÈŸ´ç?”PÝ”ç3ñf;£f –òÒ†Ú_$g}ÜÞÎGT˜?¹Í¼ú ×Ì%zƒ44³ *î­Ed.A«x™‹[¡‡j2óÆÆ/“ø.íE]¾Õñ„-_±t»!Ë8 ”MV>5_½O¼(“ôâ]@e;7òdòâsßðÉ=ƨMMÆ +Ãæ›–|ÿý $ß/Þtä+2 p VÕµÒ ù\ ›»ËÚ²Üèãý÷;ñø~ñcçÂq7ßxÝr¬ñ¥ghÙ4ãú 1†û ç/ÞJöZ|¸ñ(ç†ÖN|RŠy^ÕæÞ˜â¿äcÏG–O|hÈ—ò“Kœ-”ì/1ë0þ^b“Mµ>áÃÐþpmZÌáyß86nÔ°ÑŒüAžO+OÄMÆÌP3p…•!ó{‘„1ë`ȉé-twš6F›Î'08 6éÅ >îêæ1Ëã‰&ßSÂñÐßòQó f4bü`ÿ2á°k½¡¿XÎ2Ùܬ_è΀@ˆ_–6¦U— ÿèËßCöÞ›L€åÚ7¿ V@bûÆÝõz|ñzY¸µœ6¯—KÕ©á¡Cý ‘´÷~ñ†ò"Tá[èïäU ³ÞWù0Rnn›Á‹NÁñ&ïÒ.%í¼›WXóîæåysv‘©©ó~ó>Žô}Ñuq½´Ž×ùºÞ{gé²>±ðs1tñ‡ÝxÜJ ƒ7¿3t]ìç׋ê¥Þº÷߆î~q1t+SGy¡s?—¹¯u0‰‹]yÜœ&æ’‡8ƒ4\÷Ó ›T “±”7}3tQ^²&Éõæüdè&„ÞÃÒ˜¹^&·õÉÐåý¢æFÁÍÉÍÐM<‰Ô×¶¹,÷÷ü‰¡k/*TÛ|.#Aý¶¥‡0OLrζ}0t“ÖQ¤çîÇõ†.ŠFê~ø6ŒhÕk9Ó¢À>йö +¤ 1Îß s9k?ñ‘¿ù‰Î &:𶬽?ѹ!íü®½âä\òì™úr$˜yeUdòýœ9kÚÒ¾Ù¹SG76f‹2ûÍεžûÍ‚¡üÍÎåÝ¥>‘¹¾Ðp.èXÕäß sƒ›}ùÀ72ןaø-C‚ú…Ìõ-)Þž÷‰Ìåyçy£$W ŸÌ\“ô‡ŒóÆôÜ?˜¹ÞÍ—Jk¢Îço˜¹¤ÄõÈþs´™¹Ü¿!œ¢ZùdæÆÓFlÿ˜÷•?2sÕ+œí•+~Ó_´¸ºû/T.Ÿ£÷ðüà˜Dår~ƒò=‹ÚÏôÊå 0®4Žá>Q¹ž®Í³{²ÎðGTn:– Αú7*W5<aÔðJä>Q¹¡—¿¬ èm1p¿Q¹~•û³Û8ò7)×S¾¼Êé`§üEÊ¥GŠG7eñ¦?¢rÅ»r'}rÉ&è-Ó©‰M? r¯·úD®²mù3ÛÄöÍÊ5¼y™*ùdå^óïZÒoX¹ø çº ¹°ïÎÔ¿Á¸³!„Ø?òpi-÷øâàú¦…Ç}àoù˜ëgæ-AÍÑ®oÔ­^Üæ7-eÅÐß©·\¬ÄX‚:–½ðÔÛëúC5ÿìö"€lzäƒqKT°Èh[ÂÿÇÒý?жCíñ7Ж×ÏEÛýæØâ1ßðÚ±¶_ÐZÓºýú «?ÌÚÒ7¢Öø6ÖŒb¤v~#jÕ*!>ßlç¾µ^ôÓ;”Ÿ%³j½CÀ¹CÏñªÉPô@Ô^aѵȴ„ kPl]ªów©O -¯Íépƒh9±0³ðgeQ’;zÇÎ&Åw&NÜë7v62}—Ös!tmþ,cõ‰Kk?ˆ¤ž¿áÏ:9R 8Ò7Ö£˜N·K|t¸óc™N)ênŸüY³†ÿȹù³6ÙtbAshm8Í]#=OmäÑ@Šˆ   öH‘Á^iŒVVÊ£@2å#ø¸ï)%¼–ùâxwÞZ]Ap$ä×kh¹Túcg9eRògehY+Å€77Æè‘Ã~ÕŸÏ&êQS¯O­­ñ£å€¯FñEýVæ²2øµÆ +i¨GÈ+ÏÙƒDK«`Û®6+o­ ,H;(žQ7‰ÖÓ¨ˆåz’h­Œ¢ÒY³=$‹DËü +Œáž9{#i™.N—W“¹òDÒFÍÔ¹j¦Ê JëÛ\y²î$oµ ´É¨sba—Å +=è´´ž.ˆ x– §J«x—›þ€Ó& ýɤåÅ«¬s`7z3imhªbOŠü6“Ö†®ÊÙæœ–ˆ®äˆ§ ×ÜpZêó}®È“²^pZ$\1—‡ž_ñ§¥U#½¦Ùòµá´Iœ&+Ô9Ê9Ÿ.8­ Ìí4œW{Rj£•eël%Ï}Sjý ¬¡ÂÁL{Cjy}®ý|½ž}Œ”Q]çoø´tËhÁLÊÊõO>-O5{p¶qMÀò'Ÿ6™SkŒ?ÿ†O«QˆìcÉÂ?ù´ôˆ]ÿLþݾñi #ÊÀ–4ÄNo|Új<ßê÷ɧµ‡ub,•jÿæÓþÙ@Õ[L‹UÄ N‹à|Úp FÍ…ïÃxñiY^\†Ræ\Šrsñiã™c5Å3—žxZÙ½Z–^êÆÓrT—\Ú‘eãiiÐ9 «Jw<­j@øçë°3m>­ ±œä×LP ¨Ýа' –ó›#Rá4Nl7 ÖñÈ›KËJëèí£U0SÁÈ‹˜7ŽVÕRp dË2AŽHP¾H´ÌÂ×õz8B»úÍmÌióƒ¼Y^<BË"Š?U@]–âLœœÞ¡²­„ èfÉ"a[³úð§Ðƒwrlë;á.ø­/Èëb¿öÿwN¬ÕqݯQbtÕ´ñ°÷ßïxØýÚÂÃ×¶/Î+¬R¿*l¯‘Åݤ2§Í€½ÿ~G¿î×ñuž?´›ø:“rïœW¹ùÅyÌV)o¼+sQTWÞ4‚ÂjJd,î s,ÂãM¯Tëü>& ntk_Å„7±ÇY2çP«ÄËòâ³úw*ËJ>xÙw¼h¬¼ÈópCXù»¼±WI| Wû±ÄC ¹Jšø +샨UÓÆgzVQ¾pî7X•G” +ʬÚ}RÛ“§ +a¤iXÙ•Fø§´MOm$ÌS@S}mÑJÙ¨ðDƒ7"VB Ðê.ã¹‚Ä DE”‚„‹è€+vÖ'ÿÔÊìÔöE•® + wjúörŠ ÅÈÝ›[a“\7êS³W壙¡¦=QŸ´Æ^œ= 4r“Cê>ëØ¨O·þ,væÖߪ©wÒ§@ +íð>Û‹ô©LXG×s§nÒ§ïÀ¯ÔE˜:½‘>™3/%©Øeæ´IŸl€à Ü€OtÜ;®'!öj7×ÓSw¿ŸÃPôæzºˆ2F‰GkiO®§ (¯["Švn®§k§nÁ»²²¹ž4\wæ’©/NèæzÆré\Ë¥›íÊB%á\è¢èNÝdOb=Yˆë?Éž®©«>«¢ÍöÔ–«ÕcyǨ­øÝ²ìO{åöÿ9´§I¨¡seq&| =m5ÙCj}³=#Eu¶HQ¡}[OJ”H‘ƒ:?ОƲs5Î~s£=õÅå,¸!1Â\hÏ ›Ïãz=¹ÌKI¥n¢çWhé&z’ÒÑï™âò+œ/¤§I-ê.æ½z‘¿»‘ž6øí¥]¥ô´Áìá¼TÔ ”GÒlYs8d7Ò3KdkØï´¶‘žZú$yš‹ðá¼¹HžÆLwÈsÛÛÒ&yŽ4 ‹ö$y~-þÉÓ‡Ô°[Â(á…òŒMR_›¤’çÊ’Š_qåyêJ[ÕåÙƒãi‰+kûÎ5çÍñL_u–"ìœ6Ç3 €;·þ“ãiJµôÒÿýæx½¥,zË™6È“ûÏ«¯#€†/'UÿÔ%Ý$Ol=ðXOª«®'¶¥¸"’¥¼`/Â.ü†tš1`GÚ¡ö'£Ó¨r‹àq8W/XçWaÖ ë´¡Ž'£3^,»S—; ¿ºŸJ^oV§'åNª@ikOV§)¤ªæ¿è§uC; ‘  Š]à‚vš_@móNí$@®ÅÑ‚u‹ÐQj1:­nQã ͉ÑF¹6³#Qéi9¡ÑüäpòšPÐÅáÔûlÀÂoö›Áu“šƒë,7l“?1ð¹›hö¯`q¾Ðš½†4î&jvädgÝ M¢ÑˆÉüÌnî®olfcCq¤Íl+Ýò eÂÐxÑ2ÛÊãÜLyý‰Æä51‹ˆÙ 1ß̶tWú¥ú\Vwˬ“ÿ@¶ —œ:*‹ë’rm*7âRs¾@;J¶,KøþZ*¼úæX–%7¾Ô\=?ð•„2PÝÔJv€„1oZ%³e{@*Ñ“¸Ù”hÕ%O.$%ðÂòäPbŸ„¼ìÆOVܘ6se2µ—Ô$/bM#&Q4y¿I(žÑí>€’µDÑÔÍ‘¬Å:«·÷`ñ„FbþgÉãr u·VÚFDR‘NUæƒ ‰ ,t!©A{ys ©Úgâ}ày‘§èÆ?ÖzßûÈ™ä¨hz ê(’¤zjA‘{ؽë6pžDý`;ò}¤,¤#ûaîۛ䈗Ô@>úp¼RàÞÜFMGʵqÔ‹±Pàyqa 7Xw½àŒÀ‘a~g2Z)WëF1^=„ç7‘¿ïÚFS·‡û…¹Š%´Œwnõ/â0oœ'o?™’_¼EñíژūÇÍô +’OÖˆ{‚ÅíÎï¥àd3Rõxò×üjMí2ú_ÀÍW´u„ ž%m¼bì¦!À7oãÍFºÙ¡\.n”g‘VàH&;ò‚„:}¥ü~„ÍÍY´Á=YËU™·ý1¾>li8gqŽVâ-⢅±$‚wàú<ˆ‹¬£zÉÄâ1J#e_¾A™ž ‹¸ø¥£{];“n,éÃ,4NãA;Ÿ ,ù7zñ·kñWä÷ß½x©Ê(ßH€X­¸†|qÉDÝ…ÆïxÅkÉĦ*Rª”õ¦HƒþØŸ EŽGtègt¢Ö9ùb¢§w†2ì:40M'ÓzþJŒê\mSÈÔ”Rð«æ:zô3J˜ÄÄo Ä;:ÑdQ’8×åv¢aOù‰L4O!3ÑøxçO@Ccó1̇‡@&z r©>H‰nªr +ŽV¿?°¾¨Hàn ⃔Õþ#ªýÛ¢5>‰öèÍ/ÛÂüãd¢vl:Gf3}#ýyÜcÌÕ&¢ &~¾ü&šýBæP• á L Ë0¯ä´ò&ª8 #ù L4ù ‹M$çȘHÃiAù|9-L,݉Q«<éªÀD—Ð0^ȹž}óIãêñp×ÑÖ%—Ú¬T¼D¿KΓh)ü©WÍœÙðÓX˜DËw9=¦&R²L¢­ÓÝÆ$úº÷Ò¸|mL¢3]TƒCýÀ$ºoˆo^°‚ܘDNFÏÙpZçµ0‰4äSìÔ|N)Þzç%mòä93œ77Q•¯ÑJJjÞÜDgƒ¡ŒPÓ›hÊ,ic¸¹‰Œ*ó;Z™w]Ð›Ãæ\ Ó&rŽn¢¦¬HÈÑÕ »¹‰!-ä4 o~"iØ5¹dšŸüD}z±HÃ4—A‘†P[Ž.ÜÅHë–Hë^!§ãbüB“¿ Š6¨¬Lmù&(z¸r=Á‰Hd¼fëÌÿ œ(»&Ù€~ÝäDÞá¯Óæ 9·'9Åîa¢÷ +C°›œ¨²Æo9/ Ž/7 U½B.l¤RÔ^½ê_ÁHÀ:™øëm,™|\†ô¹Šdæ}"(ãàr>Š´ðjm®7õL•¡ˆC»T¯9Ûœ¹n–"ŠŽ˜ ñ)–¢ŒcQè°GÝ,E°•¬äÍR´£ÙÐÐÙ=XŠ£«Š…ÄŠ=âb)†cú&(zžR?ÂFæEPLq¢ÔA®ÖÇ&(âyo›£m‚¢Œöà&ª%I!Y dnn¢ßY +€º467*KÇ}ªÏ-ד›HkœûqmnbÒ­›ï_µçÍM´AmÅÜËŒôÄ&ÒX¼mqn»Úæ&ú./ð|WOçæ&zªãµQÏOp"2!g:²X)ßàDîΓAƒð>ú&(~5Œp.«Ç;‡ÑâŸöëgú¢…VθÓçq<ð‹H­ 0IÖ3þ“è‹&!ÞymÎðßúÃh¦Vç$à5éÃèî”⢎ÉímёΟ«¸ÿ~b Н¯yš/èânø‘µøjý@,^-\¾‹¿ £ü7Üh~ ñNT «Á´AŠ— +Ìþâ'¶°*zb[„Å7-±E™ö†$Ž06|²ç‹]<ßBް>Û$Dºã€8Äv¾½§kgrÓGX]=i‡xY²aÓYˆ–Æ9$C‡dêÁ6¤xÛA<؆djH»ÝпÓòŠþ$òâCÒJÇ [H¡>ãÀƒVH¡wèYRÈß!e H!càò`J•Äcp! )eçvÚgG©kû ªÄ87€2m=ø–› PÔî up¿1‹fbæXÚ,È`&þ$ ² +GöqI£\¼9‚0p°®}òs}ÎÆRWN¥Ñ6[àß'-WѪܔÀœ#|¾)™ PÎpÀ|Y'(uŠžûŽAGGÄðA,>×ÿ™µ¹òæýß5ŒùÎù#d¿È­˪rAýÚ§ö`ùñbQ°›FÞtiU»Ò{†á¯'°¯öõË-NŸn‹w±ì½ºè*z]ÓÈ Æ‡ö“ÜÊÍàc¿ÅÃù@ï‘Á£~å&î!P\ª;ÃìÁ×Càw–MÕãOv¤7M÷p>hzè‚Ïð` +7¤yR% zÚ»ôeðÎÌãKâòp£ò¸>G+±FÞ‹áƒG²(×ÍÅS‡œ<Å@mY>(xMøü¹áw·iÙͼkËñº#_(¸oî¶óÔÛåe—öÛQAC4ûæÙA;Ã4naìH!2è>èuú€‚2]jü¶ïfÕU+ÆQÇ‹8ƒÝd:ì?1²¸t|R +È‹CW¬]Ï?Ç*úySç°Z)ד5§°²½sØ´ò-¶Wûë”ãE2Ø7JRà› —WÿA»íwopc_»ÀqüɶøŒã’°[¹9q¹-åâÃååøÀÂa.¢ÑL-ä3¦–‡y âƒýfåû"»1H…ÃþµIoHŒZòÝε`¸ùnüFÛX7þÆÅâs;K˜¢mŠ[Y7PÀÛªÐù„¶‘¬_^-²Ú,8n/D›ÈQŸd¶ù¢áÛN¦š“èÄFdœâÄvég—^üµ¢çÓ »ÆpÃ7ÚZL톬¥5§.¶Úˆ2àZ-J™Ó&ª ïæºAjÌš~åw~¦Ž(Žô‰&›¿A)›H†úã¨D榑5Æ@vè<Ýó‘1QX|Ç=·búBŽ…¶-^õÆà… &/ÄØ×Òøß~õ͘ÚcñB‹!Û㺉b· ÷ C—aíÈ;?ŒÐK¬†ËÙ›V—ÑÏÆuE¡É2)¼VøÝjþîýƒVÏðx¾`ˆ_HÃÞÜ/ P[yâ¾êrNº“høe3"Þ”.üJ—ôâÅôi«||‘pˆ×!œ“ðô%5úwñ¢kàîâï²)²:ð{pÉz`ºHø1;Þt.ÌÄB­NèBÐJÄ'>i7¼ó“^/@©-Ü/‚ »fã?â’”Ÿú¶JÅÜ7+à“T®p‹ýD¢&oŸT$«Wlö…ÄŽí¼!I_$2Ýá‚õ@*ã&R|ʈqîgàQM1-~qŽÔò© îað7BPÂÞð¦¹í\½Qü&Y2¤-³Äb ¯ ú`•3”Ï_ #6yÁü]Tˆs¤8Y4äsáÞAEå où¡¨`Äᩊ"Ùý}® ÿôo¾úüÿÁDÿýÀD$Y¦“dšò1Ýá3W µ—…*²ò7º„ wá†÷Ð6sHR39t.µÇÚØc4„¯” ÙOH=½‰Yæý`vŽ˜äÆ’uÍ—Z!eœ*µN²³Æ‘ Ézvu@ÊÔ,U,Cx&Èa²ÜŸ+cl1TK¡çDª“zà»Ö&”41{XfØü„ŽÿVe…-ž°G!b«"l’‡’¿{æ´ìcA2QK qç°p4×2½¬qAϪ!¡ÈÉcKn»T]¤¤–@^[ûã'(Ù@üsý +)F7 ŠZ¼ß姪ÓàE˜š *m( 3E6ŠˆÎsõ(òI¯ë¶Kš_=‹i ÎtT?©K÷cùð²9V$/{¡D¬òP:šYk–d»‰°Õ-_üdTŸÚH±ë!¶1qTµ¨œÓø\{‡~Gp#¨[é)À­¥¹;¿“쟽X·ÎɧúQmÎÍÂwnu{˜Ï-:Âä +¹ +LLÚ=zPô:{8íO²Z'áô9[çNß/û(¡AlÎý?ŸPDÂ)sàuóÜ…¼d²v1TLù+d; ‘iô]„°Ž(÷+\!ž;âõTA ˆãañ Ψ5'ƒà‰žÌ÷Ï3´9?¨4!Ê$Ræ¯Q°Àt6ÔU Þôµkÿ1øëHF¨|¤d$ŸÞ†Ìà ÇÅÄŽ‘Q­?*qਲ਼Ûy¬Q[ñýìÆöÂ)$˜=ÌÉ©/ !Çëðê\Ä$_¯Ho ~²w\È^^éÕ-Õæ@ºo>ý¸|œ·dïS ¶}þÙkñü‹ '¶Ê¬0;äùãÌ•Ð;c‘ø ‹Áèqn($ ãâãÍEŽ^©YvŸéqähSqQKÙ:†ÙƒB“è{ž_SÀâôîeÑxÒ’MÍd.áâùD#ÈÓw&ïö‚onòâOzá'e]'+,¥õ|©1}·¶¥ÛÜàÄ…Éák§µ¨²ÄÖ»)‹cÄq + +ý?¼ˆó‡?|œ¼i;ÂÂ,ðy>|—ê¼²îî+œÃ 1TH†ìüÊÔœ—xrãÖëI‡/Ë3äÏä¯Îo¼ ôž7µ+ŽÊ²Î^¦M°Å°k~6:©×a±°c‰Ö­~ŸÎßÞ÷/žŒ9ž­ÁþˆÁÓù__œ{.Å I[BÈØsé¤læö<"­/pÍu;ºBâ¤À±DŒo@°ˆYxþ"E­ÖЬ3˽õPÕõPñ#½f6œ§>jɯ/ãüB7rýs$hH·<'Þ5\°cp@Ñç\ÂÅ"sAc¨ðdæ¦ÙMJ?£raö¨Ûˆšnâk>-q w³[cYÉ·òV.+^h¤xˆ,6=ðð¡Ç)zèùÍ: ÜÑ0ÕsM&³ÝÂ%j7º<í¹IBEERröœÀUˆã¸&0Ø9åð[¬ÙíÞ/&}Mß)ć”·gLr1ôH_‰öUN¤+°‚7pBÔ“Ì=â\³Å²ïÚ‹£\m±¬™öY^Ë×®'­½{|5R-¯Å°U”îóõ2˜Ÿ°{î%Ž;xtnelû2ºõytkšÝØ ­êì&\ ÿÑOfý5æýÝ׺ØMjÄ~êZ'Ïìý^+¾Kðý\lGBö I!»ßpÆYU‡óÙ¹BN6ÜRpñOÖɸýϽìP•®;ùÏj-ýZ‚¨M(ÑzU§F㢠Ùê3~±™Wø‹Ö¹:´b•ZÓ+ "ç/„­â½]ë1"4bU.@~qb5ü±4¨ 7ÑbŽq§·>¿X¹bE5ÏIÕåŠÃ=Ûößhc{¾K‡Ïëݰ>]Z´£å©é\}‹âµï?WT¨a["XJcÜ±¢¡Û!»mm¶1-·u¢ÔÑr¢‰á× %F¼³GŒë9ÊÝÓ6gŽ2ýuFü.Љú b–+ôìmÎgJ`¯V¯k[›P/,AS®ëÂ¦ŽŸ… +Š ø3‰ ðu9SêÌϰvÅæÖßw0&ÍEw‹‚$»`ž·ÿ(aÁÑë&&*¤ µcøôbÀ1Œµ9™.}Y­,éØJÂ?ze·W1¯[V|Œ*Ú‡–ü Òæ|;K¤¸»¹GšÝBy@7Î Úå4Xde¹‹XH“è§ÁàÖ‹[íqèíÚOÌkï¬ô½b“Ûã¬ãn¸Qäø”“ôpŽÄzä¶+;ýÒƒ--»`Ÿ|ÄÈã²Ý)ÃÍòüÄÜW¢C»åFyšÒS½²y—Ñâ"·n£± ¦æmþ>¸—ï+ÂPWvãÐøý‡‘ÄglÆ‚õ n”ïJ‰°9ÕßÕçF0гÓµ/ÔmK)ê“XÊœî£iÄì9WYo6¬ ZS£ iÊP¥üxÒ—ˆjŒÆ¸‰š› +Äœ—eSCý_¿#†ªJ–'G¯Æ?{á5íÕ¡NØ«Ã^ïÇÉYp<4~Ðtm“j„5ІzweÒÕü䔼óM÷¶¤²Ý™Ãw3ÆX3[0LÃßÒpÖ\ɲ«ÔàÚ2“²ŸòS,8ȺÄ4vdn$+ + rŤ—ú<媈u¶sIC …ÃáÀíhŽs—w6Ž'½ñ0t‘f:IãæËXÝ·ºŠÆ?0U‹n«Þg΄UräŽf„(vе;wýŒuÊ` 6°›ñAÛM?˜l܉턭Ãr¾ =äòýµª³Çº=½9³ª+ñ <#ƒt$÷·{§ÙãØš¯ ÃF¥Ô€ –ÞÒ/˜JÜCÚ½/‡ÖqIk +f}(Ž­ø\aÊ‹Â#öXK=ƒVQ†´ˆ]ÚŠÌ™¬/4UœÃ¯ˆÏ®6ûíeÈÐÎíà¡Þ­¸Æ“»ìÂH¹²D…àrÕk¡eÞÎOP²9#™Ï˱ö²®Ôæ2?ïúh4,M6H5fM/g3Ò6#d+БT§`Oþó—]@Úäÿ¼—µ¬AŠ^UGH7}:tŸUæ[’L¸Ê +ƒÉvþ%;ÊsH—›+áèqņ›0Éþ¨k'=,¹Ü*í£ö­Eí[hÎ4Š8õlûìÃÄ´šÝ×ê³×X9S¥q%"Þzc›ÁLŸPIEyî(Žïö5n® t‡–¯£¬`«‹yG@¢útŽ&û‡Q/²>à³µÖÅ;œe‚˜æyâ¹Á™™‚›©ÛòÃ`†5;;^x%õUO‰.x6<ÂθâÊ0–…¼À¬Þ:qw„ C‰4ä@\í¸qFÜâ¹—µ=F°öf·|¦¸ƒ×hÐE’F¦¼ƒªõžŽ¢éžj@mhPDÌöá³·’¬Z׸­Œ¶m!®xØ8ÚE"lÕg´Å:†(ÕVz *ÿ„ƨÇvÈUr‹¥pÖ"ÊüÄ©¡@‡E„ÂEL=Haƒx’Š1V»[ë2Ÿ³of´ ›‰£ +Û©‚ƲÑ]}eÄ¡ ÏíÁe žÏ9'×+ÍœNÎ$¬®^2˜h fJ%A¡¼|°íQsô°]³¨e-ç% ˆûÛ´Lˆ³Pûß·ÉÊç¹*n5S¡GTht Æ„_¨¶ @Z +;-–=Ãõ™ŠÈl;;L‘LÃèârŽ…Ë¹b$6ãâ¿ñcÌ_ÞÃ2A6㔬£ñÌa|Ж ‰‘×óõPò[±w:ÄÜ"„Ô˜÷KÄ÷ŸœÑ„™Il›ó¢åœ‹„Xæv£-±VÃ8L1¡­µ ktNÕ¡û—˜(óœ¤X<•#\æMŒëób§ºÜC5ûã‚O¾³ý&#ÊØ‰:êk ~âÜ2:`Ò-¹k†×òÞ7ëÍlÏÀ#"uŽÿAwÄØÌ˜Èii-%eÄøf<«^ŸTzlLJVSDm ˜ä0Y2T—2Dƒ‚/›—fÞÆë›Äxv8öB©1¡[WüF½,2î%Áu> ªH[%1¶¶Øéš¬Ÿ',C7¤Ä”­,º«i¾ºé›ÝÔðXàâìkl®~fîuc ® +OHxœt¢fåµHŽqdÞðÿÓí+}fíÁƒÏ  ‡%¼,׿Y΀EÝfÍæLØB¦½–(K:5߆»9rd}ßEk¼­µ8£ÃìóVÏe9êÎ9 .¬±¬kì\žcdŠHWFÔÜĈs4ºI¦2\™“²[ü~[Ì@G•¾îÊk“Ïæ4v¹IµÄ08±»ôCqOòýŠ5;: X…·áìß ;g`åö÷Û^ŸËRËBûØCí +] ø)tÙ[ú»!¿5YŽQTÞÌ-ÏbÁ´Ÿü³!ÒWTõlRGæh›"ã|Æ2…ÙE„SOT׬ôÆ\V‡~`Q NV£l·0} b~Þ#ÿœ\ÏÓ·ØPï»”½,>L§Îl¹ „±ò{H¢‡ÃÛ¼ JfíAF‹ëžŽýQ-Ö¾YáìyFÞ&-ž,\-ÔVŒ@ÔqÁ-у…=ð¾ñ÷á¹›=Zº­4ü2$ïø2Hár…èÜ{àôâq܈–Ãîºl|'Ë^¹õ‘_7&åstmÇ=Ïú*A?^%•ÄÓV¡¾Ío÷Äp­RÆsh/¾ ¬|®bFNøX§ãÛÉ{è‚U ­yó¼ù½ ÂÕ3Hó +È›8Kø§—µ(áÛhŠ…ªT$N˜ 9›Î^ÞUÌÿÜUã.}uÄ@ë\Äárq¯Ó +ÃMqŠ¡·B5â6÷K`•µ¾`XòrõŒ²´™¿·gm}_¿#bÈ(Ù´» Ûˆn…Ý +=L(%âæ*$sR40>Ò îÊ9ôâËÌ'5]¯O0‚Ó½EÏL•¨pѳôr÷²#'S%ñ¨Œ‘ÍX_ƒ`eåÚáêvس<×ß|á¼þ Kv³ò‡,¶JÊr&} &R¼XÄB^ëô.T‰wãYßT4š×ãû«èFÆ•+ê«à¶Æ=%`NÃK–EKÒЯ­dÉ¡¤xÕ&­Ciê)*•$áa‹Ìy;èaRãØ°Û#©»™kn~.Œ!_¢“ô@‘žÑ¨ò@ +ËßÎ`TŒè7{01Ò£…-zö€Ë=aóÑÇÏ´`$S8zâ”Åošq°ŠKT|/D…bçÐò±˜.ÄýURõtøQfq+[úr+ +p¾3FèLÆgöÑc"Q:§„¼Ë¦îX¥JVˆÖ˜Iêl/¢.‹h—-ýÛª0œHµl¾M³&’jÈìÁnjö`nÏ…QG Á6eLÐßÏ·OÐjhvƒ¥h7­8Q +Zp­À=ŽÐTº<ÇUµ+g° +¼ùI¬ðéÑNˆWíõ¡< +åB‹µÎ”h;‚iVA*™ºòÇ$LQ8ŽxØÙªÂúˆÐ—oðÄÜK4ãÈsã‡á÷c°̃ì¥`´w†”z~V»b|©¤÷ùù ì!²› ð+ôg&r…Hl/„ãÖzóOŽ^h„˜•Ø"zº–¨8. Ãyä¸uîúÒV{˜i-.©÷#8»¡ñ?b®RT%aÍÝ=ÏCÝ!Ñçà´RŸð9Jý¼t[¶Š5´l„.DÕ5i#‡j¡¬íeÉÑ™š²^kP Džë€7‘_‰ƒUp\ûsáçÓÕXÜ«Pwøk}œþfÊ‘¹Æ€{î9„/Qû’dç-! lÝÝ-_Ê4E™»´ºÖt„Yt¡ˆ“µh¼¡?$=¬â¾Ë$|Ï-^O=.§ë=~ö—È+¡£BÑF|€ j~w\=…¡ <œè Ï€òi‡9íøU ¿¯çê±U~!Ñ¢l ¼ï˜Å“Ý.€E!e.E)³VÇ*@)ƒá§:¶ Ÿ™ƒ˜Y\W­§çX;¿çí¨V¸ÇB‡Ôya«“7÷‹Ù¬ß¸b)YÉÊJ)©b|Q4…ú+5¿ç¹v›ó9ªR®Ós±\¦NôPlW]1ÎkNÏÔßnñoáÇ]^H7ƺEÆxäp>çŒðx>õ49=PH;8gÙ¯ßÁ˜tæÌcÆG^úËLÒê5yëÍ>¯Ì¡@‰Ú# 0˜]*R„«¤xåÏËeÕ…Xsµ›Š.ÌY ߨ2¾£÷sE.i®™rèXc+xèìaj—˸'º2ÄT%‰o=Škùf”øûÖÊ Øœ/vëu‰‡×ª:¢S›ÔÜØfŠ ˜)w?=DX„“͵ÑÃJ Ð7ãmYíÜ1»¥ðĈrßSËœì9¡Íë;Ì{OP{¤hð\fñ­•Xhë6ǯ‡H޶i-‘Ì–Ðí\‚]DϱZ}ÍrÈÍñƒëTÈBªÝu*¶²LãýgOˆµ +I æ`ÎÁmMÁg¸Úƒ«ãw`ýF|4„í¤ýv¿?¡DDŽD`e Ær=90ž0Z¹ZŽ™zGNé­\­¹Gà;•²*rH3r=×!ºvµ+0àÁ H„dCÓʆ»€3‘ tÆžúŠ×Ut/ÀæÕ¤4•¹Cœ¶ NÊ"<§k©j¾ÄÖK]mb)åû¯ù¨Ì÷[š¦Ì:Š’W;P¶f‡æ^!0J{ûrt»b±àÅF„y²K¬KÔ5; ¹ÇÔÙƒ¹Ø¦õçWIõˆ“mµ( +çZߟ”Âwz>ªý"ú”Q-¤õþè‘©c3žÉ>»ÜŒcÄ:dN5{'gEjò8‚èUFæ=T…ç Ó£¤8N+Æ=ÂBùÏGNߢ¬,A‰n<þóX ­lº +[õeÕ€‘Û½ÎM™XTZÊ©G¥Z’f0ƒª…ÛŠ¾p e÷A ”âŠ×A¤2â +‰óöö$)y¹–­î TÔ¸˜%ÿBÑ-©–Rtž¼…=bOЈ@-1±¦Š¬g‡D4ΪvSdÔ[«Óëòá>Ö;ú3N”™K»naбj´SŽstTªÌ ÷æƒ0Íæ«TªÜeʰv R šdYU9­.G÷Aä{[T–¥ö†hRTs…7˜_!ï Š”µ~æ}n“sZzÉzÉÊÊÁoª© ªz|;cO;ðܘ=JhÃ?zÄžã!bF‘/ý¡j’¨h'Ò±rNFsé5LNPHà[ðº¢ì·(7eßõ çzµ±™ Z,®)TJ¡o·$²6C¡Q|§üî²G¥¼JB-Q¡ÏÞÍÔËO[M6MѰu½Ç*Y¥º#_KÕŸ•Ò×Üû÷ÛSsV•Ÿ„€šõ;ÿµOµÆ|€U­a3¦pÞÇ^>é¡O£dTÇ^`ÙõJŠÂ?VÐ!džNFÙûzÿŲ"äúëST¥ýùÝ‹È-"…²©¾»õX¶ò$Ù]¿¯ ߟÑ?„ý=Û2j>/ÎÆÙ¿Ö-•—“ŒgúñýZ "}8ÌVrçe'enã‡JQ[ øv÷~t+k#Q—Õ¾H?§†²*¿ÔJÍyîRßYWÜ£b‚ñ*ó¥ðåŒÖËŒŠ¦¦¼. +.ÅQ¢¨:Ô¼"âÖ;ŠÚ°^«ÎëޝûÂýö +‘»ë_Ʋ>˜ïç¼ìq²Ø˜=š?ÏXÎ>•¢¤#¯gôxÕ¯ ˜ëÚe€:£›õ%ˆâJ(8‡{à9WéQsî¡«‚eƒHd{è"Ù†Ò.tÑiNS7µZÝ/ÛйŒ<ÆQL¤«¢jô8¢Ç…H¤jmªt{\#*þŠébâ8 +å7ñV‚›´*NáVUäJõˆ‚ƨË.†;¢ ^yêܦ¦Ń¡’/k`×úóE$¹¾>*ÊÃÒ*û¹ð]‹O/|œâ:3o—ÕÑ‘¢Ë+«˜S`öæv-eñ\†™"+]»&õ¬{ÔwU‰•t¨‰›CP_ŠX'/–ãÞÝÂï_ç8žÚ*MOYÁ5d7i(¾ª¥j”ô(2'BÃsY"E²JäGó‹¼,úõxÙ_áˆd·Ý”4æÅ™H(„R|T²”2¥Ñ<;ÏIÑ[âGUvWŽJy«Êúr¸žÝ¨ Šn5DnV}.¼§`U×\(ú ÒëDiJj^e.)Œv +=ê‡Qþ§Ðæ‡D=X +õ¶E<ò„”HÝRM–âÎóqL†üd®Í^õe‹²~ž[+KióÂ`y˜žrÌ}e à;˔ȱFŸޏ`Øcy%ZÚ²8ü§Ê‹Ðäu9ãºÔ+ü«, ø¤¡ Â?çPìæÊ:k}«ñ¯P\ÚP°m\ꃺah´&fˆÇò»º$}¡®©ñþ „n±éA.óK),ýé¼È³G­¯y¼¬"@")üú+)cª0¢âX­ý\7 PÝÐR¨ó|M®¯Ç¢Ä¼.‰¹‰nOÔI+ƒ§LÍÛŒül© xŽ ²(k$¯Ø×¢o=–¾åÑcͶØ2|ø>еh~••J 8¢›±™5 w"ÿ¢Z>c}­„g ‹¿rÜ`{Ks Ý¢ÈÖuRc)ï)¶r6°e„ºq »›=Îþ¶QLcâðþFÓ;¢ÊÓJ'· qË·fÅ«åÊ"æ$/„+D¹­Q½ÈÇ…"„Ñ–e[°Ðå`£L¬Úh!ä÷gÃY‚|:'Ä~Ükžº]aèdÍDލ•>…Ú–Ü–VŒ]ÌÂ#ŒŒÙƒ ÐoQ«s¦;Ô#cÛ*0Úâ<1·¦çÍÂêÖö)ÂÉ|"iOQ‹F•$ áÛ{®Ô¾­C8Ô£`‡Þu:¼Õ.¨šÚ.']kº<‹TF…ñßÅE‹Öì‘°½ +—N)±ìtçÃe´û\qµm-ü` У[‹º‹õ/ÑÁ›G§M:XLtk½†úôÿÙ£ÊÀ"ò½kE8‘›³;”Â!GÄÐ9bD³Óz†‹´¦ÒÐ=r³(ãzýÚãPh5!Õ  3 i Çsõf<°*2±œâNšSxk«x.(WÙÞÂsÕk‚“´¾_´ºñ¹ê-q·Ä.•ì±|Kîò©ìÁ…N2sUëÒ1–3tŒ;2J,ÇÈŒÏkÝŸ5b<¨Xæëz:!RÌ!§lm}b„ƒÙ#TŠÆþšÆû‹+AT´Når:v7~ÁI3ëæÓ?œQ‘Iú¯þ´ƒa¸÷£%{GtÂxÎÑ H«˜·Å$s‘ÏAøÉá§3ŸîSÝ?!A-Ö_óI8×]ÛN«ºíIwüQ®tJÐ!ýÑD¿O dR—#µÝ ƒ,:íVøG Sé±eE dý¸í¬·  ý£þ3 ñÆw¶ZXè´dH®¢Z¾"$zžlÉçÅÖÁ•‚;|ÝÁûx|GOu•ž8}j¨u¯ß š˜ˆUž›êØ:̹H=ÜW²ª+§5WõùlBZ›|hì‹ÂìdnøÆ­þ£WD›¡uÔ(FTÆ6W2:éÑãúöp†¨KE°#„=%äbìTÈyÐ#ˇð¯·Òë€É–q–3ÍGøXŸ$éÍuFÜkU$0Õö°œ×“JôÎZBžò’/¹ ਧèùË¥ŒEEŒ‘Åí/RóA?JÄŠ–?KÖH×JV]fæ“I¤øO÷pü ımîÖÖF9nŒUÌåóZõ¨P[å¹ΩaV«?Qak! ÃúgxËí5|tku^ØD¼ö +ûª¤Û¹…Ô†橌v_š.âƒ$„ÛRk&|û£ZhOÂòß?MÐØ c‚–®õQÖ74Ya‚êò«0ª +ÛË=O²Iô@d¹Bý#ù\æ°Óô§/‚¿0HUûÏ rìv‹1¬Ð.¯o˜rîeFlà™$v—‰¸²Þ>€¼9Ý©lU?“CG°4AG„¥¸B+ãË›åÍq™šósÈc¶|á•m‰y¹»q‰{”޳—…‚¥sÛr„™23ädÂÞ|‘ +9Ç”tDMÑÔ­„{€Ó-ï&Äš¾Ø|º€yR×wô·¸‚o§Ó <ƒ™(®ÀZQfy2Æ£rL3+ôÊ–-ü ‚…9;¼î+-ÄFàñzTG™àB2LïesÇv0DÄ¢ßa³ ¡õ°ûůÓa{>F#æÞ 4²ÆÍ‡™¹{©–ðÓEý$qÏ'j³ÂÜ«Æê$Ê nsÂoe©^·ùÆÇÁý2|6§&¹¶J!“·å_Jì/ŸÃz…›œÇܽ Dºö¸gƒ¢ Ñ^¸¤j ˜ó)ŒV´záÀjÀº’ŸÈëç[À ­ƒÙ>nJ«æ/\âH’:b ´Ðè š3>A¹Ÿ5!ˆýYÇý‡§¾>Ê’¸Ši'á\¤#ê|l° +UÆüÑ]Õ-5&‘eýFpzÂ\¥ÎgžD’ûw1 ÇOÁLg$oY‘n¿,J‘Ò£r猨±yŠjùq°‚5Vøy¤·X¸øIZã-Óõ`ZâªJ^ADqYÛ°Œ)\šÔçP€Ö[Œñ«DÑùÿÒö6½º$וÞ\€þÃJ–2¾#‡RYnÓ¾jB»%Á0 +4YjÑPUd©ý{dz֎È÷žs‹ì[¤º‘q2óÍŒŒØ±÷ú8štcûA·$bO·A¥ìŽ[e®i¼™"æè¯a:²¨? rÚ=D›`™';g#-Ñ'ä5¹ÀíÌ·„*œWMDŽC¼=@8Ö™]Ëh¹õŽ"#K±µs›©NM(–ì_"b̧fžü”*E +©à&û +ýM´³@Íú +d÷›²p'¿È[Èpmu=$±ÄUièóvÓQ“÷W[ëË–ñj–ñª·¯-wJ(EÉ·>_®`ZêTŠ=ÙŠ=ÎX“("¼ž[ªBÇ~5‡ü“â …%ÀšnR*Ûq%œ Ä-„}g1 íP¨TÞ–oÉ¢èƒÙ(&¡˜Ct±êwW~$Ϫ"Ù.ØËá%ø~A(J ˆq¼H‹ÃJF]…YËgøDñ¬øQaêöÊÿ ñ`¹Þµ_çû)’ÚPlv +‚^p š$ÔIK›OêÏêp»C•1ÜHQ–ë’­ñSHÖ=Mw|q!u:^$;$㨙8ùDBÈÐMGØ» ¹z4™‰éRå²úHmq)A€u»óEøKNÄõZ0¥§/1 eùßœ2.‘2.)XAâ†_Õœð0Š@¢f¦HiÔ¬¢oˆJëëº/UçBOÈ¿jXr¢i§z;*æãÁꯊ¼øÑéÚ%4ÓyUÍ«Œt]´¹û倔€ô²ƒ’¬b YÅj•_ßÂd#kµ%²̨Ö? f#eÒÜÍÕ96ö¼Ø›A¦m"yÕ/Huëë&¥ ½nCd•qUirò³hÊ?¾|BåxHßËrQ9Õ›g|t8mgI¨æÛ_eÅ"áuGÝ\òÐM³’ vð+bɨJÝ+›åÆÖ·fy3u yÉq‚Ÿf-;æ¨Ñ->©ÛÚÐY#°…`çdù«ê`á˜5 åli?#Á×xJeD)›¯òléV·j4ðå‚Ú]£¾uaOÕü®Žõ‘N¤)O{™Q¯‚‹@Øüô'޳æì0>ZU)IÆ¡w{}Hœ£ÑìrÛœ½ÇÙõšÔµPœàMbEžŽ6´3$ $­sIHШ\ðIÞÁ|Ï.þäë²<«¦¾”Þ\å=ü?’Lš *å rsï : ·&v +•1;–+ðЂ¥lí³<~µ±Ë¦Î²f!çžL¯…¹$+Ü£Od(, 1P¸[9±$ë•g»+i7!w7IGÉuSæýÒEž-J²¯/ ùüÊ ÐcÌ­ÎÚC5¿Ð‚|Žcú͆ßTøD9òáÙÜdx¤ +|¥ù¢VãOyÜJ ‘ãœÌ»;‡á±)ºizÐH+Á_ã#YkŽn´O“˜æGb* ;ŽWÒÃIEHð¤H +1™×k¯î‰Ç÷ÌêRMa“ìaÒélQØ?ž—z?2'd'â´‹…\G“‹ VÅn«l‚¾ÛݦàPC²Õ¿5á¼× QhÕ“V’‘îAf³*OÞ®Ѓ¨”n3—¢xÀ•úAç‚©~T˜´þn²ÜSߨéµà\þ²å/î¸ÆþOyàrÁxÜ'âÝ w„ˆ§Üùn‘-Ú Ä¯»?ÈtÁ¨=$Þ`±rÕâ-É—ø}Ø +w™e~áïߥw©ÀÇ5^¨ën•SJŒìifðulHÃY@„±î¬’ꩪ¾Ð—A:š°,¾¦¯HÄ;T±UÄ6AÆñ Avi~ë¢<¨›ä#ùê,“.º©GQ‚ö¢•R=ßLVv$Ž¡ÀþS—º¶Ëš §/%Õ­¤|…æ[ 1ùÔe—ˤ¼ÝùÂLeºÛá/4Û¬•"¾Þo>€j¶ÈµXÜ”½J±Ö·€P艸÷¾‡Œ+F}Òw AÚYŒ¼½ˆ—÷ ö*ø¤‰I]ŠÐbˆH0yF›Ë#a{èÙÁöf¯íÉ+À4£¯{ðÖa­îX5sH¬MñAõ4ȶÈ4€/Ù8Hÿ¶ûfÕT¾&7iÍÍlÊìc'œI'Ë e­ Ú6ß— :à`ˆB8ÄU*Ñæíb°P® ®K6XŠtu›Q(C;ØRðÎ¥º˜%k¾iÝ—Rbz]jNA]-©Èo¡È`H ón `eUÁ–Ú%÷·ábþ-Ðhë9ìékß1œî÷ZLã6FrãP´Èß9=õ°(u÷•OéÁv Ê¡«ÜÄr©ÞKq Wc:¯dGÔöjRW€ ~qz-kÃòdgIMÊ2€¼ê4FSó¦ì…)=&td«J!÷vI­:ò4[eDœj©„cð{‰®Y(Ö " f¨±‚ô2¾²yÛ›¥.ÓM¸Br­©.Kòf€¬€•Šãþ-ÅE0˜ÚMß±­nI<%ŒÏ©šЀúF¤8UÚFp Çhܰ³‘@Z `ó>æl18FÜ,†pÚ‘Œ‰{Vj‘Š“ojÿ Ö«$±¸²8\J +¿ô ßKRõ˜Ï +a‹,´&±bï*¾ 5nö®¢oRÂÏ{}ä(ÕÛfV–ü6˜ÚÈñ†HÑŽSÄ9Á9i­7!þÚÄa5âçFæPùËaD‰ª€kšÓSéâÞðPu›]æÐ¡s”9Jü˜YžÍ(«ZŒz`èôA†×§(b=(èÓCê²Ú®ë£Îy½\AÙ8…›î%Εþœ‹o¸à85 Ÿb{&õPÑŠ‰¾ø/]𽤚§oU-cNLˆ!s¾”_Ðçæ—ÁõûßÓÈ´#ƒ/?·»¾wr!5-…“[Ø K[œbY¨¨*Œª¦ô°Þ÷ˆÉj:?—“œ5?œ¨4‹0TÄÿ\ǹyö]ã ð“"³Œ¼R;óî»^w äíµÂ ‚×zÅ C“kØm_1¾¿ÊFßS•ùEík‰H‡]UCê×ËLh ‘Ü>¡X#$,!4Kž¬.?ANd”x÷¾ª¿ *  ´{Œ0/u¨€Uÿ¹8N²Àóy®  °JaÎ=x뽜éz(üÜ"¢Šs5Ú²7nÃüQIŠçËÈŠVV”®'Dä[s@ri±¯pYЮ¬“³9]^Ð$D3ô„ñ-ø;ÜÜ‘©ÊÄŽ7ÖᙤYºNʽ´€à•ôk©]Uo¶,ܹ„( ÑOÆ;¥ï~9þ×´ +_\-ArÔ'+öâNÎqT›©"§oDþUu9Ó¾n3‹øv÷HfK}Dd›‡8?k°÷-V!͇4^9H²ˆç>DnšŒ—®?×Þfý9‘¦É’ü6T_©9å ÍóPŽ®à¶Álœi­c4Ö7‘<±êá–fqì(Ôà‚if3©é[D“Ž´´çÛ“bò3úå:%SAŽ:D]œâZ»±°ÄÈè{%)+øE™Ûß±Û¥¬—Ê+ÙØ;Ɔõ&¹€U€DxÉÚ Èlbi:‰“ˆØ\]ÞÎ2Tgß2zMö±TGð¥ÎŽ^Á3=4ÊɃßÁ,tðºÞù¼LêbQ·  æ  8¢ Læ·åȕь‚Ýf¯!c“,c£ä‰½RÓÂS±„¤âRþ^Ö9®üÈ*yJSGij*ýXʃŒc²Û·æ8Dˆ‰¡l$’04lÜ>~éF3Ë +sÍ^Xd÷¼d 7 ˜ŒýL° Þi¡á‹š½ŠœCzÇÓ¹<×,çÑÚR­³E©»RÇ<PÈÝ(ä,‘Ø—†\¥"yIlüý=»‡ŒÂrÐì}¾þa®“«QkkÕrˆ„J˜¥£FDîM«Û8·5q94"+ -r[÷lwÖÐÑÓ@… »;é%ÎÛëeKvAÀ·Kx7Xº˜êÙ¿ùh&ƒF’ä)l$6{zpÙ.m_ŸÈ *-«šÀ£Œ1Th­Ðo?ŸC1¨#ÑßBý›‘ Ö³’«[šÝ&=¦„ rùâBq@¦XO'¿7¡®H ‚-x~LÑÖp#Tenˆ½¼_><šiZ0™{¤ë+޼Dîñxg°= kÖ+žDþ¦¤··NO,¾»MO&;Ÿ!`‹¸¢`8ÄxÌÚQ-—^ȋᴠqÈ±Š‚ÆD-€ÕÚ“^¡ëºöÞðBºñ&`G)^ƒØZ¨p+¢®'ôˆËdÚDÞS)´Q.P"^¸º-9IŽ^N ®°£I¹¬wÞ«ÜlÒöç%`¬×‹ð«PxÎJ15GK-jw54WÙŠ¤Ë8`¸rËá/åÔƒeW75ç>T?I!ƒªrEå VO @(èö²ÿJvà°¢EtªòXÐP¼­×,²=æÞŽÊõ»ÈÀ‹â›õ£Íùɘì&‹†‹a+®|œ¨ç&ˆÎÚp77å€-ÌC“k1GLi1ÐÖÛ¾7èe +Ó=E7ÛrtH²å™a ?{.–Ìý +l5\„DÔE$Ž@ÐM@½>m½îrªÎHˆ­«E÷¨ñ Éä"EìsÜ÷s©1Ū Ò»¢Ë9/.|I¾¿ûDÆÎM=4õèB¡`´KIQ%Í¡óQ®î-èדHÑ„è%›n ºè3r0–zü M[&È«·÷–Á§ª¬Z_ õä»ß¨¤k»@Ck£Ò,T/ñ¦ðž‚ .$I'°Lšk%Öq‰6ÑÚ.ÅQéÿÚµµà"ÒK¼Ïj¯FucÁÅÅ¿ÈnÜ£<Ž |Ê<`YJà[¸WÚÕã9¯l(Z ZɺìÙ‹ÁxBCÒ#¸FÊ™v69ÅäRMn%Êë]~W‡ò ˜U‹.¹q£´n­f›±#B1 B¡V½€Iu¨<&í¿«· Ÿ(â#øbÈ>­#.Æõe°·t•b€j_ +ÕÝÂÐû‚TØÜÈIÉ\!1k‘=)Ç"ò²ý‹M5º !\U± ªe‘¢Ìkeã"&NÅ™$zˆL -U7“]€eäõþÊ^â/²9öì+U]Ø–Æ-k ãT„º7µ˜ÇÚâflu!1©})!Rr6"%›•£B ¾¡Bø|tHËÎø;ÅfB$ (%·|øÅòX ÷úëÜn.£c¼3íŒÄ $–£åºwôØÊÀRw‘ãn&æµíÐóÉ'»?€Y›Óö†rþ‚H-èZ&dyZ£VÑållª5´võèwXé×g²/þêøtê +Ç@‘Ng»ÃŸ}¨:·¿ËÖ²_=,_Ž—šì„Pé’Æÿí<“zì)ô%$Y†~ö$T‘ãÕL­žXéBX¾§”™.Þê¼Ìêü…Ö!¤¡% ûh¼³Z©D•H>lW ×qÕ`AoÉËÌš,à .D5 +#J¯I“7M•̘Y‘F=²  ÍbÃ6k‚³ŸhL¥BwóË;‹ ìÿ†3æ°sLÍ à:¬ÂšÀ¯ãcWÃÙ¬­ºÓ"2÷a¶E·ÏpÛðtM%á³ Zpg÷0ÔÁ¥`’¬GÞ¼ûw¦ùnIQî(á ®„™õ–ü݈IºÔ?…€+᎚‡8ÄTÒgnþ)k”\žülRpAÇ @º¶ ¢f[˜UûîiUëR/)ñSzü”#Þ/€;ÉÎz¸e³®B¼¾b¸£ +Vöû20OŽx51¢Ö®\ºÏ!Ðè`ª/Ï¥jòC·{Û¡kÆÂÎc] ±‚JB«] ÅÕ,ͦ®ãX¬Èõ deXªCÙy¼]gµF½ç“ÛÔé㨔©Ì˜§¬ eÝt—›E˜ýv© »˜²¦±ˆ)ˆ™—(f=ÝÔBëw½‰k¤ÈëÊÕ£Gêê!¿€ Ì*êV8R·KÌçâ9ò¥‰IýMà2š#I®Fص W‹–‚B–ˬØ-i;ÂA£û“´A¨8¸i·¼¬=›Ëˆ!ËèLÁÏÅ O¾]žü$†¢šÅ‘(Ƥ’Ý:Qs‰ [Ž]± ¼EæuÂöZe‚Ó{ÃjJÐ?ØQâaÞnŽ +M)^f±…}Åðã¸fXÂû&%&&TÑY݃¹“%”,Ìÿ@œüL(t›Xl®ÙNð\ö$Н¹þð¥$ã þByô¯¡ˆuqÍÜCZrͺ{ôa. aé€dµ ªþ5.¥Ì?Þ¾¹Ü(·”ùà: +í¡æ¡úê;ÅÉÓÈø¾Ë¼¹ÙPOüšµ»@^µéN×Â3ƒ<ìJ#áÚ"SnJû +µ‡ Õ”ÙG†m¶)M”±Kƒ¶\I=`”†oJ-öMÙ{²ð~PÈOu‹¹é(h3éX ÇÙ— HkC¯isõh6f¹Â?§»ü¤ßAhõÀÑ=ÒË[p +„øbè‰Jϵ#}œ"9£½íŠìkò‚Äõ.+Öp!¬þfðÐT¾˜ö‚mö‚ÕR‰è§<Ã;þéƒo]á’ö ê6R-²údçµigÚô":SòÛ¬Ýk@È­<‡°i_³Œ€ý¨:PÁXH—m"â­ÞÓ°GorˆöCBr}8¥r¢ŸˆŒØÔ¶·Uí´é–­È‰¡‘±U‡@xºÃå¿ÔʲÄ”-h“Z6Ûaú&–&â‡M¯{šFÔè• Õ'1ÚúIv»úÃùÒÿ 9Z)¹˜ÇNÉY¸1ú¾…1 Ý*»íÝqújr±-²©o>èý +¼®Pd»‰çŒÚ‘ l“ÅÖÙÍ_!À†€‚”ÈjËIˆÞüì[rJècW÷PE¥iBuëMî$ÅTË!±?+/ñpÖ^}Eô•W;Óí’Yt2z¯ñý5ŸH&ªÈæi(¼YPÆíZk­ÏhèAë”gƒ0:ÃJÌPP$˜EU•ãî¸!IF¼QZ*N¥­u…Ç}ƒÕD·é¦‘Cž|Iü‘•(`¥F£b¸Þ*ëP–º&Oªv9ã2g ) ++ÂÅŸÝÃo<»Á {§ÆVBØJpÔ¡ä—;…Å0ö&‘c~¡h^½¯ˆ¤µ¬.AZÚàˆXÝÜàÇ}rAÆ BQ°ù¢‡”°R‘ù¹‚vND}Ix£°ºAŒS¦~PP”?á7^ùã‰ÔCäùÐ&ß.EJöCó+¯M#ê/E­ rIÑL"ÒH6þFg2ŸÕzCyt1èß÷ˆÝôôÆÿÃߣ)‰<²$ì3!w¢l,ç®=Hè+Ö<Éû^à@äÊNUkÞtxÉ®›¾–L–L²Þ*dìÐ’˜!ïzDÂfù‰vîå 'ÔR ÿ¨¡]Y¶yÛ/“ØQIm§Øò¾›ÞÂwÍOÖðCô¨YyÓ*@ã² +–²YLõ†d9YjîD,dN%d†D4r³G74ISàž¤⯕ 9­*Ü6eT­²-Az(ñyGúŒA3ÛÝ(P +]&BL4 L)…BpË?’Á‚Z”©…@_1Î%e%JÞ÷ˆK [¿®˜-‰›J·ÐÕÔ&rí ez+(šL×jÕª!°†=ŠÓϵ¹’w¨Ó6…9AÌ¢ÌN‰\4r²b):d=*aãÖ]HŒIõŸ ‹ÂHô§ô,3Û¦}ûB…IýsÍ?ÍŸD‹w(^Þú·‚Ã;á81}[2_‰ÁõíŒãæ µryA±cp/ã‚Ö–@ÊBŒÄHŸò+½¿ÚÚOf½'¨‰¾…Ø0¯{z!Økc½F1x8A§„Ö\i–S®P kx bÒBìu¢ìWäÅ*±µî±tŠªTÍkê#¾2gÂBØûØ"xª ‹CMŠb–±£€ÚJª‡¸ÍÕÆéEÁÌ?Ê4íèM%'Íè&×Õ;6„M¤ÅîKUM1WŠŸ™}@ù¡uÀÄÉ;¬§)çñj³!RâQŠ 1˜Óä5ñK«ÐÞq"-Wh€ <„ÈÙeÃÌ`á.Å„º>OU?K0C@,»?£ªÍ¹a+6±Öº-o™/”’¿£üÄð•šôr¦Ð^h¼íW„®´ {hO&£ŒåÔqáú\=<]De»m€. +=Ri~‰·àA8‚’~&·~qµW7»÷` Ú`§QìrBÜç¿`áºfy~éC±'°ôMîð\A»±µ¸Nê·t³h-|¿–BVŽ£ûmä‚ÚÔè_¾ÑÏV5ªŽ²Ü&Eƒº s”O9Ê +H#óÐewÉ–ìê6ŠR"eý3©Fý~þÐ#^KRÑ[ö["¾\Â’xQ‡y &ÀN +‰²¾l‰æâÖ²·x×#–`b5Ô^š¬C¾p"‚fUJ}r$I]aÇ !NÑ|©Û»A<*ÊM/%ÛdîààËš‚Ð:t ‡÷Ã,ƾ›èÎixð +oT¬{ÔJW7… Ñ/ãÅ”Cø+1"1Ã+»ßðxNðžMe€1#\–#Ès+EýñÔcö½#F/“.E8N»ùØ Üí´çÆ1øzÜã`²Š”$å³ã^‘…Ölݰ¹—Ò¾xikŽ©—kG€ñ©RIºÌ*ïÒc¯“ú¹<¨ÕN.•"£ ØM{WòÅj3O Yβ –êB"Œ6úJÐ¥Brx»J…“ÿàÅ ò’dzUäJZ^¸+´—=KÉÊçÊòüËó¾^|ÞÕ’ñ\*Ç(ö­"ê>­}@‚„¿— ðdö”zc!*­”ô@ƒ\¨5#æÖ~çxH²Ú‚Ô£Kgo{ÊB/ãß~³Aa>JÖè×Þ vXÙUÉnØÖ£›B)ÐbW7.œA-Hj¦OÙ3Mµ©ªBBV…œ¼ønÔpÂ}Ó)@èm­°„:Æ‹€Ù —(.™‚E¡¡BþX2ûÐH %2“%Rå5à Áø(’¬Né #²]£Öî'É‹[ÕJ´–”Ò-{-³$öGÁX”6ÚŒg×Jþ? çfräDY›<™Çˆ¸å·÷Y„¯ÿäy +Kèý©Îö“'Koõ7?üð¯oñ×?ÿÅ/üñÛß}ÿÍÏÿÍßýò7ßóõ¿ýo~øçoþö׿ùñ?ýî‡ûmœôËò÷ßþöÛ_þøí¯¿Yyõûí/þòíÿÿÜš€ÿöúÏÓ›˧ÊÛ$.æëÉòÌ )ã‹@-‘ ~•R ÌGPzƨú?C#ðÑLŸ +endstream endobj 292 0 obj <>stream +«J6ÓúD®²á7·Q-î/ÓJ—$·‹a«pr’ÿLñ(Öž"JTÃÀWÇ4öþ¶ e;·Œ“v9îÅÛúZâêÓt2& ïÞ[è;%épÌ$И–iñ—l¤Ž¶â<"ÏүؒÀ½Yu¼×°¾®CÓà|b#Zè$s‡ÜÅ.±¨„°Ëñ}ïöªÄ}o}üÊ>wÆÆHZ0…¬¹ˆ±T³o„BDr PÝߊ;ìUà0­G§§¶þ¬K¯“í¶¸ˆ)®9  +`i©‡à[TU>6phÓ6Æëö‡÷ý£„œEN€ÜΛŠ&¢%äH2P,\‹Û: íaÓµSеç>_A25ù¨¬2;PêÌŸ9¦¨YVÑy€Ù­P–TI6“Løþì-Žçòõ)`JOu¨… ÂI¼d÷›âj;Ëct‘È+æ[‹ÆÅÄ+öXµ#¥ð;Uâ“ýMÒ5Hí[¢¯ ÔŸí'²fRxizŠ3þ‘Ü|_NLÔ+˜ÿ+ɉ Ä€ŽZe;¨ÉŸI®3keÔ¿,'P·É•ÚØX .øùA2–œ3OëZb²’º}O~ȶÄ8ˆÃƒ."!.ºˆ°( K*Wdo ßoý掉éŒó%ŸïðD©¡"!K bkØI¯\ÑUßxHŸ7<@¨‚I mŠ=J8±d‡ª•ºÕú-Cû.ó9lÂM8ºþŠ ù²Ù¢‡ášºŽ{´Bëf§Mådy}Í(R×Oþ³šõ>Ço#f°®äpŸ¯(Е… ¸ Ε?cBðmHuúÞŠj80%<ƒŒ«,çs¾©}= +Úº xëQKŒH4‹+Tg:îT÷Û€ x“^ÆŽƒüß×q¶û +,"KI=¿Í†¶yÞ9„vCIÆ)§ª¹DJYk.>æ»#©%GÙÄÉšfO’bešU…ímyEpbXP¿ÛâÍ"·ÇwÚÊU¨&ë¥pñ»øôá2†lZâºPq@¿ƒ¹Ï§[;D‰ Ú¥«…K×z øŠ^u!¨*µÙu¯E¯ô®á$ê„­‰sã'Ê9ªår{2!@¼¨¨-'x|".^£õóyйXCJ/y]>ºttëª{R—ò¶Ët\ò·Î#| ô@Ø$eu…”ÕtùÀvê·¯d»€Õã± Ù‰,R¯Ð¢²G ±*£C*͖ÇÉ8Ünýi)Dª”!ªB;î+„tÞÀNürùDðþ¶¶!ä™)¥1OÊ»× áÄŸì#%?ɆâÂ0Æ.²ôÎ+–Pñ!1Kýr¦²S˜¥ÊwDRǹZ¼÷ + .°*`;Lu8°.uC!†¼Xx}hÞÄQaLÕtO[*¨øw™ÒÚM¥SÚeo¹f®ãI·áƒ‚lpÐÕjfÍñz¶9y@hÊéãmø«Ô4lÊcQ=*ëEÝÂK:ã£Cƒ³íZb÷Ô°òcͺ§ÕI¹–‰PæQqiUgÁ=±¾¨÷r‚År‚m|9Êtj-ÀKžD8¿Ý;¤¡@\)?£…¥ímziÇv•¨žŽfÙtjø3 f½—Ÿº)ÖÝÖ¡[ ëÐñ4!>¥2ßPy€*õæõÍSEsJ×ó6÷†Å‰Ì£gŠÚ&J [×¢¯¥rvÂó4ŠÀ¬Ó÷W²U–ΚÄV´°¶­oöé™Ö0´7VÍg/ݤšÒ‰•ξ]Ä)³¯ÎƒˆoJá}9P¬„8¯7Õ³÷QêØ·“?+º+)3 +ð½†T:p]qW¢¬w{í}2pÉÂ#bz!úAÚ(çvÿ(urè %n×8Þ&Ù¥°a!‚ fY=ø$⥗¶",†ÀYI¸o Á* u̘€yÊÆdn˜ 0ý51ÁN\ÿ½ŠH—6` +Œ‡ JT99n)‹ÄЫª!F³ô캼90Z(žÈZþ§jNB PªYë(‰e { i­ ÜO ‰(îª!ªý›ä««í¹Ã½K i¼‰¤ÀâCèÑôº£sdTo}yézh$gÈl(GÓ°|XÓ0lKó®ÿPajIÑΰ]Þë‰ ØÂœðW{Ci¡_ærŽÁÉÆËСtrU5*8Þj§ùå êƒU/u¥lEžDÙ ¯%s5|G¯@I°Œêy J¥ Ï‹¯t½âò.\zø€V)›6)»Ñd(‘Œ.¡:± žC_š1ƒEšW­Å–Ö¤¸@Nz>Ûƒ*“žºíÅÒ%L–¯!ïC::(?¦Ÿ“³D¥¼›÷tQæìþ³âõkÝ´0-_Ý#â{ƒs/6?§<« H±T° ±Ù¬·"Œ6Ö9P\:jÊI&ä>:#[=ðìbŸÕ€qmŸÖ«)Ï»÷jŸ·ûGîÒû?Š|”te›†úàöžI߼ϲ[³Êùž¢r|\»m`¶2âõù6vŒ”=Ù#ì4Jlê%îך)¾b½Í•q…°¯7u +m~·a¢2>ÉK‰Ã!}ÁdŒª_Ý-ßWä2ùè6ÑÑ[3o@ã<ø0‹ìK–45“Ÿ]’QëDCl>( µÊ=ÊA(Ã˾<Ô½wÕEbC6³eL±Ÿ3NöèP寓оTÃñTqCîY)È­—áO¦'w¸-@!^+'BSš•Š³Ê–—‘˜Â®)l7ñ$õk¦evïxS‹#ë#ölžÔ±€‹F~ÖœïÐÂ/í¤ârÒã¦QK`b0Ý y4Ø~‹Ð‚«ÏÎx!SÎÃtmq's•o+ïHñ{ j;Ûm^Ñ‹r¬ GW +aØdÎTuTÛ7\+Öï)D aAl“§µaÏÚ¤\`K6@ï‚7ÿ +Ê’|È©–hº-kL:_“˜y ÕØ.§Äð Íy§¡IãÑîÏóR*’£¢q­8S äy›²Y!k"ºÈÉâ?œRP$äÂ:E)Ûç[(ˆà?šs¨Þ”]"N i·¨‰•€Ë¢k/uì.{ñF@~Z—ìP¦§x¥lØXƒM¡/Žú¦Í%š‡ÇÚZÑKÌ6’p\AˆbKK˜$ôQÏA©F"{)êVlpI ¦¹dNž³ G%DvÁç,aâ+ ¥[«‰UïŠUï^x£á+ÐÅþã±ßÆ«P‚—îzÕŠKuo]PXå +FšÑ³½6× ™fh‚JPŠÙéVæìÞÝè6Ý­Jš¾­|n Cø¢Iƒ‹—cb\ú4ØVivwN‰CWP»ZAJ³´©¤®]îeñ!ó;o–öaH. ·R|ú·¨ê \H>õ¸‡zœE˜ç/ð,[2'Щ$m •ÚìkQÑÜ:·G«ŠB% †¸€'Y#ü&Ÿ'£Üf¢"¥](¹7D»ËžBžœ¼»õÇR/+0]£F½»O/Sj9ª®#‰ãfMk »9.àf·(_·†ÜZ1Ša’@¢qÍÂêh’Ê€…p¸YŒ²©+FÙž'$år!E†@·Øt§®v’Û0ª)‘b—Mál"y]l¶q„€(Åo%;qÐ`ý€15£³ ê³«¢vÉ´¦iA-ÔÙ|’Ö±)áê:Yl&e>!·‚:dâÎÙê0êCUóʶG[ÔM[s;0$1d)àò>a`§0‹¸Åhê8œy*übÇBj–ͦ@_ï©tî,µ +%yÌ:-•¼<2 %Ø»;,¸Ù¢^ßk £YdÔNÓz±±~Pëd—BýsC¥‚å[¨ÍÈ\U ª¢Ð|NÇfÓ^ 5Û¿®'ÂuŒ˜b„sW°1ù÷Á°$qT~G‚ÈL3mvðt‹ü +èy=Á^ Ò¦òðŽH’Ìð¤ÞæY4ô ö²N$JBqE¢”;Œò¢\Æpé!Ó%qÉ5Å#Ö¡›‘°9øyµá¡$CùʦJ!~°êó« $ç¶÷’Ø–ÄI„ƒô d6ÐݼMÕÓ²0Ö™È@ …ôPï—+TMJØM˜XgÇk~xÍë’üb'dy.²ß­Þü†SŽ9z<Є(ƒÚÈ…‘C'~a9&öË¿x‘%D€)׳B—O»ûo4Ób±ÑZÛŠýf Ë¯‰áR·'’/ÉÑ*îV w È9’ ¼JÑ#ß¾”H±«‘Ós)¹®Ðíº·òx åñi+SÍÐÜL²$ø\Ju" ­´a^í®§L ãÖŠ·Šbm§“fÏ\BÜѹwòu5ÔqµA[“ŒØ«²¶ªë tœb}÷gâ!²¶”J“uÁ LÝÀáŒðÓÕg±~©Fy|i?>ÀŠFSµÿ¼¾¤a@q’1,­ûü¦aÙöÕ­ÜÑKÑh¹NŸÇI®5ÈJÆ=·{„Ø©á†Bj ¦¹|)ýþ\H6- ¡¤Â¡d•°Ñä倲¤|쇌ýS,76PÉudDèñX/K*YÊoñž”ìm­Tj•ÃÆŠìÈAª[Pޝ@$ÈOGºN-ð˜=ð˜ýÈÈÎ(J³¸{4£ösYHTbOÝ’G¢Ðd ÚGf¯T¸øÀ4ïå£YŒéj=õ.é÷K Œà¬»¶•³jhŸQˆ¡_!†>fTÅšª_€ã­aÎÀ&¨ÎGç’n—ñÐB“ð1§ô±ä&´·H¥U©&—ñØó[î˸ïäßËm>ï'D{釸p¤¡ÐÌîb •½$àÓcëñæP +²YdƒÕ™Ýi}­$Ê6j‹œcU©[ +)2‰%©«"àˆuÃôÞ"™Uæ€ú ÀÇ“úˆì—r.E»¥bõ-ÜídtÝÂÅ´[ÅÌÆJ€ËCå#96v$ðªs{åLÍà*Tb¸‚¹wª@ær±»f” ‰aFü½{”œ] ª’8ºP µ8wµrû¼³äf :Úí2'Èáðˆ_àKzH™‚¸ùJrêA ]”?š§|ÉiÕ]ÂI¬­Ä5£\RTÉXš;§yEU†Hÿ’Ýô&¿PtZ߈û¤!Ü•îP”²c®C~!^¦fžT”G²ˆ¢<š­;~,ÎgHd­ÚÇk‡º"žJAõ²±N½” `á%ŽdK“¯`S,Ðé%–å@û2G7ñØ•iI:Q÷6ƒÑ·Êû_=À¥G-ùfÂó—¬]z~ fIÜsÎ’± §êªì±€0O‘÷j¢!¿ØÛkX.R;‚Wå,E •Ù\¡Û8HÁ^” /B8î(4 Ojö9hïX«Œ€ßм1î/ŸKfð6º!…¾6nË~‚R>DÏ`«±pôŠJ³#g°Ôë¾8 …Gêù–f”¹Ìφ ÚLEm¨¼"ª¨4SW8Rôg®Û¿ÿ³.àä u»%—½Ð"ÓWÂü(gÊNæ Oú+ IQœnðWÞFTàûÞðS›÷Ç£“½YTmðÚhÙž-øÉ”…ëÖ<|Ž^¦ZŠýY”ÀÔFKš¶ß06ЭÄ)Xu–÷üz[€š>üÛüa¼YD+`ó²Ö’¶­¨Ïp‰£U|µ!¼‚U‡‘†˜o¸diŒ,êħ° +t§ +Ô0C"óVÉ ¨p‘𩤮DŽn]íäøÍÎ¥<§S +0LwÅ +Ý„Àøí¶ýò©z˜ ™²d8h^¼xq}ÓÑé é¯7ù†E–*ì%’yYý Â[‹ÒŠ4ƒ9ƒ’`uiÞ!©Nè@H~Hv}\Q%ŽW¨˜9ïP«’})A$ß!„ùAAVp­«Æù…ìÉ¥¿u€x2Îwm˜y +Ìò\áÏ ³å@µÿsEܘÚ²q!áÂuÙøx¬â%žÕ¶ qRè T‡25Å–¯•ÒâФÛ]¼ÐûÒ0/e—”±i+o]Øb÷²ŠC‰”r]ß–Œb’Ï`íußUŽbf û£uTÉXÎ'ý{¢&­ õà€Ëà-|V8pÜÌ»²vÍG›aì¢Rl!Ô²~ªîhŒoéõP»2ká"4H0¾ðcUý­¶ÉêRê)스TxÁ'õCc)Dxkaöy¯'Ü# lENeÁÁ,ñ#²Tïq[!—Ht¶Á"úIÅIg`1¬Š×®‰šZ a€Ýᣡ«mÛSH†˜_pÖµ™‡ëÿ&ãê«ë«$áÖÖtðz~³±¨ng!h±pBS× §n…QcÃ)µa‘Øßzù™¸ßµû£±tÚ{@!l®xŸõP/‹ ®EoíÙßPÅ’ZÜûžƒ€ÝH`ðýŸÝÊJ“ªQ) þ PøÏŠî`çíorâ½0ü"ƒEGú´2bFz$ÇÙsS›vˆ=­ªçt΋m¦”¾H+æC¿+…{† á¨þ³é›”F‹¿È: ÿyçrÙ’è¡Uë5id$'%U‘+?ÿÎ{{5;9ª§j᣷©Þ¬’¾³L)ÆÚÊm© "M¡T»ç8<¤t‡3Fsz4Aº/v6ü +béjayCÖÙÑÅIî‡%5¡Àd߀>ò©ÃÂßSR¤5¿fUçÁZh¾‚»Ö68Cú‘7vb: ´¾;`õ~Î+å‡u°å—¿”·–eŠþ\ì¥!½h£<¸ ^܆ۢ\l{ÃÒå Gå19pM*.þÉ“Ôboyª6ëÃCÃDFŠ +ÙH} °Gn¨J+GÞŠ‚ŽXºÍ¿V#\J²“E¶¬í®·&»ÆNE)B^6!/;UÛ¬E¬ ³é +61Ы>8ÀxÅ–(e£v¢ôÐV*~`Ìt¾½Š®/bÆR ^ÝŠ*¹Åߣ>(€tƒé¡™Q )õÊS1†ƒOFª¨ +BËõ œ-AJ~äÀ6‡Â/Ï{øV °xM'WÉ^¬ µùG÷j_Ÿ}•2¾¨%A˜^TyÂpƒP„ïxýÞõ¿fp’Ž€1‘ƒF1ðVøük Žbî>BÒ˜8b+úLNBÈëœV…À;~–ºÁÍáDG7­»½ê{.dÈÝH]ïÎO€W/uÐ ßGSÁá}‡§F̦x\Ðr¦ºÙ{—\RÂ=™ÏE~I2?$ÕGøækéÊ-·bͬ;ÐãuI±Ÿ}¦Ø!«›MèœIâÕî+µð~2fo’}°¿‡©®+lŸGÇ8¾Õbà ú"‹Óq› %lÃ|&Bj±a”ôþÚ0ŠüJáXæ5krã/%ˆ^.eK­Ë0Å6ŒUÇ¿=®$mny‡Ç]QJX^iä@¿âÀó­·`cb›‚9c +˜jM*ŠÝÖ¤’I¶ ‰ )»®êj” ±1÷&ÚÈ‘õ%¶£lü!ea:{ízçðÁrÍ%¡ôh±üàý`ôó—×¾f0çíj§ðw`zÍ&ë}åîéÉn:ÒÌfSi÷îdN¯ÍÒz¤‹£ƒ–†j%s!i;u’+`*êv©¾Ø˜J™ÉÕ£Éë‹é½c5U2<_=øÜ}·‚ Wö#å™ÈôKá±·P ÷ÌÇm +žw–øuwpßì*©¨¦Ly]pÁNv¤ý«“´xH‰y$áV€ú IÑùsçï°ëEEál;Íî+Àšé…í<Œ;Í‘Áâg­™‹TŒ„ðK¸³®Õ]QS%û³æ]MÐ"ðDHv®‘â­Ä)9j3tön—Vµoç0ˆÊ^Cñ²sfKÁB¹,k¹&•ëDY>ZUNªñ”ËÊ +«›=®@îPÝ„ñ +ó,&¯ÎBU 0ªg:.)é–0#ƒÀ_Ž*%øÝ{§<1zD.Œ“<+îºoÒÅ­ÎMË ¼³—73‰ êë{þ%ù‡ËƒÇ” ËU*E"U; IÖ9gÒ^c‚êQ£¥"í{RæSÔlP2Tš!ÁMûÐ8³€¾@×nä˜ +T@Cüó+Œ4’4_ó®8OWÙQy¡0¶ÎÚrÁ$gëUWz´W†æ ñDÏ!hž'Öí#P#L_£’*€Œ›Í2°·®,å ¢t‘‹åq¾f‘[w!ˆ½¤®°„­oð;Tèø¸u/dÑÕÓÑÌÑo¤ìÚ˜®ÈŸgcgƒ;fQ„Y#¹ +óGknMÌuk$v@=‹ý eXµ`SìOs¡ab³acRòøµõÈF~7Ü^ Ü¡±¨-(¢fŠ­µí”ÜY2 ªÀ×¢wgÓ»7#_ÔçÖLè’FH\ËfgnÍ„¦;’ƒÏwƒ JNÛA{JX^òŒŸkàüÅØIá\.hx6¿„­Œä$Áâ°@lu*Üð¸›í +{x=5!’nØ”R¦B£Ï¹·.çE*P…þf?Ý÷úãuvª¤ùô.Z´8 â ’… ¨¯]¸kÕ20:Út¾ý™JÎ_8Ý-õ>Ý@ Á#o¤$gW©CÞs4ÅÚ*ùU0YíB¦OOi»2%YWÍ—ųËq{äÀAS ¯Û›Áõ”W ¯5 þ¨ÈT*.%T\R=÷çÉM +,NÜJW·` ŽP”ðJոРÙk–óí%E¼¦Šýˆš´\Æ)!àí£NB›ÁåØ ‰“±±e¤–\lˆò\‰·F ?S“šªÌPX¬JáVÉ2öû«“„CßýÖmÖ¡!‹·¾>)ê²TÌ‚ åš‚=ö`) ³Ó#4Þa$¯ø +Ò¥+Òã.ï¨B¯öŠ,ªÃ"²ë€¤èVÀ°×)7µÑEŽb(8Ñ]ñgú|‘±[c–û®„½hÔú³:;SY üHU…—L´°trUjúÄn)›@À­Ã5JWA/â³Ø¦L,•}caO¯j›5'~%_tøÆú|!!“€Œ-À¿yE]­ –Šhrø¥îÅ\Ò.Ÿ)®(ah¤ ·)¯aóè”ÓMˆF\DªÇw Eœ2¤i`µU<žï’„~5ÄL)4Žö§0%tËbPžK M©Õ0Å¥¤䢒ô¸§ò…šæŽ©#sÇbÒãqe¨:I=t’ýíãý4[Í1Oe3c!åwYV)¹Œ¹æª¬4…a‹ t6Þ€vë¿y€[IŠÔ#?‰núhI°)A{ÐŽçâ"˜D˜Ñ¥6e߃ø‡J¨=ÈF9ÿlåØÌ+K3d¯n¾ç±Ý)1ʧ¥hö¨ŠPïOªü±¼ÁSÌþS ƒ†lûŽkûÏ¿šdGÛ° –üu¬#|ƒý„4ô8@‚©*FKÚ_ÔétäW9[ßø²û6oL@l±¿Ô]!–:ˆàäß¹LC8µ éù  Üa»3I!»é ´e- +}0 H ²Uù>z›#üåó¡+¾ëÑtÁI +¼wû‰R2tqí©Ù[î<+aÔhãK(ÝnP¢DP¿Þ—ÒÇF&Œ2¢å!KÈCçYÙhdÍ•èT +Š€\ò!v=-Ôó3i¾ì­bÒº§ä„Ás6Yb‚^5êUÎé)´îu€ïúŠˆ~Èlqü+( ¸ºÁ—V7et*Øä+h×”€ ¡a˜Ø-¸‡LýÖ9,ÍkÎÔ¯64ÓæšÈ +"×b@ìÂÔHÉ…µk˶ø°”ù%6ò¾Ãv‘ùzŸ?Ù,Z™eè§X7dMX¥¯f˜ÅÃêû·pz<ª¬£D§)édzëúÅå8˜_Jø³]¿{º› ·]–7ˆ`u@ Çš4?;&ÎüdA©YuâJ’²ýŪ’,ÞÕ ð¹z 5= ùÄ¥Æz©Š·¾ô`Ò²U ËW$—#)OBŽ-J¸W@èÛbÁ¥dã XŠÿ;g%yÖwé–³:^/‚o^‡$­ƒÖ2‘gjóŸk$Ãv)^\¥ {%×ÈšÛ2RVM!rNlþýইB—·2ª×ëDúöVlÅ”ì„a“E‘™.S1SKê$ï¨yE,é¥Êá dEcÂ(Ö·;l¹&´±¿ÙëÆ?¶!'Þ½º~)°«ž¦ýL ½íô^ +µ0“2‡—? B†¤‚³=µ®™”³¬É’%›`˜,M&ÿ"ž3(ÄÏ¿Þe…èj8Ù(9†ƒæœ.,šxtY®ˆÅ)^ºM¥cÑ-ÎØŽ+ÀKà$"7+Nâ]U¸בM¿ Å€¤ÝÚ4ÜU=äÊÒuç׫†ëÝÉ—Ø“e"ô;\$ésÌ,HœÂôjGî)ÀîÄ¿ÆTkoD ŒF®P}b¿—µxRfÈBp'ÈXyïW½“lh/è±ß††u9"‡ÀÊ%í™õÙ“æ¶—·£¥ðL¶ª:ˆË€¢©BÈ«t\Š@0i#Ò„ê_®Ç5(yk®¢+–/p¶¬mo{ +q¯{ 6Q*>œˆøÛ" CÂîìÚÄSÀH@ ûMi|­Q¢w‡¶™¶±`¿-øê +)öK†´ä€xm饀´Vz¡áœyKÓAu¨¤dT*~Ãö'6ɺHžßÔ¢üP@Ø©År¢@µ…n$#Ô£©ç]Qõ‰¡d±™RúeM7d+¢²‘DÖ¢ RŠ…Ìpzl;¨ëçFµj·¯Ø…ŲÙÔVWX·0CýZ)»ÕšÞD7µ~˰Fø-åÃÀL¶ÖÓBGÞ.ËÇUKewz *Ç$z„«øºM1ªgr••T¿¤–xŠÊ4Ù‰Ú>iˆæÏ³³r„<ØØï½¡ áÈx6v‹ŸÀ±+ºMÿ}³ÀŠ)Å[[8ÑPè¡léŠEgx0]2åYëÏõriìuõ°«é¿%…üùHÞ£\%–RRÓå_ë[p9í’Á[\`DŠ»Q°´×“ö=˜6Éž´ʪã +&‘óËøÏf>|<íøû}ì–]~âƒèª´(16ÄüÂ,“Há¢XΚ=×hŸõˆK]á»>gv"O”#jìŒ`ÍcP!õ=£û:¾ÔÙ<$yÖj\Ú™‹ßw»cÐ77G”3|ÏÕÒbE5o]ò}?ɪ¨G¡®þ§¸m÷d’úÚöß‚áeo@( ÛglZ~¶’üà­…».ÐÐéá#‰ FIŸgúj! ‹,Ói-$Ò¯>8e:@dq€P«Â´>UziwJÆù¦s~a,És´‰Ujøh]†“…ÒêkD_Í£ÙÖ^Wx®r +©ÿM¸#S¤PFÆ{5–(%ÒT™Ôв3AÉ÷÷õ7ˆžª.U  ±Áõz=d¬e‚Œ¿g•ëü×ûÓ´ (».È×ÐàÔ ?ìÛSqhþ%Ý¢DÏwzeV‚);$j8u\-¸8¥=Ë‹¶¶ë¨À&$˜T "»j<¦})±F}[mkG^lëM +Ï+ŒòÂjpïšÓ*YÅzVüæ)Ø`ݵaØÙÁ +º]k7ro½Y\5ˆXÏ|ÞLP4Z樂X÷J~ò¤ìÚù*Ø<+B3‰ È¢2’°UЉA6°ÇT޵*ÌiÏ—éúÅ0úžnI|i’¾J–dç½S’H=©2Ä=ª&Zsøµ`í!ÈÑÚ03Q¦òB§“o¶|·¼ý1"ÔÈܘÌo3ÕB¡jÕWÔ-䋨V5Ã¥:ñèìÓË%›qIÄŠ^Ò<Òî ú<ùkÁ’lˆ(0EçIJ÷ÑÃbR2 +L +Ìãê~™¨Gb½ï„Šæ¬LºËž Ö«_”ŠÞ9’銨!p9Ä0¹ã¢’yÂ&òZZè'A¾wÚ*Ó¾iìqh07¤„ó +Zо"Ž7-ûBÚ ÆUkI)‡£ú¾[ +ÖbeâQ^p¡!²T3‡Èßw“lonë7òÃÊÅ+Y-°ÉίÚu͹¶¬×ú#9ôG¦ `ËZ4QúC¥#â":æ·-¢Tg¨óNø‘РÁѶO’òšja_Ï´‰^Cu³¯W' ½t·‹B´&‹ž^¬ ]ÒÅÀWrųŠT€…Ý«;4µ"©à©ú)Ò3¾”?Ykr¾b<é«Au•š×Ù±)*e÷ެ©%¢1«@*åFØÃ1W¢;c¥<ÂÖ‚—õÔ¨Êv}ì±ë }8êr”҄í=Øe¥ô 9Ê–°f„sw¢ð ÓYÌü„ÝcG Y 6LRW?™ÆüŸ8•PðÕ>zV+eŠßF—ÒU Æß´ý­J†GªÑײA”ަÅÙåj&Ô‘Ûþ8 +—ìò²%Ò*¤ÕRì¸àª>ÿ'E؉_Ö8\8Š^—12úÉH`oÚ‹C8I_hÈé@ó´6BÈ'¡5øÒé†Ä}ßß…dâfÈ,ö¹=l´\˜wç¦eœ¯¤…ù-n JÚØüñÐÐ]ECeW³@™¤¾+R¨4`3@tQf¡ß¥£WBã ª½vcüðdUn + +ñÌ[ÑY¬úª?ÐOkZw÷é·œM2è‰?ŒYž2/#ÿVüpe‡É‡¼f¯s>s ’ªÎë§JÓíÃO»)GXÈvñP;â'¢›'gk&5¡–oÙÓÚûÒÜucÁp³\£·Ì`±N‹Îˆûâ0½ òa:žä¾²oô„Uè|lf¸Ž°ßù)Q–ð\b?v&H V\D0¾;Y{5ô@…“Õû"‚Ÿº{)ß +¥@ô°ù$!'OÅ´ÓžlF.‰ÎY +廉Ð(,2Ê" CVoXÇôvA“¬Ï!´õÊW"& +‹/´ò:0÷¾ +ùÉÛe,~Æ…(!P°òw_rÀ¤µ <öZg{à ƒd±Ô…D½¸aÄyp[VJâ?¤7\Ë.HÉŸ +[ pè›q~”£æÏAdq ¿Io…1š¼"Î?– Ÿð1¡˜ûœ®*íDbOÔ ¥k`s>¡£Èç ¾3]I/ %@’MÓÀ<š’mì!8b†Eh»KÛÚ»ˆkI.o¬a°æº¦xpˆn,ß@ Z9¡$!)Ëb«nvËy…ŽEoqã9´¤öêÚtØÄ`¾­íHc'©K–ÔÈaFQ¶¨(ðm@IÎ;@VÞ>Âï+ùȾL:kÊÄ)bùK-ÙÒ. úÍHÁP(„ë ?c8[""öËž %Š TNHEƂݥL°QCWèo¢(¥Ì$ÕI|:jpøj \:JP—4ÆÕM‘‚q]öÀ°È­*5TU–2[Gjü9ìkt5iÌïª9Âë÷þÂT’×= &rŽà1I?Î59ª(ÜAYbSÁ}¨ŽíRG+Û©Í)sìYàzÜv´¨dÉE0+¶¢ý¶³h([ˆë‡w†¸t$ÃVuŒÕ«\bTR†ç¥¶‹_ãyŸ‘Ñ®¶iò-ú·o&¯P2É· cD#ƒ­b :Þs™QÓµ +‚`0H“ˆ)˜)ñ±r‘-w“jD’ù)7U©û\cB…üϪ E\7[è‚TïèM +†óvKkP1$l¬„技׵1½Ó„Ö·ÉZSaˆK‘‘Ϭ‡÷h”¨·ð &®*ÄXï#;Ù­TÉ=ßÝ—´ì#Sß¾¶çÂñ\ìa5ÅÕOçÀ%§Þ€ë®2Zã€Ru}DQLÕÎg9HveFD¥ƒÂ%` Ü¥5O·pÿÃ<)²}‹Ø‘´Y_Ò|P®…¡C +“Ì à’’#ŒêÞ£ô˜2{(Ãê®òãWb(&Gå_‘y3QˆügÆý ¹s õø‘‚~ ›Ë9‚w•wÁº[3¤é—à›º¤_ +sY:ˆˆƒmíü ŒÄ +‚n­ÀuEÓì;ê°Ô·›Ö¦Ѭ• F÷çÄ‚¹Ni½aXÃ]*3!¢‚¥oeª°Y~Äj‚kÛW7¹¿}%ÐùG è¦:ÿ0£E)ª[Ø}%±^k5ûþÖ^k±nùÒ$MâW)èëß]â»äÊULCJÜŸ»3”€ŽIs ™Ê—õY‰…A«Œ+™º×.…×´èœðêÒ(Å„uÎ,œGåÝ!‚…áÝ*>†¶V±‡8ý”S¤%ªÜŸ>XIé½´Õgˆ8ŸÄþ$ +Y˜J3£ŵnyæÕ^î“® +*Ò–ý jÑ27”eEx›JE‚#¤tßAk÷¬—Ðpqг>è¬Z0̶,4’¬Š¬5\¾yåÃ_¡œU¶¤tôþ’¡YÄTR”®ÅŠÒEÍ3…X¯b#²GýYÉÆ„ÇÚ:z lÍ‡ß ´·¾wt¯(¨và¹Of¯Ä¾‡]‚2ëÀ#’·[Š©Kawr‘¤"±h^1çf™ íÛ­¾maþ†N1îæ_ *£fŠß½½œ?³ü‘`n;CB•ÎÚÓ†&cL™ø€Vø»º€äìËî7äÓÙj}_ÑwäÒðZÔ#Â<ô±. 1ÏHP›ÃˆÎÃÎöipc6¸±ØæÞÄaF+ÎÒÛ÷âA6Z·þÓ‰ƒ?}’‚¥Zy’°©Vj¢ +ïj‡^ÝÁ[_Cl{ã‚!µ|B;…ŽFµIÎzX¥ïùœÂ€6d”¶UÎYO„_ŠÁ‘6ç£Úø¡5-Qvmªq@¼} V÷ž›#í8: –C¿¢SC'ÕÈ”M](0¹5ÔذÇgI$nѪ|€,[§Æ…GœÙ‹ Ì2)ïĬU'¦•1¸ÛÖ‚ÄJ Z3GѨùæòoÏhi£åÝ8ïýˆCð½rߥ]\tÉ7Mm.6ì×›ú;tÓL»’e¨?Ü;‘ €©¶ká€ä9û|ÎçXñíu´2¹!H*û³÷FG!dïË)kBÁãŒ3g$Zf$êØF/õ7Õþæ¶gƒù‘Ä`q@óþ€·?Wì#Þí3DGfÈS2X+Ýs€2™þ‚—±÷±q* ½˜‰t»(ï +e)S`5ÄV;ƒTCÜÃbqïøç^L†õãÑÉF¦[æq}Ï?/ó* + +;·j*Z››Kf–iClm‡˜p˜F‡Bä[#Јuï;e†Þ‰¦jŽBö¤ÌÅw>Z ôa‹SnÊ%t<àû×uà>^|£…G€ …_Êb‰PR]kLxIMZ%£ÙkúßïŽZœÇ±.ù­òp˜}Ö½‡b\x}†³Å&þÞy×k›öì_)þá.ôª$ŠÍ*Ç#›6·tF{šÙ¦!®ô`ÞZËg ÂÿÖ̇>ûŽñy7èþŽšjFuºJ´`J•ò¦`Ö`yqùkf‘kÌ1ü=ís¶V3t±Þìä~«^§˜Œrœ´b&¤$ z]-Ê3Æ#b- +t¥…lÁv¬X” x¿4öXæÙ Ùš;tGíG^w2BG“ñ.ö®½L®Ã’RD%YÿöïCˆF¢d¼èá +›lH€5Åúºæ–ˆG Lsºß)"ç÷ûÎñ°ï|¹4h h,=€ý6ûjQ6‰œ¯„ÐŒÔaFÈ_uÔ+]dlýØìáËAkä^ëÖÅîÈNq@´Ôu ±Ã.0R·kwvÄjø1CZïݸHºà7óc˜‘Õ[ꄈ›®ã.VëÈζ^ªx¶Ã­Ž.9*¦7xÃ[í–6¹SaqçþÙu„ø[VÔ¶ö½®—iÔàzÑ ›ÕŽ&RgÛTîK©Î=S8à‡Vœ¨—껀¶†+¹O/•ò—U òš»S¯²ïì©ú&ñôá(Pxî‚ ¬Tÿ´ÎLKóð·a»ƒdÚI|Ê£üÀQrõü[†ñÈ` ‰Â•K”G õ]/B9òþÉ,`#tÿÙZ ©Ž øCyÄë/­¿Ž [Ø#†ÆšúeÖo.Û•!•,‚à>C1 g£ëÅù#Ž&—r%v»1¬%ú(DÄ.e ³ÀÄvÉÒ‹{oØ‹]ª˜n¬/éâFZïØº“^ÙQ$|/å¿§ê¨JŠ¥@œ8¹ eoTˆH”OŒÜPŽÊ¨ßñš¹‡Ú í£ØÊ—°ú_{"A•J\Lw±..•¼–äÕsEV„¸¼NOÃ* ˜C wlƒ“cêÕru]¿Y£Øbt)!pâL8ÀÅ _vÜåîóФA%—vyÒ®)|ÅŸú1#dO­sßo. VÚOž>p"ÞνýË´ŸÒ³.³U„1Ö+wÎÒ”Ùýð«—?J‰Ç¯=ÎÈ?yÍÿò›u‚øÍ¯ü—øËöS—ûÅï¾ýï¿ùöß×Õþõ÷û*ŸÕËOY·õ›oÿzS?ÙýÓ·ÿüã7ë ÿ¯¿ûáûÿhïÿòÃo?t~§õîÿöíoþÛ¿üø?ú{ÿþ‡ÿýO¾è¿]ÿú럗oþöû_ÇŸ«¡ÑðÍþáû_¬Áøã?ûY´ÿÍ·ÿmÝúË‘?ÿ³ÿü[›>ö7¿û·ßÿË9×_ü_ßÿËï¾ýõÛøË?¿ÞþúÏÿìzûÇçÿ"ƒóoŸýGzQ§¹Þþ÷õ_ÿßjû÷·úöwoÿ÷ÿs½ýzàÿþÏÿìg¥‡ÄºQ’™ŒÁÏÊÚP½4zß¼TðŸÞŸå§ÚÏi¾ÿìVÿÏõ¨™ã(œåb:Ñì× ‚à;É¡ô‚È7ù®„M~v,$¹*B”¤YØýÔû²”­/ùUåG /ÖÒ‚¢Ïç¿‹-È +;žÇ€5‹ÚI“¿EãèÑùb_åÆ&óÕ[¡ðÐæÅíØºµ»2.¸ÚÿÙ‡ÀNQ§¾!íb½ýÝn¯0žÔNúÍh@Åe©,»·‡¸æ,ç^ÐçnqÑ„=F4²ññOdóáÆ„ ­®u§ûå ›âæµºììý<À¤GcœíÂçiÜI†lzt¹D×ß¼ï GIÒè—òËßk¡ö³Õ75N#IˆøYñÜá“9§í­´ý êyD>Ãó Þ½‡¯ãu¸\”¬th-±Ã¯ˆö¼žw´÷øhûÅ¡–õ§ØßOËç'}®7¿ÂMˇpuØ×›gxvÛ4F#[;}‹÷=ŸÆ+E#ü³¯ÏÆ8£k…gá“âžõÅ;xn•_¿ktW×ýî´ïV|)¢ 5õh\ŸK4^~h`|ýœwç{·÷xH·7[n$qõÅ;øyS ©µ§t&¬Kdýý®Wrc.ÅÃù‡_WCñö!¾Äv&U9sÅÇÚ¢ñL2õ¤ºM‹žä¸÷è½ý5¸ÀÀ>íÜI³FãÜßúë@ûžxէݸ§¹ ó‹¿âü@>ˆÑ 1?vJ¿Ñžî˜ín1£ãUÞÉDœgœOÑÝdÑÉÑã¯xæKöËeŸ÷ïv{ºöø ¤ý*™â¢.ž_å}žígÐ'òÍq¹^c®HÙS˜öì×!—&Ñ/·ûÝïÎûÓ¸y5_ü¯Ã ]ŸD2Lg8i#ìv9?özÚû½ÇƒªJnÜ3÷‡3?¯x’ûC·ŸªÔ:îh¯š2ÔH>$ÞZü"ÌÃr¼²q§=Ö>I°ï3äí9íç÷p¾ëAÊÐ# +C½ ¶Ûk| ÷Ô‚íÆ=æáCžÆßªÙ1íÐ>}'œ!ŸÎsœËå—3¼ÞÃs{Oܽ3Í}{T¯iÚÃ8)Ïo/ù·ÝxÅÛÑ–îCcÙ+ó®¸?È\=Fí¾;íà;£}h.UãH_hÌm7Þ1¼»ë=:g8Ñ8öåô5}ñγ‚–5÷¤Aš4n¯(§'ˆH»q ¿š£±ÅÅ'YöâF{Û+øåaIc"wðÙÂôñ^¿>yòz"e9=_ß3‹¶øšò‰ƒ0ÌØg&×|{æáœëY ®½ ë±;ŸâÝ ¼>ºw?ü»/µk¾}߸"æ:Ïuh·ŸI[íwÙ]ÕT©“\{}Ûò§žŒ= {iÖ2ôÝi§^ç^ürà²ì G4Žk‡Wß^í¹ìÎ1P©û´}ZŽ·ðÜü¾'³Yv\…òôU÷ÒA9àÓnŸ=Å©&Oј÷ƒ¸ÔÛÏ|.š¡>ßù¥ÿw»}GÍé­hlg +äËsc+çämG×jÏw;·w:ç3ÝΧ1å=aÇÌ—cÒŒ3—²ï¡îc|ñW¬$m$Ü¢ÍOÿ‹wv&I*†íŠhGÑÈw»=])v2Š2£±”øÒÇ¥0L1±À=µO‡ >sÒž…Æk0.mæ¾pŸ‡”ûŠŠØÏ,¤Íæ(Fc¯±ßOM#Ñ^önV5ØhŒÈ‡3Ü{~ûÉrì^a÷ìÆ!eÅ÷æ‹¿âõ«PèêÅôõù*& ·³ãû´ÛwÀÀ7Fj¿vÖB'ùâ™ÏE[οhBêün·?{âÉ6õÓi¿êxyAq’8¿$_ûÛÏüüRU¿ðK3ÿØï}'\¿ë5¢Qö‡n¼^‡w-ÆÏÛ>eÌ}†óÕåkxSû îíõl>†÷YkÞ {¯5¿…ú#?;óÕE%BÞ™ø†WëY<" ïv{n^_åi¯ï_’ççŤB¥¦{´;#Бòª5ž»°ÐîŒÃ~@ç xïøZ¸/>g1O-Ö-Ö‰ËGo(»õºëyî´×/™W¯»sÚgЊƶ?×ûªó9Ãó½aãO¶å½áDŠ%ó•v±N¼†q—X3uï1ŽÁ|hl-ççÌ{w4²»±ô?WQ—±ìˆÓ¶çïÁîwKаs‰§Ò_Òx^J™¼ÜÁ}¶ò½>¿­žGÑT<±Y΂pïFÉd?=Ï™óµ÷@ix~âgÔ=Fç?˜jöNéÝgý¡ýeŒ^ñëð +˜{‡ƒxÚž|UÕ´³B >šxþq_eÆã!ÒMûÛa{ÎPJ=ËyëÑ9C„ö»±lׯDc/âçç +ÞØ ÃÜ[qú·ºŸåž‘; ’ݹD<Õ‘¥óÞå¼z¦g©µFמ÷M(ž‰+µÓ³÷úœ!'?I†g<^ʳmç{êÜW¿ÒKã9ÃuDý1~ˆü'ÙaaÇq¼«ùåW4ãÌùå@6:+±ófKû Ï ‰ô#í€[ÇØ>FuÊ}»^ŽñÍê'Š˜gø6‘ºNt7ç^èŸD%,ôíI¡ð2ç¨çù´@ñ óÙªÌ}CåLgm‹PEÈ¢’w‡ßpp®=üPØ}9ÁÙÁì…–ÑéŒêEœá)xa4¾ÏN&“-‚³è€Ó<Ÿ­'ºz}%ÝǘÓÎ&¤^®ÆWàIÂâ™·•&ŽÆ³[_ŸËËÚ܃D;57Ö4Ïwt΀eíËÇrÎPÇyfílDàÒ÷@ç˜= +$•+ÂŒ½ØmlûWàY¿óáÌ‘gÅdÚí%_{œÎZS†‘¨]E8~Or9v,ÜÑ^eî~>F®m§Œö¬RúÉ8Ŭû3çëg‘îÉá_QïX›Yõ ³ßUÄûbã·¾¿ ³”!™÷,Á"õi·§ó0÷j^ÊÉ›=é#LQ%!ëw^ty>޹ÿx>)•¹Ï¨ÜT|,'ÏZ`ÉíI¿woUåH²U¢¿­F¢#Ïj8˜D}ÆŒQb…’4÷§¹Ã¤L8p2×Ù@ÝÊû ©œRTÖîû|Ç—ž9ÌÌÀ°èx$d0êû‹ŸQÓ‰ö3ÙY‡Ü^òw”þs{MXÍ)Ór ϧY¤üî§ArÜÛ¾þ¤dò3#OãÂ~æÔíìgѽw=¡lÄËþ5_'½?ž¢Ø‹=F÷¤úÉIQg`=ÚéÄ]E€•zJ ={šøI<*3P Ÿç¡]yŸá¤IZ¯§±žY¬œ=Iz ­&V/nTR=â0¯Ð ’ÓžGÖÙa".÷Y™Š³@ÇÇub{7>´YŸ¢]}I²íM9Pè1Iz2„ zŠ + +±ã |Yg8o%ˆ&ýdD<¹P‚;‰Fåg_Îðì:â†QO;ûj"Úh<)+½ ç 'ˆ’ Ñ)>@6¹"ºñ:KãÕîÓ½ƒöx¹·|>Ϩ»P;öˆeD㟥NI+hoe×ïeÝ!…S ôL'¸iÙe ·ï&ÛÑv™G¾n'{r·—{xveçeÐ…}4Ç@)B+±àuÎ^ól‘µ¢ñ$œ”®ðiŸuØ:gÐÜÿY$‡IGÞ‰ÉR¢fœ@)ìgÎÆàœaC¤wçñáá@Ê>Qc{¾¸ êÍI<Åœmô'+TÛ.!å|Bb„ˆžD{|.×ka¡Äî˜Æ“.x Ÿà}Ý;kÐñƹÝ+.Ú§>Eÿë6Ž0ÚxpœO<;Û_']Hç²÷†Êä}ÚíO|$Á±Óþ$¯r{é}Lió£ã’yƒö´7Šžeƒ·^B,ìb½„UKš’õJ»s¶ Nû¬ qÅFèiÿظfŒÿº;ïðµ;’qc‰Ü׺Z/»QBOî oä\N>ÅþÅ£íËå³q(Qp¤çÉC>à@Ú¯“êQ„McÉ’1ßGc9‰ˆ—¼í}ãwåz]‘Jä.)„ìÆzJ@x Ÿ,™ÒžŸvû†vŒS' qœrGÚMwßSh^X“ÔKyÿŒéu§NÜsÃFÇëîö3Y¥¿úIY6¯hÐYžJÐ}öpÜ=+—ÝÏ1P,úå{OLšñçõÀ­˜‘â9V§Îýj b¡ÁŸ¸ë‰…®ú’+ÜÉ‘ áÁ½Pjш(_œô:sâ•Re ði·@Iõ€ôÈuq?ƒ…‹‹}÷ž¸Ÿó¦´;çäHóz]jdÀhÁÚÏP\~Yþ£sÙ”‚VMi0ÐißmÎç Íô>?|‰>íöQöLÈ«&°ÚŽüFŽç³f–˜G‚ÖpÎüÔé´ßgx ×9íÁæ¼ÛKáìrýžÆëÜC;ÀèY7œ}öWó.ªCó0<WûcÐØK4æ´Çäëf3¿ñx Äåî²ÃÔìl!ãl©ò]ós†Ñwà—ç®Ð^òðùÎOûóuHª÷´ï%–b´4зŸ:o¸ŸÆ5e”Í¥ŽÎý)q)>íÛ„#‰Ìü`ÊËK=¦Üç ¹ïé/¾ñâÛñ*0úxÎp¥t‚ØÝH””Ïwa4¶“}ª§ª§ö±gÑ 3½_‹±ç;@[ðìë €öT7`ÆŠ4_>“x?§jRF}9ÃSÎѪB#*P';áZCäJ~pä×K¢?•’¢sžŸ:^7QàçÜï}¯:ÊÏCû鸣<Æ6KÑ?Î'êŠÜK³(ÉY´H Ú[Ëþj?‡üÞåÄF=ŸÎgk€¯Ï×õ%Î-$ŸÅ(òFÙèÛÛ¡=ÏÜÞz}þ^‘˜-ÛæšÌõŠDÆOPžªéíY£óÆÿô}ZY¤Ä¯/÷ £tÿ†vø.O5²Ôx4è﹫¾P¸¦ c©¾6ßëY¹"J¥ñ©ãÉ«3Î@ÖhOv÷CÊS1ÆC 5Ôx"ÝÔÃî>èí¡¿ÜZj;•¡)î÷$^’óSyÛÛ5ìk³À¢l¢Æv¢–”ÎpŸ{®Tiè ÷Vö–¨~„¥¾´?Œ’à”!Ùs庑À7ú ûŠå…œE¶fÏ£m3zÒÁ{u‹ÁÅiÇæHæY ú…›²¤åk7Æv¿Iìg¿þüÂ*ʧH×'‰5m”ó“¯Ý¸! +*W÷—3Œý|$T‹í¡œp¢Òž'”:+sŽH¿•SÚ—»µ§´}Öõóþ²q$±o-Ò^Pö/»6¹êÎò>5Ëw=ŽnXr|ssGõ”Îæá·i(:¶C0.7ÊŽ9w`׿ºžh­êcs©ål7v I¬êhß›b—‡m‰ÆžëZ{ ö{ÝßmrþYÛ…¨WqfckÈ{h×Ë~Š ¸#̾QrÚÔ=zRI{vgù½IÚl%a?ííÛ®Œ¾PUfÝÏ8çMÛìЇbí#ßö^ï™ðÆ~¥ó³¡¼œ!†Ï˜uìÎ÷žt[›q÷P©µÅýÕ9CÚ{Ž1²’ï3t'ÈÔxç|Nûz‡K)اÝ^®=“ +=¼Ï|æ»kÎh,gލóõÌålCóŽEç!tõPÐÕ™Ѫ=gØÑÇ )tž ißåvÝØ™÷ŸÔÎPÏ"Š[½í·|BÜ/q£=í}Öä±—ÎÝ©$7ÎsÚ4Ÿ·ü¤zû†ßÑù~x³OúbƒDwÎëxýrݸ—“È‹íÆó”'ª¿]†*/ô0'F6S놉œz!=µ—3Œ{Ï—wÞJãä9ög›wc.{øå—,f÷YqªŒö{³¸7/Qú€ã|\.qÒ˜vÏ—ÓŽ[ûWå Ý>öyùç۹™1ëÙ‚Çu“c—×§Gã®tã+OÊlêº3'™÷ȬÁsòÏ +]îĸžHªÜ'Q)£qÚ}ªÌ{9×mDcÙÁjzŠtä$ïÜ€ò*/ºÈ?Eã¸whm¢çs†‡âv{GL㜛 pE2¯œJc­vÊsëYbÈ”³·ƒ’\w +6ßûAbiûd[µ—ñÀOig|7ú©m­ bÛ<;Te‚ÇáŸÂþ´Ûqâ}™é#|6©—9ø4 +Mó|:çÌsn"b)²´ƒ‘oŽ*&&ïÒÒN´÷€ö¡™ð$¹»¡¾âµž~«mgúTY8ïó¹p‘â{yž»fqõCÌŒ/…Œ¾i–m¾V^ÚánP}ÊÍU¸d7¿g‘z¨Ù>ÜÃ}¶4#î-×ð¸ŠZSÛ³îÄü|åî4õ|œ®ëå Ü †ÆtÆu|á?­Í±‹?í®yHx¤#ënÌ‘¦i¯´"ÚÛVËÐçðÔÜ®Þvÿ˜#æ){´­­âjÞfbªìxμó!¹ñΰ!¯Šª4ÆRÚ,¹éÆ"¡s>š?!Òë^W6ê‘Bh¤óBGa÷<ïíyE¨ºµ~n¸ìúªÖ#ëìK×I5†Ä9~‘{Dô]âÝ  g’À¼¦Âì}H»éza´ tâÆ½ák^<ã )ÇÝ*ºyÎpï·<¢ü¢êõ~›d²[ÙƒçºPçÒârZ$?íö½ßg:9gn-Ÿ9&¨Û‰)íôÌ/gnGÖB€†sæ½ým›·JãˆÍV3÷a7nþ²¶ Oìçl{ŸöLð1°éyï'ÿRq:ÐΧ´Q>µü¾æB?üÿŒ½xÉÖ>>w·Å²,°À"IÆ’5– ±™öž$ÄCBÜÝÝÝ•Hp—ÅwqwI‚»¬ßïÞOò¯SÓÝ3÷îÞûû?<ó$Tzª»«Nó¾çœ:e!–*Q«¥­G‘`ز­VK[Š¥,J¹”¦ 7‰+ )V8UB”L…°¿R%'›R2Àð`’¤á}Rb°C©¿BhTˆêVðÿu }»ÚR\tbr;¤½ä*µ©#7R·xUK=(Ÿ˜!k.— •z(­o´Ö2Þ«&%¾ˆ[U”ú(–Ѓ¹h¤l!¹„o”z§­ÔƒÊLÒ'JK1‹È`åÄh¹7_¸X (`LDÇ nW‹@SR°ë_d#B” +2™ Ó¡g…dý€‹ßWˆßÂo¸î€…Hp1`¾/Æò¤oÝí0CVb£¥™ˆOpÑ©8XÔ•VâãZZˆhA)èk|¥XËE!EûpR˜A¹›2ÅÔâY›\Íá’¬%Ô(%Ø£Ô/S¡Q.5 +úÚWùm†Ü¨ ó¨Dc=¨-ý#R»L0*Ü…d`„” ÈkSˆÊÈÊL¡ðv +Ñb¦wèáF ‘âˆà ºá®\ÚhO`%V°²gH)mVéë*ÌÕ§á©E´aafÈUSÁ&¼ÓvµØ®”KKYHÿ5WInM?!Ë˰3O‹d4Ôúƒq„g“胹qÎ +Þv¢oÄÛÇÄ2 ÔhC'´«$ÜÇoë­¤ +Pj +±2Ç¿-í¡2“̲TDi.Ú"¥ QêÁÊÒ0ò‰(ÄgS[HÐÜJ*Ú¥œ‡O_Ö7бeɠµÊ%Æd!É •>€-,Qýæ"H5Tȵ0\‰*˜+Œ{°—‡Ú\ÏLð©¯"ˆT©…¹³’ö–e•ô=À‰R…7±Œš…a{»pÜÎÜÿXç/ 7!YWOÁæ–J±1mF¥WBR¢¥h)eöªUÒ3 ´HKÿs'sqn°™Rô[Ê=X‰lWav s)Ù[)m‡*R8B¡R‹ÉÌY;DnäÅõ¥õ +)wÌL˜7ÈÈ–ÒŒöŠB»äŒ‚ñú‹¥ÊfB½)Hô¶”®4l›ÂÕŠÅ¢7pä®p±!ÀGY›ê¯THžd£4(Ô.æÉHõÄp·Ri/ì”Ò7Ê¥¨ ™ÚÂ(·]!dV*õ^/}£(}0?æbƾ…R4ÕjÉ–áœ}Kw +r(¥­TJÑj Ï ›`²%]¢ˆ'œ %é!5_+UŽ@ˆ×*¤X vmÎÕo\0½œ8V£oT˜‹T[®–Ð#œ$#ÅÄ +IÐ(%l`¯oså”zO¾ÔƒÁÃh&Ô°P9öffâ3¨$×§B-%…[@ª䣔 éõÂö¹‘?öj˜Iºç[H=ˆ+•ú´‡ÃRBãJþZ|¸Jý.a}£…¥Á 8: JJ)n3…ƒtÔVçÙRJèWI[-¬ð¸B#lÚz†p¡8ÄV¢A³°2 +B©ä–bøx ÁÔêëjÀ9DRÝE£ZdVz—·0 +ñ‰åfFÿÌÄ6*sÑm%” œŽ$9kpTy‰ø}µx…C®…‹Å*z%£o#·04†Lfz¯½Ð®weA¯†ñü¨ÑR%N†Ñv¸ØJ²rJÃKX‰ëMÜì&7¦ˆV†}гTõT,k)7làUé«ñè 01¶z0—ª­Öã8EÖRòÞé $B£á-”–†jlr©g0’úDE8eJ²œBðïùRŠ÷Rö ËÒ 6‘‹eÍ ¬¶9B£(†Ý}PÑL q*}þ¢¾Q £© -’"Áx_øºJªÅ£Ô'­Û-,D-%’u(Tg&RF•@äØ#*_£ VIÊZ)VP·“äÉB€Lø ±>&ÞPcèÁ\bö–J±¥¹H•äBe28=B!®` ÂGZˆzo½ÞÎJâ[ æ¢ÙCUÿl8ëG¬'h)1T¹%×{”"“ …jô׋; ¡Ð¬(Áb5¹¥¾¾x$TíJñŽB>4Š™ÿ0˜ +±[q[„R¯˜…¬ôšÈ’ªß$k6Od$V‚…DM–r¹1pÔ¶Jú—7X-¶ŒRðÉÀ±tæ’£FØ:¥0—‚sz6—r€”† ÙæúúzúÛ ^mh”,§Â`QáHVÉ{#Tö‚F¥$jb­…¹”€¡Ô«F©Ã’Å1|áí,ôÎe½ )¥½¾*‰ï %!•Ó”ëa4*Eç—B¨À¦TÂà™VªŒªúÊõêY©6Š™ eÆà`n)nŒ³„ÔFYrs=DQZJõ“•úrŽúFqo¯ÀŒ„, £Rªå ´4òÔYZ åg Qâ´b=‘+Iž0(Š#•à5Sêñ4J|Xª8b)E^©Xõ º¡„¤Qh2$SX˜Iµz”R„ßIú¾B’Q\:Ó¨èTZY( +fRPð&+Á9¡6ækúž¡Ì‘ZrD ±_84Ȧ#ìUc@Š T2“ÊÈ(õUôj ‘šë-‘ÊÌ(˜f’TfFTRÄìp¾Ž!J"”.€FI ¯Ê\ʽ6xp¡'²[¼û-Åx­$bí’ ÓJ`a*ÃîA]}”\µ R†ú¡Øîë-ÔR!U}þ~X3¨µ4zC»ˆL [¹B”Ânh¸RBt†ÒKøbÑY€)»ðÀV’?[ð©CÅ,s —šŠ +ZH¢•úmªB£BÂ¥ÂVPý™Ð³J˜Z-Ä(!Þ2»Zl7 ¥q€FIqŠê +5Šõ`5IkPÚ[!!fµx±¨W4´Hã‚zFaQ™ÃYž"’ë™T(3 ƒx€×G\g8²¨osÁ…ÐÆ¿v`ThÚÕÒJöêA£¹ä¢vÚÁ [f +Ih¬¬ =XH¸ÑR!]ü¯Avh’‹ÈÌH1âv5Jµ!åR,ûŸ{‚I؇"õ Vá0ºØÂì‹•vTFØ×ÒÂX>¬¤ð½X㺕œˆbÝ3<7b@Ô¨@ŒŽJJ+ËÊ¥pBZJ.¹~Uz£(}Ý` ¬€«Rû§,¨RÆq£úzjipTb¥BcO–™V³KJ·1äK@õAi뎅Â\¼ØJÊŒ}CÐhÈå0Tn‡ ®MK±ø ÚÒ xRùBµaz (]¥’J…LTK´U®hÑ ¬¢JJ⑾¯6JÌ4SëÍ4œ¾'ž–t(Þ±*͸TµI¥’ +yŒ4.?#²Ra71”>–r­Ä¢¦F¹†² *+ióªÁ§ JÑK‡S_…FÞecÕJIvõ£«6×{Wäz‡œ)¨‰Q*‰Zn˜,eV +éÁô +5ZR•’Ú )Å^ç"*D/¦Ô®VŠ®[QÂaR$S)TƒRc —ÜÁÒY¨Yœc‰©…•'@½³\¼ÄGPéE]­’v¨ y¯B·8áG„ò‚ÕRv›B.v‹Œèå3Ä ]Úx†çSx6(Ya%º»"R«†ÙB.Ll'‘¢Cz| VKÛ7•zù±+µåÖ_l)mØRIµWá Q- ›øÕByèƒÚRªf£’ª<©-’Ø•†€Ï8ôA.—*Þ +vTm9O,{ ÄÕj£úi–†9 Ž¥XµÉˆ8¨uK%ø€¾Jíj©.%o4ÈbA93¹p¶…ZJb0TÍRÖ©Nª¹DºÔj)$j¨ªVK§Õ`†]sâV9+CM5l¨«fá] +«ÅvµôŽj3½cL )q³°Xá®4TZ•ròõ¢(Ö2Ók C•R¡¬0jTö& +Ê„Kûw1F­¤¢ßaVCÜÁPàQr2©Uú<ý3¨Ì¤‹¥z–r•Ø­\Údf¾W«ŒŠx‹Ej0RayQ·)¥ÄRÉíG5KëñNOA©H››•BUÌÿt0ŠTwKÄ¿p>¼\œz±&ã.×Â[8–ˆŠÍJЖÒ|µÂ¸H©à €F¡>›¥¾â„A•ª¤r‹Bt4·BÜßl%ªs-Y5 81Aœ ¥p©•T€UÕÐ(÷[J…IÔ†DZµ„ÛÔs¥Ú<– +±Qa)•U+ŒzPHËû2õ†òbp[ yKb·8oSèÁ\rò«¥X:ô 6œ2 $:±Ž–¹Ú :àøoC¡5ëŸ ëI§f‰;³¡])¦ëp¹”x +>©$´éU±C ÑýdnØ"d8 â/‹û KòO%º|Åvµô¦Â=\Ì\įfRÝ.CE 9Â÷Õbõ% !ÃL-ea¨õ3ùKŒ9¡¥>mØèð/±x¥èÔø§‹Å#QþC™K1c)%«B£ÊèÒ¹ÿæ8¤¿|2i¡Ě¡ò0Ô€‘ŽŸ5“² 2첑*I ;zÿýˆZ©ÄŠX¢õ7³4²B‰•¿xiYbD'• +4—Îç4–\âx†"Ò +Â17úFQÚ•b µQáñqGã³›ÿå+†‡‘*,câhx©¸„ÂJ8ºU-Õ2ÔQùˇ‘nj¨„ŽKÿ?oª–˜¹tâ—Zª&]ø§~—G¦R¸²¹ñ‘¤?Ã5Î G’*Åú\X¡Šˆª_!ž]ý§ž êÒL_’Jÿ'•x–/´›É¥Cq-¥s-%j«?÷-½¡JízjCå.áü ýÝDÝ%8õfxj ýÒЛ]3ÃS›K11½Ù—ª1XÉ¥-¿âN{(–#ùÍ,„JæPËPô´›™ÕRöŠ§ÖšKþ1•¡ÞÒŸÍØ4© Ys +¹…Á4‰éáR|P±Áƒ­ËRÑpÕɰ¨¥´R!½7JÙeïû‹g0èx¹^ ÈEǧ¯Ôl.Ev,¥sŽ`?ª!ËÑBÜ»j!å¼ýç~ wTê³hõvRe8åJZIëRn´ÇÓRª‰ca8YæÏýÔ¬Ê(+Bix)•T]©/½.•T4d`¶°ú¯»Ymt0£Çâb ÒÉs†m‚F_ .´Üf7Ï[ÄÛôÝËÕbã¿ôl°xVRUs!:á+¶Ë•bR£G‡ŒO)ö«":Vúéÿ¿…‹ 1lñ¸KèVÚ¿*V½þÓ3 ¯™Q¸oÀòÛ ç1ãýsR’‹á(\œ?½úßô£vD§¬LgÎ2¥È?ý>}ÑJKÇe\†yÚ:»nZ»yxmøçö™Ú œ}Ý\Mq³)jŸ5ØÌt°5*L<,/<‹üá¿æ¦føÿ³F¿y£¶0Ss3Ó5¦,ofꊾNÙ£‡G¨ÔzE5¢høýÕJ8ÀÐnZý/Mp…Ðjøî_·ê¿¾?¡?~=¥ãr/·/…ßñ«Ú;¡·D/9 =#µbð€ùKÝB½\Ü–¬¡W™Rk`MPáš‹C÷PšI7åM!aY{ôJžÿ?®†¿ß~Xš*ЭÍ-ñ¸)Lñ—ÑNÇ·Ô9ØùKS…¹Je9xµrÀw+IÙ²%kd+ײ5®=lIø¬aÖ™Øh{¬µsé±ÆÆ½Çw«Ùò¥ö2ëU¬Ì^ãÙÃÁ-¾á×WãÛGãÓÇÞ5´·-`²l‘lÁ×ßÉV.§ek‰õ=ÖêLÖjÖ›,·¦dKÙɾ[n+[iCËlyO{· ÞvÎþ=µ¾I4ÞilÜ"{¯²w”­±Y'³a½M\‚{iÜRúÚ;…÷ZeçˆïmmÇ£>dˬD?íev´‡ éÓWÃõ\½Ú _cG{õ Ü#úpñ‘y£uQùcu µ“éøŠñ”WX_Ê+´/ã“8 JÊmˆÄåç’ª&ñ‰5“¹ØŠOtIµ¦|JÍ.ºdç“4ˆXЋE×2ÑÕãYŸèŒgD?.¾h®a›¼åS:®ö2$}\€Ú‹GÒÅ£H„~vü†žöÎ~=iÿøAtTù&¶j<_þ ‘3’ KŽÇ$®x“Põ œ3Œr éä eýÁ¼Žë{´“‰-ënbË{˜ØPnH9™{[{ç«l9Áõr@ó®¥}LlµHNW³²5ÖœlÕw™-íiâÀúöÔ ÷!\И¢ÿ¯¶¥eË–®–Ù:¬ë¡õJèGz¥ Ðze Ь ïmÏø˜ØhÜ{ØØ8Ë4:ïžöºõ&Ökdœ· T0ÜÎ% §õF¶x…l=Gçˆ>̆ü¡tpápÊ7u†ò3±c}LìtÁ=W¢ëV.±‘ÙjF÷çÐ2^&Ž¡½HÞ¿éÞ‡óNÈûÆbCÒ‡9ƃÌMa£‹ÇÐ’iÐû¢g0aËFq±õøÄfS.®r–7 +Éó>¦z‘= +ä‡ö ëOx…õá¢j?Aã;]ÕŸ«šÈ•Ÿ¶b‹*ø¸üñp d‡ÞÞŸö íÇd Õ%7|ʧ5¦K­ÿî 2ïY2^3˜ ȇçŒâ£sÇÀ}˜ ¤!Z¿^¤sPo­«o­Î³'áèÕ“tÙЛñE²¾>~‡d¦h¬.¶r"S:ž NºǢu>„K¨˜ÀÇ7NæÂóG1>±HÏ >´wT?&8sÈ>ᱡåЛ÷K†#ÙMÎGå³w~Áæï›Ç‡UŒa|ãR~±@ι¤úÉ\BÃd6³u:—Þ>ƒ‹(Ã¥c|Rlr ÍSØ´-ŸÑg-™šk_S¹;>§ãÊDZ!y#È€äA<š $”g,z$ωM“Ù´–©|Bõ$&4u½!fåÑŸLÁ'6L¡C2†ÑÞaýذܑ,’_˜7ÒɧëîÓ›Žiš@û&´eÜL–/´F:r¹ÌžDëíeÏø÷Ô0ëÑ\÷Ò¢=ãm²f-#[»Š’Ùiœ{htzR¾Qý ·0´æ]zØju2{¾ëe¢YØ‹rë«u‰èMú¦"×§€~lµ®=ìHvŒ[xÆ;¶?Z:’öHêïÀö„{ ýg‚t@v}â@Æ=¶žï¸þZÞ¯'Ⱦf] çדZÑõN¨áü{:pH:úõb½“ráE£ùÀÜœoÌ@n}D><´.2 íÖ‡pìCûÄ  c +Ç0Ù;?g³6ÏÐ!yCó3€ó‹óÀ¦ åÃsGqÁÙ#(¯à¾¤wh_6´l4ž§˜òqLþ÷ó¹ü£æ|rõd>"w4Æ5²`4è^ÚÒ·Ïä [ðYÛgqHFùôÖ|Lñ8Ð X"ý :ô7èLÆ/qÈ<æŠZÙBúd†KA²T6ŽKk›Îål›Å%·Nåbk' ÝŒä!}8–7¤—ùÐÜ‘\pÆp60a0è9è‹ Í‰ç<:4È“¹ezßé|êÖé°Ö¸´Vôô¬) ¦lJÛgðaR7NáâëШ¨KÚò¾×†¨l@ü &¡v"Ÿ‚ú@z•Mo™Š~NcSZ>eãÊÆ3QÅ£iÿ´Ád@Ê Ê'n凿!¾f"›X7‰.ËÄeC’†Âú¦Ñ8€^eòGÀ³:4— è}Ag€|2¡})ßÞLlÝ'T`ê`+ëå62ëÕö2ÒÙ¯—†B²ø![³Z'Ó0èûH'.½5¼» è´¶{Ñá}A~@7kœ½{n¾½4N¾=WÙhdv”« éÕ‡ôŠïOg…{ktÈ–##œÂ{Ó¾)ƒ`m1a%£Øðª1Œ_2zæÜ¡¼Ÿ_ê 64o$ã8€t ïÃd eƒóGØh8ÙÊ¥+dZÎÇ„õËÂy$Ð:ôÒrH³n&`{ÁNƒ.Á­€ìa?60e(èFÆ;º?åÓŸ ÏÉe4}Æeîžúd‹YäÍ'²7Øøê \bõ$¤+FÐÑýhïð~\XÑ(6®z‚.mË .mÇ ˜7.ºr¼4NáÒ7MCø`‡t—¹i:—»wè&.sÇLÐE|Xæ¤ Pîþ½AÇÂ:lÁxõ¥sQ9£Ù œáLDñh.¼l è=°Í OКÏe¶Í`Ó·Nç“‘,ÅU†àõç¥A‡Â³€ˆEx‰-G…e§Q¿Z„´ná½É ƒØÄMS謽Ÿ³éûf²a¥£I—àÞ4Ò¥°^`M:®Cãå7¤j ‹äÞC}Sn&€AORN½ Þ­'¬'x°Ë\fËtЗœO8Æœoü@.,{¤þ½KÇ` :2Ùò8„ ª'byF2‡¹=ˆ¯ +XˆöO„uTdÕx6¼pØoÀv0‡|té8.Ḉâ1\DÖH>$uš=l0Èè(l‘Ì ]†u,¬¡ØŠñ`Ka؈Œ|rÓ§\r£)ƒ0èoX¯°.™°œzVX7\*ÒUi?å’ê&ÃsÂØ²Qã@ùÄÍS™Œ3ØÄê‰ðŒ 0ŽÈF̤³wϤs÷Ï¦Š¿ŸOåì›IÇÔŽ§c*&®™?AgÂulæÖétâÆILPÞpÐ… k\RóÉ6YvÒ‚ËØ>ƒFº’¯‘ û)o¤SÓ1ecéô­Ÿ1íÓ˜¨Š±€-@ï1þIƒ™ÐÌáX‘̆潉ۂ“k½cû‘.H÷!¼ 8”IBk écÐ \TáÖ/e0 Xé?r}P_ø€.Ac:\·Ù d_Y´ö™õáýñØÁ3ä›×â ñzC]؆Éý~Y}ÅŠ*:>Ÿ¬<¯¤òÍf# +G±~™Cè¨ÚqtÖ‘ÙTíýoèâK +Ú7ˆ=èéõ=ÙÈ’1lÁÞ¹LñÁùlÁÁyxìR[ÑZ­Gy„õ%œ{^g}¾ Aó‚ìZ\tÕ'ºäÍÓ@WÞ¡œ<{2îÈ.^ÊØñ9U~JÎ"²‰d·?ž5’Mß<ÉÙ;æp‹ìÌ7ÈU„Ö0[Ÿ¤xLÐú€ù,ÄlHÈù'fòF`ó˜= Æ’‡îÉ ýëˆl,à~$gXfòÏer^Er +|Ïz6kÛç€!idÿI4_ØæƒíÏ<‹ÊßÿYzd>Yx`Õ†ti“)È(Q„u%þ„厠£sGÒÑz=J‡£ÿ#^HçìùœÊÜ=JjœH…æ#YI‚ß/ }(¶Ï©[§ÒȾ#}@úÄö×z†÷Ѻ`ŽÅ&7N¡ Íaãê'Rhþ<âúÁÀóÑCh¿¬!TtÉh­.µý3Ú?{èTÒÙWt]&ƶt, zq[é•ÐßÁɯ§Æ=¬7èJ° ZÿX>Ó7}fG¹÷°G¶Ü†C?Wßíh_{Ä¿4ú8"Œ¹.°7¶§`?2ͦJ/*ɺ+_2™{gÒA™CÉXç%£è0„ñï…#™ŒÓ©ü#_Ð)íŸR±Õã¨ØŠ±TTÉh*¢t_ÿ |ˆØÆñ„_ö`kXo[ÊáQÂ;uV<’ +ȬõŒèc¯ó3LŠ?âd:¤¿Ý£úà‚òG°ÁE#± [ö‘C|ëË´aì†øLTÁ(mý/©Æ®E˜{EöÇ6ͯ¶þΗÚú®¯ˆ¢£sØÄÆI ŸX¤6›‚\Ær `+Ä &ƒ®Avk(È'àD<ÿèýží˜pW3‘CóÀÆäëí,²/ ²/ ‡1æ@² ÏAÅ–ŒË Ü‚íÂ`ÿÄÖG ÀXÙNZhGédÑú™=D£ç¿ëÖèg&­ùS6É.ú~¶ôÖ©Úº{VšÆ{_ù»?ûM¹‡ôõ÷µÃ„bR7J!YÃvÎ9¸éÒÖŒ Ü“ LCs…8³£OOàŒ²wš#q½­\V뀹¬-XŸ0~lDæЧ4²±´âÈ&‘ëÑ:p‹èC {Lù!¼‡ä“ÊFú£ùDãÌ†äŒ°Õ ®B8õ_àBx6Òx»‰=íxˆ7²éˆ‹ ûƒŸðÌ3ÒY`“îÏfï› ë l3Žä40Íaú`Ðý€Içõ½´îþ½4®½°=ʪõŠè£q îmË¡µ€x¹€°iH/ðMRN!½l¯³zÚ®&ÀÇ€OÁ¸iý{Òžhm¢{O§½bú1î}ÁïƒpÝP6qÜ4G€ÓÒ·M'ëï}£mxø5^_ Çâ +Çi›nMµ½µÖlûÛ2‡†§VTZº¾ê,ƒ‘e£5n½ìh®…Þ…,ÿQA± CòGh]{ƒ‡ñ‹k€ ˆzóá¸ð¡ .]…¸EÅ$]Âþ1ƒ8¿ð€?¹¨Ì‘Àg˜Ð”¡”oüXS˜+ ®0RaSÆ/~†°edÞ(¤Æ@¿‡"Þ™‹pzéh¬k‘ÍBömÆ ÷Hg#[< +­¹itÑ¡ù âÖ°Yôl JN+¨ÖßÑÛÛ›-a²÷Ìb`lüÓ‡¾¦¼† JL…ŒÀcdäpèN°×Äú¨~À-Ht=èJð d!<£úb˜ ¤d˜; ã‚Ø„Å[Mã0這‘ކ뮦ã0&O§ %7$€µ²‰u,Z ð}ø‰ìÂÊå«d0杻ÞÀŸ2ѯŸPô_„÷Ö™hhwz}ÂÐÛ4Ò)àÿаž&3"ýÁÄ×N`’[¦0•cÐZêKºÅö%=cûi¯¶CœÆÖÁQfǸôÐòˆÓ£vÐ}”'’]·è>HÞz_·ç‘ì±=µ,Z› î‘}`jœ‚zá5†t,ø-Aw"¾× Û?lçSsÁ¹#Àx²Õ“£a]•Ü8™.;­¤ËN)ãcΈ8.YyRNn¼†ÚóÎA»ëÕDéuW:Ö1ð8ðEx˜Ð‰uµÍw¾% Ì¡‚3†‚-"\ѽ~¸ä1±Ù”? ²·à{Ò%ÔM, +ú›öÄ|½/€ð@PêPŒû‘L>[Žu(²± ËXÌ×ÓGp õ“Ùì]³Øìí31ÿ¯›Ä%×O >C.ª` ‰ø Z\lñxŒ—3[>#o|CÔ^¶¤Ãr†ƒ?d™O¯ù”ÍÞò9Y~AIlz¼„h}¶X³ùÅ"¢æ’%]tÚéÌ©ÌúôA`k ¯¨¾Z¯˜¾ldåXÀ«dÕ%5]|VAÇT|HzE÷c“7›’ÕW­ˆæŽoÏ2I-“鏯 Tlƒ#džMU^³¢ëï/dï.aêo,Bc¯Ý€íJbíDà¥Tù19ÂV³°]Нý„IÙdŠñ1ú°9¿  ŽÍ£*.ª¬×jdà˹X³J£çëH®`M/'ƒ +ð œñ'ð¬M$÷àçíŸ9„A¼…›èÙp¯vÒŸ.Q}€Ó1ÑÛETŒ¡CJ1¶füó†^¼>aͺ^ “”wò& Z=(Ú+®?˜5Œuë²I8úöÊ¥a_Sö øv±¿3¦d—½{6›µs&<Ða¸Ð”a€õØ¸Ú lpòPÎ?v“Ú0Y[wQ­ÝñÑšØýa­fËÛ…dLñh?[n½ øe ÷è¾€ã`¬`ìñ:Gzãóhà¿å±O|HYÛgaöÿT|§ ¿ å܇__øRÞ@| J ¾q>ÙTÀQ• £CX„_‘žÄ +ñu&sâ-˜sOÁ|Ý/~ ‹t#Ÿ²ù3ºèÀ|àN°®1–Š(ךÀZ C¦r†²Q5z¾š= û‘Î{A…–#<ºçs²èø<&ûàl&¬r åÞþÎDUƒ5¥‹ªŸÞX.´j ƒî¥Yç× |¬Œ/’w¤oÁG¦AÖ ëÕbB|æ&¯Ç  ö"]F§·}†}„ÀݹùSÙy>(wöÀx%ÕO®ŒýåÉCØHÄëþ} ¾A¯ŽÏ¾4&“˜Ìöéˆ;ϼ9Íü ñfìcκ&wçlàôLÞÁ9 ‰š‹jªè‡ùT`é”aâ”gd_ð}‚ð íÚ×1¹q*Qu^¥­»fEeïûœôÏ6 |×ìĽ“¶}Ê$l3;¹$²é\Æ–idí9K²ñJd³)ð? ›ÚéÒ)\í­ÅlÃý%lÆþY€1@hКGzk^×È®Q¥ÈvUÿ¨¢*ΨÀï…ñmTÍX˜3¢òœRÛòtfóÇÅö­O¿ù:`Sàëà3b×£5ï5ðƒô-S|ØŒMi4å’š¦ ü“T90(½!zöפ´}F––SùßÏ!K´ ò}yâJtâæÉtÁ‰ydÃýo_WÒ~…C±Ÿõ“ø:]´›»ï ð¿N‡µ +HÏ×a½Ä#¾ž:Ç×Ð<‚œ8&nšÊ%TMÄ|Ýñudß#c¿szÛ4Ì—¡-8v“³u&“±ù3ìgÿš{¦ùæ2¶ýž-³»SKmy±RÓpÁŠÌÝ9ƒöBc¸;Â9¬O‚ ì øs¤Ã`mÂ3p~I˜¯¦þ6d˜ ËÃ|û“<0ùGæ²9;fqI•YÌ× 0_g2·Î€gÄ||ˆÀ'€çEz˜*><Ÿ¬<­ ‹ŽÎß:ø)1WC¸sõøê c’j'R¹»°.$n|Ioì\F4u-@˜d.è=ày°N±ÏÖ'a Vçf¼‹…cbõDmݵÃÖKè„Í“í´ˆ+Ûhe¤s@/Œï}Ò³!HGEk½oÔ@X;?bZ&&&œ@¯…öæã›§°uw1Kàý(Ÿä`C)wtÿ܈³Ma +öͽJ5ß^LÔ"Žû\Ÿ±YÛfhn­m{»T³õçešš*0ŒYꎺäSÞ?eÈ&`¶è UyAM5ÞX@Õ^ú +t~OdSé²#rĉæ²i¦  ˜¦{K¹¶v06då +,ŸÙ;?‡ µ}vÌ òOÎ¥ÛM ¿´AvÕz™€~å’ZLaÁ&_ƒôŽéGù$ Ô:Gö†Ø톸šïÎ?bŽŸ üÁ‡#ÝÅ!Ýzüó tÉQsì7 +Éx”.Ü?‡Þص\ÓtÞ’Îl4eSj'³yˆGäl›©Cºs&°ÿ _¢ë0ÿc‚+Fш‹6·[«Ãì ¬G° âžÜd§‘¬a=š?Çé€Û{Gáõ„}è 5éôÓèܳõú Ý#ÆŒÑùcذÔa?Àq#Àø'èdÿ`Íb] +ºì?`ÄËuÛ€ßþü_c‰u“¨ò£tÁÉùØá?ð<ØI. s˜Î­Ï ½1o OÁ¤—M¢Ú¬Æö#¼~Ìj;^fkËɰLA<½åÝp +ëÞì`^]ZÓ4x7]PÑ(ñÆ=¦ÄXÙ¢ +>uÇç,Â.t$øH'ŸgJÛTˆU±yÛf“ÕW,Éú«_Q%‡æ³15ŸÀµ\<¡9‡gk«o«‰ÚVdÁá/¨ÔÆIà¯Â1ÀݯCÌ tŸ†Ö7Ò™à›ý ïŠì޹H¿3­WŸ-¢·¼ xˆ‡Ò)´§ooÈ•?p~Ê/k0ö?ÀïˆkÜÂ{Û8¸÷°^F‚ÏÓ„LLxE÷µç|p€Z»$Zó²íàO‚œÀQºä:S²£À‰ÀÇ€ÚûpAÀáø/¦¢jo~Íæ>p3²îêWÚÖ®EÚºëV-ßNߥ-ÂÛkW¬”ÙZÛÈ4ˆ«;N=h¿Þ|J½)èˆ]­µáev«Y,Ÿp/>­gðKº‡bß ÄÎA61¯öOLy†ö üéð£0…à»™ÊæmEµýs.ñ'ˆ•ûê}]|Fë >}ã4ˆËbù†øà´Æ¸Tô,áHgû!ùErÉû¥Áþ3°­û¿ *O)±ß>PŸ[AƒžJß6l=ø7“áy#´®þ½ 7ô3ÄUÙ@$ŸHÎ[¶ÜYIFW_ÊZk.¸'–ðCFç|χ$…9àJ&8%Õ}ê[0tç7ˆB6ŽpÚÐ äF8GT?Ê-°ö/$6Mî¾]XGàÇø7uç4,w~ÙC@0EÇ̵Í/’ÍÏ‘%?˜cHúPbó‹¥°NéÄÁ‚õËa=T:ìØVj}h?ÈáN°öP¤[X-w2Ùí3ÀÿÈ"Èþ ÈøÅ $¶pŽ£¦Ô™Bô0]zÈœÞòÀZ‹x4èmˆ¡è".ÏlžÆ¶ÜüŽßòÐÛüÔ†l}¾\[wË’Li›ë„ÎÞ1C[{a¿“ +²æªUwï[àÏo±j­£l-ëgB%´N¢ŠNÌ?Ÿµu&ŸV÷)â€Sa é’*Í ¸V›?ø¡£ÊPÊÍ…{HÒÉ«'Áz›`¼ 1adçÉšk_ÑU­h„;±Ï gÇLÐ#˜sFUŒåÒvN5?]Jo~eMl|¿üÒlòöϘØú dÛóåÄÆ‡ 1ç F6ø䇡Ä-‘¾†ó""KF/ÿpuà¿tÉ!3ÀàCãÜÃûñ~™çG €Ø'“¶y*YvEIÇmž¨õMH†•Œ ‚‹†|Ús^&+–ÙÈ-Y![¹ÂNfC{ãx(àN²é΢ñÐðòÑàÃr ­ñèƒùDÁa Èù%=CúЈKûsÍ×VP¥g•²mØ÷™? +Çÿ —#¡jðJmÓíoèMOW’m/VPEç€Ìh™u&Œ«oÎ7bçáß—÷îÇÇÖMâŠvÍcJ¾·à‚3‡ƒoÍ­'rOÖäc«'ð ¸Ñ#¼/øÚìµ¼ŒZçÓ‹ +ÍA¾ä\¤¶N]òŠõZ7lÕ)+¦ôŒZ—Øl +ó þwrÎNáÒ§"2WS}ÔŒÚÑeÃlî\óK9ûöº¶öÚ¾ý†=Óts)]yJºj¿oMçîø|—8$"äþ 1;*u‹)•±kUvÒ‚h¼÷-ÓúÒšm{lC´¿[¡ÝܱÎh›1Â3®¯Æ3¢Ö;¥?™yp†¶éþ×d]Ç×âe §ø¬Ó¹‚]óøäâ‰Ø¾#[ÆíœÃ”Wp9»¿À8ð²8·é{˜+²þâ×LÃÍ%tóµ%dóõ…0¿à{&KÏZ@ì†kœÈ¦íš¡­ðQrÎŒÊ88ƒ,8>ë¨Üý³¨â“æTÎö€é06‡8à}$«BW_ûš®¿µ8U9xÄë÷àõXòöL0•'-Ù¦»ßQíOVñûî8ó;»2ÿØddýX2¤x„60wÄ \ü{ÙQN=육@ëe*è5­oðEA¼ÈÆšÁu òÙæéÒ6OÇx&(g8äkõÈ–7\_‘ã|ˆÙ!ý*Æz™„º 4â0?Úê³Jªì{s.s×L.² +û À9GºÔêOùŒ–é|ÞÁùÓ¡Ç4M“°ïü@¡™Ã±=¶òàãØ‡’=­é¡8Æ‘9üàà[áko/c«/£çìÈ~GA~ÇžÙ|ú¦éà³gbêãй#À@G¦§ ¶Í¢¶ß]ܼíª;zm=}`Öª«e¶öœ ç²m¼º”o½»–Ù|ÇZÛxÆt +µ¥sY~QÅ$µNa¢Ñû€Ï=¦|<`ðÿãx,šSÄ©Æ@\T[¸)ÂáÜŽ‡„vó“Ešæ«_’…;fR©-Sôñ‰M“ˆ Âadxù(*ûÄl&ãûÙh­Ä<*oËLðyq)uSÀfbLþÙÊ#*ªò¬%Ø0ðçñ!ˆ$5›žÊ1‡¿ÓM·Ñï.Ãü¤¹sÄL¨âfTæžDé¡9Dí]+*ûèl:®y"èomÕEÕòbäý¬µ'e`+õy SXÈk€ûœÇÖÜXÈnìXAŸ3‡qÙÁ1!oÄ©!– +|i`GbwÝ%œþàǹíj¿íõ"X dá©yTDãX*(e0pMàK8”? ë℆IÚú3–äÆGK@Þ­´^ºZf£áeö,²ïÈÎsbêÀŽ œN­é úÌÃyÅlJéD°]8v¹eóƒì"“wà 6çÐ|bë§ü ˜†%ÄWÐ\B®èÀºpdR†b_¿g\6¤ ñèíÓØ¢£rÐ\,š§´a€k1Í;Üe"È.™ƒýêà7ÑÕ?øŽBóÁÄÕON¾(È÷q /ë8”‹ÎÃfm™l´èZ˜[m[çRÝá«nNgÏGRûi NµÆZ#Û„ùøvR[?£ò÷ÏFœ^N¶}ŒcþQ¥cÁGGù¥Æ1ØÜ3‰šój²©cø+Ž ¥6 >}p>ð MíU5“´Õ”ðM õɈdd"•¶g:“¿op:¥q•ªÉàge Ñ;ùxE»ç’U'•`³ù´öé€ýDÿ*æ´Ù[fPõWp ·–³·–’›îáøøW@‡j›Ÿ.d¶uÚ‘›Ÿ/‡ûƒ/Ö +Õt»»ƒ‚&µÕëvàݾ2v|Žsþ@ïŸE2…¹ä®$TOÄka^ð‰SE‡æ²Éõï”´éSªdßÅ}#Ý 21 ¢ú´R[yÊûM2Ú§A¾ø‘AN˜Üs¨º³_ñÙ;fãœ>ȇÜEX;™»§›^-e¶¼]äøç× Æe™íÓg0gÓšMáþX#^Ö¢ð ^GN ¼;ºj,|pN Â7€u‘~bâë'@Üb~”G¶û0ǤOx?œÛ×4b´À}ˆàÔÁ81ØÞiCOàIöŽ&Zo„¥ÛL™ÂË +ÀLlËDl›ý’ãx<ïÓã° Ñ9dA_éó%R°¿ßx+øR3w}ŽùFþÁ/ ï Ö3è>ˆMãø°à{gÐáñ GϱfÑ¢ÃfÈ&~ŽýéçJ݈d¼rÖ×ÅGlÉsàqzbí¢åîbªý™µ¶¥s±wZ0‚ò‹ÏŒpÌ7LkÇJlZhñ(ü®ð>ˆ€ì‚~ß6ô©¶ùÖð«àwJ@Ï–»{&]ˆä§ô¤®¡ ÌAm³€³A~Yõ£Šl}´TÛöh øB©ÔÍSè”M¦g¾mýu+&ÿ´9öK£µùzÀ·1ÎÍÛ9bÅÚ¦[_õ—¬@7€lÃ~ÈA}Ìa2wâ|Yˆ/@œ|CVœSí¯VjîZ1Áùà /œ+ >Eˆ]Ãzg2÷Ìdc&°Á¹#¸¨²qà+Bk`:ŽÅ–à}#8ö^1‰À…¹ì­³°íÇü£n"þûú”´wþàu¯Ä‹~4£·>§Þůø–ýz‚ÏX»!n€Ö#²riü’щ͓¨â3dÕu5¬­cH/ÄëMŽ\ ¹¹€;p¼,¦p W3òRè¢Sæú1¨6?3ä å›G–ßPµ7±˜CºäòDSš>üðB=ö}²Y‡¾€˜¢Þ°y›½u&—sh.]vN…1+à°ÈÒ±øƒóä|qø…‘½Äz!±q2È ]|JNÖœ·ÂþK$÷h\g²yûç = &›ï-"®|E–µÀ1ï¼MÓ±ObBwŸqZóŒŸ=#š¯KVŸT⸕_ú>¢x ÄùÙÂ}óÁŸF•œ’5—Ô`û‰šs*²úœš*;hz™¨EzÛ:d³ÚÍÞ1 cZd³!ç“ÉÙ3 Ûþ-ϿӴv, 2¶| +ׂÿPÓØõ5ĤȢsæÀ_´u·­˜-Ö’[^}G4<üË}ááydÕÑpã+d³T ‡!ŽŠø±|ÞlÚÖi ÀæpÙû¿ KÏÇ>ЗÐÛÚõ7¾$³¶L…¼;ˆÇÞzc{‡86Ñòb1±ñÕBªäªÆô#ä°R%ädxÅ(*ºa¾ý3rã“Ålkç¢áöWØßûº€ƒ@Ìð0ø ’7›BòL€÷ª$î˜ÊÅoš9dwG¶}ÎI\páˆãfs$ï0¥SvN¥òÎÒV¢ûf¬£ )NÄ6Ž#“¶MÑ–_“k·ÿô¹óíZ‡í¿.ÓüÇZâ‡ß‰3ב‡ÞÑäÖŸViÛ~ZJly¿ŒÞýÒ;ÖéÁÿp?€û±cuä9Gµ¾ZAW_úÊ1£qºÎ7z ø%pî*32w’Iô)8nF7w,Ñm½O8·ß`×µÜÐ:o¼fÏÖ\\2ȇŽÒÅÕã1^I4Üùü3láI9äew¾F²¬Æœa{ºíÙjªýõ*ªåí2ªéÉbˆ›À‡¬¿ñ5Ös-] ÈÖçË4;¿ÕV_Ã~iºðûù ?‰-O—n¡»"^±”m»¿äŒËÞ5ûRq¾èÞY Çà'¾c:Yrl>YyE¥m}¶˜hé\LnéüŽmï´a¶<\MnìZ¬mzð <#øoàÙµõ·¾9¹&6>]¹#äÖ×ÖÔ®.{æÀC†Ú÷LëÐòæ[MÝã/µí¿/§Ž¿rd/> ¢Ï?÷åŽwyPSÌ.ôA×ò{ï:Ò{:5ìžNô½ÇZö`‡}àE_5'Š/™i«ZÚ·ÿ¼€<ô‚æß]ϺãX†ßvWKny½RÓöxp%0{Róªò¢Ws)sà1Cïy¥¡jn}‰óa2ÚfPMkÊ/˜Yƒw“M] ÷ßruÜ{Çlýu9YtÞŒM;8“Í91ð6UŽie}?ì1öwºEö>H—\T Å8¤òª%›}t.ä¿èZîÛ²-¯V‚ŠÊØ?ñ§qdbÛ$2yëmÚ¡©¶µ÷Ím÷w/Óÿ‡†8ý¯=ÿ_ÎäÙßÜ5WþgÃnòñ/1Ì«g™Ô£ŸâÈ›¯èso}`ìt7®%s7ïÆ1'߸“Gß³äñwwòîØ=_Ç}w\t­wíùºÛËøÆûßQÍK‘îù +æ•(:6‡j|¼ÛÜeç´ù>Á6>YÎæ›\Ñ)¹~*[8Þ)(}„cÊ–éL)ÄŽO)›!yûât`©Om¨ïìèƒOhúà#†>þt{ì¾sê‰;»ý)A´½_N4<øJÓúb!½ã©=½ï E¡9Ôî{o£ÝûëZjçG;bï{;zïS’Ü÷Ò>òˆe÷wqü¡»®N§.±‡o9Q›ž.×4ßûZ»éå"ôY2Gýhr 2Fn~±œi}l ñZ¦ý)ÈæZÝÖ»„nçM†j½»œØØ¹tÝ‚ô_cçˆYh[ž-Ðny½ØaÛ‡¥äÖ·+É/×h÷¼_Mìú¸†ØóцúþŽ>þéW4qò#OÿðÚ“=ôb»½ãÞ'sèŽ;ܵŽ>üˆ#÷½°³Ã_×hþºV{ôg’>óÑCsþ´'e˜kC¸k·bœ~¸êtìÒ~ï-µµk Õöz%<]zF¶Û„ˆSyæà+žÞøn9tÁºí—èÆ'Kì×ùö´s é¥õϱPdzç#t'nø³û^92ßè¸]OY¾ý1Áo}@2-]ÖlÛ«µô–WÖtÎ÷_PQ•cè¬}Ÿ“å—UàÿA÷T~a3Ñ:/¾¬d7=µf[ž­$7¾ZâÐþË"MÝ;+ûM¿}cßþ¶ç»µöÝë5¯ÿ;œ{w/Ÿy÷"K{÷?¢ë—êíÇòíoIü‡Ë…®¯÷—{?ÙYͽ¿_À¾z–«{þ ÐéÅõrÏ'§êùû·ÒÐ8rä¿®cμòæ.?ˆÒ~Èî}ÄëöÜur>tÝwÝé3ÎG.pûïè´m¿,Ó4<þ’ÙþÂAwè®'½ë–¨¹cþ?ð3mÖ"=d«Û|Gã¼û–›ãÎ;:à›dËÓe4ÈBëóäžGöÜÁN'öÔ=oþÔC_ÍÞ¿¯ÖùEC{§cÎ? `μô¦Ž¿Ñ‘GÞÒ̉§.ôÙ'ÞÔ™ŸÜÈóï<¨«¯¨+oü© ?{çþîFüø›£æô/ qî'gêúKþɵ,þé•löÖõêÄ3grïk Ùþa¥¶éÉ7ÚÖŸ–Âz ö?'éÃO9îP§3½ÿ!Mµ?^¥Ýò| ÓöØFwä¦È·îØõõÌžG¹û¥¹ýùfÏ’;ÐáÌâLìüÕZ»÷ãz×-qð©ƒöÈK‚8õVGžùÕ¾ôÊŸ¾þ<ˆºòÒºù,˜ºõ<8ùž£½¤À6'ß°Äþgí‘·fCžít¥< +a^t¦;¾»RÊ}xX éêö·¿ÛíN<ü9”zð<Šúñ±í§•d ²¡ÑU〗ALër„KÁ>€¿Ê¾äÎ\ûíÿ»„9øœçÏßsÿþT_wo9UxdŽÃ®ßWhwÿ¶JsúgJ{ô=éÐþ·Ešê7*‡†ß¾d›>¬Ôµ=Ò:ï»í­;1ÒñÚŤuWΧ8¹ͼëÃïîdÙö§v«l~³x‰ì½éÝJ„ U\ÌæIšÚ»jÍ¡?lµ—s!ßüœÀýt%Ÿûp5ŸùéYýÇËl槇9ô¯o3©÷oS¹÷× +½·—ûuµT¦ßȯ-½žQíù|W%ñþ¿¹·…ÏÔ8½ºRν~”Ï?íÌ%ï=CãéOýøÁ>ýÁMÓöûbmËû…ü©§s×ãuß?òf~xíAø@PÇ^rܕާG— ¸k]1Ì]¾ìåÇAüÅ[‘üÕÛqN·Ïf°WºBøÓ÷üÙ ÷ü¹3ôéçîä/Öq§ y¼éËŸ½À»€tž£]ëË/rL·¯¹ka¿çÿ–Ùë¶#.¾õ`Ÿ $O¿ÒQ;ÞØhK.˜‘E?Ì'*íWA{â¡»ã顺S×ýuoºñ{:êÜvqÜ{Û™:ò„£>Ói¿¤éÓÜÙ³ý¸S÷7pG{±ß?uÑîý}öð{{ +Ù_úôcwîæÍöÞD]ç­,ç—˼Ÿímð}¼½ÁóÅZ··§«Ù÷w²¹G7ÓÙkw#ÈÞ:ÑWÐ]w^](s}sªjý“]õþ]-µ!jCïÕVv4Õ¬Ü^éøþLõáuªæî>ö‡ÿ¾ü?\PñH6aË¢ùÙrë{kzó;kÐm`»4‰'¦Ø6TQç>x:=½PäòäL¹ó½s¹nÏW¹>ÿ¡Š¹Ý­¹ø»óÚÝ‹ÒNLµwî³ÆÚQF’î&lüÎO¹ƒ÷]\žÿPéûdwcHǦM^78>¸œ vÞÝE°[;ìØƒhœ~¼êtÿLŽî‡›AôöN[~÷#ô ý´#ÙçI{5’¹êú+i•9Ws«@Ý^í«püp¶„ÿé|‘ËëÃå1÷˱L¶_M¬Øw5¡bÓ•”Jÿ®æ*É­Û˃^OvUóïnrïºò\_œ®¤¾´?Ô½šhÿ}…¦áåWTêÑäæ_¾s:v7˜?úÜK»å¿—j ¯Ì³/»=Osâ7J÷øvŽûóµžOÖ9¾¹]Êü]tQØ•jµ +ÛÜýxfÂÛi·Ü×ðMO¬éú›ßU—TÄÖ+¸Ó}o^Kæ¯ÝŒg޾vÖ´ým±¦ìò|máù¹öåWæk}Ðò÷®¥x>;^ïñòDîùµ|öÙÝtÇ×ÊB;Òîå7¦ÞËohºT“~/#ÿèr&yÿI°ó»KåI‹›3dU•>L®Úr;¡¼ýn\éΛñeè}+2oäTæ]ɩȻ™Uþ ºjÝëÃeôëשäÕw~Ô‰÷Îüñ‡>üé‡þüù;aÜñ‡^ô¾.’ÞÑeÇ~ìÈqøÐIÿú"Ó·k[]`׿&ÿ®­¾]»šøçwrÈË?¯·¿ú?¼æî?¼´·þ×ÛæB·íšSÝËmZ^*m7ü’½ô8tÝëË•®¯NUR^ÇP—_l ®> @øÙ‹kí´¥¶=[͸«c.ÝtzøcŽ×“=µ®OVx?9ÐÒÙ²)º£¼&ýNnEìƒÂ²‚[ée[n$–ï¹[væ^DñµŽ°Â‹·£JÎÝŒ.¹z7¢èÖˆ¢kèÿ7nE–\½SzèZ\Ù–kIײkü¶T;¾û¡ˆ}7×ååÑríýÿp8ÚmOø?jÏoÔá7,{äù:fëG[ªù×eÜÖ$µÿ7’¹ö<”ÓYÀ¼x”N¿x–Ê¿»WÌýt£˜|ÿ:™ùùiŽîÝÕ§7·Ê©G/bNü—ƒöø3-{ö®®óJ&ÿîv‘Ó» åÉw ›òdm îjÛìúâD%ÿæb¶Û«Õž/÷Öz¼ÜUù¨¬ºèNjå¾Û±åïE–œ{QüCGDñyôóÌýÈâ3÷"‹ßŽ);ˆÖÝÆ[I•›®'U6ÝH®L¿•W­ûél¡Íµnƶäê,‡­Ý‹˜ýïYîлuüþ—.Üù®@§«—Sœ^Ìw~z¹Œ½Ð i¿DÛúv ×Þ©áŽý‹ ÷^ZÞÍÜ wÊ7:?¾XΜy¼^»ã¿¬¨5[YN}Ã2É!MÍ>w5:½¹ˆtá™*§·—˸_¹¾:XÕYÙP/±¦ú^Jƒÿ£¶&þÝ•"úùý$¯ç{ëR:óëSäÖÔÞK,ßy;¶>{oÅ–}æéôõ˜òS—jŽ_ޝÜ{5¾¼æZj…÷ÓmìÇGyÌÓÎtÝÛÌÙ'¾ÜÕ{앇Ü;1°6Ê/g ¹Î­Ì¹‘S•r£¸&ñvqMãåÔê¼¹ ä‹×‰v?v;Øwt{{"ýTp=»®æbzÕ¦‹©•±÷+|56ßÌjôFÏF¼ÿ°æB÷›»×hº~€¾};öl,º¿-ÿNÁ6ÿÇ»ZÝ_¬¢Þˆbn\N¹W¼æ >§oE—í¼W¶éFbÙ¾»1eF”l|Wåñjo5ñÇ«$Û×Ý^voÿÏ×þ÷î0íï?%8½;Zw»¬&ïVVuÝÕ”Š-S+bnUT>ÍÒ¾þ[$õæU2ûÛíç»+]Þ)·{Ú½Þ®ëƒùìN´Çóý5Iʶ:Þ?“aóC÷ªµm¿)׿²6²q„M\㨵Mæv7þÎo^Ä­±µ¦¸#¥¦öNr¥ûË]åvë^ó¢ÛqõënnÕ»n~ÕÛnÆú]7µæC·‹Ý¯Ývÿè¡»Fÿ~;MûË/ñkus«+:?·=н‚¸ðWîrW”ÓÛÙÞö5ÄÝ©h®¸‘Ù°åzrMTGÍFþÕ­<æAG"}ÿi4{ÿVÿæaaàÃÖÆ„Ûe Q·jêwžK©i¯ íª©©~\“~?·žù©+‡xùs ñü·hû{Ý.k/v¯]µÿƒÕêâšq« +·M\y¹{‘ý‹ß7°Ü*ȼ™[Ýr9¹Ù½ò“ËÓ¯å•ùv¶–¹?ßQF½{ŸJ?xEýð“²ãtÇóx¯§{ëRï4ì;ŸX~úJlÙÁóI•{.$¡ï&•»P¾éRj•Û dcß^,ûšs3·æØ¥øò³—cKڑκz+²èCgXÁGô¹ˆt]êýÜjÍß?&¬|Ômo÷{wˆÇ‹]•›ÆW_ì />ú0ºüàÃèŠÂÎô&ö÷ëùìï·òÀ:8_îðîo¡«Nt/\…§Ï¥NÁ&ß8p2ËÅÖ2Å—ßÊTV‹eªE23Å7²¹ª…23•l6®Ç²˜£Ã—µýϬå÷»—¿ASôûì~ŸÈæ2]¶x1+[ÉجÐ%÷üòkR6cøDÙÙxtÕxÙàžcdÃL>‘ëe*›Øo†Ìtä<ÙÔ‰ +Ù¬Y dJ[Ù⬛£¿;ÙýÕšÛÝŒæÅ‡º]™ ?û;=¿TÞ~!µúÜ…¸Ò —ãJÏ^‹.9v)®¬ñFrUÕµôšÌ[y É·Šê/¤WïÆsš\^{)£ºôJfÕº7ÇʵÏÿ'ß¾IŠé(©¾Û^ôàQX!ZCuÚ¼M¶~Ømóݶ?æ}·c„udë°5ñûƬʿdj½í³•ÿWi}¸ûKëêû3Ú{ɦ™Î—M÷™ÌtÌ4ô£eƒeeƒdýeÐg(úßXÙ(™iÏѲi#MeóÕv²oJz. ?1hQ݇IË;»WØþÒ½ÁþîHÇw'‹Ø7/s™Ž)lç«tîÕÓ<¯g»ª3nç×Ö]H¯h9›úÿ±÷žaQ%ëÞw• JDDQ 0¢(&r¦»éî;A$ŠH’œQ$(A‚Š`v £Ž9svÆqÆ4y‡ÙûœõÔ]8çìÞóìs]ÏûÍÅÕ„†nV­ªºC­ºÿ¿†=Wа]lÜu¹¤éÄ܆ 7³ëvÞ(lÄö¸áô•¼† —óê.ßÌ©ëº]ØÔ8XÚúüyJ•ð&±æçWz·¶2öugè/BŒûa¡[ñÓåÊ yNnhÚT4ËÞy„¬Ñô)é3÷-Úeæ½^kÊ4 +¡áhÒAÚäC·K h ÍO?kãg q«õñ_é⟴Ès†øcüˆéhî|ZJWhºfòï®5œ­lh9]ÑØp©¼¡ùRycóõ²Æ–Ëšz.—4î¼TÜxøbaã™Kù Ç.åן8_PÏ̓7òŽ\Ëk¼:U·ñne÷Ëërþ§ÇåÔŸ~,H}Ѽõüsìƒ_¦Ö4?Ëkö~#ˆ–­Fv–vxšàó‡s†ÏJ“´úÆ?àL5пðûÿ|h’ÖÀ_†iã¯FHWÓÿ41ž…f/ Gî¥÷Ì¥°ßø(äb¡|÷¼2æÅž–Ý‹/_Ê«Ûuµ¨q÷õÂFlcêÎ^Ë©-¬n ùþdMÉíÍ­06¿¼’[èz^C˒ƘW½üŸ^Tryº)÷éæÖ{߬Û\÷<¯^ü!νé¸Ëý‘áh܆áäüuñÂ÷#p›Ìðˆ3ÁßÁ÷ÿ¥5ÿùÐ ­ûÇvkàè;}ü~£ñ\œ¹"9oz9ÚcŸ0CôAXŽþ¾TýõÝê°§ë£_ô7¥=hiIØ´õüyËâ1 }ØreCôãÑóÅMç.ç‘~[zâR~㓹ͯog×+¸Qß/ÒÿµÀIÞ ±²ß„ Ÿ›‚§“(ãú}@5?]ø¬óéš™›‚&M¡ÙžihEÁ½‘ooúÇÛ™ënulÞvnSÓÁ Åͧ.å7¼X¸õäµ¼Ö#×óšÏ^*h¾r®°ùüÅ‚Æ-×Ë +k¶n(o®¾³¡i× Î»îä4ìÈ«ï(n’þ"¬ó5¿Ϧ“— š¶]+mòû(¨æ­T¡Ñ#LÉÜúïìÂÿöø£ÿÝmÒûÔ§ºøc8iÿHü}¢‰š8Mަ;§¢Êvå»뀟„Ȉ'û7tœ)o:p¶¤ùì…–«— +¶Ý¾TØ9p#¯ãôå‚–c—ó;/—4äÜ©o„Gá`u#öï Íw‹Âߨâ; øÍœ6ÿÝŽ!k¨EÎYëúTãÓïôño ð‡±Æ4ZËÔ0ÇýdŠm’öñ©Î4R{22Ò²EÆz³Ðso4ce>rZuAÇå’0‡{{)Ç- Ø€OhÌ¿SÓ¬üa 2èÃÙêØg;°i<…me'v#`k &߉mëåÙ ÏŸ¥ÕïÃ9gúóú¦€ß„Ïîo¦.õU¡1ZFÿ—¾AÿÅVÂÏø ˜§#°U‚6Y Ÿ‚Æ-@cÍœ¥ébd1Ú™›,Df#æ"³as‰ÁldßëÏCæ†øïÌ]ÐäùáÈ1h·–{¿`'~-DG>=Pwog Äf‡Ï”4nþïå•¢žç—Jv|}½ ëíõâßß.Øñþn~ÏÛ¹ÏïfoÈm‡¼Ëõްh¤Öÿûø‡„öAœýe¡cƒŒµ-ðO#q/‚çÇþSÓ +Û’ h´¶26 ™êÙ#3ÃùhÌ8w4ÑÇ~žyh>·]c!ߥ¹´ò;〟…0þ» ¹-ç65~ñUYëõ‹-·/ç·Ü¹R°íέܖë—óZ®\Éo9|=¿ñ¶§ç®ç6ÁóM7KÜ^ .3æ¸ü¯Ûò‡Ý¡O,û°Oß'vDïÓ÷£p?ZèLBcq?Y™: qæÈrÜ +d5ÅYÛJ¥­ YN– +4z¢7Eö~5hi΋ÎW…9ÊoÎäÖ©n$qË•'.ç7àØ¬iëâg6CîqðŽ_p,vófNãÃ+yW®å6â66øÿ*„.‰Ù¬i»À ûÖQÿt»ÀN'–A›|?d‡æ >‰FF¢Ñšc¥¾²4žƒ¬Æ¬@SìUhÚâx4É!?bÕ ²šD£1S)4f‚¶ð@cÇz“ßÍ‘6£e¹Gx|#x‰Þ aO—%ÞéªÚöUEã­ÓÅ­/m»q©pöñ-®å4|s+wë‡Áì­ïd¶|x˜ÝþàVî6ˆI}T¶ ÿW}ç?’Äh#?EC>æÞÐïFàß#s]Kde0YÎ@&³±mžŽÌíñü[‚,M–! ÓeÈÌtiÛ8»`4ÎV‰&͉CÓ}Ë‘Cøa­%›ß;ì\o‹D?QQúÊ!=}¶¸åþ¥‚­q?ÝÈn|5Ûsîë‡9ݯîåv¾zœµýê@.Î%ÊkÝ +˧Ìôù_Í¡¶"ÒàÏL4-‘‰Îð¼2ÅsÎLk~n2Â}8?L‡Ù¢Ñ†³pÛæ#sËEx|ºà1)Bcç#ëE‰h¢kš"ª@Ó¹64î@óÂNi.ÛòçÑ+„yÌÛi©—·o)¾RW·éJUýM{ÝÃm;~3·éöq7rš^ äl}s'§åÕ`vËÅ+yÍÉ÷Ûê=® +K-GŽý§ûíùö<•™–²ÐˆÛ4G3üü챆~§9YèÙa{ˆûÎ`¶›ÈÊ|š0‰B¶ bÐÔéh²gšâ–&¬Ì@ÖëÑxLd'­Gsƒvh.)9Òù¤0]ü^XÅ¿¹’»öÆöª¢‹õµ_ߨ~ïtÉöGJz.^Ìo‚œaóíò–uOÛZ.ã<áñí,²©øá\™óAaŠ¥åœÚ—k“X bDì½´±/3°Á¶ßYhOÂv~‘£ÉØ4Åfšæ¸}Ñ[dj0ÛFü5™›aûoë‹lìCÍìH4q^,š¼<MÕ£‰¾•È>ò€¦céCƒ„InOgÇ©¾>S’p¿{sÍùªÆgŠÏ4=Æm»u1¯îÔ­ìúoîeÔüø0³íýóÌí·ïg·wÜ*ªüý»{EúÿµÏ†bàÿù[2 ëáÞ2ÀsÍ ÷¡%y˜iG#ç¾²°vÃcÐÅãpü|?—Å6E„¬&û"‹±.Èb¢'²˜Œ&8á9X…æÇÒZ¸åɧ>Árå 0ßePp”üò·ØÈ§}˯UÔµ]*k¶sëyKã1Úüü^ζodw¼}”½ý§GYßÝÍë|=˜kI >/±­Íâªß´þÁ>Ù#Ü}NG6ã]ÐDÜgd9Á ÛŠ•È| ¶c±ÍÄó ϵq–ËÕØÈÚ›$FÖÓ4i~4²ó(@³åhΪcšó oŸWó\ßé„0~Y÷ïc]/ ó½ÞbùOÏ3ƒ^/-¹PW·ùluË%=×.ç5Ÿ¼PØ$ø-T|Zð <‚ó‹Ë¿…r_¿, |-ÄyÞV8o¸fj1bÒÿØ®!ߦG¢C°’ú$Ê=ã~29 Ya^sF{yÍ»ÑË÷V~%ØA<¹ò„0mÙö¿[:5¼5]¼åñ’üÛ†KÒN _¾éޱË1aºûCÁ%ðG!Iò£Àÿ|­4äÝ—›“ž¶5@>99Äš' w½œßtúzNýÀ­¬ºg7³? æu<¸™ÛJýü,Û-ï¦)ذïÿÌØÔûäËa|Bdl1Ì +3ž&ÍôCö^k¦EÖ¢YÙÇ´í˯êÎßtSoAñÕásÒNjÏÉ9«³°ô¶þÂŠç† Ë.̹>|QúÅaNŃ#\Oö®…e+÷ ¶ÎÕÏÍÝú…i^/¿Ç‚Üÿ• ð&ð²BZêý­õ³@»vãØ9ïníV1#A>®ô4T{ŸñôÑŸåââcWò©¶Ó–ÿãR“ôØõÑ8ãŒÌ'x ; šæºͦJÑ,ª ÍQÔ 1{´«-ë¬WžÅýsWXèzWXöoiå#ãEѽZsÈAݨ±$nÎòü£å/L]¶þ2Îý„0Ç'Þ~‚¥¿Lá~¾Vä÷À{WÞ²öo|f'ÙrÍŽ>ü7 ë»dÅé_WÑþ&’÷üÝ…ëÿ×@ÅñßB¸S?…ðGߪÔ'îG+/½H‚ýN¢kB ³²RËLëö{°3ÍdøDëÏGãm¤hâÌ`d닦zf {i šå½Í^f:ÐhÚ,dgç‰f-âÑ"ªRcqò‰aKÖ_Ówíþ—Iž÷7ßGB`À[!„úù·Üȯ÷Õ*~º^&ûõ×tùO¿gú½8ïÞ?ÏòÝþf–ß^Á!`@ˆo ŒtP‘?ùÀ=}˜Í}s¿ üíWÍaoÎ5)~øº’yø!]zSPÉïþ¾šûöeqѽ-íƒë·V7»u|œ8ÉfÑ?1.5!kñžg¸¦“‘•Õ"4eA šï‡©b´„ÎFKcÛµ—Ô]7^yE˜áù» •×*~<•Oýy03ð_Y+ÿëý éßž¥‹þ*¬öüM{ý$Hý~Tþ¿áìoŠÞÁÞU—ÆùÅÕëyEVëú_|e·…pQÿßKòöŒ‘™×ïóc^ímz}°%ùi÷ö˜¯¶‹$ˆ ÑakÏÌSö?¦ÙSo•’îz®k7˜<})ÉÓþ»Ã÷Ûx G4Õ^†ãÜ È1î¼ÎâM_9u +xì-öþI ýÿ,„ûÿ.Døþ&(]Ÿ N.·…ß Ve<¬oè¿Wß2XØ¿º^ññ\!¬¡øâ±çyNpô:.8xß<ÅÏ„éaüÃß²”¿Þ¯æ~þfCÀqÁY£é²`1òõô@PG û©î§ÎLÝùyŠÌã”ñµÆ|Þ1[f÷_ýøc‚èÞŸ¼˜¢ýe™½~‘UÃfÍ— «“ÿËZпM-gák¤š¼GAšËª_™‚ýsÿ‰Ì—PÉoBœäOB¢èG!Âï ¶Jt[ üo +’ÇB˜üƒø­+¾-p¢3‚·¤á•½¤øµ¸ë;Ùà_#˜wßçË~Ò¥¯„ÿþ¿-’”µ‘n{¸îûÉ›ùò#'ÛzkUsfÕ~vsøA âØu¥êöµ¬Ç—*ù“߆pÝÙºAG¶êÊöØ36äÙ¹JÕw·«Ä;o)ýß¶KÛÅ‘ZãШáÖÈÄh"Σ¢‰3üМ€ ä»_ÛqÃÃeûÿe¼Û]a)žObïsÂrï’3Þq]úþùG,üÏ žì³;™1ßìmS¼´™ýð´HþîízÑeA,ÞÔh!NX¥-^»NWœWbäßtÌÖÿšàË¿yZÂ=}‘-);4ÞGª@¢ÐtmÉž¿¯ öüî#O¬6’‡fê°uó‡¿U(Ï?‹ãξ +ã®=UÞH Üýa…|ϯTïk7zçüÉoBé‹?‡úœÝ×î6˜8mɳÿñ0Á>cÖ9ZÂmÒpÉ9;Òý®àì÷ƒ üIHò/a{­”`¿Kÿük!ýëÇ"l|Ö÷/vöB‹–ÌC¢ÄdÀ#o½O¯ç­yÑÛ•þ¬e{øÛcMô +ăï»ë‡Ù~嬾œÅ瑨ëõ|IÝ©©’/÷¦¿úš¥¾x(?ø*u«©,(IË/PŽ(u¬ÑIýýüNk¦íÉRvϯ"õ…§©êËRe—Ê6¦·šø'5. HB-ˆÖ"ëéŸÆ¥¥…ýÚ˜hš£-VWj87}7ÖåŒ0Ëí±°Â÷Ï‚Zþû7Yôß^qy¼)äÃÙz¸÷ǽQÌ<|—J_ý5‚:ÿ%{íc¼òáÓ"ÕÀó<îØ%µ¾ÃÜÏÅù8-A¬ŒE°ÿ]Ú6à 9ù¯^’¶ës¤i›Œ Z¾õâ|j÷{Oæð;™|ëý…òÜÖ1\ÉöñÊMÝS¹–eA½õ•[Á×JÔgÆóG¿Vòý/¥Tï·îTË­…²Š}“ü’ á~›™ö²vðô¥ù¨éhü 74Ë/-KÜ?Ìý a¦Ï÷ƒóËU°FçûAàüß¼äpàïNþ9:>þÁÈÛM†¥Áˆ£‚5Cc2 à +:§òÍ·–s•ÇíEþRä8q,ršl…–ÁcúXäéꈨ–‹ŠóV3§^s²æKóè䊑dÿyÿ;²':&G K×-Y~ûk¾ó'[{v>ÓõÆM¹ïÇÞ{³NqíYµë/îTíy{Ùá_|éË#˜ÇoSÄß +ឃ‚ËÊ·L–Dõh-^µ[{ÙªÝ:.1ýÃ<ÓŽô(8iê½û{æã‡BØ‹“w¿võö—¬€#ÂJÉÖ7s%=?/<û~_˜Új¼l™3šc3Í·²Bro/¿F?r}Îèðì²±P'xøgæê«håà`¶ìË?Ie‡ÿä+Û÷gyå‘©òì +ªf×TúàS1Ù£yæû°ÀƒóUœ›J¯ï#ËÑ•…¥èÈ£“tHÝËî7âà“wÖ]|”JùÀJ›nΕVž˜"îþ¸HÔþn®oþ1sWežæ\g5šŠ}óØ™+Ñ$—äZ«á²ù…ç!ÁÞë‚°Âë"~Áv¿ëû©žEûM½’õE;Í·ôM ¬ì²–Ô˜,î~è îûÞIV}v:•Ù5†NÙjÊetŒaröX3™{Ç1ñ#¼Ý|DzHê‹ý•T‚”ªM¹:D“)lµ’m½üý¯ ~¢s‚_à Ÿüü7Ÿ² HÈÓ…%j†&hùúx¡%3& WGGä+!:þœq‘Ï)a™göIcÄÝú^©GGz&ï6ô9",”þ ¤Á^>é]!L”ßkîí„<œp›<Û’•ÈuÉR$OÌÔc÷¼ñýO$tÏ3gùš<}‰L &]JóH=jÑØ|‚öÝP’:Ü¢.ÐÀïx¶æU¹g +¼ÑˆÊØlÂTõ'ª®'"¨=àúŸŠU_ÝŽR{ªR}ÊízïË´½Z.ïøzÛýÑö|*®?L–ø‹§´û•µåä yÝ—3eGõ¼ü7*à.Ž©¾BE¯…Üo>„›Oö+ÔY¹RŒ¼$*$R¥iISGyø)ÐrG7äç­B^Î>Èy–òZî>Ä¢á4=½DÈe™+òñ!™˜F +u˜VHR¦Qpa×äâ¾éP¤*¬5Ž\ß+ÿCwW)£”õýä&Ïi6§‹wŽ—÷üà,o¸1Jm6•%TÊwþÍYuñy2{è-Cj]Öo³€zfjãÞITá¶±tAç8yù![Iç#É¡ßÝ÷ü²2°u`®xLJE¢¾_–ˆŽâXöš ü»*ðÚßYÿ#]*.Ùi)Îk2•ìøu }ì=Øòr$k«©|ý¶ÑòÔc ¡á¼h rœb‡–Ï]„üñ¼££s‡C-hé©RËMA‹ª;3‡îã£øâ‚?òç=gøýOeÌîw>TÝq{&¿ÍŠË¨ÍåtZ1YmØÞ¶YRz&À<”îyïF]z¬¸ò :þ“TºçW7Yï+e}?»2Ç¿g¸k/×ð_ÆÊöüæ*OÞdĬ+1¢òwŒ“¶?vdÎ|¯V=¿WýíñmÜ· +$g±è+ÁCÔônV@î1 WQ4òeÖhŠÒ:F¼dU§¦Š”k4¥a™:òà4m ½ZÓÅÉÏ¿9h%ŽGè”M£ä½ßºÀ¼qA ™ºÅlh¢¶:¥ÒLYýÕ¾{Лîp–wß[Áîxá ê÷T²þïÜè²Ý6Lnó¶¸gÔzA}<·q‡-èó„]9“ÿ¤¯mÍÓ]¡7.*v½±•§g1ÏL§v~paN¼æe]/—É÷ýäEú.€®:4ή1£òZÆH³;FKÊN×^Ÿ&Nßeê£NÓô¤â5ü”™Zb:EÓ_®!Oi2‘®­1rY)B“†™¢Ñ8ošc2¹-uGnNËP€Ÿ˜è‹åÁ”*F‹pqÖl¥ˆˆÕ¡q[ÿ¢Ž/5Ý-UR¿&Ûj†¹Þûþªcƒaʃ/ÔTí…ÙòÌsªáêö'ÀC¿xþÍ=°ÿ粊“¤Åû¬eYm£å ¥Ð/~À“(Ôæã±nN—›J­«0‚qO•œu¥²Uëuýpæ+V!¹"U‹ÉïG·>vbÛž;ƒn6è=¡CÏhùÞ÷žPÛÅ´ .¥v>u¡zŸ»A½8m +“ß1ŽMÛbJ§UÓëÌäØÏïþà,븿8pÏ{gù‘÷êü5súŠ>÷6˜»øuuì½LzàwOúÔ{…tïŸ]©¸ƒ.DC¼F ê·èÝ?ù¨N=Ztçjúæ@sö­Jrô_=e_ +"qÕÕÉ^²(4Ëb2š9bþ:yú³H½^W¶z½n`Øm*"MW¦^§íìêV`û¹b‘á±QÉFLbž4$R|Ÿª¯L)3!̨è =.,A›KÕ­¾ï‰Dyð‰’9ôm UÚ:ŽN¯2‘õ.—Ö_µ—vÿ²ΟN/)OÈÖc*O“÷~p¡v~tÝLªòàTªü‹)ò†ës¥Ýß9Iöþ¶R–Úbâ% +A ¦ÍEöf“ãä9héÜùÈÝÝùø‹»7öm8>ö 䯈AÞžbäí+A’°-yz h‚}mÐZ­?–Ó¤¤ØöPš„×|a×õÌî~îšÝTb¾S±{2»ç™HµPc—-ïµåòZÆ‚&¿÷¡\q쑊?úBÉìÿ^LõþàAíþÙ jÂèÖûKàò5–tÅN[Ù¶ëÌ·ü©Wá²ýñ’V³“W Ì’t½u ìzç$+Ý;Až­#á×húÊÃ5$¡iÚTâ#éê,Ý%óÑœñSÑÒ…®Èk¥?¶›2ŒHІWnØc§ê¸î©Øz{p×@‡ô +¥r5 +3ˆð0óê,¡Öt_øM;¦B)ö㙜 ¦¨ÝZÞñl)½ï£Õÿƒ']ó•=»¾Õ‚ÁЋgS+MHM^NËXßÔ_™Gt+ŽN§ÏÌ¥ëNÍfJû'Òå&Ëv¾^Aú^ÄúNBíøÙÚpØô2¤ê$-1³JSœ¡MÅ”·Çö9±È4õdÁ: ³úôª‚álÎv+¶ü¨ÕüpŒ/ÐüÅqÅx&©r$½¦ÜˆŽËÓ§b³†ƒv$[¼ßV¾íÉRƒ\ó¥½|û­%P[‰ý_êØÝpþè•úì`áÑ*úÐ÷ò­7°Ø÷Ë79j¡~¹ðu˜´ÿYN‡…,¹n”¼°gœ¬÷WgYß{WˆwðØt•íþÙ´ÀäQI:°¦!V†k––Ò·Žtn÷ØÀàtm×e~hÙ¬%È}©7—R$’ÑH¦ Ó”GàÜ2±ÀNÌÔ—F%iƒ’h¼„§êÐéõf\ÅÉY éº®êÔ:seTúð ¨ =®©ŠJ×StOb[–‚ÖhcÐ9[-èòÝ“¨î'+˜ÎÎìî¾PçÊUî±=Aºû©‹bïsð™T¶û­‹tßO®ô‰wŒâòÓxÅ™g«Ø½oIJÝOœÙ ½¶l^ýªæð ùþ>¤vùÄwJù¡¿á¼ãÁ|Yj1•ZoBu½_!ïy·’n¼î ßtx +Ûn)+;2Iž¶ÕÔÅE„g; Ïåþ8žÀú’ÉðWì{dêM¢ùQ²‹ht2±©Ã@3•ŒKl7ÙºCöLï×^T÷Àr>µx—˜iÀoµ¦ëOÍa·œœM7àÿ×÷ƒ‡l×·+¹ü+f}Wr`2°6èÌZ36³Éü$›·Õ’hê¬Çù`ŽÅ‹vN`s·Z-ÉŒúÑtB¦Pd@ôv6}iG¾¦l1¦¢²†Ö<¼êðA£J¶*Sê¤AoÛtl:_ùÕl:±È0 +×É‚Œg*¾Ð€Ëí°‚ù"ëÿÁM¶ÿ½µë;Wª÷ƒ‡¼óùrné í:LÏ+7ÐXí!zë†5Õ÷Ú‹ë}Àz!gO¼T1_¾àd»Þ»0›¿œ ºsà7ä[¯, ¾  öÿè#o¼1ŸÊ鲄u5yz“)]‰mf×óåCPm÷—@ý8èùƒv¤L‰çZhœµ~‹)¬ È»_-§®- ¢Š†ûzñ8òDþ~<â’7â6ôLmJ®¨g¾–æ\Z½\cYlöpYÐ:miX¼0;è¶A'`õ€&¢²oWóÕ|ÐÖ½O¢qß=´G‰–6ö²ÖË dÝO—áùèÄ4˜Ç¶\ZL·,åwÜ÷Uõ=”q=·½˜w=˜Ýß{Ó¾q'¿âïÝÏT¿¸Q¡~xµêïC.žMçŽ=Q€ÍeršÆà¹ëÀì}뵸ô¾ßýd9}–^4Zá¸Éã* ™Îo]ÙÞo}@_ŒÊï+/?:YžÒl±¨§+0[ƒèÛÝÈÒÝS 1"{¿¦ra=¬o0Myà*|úØõ(~ÿèÂ0¡QøùÒQ ‰Nïyç+Ûõִͨ­¡A‹˜L,Î+×”1ùÛ­˜Bìgq~Áb[Ád5˜s›Í˜¬Fs*çG)›™”-&̺c>¾Ð^S2‚Æ>¸¸À !Pe¼&›^kõ­TÏ{ªç•3èxp…ÛÇVQ5ÎsZ®;_ øxÀå6h ±)Å#AÃ…Ù÷µ?ü©Ryø±ŠÛ÷P9hFÃÚ ÑªØkÇ–m·­'ºáü|О6ó$ºÿƒÕÿÑKÖõb)ÌÐ0ã€?“”gȶYCÜBíüÎ-Ùo ÜÝ@œË@N ¶|×$£ ¡AÅç艤*° š ù._ª+ÉNôÇsÛ™ÛpxšH†ðä _Í–ãD¾í¦£¬ûûåòÊÓÓ¤«K†»¹Hв™‹‘Î @Ó‰øÍ5ņþÀ#V%hJB“µýÄaØn†!6,]´§Â[.øµ^t'Úi1E ÜÐÐgÓkÌèÕ)ÃÀo«¾¸£=r3†«=1té@S‰j9¿€9ôAÊþY&Ùù³SrÈ4ì™JSÖ}5—M©1 TFh@¬Ç–î³? yµ,4^´ý©µF€F µ®z”,>ÛÌB6ÛºÔM&<èMf´Œ‘G¥ê`(çè$ÆOÀ±‚µG +´„°bœ¶ŽŽ—Z8’__n +ºŒÐ.à ‚7_¾wèÕaæ2¤‘µshÝ·ˆhF¥T™Ž!h}È»¯¾aÁOµþ܈»¸Ã/H?ÐI†òàh-*8vˆÛËØWÊ· .fS›ÍÄŠ8Í@ÛF&BƒÌ>„Íi±¤SÊGJ‚âCZG®0σWkÂ.kð£ˆ$<¢C×è¿ç)æ|^­%0±ÀŸ‡•ŽËÒƒu2 £‰c yx¦.³®Ê˜‰Ê&ãbˆNZù9u\ùÎÉ8o_ º‰ìއÞLçg®îø<¢y·ù {`v»O¹ç<ôô…ug¾JÚ7¨&ÚõçÀ•·\p_Ο~Ê_{‘uzÃŽ+‚mÙj-&µûÇí㘤ª‘°VEgn5‡Á_¦á¼Ì-™¶y¬ @Òð4™*QËç®nÞKãRMøÛyˆhrƒþ4è—‚ö?–¬#££4éе:|zµS±Ø@Ðm¢o,Tí{È«ö=WØœtD¬6èb^%_  %–ñˆ Ñæ“ðK)Å&á¹”Ûj<Ð.Rl>dOt™q ͆&꽪ê£s”UìA— ˜Ult‚.èÔ±-W—ðUûf‚¾áß0×P™´aðº¯A·ßpb»ïºAlš¡„›×l:˜ŠƒOê“÷V+·Í +ÎÍÇÝÏ'11%Ôê|½@E¼&™®KŵHÕñs8çqCŽS¢%ö‹‡ èr†jHBbµèÔZfã¾ÉLJ•1èă–*á§–›(³k€Ýg ´…¸Î{n ÅLlSR¶¡¼ã¶Ñÿ9ó6„9ñ£‚j{åÌ1&±ÂÏ M?œ{ÒÆ ÝóÂM^n6ØI//9òö#à]‘>H­6îá8“Y¢ zÇ”ÉøPMÐò&Ñ Y†\bš²N‡hÊc{ȵ]^¦j?ïÊoùrŒk&2YôÁØækKØŽ+A÷‹Ë©6'±ÖÖË‹éΛˀàʯµRoŸUÅ¡Y uH·^^¢Ü}_J÷~ëŬ-3’‡ÆjÎyé¶IŠÍ}3;Èö¾õeúÞú_ßóÌ…h1•î™ÌF—ê³1¹úžRÜ +ÍU´§Ûž,ãkA+8jÐg°–ÚDì®o¼óÛ6»},›ÛiEâõêÓ³¹m/œùÎW^ªÎgþªÎGþÌö;+€…¨H¯2㊺&€–!èèÁ~Ð7fò{¬IÌ±éØ ¶ñÆ"¾ãw¾û•¯ªû¾8¸ç®T±ãžè'â¹<[QØ:^•W3VQ{t>ÛyÕopÃcÓ‘Äd8¶aJwNľn:ÑÓ‹/7&&Ýñd9ÛûÞë{ë°N +zÐLi×â÷“°Þ°g +¬Ï0¹ýãåñ è”:*±rµ*CW̆h¸,wGË–®DpOHDEiË´À˜íOAÇ—\#œ×J¤,¢#ât€Q¡¬=ëHhë*M›Ïs¸ÊžA¶éêb>¯i,èÈsÉÅFd½³hŽ»ò úøûñD¯ïà;1sä--Ý󓓹Š4ÅŠÕØ· q™u•£@'ÝphØ`'‚.=¯”Ó8N×a£Îk²†Œ;¤áç€ä\°è1‚ß½-Ðâ½a:bÑŸÜÐ7EÑ|a)×rcpYAs”0àAûǃ\y§-hiÊÚÏ/ä>¥”½$àWe ®°f˜í·WÊ{.PX!ö®sÙ[¦ýù +ÕöÇ>L×7îøõn û ^_eÁ…­ÕykNÊ-Gç1]ƒ.ÊÞ{’ ÞûŒ¢ã®Ýzs 0[¹ÚÃö uÇïµ%Ü«²/¦+z¾õãû¾‘0;~ô º^­àJN!ëÇe}¶Dß®ÿ¥X}ôN„ò‹§Aô–‹³É}Œ¤šQTâCÈuqÜu1·Jt¹u ¦<~¢# Ì<î¤l”¦¿·Œè[ô U•GçªKvNåÖU+7RdµX²íV*;ïy³µW”™[,ˆ2øWл^[`Œ3î;‹jÆqÙWåñGáDS­`»õì,ˆ£håZlã´¸DÐmµ€öªr:Æ«Òj-@UÓl z°àk sû[ÐÅ',¼ŒRc¾îª£rÛÏ ¶{¾Š–gÂò^Sj¤Îl«Útt60¾‚’±‘¦G8Øø¼TéCZÜì–¾éÜþ‡ÅùÁhõÙ  Åíãâ‹Dþôw÷€§j×@ÅÎT×µ¥D‹rÊÎg+q=4!Q®Í7¢Bql…ã_Â^Äyý hÓ«Š»'ƒ¯½@fãá©tÜ&CYXªä=À/QöOTäï™H—e{¦A¬šE$ŽØ|x\C[2.^¸|0þ•Ûî{¨ÛŸú(ËÍ‚øWÎEhÒ! ø `^«ûe¦ö(É{øäÍ& q‰¯·.p •íøzm{ê§,?9tÔáø1ŠÖdCÖè(“‹F ΦS U|‚:E ¹ :ÏÀ;¢z°=k¼á@¸ÙV L·¿\N×^Ç”™ÊTŸÃ9Õ!;vÓáéÔÎ'Ϊ“‘agΤ¨N ¬’îýèFל™Íl¾<‡]ßNl,0çà>[Ða ëzÀGý;`w°Ý/Ý{âãዼ<°]•r8 Öøƒ7§J,4b"tÀ/nÖšJc`¥Àú;aDgéÁ¼S&çä«°UÐå&ì,l¿ºîy)úHAƒíýÆWÞ‰ã`g­*Ò—…¥h[VÎÅjÉÙMÐãV%©¢ó €qB4eCSu9¢i›oH4•7öNæAŸ©¥£€Ã œõö‡ÀX!lãÄR#Â-,Ú59(¥rtp|®0U»'ÿ¡Å­(ß5•ê{é¥>q=*øÆùîÈKÆŒ¯» qš¶Ž.ÑâÞ´áaƒØñÜ‹ï* ÚùXÆu}ãÁbMØYØgÎPVËX`gÉUá„¥üv–¼ÿ7Èáþ–ÈŸ"±Ò;«„°Û&9w°)žèÒöŒýg{°³”mÝùíÏÝÉ8Æs\ÊÆiÊñØÖ<¼F ¬†õÕ£!žVvN€sâ¢rõ¸ˆ¬aÀ—Wµ>pç;_z÷€Ž‚×ÇjÊØp Âofxùî©`cˆbUÿL®þ”ƒ¢ãžèêrÝ/½@ã‘iºû<¢;OÕþÝy«ÓïùÖSuôyXØåsyÊ]ÄlÕþédÝ8Å»&Ð)µ&d]±êè,¦éüBX —F¬Ó­cÇåà×UÝÄÐç°ß +bNÂ+.0•‘š2e8‰õˆ6÷ª5ºÀE"¼àA‡'ë*âð¸I«6ísÅ®ç„U‚¯íì¬ +`gáø.1„² yhƪ2±ßûÄÎbcK ¤8p—#š ×dUø…jqaq: µÌªñØ\ ãµÒ„ðñ°#k"É¥#©èÕÚÀgMo¢{Ýtv!ÑâÎöÓðJ(¼º ¬š±Ê}v|ýÅÅhqoê›ü+å®ûbˆ‘á^“…c¦øb>zH‹›ð‡ZˆÎ,0ŸAçλú =hÖÂ~4Âï[¯7´œAê˜È¥;K$bà™¤NÜw^ø!e\šþ'vÖ`g½Ò?ØYYÃÕÙÛÇ+jÎ8¨ û§*±?#:ü« ô ·+³u,a(fn2Ž¥*¿Á´ôUYØâ~UDñ]sv¼ûÑC¯Ïz}v—5hVÃøfðXM+3Vmì™Ô1à²ížˆäMÝ÷þMwžþCw~Ï3éÕì +ºóê°÷â¥|04•ÙÛÆ)ò{&È£ÒtaMB¾zý0n]µ øxàf‰¨P 1¬!ŽZÑ[¾ööbˆsùÌαàÿ€íG‡¯×•1ÁR©áq¢M8¬k‹G{j‰±2o«µ*µfˆ×s~ãáL÷SwàÁú¢ Ç=À–ιØOŽü=¼ ;KÆ)5äÌ¿±³&ÂøD±HDRì_"5Á?©"2†«¢2õTÑézŠˆuÃøÈŒá`£ÅMøÔ¹õc•ù[­Á~² zàï ï_[®ùœ#0~ˆ>ýºM&·*q¬íÀ eÃIGÅæöŠŠý3³­¤u³óž'ì½µRÐâæRªMüžÀ7ãÚï¹@L +k€Šè<}el®ì!l¬âÞBØ¿¹ÝÖ̺#©°mÂrÂ>“øÈ?ØYÛï¹òÝ÷½a-åvø[ź-¦0žùÌJ3à•; xÉ›ý;;«pˆ¥Æù~p¬6øuJõh>,caoá×¥n6‡×ƒÞú?¾òxeÉöI ¹M˜}k4\X¢ê¸àT¶g†"«ÊtŸ÷LX°Lev¾óä{¿ƒŽ,°cG^}'¬0-_9(6îœ:Ä]OÒV"ð`=îyP<óš2’p‘;Âz¶H¦DÀÄæ°Í`k.΃X’O(( Aþ òI£ŽÒReV˜«‹·M:äå„m +~§l¿¬lÙ¾) a{ + g¥ö~ïÃÕ[¼y`g‰`¯$¤ ì,9Ã!ØYxŒƒ}"ì,üÿðØïªu¦Ê”ÂQA±éÁÑE#€Ñȇ'ê²á :Šxì?Ý…m2_Þ3ˆÀP#kçÀ5k\ÁµÝX|WEZ½¹:¯Ë|çmˆóá>ÄT ÍMø„Û'1ƒ.à[#¡ ÇùÛÆqi¸Àå较ã­WuNÃ8ULžApz½ePÎë7õÚ©zïÈÕ{(»^HhÐNn½ëHØY„ß¾g*Õz‰°³Ø–[N„•Óì,-?˜‹ÊM.o§5hu6õÆÝ„¥~2°³ +‡ØYªdg%üÁÎJÆEkQ,Î-•8n‡˜ØñyÛ¬Aßø“ L•Z†çg½°ÈëqÞÁGáׯ֢èp àRAÌ@¸?ðúÊ£3ɘ8.Ò9Þ5Y‰¯¥".Ï€ðÉ¢× æ·"k«%ÝxiÛÿÆO¾ýéRàRÁQZ°¿œÆÈÕHž·n8¦åï£@RçäÙÃàoD +ÉÔ¡šüú*3XGÿù¼/¬awš +ÇñOv³%WõÅ àU›ÛÏSŽü|äâm6:ÛãZKå¦ÝvÀò%q%öÛ<Ø“ Øæâ\†O¯!Ì?ØoEíxæÂï|îOØY ‘›®'û7vVÚ'vÖ:=5agí›­¨9å L.%“‡hÀ¹o2ëÆ(«÷Ì +*\HøÖ$ÏlCôØ[¯9^öCÀ¥!ZöÀ+ lòú1üú-8öêŸ ~m½¾Œß>èÁ´__A·œ_ x²ûsH.³ÝÚÅÕ}5´äaߣ²üÈ,à’*w>ñ _- J-1eÃbµÕ«3õq¾6ŽÛzcÄ`Îe‡ø’Cì,†°³¬àw¼öSô=„=ÈFb¾!™3L•¦CEÿƒëKÀ |¥ S”Uûí•[¬ˆ/hµá¶ì©¨;í *?4 Ø•ŠÄCØ+sÖMTù6lãñùC|ŽÓ„SÚf ¾C<®ª£sUÎPæn±[¬€×‡Fk 8÷\Ë)G¶ã¡3¬¯‘{îÀ̯Á¶·aŒ2¹ÆŒ0œc ë^]Ðn×wÙÂý r—)¸¦li— “©'c#4åAášà;Iü šþUf~ž, +”†j°aëuUqeFߪ2·Œæ ØdnóÁ™Êî‡DîU¬Ê6ŸK*3_H©´$²P ìùÁ¾b)ðcªœöñÄGb¿F8»°æ‰ó6ØŸë¥Cü’^[fË ÐÖw„œ‹©?18ªŒÆ1„–Ûj ~'¨´•Øeå‘9 +œ«Ö7‡˜ÂU&C*ìC!N­=éì7ˆ<8–û±&ì;0Œ/¨±f0\o`ÔAÂ6Ë7^^±"ÜWv3°³€ëYx|–uã6áö;«hˆÅ7~¹m¹°|YoÅ>_•ÛbMbMl÷Ùñ0Ó|ʯÁí.ëœÈ—tM$¬ù’Þ)Êú“ ¹æó‹ ×î¹$—«sq~ ¿ò>;®cÀ…ï¼ëAw,§·á÷ª>:xvÀùÞ“rÓñÙªŒ­–Ldœ_½o&¬i(÷Þ§!."k=Ïœ©¶K‹ß çX$רtdßz}ßtÙ â$±4Ñêm.$MÖ|”k +Œ€ƒªŒI×W¥n2ã¶ßr êº#!,™õ5æ Ð8 +”à|]ŽÇ6£BÀ0‚ucàÑÀº‰Áç4K_•Ó2Ø]óñyÖÀÜàKvM‚²ÎTØgËÂx…õË„}~Mž!Äa„ƒÇ’¢òÀL¸ŸAïñ#Øð4ïC ¦(=4m¾îk"Š’îIÀüÿÍbl!¸®»XØ<˜Õ¤Î¥öòB ʨ$ TUzÅhÂ`Æ}q(_‹ý6ÎÑ Þ'ˆ‹J:mX|íIn<Ü ÜN±8qÞ‡çñîvVqÇD`q0§¶ž!ŒueÑNÛ¡÷íãä‚À¡®Ü=«9l϶œsÄcl W–Ä,dͪ²o:¼aÕâqÿÄĶw +ÏQ¶ +çò]÷V*öߣéýßøQN°Çî¹++ŽÏ&û&ÓóFòûïËBŽ_[yìdbØ«‘ê]ƒLÏWœ¹À9ƒ-Ræ´[ã¾ÄmÀ×~C÷ØëÆEåW”îŸJræ–sNŠŒ:s™zµ&ƒcj°.è±î‹ÇŒq9­)—áØP†dR5b"3†A| íbš¯,„u œO“Q* ÂòÄÿK±¡ÛøV°‰0‰*OΦ›n.æ0åHÎea-ŠŠÕÖ\OEõ—sت/fÂZ>øh6:GR­ÑŽ2ÜCW”˜Fø(ä^/0©Ú&g Ö¶¡–Œ¯9ë÷¬óÖ0a\”Ÿ¡,Þ38Ôªüí6°ÿ†k87[’yÔ;UUñ…=Œ{Ò×°Þ<®ÂÖñ°vÍw?ðÅö{6—”?‚ÎÔcC“t©µ£a_»÷•Huà±B±ó±˜m\J˜=°†@¸ÓGç²í7—sm7W(7ìžF˜æÀ¼Å1‰Y+L‡ý…`ùÍVÀÀbO- w>s£Z®.„û»p¿™Ô:ÆŸT±oØyˆ¥éÅÆ$NÉn«*j·!÷„°}§[Î-¤OÌëœuÈçeŠ8MàW¦ +ö+Äæ•¶Ã–i„íÆñ#ñxÞ³UûìXŸã¼eÄRÛ'‡2QYÃà¼aï»ë¹70iX·ÞvgÛp~Ìð_ì¦[vûWØë©Ü÷˜ak/8[µÅbVx_bcp_ÂÞKà=Á¾â÷`í +òþök.`Sɽé-È{ÁÇÂû3 :°'ÖÂSįՑIƒ†˜ˆ™Mc€©m‚{cLäjí_Ó*¿ ¸Çœ¶ÙtˆgþålEÅÞé°† +÷ !fT$&öÑ#Á¹©Jû¦)êÏ,‚õE)øü”e‡§séu£aO—£¯HŽ%~°_ÙmcÁO*€eŸmë—|Ýé…À<"ü `m.³y äÙä>rî_`/¯æ =Ä#„[ Ìö’¶8G!|¸w¶œ°xÚo8»^Cò=ÈUñ¸…tdzô¶{KÁæ)*p,\%ðµ›ÙÓ]O]”»ïÉ€÷ê ë+¥Ü„ì=µFØT¾ÏŽ+Åq-ðág°OÀ]\Þ~s1Ýpn>¹§“†}Œ<džøÆ­Vä> ¬GÀÞá¬FË¡¹u<ì# Ú¯’؉/ëL…¥ëÈUkµ —nÄÀ„c3·`?Ó`Áãø“‡ýVå»§( ¬È½²†cóØŽ+¸†óŽpŸž ËÖs«5¨UØ—ï°¡Z¯:Âû“û5Ùx<äµ[ÁãJzlè-û쨎ëNTËåETóE¨Eec³ô€ÉÆ¥ë)6ì˜Bøp°‡¤`÷$~5ö¡qÊô& `*€¥ãQ®r¶¡ûg˜Ä9—!Ü{û¼)Eb†»¶ÌH‘ZiÊvcÕ>ެóᜉäøup€/-ö“¢@… ކÜò]¸î'ÁýVY.>CŒm`Lãk¦(ì{yøø,}%øóú !^ž䃰gKYÒc {7`^ÁyÀýbEZ³9äÎ`¿!Ž$Üôu›LÈž#`Á§m6Ã~ÌŒøyà½b›ÂeÔ›Ó™ð„a¿bN+av+!öÎ-¬Ñ®/7%¬&bƒ¿œG8¯°f‚ãP˜ãÜ–ãCöØ§ØÆÎ°baÏ1E*¾v…xœáüâ"ƒ8ZÀÔŸžý1!Ózz_ß·“ðÄ€ +üaXçuò´2cr¯ÇDÀgSìxutLŽ·a/m)¾nû§‹ŽðÊà>]æ&3È“€]s›\°›Ì$û7í û]› BØ/ó‹ÄøÚ‚½Råµ'~©ò=a‚ã6s·O"ã´|—-½ùäLºòøt6­Þ â9Ò6Ø÷ÒvÓ æalE%ê'\Ú÷õ +ù߈¸¾o¸Þ~tõ¾iLTª.Ô‡@ü‡ûn +pz°˜Næ#°ÊŒÈy“y}lŽðùø||>>ŸÏÇçãóñùø||>>ŸÏÇçãóñùø||>>ŸÏÇçãóñùø||>>ŸÏÇçãóñùø||>>ŸÏÇçãóñÿó1eŠG|¸{HrÈ}Ö{„þŸ…AøiÈÚ䈤ú"üTЗ¤d÷è°äè„ø¤t'òàOù¸Û8ÙØù‡¤G$Í Z4Ýf©‹Ï¼¹Aøø·ÓmfÁßÎ=ßÁfŽ4"$ÖÆnèmðïmÄIÑQÑñøIYXHlħ¿] +ŸFèSäTé¸&­[»J’Œ_ÿéY×üÂÿø¼nCž¶ÁÏÛ,œ>b®Ëý¹6l*|v‰¡¿¾™g3—|°éð“/þn5~.ÕfÞ\›…j®M8~!+¡oï¸pá<ÇÅŽólâÈOóæÎ^´xè ÿÿðÄòÕÿß_ò_žzIü8øfͧ‹îáôé{Ò¾?ºÀn:>9Ök„þ÷ˆ”è°·ÎφÅ£°±'W–4¾ù‡óY¸xö‚¹ŽŽ6*›yøçE󡵫þÙ—Ào?½ìÓ—Å6ø$æ-&—ÎÁ†¼>×)äDaô8Ù8Ì[´h1D>úÞ> òp @> +…kH˜(Mxð¡šb*DC¦ ŽÔðöã‘§»ùú)T¾JC‘« ¥•òÈl]yd–®4‘½À_«3ô‰ ‹RkVDþÊžV¥ ç#×êªã‹TIøÿ¯Ûd2(Lb¶‘cˆÈЕA3­Ö aš rLø(c„Re."Iä¹¥‡¨X-.i³1”ðÐÑëté¨$"[²_\L–”h‚l«L¬!ãC5XˆÁíOÈÐWfU[(Ëû§«òº&@ùs 2Zƒ [§r¤íe»¦¨ ´w~(E…뙴јÈ&å´[+ +wMärZÇ2ëJØäjü|)—^cÆDå TÅkT,—˜kHd:²›-ÉÖs"“SbL® ”+ä5…ò)زO¶Èƒ<þ?tPŒÍk‚$£D¥ ÒÝ ý,ŒÔHC4ü$J2O2(‡àb‰„d€¿BÁ[Ž dU¦ˆÓ’ãöÐaøšâŸA~ÓÃÝAI+HÉ2Ñ%úTt™¾<4MäÂÅ ™*Arõj-ÛôÉ”l³k«ÃÖhùðÈÕKŒ ¤6$]—¯É%o6f㊠ål‚&`!ÕÉZ>øï|Ü@8Xä‘à<@I”¢Í¨µ™È4]åê<U\®¡b]騠œs™5æ°Å]ŽÛ‹ÏAS‘¶ÅL™½ÍJ•ßiò ªÔJ3„$Zéåf0~¸ØT=::UW¹¾u,¾¾V +ÂÈi§l8·DQsÒA•Se Ãá±ÃŧéA‘C)l'¥ùC2­`ÌeÔZª×dP%¥¨Ò6™L‘X[`2LÈZ<é:(Z‹ ‹×!R”1¹úlRŽ!”pª³›ÆAi1Ÿ\h¤ˆÌÖ#²DyVPæ¥L«2ãc³õ™UkuA +Œ”ÿà±OGÅk³kt@fB‘†ÇFJ©1”é«Ê÷ÍTTž­Jm4çãr Ø„l}çP:HP~BJÓëÍIiEl‘!ŒMe^ç"µÕxi1ß2° J'¹œ!y +fM¡¡L…ûRÇ3”ü–tOù‚‹ÏÒ'å-Å&ªüö ܺ²QÜêÔá¤|Jmq¿‘ÀÈX.k»Wh á#4=}±ôDRÏ7Uж”OÔ’ó1¸/“µ)üò«5D<ù±CØu¼‘©‰HÅs>LCB©H¼ÂùD,ž3 J~˜¸RCýƒ÷‘PáL”‘nÆm€2i.¥Î”‹*Г©’´à€”=+bò @Š‚ôÏj(*ç‰K@,±1éë‹ äÊD-™ÛÑ mÅêeږѪ¤ +e\–2&]Ê_ÕUæ\”WdèBi-—µ™”§L”çãþÑ'8ÜD(­ÂL™\nåŽD¾/¥~4駬†1|Õ‰9P^ åßPþªHÇ×d/°í…Ué;ÕæãóU÷LWùˆSUYP†ŸgHl ¶ŸC¥ÂØ&c› å90®H),î+6&c8”ºÃ˜Q¥C¹,)y†r–“ œˆ”Ä®+5&ã ÛeUJ…©2¹ÌX‘”7켑â‚>Ϭ"媤´|ãÎ)ªâ¾)0×”%;&ƒ¬ÖPIa¯-)I+îš Ìmò>ê‚]¶ä”š\C>¯u”·‘ëÒîI +(#„R”œzK~}Íh"9 ’á±9úUCäÛ¬¡<ŽÏ®±P¬+ ó¤dÁ®‚Üœ+­Æ} ãJ„°Í€ñ ’lTœ”׌+_O1òõ—"’³x,zÓ(À_ä<~=¶ItX’Ž\© ö‡HD¥ ƒñ¶Y²Z‹ŽˆÓ†rk?±²ášLÄz]&:W¤tფ=Œ1:8MÊ‹anAY)¥J(Äç\1’…ö%*R*ÿkïÕ²m /Áœ#·˜sÎPÉÐÝ«WèˆbÀ**9É™¦ÉY1ÌP$ç$H2ïà>笿fá>÷¼{ïß¹ß÷àë t³¥×ªYcŽ9«jŒ) qR> ³!:<¤µ÷i¤ø¸‚ŽêvMšZI,½Šr/–ž@X!¶´ ² ¢ÓžAÞ”>æ8 +ŽAŠ/¦,€£Ò€[¬%ŠO4žø¨•Kì,‚#¼Ìa‡‘X²ì|>V(õÎ\Œg£q;Èg ò‚ä¹bŸŒ…ˆÌ#±oÆ"qàí•€MbßkK‹$ç}'ƒüma5 Có¸{ôÌ8+¶˜&:0‰µ ŸÒ#Xú ä :Êà¨Ûb8.)ñ@±Gqá(#š?XnK»¡÷ñ`©2RpM0—à(¬(ðÎJ|Ì7òå8GÖàhð,Ïã’8þm,‡c®´57t+rAqGä }/-9h‰Oö"‰cò8âþ–2Ì%8VÅZyÉz|Ìä~ÏxÇ9ÝV¦ s…:‰îý)ûÑp<c*ÂZŠ Í¬ÐøÁRÄ€uø}Ãx ÿަÃýÉu>-¶ôQ”Ž9I[ÊäìPæ€Ýpr>!ÂER|Tø —)~™[\€æ:R¿V>c±ô€“l:}Þ·& ]F¼8䮿ÛKD>w–b©9ó³Ã„¥ø8*š“&Àë@öâ×&F ŽÌó@z>¤€å NÒ¦ÖÄ’CƒRàèZ /ÃÑq,püæâ.cðÑT|Ý‘J˜F^@¹ÜqBרÙ8žA޽c8ˆ÷¼L ¸Ș`Œ²‹™¢ü ÜÆ˶8!g®„e l¼&ŠÏùOÁ’K(6£pþ=bŽ"ÆÂrŠž}ƒä•íÅÉ”ybd82ŒN¢ù +ó¤-ᨠÌ|a ‰„_à}biÄFq{ø¸¤[,> ±ñÏc±þ7—‚T3È^Ñw–‚7ÈÀÑGø +˜‰qÂñG·´9p´ÙD±r W2/ƒ2jËѽ@ñ5°dgéÓžã° ‡Ï• ûG0[î±VîãàH#ŽÓ(fÏMÆ2ðÜYqä1§‘”9Â>É…cüîhŽ!<ÆÇûA¦ì”ç8Ý"ü£,ÏŒ€{ÀtO'IO¢|ò«¤÷,/Œäþ þ“¡Î9,Yzo%Hqãc²(FŶa+ñã|àdÆ!p +ØhŽ‚Ì +¶¸µìh÷äÙXä´×x|}Ö>p~öº2$m@jŽO“Ö¸Æy$ÏeB#Ïôi4~‡GÂÀû)8 ' G*öÊ^ÀXùLé=øø˜»+ÜÛHepÕ· ïMuÅ; ‹óÃ+!W°hþãøôÉX`L[ á¡\n(F_Q­ß3'x¨þˆ­F° Ã_G_}ï/9`|¤Ö÷öR°J:||ú<âÇøûÐ)ìÅk‹èà‡+@&›vŠVb`}CÛFN¥]gÂCè”<ì—@Jì ø¨ë1‰§­/Ž›žô”pRü¢šLŠðÛÂ~p÷ ›‚ãå +ÈbTo`¼ÙÀ“.cXû©X>"¹Y×ßGíFᜈƗL¬Þòý°Ç+AZâc€Wª +`ðj—n…j‚_kPÞšñ <?X` œœxHƈÑ8€lγ(¿°(¿cÎbÛ¢8E(áã㈷à<„8–ß<ŽêKûј‹ ÜÉü|K¹€<š¿“€Cø˜òÏÿæ Ì)ÀgÖ;u–ÈB¯á÷æsi>X_€”º0øæÈß {óþÌEiÅÎs Ñ}ÐfÌ3,߀þ&X¢šÙä¸"ÔŒ4ÊwB°rãüCãg@-KšXãZ{GóîŸÈÖw2¶F@9–9Šj”“(K4Ù¢| V^ŸÌ™ ‰`W÷ŽË P­"4½$à…ðÞ(¨Û+ð˜Ã¨9¦’z`-„ûÀÏ`œfANF\x”ÈÿÎr˜_›Av–90K¢"ì~H™Y%-¬† +ZÅùàŒÿò¨ípÙéDªË¥m†Bo‚:é9Fhj3ÔêuÑIECê ÔcPOÁ}˜X)‚l$–©Eu:sÔq$Èøa"žqC5®'#ài>9‹À†Lj؉çà˜sèt2¥j'Õ«#ÈùMƒŸÔ¾ ä7±EÄ ]Ô4Á¡ÓCñ°£d¯72ayë›àÉäÁÓà‡R0Xkç±€›¸vŽ€ +ª¥cfƒt¡ô<âVŽcŧ.Œþ)¶÷õ Ø´€¤:Ì)\+ Zq¤á ¡R×’óˆ[‚üm˜HW +–ȼ9 c-ÊY`‹‚¹Ä=ÂìA À¬…LØý5,–öš€å"^n¤/uîgrZ…—[°)–“±ò™üKמñ¶øÞ£Øƒ¸ÞØ ùì0 ¶ Ž£ß¬„¾µïxáû˜‡'°‰˜ –˜8%ÍÁòÖˆã€< Æhø=Ä«ÁNKÀžõž@t s bc,š b¨÷á+Ê ÚšºŒ»ÀÔvÔÏ`e;8Î ë±0 +Œ¥ëhÀma +ô?@fsF„,HG€t…­\ Í¥ HqI¢ºÚÕ4F|˜5‚¥,Ñó€}ô»‡†ƒ\%Ôë /OŠN+‚ È +-ì†Ã<˜žŠçÂXè[v¢zo(Î8Ï{›>èG†ºåê_€£a¬ù‹¨—›°´ÈŠ@͈j\} ®¶êÓ·úøä_õ„‘eÁÊæ1Ôq†|)¶N š£B®¤Ï^œ¹HxýmeÞ +ñè–ªvWb”o¡÷$uM˜ \ðä‰Q½>BløH¼ïYk„‡Ë1†‚œ ÈîâzÝg2Èãbûÿ«Kqýë’0Gì‘8x,ô Åö!J»ˆA)G§ð˜/û¦/&—ïÂvKç&A?KNøÄÍùg.¡do7 3Z÷ +/½ßƒ-%ãÞmeÂ^®EÖÒg,äZ°Õ!:Ž+$à«TÌ»-LxþFÆ1v:ðCê¨ÃH:§bK¶ SwcW°õrNžE;% r¿Ëiyé6&±NM®ÙË&–«ƒDÊ L"Ê+nñ³¡.ÅrA “ y lW<3T0?FQ@î +&äÉj:ºp³Ž€€^Ä…¾®`°^Gqs +[ ºËÖ;?ø†jNT?Üž›(î¡ÏýÆÊw<‹êB‡¾ð^òÂOsûáPÓŒÈ16‘˜[³VA—ï@O¤â!&A:žµžvë|Ú\9ê<Š=í7QtÐy$Ä&HJ•œñƽ:‡†Þ.îw:FLûß”:ðâpç<'×Ãr)g=&`é`¯¤_È„Â-äµ:›‚Ì^5Ê1|ÄŸ‘ØRú² <î–‡yŽpós¦r“ÍÆ=}è!ù]]†ûI¸ÿ=dH¡/òÎ,ôúl —‚øª×Aúzã”S?Ú˧J!þŠp×P¾ 5xc XüßDzzP¯Ÿr#YIÏË °$–AJ›‘ ٲɴ}ØTÆÕ/çý&A•>ï=¤Ç±¥NÀe`¡Œë'¸}°lþXûÔ™Àa¼ O0÷WP)ïÕèèÊ­´Ç¥_ /² 3訇kÉÔzU° c|2æÑçB& ¡œgƒxŽwº +ÌQ|…:•X³S˜\³‹‘lÁ/'!>¼Ç‰\¦³á·VƒÅHaÉ6‹é~¨ +endstream endobj 293 0 obj <>stream +႟®†û-—l¤6íÀ2f–Σ©§†A½NC½yñ&èáÿ%©¹”mÄ4<ÐØ×  \˜¶˜ ²¬×ÏùOÄ=F„¹/@¾š½xk öt5럻œ=/W¢-.Œ€×±•zoRû¸AÙ^toÄçb”@>WplqN*‚$‹ðzdTÃÃ|¶kBߌŸõºãè×à^!Â2Æ'kîBívØfÈCl²ÐÇûiC!”=YK]k×Ýk +³>hÌî_6Œ…ËHÊ qó3C¡¦cÏ„N†¼%qŒ)e¨ÏamJŒâËf”3à§Gê<}ÅòŸÐ+€û垈%=ÊýÙ¡ºñÀ[,5X¯ƒ Þ–t‹ŸÃúf/Bµó2\7;£ñ”½š‚{ PóÖ^_5=”»0QW¸…{µ†î1í9QˆêúˆÝ,é•>ø søÜäù˜7›Áʆö¿³„² +9 z×¢“¨övϙǺæ¨@žÆµ$Êé kT(ª+Qι6ØZl©ÀºJ_¹G”T·ìI€cŽ€EÈ©ãyò‰rWìëÍtt–ÄüÖ>NÆ ¬GÀþRpùãÞ¥öÕëÀy¤èžB½Ží,,Ñœ?a?Kw"¼eìy&«ˆÝSæ¢:xÈ9 xܯ+¤¨—èàG+ÁЬ¤q݆j%Gû!*©n7ª×71§B'àþ¾èÔ?ëu&ìîj°U‚þðt˜«Àëu˜/.c@¯¯¡q„81q˘/v™ëu3T¯ƒ[ÜwöÉZˆëexî¬Óx6àÊR,©}&lC‘½ˆM­Ðe×±7›H:³S[ôv¶¡8ŠîùAÄÅ-ÏY) +ŧåVQí0 æ&¼°€z8Ô°,HdA?úI(Øà‡«D×–‰Ýå³E¸^Áõ:ÈÌÂ{Äõ:ô¡ž€:0á0X/Rò—Á2 zëЧĵ⥸V?è5¸ÇϦÁf a¡0©|;ØÙ SšU'´¡@œ æ)îÙwCJa +Ñ¿ØP€ ;ãzùcÕʆ$A™Yÿ´¡ð'²A8ì¦ 6"+û10w°Å‰kú/À‰…¦€kƒ6¢„u6¹i/\È’C¥-Ðß· œ Rg »¸ +–&ÂxTcßÃ=W,[ç—³˜LªÚIfõîk`°¢'‚{æum±Ô#IEbå9b¸ –E”¿ÝB'—«Òñïv`éK¸NÎŒz¸Á”É*X>4¥vŸ8«Þî %µǧÿõ%°FÃøÝ\‚åÝ‚Ÿ¯bܲU„§¼ÇÃú(yTðUìž®ã9 úÔ1Ç‘ cKšÙ ƒµ…Akp%¼Þüp~oÐ8‹x8Â.1ÂvÀE,÷†âÛ,Bß$öPLuÈßb +ßd•ÚP€ Eð %äÀ‡\ÿ ƒjQàæÆRÌ ÏÀ|„Ü@£Ú$Y!Ö0Nž ž‚×é ¶?fçî¡»ÆÍf|®-dï-Ä/ô÷A¾8£C°È©Áú®¡QmœÅ’‡·WÀœÅX +Ø ù8ªË¥ˆÛ`;ôÔçø÷ñZbÂieBž¯Áýˆ.c€Ïc+k߉Òãh99 ×m؆"j]¯‡óǰ¡FFbǬçX‚ܸÃ(à)`ñôÓ†bØPÀµIÿ²¡°p9(¥ùl£ÄëÚâ.ŒôHQM=OϬùØ&(g9ØŸQ‰%;èˆûkÀ&~$—™€ËÉØª-`U5(±<úUxx7âë°f%ñFóa&ôf±üX/›Ùâ57°a/5h ÓÞ«Ó¨¶Å’µˆT(` +ØpÀ^ èAÍOŸò‡ûð=ª‡‡. 3ä[ ÑÑ  ç©6Ü£#ÀŠöðÑܥМ»Hè'ÁžàQ` –PA=?ä„¡ÂkпDœŠŽ¯Ø) +|¼[ {F%”ì /5«“ eÛøéM»€§AïÒñm-mlC!@µ:_øO +ÀX»20”Æz"Ÿð·°ô%-ÎáÞ ¬Clâº$8œ=,Ô÷o ò|P‡€ä­Ä/{ Hµâµòƒ½.ÉÅK‹±Dö…°iƒÒÆçFb>€æØAÿSt +Å/ŠKÉ)Ÿñ¸¹5ä.¶_Á}ûÓƒ{+À)°PA¹úÎØjýBÐdò ÕPØ‚m*Îxü‡ EjÕ^Qzµ6å«ü— …@zVÇ ô!‚§¿ +±ë¿ÚPxÚP ‡m$PÜHmQ tØ~$}èôpÜ_pK™ µ#¶:@óúï˜ÿz]_ˆãî”ÿxÀ°g%S»Ô¨Ôu*âÕ:Üï·ñ™ ¼Ü¹æ)cã6ÖŸ`þŠ1E*cK”[iËs#aÔÔ`ÿöZ I.L¯VÃ²ë £ +µðˆ‚¡‘!a gD ºÔ9°>õ0Ô~BëÀñ€‹`Yº_‹"öm×%öìÚO€m+ôZùGÁ>,V ¬‚¡okXðïÆr¶P¿¢œ ýB°ÊöÐ „º¬BÁåLàä7 æ‰L¸/XJôRË^Á^m4§6 7ØPjƒ¹Éxð)†ÛG¨ÿAöÛPèP„ž®`Ž8Ž”‚ÝÂkÜŸhC!þW +«¿l(l†S¦G…¢c +˜ïš0ÊóT\é&¦pƒx'î\[ +8‚kNûhe±÷Í%tjû>ær·Ž0­_úÒ"« X§ÄYTV‡&X¼ášä¶¡^‚ýaèí9O{MÄû"ì"¦A]ý#¨Õ¡þÛPàÐC[\)9å;l²`í$m©¨âMŒóåÙä Ÿ1 /<6â“'>ª ¥aH¨ïÕ"´µŒ Cæ^ÞI¥T«‚Ä-H¦C‹/Ë#ëḞy°ö|AŒRGl†3¨–†k§–jÑ‘ù›Ä(·áÞ»]ðT¼þ{9\A*6]…L©ÚÅd´kcаܕ3ä?m(lÚPœ)Á67VƒŒ¿ø¬ï$è­ñÑ|ÂÞÄ5%N±³$° +xãá # ×Æ#%}àøPñù°iXþö\x]ZXñŠq$Wc^lc#ó¶HÝRU`<¡ÿv€)bŸäù £,ˆ}¼–¾ÖlÈ^nÒ…ñ;+Œµñ¥ª’ìr›R±‘¿Ø Ø@g×é€ì3ô.ñ~P ÈYuÔß°f÷— m(jw³—ºtDY­†Âì>-òr£s1k!¬ñ8±Nóõ— •иSŒê2À) XF„ÜX-ñŸó;ÊelØõ•lÄÓ‛+0>€rÞÛƒðÆŠJ,ÜÉ&UìeRK÷R©ej0¾Ð{¦"ó×ÃÚ,µ½o,&ëw# +ÖÒsS!OWbŒ +¼» l.逫‹ÓanëÀ÷Á¢Á3s![º“I¬Tƒš‡²—+AÝëõP÷àù\öí¡˜`åÏ·ŠRjöÓÙmº’;Õf’ëÍ,üde—¨LÙ„O&Oއ5¾¹ÕPcÚtˆ1ŠS¨AhÄÐ|™¸Æ¢ù ½(X/2Ôð{ØÊñB‰ÿ½ÕRïË‹0Ÿ90 ök€u…(©l/–·ïg€5;°6ý¹Ö vž`Ñ +ãCÆæo¢£­ +±] îA@öI½bçI.¦/’å®=ƒœ&eî½Cèœï$Ücw’Ï„z÷0@–÷¬÷¼Æcë;úàÐ[‘ÄWiˆb‹v Öì(ÛÃþŽ[Ë%>‹ g--ñ:tàdè€m$’³Œ¾Z£Ï>¯:(}\j ¶‘ºZzØã½li%û$—j ØËÕ:drÞVl 6ݲÂÍ ÇòØx=,­G€þÿ uªÙìÕ`]”ŒEµ)âáâk Bòr›:ØP€õ9í•>wp}"cŽðLèD°g§ýŸ-Ç6vÁSp”¹z^bÏ„¹Ø†ÂkІB$¸¬&°L?âþT¸§ª`Ë7T§bcô:“R©Î¤Õhàú$µIÖLÀ*¬ô„‘ÿ‡•ÞìZé¥wjÀ¾5(WŽ÷$ÍÁ¾øû ÇW®&JkԢ ÖÁ}€ØÁkB`çk©P£C/ ò!ª‘D7j„f_’<¬:ÈËù s +}±š¶MV¹}¨5¡^ÂëÀg‚'b,vMšòíTZË^ˆwÄuöéaKSžåw”çÅ'ÆH!€m©¥ÍÀwÉé ¼¯Xä9K0ÃÚì-ƒ=?(/² ßp…ÄíÒ郒C¦ùoìè;-X§Ò×›p½½° ¾»¬p©ô6 °ö¤RT™¨üÍ"¿ÛËDÞY °/¬ùÛG*CŽ>å5¯Áþ‹ …Õ¯x]È+i.X¦C=!ˆ/ÙVvž£ÉãÇ ™M{ßZÔØÎÞ3Õ*1¿°ÙP@ž€ýxa7WQ1Ï7AΖxg/î÷W×´þ™‹éÄbUqR¥¦(¹r•QûO+=ê/+½œ&ãÿj¥W§Vz°Ï1è¡XÄ’ôÁW—a»)”ÿaß!Øak&ïk `X2Ž2eÿÁOW³N)³ . 6£/5k1W—`ÛH¯kóÁ¢Zh=Uè9 z-°†²žÆ?d3 ÖÌX”ËG‰2uYÄ¡÷D²‡`?,ð>l‰òX¨2ô3KÄ= 1i3¸W ÷ÀÁn4ôÁ*ܧ@x6¬¬säàž¨S€³£:ïÑ…½ŒA¹«Àæï‚õXG9p~¬SÁú¬ Aö*ˆ=STð¾r°Œ€58°'óG<êBÈêÄÙx ʇP×`itÀ¨áá? ìæ W+q—Í\]û{i°Î ±šQ¥–«‚KíªxÂIϱ°Çö¨à¾cBÅv虀ì=Æv¨‰a~]¼¶ïù܇z6ì2Pí{W\cgã¹ +V–á÷Wƒ5³È#mðšÜ3æÑwV“éU»É„’-”ßõE”]ô4Ø1h„~ÆQ/6b»"§peëÇÿ6Xø@&àö2aìËM¤üÅ:Ü7ÛªS~㡌­-ï­ r‰ÿµåxO쇽‹0w|o.ftïc3{õYï{Kðþ°ì^曽Õ ëÀ:Kô£ºÍÅMÀ_ðÜ€uT¨)¡îvˆQ†ÞÓø p]°ÝqIœëž°æG¶ÇyƘ:~a$ÞÛêœ2Öh¡öž»e¹e}qØ…C¶¦ä1ĥݲTØÐ¢À;X§ôÙ87Ÿò‡×ã%Ç1;é0FŒò!– Çû%߈­·Cî­DÏ-ƒš ö‡%u©e™Õ²z¡´×幌g† +쳂^™X¶ ~¹÷¥ÑÜ€ýzPocžt})¬cKøÄwÛ ¶á¼ìAÿÆJÖ÷:Þ/ ë °Î = ØCEl¤²»µI5ÛØ³Á“„æGñ^Iè)ÂÚ5ÌwÖ÷ÖR‘cÒ,lc5zEh,Âë@NøÜ^û¿1ÛG#|û_Y†s?®?fã×-=Ç0ǼñïQ?ê6ö¢@M`rlpO½ù©¡Ð[⛜R„ž1yÒy4yØn8X—ƒ5 +ã–:‡Ï[OÅ”m¹–g¨®Wà#Œ^ {s±í¬—9†*ìKaÂ^¬¼Ñ3 §â÷ {‚ž¬¦då[À®×ó[!®aŸ¨‰gÊ\—ÿ«T‹ü5ÅÁ~Àå…`Ã%¸¿Š‰*ØŒ9+ð0»HeüÀûäî­À<úÂ(_b\pKþâ… ±ì¿pÿÅ=º¯KÁ’¬|Àlͨ¨Çëñ +Üï ŒE¸'kB°î=cïÔ¹˜?¡|&L-ÛMÅ>߄׭NùŒ{5Xç…ÞYý4:âŰq…Ü/Œ+ØŒ-£r×. ãNã\‡r _ÊÙ×–aN Ö`QpkÎý™û—Ué‹™óàw¡(HnÞ kRTXÁ:¨_È„ªmlf‹•Ù½_˜Ô°Ç}è°™Û,L*ßrÖfÀaXGEõñFèy‹¼¯,üœ#ö¿»‚‰x°÷@ÁÚújƒ‘0±|;å—9ÛK@¯êØÉa8ßmLzçaZ·Q² î#à#ìa¥#Þn .DO¥’¦3>WPim{D—šôÁ’÷á\Ô °æ |ú—U`>â9ŸUq»6_ì’1öa»!°=É€Á!¹ˆG<]‹9‡Ç5Æóú|:(w)G8«]œi1Iè”é’YŸö 3û5˜›]|ñ“¦Ã’WuÖâ×'é‡búR·ûn‡ÉÅäEÒc /÷®¢{6“hž.aCž®eR÷J¯Ô ͲËEÒËI³´Rž(®P["Û„N•:'â{ u¥0©z'ôgD¡Ï7À¾ arõN°Â5'âöLÖ{=:ûƒ.Þ«A§´íux€EƹôfU +lHÓšv“±¥¸/Í„>Zø)Ìl×l¡“›ÕÀZ¬y ÎÄþ7–ã^*Þ/z{à|e|®-¢"ž¬¡äÅ›ÉKï÷Ó›öP™MûEÙM†lfƒXK’)õ»à=BÿÞ;™X¹ââZ˜Ö®{G¨+tèÍ<°§¦ï¼'ùé=» ­ÛÉìïšôÓnQáû3Ì›Žâ§Í‡é{­4{=ÐïJnט0·š¢[Mèÿk%E¹¦Ì½NZ^²Nþn-Û°•—ýY•ºßÉHžÖXJîW›—‘äÔTæmAV«:ÔJ`¿{ hyá6qbÅ>ö^+ËÜêÐq•Û­M³Ó)-{²·k…Ö~ã î¦RšUMîV4¹]}ˆºôU“ +{³¬wEÏVcÛ·Ä:U¼¦å÷h%äcÜïc&·ar[XæiûÑ“ºÃì‹6 ÑÕv¡0«_S˜T¿Cp©S¹ÖÎcî´Ñ4CòN¿!yû«}ý£±ðv¿1s»¢îtñ™‡-"ÑÝf±ä~ÍAÓEgD*MéŒvMAjíN2£K=Ô æè°×k!.!ƨ˚ì¥VX¯e³Û!6 ¤Wj„Òë,}©FS˜Ö¤ØÇ¤#üKnR…5 2ý½*™ùa?g`u¥W›ºÞ¥OÞê×Þø¨/¼õÑ~Ô'ežö èf„Ï?J˜WŽˆîwÝD×x»MÈÞ¯—Š4`´ˆ©;<è1óï}Õä~5 ¦˜¼‡oþnJ>ÿʲ¥­6âÒJGÓWïΙ>ywRr»RJ_iÖ§³>hÃ{c"ó6B.Àyñ#á‹6·[¤õi2 \-2e’ÛöòœP46· +¶—°j’ÿÆVú¬ÜJt§Û„Í푊o´‹$Ù­BÉ•zŠMoÖeu0™Ý:LÀ£`£ÅøÝYBÉŠ6cëÒȼMÀ_D¾hž‡me´ëˆÒßkSiÝ{ùÙ_Ô }Ûxßvñ²¨½áH^g)øðçq_m0Û×éGÖ|9%lþbK÷~ô¤z¿¹KŠB~¸+;Öv=VÜ_"ê~(í¨5í,“i{‘(©«ôF÷QL½þz€Íë>&.ª·—¾l8-ºÝ"‘Þª15»_vâÀË<[³‡EÖâ»ÕR2닆 ©u;{µ“/½_s„¹ÑC +㪷AÿzÆlV‹Â!#éåjÙÍÊC&׫¥PoRéí ÄÂ¥-êV OœÛd*zQ{Lò¢á„àözäÃ/êIŸ”}ÓfÍæu£ŸöH©‡½ û¬ÝœÉo;Fç}:D½é;L—t[ÓÅ=VôÛÏG…¾þf"xù…|2£Ëº¬$m¥~’öbQe™#ýì½uûƒ€ÊÐ&SÚv‘—>íƒù@ßí ˜íbñý&3ænCg·ê’™{Ù¬VCéÊÃßÒ'e–ì­šºÙeL]íÐgoµQâ{fìÓ63áõ¯:äíúÌ6R˜ÛÎ'v …/z¥TÞ×CÌ»n+¦¬ã ]ÜuŠ®x–®ì8-|Þ/¦ïwÑ›„Ï{D»ïäÃ^{·™¥ò›Òõ-6lg“I_q¤x !DÐÌYñj8 aÃçst}‡=ýºç0ç“6r¨CÌt¨Ë`Mc9⥠_Å‹¨^Å»ú÷½ln‡Dò¦ü¼Å£ç% µštèÕüߵțßt/?Óäã~ŠŸý›º ¶g3?éÛvQÊ€¶4«…4»SuLú¦ÐΤ´Ðý@ñOÓ¼ñóšã’›M"Qv»1æ*—{´ N£Pžc2ú´'Ü,v¼¦î é']bqq£­iKQˆ¸´Ù‘}Ý|BTÔzFRXi')©r6­Ê¿(*n¶‘¼¬µ½­µç5žf^vXP¯;ˆ_Ô£x¬8!É/±TZ#Ì31¾Ôµxo/®f=ïÖ?4xO8caaïaQ[½´«,LÚ[&êjôc{›ýÄÝATë{~ÉßÌø%š’%¿Z*¾¥Þtdü%ŸªÂ-ºÄŠ?5…PïOS/»¥ôµC2âíZ*ìÕatífáÕºðœèYƒ…ÉËòsÒeVÒÜŠC’Û &Ò{Uæ&·«Ìè‡mbæñ{)ù´‹a^¶XˆòN‰_Ô?n=*zÔnNÞþ®O>èçÑ(ÿ2/[-ÄŽ¢Új7iS¥ŸYWaÔ±÷·“N´^M:Òy/þPïËXQµ¿¸¥ÂGTZcK½ê5eŠ[­™æj7Óî·Q{^ÄX¶ÝH´jN·©OŠ?W/?ݘgÙš-7éÏ £>x j~=Î{ð‡>ôÄg§ˆ\3ç +Sß«RWúu˜Ë}:€m»nÏæ¥~ÜL 1mfÞ–'3«-<Ôñ4æ`Ç«¶ªÉAPøÝÌà§Î÷~6ŸwÐa¸¾Ž AQ +"—ëóĹuææ¯ä'Ún&Û4fdmydR_äy¹Ù,]i4å¢ûôºøœi]^€ôUÅæj“‘äf‹p†ioô8Þ–‹b.6±Ø[P1x¨ûN´É@~„äÓ›0ódŽu2“Ù%nÑwJ\£3Š=åVÍ©1·‡ºr£¶Ýˆ•ôU†Šûšƒv¾”Ó ýv¼ûœž0û»– ©kíõx1uùË~Ó'5g%;Ž’™î#C‹Wó¢ªV ž}£¥­UÏâ´?N0驊d[<Äõ~ºßEK:«‚袎‚‚O&üG žv éw­ÇéŠVAÍ·#tWŒÉÁÎÇrQu©£qîoZ†—ª7eõo3¸ûCÕ Óå5ýqìDKf\Z¹Glb…g|P_¢gMhÒÙæÔ$‹®{±’/âÏ­!ì§¶ Ñ·Ö ƒÝ¢Ï4¦&kÍ‘›õ>ŠäWÿ8btë½ôµ/†âÜV”çûµXÿ+˜°Â À]éìn]œsï¶HØkˆÿ]m!M2ë’”6&±b·0æÝfá•Zâ—­'L*J=$¥.ìãf‚¬ßö¢ŠÖ¡oVñdÅkÈ'¤¤¶ÔóÈû§‰‡»ž%H;JƒEïk|LJ£Î5&%y×'{Õ'¥T¹ÇùÔ§IZŠ|©º¶³f}ïdî ᩾õ~1‘ 1™U®²ìçÈë.Qèz£}ËäAÅÑA~ò õ±1><ˆb>|ð¢JúNÑÏúÍ$OŽK^6XIÞTŸ?m8ÊÜi¦˜kÍÆ¢üÎŽùÚé{¢9'átó嫿+É'šo¤H:ª¨¢Ï–¼’¿I5?Ž’•?fø–3ÒÁi¦wm2ºüq»è]빊ä»_Èé–ŽtQçIº¤Ýñç£âKMFtÎ{=ѽ)û®ü´iÃ뀣m·â¶?Ž>Öv/ɦ)=áQçSíTRé•Yî&»Uë•Wk^Úx>´°Ê>¢ Â!¢¤Æ6¬²Ú6¬ý\^iQRây¿Ô9*³Ô=:¤Ô?Ϊ!=Ö¤ïU˜¨¿&м뱌¬ûÓšÿ˜ã ïýƒOßúƧôˆD;°W>Ñ©_5ÄW:)úî7Š-í8'éi +a;[|˜Î÷^’¾Úpñ§òpªÿƒû¹=@ÚWaÚS)£[:øÏ~ç“Oß“¢üšãÒ¦b_I_U˜iß[™GMhJP½_ÚÙæ¬Ë;ŸÉ%=…þ‡ºŸÅ麸ëFŒ]KTlXµ—üN•“¬°Ö.¢ Á6üU£møô5¯Î.<¯Ö.üi•cT.šwi•îòŒ2wyJ¹‡Ü§2(Vú)?Ô°”c"J–ñ¯pêìÝ~‘ø~ßÉÝ.sñ›æÓ¦%Ež¦ …ÁfíEQ¢·Ö‚ìþ½ä¥Þ½âì&øaÛ!É›Æs┓_~1—ÔÔzU¦¹VËÒÌZ el^«%yíw~RýÁ•/šôãÛÔèaÓ˜’z¼õF²iO!¼ÓÞ¢(ñ×ú°ƒÝ¹rû&yRb­[\l­g’UKVФ¯8Œé¨s?Úq;Á³)8Ñ«>0.¾ÖMv½Ê)·+¢¡qzYæ({Qä÷´ÈE~»ÄEWê}¬='Zô±%ˆmoò‘VW]dóÛNˆKjmEÅ ¶âòjG˜²¢‹(®åå1žåáqnUáqÉE^±AåITç7ãן×È;‚ð)¤Ì?!®Ð'&£ÐKîTâ+99¼Â/ùzoÂþWý·œ¾ákN_ÐüÝþí·Òª‚s‚«Cr¬Zo\²èÌaÊíÙò²³žµá™0NðxYéu½Ú9*£Ü-êNcTaƒmDZƒsÌáîÛ±Â_»Ý>pG{ÿq‚÷;O~ÿäjÚ÷8Ô¹**.¨Ò/6¡Ä3:³Ð+Ú±2:ƺ>%út}j̱æl™ôÛPóî§2ɇÆ0ÉûÆ`Iskûð׃Âë×eŸýzȼ©4útSVÚ©æìÄÃïoÇèy}ðÃÓöc»ùá7;º§ÛCô­*äpÇM¹yïC™q;giÜByü0ÓØár´ýv‚WuHÒ7n²—ÅNQ¹oÜå·Þº£ÿ×]öä­«,ãWÌ¡N”c{ #!¿TÆ=yç"Ë/rŠÈF˜URi6Ðt>ä#z"¬óª ŒüñÑU»…ãçlwÞ_np‰-lºþ¸ÁA–ÛàÚä“"ú^,ú^ùÐlàŒß÷Û9ÝgœšSè­#VŠûLÏ*ì⋉­{tˆÛw›·í!ÖoV'ÖnÜE¬Ú¬F¬ÝlH¨’ÎC4OÒÈúÛ2Í:NSø¥ÝÕ¥4"*㥯üúk¯èÈ‚y\ž¿<½ÀKžsq‡SYqlÏ“®ŠÈ#m·ã/J/õOL{ë—Qì!ÏA¼!¦Ü;x¿ñï–&ó"2*Üä/¾=m´¸Õj~«Ý6’ùÑà§Ÿói“¡­lâ^]±b¶ +1¨1—P"fSˆ™è¡‚¾_>r&±fæ"bÏ¡-vTÐ’z(nßI‹'Í&f3ÐoÍ Æ)*fÓ‡ª³G.&T¦¬&æÏÞH,[¦Jl2²"öøULÛÿœÛ¡_ű‚Î?m„o¹ƒìÛÏV¦ïdÙo½b Þ:G¾-rŽÌ/uˆxòÎ9*¹Ü#&¦Ô'η2(É£2,1ù­OìM<¦²øwc#‹}cô<‘‘¿^ z{Ü#bkš.„Õ·œEs(üÑë¡ÓÀîÏùuõ~çk“uì.MÔw¹£¤üNE'çËZíÜ¿oÒyÀm׉­[¬Æ;J,TYCÌŸ¾€PQZˆ®a1ŽCŒ%F£ÑcúI™˜J¨(N#NQ!Öl1&v›F(ª]x6V=a`Žf§eô…;Éû•³3é{&êé +dâîö £ïoÄ^¬ +ŽOxëžï%»úÆS†p1:³À[þ¨ÈEöºØ)òr‘G4ÂcÙ³7®²×®‘ÅΑieòè +ŸøææsÁ\—Uø—6»ä_{ÏïH4ø³Ü÷†Û´×ëõ”]b»!ë¶ï%–,V!V®ZJh˜Y+h{_QÒñÌœªqÔ^qÑ\b"1žIŒ †Cñç0t]Šès¡ðóç¡è™±èªG£ßŽ~RÄÏEŸ¿Œ[F¬]/"vöÝâV°½…ž²A²¸gѲ|YL¾tÌ»‹Ñq¾òŒïèËù^Ñwò<¢Ÿç»Éîç»E=zåuÍÍ[En²{…®ÑoK#ý*ƒ˜¯þìçzò×Oîç[bb_5£Üz><¦É5fg°Ëä±tÆR‡“Ñû‡÷6½+|06cÐÞéâ?>àõÿü¡€¯~îÀ8bÄIèëxb¸ÂxôÓ4bú¤•ÄêM‰}>UJ¼~”78„Q‡Ä½ÍA–-Wã²ó¼¢ ò]#3ßzFg¿óˆFù¢Ð9«"$ÎìÃãpï²ÐxˆÍ‡o\¢n¿s•ÅyG[¶eE³¿¶1¿7¸4†ÆW½· lv2ü;±Oþzö†]z„ÊØièFâ÷?½Cø~º¦©(â&£ïàû!ÿåjþóÇ|uÿzÝCÐ'ŒÝhôïMCsqÅîã„Z@ë4ëÜrƒ~îÓñÁGÚ^bÞò,êhKŽüBM\œm­<öÕ+ÄeQLÂƽñ•Ã8æ¾ò’¿,pÅãXú(ß-º¡È%¦£Ì)Jü±(ý{zcÔËççì´‹9ÍíÄ$4Bÿ¯?à~Þøï°Ÿ÷LiÄ"bþ|bµæb·{Õ.n¿ðS™ƒMIrhâËù­×^1OòÝäó§Ø-ªqöúÛˆA®kžTëgÞ›+CüB¬~!|ÄœÓÿïýPôø×kýë9¸^ÅŸ¯ ^÷p|gF£;4}NÀ³wQ1Hñ絎ÂóOiâzbù6Kbû±›Ã4¯s«Ýœí¡–»á§+3bdoýpžjH‹®ÉóH,.p‹©CcX_è–ØôÆ#¥©Ø5±¦Ì9æÕ[·ŸòÇîòÄB¹î'Y§*!¦›‚çÖ‡ ÿÛ¿®ó¿û€kõsL‡£Ï‘øú' O”'o$æ-ËÔÎÄICversô?s‡nø&?÷—ß|áóâµGÜÛ|÷IJ|ÔÒ"×ägîq÷ Ü¢S ¼eÎåQÑðð¨‰Fù]Sé);Øu3L§”Ó]±dýÿú:ÑP¿gÅÓ!?_^ƒ>' ™NLSœCL¢„Æi +¤Y(ÇÏ%¦ [DLº¯¸€˜4j%1]i?±\ÕØ~äõ0õ|n Ó“ï‚x‹ åÈ Ñnåá1â¥A&ý/BŽ7]’!Œ‰~‚°2¥Ààä—¶9Éš›.D]G5§ms”\ÿ;wH3ýýâ:bºâøÿËØÿ+áç¿òÌÓq•àš”G."¦ß@Ìœº˜1e+¡¤èãË‹j·¸E3f¬ù·sùP̵€#¢ì5å²1*ûÊCç#œŸ‹"rŽÍ)èsª‚º¾yÄô1 ˆ)cæ!lD‰Ë ¥©ÿè*«Ì•Õļulj…»\‰…QÄ< b•ÅM…->µcvßäæïmàÔ>!iî}ª:=4üUpôÍç^²ŠWîòztm%y®‘OJœ¢ÞWÙ…ªuHèkvH)«vJJ.ñŒ2þÑ}n•Èöÿ:fƒø?~þ K¹ð(4ZcÐ\›ŠÆp~LUü…Pž°•òœ½(u‰™(Y/!~YK#L1 f-Ô!”gªÊó4 嵦ÄÜíhÎë-o+n +k·ý +7Cµ‚[¯^Ám1úúçq‹Æ+~þ…‘ ùå;c_!.b4¦¹Ê9±³Æ)¹§Î)åscrw¥kjG…3ô’dÚ-œá•­ÿÖ¸)þ >âÇxt-ˆ}Œ]F¨ü¢NÌSÑFסF̘»a…*¡4áÇô-3Ñôzn¾q¢.+æ`罨Ùqi¯|ã’_ûÅlº’hö¡(Ú­6*­¬Ì>¬·Â.<¡È+z/'\§gý?^Ûp|=ãpnžH(cüƒ9ÿü8àåÔas™æ£21ytWxï´]W¹¹ªO¹¥À'UqKv¦ümÆvYÏ”­a]“¶¹•ÝváÑÈ]å“ÔïsËöÕrêÆŸ¸ÓFŸ¸Sì—B³Þ‡¡§dPÏAM\óÔ®nògJK#›Š¢û+\“kŠ]âÉ/MN{]‹§F¾ÿ;±9êg.‡øf¬+zöíˆð柂Œ¿©39ÿ0=ønÆ<ùlÆæöH¤ªŠó[NÃ~'ƒBÎXM¤8UñÎ{Й6yä<Äõ׿¨ðˆy+L‰[Ž‹5íˆU¿»ÈÿöÍVðù‡ƒn ÇìÏúm¥NJ×JÝkÜFýRÎȰ„£xœ™ ¡ÿÓXëļ¯v?Øó4Ƽë¥\ô±=ˆªí·åsAåcLg«—gUXRE©}˜WEHÌÞäyóU6ÿq©Uâhž¡ëœ2f!1kÖfbÑcb½Ö b éEl:;Ž' Ýùn’ên¹æŽgÄ œ}zâFþVá`ü¯gTÛñþl²5øƒ;¦ù3ÔúÌñt¿s½¯ÜAúS——~gº?8¶î‰¨QZ!Ãõ +8~wÐ çÏ­F®W§ópÆTGŸ›eÛµøÃ·âÎ6¦§X¶ßJ20Ò'胖ÃèˆçëÄ9õBúIØ(ýÓ&M›¤1 —íÀuÚ÷1Û/Ê[ˆÅ«øˆçú[N¼¶5 }üöTNÅÞÖýŸ9¡ÞoÜA½Ü!ïœxO·]½ŒÛ ÑÍièÿÁ±«’唹FÅUxÈܪC¢D/= ‡¢ƒbOó%·Eë·q§iØÄ™ñº8kAÿŸŽâoÕ!Ì—÷¾ú85Kõ [ M ÎQÂ>F2½QŠ|µNäpi¶ødÄ$Öõþ*û]ö~¿‰0ë³åycß!KY×"xÄÊõFĬq ÿK/è?bSñ,ı&,%nb‰&É +;CÚ¦þíûŒçË£ïÜ £_9+ƒOÜ!Ý„µiPÆ‘zÅœ¾Q=g.èçŒ;¹ã†ecðœÛo$k[eäu{ŽaZ÷F~ҨÞnüœ-¯³ÔËùs³‘® +/±v“ðÊçýÔÆ[²Ž ¾’Lz±™ºSc,ºÿN,)+t4«Ïbwš1ÉûèÈŠ-tð›5ôý&Ú¬ée¤»,ذ”£×íþ·×5áâÅÙÄÄ‘sˆÉãç¡:z1o¹.±FߎØrüÆÐ-¾åcwÞøû/{+¹h>îÉíÚïý\yÿ‰´Ñzn÷”õ^qštS¹ƒåûk ÒüPº¿ÑSÐÛcoPÀD+ž:2ÔðŒÍpCWïñzòû ô +9¶«Ñ›ilq2ºxûmžˆ08`;Ôèêßv“Wh ¬BÆ 8 £#ë¶²w:EâWM'˜mæLaóqqqéyãìþÝ‚«ß4È¬Ž½ÂË5ØÇïó¾Ð}Ωí;“=fޒݸÎþ×É(g¬\# ¶1CÔ_LØWÉ©é~䤯Ÿ¹Óz}œ Âk±Ê»Â/ß<„ß<õ6hÛ_™´UM‹Ø¼ma`uv˜ñ½žý¢Æw®Ö-Yi¶Mq){îË…ûÝ +8V'óãj]ÿ×sôrj†¯8ƒ´ŽõF‘O=ü±_ø´&ïö ný®MžÂ79­¨k, HéqE¬“úûn©s¨„†ôÕoÒ×ç¥5çù©;§|ÇÛÆOÖ;=v§þibÞŒ8G+â~úŸq9Œ˜¨ˆòÚô Ä’-b«4hˆš¼{¦úsnåÞzn·ÎoœTðã½£ðÏ6Oæ÷ú³þQ°öÇôµxQµ½ç…o¿"_ý.¦ NŠk=%¥Í®Ìý~1iŸ¬¤«®KhoßFÐ|š€ý$ÒFÿ¡e”ðn ïBÀx8-ˆÍ[Of÷iRwzù‚ØêM—øéŒwÊ/â€ôÅL\éN“¬:Jú¦Äδ´Ð[ú¼ö$›Û.fsZydVç>2®d?ðú|ݳÑca½mêÐq¸wð¯0–J—¿,ßK¬Ôµ"vZݱï.·BûG¡úòôètú9F¯‹cj8Sý›Û®wÈy˜¶ž)±/Ÿ0æ™ iªpÀÒa¬¹{êb6¦dô`•Ø2o&±}á,b'<–Í$4÷l!ȸ¼¢WuǨ' ?&ðlà¼ÿ<§WtE™Û-Y6¥CƒMíÒ¤#^¬§ÒºöН71tU—¨°é4™ùû>2âÕ*þ¯:‚CT}Ï9ÃNî f§®êW2yÛá Å­G²‡î<’=LÝ2g„æ…4ÜOÙŸýu5Ðï{q\«#Éž¯Žú÷8U£Ø®µF_¶Þã4Œ¯üØm|>~ÒÎjÄ•™ÄúY³Á~-âÀIëÑöÎÓ:]œ çÄŒï|Ñ Þ¶WT8ñþÊãßùU‡ý7 AнŧÀÉdxæbá­FC¼Góùsã[jð_.ÚgL˜;盟&8zz>÷’Ýehú¸ÜÚ$¯î<ù¼ŸæÉ‹×ò‚-2LØlÔ»VÇí¾Ò±«ÂZ5)±åæ™+T‰ùêfÄÆCÔCk”5os«´^s»µòÐãÂý´‹5=oLÑ:=ÚÀý²’qØ•yÆAisŒ¢n.4L¯ÝhxåÃv~È‹e¤CÚtá¹Ø)Œ]òtÊùêÊáÚlêdà¸ý{µ » žÊW<#B,1SHÍ(øYüØ‚uü¸üõüÄüÂØ‡‰¯7‘™={é{mŒðY;‹÷Uú%Ì£ÝSæ¯ôkIžT3)­p7/dRRä*É«¶á_Ѐs¤cÔTÃs¾ct<³¦iú½˜±ÛÜGqå’˜6N…˜2Õ¨]ºÖPw-˜¨ÑÄíÓùÀÑÂ/=„}¿¹ò^s´ñ5NÝÈ%~ªñt/ÏyD2D?¡a%ÝØmÏ–uœ§cgc&íSÕ&Œxf>£áÿt)øx©_Bl]´‚ؽ|a°G0›+<ç2Ùâ¬Ë”Ö®¥!Ó…ÉovÀ>_öQ½)y¿Gæ|Öâewí\LŸCæ, nt¾ZÁµo𼨶 ‚ø[„×þ®Ç‹©X'´OV&O:Ž¢¢¦ñÓvP×úõÈœ~M^rÅ&^Äëe†éÝ›îsšFw¸}9?¶é]ûûf½«ÜFÍ|n»Vg ó+'Öàôuê9=½wœ®ÁKN׸ˆc _pºz¡OTôO¹70·R4>pJQG[‹Ø¶|.±gËBÇЀí:44ÁGüExμ Òf‘èÞ +ý/ÍÃz þé‹%ÎÊô)±´mÌ4Ají2¥eåsY…rŸA¹ÉgJ^”?PòÜGø¼S,¸xk>ß!l²ÐûÞBñã–ƒ’ÊrØ)}÷κÕÇç§6o£|®Í§l"' ‚ž-5*àxäÀgàEÚO¸šN'iXeÖ:Ÿ;AólöXí{Ü&ÞGîìåãUrænYJûuM 5}tMÄÞmªÄžm;•Ã(új››Ó`$ÌhRX»Ž6âK 8“β„ô”Ó88‹F_®Ó6¹^$Æçp=ÓT@Cp©Iætu‘ð¬ßxÒ.t2’»ΟHÒ àì“Óh(yZvXt¿Q"É­;ÀdöéP m»Éí;éô Øó)zW{–wówM^zÛv2ìñrAäÃüÜozÆ’ú•ˆSµs :834núÚ7¹ ú¡õ õÌ=†©ªZFÂ@rA‘w.z¢†®ˆØµe/¡»_òÿ±÷–ÑQeí¾oE! !8ww'Xˆ'Uµ|U%!F\ˆ»Q¢@Ü —Fº¡›¦ím¥Ñ¦Ñv{uï}νûœqß3ÿO5½ß3θcÜ/÷5F:t’JªÖzæcs>ÿŸÆu·›f÷òõ×ûL,9Öü€«·ÆeûÛ~o·×(Æ ‹À„Lû€ÂÞùŧ–`6ÈPØ03ŽÒ©o</Ý?¬\þNÕúû^}ÎI'¾xp–¾ÿ¯»õÍŸ­áRNNÔÅVÑþ݆ž'Š—~hÖ%£c2晹£gçr…Óø‚žúŠKó|{¯÷½ôŸ{ýÎüÛ.¿¶;«}þ¼ÑûÔ¿mñ¾ÊrÙOþéãwïü>ùŸ¢ç•ÿ{›OÉàTŸ¼}þ} í7Þ¯õå:߬–‰úŒŽIú”ú ¾rˆÙî[4›,ÖìX½QãÉÖž;³lÐÒ3¤TL„;×xkúG7åGŠ|å+Yºô\Ï?Õ #¿ºq×WùíÓ¥ôÆIRNÏt!«ùÛö©\yÿl¬Cí™ßör~ üéQ,wýïZí™ß«þë.Ý©ì®ÿ,HŸ¼Œ—?x¥;ó{ô‰•öBR‰=—?0CÛùõ&áÖÏFÃóeá?\ï~x\àûî?}¼ßþç~ï¿.÷ʽ6yw¸Æ]ˆ7÷NíïwõŸ®ºš› ½ÕxsmP¦•> ÕÒ—0wÙêÂÖß*Í.–ðÉ•ãõÃ?¸`ÝxKþfÐÌ€n±x(ÎÒ˜\í¨Ö¾½Nî»wï½³[ß÷`§8ðâ 4 Œt§ÚË—8 ¹'§ˆÅý³1ë…ùxéèÀ<èóýéVvÌ“SíñO‡º}öA¡2ô«·XýÎráè­%ÜàŸ]„·¾—u½/·ëÏýÝ•»ô“_siŸ]ïÈåµNÑfwMò­¸8Û§áÓE>iCÝŒ©æ¸35Ó‡O6÷ô 6Ó'ŸpЩ·wÙå­™;j¢f«›V9ÌÒìݶO³wëv—‡éûèÌ8C¤qqâËÇ+!QV<{¯à¿cJí¡»eH(°—ã³Ç`fX~èi¸v/H½øÂÈ5¼¿RŸÙåÄ5¼F;üÛn¾äÂ\°º|Õ(sŽÙªrí›Cê¥~ðoûq¹ÆV …}3ùôº‰bùéùÐä®ÿæçsí¿í÷»ôoûý.ÿÇ>¿ÓÿØ©«º0W[|n¦.«}’>¶Ô÷Åü1_EƒÙ|fëN|ŵ…\R•=ìž+½8s¥ºÃÖ,s÷1hôJŠ…ß7ƒoûz«Øþ|7t³¡gDzB—žñú³¿Àl—Ð~o7øÔ…~¾óâ<ó)B~× 1µn"ŸZ;ÏhvÔgq~äÏ»u]7ûùm·þÊo¾Ü{?…w~4ð· >ø6Œ»ö›N{á?ð7S´gÿû.ºÄÎK +4ó ˆ·Àü?òw7ÃÍÇþw?.0~~'Gx÷ƒïÕÿç€îÍzûÔ|<ßU¦Y>y¾fÙØÙìó ÍOQ£ ϰÖEdXûÅ[r!©Ö:c’åî=û5;™ÿܹq+ñظÄ*{!.ÏNjŽX!ǦتÉeÄŒ +O·‘‚b-åèh%ȧžøªŸ¨Â¥ü¸Ò¶|Zƒ®ÿñVaðGWè +©ÕäìºÉBÿ㽆Ÿ†}r³ üÁ·î$ +ƒ¿¹bM*¼0Wh~´I¨¹²D,ëuæn¯j/.ayÂí©ìÖžøl•_æqmÁÐ4ßêwçé['ìÝÏê…õÛ4Û7îÕ¸l=¨ñÒ›aÎRUj³~á +Í<[GÍü±5ËÇÏÐì`ùò+ÿüî9JÝåU˜É3½¾Bj½¿Ã¿ôô9 ÖR«—5¢1Ò’´ÁÂH,¯6N—Ž__'ô|¼SßsoË¥WàþëÚî¯×]ú»›tñg^7øb8 +BBå8pø†›+¹ŽÇÛ¸®ÇÛÄ_ÒZ¯½¸X(˜Ã¼³A<ÿÒOxã¥÷Vxïû@ñ×!ü[? +,&nåŠFfꢊl|øHsׂæÀntîÃóGó uãùìþiÐâCsGùáÌwĘóG'0[˜%±ÚWbnE8õg±âÒ".*׆K(#ä÷²x~‘åƒ'œ„ôf“¬½ºŒëúr›Ðó|pö{ñÜw>üÈOûIoûÂÞÂ?é0§¡ïy¶]ßtk…öôo»1„Zg¾…w~3êþ²CÛôñ +mß¿mÃëçÓJÆéc³m„ªË‹ôÃváÿ²º™\õÅ…\Å ôÍŸ®Ööý´Õ÷ììÒ¥´:¸zjÖ-Z­Yá8W³iþ*ͶÕk5ûöíÓ¸yzköd±åÇî~’ÆÝ[Ð<à£9èî«ñ ŠµÐ§5:@{þ3ÚÐZ„ÖŸÈ™sZæ{¸sâÇ|£Ôûlß÷ÜšÝ\\¾P52_<óÌÛpþžÛ+†çIy­Ó ‰%ŸýJ¯\{l¯¾P…ó?ûpÃÝÏüÃ3a|ÛÃ-¸†rAýT¾jpž®ãÓõÂ…_üä›ßëÎÿ_®ÚšÛ‹õ5w–ûöþ²É¯÷×­ºÒ³³}ƒ³­|åxsw}°™ï¡TK.®Î^‘e½eÍ&ͪY 5Û6ìѸîòd~S§#Úðjù™Å†®O(-_îw :tÐ+Ôê?AC<̼Ʃ˜õ‡î‹\9°s¤,Ìrš' E3õ]϶ñçþâÁþë¾þíbFÛd}@/^L©v ™¼œÖi”ß4ýi é +V]]¿µšo¼¹R(==‡¯¸0_7øýNîÒÏÞÂ¥Ÿ|¹ìåÊ/σ^†Ö˜`á#6פ[r‘v~à6ÈÌ?ÇÙASOn=è?ò‡ F‹9ÝÓÅŠ«‹¹“_m„}Aó—峄„êq||…=gËEe†v¤X|~ž¾ãÉšA®s…¾û‹-˜­dñÏßpí~°|õ‰Áøî½XùýLJùK?ûé[>_'²Ø¯?öæÌ&b~MxÿÛ íésÑåtMÖ%6Ž×öÏÐ ÿûnÝ©ßö ßa¶¹G7ò=ÐÓ‡%X¡§á£›“NKëuÚž¯6ñ¹}ÓüÒ,÷l÷Ðl_¾E³oÛAf—Z·Ž×èÔ s}«-ã +Æðq™¶Ú°K0(Iã%8ÅŠOkr”ªn,‡¦t])NjXÚhÿ°tE +67„¥Ù úæŠmw¶Aë Ú|NËd¾bd.×÷d§Ðóh·8òÂs®Rõ™ÅÐäûžº(gé„‹Ï´º‘_\´çþ¾‡ëWAùèiŒrëÙañì>º‘'»Åòáyb^Ó®þòRýù¿¸Ñìò[?©úKÿƒÕÖêR'p)M\ïo;õý¿îâº^_yyŸÛ9UWve®>µe¢‹‹·fÓÊõš;<5àx‚õ¥Ó±Ï,öèŒ!æ¤ùQ2DBTÊ(h¦’]2¿)6^Z! ëÊõÝÙ!§—â2íäâ–™|ÓÍUbÝ•|3û{§þº_7ôÃ.)¿uºQï(•\˜ÖŸÙà(fž˜Œ8)æµL%M V¦²\¼hp¶˜Û2•´$Ó›&ñ±™6|l‘éíT¾¹˜>'×Mà²FAkÏÁ>4ªt‡3­1' ½=©òÚ¹úí•|\Ñ?.ØÌ[ç¯=s1…vRn×t¬Ýé¿îÕÿÍ•úi7üçýúžç;¤ò ¡í¡ÿ›½ÐXƒößbÒ°æN}ï* ¿ô/½Ð‹o½4o¾tC¿¹ÇÞ\Ý9Ä }ËŸÖqõâÎÿÍMü³µ\NïTôÕôi'&òÕÌgö>ß‚k¸óãÐó‡v¤NekíP´—Q7½}ß7;øæOÖqaE£Ý]eVÐxzÈ)±r¼TÞ?Ú”RQÿlv-¤Ô&G\c]Töh’¥6(ÆÌ¾ýÞV°z  ¤TŸZ*Õ¿½Ú:Ðû$ëü¾ÙÐ%-m+tm­Óõ=ÝÎÖãVáÄ[kÄÖ7ów¶ÉÝ §¾ÒIý_º +÷÷ #?ä/üà-ÝøÖ_~ð0Óøâ³*ãWcþ>ðƒwÓ¤kOø\!çĶv× gñÄ,.î?=t9§¦îwå5;7íÒ裫Æ=?ì‡pƒ¾—ß;M_qu¾>ù¤rÑ{Àlõ×@߆t#KG1${”_=žXÍNДW <<Ä:ãµOÃäótÐ……±¯—އ&:æWwÝÐ/.Ð6ãZoÂý…˜B«+ãËì…üîéB!‹³¬¾™¯²š¤ôcŽBÖq'.ŸÕGÉÇ&ÉuBRý9¦p _2–g1\\pCˆªÆ˜‹i Ž˜oåúsáú¿Ù ©°{±ŠjYÓúé&ðÅÀÇ—l&h ‰ÉÅã á"œûÖS¾þTU/mÎ}¥CÍhôNHC¨êìb±¬ÛZO|ó{k¡=6Ïê$þôŸÝ¸ÓqÕõ¾Ø†5 3 ü™„¼1RaûLä-ÜàOûÄ’óóÀÝõcµ j20€ÄŠ¡¹°Qhhp196ÞZ|‚94ßõ)ÖúÈÜÑ|ÁéYlmï–Ê//òö Òìßéªñô“5\P²•\Ô1 :âÐbòíÀÀ‚>¡W6Všlåê!i¼Äp3v-fB{š®|`‚%´dDÒÏšGZ*ø\~j¡\Ñ¿@®¾¸Œ´R*/.⎿»†˜"ß»ªg¿â‚Þø0<ôú­ÄÀËŸ‡HýOÜH‚ÝkéÊ3Aýèë8Ã7_”~óA=få U¢^x(b.<}óÛ+õ¬Ñw|¾I×÷ó}õ;‹´%£÷ºøj¶/Û¬qc54(nÆñØkî{(ÑÒÃ'ˆùÍ ”f í©àÖ÷ÝýÛ>ØGÚi‘EvЊ·úbZ½#‘< +qÛðÆ]ã¡+ŸGJ o­†.4•¸Ö÷Ö —þ¬.ÿCç;ø­BÉ¥yаªYNÙøöj1¹~¢Ÿb†\O,=7quµîPŒ%´ý¹#åc¡È%ÕŽ×Åä2ŸYh'F3_—Ré Co2½uŠ>,ÅÊË‹Å@½¤N21Ö˜=c…Þ#-!‡LŒÓ¶àH)…ã䌊‰ÐeÄûZÜrÅÙEЫc1ÌŤ‘58Zwà‘fTr#t ¡õ¡ïûz'øÄ‚Oµéö:ä]Òåtø„‚1ú€p . ÊÄm„Æ2‹•úŽ{›Å”“Ž>J´¹ŸÈ|£b&†¦B sZ§òÉã|ý£‰!­ Ž¦ëæ™_@„9élöÎDŒ@Žâí+køCñVà±:ÅIÎk˜ +&â98¬|t– úd¾r¤9ËÌôÁ™ÖBRÍ!,s”NŠ$" Zù9“¥ŠÁù¬nßÝDqૃBÏÝÝRãõ5¤ywì`v‚ݧžy¤?ôÎûI!·ÞNó?wÏHÚMï­ÃÕ·¾¿±\~çù!ù“±˜ÓC W! ù² !¥‘ÅÇîBBÍ8ôªøÌ'Ôžú ³ÝÛ=5[mÖìßå¥Ñ§Zé qn¬vÝ{ЗåÒ,‡T‰¿í«4ƒ&7ô§¡_ +í>(ÑJLJ™ó‡ŽXÉiµŽBÕùEðÐmâ¶Ápî+Ùpæ¹ ×¼±œ´ ‹Ûgóg¾÷ßzéÏßüo’ßÅà˯, ¸>Yfëîp¢•§¯Vî,æêÁ€Ó†eZ»ºi5ð‹Ä)cy€˜UÏbz®-Øœ|H”%t1‰WÉì šP>:Y#Š´”˜%ØZÊm›´‹”c—V.3Ë¡ÅCqV¤WU{u•Zsat¹À¬Ãc­¡S'¶~¼E®9· ú†&¾aî5¡|b ™ËŽ}šíÛvi°'äÍ…™å-0¡ûénèøÒ5bu­¯VÔð!ÑV`T¨ ïn"ZRµ±iÙ:ǵPûïyŠ'>Þ,ç˜y)±ØžúE,ïÊ·WbÓmÙ¿g‘^ßÅ_}„+¿ðÚ3ß+dÖ9B“ÑG‰`±ÍÄ9’ªÇC'],¿´¾ìDèÒK¡1Vþ9Çgóºœy'f¢ãÁû›yxziôR€ô7¡·-nè ó!ñV¤?Y~jròýmRëgÛÁe…æ(1à¡ýÊòA©¢g´4uïm.>åÔáG¾2´¸‘Ä´a÷%àÔ¢ÒßùÕ­Bÿã}ÒÙ¯|Åc×–ñÉEc¡á/&ÙƒuŒÏbl®rsô¤¢gh>#ž@gL(>=GÌ蛦ͰcÅŒñÐåã{vO<ÚÂlȵŸœÙ5´ëúïÕwßߊšÌ,ôŨW2<6oèüê´ÞÄÞç{Äö»;Á>g׬¡ûË]úþ¯v@'=ò¿¸Îegæ Ïwº¿vz¿ÛÇž¿ºÆŒšÉRÐ+¬{ôœÔº«k„Þ{.êð_ÿᇂÒu?ßöù0[¥†Ë+ u'ŸGÜ«²7–(ý?xȧ¾óþ¶Ÿëýf§TzqõËNÍ#}»Ó/}ŒWo<õçë>XIû õ㹸ò1¨uýX îºtØ :ˆRRóD™ý~Ò‘3†ÙV 3÷<¨#½c°U _h¨¾ºÚX2¸PJªš ÄUŽW²Z§Šv©=Š ¯W3ë&“2â+ô®؃q&ýÎÎâN²¼ìÂ7¾êõÇÁ¤©VÐ=ó; y¯aþ0ÚBŠƒ¦hÛd¼_CN×,CjÃdh sN΄,b-17X¼….>±ðÒK'ÈoR;ðoà®´ÞÙM,ïøR{cæñi†Ê«+ÁøòOc#Õ†8ØìuÒLZÜbÝ©%Òù¯|•÷î…ßý,ZÜn.îoOÞ¤ÅÝwç€a讟2øÈ‹ëýdiq£¦ìy¶‹ÕÐk¡9ˆzD=’oÏb¹Ë‰½Èê žÅhÓŠûæ#ÖC/P8zy!]9F”b…ºü¥ðô%ÿÌb\–Y„\šE”G»¼×¶¥“bÌÁåƒý«÷;Ÿº©×–#ÿÕK!f~| ™€¸æX ,. W©î‘9@ã’]okp ÕNv½:žz¨7VBG{Hˆcœn.Æ[©‰EãHƒóÄÍ †®Gnþ=÷¼¡¹ gðޏ~æÏ޶ž¸Ù]Ó¡Ìw¾ÜÁ7|¼F(½²P¨½ÍjªK‹ÅÊËK¸Á'» 7î„ݺ•l¸yç°öì_öòõ·V +Ç>Z%ft’sûtbA×LôõÀG€þØbßË}àž¸íw׸îg~U+±<4ÀìoÎWh/„ÆZ!.7+¾zX)è¿à <ËëNMÌ'×°8Uèr;‹ù¯Þ®Ê©GZhð‰Ãß¹ë{XvÖá"[]P²%زz)ÊB/FšCÛ[loÏ·ã„4e¥XK¤i›?†4•Ï—¡Ï DJéxp¸Á™1våÆ +±ãJí‰[X44ß?¹zR@L®=˜*ÊѾù¯´¸•Š¡…Ü©—®Æ·> øì½éÊK6ã¾ÏWcâ4µLˆ´¸+Ï/"6üÀÀsWùôS_ÿÁ¯uRïwûE£‰Åb6q†²Z§¥7;Kýv–þô_÷¢>Äþ–·'G¹’‰UB¬bÛ$掛‚Øð¤KÛ? úϰ½Wì,µýë}r÷ó}dÇlkÅhs=³-°æñ¬†ŒÚIȧ•žÙxMRX®’5 +|yCÛ£}rÏËàðax~”¹N 6#~ ˜á# ácH±æô2©éæz¥ëÁ~èêJ}/]¡ñ(t>ÝÅbéÎs ÿ›îüô?tçû8`¸ú<(è£ÛyêÐc±æüê‚óP<4›Onp ¾bÍÕå‰÷6 ® I²„Ö±ÌòrÄuCßcÜsœ·BÎI¼bppÁDTCÍuj0åz¤Í}8Þ\$âÕ€œh­D3»I­u„ö¹2ôÜ‹ØY%ìÚ¾bgUÅò»¸ü±jÁÉÐŒ5d²¸÷;;KŒ*±Ó²<ØkŸ^ÃKÁæ¢ý-ÿCRP´´–E#³ÍØkµññX£žHbé8.<Â|&hz“îõ‰w778[,NãÃ?¶l‹‡ãLÏÏ7=?»w&4«aßb,³ÕÔ² †£ý ý»î¸v<𦺩ïÁºóü+Ýù3Ï´ÿ§îü×{ ;o| g/^*ˆi`hªÙ3”üþÙú°Tkô$ô£¤¤ZÄxp³¼¹Cf>|€™µ¢3óä†/7#Ï•3{¦!þíÇgXë„3­VÑ0;±$ë‘âqÄbO)™ æµÌ4¤Ô›xmXóG//úžî—ýEË{À–çÜÇC¯ñÜØY:I5Ó °³æ G„˜èãmÔxïײøjŽødImË´1„§Ù(!I£äÐôÑðÑ`qŸ:·iššß2þSŒM·A¼'Þ»¶ÒÉÛ›Àø!}ú¤Jä­*Ëõ™Xª6ߨ¤»°B©:¿”˜m%m³…Ápö½RhqKɵûà›I\“¢¨„çÙªQ¹v87Bl¬â¾9è·û7·o¦ttkI,'3)F¾bgu?Ø#÷=<ˆ^Ê+vâ­’T7ö,gV;‚WvxɨÍþ‹UhbgY½e‰øbL®$'[cíBÃ_=Rã€>×PØ2‹xfÍSÙuS™œ‚Ø!¥"ö{¾Ê1'<zëÿú|ÔñjI÷\hn³¹Fóû[ ]ïïõ/;³Tɪq‚î3xÏÄ‚-¿°Püõ€<ü³tdÁŽžÏb'zBëÛë•£ƒ MÜõK°Á@?{^^œ¬ñ‘C̽tŠÆW +5Cíˆ~¶·NÕ€‰-1Ÿ!Ö°¹¤[6ÖÏ7Pãå)h<½µÁfaȬr2wÌu9±MwÊÎ/Fï€X°eç@Ãg +P³rgv“o¯oì,oœ•”üÍÁÎÒ ’F;‹Ù8ü±³ÜØßc`¿’ª&ªÉ…ãý£Òì‹ƂÑ(ÇY‹Á±VJ ‹Ÿ`w1Ÿ,WôÏ 5êƒkÖ~o§ÔþÙð]•Ô&'c^¯3rÏ—û‘çcŸ9´¹‰Ox´s®Ðsϱ… e,ïÈï˜!¥²÷.Gß]–oÝÙcÌižaˆÌ³ HkšêŸÅêúÊáņá»zã™GŠ2ô—‡vrÛýMÄÎ"~û™…\Û‡ÄÎ[¿ØJ쬜V°³,<°ÕXs)op&´º‰M}t„ØYð“ÁÎ*4±³ ÿÊΊ}ÅÎJ%ø‡[p"«-U–·#ç;>¯c&ô½Áß@N˜!¥Œ­Ï¦é`+ÐóYÝ!‡±çDXp|°¸TȈûƒçW_]F`j°¼Ä¤s<4_e×R‰Î³#>YxÒ(0¿•¬–©üñ׉§ôÐw?Ýþ!fóå<û@­FuBtÒh>0ÈÂÓMÑhyV“‡dÂÏxûrñ¹œQãˆ>"âê7ü^ô0Àæ‚Yþ“}rªTóÆRð*Àæö8 ×x¸é5È·Åðæ¦ª•#‹Áò¥¼’Åmþ¤œù\VËÈiõÄüÃy+nà™‹<øÜ“ØYÐHJ³ÑýÁÎJý•dc$vÖ¹•JýÍõjbÙx>Ð ¯¼mì•2§¨µg–û÷Ì÷O,$¾5Õã™Ç§{Û'[‰WÀâ¸4¤e^±É›¦Èu,÷:=qPlût»Ü}o¿ÐùéN¾õ½`ÀS/ çs¨–évÆû’ß^ -yœ{T+®,—T|ä-7¿½Á?¥d¢eiŒÈ´eõÚ ©å³íÈÁ$VËšø’&v–@ì¬G;åï=”SÏýpõ±0âòÇð¡9£´a©V\xáèWì,ô—À ¾Ryϵæü +µ n:Å÷‚6g©îì2¥ñõ†ŠKËÁ®TârÆà¬Ö8ú&†ü.gñøõµ&>Ç;ë‰SÚEìPÀ㪹ºÚpôâR5·n*|±‚ç +· œ{©õæ&±ë«Ýè¯Ñž;X‚ùõÌ÷6OQë‰áU@¬{cA§³\Ñ;ûj— _s¸¦bi¯³™i£CÌõþÁ戔ÿBÓ?½ÆÑ〨ñÓ2ƒ2¬ Ñeö¨o ™uSÀ_J(³G,ä ±¾ºCf¾8óÃbr)Ä1CNç,Š‘,®g=OV·á|ú¥&~Éð<¡î-hëoBÍ%4½µCúñ)ÄËm›‰¸ã_ÚFþA­¾²Jaµ*8èoš˜Â5&‹¡ÈSn¬û y1QÀàa¹ürMœ; ö… 0ƒq½Á¨C"6_]-ÿh rEì«€. +8?bÃõUd›`ËdQ,Z(·¹ö)õýxûujß#Àáû²Äü'¸t>^à'†šº¸{¶|¤löôqO„Øl[ìK ï¬á[>Ûv–áôA?ðr7ØYâ±sK0ó!•ŒÌ•r{g@ËZ žó­%ÄÎ+ý¬*fŸe}ì=±÷ vV‘‰%sƒØúþfÄê·²˜oÈmI¹&óû`¶ NÞ\/׳÷]Ö3G.éC¬ù’ájÓ ÒÉ÷6×{.‰¥Œ¹¬>ïâÔb©ëŽ‹Üs?ßsgßÁ~WíÕeàÙóÞ“Zy}¥!½eªm%מ[†ž†zö!¼ˆzýÏvsín$¾«±¨Ö¨¼²\nût§|⣭ȓ|´Þ˜l)¦Z£ç£Æ؃ƒªF¦ÙR*¥î/öú÷Þõ%–LF½ržÕC~¾¬^×3Û 0ŒÐ7} ÊÁˆsšekÈivj>9¯k&˜rÉÐ\̘PŸ©ðÔ<öŠþelŽ­Ÿ7y1`˜-)Õ–a?ƒï1cÅàTÊ÷‘ƒ)¥—‰'?ÝŠžˆRÒ7ÌoÄo‘ù8°…p]Q’_,<9Ìjšsiøhñ‚Ò«‰jH«šD fvo‡Ê ,n³ ù>ql•ô8‹ìÚSmn:{ŸÌNgº•Ž]^Žž†zékÕpéžQ콿Gò±Ôke ö¯ˆQ“×8_à¼!‹.Cý„ag‰Mﮣº­ u†\} òq}çƒ-¨ßõ¡éÖz–ã‹©mN`¥)e¿³8YÝÇÖñlé;«¸kØFÖTË-b¬«EƒóL¿·wìjAp¨«GIõ—Wˆ­·71Û"5½K9 õ¬ªO-Áï 6\)³{ö÷ owŠ­Q±†Õò½v)çðüùï<¸®;[qÆ{îjÕõ•tn2-oœ|þ¡.ðú'¡×nÄ]ø8Ô8tÏOè¿»‡ÕC.xÍðEjNçLv/Ù{`×¾¼oκIa¹£•Òó ©fn½½UIotÒ#Ì–Sú ßÜ-‘Ùl\/†›ëõþ,7ÔitZ£FM…üïK8ù§ èK°zr”Ž3˜Ë“ý-¥¼oøV8¿DL¢ê+ùŸosL9šs`µ,zQbX”X[¸žJ훫Ě7–¡—-†çØp†xKp”±‡®”^XD|Ú듪}68kèmc–L®w=ö¬ˆyˆ&ì¢ìúRµøÌp¨ ùÝÎ8#5ß6喴ކªÞX»§{~x\…m³Ð»–û¹3ÿ½RJÈ+‡gÚˆ‡¬””†I8×#žýÆÛpákEüÚGl½·˜=è!wúêj±óóRûç;Õò‘EÄ4ó–å|”³V_X‚ó…ðJþÉé``‰Ço®ãŸíåZ?Þ€ý]ì7Ó¬cT±ŤªsKáç‘K)iÅ(OÉ>>ÍPÔéL{BÌ¿ó­·7pÇßZ…ëÎ:êym~1UX\!ŸWÚ‰3,‹ˆ„÷ÍòGŠlÝ‹5ç‹,?guË:äZ‰ù'–‡ +aY£ðºqöLz~ @}뎻ÛÅæ÷Öa- ~‰•ýóÄî'{pÖS=÷µ 6¼¿ž|uVrVü^ò1ì^âì%xO8@q½+ÔýŸ¸À§ÒÞt`ˆê^ÄXü~!$Ö +g2Ð §H 8b¥Óú›˜ˆ™'¦€©‚÷„½1!4ÂÒËÝå´ŠF>Âì{Ì©Ç&šxæo®TªÎ.A{È•„B{bb± ¯ÍPzj‘Òtk#ú3J)³?öúÔ²ËK¤´ÆI8!FçØ*iàX²ßÿ•Ý> qRË>6ÛýK¹ñ `?¬-°á2ONAMûÈ9ìþ‚A^^ýÅÈGˆ[ f{ÉÀO©b¹¸JˆµÇ.­à{Ÿº¨#tàÄ`¯žX_Étö½Fœª8·X*ey-øÆøø'p—{ìÐw~¾™o¾½–ötRYì€í°5fâ·M§}@ô#pv8ëøTSŽÜ6 ç¸Î)w’ˆçsAiVzà ÔàV!çN̬cq¦y²ÌòOç­*F¨ÍÓi¯¬ùÚ±ë³Ró{›°O/e[ûHfÜaËŠœ¹¶7á÷Ó~M6³‡¼ÎéXcRI¿3_wn1×õéV®õ£ÜÉÖcUŒÊ²SŒN³QÊgH +FæÊ,†FØ©i'&ƒU¨€¥ÍòQ©z€ùÐóË`“¬æƒ½7ø𦔸t;ñH™½’R=Q.ìc>ªsõùXÍDõ{®øÒ>ZŸŽÓ Fm‚z×yö[%f³RLº Ù6Óìš)…]³p–GŽÉ²UÏ›ÞÚ€|<-Ôƒ8³¥–ôÏÃÙ ¬+¼ì+©'P;Ã#$nzR¥9 >õ˜#‹cŽçÁ{e>EJorÓ™xÂ8¯˜ÓFÌn¹8·èÑfTL$Vùà7×ç=–‡bKu×MþìSæãˆsV,úìl))ìÚ2;cõ ò"Ø «Ö Mï¬Á}DN(´½³Q®e¿ƒ½O≠+þ0ú<è“§–M ½R–Ϧ <öÂÊòmœ¥-e×íèé…`ѯ ût™•ލ“À®ÃÚ¦ëÿpìÊ2:\yv>λ‚›!Î b}QŽÀ®-ü•!¯sÅ¥êK+ˆ ÎÞ³t´{.ÙiÅÐ<þØe|õõ%bj“#ò9zo8÷ÒþùV¬'bl…ÅY®=õíNýßyK§¾ó’†_xðµç a)Ö˜AþÇîÝpzXXBëìÁØ2{zÝ´®¯­úçëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇëÇÿÏ öÇï L k+k»ÀÅmƒ?ûŠ6ðHbHÂX[oö%ÿU. ‰ûƒÃccÒœ·Ò×D/OÎmŸóVçÅži! þ«ý×ù/qÞæ¼ØÅmÍjö öÝ%ÎËñ³«W®]ï¼J弨ô‹Ù÷}ÂÃÂcØuAQ!¿ÿì6üg¬íŠMÖ¬Y¹vÍê Λ6¯_·rýÚM›œ£éëë6¯\·zÓÆùz}}-ý¾¾~âÕ×ÿë÷ü¿}ý_~Ïá±¶ÂXÛ˜±¶~cm·8/^â,²ÿ]íì2Ö6þ÷«s <*dëïÿÞÂÞÁ«kÅ~z³è:ÖvÕ¾äð ½^’‡³È® â¼Ú™®é?μØMì¯[½rãfgƒóößkÙwÅÃÿŸÁ~äÕ³~ÿ´Ùy={ k6³ÿ¬fÿÄ3W³Wº€^&nòVçõk6nÜÌîµ›íA7A³¯—ÆÍKÐxé‚Í|…0s|xɇÌ}¸@3o¿ 3/ŸP³ƒ²æÀ>­ÆÝCÑhõ‡Ít!¹Ö˜€Ô‡f[ëC³¬µÁÉV¾j¼ù~Í®í5n$7iæmŒ7÷ÖGšp5û\ü4øj Žæk8l® 9bågÁEØê#Jl}BÒ­<´þ/ŸC(Bé‚-õ!E£´©–~þô·Ýý ìwè4ûw¹±ÏZŸfމœ^÷ô  Ÿñ“ÂÍøÐ4k¨œÒ«'AÍȘ×6 Sö˜‚%ߨ|;LCÓÔË‘ª ˜<Åä0N%cRÓPÔ:S(˜”äÅ[*˜œ†JT¦-Tciú²öòjLlbºLŽÎ¶%u +öY‰H·Qâ ^Ò0JS¤Z‚ŸÇtÒáÔÑrèkcL±½!ýý¤J¨•qÙv¤š’n­Ã´1o4ã” s(Au@Ž·Â´!&Š¥k¨hk9IÃFYH Ç&`Ò†O²æÃH]ê\Rd– &)¡®ªÓ˜éäCf"&õ#ÙûM·U³j'«§—òzgcJÙO 7‚’¬ º@ï½lh¸‡ÙïÁÄ(®gÂÑ ¤n”Ó9S)š#å´M’JíÅÄZöõú‰RZ½£–7ÚÏcEW).w ©idŸœJ'ÄIͦd]L䜆)'œ¬§“ìPq`‡÷´à¥s('úÂÌ¡° …f¿P3_m ™‡¯ª“S R)=zy*/ê5˜,Õ)Ñzö~ø vMÙÿC%sÿ>O &O¡ø*„—Øráe¶úC©VPõö²©O FoŒ°€*¦»·NƒÉjñHí¿ x w/Y³ÇÕGã…É×À4k9¦fœ”xl‚]k¬!!ÕÎZé5Rk8R`5 !ðˆ” ¡Ãû‡[A1V¤™k+&äŒÁ¤¥1ûÄ Lˉ…öJh¶ ©åŸŽi,5µÆQŽÊ¶±†bMé0ÛçÃb,Åx+¨A(©Ì6’K'`šÞPqn™Rsy¥!帓c'ÆfÛÂÎ1á¥"L‰Ð_Z“M@Dmªy=³Iëø‡›åÖ;Û1á(å˜T$„øÂ1:»Ìh*9‘Ù3&sKúæBeHo1Y¶4…’^ì`Èïœ-%•—"RFÓ” &bÙ}£I½Ð(+)«{º]hç+‡˜ØíÎ|äV`ëÍl©•ã,ôr$»—‰–ûÐÊæ^Þ²ÆÛC4ÑmŒ1¤&’ÂÖ|™/gÔ@‰¯J®bpÎ(LæÑ¥c Î‡ßãË›ù af¤°ÌÞ¦™¥äƉRXÎ`¿Å +L'+‘ùvPŒ û)>ÓÔ5”(AB#ÓF+Åvz5ÎB§2?êk©DØ©©u“ Ujt–™fƒ)Ucz“„)ˆtkLÀJYÇhŠ j˜¢g÷Ç–¨ì>rOj•£šXဩDRÙKnšD÷)«yŠ\óÖ*LAbJSªJ»®P§`¾“$†Ò3‹ Ç®¯5=³D%•‡…†,LËç!Èü§i¢—ùdæ31E»¢‰Uv¯ÄÈôјH‡ÍRŠ&`ª•&“1uR80S?4¹šT:ìùeCrÕD5±l‚’7~¿‹³pÏ3khª”&À.0ŸZ€µ¦– ̇ú•iòoxMŽ÷ÎVsÛg@…ÇX04þâsÇÈym30…F“Ð¥}sLûab$§iªœQ?‰”¡ì•cKDR!nŸ‰)69»~²’T0ëНð«PÃkåì^Â1ÉÃ|ìÊbX´¦à »r?à£q÷Ôj î¤™-ä5^žF^fÏg>‰J°ÒBÍáH‘ ,uì¾YaÁ‡D[b*ÚÃG¯ñƒÍ… k!<׊·øÛPž‡ñ©V˜ÆÚÂôM<Ų×\5NÄû‹-£$WO„w †¡$Ö8@ñÏmŸ«†S£ÌLÔ„åÛrñ–Pî …T{I!‚ùBø52Ýê JBÑ8øF¨ŠY6˜VT˺ça¢þ¶%G2ûd÷“&¢r[¦C±“¶RXæhRK©£é?cÉÐBš¢f÷MÍ<1Õ”tÍVKûç³ü`&Ô†ÔòþjÕ¥åðMjùÙÅðE†”r¨d‰¡qV4ÑÅÖr 9üÈ(L­ª•“”#•ä´úIP!…2¨ f5c"m!¦ …Ì–01‹‰C¶~HŽØØk=¤7:Aí ï k «JÕåå4Ûx{&µ0Y† (ä3¤¢“Û1¿Êâ˜Fã1˜7FÉev‡I6ØbùÀ|¨6JG²ºfbŸý­ÉXK˜~’ãJì¡,OÓðPå=RbO1=­y2ÖŠî}l†-¦øÈ§2_ E.0ŽÝ¿Ã¤ _G¯÷ƒ=ä¸PF׉F3ÐÄp"rl¡<+ø'ZJ‡Ò­¡¸µ<žùEN 7Gþ‚©F(f@¡ j´PFÀå:Ff¿q¥cH! »yŠ˜R1SÑ˸T+!¦l T©¤£—)¥—“"\P¢•Ä|)M²5é¼ꌰߤ“N˜l×B!M 1'Õæ'Å€x+ÞbRìfïqÞ4Õ•Jy kG¤ô¾(„Le±<‡å„y-3Èž¡þ{?H?›Òì„\j#ä£ÒON¥é@¿‘Ûá’ºJ6ËãÒêH­)©x¼š\1‘”‘˜mÀGQüM`6ƒ‰AøX¬¡ìãSi:ÊTie†Âî9ja—3&{i‘­W¬K(Pb¢ëÊ, +)=´ÏÂë$(W3;„M5æ·Ð#lãéÕŠ ‹¡¨ u*±òòb(fCŠø ŸIÓ–˜RÌï‰ Tš¬d¶U ¨ŠCŤvÆ|9»̾&Â÷CVL(K´ŒÒSó Î‚IIäð{r\ÁXL’ $0›M®v 5E|-±p,‘=Zb¾j¶˜¶/`kŒùcšÂ‡šXlÑX¨ãñÌÿ ‘GFáÚ྄]Ó Æ/X|U ™jcše¯¡ææ*Z[¬€o¤õƾ_€ÜF®zk¥Ðòù±îíU¤:\}m)M6Æ–ÛKmS¤£o.Ûïê?]/Eרûhá§#-”ô'¥öÒ +¹þê*LÓµ+˜ƒÉ|(Ì‘ +"È”Ñ,¿Lb÷5‰Å/¶Õ̓ӌ…ƒóá«àwÄ€ÃPG¢|© +ï®S˜ƒmªP|M=:Šˆ4•Éî#ò šNe÷6õ š´ÆD-® [¤¨Âr!9&Ï“©¤’…û•P1×RÏ#%ò2{¬#)õ÷‹¼“£°¨&B™‰Ù髉}¼šjf9¤Äâ¿ÀîÅ|ÄþÔ +ÔYP- eÉcW–C1›¦Y™ªiuä+é#¥ÊAʬšÚü(ÔPˆPyq(bA× RîH(¶§÷_:Žâsñ©¹Pž?€",¦œ¹Ðxª±”®ÙRíµå˜LØý Ë{€×ÅL­‚DÕPµxdžWaŸ +…<ü šFÏõmœ,Áo²v n!<ÏFêDhŠ|%b…ÌÖ?Ùgiÿ³Zÿö“¢Íµ¬þÒ«&"©%¼šP-¿¶ª½4ùZ~i1ˆP‹£)ç–Ó¿M”ËÎ.kÞ\5k1»e +ˆ_ ÔˆiŽbnÇ4|ðÙ]SAI‚â9¨:V‡5w1¾l,hZc¬9rRúàYMfdþ;4cr¨ð(‰uÉX¬@|TY½Aþê~1¹vrF­#©‘'Òý©‚Å,äüȠ좲ûu9г,¾È,¾ÀSÎÁl™è%Ù N4åÍòŠC,‡ •Ì(V7DfØR.Âb§ôû×Iq*JlýÂ&á‡hšø÷ç`½`MÁ?Ë%=sHÉŠ}^[éÀ\* xÎ×\X„ø u2¬wü¬¨@AGd¶FqJÚÁIVXg¤²Àþ&ûõÁ¬fö²@Í(²xǃ¸‚©{ò¡mSQËrþñTëÑt:[Ÿ¸~JZ¹ XŒ•ÂYÍÁb’ÉÖAHš5Ïâ1ˆ[°OéHõxP%p1Õî«gµ +`†^òB¼6Áu{”¹V +cuH„9”ï@¢>ò3Üg泓Y.l£T\^Šõ…Ø uX)¡r)—2ßüPŒ´äBã,õÁñ–ŽTŒãÂÓ¬¡† …C-«ËMŠI–èM1Ev|@’¥/êu%ÆÂG6G=†z +×MïguGR“euºž5j{D ‚BL>«q‹Ø=BžVzzh \ç“í´¾àÇrŽMáºl‡uןþïûußnJ&)ùÃÓ›&éC,ý$Õ t7¡ùýõRÝk¥¤.8Á +=(V` Èñ9cà7©Îi@…ÕÒ'g@aИÂr‚¸¬1jlª-òO5£|"êÐT |Ž5Eµ«µYŽd ¥(RRXn • ´:'(LXBJ–©“Èײ˜z å°{æ³MJ}Ãó¥ºk«dRi.GªðG ·×‹?”N¿ôã_b(©¾Ä•ŽC~M +³G +Ç‚Þ@מÙìy|'â5¨¨-„(öóð•è Å—Ûó‡3FQ‚œ ©ÁäÊ ²;g’ +5Ëq ¢B>?ÇòjPH©5±dœ“o‹µÛ$ËÖ‚ŠzŸY\p;à¡Á}פY¡~qÖ´~’­@€Ú´^ +5—"ólá·%æSÐÿ€ åŒÌÈPx€ÂDÚ '¶–FAµO8œ=šcuµ«i|uþ?9ÈŒ'Ù×áûÄÃÌvC2­¡*‰z*ðœ’`Õ>¨ûñ¡éÖX‡ú€#–´Æ˜Eß¾“Õ{–ÿ(ÎM}äȨ;X¬ž…|T*šno $¨ fd5.Ô„3/½Ä‹¿é¸óÿÍ“oür=ˆXǨã|tF"œ‚ÔE8áØ›ËÅIJqˆE|0ûÛPOAÞ +{Ìïq•Jeñ½'c^ûlä¢ðßPfõú(5žåPbAÞõiæËɇBõê¸T¯—:@Å–(gSý›Û>S-ì˜<=C5£ÖÉÞ`R\Ì®ŸJùryß<¾ëî¢"¥TN@?“”!J[ç(C‹„æ7ðý/÷òßí!òcë§›¥ºÛk¡v(G–ŽA¬ý† ÏbòUáä§›¤ú×KY-S +ᙣ¡H.´|±…ïyº“ÔVAßÊéš.fwšr„£×—Š'îl‘:ï–»í•;îº@ÉĤfÈâJ~Û Ô¥¤ê5KÄ%ÐQŠú)?fJåÕeRíÍ•âñO6º{ë5èeÀ.¼<ô¦zÙÖ:XÝOêò)£‘o(¨9YýU4Z›ÌîÑçA?AŠ+·—YÝÅrôí÷r‡˜ÿ ʰFMµ'¨II”[ËqÕãá—‘ï ' EwØ$Þåøšñ ¢ëÄ s)<ÇFN8:^ Î Û„ò#òPÑêÕAŽ]êwf5LQ+.˜”>PF³.¹h:Ö6™¿•믯VŠºœÕ‚îÙ¬žÕEä Pj§~ ˆEM·×‰5o-1ÄgªÛX­CP‚„ÎÇ;Y½¾AŠ=6ŽúûJìõºT÷ÆJÐÐCžŽµŠÈT¯c½äÚA¹žöר}„øç÷ÏUóNΠz=Õë F°{K}çÒáùT/ãk‰Ùörå©Å¤|„>Ñ"FÈ=÷ö+#_ùÊžqâÐnúη-"œ]ó`–‹‡²ØÎ ÿº_£UäD¸fÅg ; qEö°Mä6¤^xâãMb×Ý]bÛ§ÛH¡ï +—Mo®“ˆÙåL*ŸÝ_íS‡¿öõN¼·žì³âÜ"ìÑHG/,"¶š[+¤üg>¶dŒöG¹psøWµ Ï÷1 } !"k4Ôf¹Àt+ì-˜õN´ß]óæzmè?$²<œù.•ùvøERecöG4Dô „Çl +„/¨Ô-¢¼ËùZD%h5&å~Äø—Ìvªÿ@‹X-ŠÜÜÏÛH9â Ö#bƒÈjO(§ÂÖÈO&×L¤}:Ôö´ž¨‡ž×:C*=;_ªº²Ôä¿Øß‡ÊrÆÌ'¨žaÿ€jhV!' Ï¤LxiÖ,ùRøNÄä¬.7²Ü†TûÙ÷PŸÓÏÓ^bûL¨©Jµ·VQ?":×ù<âËÇ£Ø8cEuÑ"šfŠ#_{RüH- ñõU5dSØÏ‰„*x¦ ò˜~§EL-ïÍøŠš5Ú¤xùÎzCñÙE +Ë]¤tôHYM„žgÑð\"µTŸ^ +J™ÐñÅ6±áÚ*ÐLð³PF–*¯/åZlQʤ„Ý5ý*Úc@ÞÍòuì™ÁGJØúf>½YR©!90öÜ@‘ž¸ñ½ß¹ˆ¬¶%eY–AÑ>´ œ•@Ÿ5¿{t,õðoVëCR­|t¡fîûô<ÍAËæÃ3Gs:¶v¶æAuD? gGîrj"ôØ×­¡ú‹ˆö8пd9•Øvo»Ruc%‘ Ø5Ú¿ØÆ t‚¤õ?Ô©‰á.h<=xt8k´T毩?y8u4î7íkÅXÑçÐ8+\+%ŠÅnc³ìø°dòC”[4¾µAi}o;ùEäœèu‚ÞÕxs­xâöFä™PPÄ=…oN¼µÖ¤Dzl +í£µ;c•”¯­‘†¾v‡B?ü6öPŒiÌ——÷ÌWúî4 =Ñ©ƒßúßàÚïo&Z['RÅÙ…\ÛD‹Z¿ØB´V?ã¼…‡·¿Æ[‰51 Aô¡ˆ˜]Ò>¢E˜hê¿Ò"â^Ñ"’¬…€p ^‰0§|{Â,Î ­w¶I'?Ù"±¼“z•gÃPÍ™q|²Zra‘Øóí>ið'w¾÷Ï.èK+…gæÉÙÓ…áï€ÄF5/T±Q/á|û ŠfBñx:‘Þ0 u9úG¨ÕQÿ‚î‰ü=454u´!¶|hVØû„ò¬Ðôù)gp]j…w>±n<ìS«†›»î÷ѸìuÕ¸¹úi|¤ÚEÞ)t?Ü%Z(›£‡¥ãA&Š·¦z¢öúZœù‚ +‡“¬%VK㽫=w\ÅÆ7¨,¶Qï=½Æ‘öÿp–#Š®}Î\÷ƒRÿ·nD‹¨»º6ÃýA‹Hû‘8Ú@´ˆó+¡¶¯&–O@oMÇÖ³',×4d·L7à,òưÔQèµi9ƒF<e©¦ÔM"•zœ¹(˜_{%?eÔ“ïn‘?ØdÌïqÆýDÿT øµ´k.ÔŽõ-7V‹gŸûȃÏzìÙ'¦¡§ÔsKÆÑOZ¹úàè­ÚìWZ>ÛaªÙYüÎÀùŽ‹K ¥ý г'ò$íCW9 º£T{z‰xæ‘—|ëA°ñÆHÐ=\=5 ÓY¶Þ/öy˃ݹ®6Ý4íæO6B5*Ö´òËÐÿ7.XÍ–Qï„}Q®…Õ¦,WÏ>á¹Áo\@‹¡\,î›mÚŸèŸÉ96u±â¥D‹H¯™HuTõÐbô¼Ô¢öÙD‹(6Ñ"”on‚ÔôYîoHbõ@A3‘ÙXJjÃìûR÷}©÷Ñ~ªOzž¹`ÏDïøÆÿx7ãâ]ßûqîÇ[+˜TÅéœAçlçð÷¡šÞzw·ÒûÔU¨ÿh ®l‡ö„@ÝÁ^*jtôÒY¤œÄÞx/Öðæƒ`íéŸ]°„cï®Óº&Cµ&ê%Ú>R3ž|q^çL¨¬ ½/öÂÞÝY>è¾Ï“È£Z…ÅwçÕ˜l;#â袑I£àß Õt®X)jœAJÉØ;ÂÙ2œùaqQ†Êråµe†ü9ØBþK„6ìQb…ÝKœƒÏA~²ž_4Žzý‡sl”¤&VGŸ™¯ÔÝXÿGÐʳAcõkõURq†íJé•ÔWGßÄØñõAë圎é¨IЋÂyÿÔºÉñùãÔÌ*'RÇÿîˆ{Ë ?Ûg¼þEHÀ‡J/¿ÐcŸÊË]¯Al¢z ½ÐkÞX +b­Ð÷Í~8…î'»¤¦7*G/-QJ†çm{þ“Ñ£c‹ÇÒì¿Ð"xV¿Ò¾PqçlÍQOèÛ¾Øâ]dËE•Ù1™!–\\R4Qç‹:X­rr–üŠ8óxuV'om@Ì6”Œ,@î÷ª¿J5mÅÐB±ãó]jçýJ×ý}BÿWï„WÄ»ÓÏüþOâÝcïp“ÖúGÌI9¾æÌ¢B±øs‡ A©äì<œYPÊjžLö_óöJ9»{:ìþµ™8ðÜUª:³ˆèŽÅgç‚$ͧwä³'¡×‚³0BÆñIº$+ì™É,–#RúŸzÈ,WDÃÌqyÑYœé Ôcô3¥H–{ ›L2U£8¨ Ç®¯ >ó ¥Ê9¦3¨S³³:ƒÎèâ,cõÕ Ðù ì7`åPŠö©°¿‡½!ô(pVA-êv¦så ;`± +–G¥ÖN¢GÑQׂ9|jF|d·M½ZCAóLµòÌRœïAwDÎ [íà2ª~àÛ]tF!¦h Î⌠+õÛïmEÏêôäÛQc}•]Dgþà÷QÏÖ€jÁjœ]Ék™AkÄÉúk+APV +{Mï© ŽØpy%×÷`'×þÅ&áè¹BúñI8a"±ÿ'’Ó»ë‰*”]?ªúô»AÚA¦òÒ¾åöîÄ»k¨oºTìQ{ô‘‰@Yue9Hᆊ³KéLÎãì"ÖNù…|ÿOûä¡_½ä’+‹è| ÈZÈËÊG°ša /¤¤Ìê +¶7 ¡µ}TÔ”¨»3ONÆéo`ù r]Ðqr;¦cß{~bXÅ}Üc!*u4mÍéž=ZÔ>|"¨È'œ„ø²± z£N}”‹`¹tþ°³|ì³õÈ;äì¾›c ÇÒ~¼!Ê‚ò°˜L;•ÅCRЧóEÔ勵ƒº½Ôòó‹¨Þ¨¹ºŒ¨&8ÎîÿQœµbqõ (;Ì>ÔÚkk”ª«+po±g½z¢J ‰ýKô qÆ}þ¢¡¹Ôž)ó½´—žÇò )µlùQГ°× ­»¾šHè§cŸ«¸w‘Ëà¯ëo¬W®¬Agê'¶Í!^ùÎë{¶ tG9¹ÖAŒÍ±ÃkfyÌaeÄ´äzGz¯x?¬6€í¿ ·Í3ÊõÜß…¾ +½§<öÚ@†?Æì§ñÖz"d×^Yξ¶5·\# ¼ØÇ ¿Ø‹^¨X<8[*êwÆ9+ôz¸Ž/·È5·×P_š­ œ×C½Mynõ¹ÅØ+&r{ǧ[à`Û˜÷Àyö;–Ëåçè¼,ö°Ï‹žÎãÇ?Z/Œüä¦ï|´EN¬™À…ÓYIô±wõ.—_\¬duN'jKFÓôŠØX@û@Ù 47B{ÿ© ŽDyfþM­8µ„b?Õí3èû‘EvRD }Ðõð|[œEAMïa:Sk‰Þ’Î?Ö=c.&Ç– K·a)¿g¦XÿÁZáä—›°@&cu½¹ŽùXäÅ8›Kt:ì—esõ çR¤ºwט®Áñ©ˆ©ôšq©úæJ¡ùî&Pe©žg¾vs¢þEÝó¨.Eþ"«‰•£×–aOÑÔœZ–Zym…ÔôÑFÊY‘‡¥7N¦:'weåAè ³xI~!¿kìEªw(]Ô¿dvÏ®ëbCAÜ­ô1¡éÆZÚCÁõ®î_@=Aì aß=ã’žÙ”?±xÆ÷|¹Sh¹µö­bKíAAÃ>¿rìò*ôÓĆw×¶J´úÖ6Ù¯éêjøe¾ùiŠu,f1ûìÊiA I¨òâŠýCßÔ<Ý%– ÍÁÏ¢¨ïz¾{RBÝGkP¿pí¶ÈC/¼…¡ŸòO¶“Ý»ÜF¾óî6³6Âc•ÕÇëÑóVJN͇ÿAÌQ+ÞX&5\_E=P¨Ï<ñå;înŽÍ% +zU1Vï@wéûaßûÓn±á‹ ¸Žð8Ã*6|¼NH=î(fvN‘JÏÌz¿Ù£ <ó9ú˜ëB ‚=OäÃè:cP<\dK³*ùg窹ý³q†Œ¨@ wàL2|píU–G¼½šrŽÂ³ÎRѹ¹bõÕ%Ü öw‘³¦·:qI øì®)BÁéÙ\óuÜ™¿Îýê­;óoûõWÿÓ›ïßýùþzH¸ö›$œú›7ü·}üП÷K~Ô©7Ÿ…Þ{¯¾ÿ4F|ó{UøÉUjùt›Y×ct¦útv•]3Ð Ù:]$×¾½Zêyº×xê18rW9Ôw— ì½£UZ?ÙEäâ¤cŽÆœºÆ¨+ù·ÛÑŸQŽÝZ‡s|×Ãí QÍÉr{iø;Oqäg±ï×ýb÷7{°o‚ŒÈÏõ=ß%€Úûl'×r‡úÒÒ±·VÁòCßî‡o»žïØ™Zq~)õRé¼è¥%ðcø,•ž] 4Ü\%œø|#7ðݾïÙaèÙAeä™<ôÄH®ûëxèßàµs÷·ÂNþkoW²î{âNâ®3q‚vÓ½´ 'JB B‚{\wH°@\‘àî\â#™={}U+3÷ì{ÏùÎÝçyn÷³¦ÎtU½õJ­U¿?²k"µW];BféR÷:yHEšÊóÓ†`ñÝJxÖ7-êù ±°ìýº´ÏZô¼óõ°›܃ü[q^“1Û s;à÷ºqaA» ý°Ÿ"B«v¡åÛñ˜¶ý¼¬OÊda?-~ÞtJ\ØhŽrqNNf é`™Ýª¨VB*IèZ*ªì€(¡NCð°[@çbTl½ÒÒÌõTr—&}·8wcª»ÉäNeãõÆy–äÍ/ZdHév¤+ô{±•UgKhQfÏiÝx²Åcv½ÓòÊDTÒae{Q eó¨ªýBß§[Ðõ/’´®0mP­AQ׬‡õÓBÒ-s鑽÷.\ÍkÙÁ}ÀhbÏ¿cÄë¯b¼ô7S²ø«Vù3~-cNvv ¾¿Nu}t&ë†ÎÑ%#§QßIj«=DuM΂—ÃVäÓ1!ù|T$zÙzZò¬ÙÚ8¿Ñ\r³‰'ŽoÐ'µ¥R:4 ï9ˆÆ•y¶™JêVÝê42¹ÕB“z´„þ϶¢ZÑÄ#aµØ)x‘ÉŸ¹ÆžëáèÜñ+VÉ )|¢ót(>Rwz9ÔÝQ#º ‡¦ ºôó^3á³–c‚W=VÂÛ½‘9¦E$¶Änö«Ðwzyt~EÁ1ÄóÇ8xÞCêî#"öÎë%Éü>ý¸K(|Ð)6Y˜¼ª¸ |ToB¥÷ja)͇ðôUx¨ ›£BÞnGv‰lŒ¼Õ¯%¸Ù­‹Î× +²z‘mJ²›ÉÝ:u³I‹HíPA¾Nƒþ/©C³ÀÓÞ+ãCjüœq 2{D‡¼;`€çŽé÷>¹8Ô“Q ý|úAšxùAL¿:.,ì7Þ‡mÌë!…­Ñ£N3úQ—ˆÌïç¡5fþÃ/XÁCüé'’.úp +ýÓùE ¨î¾$ª®w4ySnkò¬üŒ8¯^BewP™C:è·ÑáE»Q,`ã +̈WÄ‚‚A1:ªEC_`v»Â„NêQç™YË™_š€Ô)ѹPãâR{É‹Zaþ ± `X"º×+guâìVRÖ©+Ì4¤3ui¿'?#µ+úFþRZ±—U /Úƒòáu8ÏC+öÓ{u…iïuÈÔAu~ÖgU,~ô/ýëa^Öwen)ƒó:˜SØÐ—E£Í‚ÑþxÓç³Dçg{jäƒ'9òÕ]<^l1ô@z²çnŒh¬%H8øÞ_Ò×lÒ_#=Þó*AÜRï ûQD¾ýb&(<)ªh½*yÝv^˜×%–ä6™˜ÖX›½.²7}\qNô Q‚g~ÖÄ»•·ûù’¦ãô½aœˆm<€ÖÿК± ³Ëú!®äV#fz¿ÞÒøn£Õ›dZ¯&láfŸ6™ÛÅt˜_5Ÿ¿j³Æò~×ÇÆÈg£AiÏ9AÑÀIêù°„|PúHúQ¯HTØaJ?h£©¬n=<£O]ÙÍ‘<®;†ì[ò¬æ” ·‹"ï‘·û ¹=¤èa»©ày)q÷‹.ž÷Á€¾×ƒ½|üñA¼‘E_,éòAº¦ïU9p–ª{‘ªï;O¼Q…ŠMÄËa!ñà=†?Á:dq‡ÕÚuIÐßác õ*^XãÞí?Õ}bqi­Õ“Wvâøf-*øñfþ½oÚøý¯zØëOþtŒägýªŠÅ ïå'~U&ëH2»pÓü†“’Ò²+ÆÕeîf•¥ž&EU¢—M§Å÷;„¬^#6W¹5¬ê4Æ9:}Tæ„{EŽ·–aqMû°Â_¸xÅWsrø“«èce h¼*Pðñ½ýË€¯àc›ýeä:56â%«>Ù%=Û™åS^s-æxß½(bì77ÑHGð±÷cM+¥¢¡®@qo‡?ÙÜgûÓ†z;nE¿·Ä2¿©áic*âWí6&%5.’']'o†Ž‘Ç êÙ€HTÙnoÒU$ªît¼í´Vt_—Õ_W58›4_Vv^¿n¶¾k¶µŸ§_÷Y‘oûÍD¯Z¡=ÖY‹‹«Î‰JêÏAŸglts@‰ïÿp/¶i'/÷Ÿš¼gŒQ6rLØÓê#¨ ‘Œ4„ÚoF:oˆÛÈî÷üª˜ò«þ0Á«~±Âê>Ÿ ßpŒ·ùŠ?6„Z <Š}ì"ëÞŸ'_J¨;Ã<ìÝv2äÍ6"²y/qûƒzOø¢ÍÊøu­­äU¤ ÎRœ×f,yØ`nœ×`J=îÑOßKðç4ýºËJXÜvVôªåŒèi÷ á“^s<ï›þhŒGÁøK¿î¶ÕÕ9 +›Ý$õ7LÊ"N¾ÏK´î¾x¼ÿaœåÈëáX£¯¨«ÎGXÝdO¾1¡+»ÏÑn&ƒï",†_EŸê¹—`Ó™w©51ζ9.ê|{rì©î¬(ã±¢j|È kúå4ïÑïhýGt!TAèš±‚Hy¯LféÒ·Fu‘oC± s{±‚›òa/U2~ܤ÷]ˆyO‘Ô´¹Äß²ïy´Eß›hAC‡VöÍÔð!£Ê÷~±šgá0Ñ@פ•¬Ðåî*QA‹¹yß›(ëžûI—ÚÓÓOt=J4n­ðEq¾ßI³Û„°ŸÞVÚš´ùIÞÔ] owpÅ÷»„ÈÏнí§{²b ÍÅ$TzGùUùG#´Ì4/, 1z$ul‘²6™Uå™_å™^éeÓ™-†vk9Py¢ç^Œx´>X4Ú`Ñÿ:Šj»Â+dô‰¬oÚXâÀAÊëézòÖç£&Ïš.ŠŸöÀ3þÐÀƒ+·ò"¶b/¾R’î?«¾qÇ{ŸÆ7„ ºÚþ‘N­ÁAõ>µnÒÜf§ˆ¢fûÐêv»à²†«a%uaUMö!õö!Õðumý•°ª*ÇðÂj爌j÷È jßX›¶´ãÑ7!±&ó§R¼åsü§ xøO>•û•O= +÷™ ²?p©”/š¢ì~’zð•T÷ÙŠ‡;‚ý]>tÿ{/ñhs¨ècm(96ä!øÔë'­ +3®—R]ýNü¿ññçïqaqÓiIGåuñhCˆÉè;©GSpr@ëÔ‹™·,ú_D‰‡Ë|-_ÄÈ‹;6p/úJWDLH£WT~ƒ“´¬ùJXI›}è›vûÐRøXÔr%´¨ùJèóLj8ïRëÝ£ÒkÜ£’k=¢|êb$‹ƒ9ÕŒ€Vµ‰ŸÍ¨ +Œ E…£fâæ¢ÒÎó&Už&me¦½Âwíç°¬1uü戺(«=î±—¶ÛŠJ`L~ýÙ\ÜÔìPçŸêÚ(M5í.“ +ŠºOáw~Óå'¶îò?kQO‡…‚ŽvKíÉ)§»ï%™ —A_Xm2R!úÒb1Xuµ#*1¡Ù-6¦Ù3Ѧ+3Y¶Ì':½Ì+Ê©%ÚWRRhݤ“ð·cã®ïÎ[ÆëüvýÛÖí¹©! 9A96Ý÷nZõDÓmµWµ5=›C3Ð8¡ãu½CÄÝFçˆôZ·ˆü&Lj²6û°Ô6çècƒy1Ä/ƒîÜ!æ„ÑÈ?­yß;üÛGW“ѧÁÎ ±õ7bâ«<#3ʼ"ë#£Ïµ&GžoM‰>Ù™%• •›>—ЇÚCÄïÛÅÝ~‚Ç¿XwÿÔ¼øÅÒ¼£:ò|GfêÙά„cïób̆_FZ =|è½ýz…ô~m:Öw?Ê|ä±Ô¨—9eÔ9~Œ|ßèp¬ïA¬{kD¶qKÑ5ÎFÏ0óëCÿ§+ ¯$Íå8'Í3LîØaTû»îw>ÕŸÚî×èe5pOjô+sÑ Ÿ1ÖbDz£ŒXo„èŽ2”Á8cnô…9oô¹Dmð¦¿5xãŸ?»t1"ýÈŽ ܇Œ6ñî»…¨¢óªIcƒïÉ®üDçÆÈ”ÈÚë‰5±WÛcSŃõ‚Öv7º¥×AØRï.n >ßv3ɵ!"ñj}lÂÝϨÇï\#ì[ã Ï~+­ 7,‰¶(ˆ±íLJõoñKuk +O<Ý“Cý6pìës ¶CßYn5XcÝ“gÛÓêëÓ⟠øØéG |r$ú¾:ðšsÃ2ÆPïÁøýÐØ…zÁ9Ku*U^ÿ·3Â_ꃮ×ùǤUxHaÜ“Þ-óúTDXwÜŒ°ê»AŽyÑ­CW©7-a?F·÷¹œèÍ‹÷j JÌ/u“¾®tŠ((uÊ}ç¿ë.}öÎUš^îmÙcìHY8Н~uþ±ÏÊ]¤ÅNaYÐgUÕ_ ï° ú2èë¼Züc°ß?¸êt1<£oÌ¥cý÷¢nµ¹Ä”u\}Úæ -hsˆ îðI~« ~«@ñÐt¼TÊýÕVï£bè±é•Q90oˆ®õŽEy¿ýÏSÆŠÂÒëÜ¢^Cÿö¼Ý>,·Û>4·×>œþÞvà çã޽t¶ºžü¼t%X=aX€¥@,†ÇJøü§É‹Á¶Å뀚šèˆeµ%rJ‡H°~ÎR°,‚µÌ[fË. '¬K'¯+¶‚ÕKwƒM›”Á® P»Q7ÿèKæ A#Àúÿ¸D¼c,ï>Ù˜ô•K³ÞyÅ”¼sWá^\íö¬Ü9"©Ö#:ºÚ'öz}@¢G}HBÒ;Ÿ˜ûì˜zHãʯńW^6~&Åû~¹LŽ »;¶‡Å4u\ií² †s(ÿ>â¡ÛÆpŽæü²õ¨ó¹ºWnÎ6pÉ_ X¾R7çóv‚?÷è>b”tcZÖ«ðN€µ+·Õ ×€• ÖÂ6Ì3À40LSá1 ¾RóÀJ¹ù`­ÂJ°mŸ8b&§rùÅtÕøñeZŒ6÷3s†÷ sÅxôeˆpxÀ_Ð>î)ìô öœx/æZC`\ü;ŸÈ´b/éíRO)ô‹‘%ÞQO*\¤o+ÂoUxDB,}Qê*}[â^RéžZãYç×ÙiÈ Ø„~î¹’ôËÈ…€Ó})ᆿ1§4J™=ê^o‹®ÈìPRÖ¯›·lš¦çdu¼³èzfÌÓcؾSþ²¹ÌÏ‚‘2Oé«iì ÿHi±¯4ºØ72ºüZdlÉõ¨ôïÈ[Å^‘ùE‘/‹Ý¤…ÅnOÞ¸GäÁ¹™[á&}Xæù®Ú1üF}@<ý¥ÏWð©Õÿ壻]WtÌ›Nƒ»íB£;\£0†‡O‚‹6B;œ ?úm“௒e[Æf<Ð/•ÿqCŸÿŸ7Y¶5è/QÌ“dæÀÇ™`¢ìLøj>X8g3غÇhø4,àÁ¸1θ@e)é 8Õu;6«È+²¤Ø5<ãgdV¹G$ô1á¯ÊœÃ¼ê‚bM‡ž†z×Ç!Û|\ê‘Wî*­ðŽ<Õ“)ø¥+€þ­ÝÏ¥=8®áý¥àðN×ÎoŒµFÔÛ¥»냕ÓçÃ6LfÿDø Ñó°Mó ÅÍ…ÏÐs™ÿÔšÿó&öî_Û-ïhì¦Âo>œ‹?9 TüºçkÞe~2cŽÓ}C>’Þú ó®'ºr¢.7ÅÆÚ7GżysYh“h cK¯G¡q,xãõºÄ•7äKŸ»E¶U¸D÷Õ8Eˆ>TøÃÏJ¿¡¹#Ìiþ7æŠN%£¥dhæÀú}Cm”ý«GÐåÿ곓ÖÕ« ÁV­Ëàˆ{Ã,Íæ(ñ±ÆáRURpÂk¿¨Ü·^ÑÏŠÝ¢žyÄ<-s{XîýªØ=ºôµGô›"÷Èr_©{]hLpµotPíõ¨Œ:XwÕ:KïV»F$U{Eñ¾0—´Þ0{5}îÏSµº*»më^°PvkƒSØ_ñ¿Ûœ,Ûÿr¬¢Çÿ³ ?,q"ü|;÷~ÌCö9zo2¼Oƒ^uXæÈ¯K5Àƃ§À^Ó4Y­VF ÿÔïl:ø80§Ì="¨Â/êtWF$ª‡mÚR£P^†êJ˜{EúÂÇ«M‘Ñ'zr¤èýœJ·ˆZ˜³·6Ù‡ýÈuíC›ÝcÍG +¤0¿©^´lÑÂÿß¾Ÿmëßï¡öÊýõÙvOd{f*ì¡©ð>‹½?<ê$÷W[§°óoÁìà§§€ÒÉûòZw™-Ø coÙõ ô|}z´ôÝ Ö϶¥F6y$T–¸E·À1l-sKè(õHî¨tMhªqŽ~óÎ-ÚgÔÓ÷¨„2Ÿ(½qF¼CY æÏP`çÖåþ§·¿Ûù_ÝP›¦ü5¦á}2ÛþYðcâÜÝ`Õ lR±»D‰2‡3˜eŸ+˶{ד^úFÝåýê­Gì»b÷„šb”ê +פ%î±…%n‘)%ÞRçÚˆHtxÔEÂø.®÷”Z ÜÑ­fô~Þ°óÜŽÞPŽýÍrÿ2¦2}6~: ÞçÈ,óå–Y2 à8)@Ÿ´Æø@A~˜5a-˜)·Ì™²,\pü¤ì”Ž¿•W-f¶ÑÃÅ.0o‘Âx€bB¤[mh´èCu€ñØ« Ó7¥ÐÇD>ƒ¾2†äkPN~ úÖ’ +'igÇ刻°æ´ïŒˆ2øÆXj¥½_PW ÊÍü¿Œ øO¾½þ;^ y:z%Ô&ÅÉëÀ™»ÀâyJ`‘Â~ 8X0w˜7c;˜7i˜;m+˜‹žOÝL‡·@¬ÝiögÉiä09}Ì «öûÖ ·BQn–ÿÒ;2ƾîRÏôÎbåî©Ãå^·†jÜoŽÖ»¥7¹¤tÖ;%TW»$¢ºK­–Ù;KîÿüÛ¢ö¡<—¢üJ0g‚"|5 Ž"Šü0~Ê.¾d˜?a#P˜´(LÙæMß .Õ«6ÂÜOË줓eöRe Î1øÌ˜ ߺľö‹|ðüZ\y‘{lM‰[lm©{Bm•Kly‰kli©[l~¹[d1ô§¯Ë]¢ÐûQ•ÞRõFõ§mªÿã¶üí7‘˜ÊzöI=ŸÌú‘)=Ÿ ÇQQ~5X Çi‰Ân°tÁn°hé°d&X¶† ­áƒEk¹@q‰&˜¿J,Ý@-z¡à s× •wÌ6Ñû—.á/ƒ"Ù¼¥ôFä“7)ÌÍ¢b*¼¤0ÏŒFµGn1Ì_`.VYéÙ\êYZæ Û(Õÿʘ8,»f—Œ­³ÿív!?9™õ Øç?|à98•ÍFfù² Á¢©Á¢9ÛÀ’…GÀº-b°aÿ°z·›?L\–L[Mÿ (ÎÝ +}ó&°`Î8ÿ€EsE…C`žÂ¶mK7š€¥kD`õ6k°I×ì¶È—;<0G¥€Ù¨VÁì5üÀ;Ö’í‹rЯ¼b‹ÝcZá85V;EöT»Ä£9×ÛìœÖÓà’ÒÓê˜ü®ÚÖ¾aêÍÌáu?ëümóG[;~(žÍ•]æÊÁ + Î+8çæÉ­€ï­3á΂‡Â¤5`þôͰm;Á‚E{¡}ªB›4‹wš€e{mÀ*5g°ÎÐl¢ãÁ&" ì0&{(ä×ùÊÕÌr¸â²]IrˆWix¸_i`D%̽`ÛUºD=1®ºÂ9ª§Ú9f Ö9¶§Î)¶¨Ô5úbc|„æ;æà¢Y‹ÿíqû{¾!"Õ<9E 8qlÓbhóàû3`Äžùã3Ù¥@qÊFèáØMÛýæn°dÁ°b5Öì:Ö±kµÜÁ:u7°Bù +X¦y,×ty`»ñMپݳTž2›8£ÌqÁ@©Ë…Šä@Ï¢ˆ°çn$6¼ðNnyë^Tä…j†àߨKíñ±%°Nh­qd×!…^_SÉeÖ-Z´íߎåØ\ åˆ0zM€±lÚJèû×Å «¡Ÿ_-r>k› +ð>Ovlß*°pÚ 0môð˜ýX0úÿ5º`åS°r«Xµã4X{ج5Œ«tÀ«û²û|š§¹Ï¬VocT`l-î}é}¶1-8ôM`äý—^Òº7îQ­°mUE®áϪœ"Þ7\ ýØì?Úé\Ó蔘Tåaô}Ðv‹Ðþÿ:f?ràÿxý·/ù‘ O£5 εyp ±Ç<¹å@qÖ6v¬—©CÔ‹¡.ß)Ë·SЧ‚%kuâbU ¸J (n7+”àœ3 +;OåÉí i›¡”Í,R®cvªÖ1û¸_þ8mÕž}÷Ì?<¾øZô1o`. m4º³Á9¡¿É)i¸Å)ùS‹cÒ`½kJ_3ZK’êt1œ5+÷ÿ[ã&÷/þñ‡ÿ˜ Û³é›ÀÊåª`ÕJذh…:ôÊ`ÁBè?îƒ>Î38×–.:–,>–)ª€¥«9`Ù¬ÞylÔt[±°íx¡ìNšÉ;B;§*=a–Jû¾X­„Ù©=Àp°OÆ=|¼ß†‡¿ +’Öy§—•¸F?}ëůþfÆyÁè=„õEÉ73º·Ûè±Öªbލ\/SPœ±ú¿mר6…Í‘—œÊfY(B/sà8-˜µ,ñxÝ+ð“–=X·Ï¬ÛÄ«WË ¿\2w 6WÀ«0°Ù©pÂßwwúUNÙåõnò¶ËO'ls~%¿Ç§fêÿÎé{|[§ïq.Ÿ¼×¾h’’WÝ µ'̵fæò]fJPçõfƒv3£­×Ê`ú=ŒP¿ƒðÇ™Ëv1(gAíÊ‚¹³k}X ‡ä5€xâ;¢à3Æñº¿XY`'³fÃáÿÆ.eÙ1C~}¾"̇ª€+4âF.Ø vlÅ}ÀfüØ& »NÝ–ÛÔ4óP6³LùŸzfZ=sù¿ƒ-söžÈ”Û&ô»%‘2¬oËv«žyÄ·KA5æËR'ÌN˜ŸÕû…1á}·¥?—yê 2‚£UËô#;6rCÊ6ùpUƒ…/¾'îÿaˆ¥ÿC•Îù§‘ðÑ7SúÙ'SAÁ°Xò¤ñ„¨¸ë<ºÞɰŒ1RÈÍ“ûïãZA3mîäU0×ß –¯äU?›€5ûNƒõZWÀž7Ø|ôØzøøy76lÖ7jÍ{`/ ³ÿâ“I®–MUKûsµV£®Û 3¦øço.V½wğʯñ¿~µÇ>}wÐëb裙¿nÖMجw‡ÙmPÍp9U É«cL±¶±³t{³ý¾ÑÝbøy´ùÀë(á‡Þ²yÌžWɈ±úï'éþn/φĺê«!^uAÑêIã«V¯ÜûoØ¥,ªÚ`îçl§Â´µ`É’½`Ý.#°SÛìýÀ <8á@xùåRæ'­ï ËŒ_~|æ†ÿZç`ôÏ/°ß¯ðþè°7ü9©õáhbxzß±þÆ‚ú8àe0À˜ ,^ªg1EÛ*h¢~ £Ë¯a, sþØÏu½½ÿˆ1"ûFÝNõ܉;Ö—{±=-ùTon¢!×P§ä©°—;D9­õlXÄMû¸GëRâ´µ›²uÚu› Çm¹â>°~ æ¹×Á>ë7òûýzg*¥0ŠÐööýÄú¿2úßKÝoŒH­ƒQR­avi2š¿3ǯ4GHsj\#bë<¤nAÂñ×h EÚžÖkfŸö#f÷ÑF‹ÓÁ˜ò˜sØØŽ¢¯Aôç÷× 1*†Æ§dUwíºZší£D×1âií*dø›B‡›KEgÂæ\ ×Y¿ë +ÇŒ‰ÌOÚ¤ç½U|‡LE=«ÀI›wrÁ’kÿÓZÐئ̳`Ž5k#X»Gv'É +êQ@þOã;_̸ßkî/ŒáGÆR¯ ú‚f7¬apýJÆ€ÛʘccŒƒQ?sšSÃІ/™£\iÏ®WÞ2Nêàn~Ýï–äÈÿcÏëaNéçü±—ë[°’—м‡Èþt”|êýRñ¨uêT}·‡Šúo-ª£ÖáÔû;ñ’ñâ`j¬Ý¾jXÂp8~‘Šœ³Ç'p.\šÈqõž©U¸F¿ŒÑ ´{Óí]NÜkyËuxB`hf?{ûGðÛßu0› ™˜™ƒ<Þ²_ß/½é°¦_õ˜Óe§E•ÕvFYcG°Û_5ñÌ>uâÖMÁÓ÷fDÑg3½—ŒŠÆ…¬i«6aëì½Í…1có6  ýdT_ÍÒ¨gTô>0£OÌyýQÆúkÆ]âóWâ븧>ô :W³çìWÑ{ì†6å¶—»žëÊLµïˆM¶.Œ">Œ¹sênƇ­z¾o—h,¦h'ž5ªEæð±˜Æ=˜KÜBÚ;y¹È/m=[}È8³…””V]1©.ó–¼l>#(è rºyxf¿[µ‡ïwµÞÅÈéè|Û¼ 3صƒ½¡±\0{Xþ“:جgÙÜ›¤ñ€ùYgˆ!a}y­ÑéŽ1´þ#à61&÷ÿ¡¤oé,¯£oŽªóÏ艬Ù)‡éæî)ëÑU‡é€G[ õy`ߪÅ@iíp›-µ}-Ú-|Ór’|ÖGó£‹wýg±×ŸçŒè³×DŸržBšÛOD,YArŸ¦ e@‹ +{µ“LPÝí ©†K²ŽóxÆoxØ›-üü/ºDɸ%Ù:lËég,´êUåUsK—ÛüÅÑà!£ÌØÎMÿ¼ŸóÑ4Êþ~ÄÈ.nΡC*`ÛÊÅ`ç’%;ª ÌΜ›juÕy¾…ÓµÅhŸ˜QþgMò]Ï Q]ÿñ/<~þ/ºü»¿jb×cNþsñÐŒõDn;‡½Fóå¹Qîš|ÿ×뉫é 1sç‰|s[yìÄyyvßKÖÇäií9ã¢;üåÅ‹ªÜÎ x²Ž“6¾×0qd»®[á5‘«ìv Xcó⟕ÁjUS°Û,LF5¸IQ+Ù¢ý–9¢]‡Ðï§­×ò¼§ }1rª¡û­F!Ù«ŒR—q#î¯å¤5ïæd)ñƒ^mÂR¶1 +ô•¤…¤óíe¤Ã¥äÿGÕu€æ¡#€§ ã DbSYLb*KzÄ-áÇ”ìàÇïä'ï&bïÂÞîÁ3†Õ©‡=4ñ¢WÀ^Wy#~åž¼ŒÈÓ?kr›â`þŒ•@a2¬`ºq;¨º–ÌÖì`4t‡ŠøüÁƒýÕ•÷–¡Œî0ª\—¸yFÇa_ÚzÏÀžýDx¥,ƒ~`yÆ{:b +¨h­=û€¡²&P§Ø½B,;Î#k‰}øB‡ŽÂÏ ß =ã—â±Õ{ð Â¤_Þêzþaz§®yfƒ˜Ž®V¢ƒç£=dÀ½ DZŸßtˆ}¶Ëø .Îé%EC’Ž£»ªb)KøñÕ»ðgã”qG…¯ÉØ;)ý­Íÿ¹Âû•±…ñìŒNƒë0ûu.çÌVá˜mÑqƒø¶ÍTûàUAMŸùô+]Œž£¡¬¸ž3¦ÅKªÛà {»‰“6¸—[Èhqó Üïôïü¹Wÿ6³[«˜QÒe uaDÚãŒn+£¯_Îè¾fôŒ*šóŠÑÓ~¶Òà¬ëDCs9#³³rº:ÚàÀO+€Ú¾}@—c »‰Ôy×鈡‰tD¾Ïìâä/(§Ô%8ì[Â÷æ*–â›¶^ìì¯Hõ˜NÙGÏÇRšâÉ]‡IŸ[+I׸E¤[Ô" úBñ«ÚÓfU/}ˆ—ý"ìZîj¾CÈ\ÂûáZÑÓ. q}­ºRR^î@æŽòù)HŸ;«ÉKás±€¹% ÿìŒò"gÌ!-§§s4m²¦jÛÌÒº˜5]ç!³‡÷¹Œ®åãÕ3æ†n™ ŽêMØ&M ~@¨80‡)ÔíCAN—HïPÁιNåò%íIç 9ë4íE£nµèß­±ûp=SW"v³CÍ9<àö:ââ™ø•à¹dPÁOhÿ‰8µÍí= sÚ9âç5Ç„…íbqA‹1ªKÆ÷Æ’zQiãšèšOayóEÞýß´xi=JxÈÓŸ°ðÇ?ó ¾ê•üÔܪ—13ìcLá¸èÜgv·®Õ7÷WVæm®Š/Ëñl#gkê Áá}ê@ï¨h«è•Í»öaZ4‚³²ZÚ†@õÐÑ4|„s9Óó3M™5¢ƒ‡?ÚBºÅ/¡¯„ϧS–ŽñÐ߯/¯§¯@ów{T/î3–6Å}âñnUçg~PægV# ‘tY÷9AQ÷iþíojØE¿™ä%ÛÍ¥¼ÄÖ}äË!‰¸³áÚ‰þG t‹;÷Ã1|ÎhFl6p)TT3<tÉs²†—“f0ÚüÀgë Eçdyæò˜Éå \⤬ª’*œÛ€2ÌG[¿ÙXf¿*š7†´± bf n1ef3Ab0Oô|— ­î(‘Z­‚¥5¡nvE Éý1?gP¸–µ’t‰^Hy¥¯@{½ÐþxúÆÍ5ˆÏc^úÒéL[vü¹öŒ$³Š"aƈ!ðb3yãå&üÖ˜*ù¤OÀOí>„Ýý¤ç y§Ðy¸kìBžSÒ|®oî +NXùŽ}†‚Žä²¬~FFOä Ç!leõ¹2˜mÔ\ޅЙªÊ†`õ$0ÖMÛæ.ê5€ºÒ!` Ça9ÄÌDŸ’cuqÎ]Ÿ-´<-OÀ¶"ýÉŸ™ˆ»%>ï>SpÎi:Ú3Lg6ê‹ ëÌE¹]<ìíVÌ!i.}·ƒ—9ªBxß_´º¸¢Ó²8´Uaa™(¯KLÜú¨‰ú/ÚFz¤-#®„(P×sÖ"v þhÔˆSø‹¦QÞM£üoF9Ÿðýï¯æyÝ]ÆwŒŸõ™†ÆEéq…í͇¶¾€ð-\_òŸ‰ì÷É]ö•ò_¨ó0]Ž`B;9Ò-m)תDÅwª n6â±<¡¼»3ª…öv‘ñuñ[íªxf§:Ú/N@ŸBº%-¥.‡(—ƒæW¥ó°Hç³ÆTøIûnª`G¹ø› ùb@L¼6¡‹zá…£|ÞýïZijQ!ïίj¸µ÷4ÚT†krNíß"²>鈟µœ4®}ç.©¬v&_ ‹¹ÿÔâ?f 9ïÖjóÍŠkÁÏ3VÀÇ¥@KŸ¼W'òO^hd~nnyy"_ri‚Šš&8ý瑽J¬~Ñ&iã:gj%‹b…à¬ÝT‘íµ¹¬fÔ‰+Shó³ÖvS+AÝÆ嶉ȼ~#Ü'n)a8—ŸÞ¢DÞÐF\CòrÀSˆ"™Þ¢.~Zne^öÌýDÃp“—ÕÉ[£Úhíq5)mÚG>ÜD]K]I„½ÞNån‚yÂ&^ög^TÅ6#‡È¹<÷ŒÅÜ€Wkøcç¨kÂza÷Aph¯:PU: + x2hŸ%ï´Ï”Ýë·€5Sçµ3ÀæÙKÁa˜ üÊØ-y•0$Ú“'¾ñh [ØØ'g“Àäì&”äÔ–Eˆ´0.zÏz„/¡#í"SÞÁRêÂ\z ~\ýn~Þ':wˆàßê:ŒtÈó~³îöl+žÐrOj9HÝ>ÊÎõ Üäõ›«ðèê=Ô½n#òA7†Æ–|ÓgJw[OH•pϬeüÓžS8Ä)Ym-h©pqîO¸M&·Ì&œÒ#naå2‰Cž€¾ãŒ,q!|´…å¤'<‚Š·¢}+dö˜å›·?í2?ï5tK…ñ<æƒQ È+Ò>2¨àg<©æ ™Ò©FÞéÓ£î¾çYƒš,oûþ€!ù`öi`)‡°ˆ—[x9£*hªeÑ5ßä‹Q ÿæøa^Ä»-¼´/Ñï'ì½gag¦þù°Ì1UüÖ¸âfâ¹ëqßë0iùv^Ú ÷Î7e¾]ì\mCS°kÃv°eÞj°oí6ppûN ¡¡tô ÆQÛ`~¬kD]CÕ‣º\À5?+‡Ù‡ÏEìAä_ÐmÄZD¬?Š0—ÅyÐ÷à–²¬~\ôÛ½tj‡‘Ö©Š˜Ý¸Û4Ò?k-u»ÃP|¯Nˆl—òÍ\C»Æ.FL,ÁfLXØ"t‰È{C<óƒ&žõYí #â >¸‡."üo­á'”ï&ï žõXðïý¦Í |½ ¬ÞÌMÞg”:¢Ä÷¹³‚ká$Ïœ“ÕÅ,d¸f—'à6!3y''رl[¾Ü£´•õ¡ß䤉Øð¢ë·7Š“Êµ„15GîâÐ!^!“# X=L×ðEh¯?â¾ün®GûHaXN:KIÏÄeXRÇAâóA‹}¾…º§HÂñâ)»€¹ìž<çØÅl~Qºƒå +úlÂ#_n'Ÿm%}rV¾÷×òoõÁó† ɼA.~ó³:~= âeð$çå8äqYžÉ• ø)ßiFH·Aý³ç4ÄÔã›\‘Gœ=Ä$Ž»O¦œ“—P¾ñèæ½È¾óæËÉó³ˆs¾3 kשøiÇɈIyÝ[ƒ%´`÷ ‡>Þ‚%W@{+aü3Ö[ +ÚÄ’Wugo[ŽyCFXLå. +Æ~,øñ&´7í_#ßöšór¾¨ò“ùÃgcéKù™_UøÙ£j(ß¶©ÆÏú¬†X`رóòhMƒ#²e9-±Õ»x)Íû—´ÅF&öÔéC›ƒG¡]ò€!Ÿ|‘¹,f kK÷é„ÃTÞ±ó%Ëx±°“'ì#æÑþO7#¦âºJ숎ÙO6>veж³Ÿ"qO[MÅUD¬'ÄÆ œc ߬ÕxZÛ2¥I…ÊêÒEû\é€ÛOHkWÞi⓹<~Ö°*ïî'5âÉ),i?#|Ùqœº3Àágµ©P×3×P® ñÐüŸ°{ã:ìÞå'ƒ",ïXw4íäÛ…ÏÁí"æâ©£G°ôe"²|7æ—¿ŽpI\Ä¿öp5v9FAUÕìÛºhÖHÇi}ñùðƾÄR–e~xg°ŒNò´Ý$ÄLeíúM*ê`‘;qçÔEh] ³R  ÏLí<Œr<¾ñÚ?ŽxþˆÉÁ¹ff-‡_ Q@kXZÏaBZ¶ ?æ9YW[ë - ¯'ôE¿ÙôõôÕˆMI{¦¯€}¹€¾1õ1ÿ´Ód¾ñ¥ <ó3rH³ƒˆ¯SBZ=ˆ $ Èþ‰}¾±uï“e\»¥­@ìQ–¥ c?®d?­ýœJdÔ“Tlñ~"±ú àf£®8»™O§×h“7ë5ɬ¡£Äý~Cúi¯± ¡ÑAÒUá/i~ç…öß›½²§ Û„Èç’ÎQ áÜÝMÞÖG{q‰»ßõøÎÙ‹4µ pdŸ2À¬ý§“)ýjTf¿â‹án©‹1ß‚µ˜mô\”‹j©!ÍVc€ø6,7Ò'k=«Çhé4Ip.`6«õpUº1å‘®ÒÃC±NRX~Lp¯‰¸0¤Ù1ø¾ÏlÄD'nèò3†UÛ iهƱèfyÖ•ç®Í$Ý’—0ÎÂú‚‚¾‚t”. ¯Ï##àn°>² žCÚ†Ì%/…Μñ˜NœóžAÀŒtq‘n«*:#KÙ‡ÍCû[ñôQU<½Gq~ÚÐa,àÅÞIïÉêª\pèçý@ÖˆéÄÆÍs^Óõ‘±ø¬,×ìâ=Ž9ô›æ€2·ŸˆØS±ouãŠ4XvÚ)Ïiˆ…tKCŸ²Gœ´„â¶øA­Äìaå):ìÉvÄ¥CL%<öÍ.2oŒGææso}V"½óÖ †=sÊðçÛ)ÛP#‘¥ Êõ(Ÿ»kPœEu5ßìÌÄöÇ/\Ÿø¥ Ùü3.ÐgzL£¬¡¯³ó›+@¼É+± ±cvò0b4@œdVc ÚÒ±Bk8b Á8ôCã4n)Ò1 í·7¾['aÙov¡9ŠÅ¾Ýb¹àE§™ ¬ë,Ú§‡jxÄq%ML¡/;)GÚ…Ãø˜¼”<8 ­U1 P ™Ë¨Ò6ìšÊ€gqYž/¶‘Óµ«úQ.Ì¥a)<Áêos1SÄäFüiÄ/EìÂü¢<Ÿ8&K˜]ØÍ#ýïm@>q›ˆÈŠ=â»ÍñíNRø`3Ë.ôŠ_AÜîÓ<é6&žýBå2ZÄõ‡ëظƒôÉbâÇ/Êësyé΢}õHŽwÌa¢¶ ¿Èê”Á<€r …1Ýe*Òæ$,OO@\LV¯ÚbBqø@šš 8mÌÖk6uÎ%—¸%H±‹„Áy[X.3Ì¡)3y–WT°Mx âr!Í*êÄÙ‰ˆSGž; ¼û3âþÐ7t™.:}6ÒëFúDb…•V¯Žr3Ä eu³]£— ¦0·M(yÚpRx¿…"âÊ÷£9Œ´ pØ—H71SÉ+áóHkŸi˜Å%y¤•AÛ†³›ÈÆÐ¼äÒf2øIû‰¬–WÊJò‚ÏLž ÌO ¿Cì_Özl,· U@¬w‘GöVoÆ3v)Ò}b5]QûaÝ‚XéH«‹cÒÛ"/ܘE^W`5 Ü’–‰®ÝÛÈò¤Ð:gDá6AZ–(£‰+LnÔ¢¤Ïv"»À3GñœŒ)ÚO%W©¢zP˜Ùmˆ§µ+ÓNq°ŸÂç!M,±ížõI 1'øIˆëÙ«.ñKÐoÓÑЂó‰ä)ïiøI·)FÂ3²¸•ýDü4ê ;y ku°oýp`Ë^ ©Š¸œf2\ÓÓr„]Ø\òÆÝµ¤màĉG,UVGØÎw®È)i÷ÍAzæC!@Ü'VŸ ñ© E×£ ˜‡ØBtJƒ:b1³¾é¼Ót,©F‰åÿ¼6%Ÿ|âñ=JHsŒ´ñŸ 熬¬½ Œ€lHïRÇ"^oE~R[GrÒ»bÇÀ.hÒbuœ&³ÄTñŽpà ÌdË›eDŸuœNÛ\ž‚›^’g™òÐÒñ%‡Ä‰oÔ!·!»&­.Ê#>]v€JªPFÜ/Ú9h›kÅ”ì'R*!±[Ø‘Wò*¤ öÏÛŒX‡D\ÉQV#Èì×&/\›‰™žÀêœû$¬gÿŒt©Ìa]2{Xõéª,‹ÉçöZê„ÏTê”ËTÎ?Ä•¦Ÿn!âÛ ª÷!VÒQCc†ÖÒ›ˆÊx¯ÍjžBC9%.¦\R–°ùzЋ­tB—Š ¥G[œÒ¡/NiÑ'“k -D¡}à<Ú3ub"ŽºžñI·ôelÎáWøY±Wô^CÖ£+Nk䘤×ó„7ô?Îå­B¸åb×ÐŰ‚TJ…š ±ZÚæ>6'ƒ¹ éskŒu›XžÞß™H“Hj;LeŽêÑÙÃhÝ­“"4铺‚û硟¾~{ZŸ!]r–cg®O#lÃçâ63ðãW&r(SÕÃàÐAe€Î âÇd–;b‘Éí*ˆãËö¬k¹< +–ÖòH£Böj«v)`.«M ç9ê Qz>õn¿À5j1âÈÓ½f²ëž 0ïr›)<{e*|¾œåõåŽpȇÃïö'uÒ!db2r„'alû¡sH^ +˜8éÔõ¼ È7 íDÄ¥§­ÎÈ;G.•¸&­”¸F-C5a†ü¸±Œž¾ÀhÄcDqñ¶‹ñ† Ësò,òzö:aôÛƒtlÅ!¤ËŠ˜£¬H®*ÒæäѼGkN¢‚djª(³kœÙH +“ê5‰¸ÊH³•Ëß‚Xw´×5¬îÕµ›„éýz‚ì÷\òæGM<µçí“»Ž]?¾–½†åÛåts$µ–¢íÆDHÑVö<ÆùÐÙ¸Íõé¨Ö5‚5 Ò]çÐÇe‘¾$UÀŸåH"Íhw<꘬þQ>Ë;FÚ*ˆ_((Ø.ñ¾µž¾ä?Ghã7[軈JlR¥4¥ÂÞí9„(²,d_ïú‚ûL¤qFÿ¥…Güì~Wô¨Å‚eª¹'/û[; åQ„èô‡Ör´ bŠÆ)¢öŠ“–‹/‡)"ªÄ9zâÁ¢XËjnÀx‹¸ø¬ÞŸ9‚ðwûD MZÆñ ºÂØjVËûœÏL‰Cäb±_ÁV¤ñe|il\žÂê`Ãß%¶ÿÁâ¦B²7Ñ÷š¹Â7u'$¯*Î"·Žª.0Ô'~°¸ÓªµÄµFÂ[MxjÙA–ÅjÊ”eXCïDÌATˆ.¸ÍÄÍ`nó_V{ÖŒ7ˆM/öJ[‹b=â’7ò×Ö~Óùævò¨îAú%BœUB·Û«XËk·7 \1‹Ø<"8ÿ'ԇȶøôY¤Ë‡ì_”Ш)Il×ùnFù/F[ʦ2$ŠHó +i5À¸L†°uàbð\ĸ„ý=éŠa%´ë‰|ŸnEut Å1\pB–2='/ºè9‹epF=Û#NjÒ1N©3DÌ]ÄyFzGx:ôg‘»Y]§¤%ˆL$v&ÂÞí }®'ƒ^Ú*o#å—¿ ¿Õ¦"~Zmeþò¥­øYõqÞqu"ôåV2¸du5‘õ±Hs§£Ü“–¡u=¤€øwH»ƒJëÖ@º':šº@[úU óP™¿õæÄ63I«³ò(.²ºYçæ ­´þÎjœpœ‚æè¢Û,A Œƒˆ±Š¸Ü¬vô_© ÚÂì&bðQ™ïu±˜Ç í¬ãžSùæ¶¶,FŸ–èS²ˆÇ->ë5S|ÂmÒ8a™²fvi–ië6e*ßÈ\+@|n¤aç3ép#Ir³ÒXaµm|f²º…žkm曜q™‰4U„7ÒÖþÍâúf¬Ç³»µ%OÊ™T¼q¦v“Èft5¸à‡NSÌB¤ IJ¸ýîm`õ°‘¸Ù©-ÈiçßjåÓ©ï5)£Yí,³Y!ÇØÅH; [°ÚY¢ÑÎÂr>¨£úß2ÔÇÙ\é‡v–7«ÀjÛ\t™´)Xmx–K›¾ñŸ‘íý­%ŠoÕ$wj°v ç8²–Å m!­yôÒj¸4åÓB”è7ÑÇ\¦Ð–Ž“¾¼8®ICÒ­…tˆcèû§eù”… «ß‚4Ã}³Ö#Ãrs~¦#ží&5h"®.Ö­db»2Œy,wû߸óKþw>½_K\Ðin^òÚU”Ñ¡ïmb× ‘΃WÆ +Â6l.»®X°™Œz³­…ó,/M@¬cÌËQ\§µpИ£ë­PÎÉê#\¤‰(²’å‹,Ø\es?7é"±z5HÚââD¡5´›ËAóû\˜ÑiÀjgyþý[;ËigÁüÎÆm†È=z)bÆŠ`ÜûK;‹:í=ó` ´…,%†ÿ/c39ÚÜZ±–) ´Í“È^æ²úx0ޱk"}fá'NN@úLˆéÍr¯£^íaYÜHg ÆitŸ½6éÕ;†.ÝÈÞ(ˆ(ÚO#·_ö¤%Êhä Ë"aÎtÆkšàÄ7«?W§Ärf‘æ3â\£ß”»1kÑõh¬~¯õÕ)?Ö¯°’S®Ó‘v”è¬ã´ÚYá˨¬=´>HÛ!í, àrž‰Ý$¤Ó…λ!½0‡DÖ—§þ¥µig±¼Ò¿µ³,'Kœ’— C_î–xä¬ÁxÆrøOºOeu»â³Š~óŽ¥ØMº ±ôÅŽÐÂqžðœÆÚw諽èû0Îúñ}·ßwJ]†˜ÕȾ©³ÐV/_›#¾‘¾Þ8©Z×4¡Á­›Òþwžø›;»ƒ÷Ÿ¹ó­jˆ;/y‚®½è¢˜†44EN K…né+°c—'¢5 ìäÿÇÞ[†ÅµmÛ¢âF’µ’âî¶’%q#Á«¦WÁ‚Iîî…;!@ÜÝ] ’`q—¥[ŽðF$ûì}νß{÷ûîû—™¯UÅœsôÑ{ë}ŒÞšÁ+ubþðT®²ut‰P_´ ¸Ú2Ð97Ù `6®^Gµ³,YKÁýC;k jDˆ‰&ÆjÆxµ9‰/öÚˆO*;¿ž*‡€^*Gß^’WÑÞ¯'|4´¸©>uHö7rXþ(øOÞͯâ=Õ» ÷VÈ»¸?”ŸÞ+qp«L°>ñSeÍéERÚRÒþ©T³-ºp4·³i öÞ V +.na{ê Ž|&ôÍ„’¦åÀ¤¨JŽ¡z²KHoì¡ÚXQ•cPo¡Ú¿!•£8¯øþJ·nTˉÄL#¿hg•5­+ï¯C-å‹vâ­ä•>ö,$^´³ —ŒÜì¿´³"º´³Ô$ß·r醸¢Þž:T´ÝÞsþòÖ”AÀ@𹪈ü羽™¿f„:(}ñÃ;D¿T{‹¼ßÒ;Mïßú?¿y¼]6œÛT³XCsy±ªôòJËØ=S¥À}ð>Cï™jÁƘÈí|»F¬ymYhÇB¾ŸÄNÔ¸‚³ó¥ø»t×=»A+ú¨bÍËH)2&¢¶‘…Ę +öZÈQÏ6¶hb ÄgðWæKŠn±}ÍL­£³ÑØœáÔ:ª€$}uTñè #/§Ú¦ˆ;±û'£v@µ`c÷M‡=ö gUî}½^Ⱥ8zóÐÎ2Æ^IÁRÚY +N`8hg‡¢ÚYëÉß#h¿«¼’ËÛ#Xºøö¶rŒì FÑÖ½;oë¦+m!ñÚ]Ä'‹ ;ÆCj´v]³¢†Ÿ…¢Û?AßUòÉÖW‡V@£B,¿·8ëÀTàæ¦ú„ñ%c¹ò†åˆ-T#!–àŽ°â‘‚¹FèrTÖ¼U·B¬©rímå›=Â2äõ‰5“U5õ +õžfIªî0eÁ\ظˆjgQýö=•…W©v_pw ÕÎ +.€v–ÎÌEÙM[Ý9 +\ÝT›:¾–jg© Ÿ í¬ˆ.í,Õ?kg¹}ÑÎÚÞƒ³tÔQò$·” næ…v|hñ(ð{C˜Z`*ïX2?³¿…¶}?É;Dò~+'%k«]*`ªûƒ÷'›FÐÔ ¸¤‹ç¸z¼Lî¥äÚ›ê“9zõ€æ·˜?‚͹:ßýrƒ¢¬õè*­t°¿œ%äj4OpõêÉZÛèl\/1æ,ÉÉí‚zà5ƦJÆB½I[ôO‚:"âò7|.jÐVÚü”7BH92zÐæÞ°FÁlX¯`€·yGoâ3Gȉµ“¡åKq%‰Û"üIñ¹$—}3¨æö[)«Ú–‹;Û7Rí,p¤»øö²ø‡v–Ïgí,¯^jªµo¦”qf¾¼-v€…ÂZ ç½m¬•ª²†Ë©{¦[F•·ÜAõ­i>3œò±Þ\Bõ +H‚. 岇^Õ&Ï.ú§ìµ{<â _xëG±¬a5Wrëg¶àÒBhÀÓZöçÐ\¦Ì×%d .yì{”ŽN‡.©¼³ÙXÔœ]`é=˜·qé¦v +Ð#ùÚH!ÿöÀ`Ée»ô%»´³8ªÕü³Xõ|ƒ´«Ý {‘P- ÷°>¬}ps]¥cDÏ/ÚY¨/As€ê+Å•OSöÏÃÓ¿¥ñ=¼Ð@Hß;MÊ:7_•ph:´+%÷à>Ø+†9Žº‰*¬Ô€Ï91·KŸãÜ|ªSd€×"vHÐãJ96[pª’>¾XÂû79vƒþtî…‚3‹øÒËP_£kîÐ Ë ¾W3\Þ–1„j8»„S­{ux‰˜P1ër—”¸§|L…ïÐË‚·ÓVXÚj#vRü N¿”!ÖðŒ™ù&-ÞÆ¿»Ê5¶ò[U@úphžÀ' i§É•Œ(2Ö*6õ„ÏdfJòu±mNÅ@ÃucèÑ ®A1Õ9 ÔSŒ„vr>1´t47Äèê±è1¡u¦ˆ]ãxØ+ê—nÁz¢Ghà0ªClIJ>0 ëTã}Kx_ÞÖ‡â}`0)æÐ$>ïÖÔD¤èʱÐüFü扃¶î+òQê#òFB³šö¹d^[@õ‚ü’©ªÊ7i(Õ`&c*f’¸Mr4à}ªc\]nÀ“{Os#èáú‘ë$vúYÓ½¯vx:jò¡G²êPƒš¯h\!Xné¦0¬_QšÐ¬o¨ÆtÞ€Ã\#ûÐzÂ?igñÙæÑ¼-¼`¤˜qb𸢤i1òw…½_wÁø¼O¡>´Ò¤ØÏZœ$ï#óx´ðE;+ªt ´Ì©üóTc]ŽÜ9®ës+¾ƒ=Ð\:Ôɵ“„ŒÃ3ø‚‹‹ˆ-²/PÌBkVÉ»¦à3¨6\ ±{ò÷€¨oƒî™£| +Éå+š–Jû›Xvÿ³ ÊÒº%Øc‡5w9éÄLºoÒ7´¿¸ÿ¾…õ‰›NöÇO»Û¸a¯®n0ãvÔ¯ ùÐrœ3|‘\2ŠŒ%¹rïã*'`¯›àÒSŠÙ?‘æÌ—H~Yúj'mŽ`jªa¾Ãº[<±ظ‚wÔV(, 6´`,ÌÕ gï×ø×Åå]_€ºÉ'{X(UZTË“ü-)®rô­°‰j%ŸžÉæÞYÍhÊÑ>’Ë¢Å;¸èBk ÷SJ=9‹O92 µ|ÄhÞ1¸—RåÑ :ÊXC—bL¢ú(t­šTE£¡³†Ú6zÉÄŒ ó±fE5QÄ]Äž˜*Gí™jUX™ößš‹]Ø’Î£š‰ª¤#3`÷t¬Qo‚WDáw¨]‹•͆ÄÏ<ÃúŠŽ½øMžº’wæPìëá÷>1Vx$I;™ð ?PÍÔ¨îô±Ù|ÉŸ„¢;?Ëqµ“¨¦94o 棘5ùÀì/„Âò¾…Ÿsf»³m¥²àƬïb½™ö:ºDõ¦1)ißTøy`)É7j Å)A9ߨ"K èšñïlÁÅÊœS³p ³Ž|ÞBrÕ†~ÕT!q…ú¼˜ìa™DuƒpÝ?ÒAæ=Ÿ²o2Oð9É[æO˜ Ä?Ê9öÀycï_ݾ€,êÖÅõ?òšKó0¿øÄãø²–Øë)ï{Äñ™—çS_˜®ÌŠÏ¥>†Œ%ö^Bï ûhÜCí +yÉÍåð©tmÚÚNy/b,>Ÿ³sÓÅž Ô¡SÄ[mÕµ0·ìÒD ÈM\ÖÆ8{§nF†ë ¦•q+± ¬1û¤ îÒ3?9SJÚ;5T¬A3Jžý¨&‰ÑÀH87UÌ®IRöù…¨ÏH1ÄþÈùɱ‡§¾YC±'‚w Ö“|¡cI>þ+¨èÄI ZönA½Q¿³Î-€æÕ‚Ö´áò†#ϦëÈÁd|¡A½¼Œƒ3€G¨n54Û£«Æ‘…ês`í¾œjñ”Ü^í"¼‡æ{ÈU‰ÝA‚-mû™-nú>OJ"XºJˆµi‡f°­ËåÚ& èÄ`­žj}mOD÷ž Öˆ=@ û& 1×Bß?Ã?Aw¹¢é'EÉïYÍŹtMLJÄØ™c]úÆ…ßÒu@Ô#°w80gDF.üû”%7(vckÆ+m|uª­:È% [ÌM8> ÄÍ0‘àOû­j'ÈášoéZ™æø¾ôöÏ‚æÒ"¬Ós6AÝM'-åfË¢ª ”…7áóézM±‡Ð’o1Ç„èlú¾ÉÊÒ[K”×*ó®ÌG/*ïØ ú˜¼«o/)®jՇÒðÚ±¢‰¡®á½eßÜaÐ*” ¥Mð¨\E|èþi°I’sõÁÚü ô¦$w¿ÞüÖØ~’wò`1¢’ø¨’‘´ÎGr&šo÷áA_Údƒ9cf¡d€£‘› ßÅ}NÂz«@lVØâ׋Ú64¦É=“"J¿Ã^qK žŒxž}jð +ô´bÏ–½cön`^á<°^,ùäé#w†ÿޤºé^‰ƒèž#hÁû¤ !qlóÐ{%>EðËÖ‡¦3ÕÆ~ÅàBªÙ-û@ç5Zÿ„ÁT«‰úà“s¨Î+j&‡bŽ é'ºü´O‰£:WЊEÌ1ɛܻbg$?.‚ ’h—}nƘ+<·PL%ŸA®“ê‰A?úèó Nî;®•L}6©ê¡úè8‚·±—6†Ü·øÝ¡EGõʰN8y´ë0·é}€H;:îNÜ;û]¡› BìÄü¢Ü[ø+UhÉw4.%šA5ÁÉ5 ñec©&TcÓNOc“OLá}²‡ÏÑkþ—¢;K0Ÿ¨Æ–ƒ».tÂÍw=ýYqä™±°ë™‘PÓ±MÝ7‰sðîŽþà?2v ÓCâÀ:¡=èÛž7×Çgu~=¾_¯Ç×ãëñõøz|=¾_¯Ç×ãëñõøz|=¾_¯Ç×ãëñõøz|=¾_¯Ç×ãëñõøz|=¾_¯Ç×ãëñõøzüÿ|L˜°z‹í*ëmÖ}õøu}õ&,_¿À’ÇmT®_e°Ä`òFk_;OËÙ–s-§ü`0yùú9³-É;Èo§LÇkgÏœ;ß`–¹µ‹Áä®6 ¿70ñttpÜBž´°±v±ûüÚð__½‹Ìû~æ¼Ù‹,ú~Ñì™ æÎ_dàúßžŸ?oæü¹‹¸ÐççÒŸðüúŠÿùü—Ïqùß|>y~s_=®¯Þ–¾zf}õLžbÀ“•ÿú=¹Gßã­ðôÚºÙÔz¹ž-ŸŸ]aG®è_ŸŸ¬Ü²ÅÚÕÎÖ€>m@ž7X8¥ïlƒå}õfðÞø¹]_=/|3Ç`6ýÇûâ'CòyÎÛ`Îl#I5ÛÀ–¼‘7§§¿`Î|Îç›2göÌ…ßw=±ñ_ž˜G¿nü¯·ü'ºÞ²å_Nßx|¶†5Ž.vK>O¯ï‹m;2Ç€_ÛWoÖ*»íŽ6v+„ <±‰œø :è]ÿ“ŸèížKÆ¢ëª æ“X8׺ùÿÛp_>¿éó—ï æ“˜ó=½mó ð¶Ùä<'Г„I/1˜?gáÂï‰e¯×[·žcV¯4bÖqŒ‘…­–)ç ‡‘¸IÛDi­elf£edb¯µnƒÈ¬YeÎnsÅf- »îè÷TØuWØv7·Ý®k*{h¯^nÂ,ýq³~À³ÎZÆjmc…³öCžYµÜŒY·Æ”œ©j³¶¹ÝV]3kw¥k¸žÂ)ZÏÄÎOwƒ¹%cd²‰ÿ•…Ͷn +»ÈæV>Ý6˜YÒ¿mh¦"ŸaÁ¬^ºž|5gÌmô`¯þÆVô5f‚£kïÛœ.*¿ä¡ànR‡~NôüR¾b—°Þèý¦=>[“¢Ï}ÒØƒ¾TUdÁhôÜ /”ÝäÑMBŸ8¸_\ôÀ‘K{MSÏF*zéD× =ÊÅA¾JN~½$wpµd¯åhÁëÑ‹µÙ§§h¿µ»zKT?•'ùû^‰ƒÀ͹õ¦v~Ý-Ð[ͪµ”’6x™À±ÀÙz袷ýÓ‚gwp†›+Fií¢#x¦ D_ëèÕuð¤\:à"œ{¡o\² ++- q“^grýn~zr`ê09a÷UhÅhôd›ÉŽZœ—.8&èµÇVOP¡ßx3ùôÇâ~zƤ\NÁ%£¤ˆê1Bpá7œWL?~[*y>c°à›1„síi¦Ú¢þZÁ=¤å ÊA÷ÃSîžèôž ‡"4ïôt¡€îÛgù;¬¥³+Xiƒ'ÒTå  >qðQ›˜Ùk™š[km0•pOY GCp¡¼–F%ƺë úh-$W¹Ö†ÜSò38AW¯ÚÈ Ïü¶œc´žÒ1VO±ÉGæ&àq5±fj'p€[0è#ç·¦4³ñÐ14™kM#ôùZûv·¤ô¶¥ ä]£ú(x7mhU˜©·é¬'¯[¿ÅVZàlÂy€›ÉÂr{7NåÞ³÷é.;…öV¹†ô‘¼bXgÀæFKúØw¯ ×KÎA[òI"« ++7§ƒÊ;yx*)¯—oÂØàâÝ‹uôî.û~Cîï·ø9‚óFÊš‹‹¥ŒÓóUÁ)#ðØŽ°Å§z+(GKD å èâf( ›·ôË¡öì«òôé­òIîÊM±5¼¸38ë­ºàaké¨ÃÙlÑ¥ü˜Î!z¼gpô•ªƒrG¢ßYÜÑO²êE¹’Bs¾Eï™ì“2Dt Òã6oí~2Ú“DlŸuØÒ·óÐ÷…äClc{Ì@p¨öM“RÏTyçè‹®Á½y· =Ø9úÁË„žگ蛭Oû=\"ûÀ6åÐòÑ”ÿ+çê÷bAÝèç‚»838ˆ>*2Ähö6bÏèCŽ® N ªk·%PöÜøE R…•Œ¼bNÞ=iO úɸѾD{]!°ì[Á5¢·©h§½f™!ñ‘ksŽÌ7Õön梻ŽBt&c¹­›’<ÌE'm#c‘1ÞÀwiù¨·èPî;o2çm´L•j¼³8?ðÖò¶Á=ЇĹÆô!>ÇTi«eÆ9hQ>ir èݶg Â{Y¨Tå™4Hv ì-;ûöBO®Ú/E_°Aχ_wôû +i´gÜ!à ã£G5BÈ8Pž"Ÿ¤!ò¶„AèÁ¤œ‚Û³‡Òq +Ô SNÍBÏ'zÒÑ“+ù’û +.â{Ñ7£ŠÙ3Y•vb®*~Ï™rZTMT‚ ´õÄvõ/ŸL|&z†`W´?—Œïì×ý÷°•wä@ôðÒ>lôØDTEíÓõŠHíøeÕö¤Áò¶Ø’gh_ø9|娤ÐZÚï¿s‚*j×Ì59ºj<¸¾ºúkÆÑ>¹¨ŠÑrHÑHp©Ã«ÇÑ¿~>bháHôÜѾï˜Ê±zÑœ=BôÏJyÁcî¬Gõs(çrÑ(ôì‰AÃ$¯ðþ˜ßà·…_ΕU“±„=¢o‰ø Ø'x:xW]ôüve¸Æ„1Üh΀ËJÁ[\Ç2FÕŒB$ï'>‰µñÔU¨ìµá(ÿ‚ƒOØ|³ÂÚI‡µsí†ð & +ÆŒ·Õæìü»sŽ!½Àï‹¿ ž}Øk壋žgÌ-ôŠÑþ.·rÎIýy\Ÿ[Ti{ò`ð._ÜÒ¶”Aà7\¿j-£”]´%ô9„é)­<º§„òÁ’ØKù0ˆ/„ýôÀ!yFö‡oç*ïØ ½™rlÙ8ôoÃ?À¶DgbŸdíýñÖè~4¦ûj†a®p[Ƚwó×CÏ"õ©Äׂ¿BiíNÆo3åG†¯£çñ ïA¿<îxà-xµ´&xGœ‚õÀ³ËYnë&lòë~)p²Ä/*eGmàôp‚|TàÞ먉ýºÇô¡|Ašá¼wÂ@ô€+ PÚùèr[bû€ƒKˆ?4IŠ9<™òßÙlÓˆ/¥=²dNZ׋öë•§>~sðÁñvÚ”cøIÞÊC—UÙuñ““kA\F?;å0pñ¡8Pv éMûeéugéS éCby0Á„¡ù#©=ƒ#‡üc?H_ë­Ñ· +õQ~y#h/$‰ßÀvCÊ%Dpœo†>å¦òŠ oOLy ˆmÀGÑøëIlý‘ð±˜CA9#h/:x¸|c©"ÊÆÈ¥èc¦ýœd¾b^‚oý‹˜7à¡‘(¯EÑw8OÊ—žnb‡àý£=œaù´_¶ñ^Ý„“Á ..>ñðdðƒƒý˜ø +ŸI{KÑ“V1 +ý¶´”Ø84À¡î™.n7âËɽ ö5¾\¸¼gd_ª ³k¸hÐ +l¿'º‡÷EŸ%µOb³Û“QîH<·-¢¯Ò)¨'gC|¸{Á-NæñÇ”sÜin‘}ÁÈÿÇ9oí{ƒ| ¹§Õ[H¼ ñU ³O¯®^Xr)gfѹErøF:ßÈïà €mĤS3¹ü;‹ùô³³(Çròñ©´Ó-®Ÿà_8\ˆ?9•/|ø“qk¾àšÒÏÄ~ÚYGòËÔ—RÍ3ŽÍB<½wQUcÀC>=ÊùNW‚/½È¸z‘øEæ£÷:bçxø*øÞj³¸ (^ŠßÅ…yñq°Mü¶>ñƒÁÿH{PÉ8Ñ^\2Þ°pmоrôãžùAùc·„öF.å„€Âxy& À½”àó(ïzl?Ì#ÁçsŒîGŸ,l‘à¡"vú…ŸçB{¸ †HüçÈxјØï“0y8(fÚÑéà§½»ÄFeßtê+éÃ;i4Úð£à~¡š‰'AÓ/IyJ<£úÑëóˆéOãsÔ®±àÙ?ÿ-zº•ö4Ç’"JG ©Ç§£›÷$ãçÜc€ó¿zt¡»ŽT9ªvœàžÐ>|€ø´÷>÷6k˜¿IrØ-8Ç9ÇÐ^ÐØ°÷Ö…¯D¬Éü§ö³cœo¯eNb¹‰L¾’\ß› ®Úæ$ÿRÈ]ú'”âK?nÜñ©à(¦}¾q‡&C¿Üx´§Û›àcú}Ú`1vï>åä4pwóAùáo=Þ7kRü lPéhBß $ƒ¸ëyؾÐ.1W»i“ÒKr25ñßöþ=€À9$mKLí€Ä +ÄG™äÔ_‚ËpKHoÑ?uå´(m_NóoG¿^4&’ñUß_M6ýôtðÝÃ>©ˆ*7€®ç°É ¾ƒ¯!q«?ì8‘Ž?t9HÌænLÆ\z4Î’ø"’ø?L1±eªÕ”©O{Ú n¡qˆ`Ê êBòg=ŠEHì>?OùeÀEæ/l~ˆöN~æ æü³]>†òv‘ßÑs‹© =ð»³)&!~ƒ‹ ós\ à ≭Ñ8Þp[/]Ì3Ê)Aþ&ô ¶$g¶tÑAÎÈ“xÇB_Ô‡Ž@.«´ô ¹íÅ'ó÷OòDõHŒIÎAbçLæow–Äcè‹Á>…­É ¡ûŒ~SÉUX+-Ô’€ qnœ%òvmsÁä!NÚàùƒÞ­Ÿaœ‰ÏBL&X¸—”px*æb3¸pÏÄþ”§•ø~àCÎÚ¹›ÒÞ½›ÂÖ£[ú+}»ƒû|Žæ$/ïâ7ôê†Ú·%²7kåÕÍùº´EÇ„³ÕF>†| +÷Maé®.KÊKòtÁ1°'¸©6øpÂHŽIÆ8-f÷hC(KZ~¤ó ~,8m¸²¬éG¾æ­¡b÷_V[”<] NPª[ô˪°óìf&ÈZвã4—ç éWæ +^)ƒ”¶žº¨á€Ÿs@ôî¿IóáàLÔPH.7|Šjo‚ ÜûÈn>zÀŸ²Ü`ä3ÐŽÏ;æÍH®M0Rwð:€[åM°%8‘|ÓõÁ§}ÊÛé“5”úZ³ ÕB±ìžøì.^šñBúñY"夎êO9à2/Îç«^¬v?6cwvP~TÊqãÓøšòénè ­ +zï‰íÁ®»à;¯¡ÑÜ‚s!¯‡¯D]È#®»Ù¿Å!À^™ƒ sAqAPÉ(ʹM08c¨Æë®†Æå¥ÝÝŸÛ¦‡¹Û¤>–Ìù>¾’¸°~Íã®°òÕEþ }Ý®ù³]zàÖVöÚ‚s¨ü¶@| +êà>¤˜‘ø|àÓðÍÕ's©8 +¹ÍA=•$¯6#9©…%c&ÚhQ~Mò<|¿™Ø®]@wph"_ç½RòÔG!¸ Y{¿î˜‡ +«­Ýè#>uKøN’ïu£ñÆù¨¾ÐDy‰ÕߣQ_NŽì‹ (߸N3’\ÜžÇFüÁwÊýnd³î͇¾æ1ò8 5Õs…. øï¸´“Óùm±ý‹X[ò·ÁÜ +{ +7€—Lâ-jOêТÑÀ¢ðßàL&ùzÙƒàðÎ÷ƒk›øCÄrêCÁq.`š¯Ç g/ÕTHØ3™æ¿!E£äˆâÑÀ±¨Êþ©ú*¿Ì.~É Œ/ÇUŽcKë¢PÞ‰QϤ<1c¤„êIœæÆvÇã•lÕ³Tç²àÖ÷BúŹàvcú ÖBëGéØúLÀ«\Þ­EBÆÕùB`þpàCÎ1 'ø×¹ü»‹ÙòÖŸ)·,´Æ‚K¿åƒJº0Bü‰©|nÝb¡øá2±´y¥X\¿¼-]Ü$®„ŽD^J9ŒÀ݉¸-˜È +endstream endobj 294 0 obj <>stream +“‡”xlšzf&Ÿss¡¡±‚A-va´AÑ•¯»Âœ¢z$$ï§\úNÞ=7$äœ$›ÄîQçA=Apë'’¼üì¨Û÷*7ÿiãß9¸­ÀÅ$xeQl-º'€_ÞAMüõ°IðÙ‹) oÁÛh ŽÁ½DÏø’mpOØ&x.CU[£i­œÕ¨íÒzg`æp9á@¯ ò@W‚á¶GÖ£.Û"úS>㨒ï”E7)÷~4d|0VT¿]Æf …ý™ÊÎڨ˂›8÷ŠrÙcž?Añ9ø²Â4#iM5¤ø=Sh=‰Ör¾7*ê2àœQëóB-…à ’¯ƒ µq•‰©Àþ¹Ã»x—~%~’æPqà?Ü? ºCÀû”ëùº[Ho \—‘;ÇQž6ÊÍT1¼•à‘—3ïŸ>Dð%ù‹wü@ÔWyïèàC§:?‰‡§@×™æOàÝN;1Úƒ¢ù7À‚/Ä !éø4®ìÙ2>§ñ{>¢ê;ÄE1 hŸ}r¶²üÑRè˜ 1;ÆðÛS±N$æyœ]i€y 6,犛dK›4×QÞ™-°è¾RHúp1ãàLè~€_‰òÈÃzÈáRÎÎÄýVäÞ¯(oûr«9ëq›Üt‘¯óÈ×' nB ÿ Ï?ÅR¾™Cé< c¬ ,Ì{$ö—ü ºòõí h‘ø\Ä pj‹±'qéggŠ Ç¦ŠÞ¹ú¼½OüžêksSûtq “{#oÏÓ§¯b´z¶è€'I$þ52Éá1_$ÿ^XRÅíøœ¯öF½†Ö +‰/bjÆÑ!r7¯à$‡mЍã}ÖÆ`5gfs{Ÿn”޶¨Ùš×kÁýûEC°éÉY b³µr:qkÚ Ä-U`øy†!?ÇÚ”Lìry_þ3¢| ¸h)')j¸_áÅ”gô3a?ÉäuÀßR>¯®|½/r,œå² +%ÆÕN ¹óš7“ñëââLk Èùàk’öMEN/&›ŸÈÜ\ħ_šÅ'ûæ#°$à7ûõ ü•Q•c€O‡í=,#JDzy×B_‡O8<‰sO釘†Úµ´…äÞá»Çˆ¡» §i.Ib:øÜ ûÆ¥‘¼’ÄlpÈ)dheAOK.l\!•<\ Í` øè&€ãÎk×ø,»ò//äs®PÎCŠoý †aÌ ‡MNÅÎ+Ì«žþø%_æQ“{Š|jl8“9ïê¯GùD‰¿3NÌ–"K äð²Ñ$ŽI`PðÒÓz ô™²/ÎãSNM‡>$ô­iÞFr%p6B‰+yø3É×niýi}_rûG¾.¤™ ­'Ô߀Ó1WºòuÌ—Þàé§ëkda'–a;ÆÊ¡y#i¾nMòuèc±¥u瘚ñ4_ÆsÛ‚ú‰‰»&Sž'Ô™¨6Fí±¼aµTûÀT<Цä«_¬W”ÜXLµ1É=·%XÜžàÉ]‡•=uº8`IîO|æ&ÎZÈש?"P®(ðv¡žz±1åä )qï9p¥#†òöäï{% ÿ¸ÀàW¡³Â’;å(­¹R.½øÝ•%M?*kÞ®‚^1ô±e`"ܳ¨½Õ%*÷È~°M`ÊÕ˜{c_Z¿”/¼õåãÄu‚Ï3ûä<êb–PNÓ²«äšGf¸7\î¥ùÔ>öMÂ`åœK9?C«5`Ý¢û˜a}Té¨ ÿ*‡W`“P×àœ{‚[Wií§‹µ….½’ }ºÞrr=7Ô¶N|—L|;ü"å #öGµQ7ï±)虓—jcÄ•üC#Ú)]:ˆÿð/E4ÿƒ6†@rQ`s3c5Å@ˆ3˜ˆ <É=Á [£~r{Ê`ºN‡ÜÞÉŸÎ'ZC-)Äì/$Úå¿Èß§ 0c@Š>8Þ°~@sh’Я”‡ñÐ4ÌYêKá;ÿH^®&؆jß!?§¯§k‰E£À+¤žŸEë®!½ç©¾„Gܵ ™›·èÒ¼jcdâkm¤ñÃÚ*ÆÔTf¨Ma=Çè½€S ;õYc´1pmê/Úö=»ø=ÏÍWEí$ì"ø¡FJr"Ô<#kÆR]šäÝS¡ÉÆßýÏ<> Ú-x-x …ÄS•ùM‹ ŸÕÅû]: +õ*ºÆÜMð:ÖÌà£TÑd~Ÿ‰Ú,å䃴µ/]sƒŠXÕ²ž­x¶œ'¹-åÑ%xü¥ð)ÐÁ^ Ô‰óónñ}iýß“|Xaç£kba¯e¸šCÍSÚà¬c@èc`€™»™óаD= {€£ e äD¨1练ã9]ã@ý’`*¾°áG)éôLªÃ@îWt÷eUûreѽÅ•m?§¡viJð¶ñÚõTCAru öÚð X»26Q1f%jŸø[Tã +uIûí´6ƒµsØ&Í«Á ºy{Ô°$ä÷Äß ŽÎ@ä!àáUÅ×N,]+wíªu©b«&RÞnŸô¡]|ËÛ{R<@æ´’Pÿ”܈ý»T¹Åô£õ3ÄÖÔ#T†Öí=»öVðSÐu!±ugªÿ٧'Æ›®kØlÑ¥_íÝuq¯$ çëØ›uØNýÅY§H—~¤~˜µNh•e™Ëç^\œ ¾HŒ)|—{jnïjÚpºŽYd€uTÊS™u|ŽPýÈzðÛXCQû_W>^ªlX§ªn±w>5᪞¯Q5~Oµ1È<öNT^¡Ú\ÁÝÅTƒäÏØo±ÁØ’1–Ü´¡½DÔ¡¨>xtÑhÎPmŒð.m ùŸµ1Ü¿hcxuç¬uXÉI›â]¬ “8ÏÔý äÝ\,ÜIk‰{'ÃМÓ?g˜}`_þt•°ó•![ñ~9êÒRÄžqbPñ·\Íó5У9/8À‘/ayPÍPϨt_„_æPäå¨!WGþ -Sà?ÔÐd{Ÿž*·¸þÐîÂÚ'xv¹ì; „à#•®1½ÁgÏnKû4—µ×®6a–¯\ˬ_kƘNt=¸“+»¿¼»àqG Ë‚…“GwšO¤ž˜‹=_°Qn³WwäÒ¸v¹¼n-ŸuuLb­½û¥ ¡ëØË +þÚJeYÓOÂŽ§ë©6Fú±é°å?´1|?kclë©¢ÚûgB[@Þ7µ5 2ŸXì=!XS”ÿ­ +{¡€|z Öf®T1ü&—n²wúPÊÉ=QUãá«`¯Ô6ïÂb1ëÊ"uX¹ÆõwhhÀ§È1¥cÁí¬È?=›ßÛn"îlÛ€ñ…Æõµ…uKUµõæbYÃ*!÷ÂBø¾ö¡!¸¨Q»¤ûAÀ뚸{ +òäßX³û¢ÁSmŒ?‹U/ ¥šÇ&lí»µÊ­Ë„ØšñXãa7÷Plöí®tŠìõEƒ+jýQ&yü” +:©ûgª"2FÒøNb™˜¾oº˜yv¾œx`ÅÁÀ$vн=Äßc¬¸â›?Š% +…òº•\ù½e_Ôž¹¬«s±v#Aç;zÿDeñ£ØÌk³ùØc¹Ô³Ó©J:2Ú›|➉Àt›cxº‘Õã…üº…âÆeÈy8ÿ\}ä X¯GÞCç°<öí›sÏ/•5¯ãkŸlP¾o­Ú×.r)g¦q~ÅÃ8¯ŒAJϤ~Xƒ°°qïfÆ[i™;EÂ@æËXø5‘ÌoÔ¢°^dbÈ2xÕ—!¸P•pt¦:zçŠg¶&Ä~ èiH%÷VŠéWæÑý X³ƒÞêçµ^hŒB7ã£Ì¿º€Ï>5Ú²_­A €=Gê¨ü1ªØÊ ªäc³°§£ Ó”¢µwÔ¶Ç ¤5ö ÜoÓ¸‚·E÷§k<¾qƒPGmEUØ´ZÊ¿ýSWÎNâ·?öwœªŠÙ15{ª³Iס“¡-K!u÷~O³‘x¾ÉV}ºÎZ–Önd …L÷²UÜ]¥ªj6wÞ7T–^ùžjYB;\ss!4ÀÙM×# ³E0êÿ]z$góÏÐǺ¨2Ÿä¦‡Ë{[XåÎ'Ë¡=v>ªrt×úÄŽQìÖ´ÐŒçÎM¥Ú~)ƒi•\=5/9²h4ÕÆˆêÒÆrO.„þÕ Ø_åEòðrªCGòTÊ­L~/”5.*šWÓü¤¼m9ÖL _}?6ë_ôýFþC߯òÅjìû16çº8Ôé>ƒ’Ñö5àïƒ#¾ ~™TѺ–˸6÷¶Cׄ 1„µTä訥!’IÚßÌZŸ¾ä¦:Ùdk¾ûõrÌ.íÂLÞ·t4k"_¢ëÀ[SP_Z2 +œò\EÇJØ»!Áƒ†«6RUs‰Äwçå-A½Õˆ#ÐRuöêÿ®òL¦ûŠ¥È¬‘”kGØ[†=?$.Šà”N<>MV5kBÀ¿Tk”X_!c‰½bð9ÀД="ûÓZÿæà^’W6É£÷Œ—ÒOσÿ£šÐf‚vÉ_“QÎjØ®à—Hëꨛ¨‹­ãÉxˆÁÅß"'A- +û},}Ò‡Yy„õ—’ô©Àg-KŒ­²¦m•úÄ];««×ýøÃ +¬S*Ä&𝡶-Ë”#S¡ÏËU>Y ½Q®¬e©}u¡hŠ]3Žj cÍß?kjt¼[T_ºûOÚ,É_éºPTÉhè¸#ŸPÞ]}=Ö5ROéÛ›ØÈH>úàèb#w·•÷øEqûñÒÌàòÎ/@ÌVE×NöûR_¥9mBõD¾øÎR¹¤qTÚ¸ŠÛñàú~Ü}¿ÝmfÿSßïárèûa&c¨[¤<ù){¦P ,ÿ±ïZLT/*zï8쀎¢¨Fí?åìL1¨ì[Øür3¾ª}­´gÕ²ŒÚ;ºÙ¬oÎ6(k(j-Ø Ãùç µ°óÒÅš™Hb9p”´£uƒH°"jOJÑAûaû¨v%‰sÐuƒÆ3Ꙃ3Á¨ÇÃ&½ºöªÑ84PÓNÌ u +â/  +guíù@žÌNò ºG{“Í€öÝ„õ¬£lòÖÅ:Ö÷°6„ö*È‘et_9t,°Í´‚£|Rs®ÛzÐ=2$"¯¡|íð!Èñ*üx¨ÕªÂ5£äÄ=S±¿—‡–%03luG“!t`UO—Ò= +["û`!ö¨ÐºcQÃÔLÀÅO};rb̯ؽ“èž?ø}ä³)Ðð ¹ö®„æ¤súšÇgB/ZŠ¨èº¦ðcøÌÃ3••M?+‹î.ââ÷Màür†bOD—.ù™êV]˜O5”‚2†AC€~6t…PŸI<4…Í¿¸@™{a­›@KË-¾êÈTo3éèt被öN¥{ú°{1wâL`w¼Z%V¿5£N¢ûk #\W;ä s gCuàƒI^Aæâà:7°ŽŠœyw@Þ0<èžþL‚o€u¡Rü-Ö=±æÇ;øÓ¸1æ\|zÒ½­Áe#±F‹Ü‡Ý è\}Î#¶/4Ì‘'AkUéD°tX˜v{>p‡T9’Æf·ˆ¾t=^å¢CqØ–€Þ2‰‡”Ÿî—ˆ¤õ^úw·¢–·Í7RŽM£.áØNÆ?{­HœE~M!brêñ9RÒ±[¬Yc­žjh Ž‰õKÔ ±ÇuþÈê±´.„5Sâ{éZ>jXxÁ‚Oì@êG¡…µfØhú‰ÙT7õt¬sEUŒ£:mð×§çK™Gç ëª'Žf+›WðµÏ ••mK¡e)nOÄ»÷Æ9óôoEÄ´íCèµâzHnÛ…Am›%þTYÞ¸uzM¡äÜ’LÒˆýdŸOõÀSN'ÏMAΆýaÐéáª:V)k:V¢ÊGí-Dî0À>+Ôz”Å÷‹)çк4™د‡|›âÜä}“±VLuê‹o-†o€m£ßûEÈgLãöÑý²X_À:/jØÃå\›ÏÕ¾Z¯(i^,nKÈÚ8Ò½’¨)bíó]Œ;8Y +,ù–jÔøgG­ˆÌ t((“öеŸÌ!TÓšø79a×ûiþQ4’þÞ9²·àMtºc˜ö¢ Ž¦°têÚSoãÖ µ% K7ÔŒ•[‚õ”~Ý¡§½!¬|Ÿqe.—woætØH^¯mA|,p1öæR->¬—¦éCã +ûR„ô sºîAÎÄTzÎØƒ”|f&§©_ ]šÏß +»Æ>QËȲq4/þ‡þ ɉ¥øãÓ°¦ØUØ9Ú`râñBöµ…³‡ùe £ºOîè4ŠƒP&ñ’ú…°Òï`/BÆ…yÐ$£õKb÷ä¾N†N*ô… Í­5.ûô\º†‚û¼c­ bM뎨G—¦ø‰Ä3¶üÞÏ\þùtÝÊ-¦4ß°Î/¥ž…zŸya´eûÙ‚k ©Žaö±ÙðËl!ñÓ4Ö‘_CböÞ)ÓBoºI‰§ÐØ_ý|¢ªu)[=¯EýPQÚþ#Ö¤¸ôks¿(‹š‹ÕÆ\õ«ulIËÔîÓN@ûn![Rÿ‰Y ᇱŽJòãù¨yKÑ»ÆÃÿ æÈ G¦ ™'fÑ(ô¶÷´˜²ÅõK¸øê±Tóµ*§-º4ÞA˦òÅ +¶âÕ2>óîÜGøGìaå3oÌã|r†ð%Ã…˜=㸊'+¤ª6#èÄÓz#úºƒ`Íxõ‚ˆXä7GêÑ^•°½c壱‡Œj A«{’áƒSqv6Å{ „È}cùäcS”¹äï³úè+½2²A¥Ã¹ðÝ£•šºyÊ=ŸÖqûÞ[ìùmµâØßÙK¿[²W>n⎿¸]Ÿ6(k>­b«ß¯¼´Ï´9¨.=ô/·náO>—ùªWk…ü[?XÆ–NP»ôF]‚î]%÷ Ú—džNSÏÎÊ[Wªw=d­kë¥M•õJëŠ:s©àæRªÓì•6D\Lï1òJ¶äþ¨ÏHiçça_[zÿGh Ñœ“`{¡æÙF¾öõ¾òíj¾ìÉ +¬›àÝ&êç*Û—rÐF­hûY™_GëÒBÚ©YðŸlõÓÕð-|iû2è]B/v&'ìŸJk©t¿è¡)ðcø*ÄìÀež™ÅåÞY¨¬z¶‚­l[ÁU·­“jÛLÄê–лT–=ú çˆú Î]Yܸv»f+ž.ÃÞn×kC~»94³ùÃÏ”•o~V=^¢¬ýc ö•¥tóÙVáúsWùl»ô1/î'òZÕ¡fKá`›B:ØFÞ÷X)kµ޾àÙŒ»sØŒ[³•ù-ß›×þ²”;þBPmvV¿o,£Úݬäª_¯WÔ<^Ž\ šPØkÀçÞ\,7¬>…ƒ¯|Aã’.½Õš‰|YÇ +…æÆlÖ#¾/òn®¬}©å‘F[ËC÷í¸ªßÖpé×gCXJ<7“jÑ?\J×´âOMG<¦õN;¿îÈ…Ì› C)ɽû½”pzö¿¨+šJ•¯Ö£ÅÇ™Hò§á\XÍ(.b×heôñ±¦…ç˜é\­8ûw{ñw•òú_­¹«¿Û+îüû&‹úNîñ¯â«gq|ǧ`®áµ‡pí­ îº¾.BnhÏ¿±çN¿—¸³ïdùü#õ™®–‡ïÛ¨«šÍUEM«U¥×ñåm«ˆïùãʦŸ™Î—>^&ïl7³Úù•JŸ¬‘’ÎÌD®hQqâ¯|²ã®¿sàï¾òàï¼qçoüâÈ^û›{ùwKÅÅ_EöÚ'kþÞKwÕ“ºxÕÓ; Rã½@þÜ3kîÐkWûa½²ìÉOʪO«0ø#Ï9áÄSY>Þf-iøÚÇ”ÕÏWŠ5MÔ'`ßê3÷œÅƒ±f÷ýf¨<ôÑHØÿDÉ{j¡<ù’e/¼UsW~³n½rî=ßÊßyéÆ7<ÛÆ7>÷dÏ¿—ùã/yÄ&öü‰=òL¡<ùV!i¹«m¶ü£/ñE[Œå»;Yò‡–TE{§»ys§=ÛòËvþÑsþò;v÷§õ\&‰¡yÑ—aM“úr‚KP¯2ϼ?Ã|Ϭ=W©®×{ÛŸºà­*z°†O;9Ýbÿk•~ß ¸ø ¯<ýž³¨ýËrEþ›…%¿/‘Ê>¬W×t(­79©¯ßô³¬»¾éÎõH«+wäóÍ.ªm’TûÔŒb•oÖ"OãHœv¼[O0áB9pç(Eaó"Åñ?M•··áÞü*º“"¸›"~z–(üù2AüÔ’(üö6Žÿ6J~_—æô¸VãÖ^™SŸR˜u/6óóý¹ìû¿†ÉoÛÒž-°zuG#¿îHQ=mKâ<÷&÷Ó¿üÁ^¸øÁNQóÇ +eåûeª ­îV×î…¨Ou8‰—^;pG?°ü™—²|§Õתãvª\×(^nw•n?ÞªºÙ觺ÛlÕt5VºÓøÀ]ºñÀ]¾Òê)\|nÏ]~±I¾ðˆØcƒ«êê]ùZ£ñy–fU/—X$`^Ð<×üà®6?ÓiÆÞ|ë =y£~y/]ý¶)]zÙ/¾m—_µ&sŸXÜýwk‹»ÿf¥¼û§½¢áWGîÙÇ@ñCK‚êSS†ýËùò§¶T®á™'wñ•šßûÆD™yc6—~i›ó`!»çã<'k±·¼X¿]}áž»úXƒêP‹¥úh“å¡&kþäY8ýL­<ûR.vØKW[Üä ·È§;J§žÚ(ýa¤<ñÞœ'ñW¸øØ^nh”ÜS·5Æ[¿¼™íôìP‰ëã=%›_-´{{1_z?Aîhˆ‘êš}¹Ko­„;=„öûaV¯ndÛ¾¹çüd±{{e¡×£’Âí +s=[Ë +œ׿Z¾¿’Îx¥hþÓÅüÄߌPÿ‘·f –B«G³åÏ–r»Þ +;ß·!v)ÂÎ6-ÿ¸¿öa³ÕÓé6O®h¬\K²{~6Ïöù¥<±©-@qókã£Ë-¢Ï5· èndhÉpœ½¶²oŒ|ì¡ÍóK¹®O”zµîØáØq¢ÄòÑíÄ5á@;+íj5“Ž‘ûtùÎv«‡WÕ—¶ +{ÚLU:$øáik„Ë“Ú|bsùÅw¢sï&åÁí^αüp5SõézºÍëšÀ‡j“µwÃrß ÍÙq'2×½½¶&Z|èô~{çÚ¾»È³}g™{û®R×öýeªç÷¹Û¿8›ßýw•¢ùïŽÊÆÿp2¹Ñijt¡sIå˦;?.‘n=Þ¾éõí\ÛWrùŽ×üí[ø»O=~v”«ÚLùÝÏ6JG›Õâ­zO«–ˉŽOÚ>=ãôäh‰W[厀VMAÌý¤œ GiÙ©1ÙÕõašƒ‚²¯<ðͨkõN»ÙäŸy­! ón³ozã}ßô:òs}£_æÝ»YÇ낳«ëÂsRë +Ü[*ó-ß]J—Þ7'Ù¼<­Q>ü7‹ÓæìÑÿ´àþnÁŸx#I'Ÿow}4åË[-ïzÁñG~çĺçÛUoÚRÅ1‹gQªw2äOõÜû×â/OÕïîfZ½iÔð/‚,ÎýÕByö™RºÚì¢n»§z×”nõî†&¢9­,ùQ|Ŷöš¶/ÎåªÞÜL°{u.óËC…/÷çùudç§ßÊ=ܤ¹ùÀ/óZ‹oÆ¥Vߌëä땇~Wøeœm +Ì>Fæ]EcxîŽ{á¹eõ¹1ÉùêOWÓLê:EÓÌ»S,vu.¼—äãï6©Ž¼´‘¯·{ZݽiÕr3ÅúéíléF«‡¢öýJeÕÛ•rm›B>ùÄNu½u»|Ää‹¿Ú¨šD'7$U„Þ×TX?¾©¯©„{ñ:Ììr§…yk§ÓfâŸRï%ÜŒÉÛq3*7èa±¯ÒÒŒ†øR'rnìû¡F7:L.w)ÚÿðÀg»¶¬HoJÙr?u·ûãýUö/Žå -õþbý½m‘2ª1Nx\l ÈÞw?8{G}XöáæÀì›-¾™-Áy¯å³¾ +7}Ýéhöö?]ÍÿèôVþñ)ÔêÝé´à¦ì‚䯸ü¢»‘9Õ7£rsò<•åx>*Ïsj¯Õ¨__O³yuV£zÝš®zÖš¢jœ(žüÓ–Ý÷ÄsÚÙ´Õåx¶ÕT¸µ×;<;”¿éÍùÛ×góÄO㕯ÿâÇ¿y!ýÞ”êðü@®ÍÛ“³§Îfí¸g÷ž)”½Ëòá•X“KŒk~_`œtz´±_é “àÒ!ÆemsÌêÿ&±o^;¿ØUÑYPx?"×þå~Ù_:·½è´ÜøºSÞð®Sµám§hø®“7úÐicö[§§Ùß;½„ß›¢…?š¢•¿þbÔÑ)oÌi›dz´s-{ãï¶òív«ûM N‡K‚ïç”çÔÇ•Tß‹(ðo-¨P½jLµ† ŸHÃUoZÒ<[ªJC›²Kü Š÷]‹Ì=y#4Û÷Q!ñÙç +Ôïê³l^]˳y,{{iEÒÃÄŠ°æ¬—'5ùü__ÆrÏŸ‹¯Z‰ï¬Ï²u<ßõImáöö‚‚üG1“ŠÅOí‰ìË_Ù翘?è´1¾Ùi¼áȇÅ3 +†oHÛ=rýíÎåæ/þØ"ý٘ה_y;BCâžfßÍML]r¶k[U¶ýó½Ùü»÷Q£×þü¥Ov$Ž;­ÏCŸ*ŠºŸZrøz˜æâ ìc×ÃsÞ'ï ל¹ªÙq+*Ïoof!¾&6$œ¹¢¹z;(³–ø¬»~éÚ¼S?’ÇMâë¢&å+þö1t}G§¹Ù^/öçîl É¿Ùæ“qº%@s¬% '­-¦Lúã^ŠôGc2â¡õ‡ë‹wÙ¾á\ç2ã ´þk7»ë¬²Ú¦ý“…Ì|¿Â™¿ägfáâÌÜ…Ë™Ùóbf,\ÆÌ^hÂ,Uk­<=puÍ¿OYó°s ûëÓкÌìãr÷]ŽÊɺ–˜[p%!·òZ”&ãjr^,Án­5â›× –/²6?9T@pQQF]BqŘ‚w"rwÜW]œgÑúΖ¯dîh˽HüÛÙVß̃}3>õÍþÞo´ûÓ_Í€•$fÚHfl7}f4£ÏŒd3߇ù~jÏo˜YßL`V¬˜õr öZu„Î’9fâÀ‘Ì·ÌòªL_}f€ö7ÌðnÌÈžƒÁ3™±#ç3S¦,e˜º3+↮;ßùƒQS§¨xño^ìN[ñÆ/îVÏoijoDå_»œuãvpÖÕº€Ì3·‚³Kë#òòêb +â“K"Ó‹KoÄä c¡)¼›Ÿu'.oÓ›3åó?}¸·oÂ[3ó›Û|Òux§‘9T¤üûÛÖN“u»ÿœ¹.xï C¿ªF!‡õ7¤Ü20ÜýëìõÇþcá‰Î%†ù'.3wdÆÌbÆÇè'×0”éËôfú0½=òèO~Æ a t†2ã0³™1?[eê,ó9×gyчQkÚ:ךþÚ¹ÅüÏN?ËwçÓ¥7/“ÄÖ‘RÛ«ùÕÓdÇgûóc›R +‹nÄäT^Ò칩!~1§úZtî©Û!šËw‚²vÞŽÈ!þXsîz¨æòµÐ¬kw‚³*îEäæ4Ķ·oOé|éžñë¿Ò?ßnMvy^žeü×NçU×;¬Œº<ø'ÙOkÎ’•̤‰Ìô“™ÕÖÚë£wéFVYíè¯3a´3€éÇôdz0ºL7úO—\—ù§Åhþ¹y¦¹j=òªîä'ú\ò﻾S˜Ùs%æ6I{ÕÁÎiâÛ›‘š Éš‚sI9š« š¼« 9y·bs +®ÅåójTÎá+9篆iŽ_ Ë>u)<û™›o‡iŽÞ ͹Q˜ߘ\$üö.·ºä]õÁš}u¡Ù¥uQ¹æ¿uz­¹Ô¹puÌ!ËíýµgÍ\È ×îOm°=‹µ9mzÿu¨â뿆.KìN~߃ν®y¨E¿Çs=É¿ÞÄ«öe†3uÇ3ß[ÅLþÁ™Yh]©½æQçå//‚­_LÙ}3<;õvb®KGuòa÷–Š\à2ä•{å$¯þÍ9yŽOvkðüî;aÙõ³?jöÍ캾% lÞÓ|!/÷Éè1jÄðÿí½ïFÿ|­_žÃõê|þ]×uw§wFÜ!=ò¯?½]µËé|¾Ö^tþé˜ËL]ìÌ,q: »f_ç Å«N_»Ž#ž;ò47⩺µTä4_‰(¾s-,ï!ÃG7ÊۮG”µÝ -n¾œwéFX±ÏÜÓ×Âs‹oÆänøÐ©š³TÅ í;˜Î­ÿ•_ø?=¾\çÿêÀ5õú<¦ÝÉ¿žôúû“$&šÏŒ™¤`¦,ófæÉ%Z?UwŽ2ú¥ÓÞ®e\éù„Ü¢ó.\Ž(¸q5¼øÞÕˆòºÛ¡¥ç®…¿–S~-Z\ŸƒGDCj‰ïš¼ÆHíËé†u¦Mšû|]ÞP‡ž³Î?©Öçßé‘ßö&ÿj g†êŒbúké“qL|Ò·$ÆfëN`úwÏôÓÇ ì5®¿Ž™º4ŒY²ù²îò«³„7WCnÑx€˜VŸ‘'¬K¶|!Õ¥­JC|LÎâ+ËI¯&ßI|ëµÛAšö6Ÿì}$çômÏÎ5ú£ÓnM峉?ª˜á:ýþ_Ɔù¾?‰˜§}‰WÂ5 ë9ÞoóÍ%̈Áß3Æ.bô-`†ôÍ é1‹Ô{&3ßëÍaôû×é/gÆÏµeYÖê¬ÚÝ9Ùäy§£}ëצÀf‡ÏGç“Ø÷øzäŽö«ÑUOo…W¼¹µóõ½ðªwa;Þ4‡”·7×Õ…” ïZQß¹°¿ÎÿÿøÅâú€S0^Ãt ˜Ý†‘Ÿú“QDä'ñSû[âKF3C»Mf÷˜Î î5ƒÒg.3|ä*fÌd‚ýÖ„2s…2­b…öɯýÚi#¾ºRp11çÈÙØÂ[W î] +¨¿^\7¤àֵЂë×à +ß +˹JüéÅ[!¹ÿ{ïWÕµîÿNªRDQQ{/(vA¤—µXkͺ +D:Ò¥KU”j)6ìKÔÄ{ì]SLlÙi»dïsÖ¿A²Ï¾÷üï¹û¼¸ïœù¬€À*sŽg+ÙFb|ËÅ+Í_ß(Üòîvþ–·÷s[Þ=Èo»£prR¿ßôZçÙÁÿ«1ÃçïOs´þ¿g½1s¯÷wýÈo2v¦ÌP‹1ŒƒåDÆÞz*ñÍ»SÈü›Ç8X/dìm2¶6‹é¹ Ê sÖ0£¦%0üª—È£Fó6¼èv\?~é5ýœ ô11{ªƒ~z®¬åÞg«·<"ãtïfþÆ—7 ·bÎ}õ  ëåÝÂŽ—ò¶q³ÔU ô‹ÆLòý_Ûfï¹2tüϬ k#R!‘yeC札Ñò³ŒÃþäaÓÇ™d9™œÛLÆÎa±Owb“AÌ™¡ŒãœdfäÒfLP53AÜÊLàÚ™g ÖýeÐ’›úüëkY™—·×•}ÞØ¸îóÚ¦ë$÷ºKÎíäõÂM§HŒ»y­`ÓË›[^}YÐòòv~˥ϋ6§ÝÛÚäù…~Cÿ!ÿö¸ý1ßàï©lì{ӑ䜆{´%?ïG"¶Uïï ‡1öfã‰?$cg1øMf¨ÝbfÄ(–qžÇŒ]œÍŒöZÍŒñ(fF,Éa=W1Ã=s™ñŠ&fzÈÃyU/ú»ÖO½Õ/—^}^¸òÚöÚÒKM Ÿœ\Ûv÷Óòí/–w_ºT¼ 5Æ[U-éO¶¶\&u£[ytRýÃùJ·Ãú1ÓþíXnLs-äˆ$z“XfáD|¿3co<ŠøùÄ"QÛ´!ÿÙÚ‘óÉ ¶pfl,FßH&2v¶Äÿ;û1NS§©ÑÌÈñÌèEEÌè &f¤_ 3%ú¡kŋŇô£<ëÝHœ ýêlyÒ½® õj7:[Ö|ûÂêMȹݸTÔxæF~Ó×wsêÿô wëÛg¹ÛoÝËok¿QÚüÛwSÔÙÿŸcÖ›ÿ׿ÿð%½¹°- 2×lÉ:Ї­Ñpƾÿ4:VöŽÄý™!ćÏÔ2ç ħ1CGû1öCÜû‘^ŒýôPfÄ|2ç‚k™™qGŒf×=î7¿Gï°ä¶~¦ûm½«üç¿ÇG?éY[u¥ºqëg•›ˆïÜräÒÄF7?»[°íÛûùí¯æoÿña^ûwwŠ:¾¹]€µ¤fßçz™³ÓÜkÜŒþÅ?öú+r.$û°œÀ8 wgF:ù’ópcFx_±„±LüÇ`Wâ3É<#sm˜ÃBfèÅŒ£½3l”ŒqÇ3£fÆ2ã=W3SUÌ´å' g–Üê;£þ™ùüSúá »~²ô²~¦÷+½Lõã³Ü—'+Ê/66n8·¾ùËKåÝW.m>}±d“òæ¯á²Oõ~ÁÇH}qù×pñ«%Áßè¼nè»­¹bcßoÔÿx^½±ÍŒf‡ð’æ4ËB„ $ãd×23”Äã13¢™‰^ÙÌ×fÌ3jÄ"Æ‘øË¡ÖSÈ1o3lÈ\’Sʘ‘“yfät53Ö=•™TËLå[—åŸͬÿÆrîÇú!îoõK<¾Ö/ z¯–½Ölj߿)yv°!ááîÍ‘ßkJx²§¥óš–ö‹k[Ÿöl ûþÚÆâM·n­ª{s;§~ëµ²>oôÜŒ€”ÿñÜLéùô£±ycOý‡Íù-èWä ð—¶&Ž$Fæ£=cm‚‡ck5…qéÏ8/!ùqÊYãEõo-Ú§±äýxä“KNéÇ-Üþ‡ùͯmæÖ½8¯ø–弬S}­ûr û ý„eôîÁÒ§Êÿ¤O’~ºRöæã ©O¶6£žCMŽ\ój×ËÅ›>½ZÐtóF^ãÓëùßÝ.j¿½°•ýéi¾GÑuøø÷Ç6Í~å°OdÆö}†2ÃNeFMòg¦x§0ã¹f\t39ÿ„ñ”ª/Lg®»n6«ì‹¾Ó²NO+8g2»â–ùìêg–³«YÎ.¸ÚwNö¥>óËn÷[zJ?eéýÂ%ôÎnëŸÙyìÕó~ ÷ö¤W¼Ô«žê%å{}Væ½-MÈYp^{Hî\t§a‹Œ—3¾Kð4´ûŸJÜñŸT²²CC–H™ÎãýviHÇ ~}=ɇ»1v#<ûñrfÜÒf*[ÁLf+™iêzfVÜ>#×õ÷­öè—œ#ãsG?{éý<ø¿5ΉÝm4M]͸è6ÌKØg²¨ø¦Õâªç6î[~¶ì”~&ÉO|üÿ¬Uüö>CüéJ©ÿwzɧæ†cÀƧãåuWÆsGÿ.—n|—¦þô—åÜ¡¿©ºÿá.îýÏ`õÉ_ÃÄ3?†IÇ_ku§îÅj>{žŠýNAWôÁnš#[£ÿ9îa=3ͺïH’ëÏd†;)˜‘“Bg×xf¬W3EQÎLöIg¦.Še&¹pÌ¸ÉžÌøñ^Ìä93‡­1˜›vªÏ¼UWÌ—výÇ(¯»z¿‡úàÀ×ú0ö§_ £¿:Рþñj¥ò—_²U?þ–ëÿ\/úìþËd¿í¯&ûï×»ÞÔËe7ô¼â¶>Lõø]’øäA¾øõ½Õ‘¯?Ùñêü&õ_ÕðÞe+®ëµª;¿­¿}QVz·®íöÍUue·×oöh?r”ÓœÃ. Qµ‘܃Ì3rž6£™¡Cç0cf33½W¶Œ™Çå3 âÛŒç5^¸äsýD¯ßô +¹þýJõŸÎ³¹üŸ?¯Týí^ŽâïO³ƒþ¦_áõ«^æý£^áÿ«^ð³>RøÓ«²ÀWúPŸÚφù'4™yG¯7 ¸¬÷SÞÒGíýû\yѾÁÊ“ú`þ›·Åq/÷·Æ|s¸%íI×ö¸¯·É!2ÎDh8;C³÷'œy­‘wýi¶Wz›Åè hö:¬È¸ ·weÆNQ’ÊïW½féSý|÷[úYžßé=ÿ¦_žó ©yï­¢¦–Û%ÍÅ÷Ö7©ßŸ/Áб=¯ózWï“zŸ[z/ÙS}˜â•>Eõîïyš_î­úzMàI½[PHœ¡û¬¹ŒŸ—'ƒ>Jìcd»ž¸ñf¨sw Ó$6 ”ŠN8ó{þæ/xÂíþÑ›/=8R™»ÛÞ?º¶Ïä™rfh¿Ñÿm-è¿lÓˆäY$Çê?ž=[b\BÚ ®iÿ·ìG:_Âå¿êäÖ'ýIåÿ˜ø‚z6è–ž ¸®”?ÒG¨Þésƒ¿ÕÇËnéÅ ³zyóË)ò²#޲Îï\”·ÿÅ¿ù¾Xùƒ>[ñR°÷ïsäUÇÛÌæz~ôá?~/*·Ü˜Á̶֟›Ã½¬>qU£½u%/ìÑg5ÒéoÃÄö÷Ë„ÆÛ®BíçÓ„O…°§çk´ßݪ•ÝÔ 3pÿÇó2'~±¿Ñ0f@_GÆÚj$©£g3#'ú3Ós×øƒÆ®k¾´\xð?†{ÜÑ/ óIæs^¿È§ü¬½OB§y@ñ1û€ z/áé—¹q_ïߪ{ÿÙáÝ“R՛׫‚.ëe²uíeIËe+ÓMeEåV›N8\ÑûI¯ž”‹OžçË+ ÷U¨™ ðlcù¾,f÷ýæ«J^o¥ +Ï5ΕŽ~«Ö\xš ž{!^y¯¹~33xϻŪ}¿x²»¿ñàvþà)þ:œ»ôS¸ÿY½Û²•{,FŽ[Lëì=¬I̘(¨ó›™òÆ3cåÿæÃ}ò•À~ô&Xuø¯¾læeHª‘°ŠauñF”“þ~q‡#¿õñaß/Aº‹O2u—ïg*;Þ/P%­±ÎnµHÝh¹00•éàBc´]O7øÝ.M˜F$® žÅŒsU1su5n›¾â~V?Ùã‘~±ß_ô:Õo_çqY*þõѺ°wçšpïO|û¼Œð&“ûâ—(öÂ_5•÷‰šOJµ7Ÿ‰'ÞiØUívþîþŒïüyŒ ìWl½é"?ýŸÞò­W§)²ÖY¡ZµåÒLvÏ[/þè¥j˽٪ÂÖÁbùöášu]cÅ–› Cv?äuŸßÈ ½y¥\wöA¢tü+´÷…‚Ýýí2¶åÆleõQþi-q¿ÍÖ¸];ø×ci7`3|¢3Ù?™Y˜|°Ï²ô“|¿×ó¤¾\Ž5:¿wz1à•^’ßׇúÇü€¨߀PÆÇCÉ+B‘ 5 ˵ŒXÝ1VÚ|c‘XsrJP€‚q9„™?z(³ C¯¥® ÛrÉE}áá +þÌ7¢róg3¸´êþtÿùÞ7tOt\‘m +–¬´ýO©ã•—Ðpn&ßùÊCsà©(Ü}•®¾ò4•Ýõ×elÃ…)Ê£?ûq—ßGñ^gȾÕGzÝÖ»/Y{Ãz^L·ÑÜå{Œ.ßcâ··WÖÉþž«OÛøìùy +ÿþ] öâÝkØÆ¾þ9/ð˜~‰|Ë«éòîŸæÊŽé=ƒ{~[œÙ:páB7fšÓfæÐ¡ŒÊÇ› OL1^U0(2¿rúÄ‚þäÉñ2Vsûv¾òã?+”Gÿì§<ðOUͱ±ªüjk¶~×XîðÝ£yöûˆàÃ÷TVŸË­ê¬Š(0UFd˜¨bSMhßËžW²ÐÓ_¦„\z˜Éž}'(6]Ÿ®¨95FÖõ~NPÛ›é~Å'ì–jŠ §»é˜±$6™´„åƸ„7¸o¸oïuD?Åû¢~±÷%ò8Fü~ç÷c½JÚx§m4Z½Ó.¸®gdpM§£¼éÐhY×YÏ÷ó•ëÏM`s;s[lÄœöÁ|Á>G>wÿ0>±ºŸ‡/ã¹p1£ð#ñJ!g4Ú0C•.Ì/iªÜry†²å³™ÊmŸ¹p[>ž¥Úvq6»ëµ‡pì¥È}ú•D÷U®Ý:RX½Ý‘ëyç­=soEÈÍÛ«#¾¼XrãZ‘öÒ½tå¾÷žè«`óšlek,üJwòZ{ÎaqD…Ñä,3¨ŸcÓ—Ô¤?]Ƹ]àùT¿Ìï{½ÀýôC ÷ö/EŠ‹z!x¿Þ]^Øj¼œ\ËŒò~ª†3¹²GâŒùÄrK0Ý<¯Ù®LÐOFâh¯eÇ•ìqÍn,É”Œù}0ñ|éÖalËÍÙìúãùuGÆ kŽŽSw?ó‹Ø}W+n¾9_ÌÛ0=|ÍÁq\×7Kù­÷rõg¦ªvýà¡Ýû¯ùþ^îé­êàÿá®*éªÜzs{æ½òôZUè»/šÅ_¯Sþ¦ÏQüEŸAâY¢ï7zÖ÷¸~®oÖÞn²pÆ[³Ü pëãÉ“ïVI·¾ÉäOÿ"ªÒ6\¶Ä—‘+ÂÚ£QõÉx¶úôx?¥–™;f³xâ,&h©;ª‰0ŠÌ(´ŽN+´ O) Ë]?˜kÿ|öùJ§…²'¾R°{ôVìyµXUÙåÈVïuæ~#þZÕþ_¼[^ÎRµþàÊíÿÅæÛ3¸UíölbžŸÛ4HÙùx¿ÿ]»÷—¢ýölEÃÅ ²®ïæÈOè½äGõË‚öþ6/`ÿÌ Ø§wñúL?ßû­>ÈïÏz÷{} ß#}@ÀU½Ðy½ð5½(;§÷ØpÆ)0©È4("Ù(8<ÉÈÏ×›™7q³ÔÕ•ñ“1\d¦©Zd †&tD /¢O3†¿ò;‡²äÚrU;FRHU×XmAµ½Tb)do¤êx°€Ýþ|_±Ó‰/juà‹79¨ˆ/Ôžû2>üÆÙ +îì·UåáQÊÜ:k®üØhÍéç‘Ú;_–`¤îêÕ\þð[¥²ãÙ<¾bÿ(>½ÑZUóéxùe½‚}ÿSò"ß3ú…^ù§z&ï1÷Î<Þß+m¥ï1ýlÅú,ìåSÜÑGï¶óña<ÝÉ9y2ó–0Kç-`Tɹf¾—AÒÞÇr®û©›*¥È\®Ô1èIWp£KÊï‡^4açCß×4´·´Ó ÕŽ§K0çØš}c¸´µVlÎk~ýñ‰è?Ñv>Bï¸÷‰LûÉ­õ‰'Zíñ‡áâ®·~üÖ—‹Tí_-ºÞ{bϧúêƒ4Å¡¿z)º^ÎgëNOT5~Qò{Þø²'§ðÅ[‡Š9ƒÄ‚Ž¡|ÞVâo·:°kºG`*ö½õ`?û&Týùý$öä +ž_<”»X¢ìùi)ò{^¼ò"Eºô"^¹ï×¥ª´uV|z¹[¼c˜¢í‘+ö{öÙÝÊØoOn¿}¸Z~N/ úDï´éÍäÀÂöKƒb?>Å0(«}@ðq½·²öÌØ MŠ¡""×Dše,çVºÏw'óo³„ä#\ƺªÝߺcÞ‰!`f€[,„'ë2jl5ë?™%uÝöá:oº©ºî.v<÷Bwè®V¹÷;®r_¸y°PÖ=½^è×îpŸ'âó³ù‰{¶¦<ÙÕ~íR‰z×› ¡æÓÉüÚ³ØïÜùSßHÊÎ U~ôf|ÈÕÇå×Û²E-ƒùíƒäU‡GÈ®Ž“eï²ñÕez±‰þš\#—a 4Pel²V¬¬·r_ÄŒêcà "uÓ4ëáŒÇ‚eŒÇü…L ¿ŒrˆeªPVgDuqRÖ PGÅ›pä\¡ÿ¢K¬°wK›ºÚJJÉ·Dϰ¸û^€öÄíÍáç:¶áâTUn»ÛüÅ Åî·n\ù¡QÐê’kâ Yb«ê/Ã5Gžk¹òÄud/MãKº¹œ:aÍÞÑ`²'ßËNüÙ3øÈÏžÁG]¼÷§ÅÊêC£e•y[©’*,0.þГ«ôæ[·ãªNŒeÓ«­`÷lÅáQè+U._eêOò0?™–Q©3øâ®a\ë£ùÂÖgnàfƒgDyBGžrªýo½ÐÛÅo½½€ÝùÄÝýÌýâñ)|qû0!«Î†ËZ?[Õl«ÚHâüžwnÊö{sƒ÷½uS{+g/¼ÒñŸ¾Òrç_‡Š—¾ŠaO¼U*ýæÅy«VìÿËR6¡Ü"P 3‡¦¡‹Ûó£¯öÌÃ!_~±ZwýfîµV~ü?½”ëƒdµ_ŒöVÆ0“íG3“ú _‡1^£ˆ]eª\±Ê48"ŘÊ2UêÒÝ–z2‹‰ÿ\ÕccÓª­øä" EX´!b…””i®É¨´¦šQ±9fbD’±”iV‚ÔóX®9üXÃù6˜­hÆe×Z+»Îçw¾ò×Ϫ(å×ÙóÝ=´§¯FG\9³:öîG¡go¦ñ;ßz£M,94Šo¾ïÊ×› Tv:q ç§óëO yÂEÏOnŠMצçn´V¬Þ5D^sÎY™Ö2ÐÃ“Ô . ˜…s<÷ù>L "Ò}–Šø +3—±Sgs[ft?fò€aÌ"’ ¿ +)Þ>R]wtzò´kON[î, +©Ø;A +M2V¨$FÐÅS!´0ÒʨK‡ŠOÎâ;¾X¬ê¸½€äÒS0þÊÖ;.Ê#?úЇ¿ç”;Ÿ/‚ŽŸº®?t¸†3SÙm°í;^ûй¾þðx~ÍŽ‘ìæ›³…ƒ/‚ù^¨0¶ü…o„Ï^Dq§^ñ$&ÎgK÷8*ãKÍd\œ¡·Ïx¹É8÷±Å}¹Ôº\~÷p£¸èÂ>2>–øŽDCneã@b ÃùRòXÿÙTô­ð=ïü…ª#ãØøB36µÌ’/î$ñü0É7Ùñ9ͽ>rýñIlû­|dz¥üþoü…_˸=ßyRÞö¡WAüGß)ѧ¡êxºPÕtvŠbï[7ô¡–ÅžoþÓ·:åŽ÷‹M_LQtý¼ŸŸË.ï¯JÊ7㫎Sí~çÎî|¿ÜL¶æðX¶ê£1ªæ«Ó]ßÍ—ïÿu‰2³ÅÚ;(Œ™5n:3Åvã:z³`úLfÙ²eŒo@³Ì‡Ä6’û‹Œ_ÏøxÉ?9#H2Re7Zƒ=ÿ‚m°Áú¸CVA|eHõã6_œ#v>]Æu=s³›M.¶à«÷Œö= Ò¼­†í +U»Å¢–!`bIû¨Ô'j¥ãÏ5üÁïeìî<Ù=?y£'Œk½7×PZ]ïÀUïtVn»êÂz,y©<øWoEíùñªÚ›“å¯]ƒ;ßÌWVì!Ì7‘K)†~ªHyx–1›\g¥X‘g:o†+3møXfÁ쥌÷’â7• 4"Á†×¬Ù7^Û~ÕK½åÖbè®C^¡B¥c‚eµ¦?—ReÅ%™³ñy}ÁŽÊ:«¶=žG{ë?ž¢Ú~cz+Iü Ñž¸)¬Õ»$]|¸œ;ò}°jËõY‰ýª O@o"ú×ø‹_E(öþì®,h·W¦5P•tSîþÅMÙóv)òb›K•{~Z +˜*&Õk2M¤!å´´Üœ¥èxàÊv Í6^ºÐŸY8y³l±K¤ä¥&ÂPEjËäÕ–\r®¹"&Õ””ñ™iÂe7ÙŠÕ§'ƒé®«.³ÑN“Ý7$&ÇL-Fjc²Ít«»F ­7€õ6W°Åž«Ú3Šíz¼˜ï¸ï&ìyî‡>W±fßxð¹®'îêý÷•üá§ +åž×îŠ?.åN½áÕ—Ÿ$ªÏ>].ì%Sîyì&¬Ùí,5 fëNT|ïK{—O}§Qù;©;îÏTf6d3›¬Ùη‹UÝo–p¯º¨Öö9(+Rem±qwb\§º0^‹èxBëK©$_IìQê¢ )ó£|etòñ™}ÀL¥vIü¦Ðxd +¿û+o¶ëæ")³l€˜œk!•mqäšÎLêNOåšÉûõüà©Üõí±¸e(¿ªÞV,?4Z\nƒ­»ÉqR(Úâ@™:«H=˜ErñÒ#„Â-”%™Ó4ˆKÊ5ã’J-(ogÝÇãé׌ºlL^°æñôáƒQ¥\žkŠ>iðöÄu'&H5ŸLå’K-ƒÙHƒ e{fK,ÄÂö¡˜/ʽ?x(¾õfw}·”ÝýÎSÕñl‘¸æÐX°ÝÁ)à»_z€±ö·¥—aÍö|ã-î~(y®N½Ðò?•»Þºó>žîâ†jËç³ØÃoÙƒòUm¼6“-ètÀºš*{“ WC|fç³EÈ!Ø­÷æ¡<°#•2×ÂŒØUu6XPu½\Ä5_™ÅÆ”öõó–HäÅøKŒ˜¶n€¸¦{Ø”bi÷r-íĬ&[\ce|~_eHº±""ÑšÜÖÛó¡Õ&º¦g¢XÿÉL°uÀû¤Œëâ®`R–6‰ÊÖ˳”]O’ù8Ÿßtj†ÐòÙ\®íæiÇ=?mÏ¥Ø}Ë›ßqÇ“ßó½wèÛ ñôW!ÒÝ{¹ºçתu¾(Cÿ}Ø¥sÙâ‰Çjø\¾`Ó`2w]øý¯ЋËøÍ_YÐãàéÍ1‹]—0ª„jK¾ãÛ¥Âîo}Ác‹;‡¨ªŽVel¶F.굚­! ø6”Y±g,ÕcŒÊï#¥Ô  Z«šíÀ”‡®ôðët'®ÆHï+Á…áÃcÈÏ+€‰Îí{ã§ÜõÚl3vËCWŒ/XtÐ,àãI]™RiÅoÊ—8Kê ø +>¯ÙNÌÙ`Ëçm´c‹I}”±a ŸQgͧ×”K,¹”ò~‰ÁÐÅ…nÕÕ$ +Ù ¶èoe»ßº³Ý/ÝÀñK¶§ZEëIÓrÕúbÐǃ./´™À2ÊúƒáÂø*@:ùD£9úH+x Df4ÖN(C¨zÿx¡r»XO\ó…™`Ï@„#u·÷/»÷½·²óùÌ0ÌDèϤYŠ%[‘·°;¿[&”t†în0©eP“AH¨Ú5 +6 +†›X`¤ÐÂ'‚ù®Z‘iªŠ+ìË­Þ;œÌm7qÍÑqAòÆs±7,1lD†‰Tºm88âàñ‰ÅÐÀŸO®ì§ŒÎ0ñö™@!Ö€\ G°‡ÀtåÂRÁ’(?{—3e©àëšž±RU÷©æð$ÊJYwx»ñÜ ª)²ãoÍþlÄGŸÅFŸ<›vôz”ØýØ—ò(ÈX‹ÇžòšË’µ/o¬ {y©½r`•hÝЗ=Uó'SU¤Qm»îªìú~‘ªæÓqŠå}=ÜåÌÂIs_R€éDãfJ™eôˆµI†òð4cYñ›Œ‘m +öTdËE¿ÖKË(;-®Ô¬(è–€¡/d×Ûr+2ú nk?úR~ìzœØpj:¸t`*±-fñGÞ)ø£?)å;šÏ—qÞ¯!9eã'Ó…Œz›`M”r=¡â€3â,êjex¢1ØþìÊ5ýÀdÓ×P&ŸYb!$_—¹ÎZo2§e°*&Ó$0Ä@•È€“L5Öˆ=AÇ +k,XB$õjœ¶ƒŽ˜YÒ_ZUe.#Î :¨`qKUûÇWGb˜{/#kç(°î [D™Qµ¶à‚õ¡êz´úT zªMçg!ï>§ãÀ¥®¶T…Ʊ¡ñ½º`,“X©Úv{®¹ÙV¦N0 ˆoä£ „èœ>ˆ!BA‹—QÕ_’@5¤•‘ ô:@ó,8t…!ål”t:"F G ’K žbý"R§ØIE ÐÄB<‡+—g†u2¹gHrUd®)Ÿ^;Éí£ã(§H+¿ Ñ^¬Ú9šÔíKÀMv<ðá;¾tOΠ̻ Mf'´û4ûî«Â?½˜uö“ì·u” Ùtaæ¨ªå¢ b¹ôé³péÊó$ô顆Ç• #¾l…ŸÙHâãöa|jm¬Uq¹[ìP#¨" Ü0óÆÍe<—2ŠÈ,¥6ÙÈ—Ô®>r’K“RKõ·åª00¹ÁŸ¿ì."ÍDÉÅrá+M¤ìõ¶|õÁqðà6q¯ÍÖx i÷=ã¥Ú&SvaÙÖܾoü¥S/B¸3ƒ뽸5ÇÆÐ¸}²Ü–Áìò4“¹‚î,úê¡§ˆÉ5õöU0ð‹T§ŒäB^=‰é…æÐæä¢âÁŤz•ľÀ„’)%†3–R‰e” RÉ\*l +=°‹ÔŽL¡\f’C áÉ&”Wµþø4Mí¡)àrA³JˆM2§NhùbžT{`ø†½ú†…–šÔ5 × } ®íÚ|¡ëŽr30C©nvÑæ¡à`ª?VëNß]¡>ôPàZ¯Îņ6K®%tSÁLåsmù„ + Udº ´2ÄŒFª± ü”‹áìŠlSª%TÖáᬰR„’ü„ø;°yRëÑXžYoÖ»¦¤Ç™êÍ”¶ ƒîÕtÅù“º¬thu)IŒ€Þ¿rm>«Ñ†j·;j*ާ<)¬s6˜&uÝöÒìº/Wo¿ç%4Ÿ™ »”È÷ÌÏù-—æ +Ûo¸£Tï~Äv=Y"æ·’ëÔh MUÛãyìž½ÀœP¶?›Ç­é)nŠÏæ»Ì‹Ì'áãÊ-ØÅfÁêDC6:۔ǵÈ4ñ•‰¤æñ`\ÇÎfæM™ÃxºƒËn ‹7â2¬ùµFóµÁ‰K•êgVYkòë¡Ý7zæ² 5îÕgŸŠøWìGAÌ[Hì¸ë3õM©ù–ªö[ó)ÿçìë0þÔŸÔìÖ—ó¡9Æ'W[‘¹aèOj¯À`Ž rÝÏ=TMç§ÂOz{«½+:™ëm¡;Euœ É¬ 3ï8˜Õ0J)Ü,oʈNʳ“³ÌذtÊ”'þPÜzy¡¶íÂR©îãi°k>:Í|0aó•yBûµ%à~‰ëíh®µåò\®ãúBè0h‹†jʶ„€¶úÈd°¹ÖËó4{î)¸Ýßzó++­TáñÆTç¼bÛ(õ†žIÐv¿öã{^ûÓXßýÔ²˜*öb+Ì…¸Bs–Ì?p¥ÅÚÓS¸­J 7]ÁŠƒŽÆ ki` »¾ö¦š§ÄßùmC„ÂŽ¡4__ÿéTqÛs7©ã¥·¶ãi€¶ãa¿ýËÅÐBTg×ÚŠ¥#À2GûÀ7æ‹»iαîÄDaãµ9Rû×ˤ®—~Ú®{²Ðî; +õŽ»þà'’¹”²ëºz¨¶ß™ššYX£ëpå»GÂæµm¼Àz:Ÿ-¶~¹ÚÒò¼¾ÐõƒÖ ¿ýÖU÷ƒEà„bM„ú_\çÊ}Î|Û³ÅÚí|ùί—‘ç{€û [Uk/F¬4Á¼Çš“¦îø ¾ó¶»f÷]yÈî{¼ºýŽ'×z}4[ņ£SÀºËö;SÝ«Ê&¨»¿õ—z¾–ó;þäÉv¾\,VC×+{œ)ßnï ™îø—Qšž„pu—¦Òû©õØä5–¨uƒI Ýu™¸ÜD1½ÙF"¯O9’ÐŒ!v§b |””w mð µ5ǧëÊwŽÓ«ª“× Pçµ8m÷—h:îú _¸hrëì) ñ¼ë•«­ q&þ®Ån&yÙ¡—rÍɇ‘”©¶z»ãÚYÈ£8ÍJâŒÄd0E[íq¾Ú‚öáÚ¬{0Pu›ÁƒE¬¥š$Þ‚‹Oµðr*J_¸j¶Ý÷ +Ùz×OÝrÓjy§TXér7Ñ®;>_!iÐØÈ2£:Øäsi³{YÜB]Ïñà¹úÂíXݹkI`qûºû1A\/‹»ë¦—v×—Áê÷ÙÎ+ (‹5eÇÓ%¤†ž æ êÍÊb+6œäV$ÿ¥Ú‹¤ÎàH¼›^[Ö5±¼@~íѱ\Â:KeD¦ êè—¨KöŽTïI5.+÷C®fÍ#6ˆkÛRЉ†Ðåƒýk¶ÝóÔµ=ñÕT˜ŒüW%Fsa<â4¯ Õ@â2ßpœÖ=RÚk0.Éõ6…®¡¦\¯mOü5U§§‚£Ž{Hˆc¬k(„¥˜hÒJûSç¦3³µí÷}C:n¹ Î3ôŽØnâÏ6^s¡ºùíCÁæÚ^,⾘ÁW˯?Ojª#ã…uG'°;»iOߌŽ8{6C{æærÅþ÷\ýÙ©ü†ËÓ„UmÔÇBs÷é„ÕíŽX׃>øwÐîº^,ƒî‰¯§ãíIüªB$yh¨ÁzsÚä+>:Éq‘êf¥Ô „V +Öß©†Alžæ&­¸¿TKâ «àrSí,â¿:ïz«{î+Ààví§ê y ´³–—š+#2Œ¡-«ãTBœ!xÜÚ¤2+ml±4N(S6<ÓT¤LÛbKÊT^»{´>74 2+@‡:3ºí¡±Bµ“+¬¨naé®Ñ!5ƒB ­ ©¢^Û5ú·ºj×X¶ç…·îÔÕ˜Ðk +Äc/xØŒß29Ó«Ó´e0t(‹{ÝÁqT~`Ç3oiïyÈÎGJ±ókOÄhªEb6ÕÊkí,•6’jgiþE;Kµ÷Ô‡¸¿ÀÒ\©W;«œjPm›´Â~Ц Úð”KÛ=ügØÞÚYš­–IÛŸ-£vLæ¸BH0TÛ‚Ö<ž£VêõƒO«K:Fà3‰1…fbT^èËk[ï/“:^xA÷€‹Áóã •B¤ÕofxÕž±ð1”ƒX»w’ØtÆEÝ~×\]±ë…7|Û“%$æQî<ÛðãÎý'w¾û[/íñg—Ïiv=” µ'ÐuCè<”íÁe4XÓuÅÚã“ùMfc-\•n Ö±DòrÄum×CÆû­sR½bèàBQm¨ÔDÒ\²¹—§˜B‰êÕ@:2ÍT@ì&k½-Øçê]Ï©vV9¹¶hgUC;‹äwÉÅý4«73V›KâÞïÚYB|¹…‚äÁËT 'F +Zò^!áFbD‚ XË‚ŽØæ +Øk5ÕÇ#qŒ®‰¤UôgcWCŸ LoʽÞtn6eqCg‹ÄiåÌBóœk|îõ‡§€Y‹ýhT¿7a•Yï:pÕøÐÅYB;J“”gÑ«Õè(ìyèõA1ÚY:F.ƒžIfètá¾ô‡4 Yæ¿kg †vå•þ¡•×W—¿}¸ºþ¬‹®dïX ‰g”ÿbµ9ÕíÊmB5s×ÙBÇR[Üì–¾6øB2®êØR jßõçæàù$öï}~qïóó;Á¬†} IÄV³*j×v i¿é¶ín­›ºîþ“;ÏýÁß÷Tñß¹ó–‚;¯;…½/ÔˆiÐÐÔäo¦.É2Åš„jŪ>búzkÄxèf±á2.Ô@µÒ}ÎRí¹Ès¥ÜŽ!ˆÐöã"W™*ùP…BÍ;1¦:¬+ËúS-öÌòš¢-ŽÚÌú^½6ÌùµG'ò]O–A—ë‹J’÷@[:ç2àéCµ³”¢Æ@ÅÿS;k$ÖˆeA:&ÈSAâK´!â“6*§¯6&×L›m¦ŽJï#Eçô…†7Õ§.l¢)Þâÿ)$å˜!ÞS½ rmÅÍç]¡ñCùôé묑·jH®OüÀDMóiWõ†CSÔÕ'RͶòÖüλ^Ø{ƒµR°¸ÅŒõÖXKùC; ñV^g{–rkl¡Wí,è%£6û/í¬’^í,©÷Cã_tëI‘¦˜»`økVÖZ#‚ÏÕ–lNõÌV5;èò눌Ø!Eäô¡Ú[äù!™ìð|ðÖÿõù¨ã5åÛG¹M5ûk4_œ§m¿èR¹o¢:¯ÖÜgè=S-Ø5‡Æò;ßxI»¿—# íXhãÑç“Ø‰5¾åõÚc{u×S¡•ý¬âžW +12)Ê0P©fäb´jG¬g)5 4±Eâ3„úK3KJI•ý‚åaL`Ï)^c¤Í­¶Ó•m tÔåTÛq§òàx¬P-ØÊcÀ°ÇžÔ¬ìþï}ÅÆó³ 7í¬ ì•C ¡¥âE†‡v±qø'ªåKÞ< ý®M¯¶Ñd” ‰Ï¶-íF)2ÙTˆL2Q'’ø í.â“¥ªîÑÐ@„†];‡®ÙÖÛ‹Å­×AßUÕd§+êt‚F…ÔqËy>îs §››ê®mÅwÜvGl¡ •$ï(Þ6LÌ"ç]Ž®/I¾us©® y˜6®È"4»É!$Ôõëv×îþR¥Ûw_­Þõ\ÎÜzÇ•jgQýö}cÙÖϨv–Ðrc>ÕÎ*hv–‘?æ¢&ÉP,ÚéV7Õ¦^»‡jgi¡Ÿ í¬’^í,í¿jg%ý¡•ч‰5bR[jHÞŽœÚñEÛÁ÷†þrhi3+Éül +mú|RwH1äù¡+ŒX.ÒºTȨîž_s|}@Sƒä%½œã]£5äZªŠ,¨>Ylzh~«ó¶8p?›%ì}å¯ÚþdôÙÐ#ì/çȵ­ÒûraF¾jFÁ‘š<*¿þ&HÎ2J]¸¡´ªÖ눈?¨ßðºXÀî4IòŸüÍbíG¡Wmn/ãï«bo ±™Ä78hÖí-_šW’¸-ÁŸ¬!>—Ô2Rv=ÕüÃ~+vÇSwi糪Fz|¶™òŸÚYY¿kg¥›é¨vÖ©êú3.š´ÊJU˜>;ô¶q¯T›Û8X³~ß䲎Ñ!i%TßšÖã¹S{ë•ùT¯€Ä!èÒP–=ô +¨6yÓ`iUɽöŽFZ¯.”¶ßöäÛ®.æZ.Ì<] ÃþZËlwÂy‰ŸÌKû5UÇ&C—T³ó~ÔüÉìÌr!"ÞX·"לÔkÃÄ-×"I-Û«/Ù«ÅSí¬û‹¥ßø«{žc2ꪅ‘\lÉEôQÄd™°±%}ÿÐÎÂú4¨¾ÒšŽ1šÚƒS4«ë†Òø¾ºÕI¬Û?IÝø©‹¶êÈdhWª“ ,±W së&Úâv'aãÉ™½úŸºPÝ˜Š­Nø[Ä5ô¸jO×®=Å®W>¸_§éºï¶ûŽ$ÿ ]:Y ô£ ©tÙöÒÊÊþ¸§1á“òÍq_Šoüt·åÚhgi÷>æU;^¸A;KØp`z>Äò=£ÄÂÎa`YótÍù쪭¬gUû¬ì"çDÎÚY¥½ÚYÒÆg -ç"FÐõVóµ…-Ž4×$~š-ȇùÍg\¤zrÞ•#¥òΑTk¾|÷MÓéÙâæ s©®-U Ô’ú~U=ãÅö›îRÇO®ãæ"ny­õÇ'AÏ:Ð{Ò¬;9U›³ÅN0‘Ö˜„5 Íþ{ò"º¶ÑýÔÝúÙªïDj,Zk¬;6Yj½ºXÚty>ò$™"ŒátÆbX–)Ö|4)«­ ƒª‰Ë6×f®³·ßðéüRNµdVÕÛ!àH=,'õºŠØ6¯e a„ucèÑ`]ƒæ`Tç4Ï\[Ð2 Ú]¨ù¤¢vGhnHå»F¡Ç„®3•ô8 °W¬_&˜K)E–Èè ±%uÍ¡I¸ŸA5ÞW÷"³h¾L]qdœ°ùê|¬‰¨Ë»FAóñ[ >ÚB¸®¨G©_,Ù< šÕ´Ï¥áòlª”SC5PµÙÕƒ¨3ä¡R‰Û¤FC¾Oul•w8 äÚÓÚz¸9ä<‰þ®éÞOÜpt2Ö44Gi´Gnë„Î;KÅDc•BbpÿŠjÔ5¡_ÐyC–PjI×þE;Kh:7‹Öm«[†Iõ'g WµÝ‡ú]cª"9¾Õj­4uåïZœ¤î#óx„ø‡vVYûHh‰˜S[ÎRuMéNçÞ×í{ µ t¨köŒëNZλ›'6£9 ]³ªé™€× ÚpÄîÉû! ¾ ºSdŽ +µ¤–ï¼»D}ð.ÇüÚŸm¿9{ìpÏ]S}r*Ý7™]Ô_:xOvòÊŠè§“#}­Ûu;˜ïþr)©‡Üñ™á‹4mŽd,É9k¿¦k öº‰1…}ÕÇÒš¹åü|uN£R·Â'95Õ°^ÝíÝ-Øl\%ĪT!$7T2J…Žá£sú ?Æyñ›?Ÿu ROöQ²ZªåIÞK½¦ËúVØ¿D5‰jNOå6]Ÿ ÍhÊÑ>RËb-Jˆ‰7Ö®§zýÇÓ„Ú&a-1Zˆ-0cµ)ÆÐQÆ=tuÅ¡qT…Þë…&ÕÖÐYÃÚ6zɤús.¸gE5±† »¨<9QS¶o t¨µÅÛ°ÿFl>ß›[Òy´{¬¶ú£)°{:ÖXo‚WIëp¬]K]÷ýˆÿž*¦÷“bsÍ„ðTufà ìëö¿ Òz¤Vï|$Zn/ š=XC ºÓǧ m׉[¯/Ö¬Ù3ŽjšCó–ä|4g­94û áÔÅ›‡BKØxf·ó©ÛòÅlÜßÅýfÚë_fAcRõ‰ðóÈ¥ÔÙeiž’¿qˆ¶´Í‰Þ"þk9?›Ýxj®tÖQÏ+Õ †Ð¯ š*$®PŸWц=,ã¨nΛä4Fy/Ô/üœÔ-³O(DâŸHÊÇäõÁçÆÞ3a×3hrX·ÞöåB¡ùÂ,ÌÄ/a]·³°ýñRìõÔxÄ ]¨¯Î«³CΊץ>†Œ%ö^Bï ûhÜÃÚêþ¶+îð©ôÞtX”ê^ÄX¼>•d‚=X ‡N‘ºÒD©éÕDÌÝ4š*8'Üã£Wúù’œVÍH+‰]àsÖ›^=󧪫÷OÀ*îA"gT§–XQM,£‘#á³i+zÆ©›ÎÎÁúŒº‚Øù|šÊ£ÄìÆAØ!$˜«³¡cI^þ+ëÄI5´ì“ò-°~)5~:šGT?Z[ІËÝ<u6½\@ÆdÐË«?<ùÕ­†f{ùgR£P}Ü;‡/§ZO]Mr è*!Ön82…ë|â®ÙsW Ü«§Z_UÖtï Ö±¨êÀx±‚äµÐ7ƿ០»Üyw‘ªíú\®ùüLzO'‹ÄØ™c½úÆ­Cé}@¬G`ïpÞF‡Þ¹u8ö°m_ÐÜIªÜ=šÈ6QiW¡–€nrh ¹u$Î4ÛK$ÿ”°ßªjÏÍêæ¡ô^Yó‰BûµÅbóWܧç#òMeâ +v9‰ee;œØÖ/\ñúô~M>±‡¢¶¡˜cby·Ww`<Û~u>Ûry»ù’ zQ…ø<3èc + Ùfê5;ÆP}8ì!Y½g”´‚ÄЄÕšìMöÐ*TCK›ä£bÍâCN‚M’šË÷Þà_ 7¥NαVVZ©3kl¤’.â£Ú†Ñu>R3Ñzƒ<×úÒ2¬däѨMPïâº#OÂýV‘ج˜˜cFmÓäš©KÚ‡c/”˜g®AøãTçk&$ÅëNöú#hŸGu® ‹uv2ÇÔ™äÚ•;#õ ò"Ø ©fñMŸÎÀ8"'ä[?#­'¯AΓê‰A?úÃXçÁ:yVå@z¯”äDÐgSïxˆ>:>‹äÛØK[A®ÛÚ½c¡EGõÊpŸ.w-ê$h×anÓëÿ°áØ$ºxÝþÑØï +ÝDhb¿ æÍȵ…¿Òµ §q©æÈª NÎY\»}µÓª]Î܆ӓ¸š“„¬&[äsôܰïeëõù˜OTc+&Ù:ኞ¯«>ú:Hìù:PÜýÜŸ[`“iŠþädìÆ@§‡Ä t>B{0©ÒŠ~n:¯OLÓ8>ŽLJãÃñáøp|8>ŽLJãÃñáøp|8>ŽLJãÃñáøp|8>ŽLJãÃñáøp|8>ŽLJãÃñáøpüÿ|Œã™¹,,-¬Ÿ¹àÓÏ|Œ»ïìòEØÊ´¨Ô~æAäG!ÓÜSÓ–ÅF¤Å&%†¥f;ͧ?XßeNóÆ„eG¥†Lq ™à´Ài¼»ïŒé!ää·œ&ão§Oéâ4Mï4¾÷…Èïd©±1±‰ä‡Êˆ°ø¨ßÿvþ×Ï|Šë왳¦Îr9ÛÉu®ëô©.sæÍpJøü|öÜ©3gÏœáO>‹þ ?w¡ñßþÇëÄÿ¿¼>ùùò~æ|?óÄ~æÁýÌç9Ÿà$NwrêgžòûÕñŠšÿû÷K£Èüq­È_Ïp¼û™O[•å(ú; ä +ªè˜Nþ›B¿#ï>{Æ??è,'­ÓŒ9sæÌ$ ,ÿ·þ¿ûý9¿™ëäBÞ~Æ\ò¿éä[útò)ÇЈžïä2cΜ¹dœ}Í}|yÆÓ#ñ ä™@e¤œ1Ä#P +7”±aAÁ²h‰ñZ¦`üüÕŒBµÜ@UhŠîGUt¾©*:ÏT™a"פzºË˜% }_/‘ ââ ‚t)†Aª8C/?YæÌøxÉÑäÚ冊¨•&ÁaÉFlÂjsÕŠrsYTމ¿"„ ”…3 A)#ÒŒUQ¥}¡YÆþÁ!ô½ý‚µä5”Œç_òUÁ‹1†è†ÀÎõ€€Pú7Áb¬m +‰6§fHFº¢Öáè°G,¥÷Æ[ šv¼¬¬ˆ®St cG2º4µ¥-#Ђ.I.<ÅX®iPâsÍAŒ¥—ëNG·&:ˤ„|sJ¦ _Õ+rÌÔÉ —4؃2E‰%ø{t&-Ïê+E¯4Õ%–YiSÉû§¯³©„Oη Ä„¨S%:9«Ž0¥Ä>2ņè&£RMAÐV°"ÆÅ‰©¢Ë†‹M7åbR)Yd.1.Ï ]” «*U¡J)Ü@@—~9ÿ¤sMÞz{MÕÞ Ú¢ÎèPÖÄðé& .Ðs¯Ü5F‹îÛåäuÐ-Šë™ºv %´9ªKv Z‡ðéVBÚzòóz1»Þ–)ê¬M4ÍUL.´¤$üÍtw8%Ù”¤×E›‡ Ã »êé.vÈûp!qFœjj¢\cº6è̲àh¹"ÌÀ_®a@bR¢cAŒ§”ÇÀ5•ƒ®R¥:ÁHE·‹ ×”ü„LÏe ºNA{åcËÍÙØJsUx– ˆÞ2PMeaŒJ·ÂDL¿ %ƒ®jaåúÁ)F~³Ô[Æ¢ë5,ÛTJ¬í/¦m($”Yª„$C(7ëÒŒ|Éßùz€Øj‚>HEÊ c^›lÌGg™jVYh +-ÕéB +êas#Ô¹õvØ…®"çK>ƒ¡:«ÎV“¿m¨¶¸Ã „mf-¨”r•]e ûã3͸ØLSͪÖ!äúUƒVQ°y˜¦ùü$§ÁA—’×O›še¡ÍZg ’%5¬\m’¶ÒTBÐa¸X#>"Ñ„Ò"ã +Í…ÔKtYêò7 C÷¯”Vb¥ŽÎ7£ä ¢Cщ¥Éªµ•âóÍùå+MAë¢:Äö¹˜Dc!*Å$u±ŒŠè¤×V˜¤®=:U›¹ÑNJ(°’òÍaçèî¥"´{/»ÉŽv?Ä—ZÂ65E#( kãgs¥–› ÑÝ(ô$ø”K¥–Œ±Ú‘œFì]¹å]£@X *o‰yæ´%§ÌZ[Ü6BL¯ ®ÈìK;LÐ KÆvéEÇ›ˆyÛ‡Š %r)ÊÐËÍøH/FÁ“ù¦Í0VHÉF*)ŽŒeš1K +i…a`Äù ½Ê6ºD#J’‰Ê$s>Â@ÎêPXñù@q" ú +‡O¨°™¯#g# ‚ùJW&ç€Nf1£ÑFŒYm¦Ô¦á=@«@g²:®Ø´:>+ÐÁ×Ûq +%T„¸ì¾êe*M²‘RCühH’±zÅj MVÝ mjµµ&!ÏB—m†U]N­ˆSt¿ŠyhHè 'ãcN3È8PjOVµ­&­Ê‰”°—Ñ4ˆŽS^ó`©öÔ4t@¢Cªêlr]A¦ ¾]$ÚŠ}ãµNÎÔ®Ý7AC ;ÆjóÐ)_dI} ñŸ½Ý¼Ä'Ÿ‰ØíV%c%ÄåôE7:lF›Y:­´+'%;F¡ã‡v­¦W ¤öFü²6£ÚF“V9PZÔ~¯EiYóÜZÚQJ»¿×î£-냹¦)ß1ä«Þ®¿Ýδk¬¬s„¦pë0xt«w9Ó÷í ¥ÐR*j†4Ú]Ñ5JN?t‹49H«êQ*0¨ÞñæTM†ˆ·:¢ƒMʯ·W§¯îù Ú+ü*ˆ`ø¬œŽŒ%ì]<ÄgÀ>A­bLÐZìÊÏKÆø(T±EŽ Ð1*‰<Ÿø$."ÕD¥6„ÿ¡4‚˜¬>°øfUØ +#.*ÁÑþ2,DòQ«LùØB3ÐnñÞ ÎÃÆ¸Ð,tcn¡sŠv;%•Ï\Ý_Àù%•Yª3jl@!m$ uZ­5h¾Ë¼Vo¨F7ML±9šb j¥£’ØKéÄÂGhârÌANP§–ö‡oTX‘g†NEMåvgt3Ã?À¶¤8bŸd“vZ¢C±¸Óݧ´«’؈ ŠƒÄÒK:#¾œ\ b_6ðý à +©¥ý¨RFE3È,è’Dn¿'%¯î‡®Cj©Äf3j¬)I?K+éÇ®ÈïËGß’-:íW“9Fü1íÀI,©´Èxñ|ÜÊ>¸6xÀ—k:P—H≯jÐñâ²Ìz;CÉg¨=3Î-RÀ7ÒùF~_€ÜFª>5•ßr}žP÷É4J®91‘v5&­±Wµ×~RÈ+­0Ĭßc,ò~tÂf@L•‰ØéÝúø,´£™ä"‰ÿ</óû³ª¬QgX@©’ŽM-›v²Õd×Q_I™ÕÖbnµ ”.àGAB¡ +ëƒÂ°º}¥v¤–YÑóK©èOãsYÏ(Pgà@ƒE‡3Bk,uIûqý‰ÉèJRÉøÅôÅàóvƒŽU¨€ª)Ûã,&WYÁ§‚އ÷ èE¸¶ö"ü&©`· pó±EfJ(NDgšÀW"VHdþSû¬èv¢ $–Ë4ä+©Uð}°˜`¨ õ—JÓ«BI t§®91Ä^ÚõºæÈx¨€G;œ3I~L¿ß`#Uî#Ô~< $k!Ë`¨}AFÈn´ +· ÁƒËow€BhçPP’: ê` ¹ )•ý ä¡Ð%"'¥ŽÔd:â¿£WõA:­Î†Ú‰ˆRoP ²_b¡…´j½-%<´?s§õwlމd|Ùm÷惰ÏÕž ú;ì“ú€²'øäÕ À!·"5Ápø·úÃ>‘'Òñ‡J‰YÈù‘7€ê¢!ã²³$¾H$¾ÀÓœƒØ2U.Éo°£Þ$o¡qˆä”OꆸUæ4!±Süýç”¶‚™¿°Iø!ÚIüûs0_0§àŸ¥òŽ‘”bE~G?[ÅŽQP§íœ«=4ñd2Ìw¼æÈ çÄÖhœE;2ÝóŒÈ{‚Ö¯Š$5sH¼jFÄ;j+踧>´Õµ,’Bk=Ú™Næ'®Ÿ:{5U/ 1VŒ%5‰I|™QÙ¦‰ÇPÛ‚}Š+k@Q×ír©U¸P¬%!/ÄgãCP·Ç*ÄR‡¬0õê?tùÆ™ø,Äd’ ›©«ŽNÄüBlVL]ןRK‰ïG~ȇųÑÉÆªÈcVVõgc³MAÂÝPAêò^Ú_º1Ö&øÄR .4ÝXŽz]h$ã# Q¡žÂuS…$ìHI²¤Ncóú‚´G•‚@‡)&5n)#äi{Ç@)m{¼Î/ø±‚ ƒÙíw +»ßø©öþÅSÙöÕ<2)Å6˜Ó4H•j,j  ìÆ7_të.ÍÓk­ÙÈT¬á€V9 ¥XÂoÒz¸ k(¤–Þ< tA]&É ’ó,5IYæÈ?5«ÖØ ž’ +¨ç˜S´V µ6É‘LA9Z›IrK‚²ëì@—‚Z ¥Xf5¢¾–Ä,(—ÐÜvO|v/¥o÷h±îÄ4‰šËúSbüQÃyaÇ·>âÞÁÜÎç”J‰/Éý‘_SºìÊ’~Pn ×žØìy|'â5+P[ðñäïá+±.”²ÆŠ[¾ªÍC¤7XCõæùmŽÿkoW¶m ¯@ÜéwwB€àPUÛÊ€׎á.Ip§p'@ˆ ÄHÁÝ $ž–ô9gÿk.ºÏ=ïÞûßwî÷=øª*:ÔÚk®9Ç”=a ÆTˆ†ßøKë)¯1ÌQ×ápÖÀ6‰ÅgA +ù>|ÅqAOÇÁ¾‹,lAþ j³ýççÌ P¦ig­Är~›Ã>êÀH0#öb`wv Åd|–†c³ßq(…ój3œÓ˜ +Í‘™Øja›Äσïc÷cÛÝk?%!_xJrRû€Ù¶¶ çPdñó@rư…º%øNœï $ñÄyÏQ ¤uÀÈwàXý`4â«€¡"üù:Â~Ì3☘+-FìÍ^!uýC:¬t-¨mÀ9†<ÎD('ꦠÒlpLÐý¥ì©óc Ñ{ðßæÀ­`®Éj H%ÅñjOr—¸™€EÁƒ0ÎׇHO`<,,€ûyûCˆåćã 0ã’|Ý{<0Ø…Ÿ+ Iþë7Cê?p,Ô ¥v“e¶¡ýl‹Ž!S ^¾:‡N,ÛF‘ÎúŽƒz&a…ðŽ™%ñÉXÀD¼^G§µhÑéïvÕǘ7¹àç«éP|È{$ÄZP¾¡8 µ"À«LÔ› \HþZÎ!z +àCæ€ýP`#g¢‹7ÑÉ Û Ó*(o9%Ngú1ÂÅ{‹YEÉ&.¾VCœX­%Ž/Ó“~&CW\cU!/%Œ>Àd q ”Q<ÒÔ>ƉoÎ.ðÑr6²p½¾±A-ìÂÈ@ÔŸ¯c»‚3EÔ9pÞO˜åž +xC9'Ο€œMl÷PçzwüÂh1Î[€­êv€{©ÝØZÙ †œ˜ž€™ˆ;F°µø¸ÿXðË€w & lî`“Àî.>0Ñ…¬•wÀi˜øäű’=NCÁ6õp¨ìg/R«g¨í’z§Cè©Ï~–È` wÆc,`=ÂhrÊ} a÷õLø‰Š+Ü@]ý¨Oßø`,ÊèÑ`B&ý™J)A]˜ºÇÁµ"ÌîpαŸ øØ£\#TIMjH¯,"õ$Rÿ‰œL¡P—f1ÔúNC-ã œ¯;ÔÆe§qLüh§˜ÒÏB„ñ+ö“$‡ºl€×€ +à}Â|ùú1ç`~ô¸4‡°–¦¢”ÙÀâ¬êÀlÌÚOälpþröâ8¨¯²g½Æ;8Q½ñ½½TŽIþ,ÔA÷–ƒŸØ.y`AØ/ˆœ_î&éY±‘uOÿ â¢Ø>n*~%•\§ª^œwÚ,öLàxú Žy§1ÎñJUƒs ‰-×dâ«·Ò‰ÕÛ¸ˆ‚ „…å(؇×(‰sðqÈÍå ‚lC„U Ý€]r¸€ÇËáz‹ÅkEÉ[ÓØ!§áÌîcƒ _g!_‡8‰qÔðÿb½'XÊ&t9xok X˜=á;FbÓŸ¯ŸñKjŒØçB¼†iñù› ˜àÇËÅ>9‹Åg“YësCàu¢6ß›Ü.¦ŸY_陨ÉÀp+Ú Ê5G•5HŒý-ÔÈD8‡‡ó"Ùg7 zB² iæë# ^Cj…Ø—qÞ™sHr·}§‡C7ئêx*EÐV2WÛ %wëåtæ{]`ÂýK)‚³vÊXb bõó@ÈéÄ?‡¸%sˆ¶ÈÏ¡7%ÅvH˜­€mü§{ò,`f% P+€ëåOX7ÿdä-±ÅyÆào »U¾> +r,xo„ÙÑ5v†øBÖ<œ;/"y³Þ¿~fª ¤Æ9ø¿k‹!§ûç,ŸHÇn`ƒ_¬`ýûƒM{Œ¥qþÀî·BØ=Sg>áöbîž8›ŽzµÔfXŸÛ ˜ã£!¦AíZrçÞnÙ³Ä.Ùj§I.‰c:°› +„óJ³QM$=¡ ÊQ .%­Ø!I¨ÕÀàG@EÏɹÆq ñ+úåz620|k£{ê  P)ºôq‡ ½më_ù:`9¾¦¯ʼnCøÌ±NØ5±¿‡Ü[)ñHT“º%ÍÄyð`\ +,í¤^jEáÏ×°–‚Z"¨=“¼ çJÀ` +ALBívœ¯¯ãŽ!õ}ɱæë\ðå |õ7ÀépVõçëp^œGk=é¯á};1wM›-u‰R%ùº%Î×A-ï-©;{gÎ%ù2é%ÆÍ&U.ðé +R8â<ðû"yQŠŸÁfÕ’øq”"dÈÔTŠˆMA?ç0‚Ûœ*L*EL¥X›ü/¥k‡¡ýl—OÖÊ<¯.`ìÂÙBçDPóôÈœMTZü³ƒB_¼… Í]J&ð»ÀŠÌùÞ[LEWn5©~ìÄP¯"=ÀݯCÏ |”Ì Ÿoì3¡6Kê@ÙÒ†ôÜ@Dœ^¯G§¼ÓdqnKXe16Oð) ”³P'‚œŸ=vq©?À÷8í=7ÈDh=@_›š§(eÓ쇀ZÌñÙeð™EG¨'ÁÌà(PvÕȉ Æ€Ÿ Œ¿‘Ô/1¦bcË·Jü.'ªøš1qÅ[¨ô&M*®t“0µqà4¨]šb¼m¬«G”"D8WÒÿTŠPß½+c23”û„¿EŸ .i}†Ôf w¶Iòj`ÉÜfÔ°$ßcu`Ѓ<Xie³›*é•é¯uÉΧÏ',Öç‚'õ³ŸJð>c õOÉ1l¿Ø.eǼG“úÄÖÀ;D!…ÔíOöÏVpà§@åÇz¨;5ôsþã©=ÇÂlQ’øÙý?”"’+µ$©UzŒ}´Ê_J"ù)eb3P‡´˜ø”"`¤.ÿªáѯcQzÀv#·Á9Ð>»¡ìÞ“ƒI}Á5i&äŽDŸ#¨¿üëym.±»c>£Á€‚*•Ü©Á$·k2¡/V‘zÿiï1ô¥ŽpN¹Ó®£ ÿçWJüP˜ +Q­Á±•=tf(Ìð@N +m €¬átj•aF¦SÈ…èýJ&¦&ÈØÐá¼ä9Ѐ|r?ú„ßhð‹ *ºK—A;7 Ûv!PV…Z«ð(|EO5_¨›A þÀÀ„qòW3¡^jvD™j—ƒš'(5à˜ ˜âä¼Àb ×…°}¦7k‰®÷èá3µ”²A)ÂDXÂÍÀCÈp”!ÿfj¢¡Ï Cqû†ÊA‘ûkRŸÜn(ì7ékXD¾Z×JrÇP·=æ0‚Þw†ø!‚-¬“ļØJü"`N¨u‚rWØ£Õ¬âùzÀ™Àž{ +¾QÒJºÚ&HSKééš!î é‡îd’ªÔ…XÍ¡†%¤A•èÄ`’OÞ[ 3_`£ÌþÓƒ9œKÃÚ¥É%ºlXþ:)Žm¤ön0‘ôÿ`–ÃØ\SÕ¨¤Êm\Z›QŠÎY +6CýS)ÂæO¥ˆSCeD)âúr`Ú—žº0jkB|žh˜=ÁXSæ=]³P€÷µ6%CìîÃ¥gƒ'†z˜¹ðLŸ ¾ +ì•ø!`Ez¶I–·Aû õwP”Ÿ"õNœ LÇ¢è‡+Ù«M&âK°¿ 8E|ml‰º,«L N*ßÉ)ž­ßÀfÕê33Ô.É<°œúf/‚<òoèÙý¥Á¥ˆšíâôN}If‹ Õ«K]jÐàÎgÎ…½ßiˆh¿Í`ê Ç°¿”"˜¸†­Rœ—Ÿ’ªCàõå2÷Ußq,_[*}¼Vê{c ÁÁ€pì ³=ØßÃ^1ñ…[Å åZ\r‰“\ªû µg&,5ôn$ zíu}>_·…-XɞϙÏ>^J|”ßE DÉú^™˜Ž`sèCÞŒ¹\tÉV.¾BrÆN1òè×CÞCÎ`y˜ÛÃ6!V<Ý(IªÞÅfµÈnWYÊ®5‰™€GKÛxætÈxê¤ßhèA­Ž4c-˜a;…„Å8Ÿ—Ùà×Äø|C- +úE&ú4‚ß#j+Ê|î.—{]šGðÌϾã`^Ô%$ ¥Zâà¼5džzv >úg¯7AEö‡ŠÎ_dž?XJRÛ(Rƒ€ÌÉ=£gÉΧΓù笀™Ž~L“4ƒÔÞ¡tæÂ8RcwTLƒ|œÔ0€9÷”×Òã±¹0êàP[‘ÅVjK¢‹¶õçì8~ÛÁ|ÇÍÅ2ï´yP³'ª“¤í7j ìÈf/b¯T‰ŸVî‘?,9ÊŽº†”É,[JñNYzµ±øR•>•˜·‘(;‚’vDáz`ÌkÒÕ)Œ þ߯ns6»ÉÐ¥¢qnŠq¸ôj=M]jÕ¥P'g=Sgö÷'ÒfÐ?uÖçÉb¢a0äQþ ¡æ%õˆ›I”"<û•"$ŠûëA ‚0écì/;ó·d5¢Ê†óTÂ4Œ_ç’*4¹”jm’Ÿ$7jBÏÔ|@íŽû?ÔîTÿ©v—Ú¡ s?ƦŸQœÌ$Ì”À\ü}`L)Ó¤4è2!«à:€íž(î@/rt¨¥A<Ä9’äz5mùðÅ1ÙýÊ=‚ì÷šp˜ gËY›D`ć\ò%Òþ9`,ñÅ. 3€aIiÖ{×ÇxP§!QHp|Çq^zÔq„â(‹:=ü»ì¤?™+–x„©–dèÁlÌüà¸(†eßÜ%2×ôYÐüKÔÙ G ý¼—0+>ð¨êIOxŒ!µþýNÃ$§Ãq}e®$øáðD”ÊAI ç¯þ9„Ál—³õ%uu¨›Èãëvj½Ø)~:ä$P‹‚yósÁ*'\ÇHíý&fü?•ao©ÌÆò{Å{-ò_Ù²·›EЧ2Ò!ˆM$_ƒÚ(;ÜY jµLj«6¨o2Iõê\xþzÉÅ[‹$^™sˆÒ.ôüíÂT FÇóEz°ÿ¢Aãü•ô…<f‚ª9ä¢Øâ  6GñN>?Ûˆ*ëus¨DÅyxœ«Dý$þK)âÌãßXÆD=]1[æ•5°ß_õU’ÓúdÌgãߪK*t$‰;™´šªÝ1©Ýe7šýWµ»ZMP»ƒ9LrÆ ~„m‘°Æ\YD¡pü‡¹CP&"êI^WçÀŒ¨ +r*Äþ/;&M»¹›Þ¤Ëù]Y@”=¯ÎiÚ&r"í6 j-0 ÃØENî==zfbËGIÒ Ä+Bí‰ïS‚yXÀ}DÉÇ9P9Åc¨gr‡0ö€z<ØäéþY5REР{ËHû PJ;…õÏ|@ž˜çdFfýs–™‚~ôQvŸ}*èïAoj0« õHR#så ê=8PóÁ8ê\àæÈ©!dFÇCÈk{9øÈáá;á V+s‹˜!õ½²æ{YPvÌ ¶šV©ª¨¢ô6u2£pÔc$ÌÂŒ +©;Æ•o†š 0Óß91œ¯óW™?ðûÏ€¢Î=`vÅ%Z•œUP› É]êÉ÷”þ5¹¥ÍbCo/§R+·SqŘ‹×æ1¶‘“`&¢_¥ÿLTœž­%ŠBŽ!*À¨OþmPÙúŒï­Etôóu”âÙ*R7e©cGC™¨OúÝ] +*á2Ÿ«‹ÉLÌÃì"œ 7æÑi];Å=Fb¯» È| ¨j.»5ç «@Ý…°èƒÆy>‹ë¿³}TÈ)!ï¶R™éÅø°.(ã8ÇO‡¾'ôüØ}v$îÃ3‡Ï %³­NIªÐ£…܇>ŠÈŠÉ̉ó£@Ñò$P¥b,íš©&*Z ¸C옪Jbó1÷Q¤/;¬LpØQûR K<™—ð õ^òw o…Zê…ë H¾³„(š¸Á8Þÿ‹0k…ã,ä7 °ƒíC˜»Jâ—³ özÖЫ'ŠPÇ„þ%Ô aÆêü³I]z¦Ø÷’^>Ô°àÿÃ8ƒ;w~ñ£ œ½f°Ñà{+‰ŠÔÓ¡Ïå™2‡¨–¿y¸VzwäqýõÄØ™ Ïf½Ó§RÕAÙQ|&p<{Ìi¼gŒc¶¬bÚ™‰d­°œ€í‚Ú6ý)•\¡u²&üÞ@>ÛOØÓµD;ðîRüÜ"ÈÙ`> Tk˜ôæTf³ÔBYÏK3945˜³‚Z_ºIð|©Kã³ózoœëm!ôЉj{ü›MàÀ¶á~˜ÁÿÆRñ…kd^ú Ðç…šÌã0‘k™¬.=QBõ&ñ©€q´Õ2+ 5Eè]Ãy_¸¹Pâ0(¶Ø…OZ>óHÈ1”Ü7BzÿçB'…gìߤ>—‘ØOò8Uòú!ÜA/ò 3ê\‡Ã, +ÔÑDæûgê­Ž „Ú’Ðü˜2ÔŒ©£Né}¶ƒA]ÔK8×älHÞj&ªtœP%Ãy½’ûXÀÅ0›K”é _æ4Ÿ`.… ~¶ªÿDN…˜JÞ3Ì ù?ZÎD”mEY’Ïcß +v s¢æIsH^ +øÔ@pN,¹˜»zŠýõ€KsA)Kê›»Œ /XO0+à0Û0ò srw—ua/‰_pMü ì… y¶ºHýÛ=¾® A5Ôv@©”ǘð‡«I®·Úè(Á­§Ê¶à˜µü0ôQq~¼jÞ¯ËsÁÿ@Ì‘úÜYÂ…Þ[Aj  >}¥Þ”Ž/ÛÌ\̘M  Vuðè ï@Ù%µcÒ¥Á†¯ƒëþfXÙÐ×k˜s‘Yû„)œ÷•9LJëIz£¨¦“z#Ü×9ô<C½Àý’ôÙýÃɽ*®WgKÓf Qå˜I˜ƒqÄã•s¸_Uã<®ÍfýsQ +üw³ÚÆL¦N‡Ž£§0nÙ3©ˆ’5Ô•O»˜k=ÆÂ+_µE9?ŒéßÌé¼»™Ü^޹üÉ€Êü´“ÎèÓænt +¥÷É^Ôž¾l8ÊÞo—²é]º\ô›-æççÉØ€º™]Å× ” ñ9] |¼’KnÐ’_®¥-³Ê$»SË(Ë”$¦P¨Ÿš(wŠ'×òJ:¡j+Ôg$AO×À\XµHΉ±=—ùÎÍzoÀ¦öh³I­; oP1"~.µI¥Ð”ÆíTt ©KsAV€ÿ¤3Ú´Á·°‰M þê9`gRŸë‹I-•Ì‹ÞZ~ ¾rÞWç1¡V0Š·ë©ôw;èÔÆLFã.IV£‰8£ÞÔ©¤ºmð¡~ïŠ¯Ø vvM§´iÀìsù½>{½I +Òìíw”0µ{»(®e3•õ]‡}Üe.)|÷3÷ªýˆôqÓ>ön +¾Žøwe·ªÍ¹›"ÉÍFüÿµP’œ înK‡¯¢CÞ¬¤¢ë7 +²>«3¹œìqõ!Yn•`Yv5Åd¼×e¶hB® +I0kÀ* +7IãËwŠï¶ˆ¹›]"6¦bs¿úhæ|6©y‡(âõJúÄÅQw3IMêæw*ö˜ßªÚˤÕa‚_­u\‰ï“åD™-¾Vô´.>X +ñ˜Ô;÷Ú†| -\1”àEñF‰ÏÃe0ÿ"O­5•¤véA Š=g>Ο¦0®™3÷Ë3)¯ÜÙ¦±µ«LïðÚ¢Ç?Dôóo2êÕo–Lþ7kÑÛ¿í–ñVLËq×» ló''¦üý ® ç0\;yY‰»´¼ÚIü´ÛšyØ'a÷J¥OëËÕ1¿]e%O¯Èâ*µe‰µ»ØäÆØ÷l}¥ƒ-e[4¤—šÌ,.ÕÒ’ÄV‰ß£å+Z¸ÇÏ–9MµøÙ{¼¹GÆÄGöj› {­×ŒËi帜f1÷¸m·äQí>ñ³VkÉ•6šÎìÓ¡궈Ò;4¸«mîv+Ëâ=¤n÷™P·¾³×>šÑ·ú̸[m s»SÈÝo–Hî4Ie¹Õ{,žý,¹WaÁ¦µéˆ’k¶Rišø¡6Ç¿\ v 6Æ\êЧ·èC¿VœÕ¶i,¿\M˯•‹Ùôj:¥Q|—Šý_b£:ô,¨ÔwêTÆûÂì;™Ë=z̵N#êfŸ!}ý£}ó£ û WÎ=îÆ~ ‹£Ÿ~”q/Þï—ävì–ÜÀk¼ÕJ‹sëäÒ{M»¹{ÍRæv‡jÌ»_D9_©‡Ÿ.ïã>Ñ«¿[PO¿ŠÅ%-§¥%/Þœ±xôæ¨ìV…œ½ÜdÄf¾×ƒ÷Æ…å­…X@â +ÆGô³2qN—ŒKéÕá°/Ø}¥È‚KlÕì>¢lfuz (SB/Ô<ÿ•üIÙqÉí.sqN·\z½M"Ëj¡e—ëqj“¾$³Ë˜ËèÒç|,¥+îâíLDÑz¢.–·ð‹ä>ç!Eë$imú’ÔwzLJ—–0닦(®w“ íÛ6AÖuÓW<%hä‰ÞÿqNÚ[ îí¸HU9F7}±a{>z0=ßÜdŠ‚ö¼¿q°õZ´´¯6PÒõÎOÞ^dÑQ±¿õY¼¬¶Â _G)óòënq^×AiQüyýIÉ­f™üfµ…ené‘ÝÏól,ïÞ©’S™_´E -›ÅW:„òÜêýÜõnŠŽ©Úõ?¨‹3›±2•_ªYÞ¨Øk~­Jù&“Ú¦Í-¤·ë27›ÒœF ɳšƒ²gõGD·~7¤î1zåâW­'ÄyÙÇÝræ~'~ÒfÅå·dó>íe^õîc‹»N°o»³¯?  ~ßK¿üf.zþEL|²dK;ËZK.ÊÚÞúH*JØ'ï,™[ïELÖ=*©u•þi'œöN;ÃÝk“Js-¹;õ›Õb@e´k‰3[Lä÷Ë÷}Ë•ßlf™fÌ•v#ñÍVFz·ÁRü¸Õ’¾öUŸºõш»ÞJÑ9mBê~'M?ë‘3y_÷roºŽs¥í?³o;±åïN±í'é§}R6·“…ØD?í–ÐwÞ‰¨û="ñ&1“߸‡­k>-îhô6ï}&ýP(jâ ªykºþó¶®ÝŽ}Ù½—Îþ¤Ç„âj5ò2èi_Žq)ĨW B«– ®ü]KœÓ.“½*;kýàÙYY\t©ðúw]êÆ7ÑóÏ,õ°fýª)Šî^/Lø¶Y’ôAOžÙLYÞ®<(Uhk^Rè¶ûí+‹¼b{éÓêòIV›Á*—ºu!OcpœãÒzõ0&\/u¸4C[½A”û‹)UôÍŠéþì"ýô6@ú¡8@üé/÷K§øS½/÷µçÛ×ã)í+ :Ø’q¬)Uá]Vz>zûuÝ÷›«´§1hß»»1]o#¤ï›dm~LMûY|=³/?XsÏ?ìe~ßA¥öiÈž5·((u–?h>(~ñ~s÷Í>ê”Jß6ØX4JKšÄ/›ŽHŠZ~–VØÊŠ+,*óÏKÞ6–=¯9.y]s\š×p’{ÞnͼìØ-}V‡í±üˆ,¿ø„´ âöyæfé›…~wç bªW nþC[ðˆ7£ {öIZë¼å¥ÁòžÊ`IgÃEqOÓEiWƒ?ÓòÎ^Xü7KañTñ/Ö¢ò/˜wÄê}dŸ*C¬;ïEK?52åïN2Ï»äìÕn*ôõJ&øÅ +:²f=}å£<'yRomþ¼ìŒüYéqyNù^Ù­zsùÝJ+ó[•–ìýV)÷ðœzÜÉqÏ›­%ùõǤÏjJ¶_¾Žz³ž¾üQWú¼åˆyy‰»¬¤ÜYüð½¥(ó×¢ð¢TЫe‚ˆ·+¨G(YM‰Çþwã÷u>‰“·—HÞU{›( ?ÓàUèYTéã]"k.ºÀÔ¶ž²ì}áV’|¡îbTX½{TF¥KDVµSصrçp¼ÞÈ e¾ +ÿ·¾‘þåçꢣv¿¿νïÉ÷cŸôYÊ×–=¯?.{UuVú¸þw»‰á®6™I>6ø +?ð¶Ü׎ Gš²ãN6]J:Þt9ñHÓõ$Y{•/Sôù øo2QõTÅßš¼æMžñ:&©ëL/}Ü,yÓrf÷û"Åž®g +¶ù½[Ôq”-n;ñóiz£)›ýÎPr·Z.~SvÒ¢þ¥ïÖ›±{ÚFl½›pº15;!"Æ»Ê/Ò±.(<°Â;<£Ì5âfcx^MHIÃÙ ÂJ»Ð‚rûÐâj›àŠ*›àüsY…mhq±CXn‰SxF‰[d`‰OÌñúÔhóÞÁ’¾j?«Î‡Tí'„y}÷Böæ7!{¯["¹ß¾[|ù£)›üU[z¹ƒaï|cÄ%ígdÝâŽfo®ã§¬·&Dú©,„é{ï.þÜæ+ï-µè®ˆ`›;…O~RßQ’üêÃòÆ·d½•Á½¯#Ü«ƒ’üë.¦œjʼ´§ã‰BÖ]è³·ëIôþÎ[±û:¯GÙ6‡GWy*nW:FÖØ†ÔÛ„¼h° y…¿æÕÚ†äÕØ†<®tÏÁç.¥ÂM‘Vê¦H*sWxWøGË?å™”ðbÓÐâEÂ˼¦øNŸDšÛ»[v§ÓJúªé¤Eq‘‡E}a€e[Q¸äuà QVŸ•Þ£%ÍjIï·î•½j8#-À1ùù+Yu—¹_ŠKUDŠeKa„8¯åuõ7}aBÝÑå/:ìÃn‰¸±ÁýtCRòá–ë‰Ý…ØæEYô…K¿ÖïéÊQØ5*âk\c¢k<Ž7g&ÉzßsíµnÚoÅy4Ä{ÖùÅÄÖ¸F\«t ƒÇ­ +ÇðxŸž—:D<+r‰y\䬸UìSây°-;Rò±Ù_ÜÖè-¯ª®¡Ýù@Û­8ϪÀ„Û¯\#ž¿u Ïy妸ùÚ ÿ¿n^»D¤½ñŒÚÛclOaÄWßr¿˜Goœ#ò‹C³°Ï*®° þÐx6ð#~b_çYë-úý£‹^3/0ûΟÞ×q]q©Þ9º°ñ\ÈÃzûˆœzûÈ Fï$É÷ÒÉ÷ +ˆ‡–^E{=cð„×0v £»ÿ¸òN‹SJÛ„R´q‡>Z»y;Z¿iZ½^­\» -[¯V®7Aê”Óm‡‡ã´3ÿ¶H§–ס¿´¹8—„†§=¿ ¸öÒ32¬ÀW“ç£H-ðŒÉ÷:±Ã±†Ìq÷{óÎò°ý­·b0.Š )ñ‰Oyí“öÖ]‘qCT™W àôѧðÄ2÷¨¨ï˜ þ îÁñ‰¯½£o=uˆ}s>:ìí…¨ÝÝ"¨ö_Î1=Ýn ¡ÑÕç‚ëšÏá3GýèqׯçMveÿ²|—ÓÕñú¶écœoO6x£¦Ÿýe¥^Îß×éßã7ëG×Î×@sÕV ÙSæ µÉsñ&¡Qh‰†¡áø1ÿ¤‚&"5åIhî5´bƒÚnª¬qîÉH͸3ty]Ó/üQÁ/¼­yïÓ`Iw§Ÿ¸áƒ‡¤±Ë[ÚÕæàÝõèó•±q¯½#Só=#®¼òˆÀ~12£ÀKñ È9âå[ǰKEî‘ØGÍwÈÍw ðÂ-ü>›7‹\#îºD¾.q»XáÇ}m÷®ó¡~ùäv¶9*úEŽÁ-gC¢]¢vuòÆÛÌ¢…Sb;ß?¼·!ø])‘UÀÞŒÀx§Ð|ÀëÿùC‰¬~®À(4dÀ8üu4¬4ÿ4 M·-_·íô®œ,èÃqãïŒ}Ô^iO“ÿ¡æ+1Yyž‘ù.a¯="³Þ¸Gbö¬Ð)Ô³<0ÆòýïҠX°Íû¯œÃo½q‰ˆ)òŠ<Ôš)þ¥ÙŸû­Á×¹!(¶òÝé °&—p“ßø#;/U×l3Dj#'á5 %ï0~‡ðý(¼¦‰ØâÆãïàûÿe5ÿùcYÝ¿®{þ„½Žÿ½Iø,.Ù~iø¶LÒ¾Æ/6îã÷síï½åmVÍOÂ4g+ÎUÇÄØÔ(¢_¼ÀXÛ$ìaÌ« +ØÇœžŠç.dßÀ—>Èw¬/rŽj/u —~,òÃÿžµa;Ï™öð‡…ßy[½·¼Îfck4ïÐÿëX£ÒŸWþ;èÏk6yÈ<4{¶1Z®smw«£ÝÉï¢?•ÚŸ.N ŠùÒ3êQ¾«âaž{ôÃB—Ø»o\¢žå»E½zîõ"Ï-2øO„[yHtP‰OT`ÙEF9λʜ"®•¸„'–x*_ùÓ:/øõÚÞ7&jZÛ)­X¾MQClpyÿ§Í)‘ë¯Lì¾þç5ô[â`üúröúÏáò=<7ŽÀ^uš‚Æ š‹¦«ìD ·Bë-S•têxês‡“e×ý€ìB·ðÀ"_ÅáæŒHȇק(—A^‰±W¤þjWu 5;žÏ~ë^†1{]µMh?Öµ I¨q‹±êɉÀøBªy.dÈŒ©Sþ¯ý@üø×µþõ¬WùÏ×ú×=˜\™áø + ÇŸcÈéí÷¨ý>Hùϵ#çoòØÕhñ¦ChóÁƒt®ñËD]¼ÍÞæ;!'+Ò¢"^_$vx¬>%²:Ï=þmkT-ÞúB×øÆWîIo]â«K¢^¼vÂö©xXঈ/ôV|àe«ÔehÒ¨ älýw~áûñ×:ÿ»XÓ°?÷t0þJÖ?â˜8~-šµ@„iœEk¤ ¶eð3Œ>óÖ{ë¯_H|꣸ñÌ+êÙK÷˜×ùnñ¥ùîÉ%E.‰O +Übr \#“ ¼"œÊÂ#áá^‰ã{DT…GÄžÎÁú%¼Á’«ÿ×ëè÷†Êä=+ÿËžøóµáøÕøsÜ€)h’ò 4fÀd¼O°OšŽcüL4aÐ<4fà\4Zy7l)š2yZ¬îŠ6ï9H3Ÿ_Áuç;cÜãÄ„Hײ(éÇó¾g‡Ó#°‰|„}e2#àk“_¾µ È1¢©ñ\ø5œsÚ4…+Œ¾ó{uRßÍߢ/CS”Gÿ_öý_ ?ÿ/àœŽÂ^ Ö¤2tš2z š6q3š:a#R™´M¿MµM²±‡ï‡¯B“Gâß›¬‰æ®Þƒ6˜g)ïÌæš´ó¬n©¼ØìöS¯ÈxûZ^y¤5å{¥·½qKé~ãyé}©[zo…kZwµsrS…c|I‰sä];Êøõc”ÿßøÇ¿ü ¬p +ì—Ê 54n  +þi ÞEˆü8~*MǾd&š4p!š0d)š0lš8r5š¢ºÍZˆ±ŸŽ ZÍ% X'NQÚâß5Îè o%îzéóÜ7òÎãó±oòÜbJ \cÊ^¹Å—;Ǽ)p‰yõÊ5æö×È|ìOŸ¿qVÀóŠ·^Z­¼æâšÿëµüå7ÁG 'ž}ÈŸß%~dØŸßÅû¨2h6š†÷iú„µHuòZ4Uu;š>O͘cЦ΢©sM‘Êtm4i–R]À¢e!h‹Só(×ü +é»§ÎaO# nyu1òAkÆfŠè"ÏŒ3£ ÷¸™ñ Æboß:EÖ¼r‰|Uè‰×aøß½éPÒœ5›qlûo¯ üäPâ’ïû}`ÿNÐÈ4Ii +š:|!š:nš>e;š·L†l<Šf¯µÆChúb š>›FSæShÊL4IEM›¶‹¼¶B…¶:׌Ò~Çë÷ð{­nŸ?^–ÿØ/²ø‰glÝKø¢|÷xãc^:E¼+vŽî+wŒî­¶é«qL¨.vŽLªÿƒ—ÍYgö¿Ú3xÿcFó'zìypöú_…_‡&žŠ¦˜‡¦Ž\ŒTÆ/Ǿyš›ÐÔñ[‘Ê„­hâ„ídmª -ê)š½âZ¤ïƒÖî¹­¼)¨sœF¿pG¿Þø#¿o_íeÀ OžyÆTå»E×á}ª*qŒl-qŽƒ3×Vã”ÚZéœÜZçôºÄç>¡Z5ü¶yKôþ×¶Ù¿VDöâÙx¥©h¼2Î𹚀ÏÜD噸¹™h4ÞÃ1ø1aÈ4iäR¼¶ÕhòÔõØ>5±M£i«-ÐŒõÇѬNhž±ZÄÅ¡Et"ZeõHikð¯“ÔKøULwѹ³IÁž¯ÂÂ|_„¿ÅØ«¯íÞ[gÅãJŠœ­%NÑeN1­åŽ1y¯\¢NUÅ…k¿æ·L3íßÞ·¿Îø{ˆT•UÊàYxMÓ°=NÄÏÂ{tÿkJªHeØBìñÞXýæZ4}òv4s6…æ¬9„æo·AsuÜÐ<-W4SÝÍжC?iÛ£…‚p´Ò<]i“Oˇü"“^~¿¸ó•óÏEIyá¡ï]L¨|â•TûÒ+-/ÏU9CP©OÌ醸˜œ'Ô•::¤äãóó7ùyS§®ø·cù@‚µ#âè5DzjØ÷ÏA*gc??[ä$b›ðçD¥Éx}³Ð”sЄ³°oı‹Ñ䉨ÿÏÑGjË,‘Úrk4kÕa4w› škŽféû£eÖ7”6x׌Ø~ƒŸ­UÏk`|DÖöÔëXUjPÈ‹€ÈO=#Ê_¸)êðÚŠó\Â;†¿«´ ùTc×ÛdŸTZå˜Xìnö£ëÌ2‰ÍÿuÏú1ðüü—/éÇÂÃðnÀgm"Þéä1Qù'¤2fÙ+•ZØ Ð4l‡?­–¡ŸV²Ø§£ésõ‘Ê4M¤2K©¬´@37ã3g€Vº¥¼.¸~ÔæËüTõr~µf9¿Áô뇭._ô)ô ‹Ë?¯À¾3úÆÒØF£š*â;ª»k“>×:$vU¸$·—;A-)B¯™7™£¶ñßÚ7åñýþc4^ F#!µŸ4Ñ,5=¼ 4u¦öêhòì?¦lÀ>Ÿ3|ÖT§nEÓ§mG3T4êl4cƒf¯>€j»¡å¢d´b®Òj÷Ò¡«Bš†o~Àÿ´5õÇ´üjÝNÞDô¹ÉÞ¼õž·×˰° gey^i….Q_º+„%ßw›<áõÍîâü¢àûn®­Åݬ?¢SÌo׸P8AeÔìÿq]ý±mA‡à%‡”z‡÷iò˜¥h:ŽÇóVY£Å:6hÞ+4o‘Íž¹ ÍÀþrúøeø1o R¶cJ4k)ƒf­” ùš'Ñrã´œ‰Ak÷?V^Ò>rã}~šf/¯®õŽßaü·6éæqï{¼ö5]=R›µ§ãnø‘†¬˜”b_^Œ9Úx9Þò}Q¤kMxJi©]pO¹mH\‘g䮞^exâ\Û`²žQ$6E*ÄŒ ˜ù +üåÄA30QÅçQ54qô24u–š£Žññ‰§·…ôLÚv…Ÿ©þ˜_xRý¿`kÒߦnŽèž°1¸sÜ&×Ò‘›Î=ºÍ·lœf.¿hg ¯iö‰?iú‰?&þRèmÙs?èdC\äs“Ö|¹k«âɧð’b‡°Æ·Ž‘}å.‰Õoc©/ŽZ.o'€ÿþïØæ°?c9Ø' c•!Ó‘ê¸åhö´L÷ZHÛ¢Ö¡h©cîÀe>¯¯ö};lçë¡+Î=¸ÂéÙ uÞ¥Ã×ù5\çS7rÓ›¡ëmò†lö,µã¿lG ¿Uý?G#°i²V6¿@·†×5¨ãE†­¼Ä°‘ ?ðçÎVE‡fueaììRm˜"=£ø4dWÅtΑ‰çiêâ³æ,Øö?Ø¥Ù3ðë“T0ž¢&ÏÔF* MÑ‚'ÐrÊ-¥Î£’´æÐå Õ£·^æg¨?ÃûSÁ¯ÛQÁoÿ·Å¿vÜú™Ê+$~h­ óNÆ…¼™†Ô_y¢òÿ÷ 'müÐYë¯F?© Ь%hΆÃh¾Ž-Z&ðBKwFË·@KÖÒhÁRm´p¡Zº^ŒÖSþ6žz0d“]á𩟭SÉké×òfFݼ%õ廳uÛµPÉç7ç…ß¾Ùˆ>ÿ°7hæ¹]™¿.ÕOê\jp•_kT›š󌠜·Õ÷ãj¹wUn{ºGYu>WH>¶ù35}6‚·¼LTñã ×ÑâéQœP^bìY¥•øaÖlµõÿ†]*AÖ†±>gxFÌEÓ§¯GóÖ˜¡ÕºGÐÊm¢Ñ–à 7…½§þŠ_¬óƒ˜ò~–|zäJýZnoö¯?‹~¯²üÑhcü;Pç;o¢û™|çe†_ù=ì§NO£NÞbW@¾ªÁ‘ðaºÖƒ x}a)¿Ç8û¦.W¦ïñfL{¯ë¡Ö«±ûÚoÆœjHM:Ôv3ÁØÔ±{ bCŸ®’f×Ñì£n©iê§u:§FÌ]´…äiÿÝÇh¼o?©l@ó— 1ν€6y1h£oÛèÍɼ +¶½»>ó´á¯üÃü^ýï¼tG#¿Y³”_£ÝÅkýÎï·­ È.u )wp­ + —|xî5}l{:Ïù º÷øµ»Jy“FÞRÐÉŸõýá ýVÈ}ywÁè¯al~HIsÍF¤¯£à>J˜c¤R4˜°«$öéªÒ£¡ãÄ.¹s˜¬ß Ĺ}ætæg]Æãú,¡}¦ŠuÀ¥«MÑôQsÿK-è?lSã,Œ±Æ,Ds׉ÑZóD¥­­ÀÿíüLÎËnÓïüÓ_øãÆŸø½õØÔð”q)O¾åLëx+QooÖÁ6)å9ã§ü.ÓˆÖe¦ž·f˜¤t­–ÿ¾—éyï*üÈÛZùC†Ù¬7õÉQÄ׬£/ÞÅÜÿÀ £‹WQ!O—R ÏÖ3·«Í$¹o¤²ÒB˺|ñÃK.ñÃN6¬|ðj›ÛÈZ6>÷—u•˜”ðìª-ô»®áØ/ŽQVEc‡Î@ãGÏÂyô:4k±Zad‹6¾>pÃ…²‘[¯ÿý'­ +~ >O&»žóÛvy=UÙu$e¸¡ë]üÛXfèÝÕ8ù‡ü ¶¯ÁCÔÓmg\À›˜øFª˜Û?ÐäçÓƒM\¼F*rçòúâÎ/®¡ÙÑôü­Ÿôd¼Ûf é•¿m§®üÐ-Úm?ˆ «Ý(¾Ý!‘¾h<Â=kµâ +›Kß–œ5ËêÛ.ºòM›Êl×¢/}Ô?|·›Îû²Ûà)¯±ó笳l'yö¿~ŒÇ1cé +ÚÄùÐtz6fg¯að‘—›}æOöòæØ_KMqÜ¥¿|s§¿}ð0ľAÏîò¸ºhý¦UÈøø©Afw»wIÞ¸œhÎL±iŒIÚÓ« ?ö¹™”óbýŒË |^Î0ºÏk˜¼àSÚW›†=šozÿÇ.úqKÝé1ÝüM:=Ah~RÙÀL„(ùae“üû®É3˜¸ú-ì•oÆò— gåÕg…ɶˆŽ]af;ÞðdäÈ­F'Ѭ©kIŒV&õôÚå 4Vǵ)kЂ "´Qî?@CÑ5Mó)¿T«Žß®ÿ+/ýxç@ÿÑêÁýVçkÙ÷,z\o³'SÓs–~ým/õâ7)[øá¨´¦ÁCVÒäÂåöI)»ÄÉšHoó&Ä +Yó’µ¦ÿ¡k÷f…àœïh¸Z·šÊêÕan÷EÑUëDαS8¯¤Ÿ¤¾©ó¹˜’­æ™µŒüU±­EI¡—üiÍQqN›TœÝ" 2;vR1Åë„~×fœŠ ý¶‰G‘ÚÁ¿~À^N»ý´X -58޶¿>dç~‰Þ{žÁùå~¨Ñé÷ñœa'/6­æ-Œnüm³á^§Az†h—–™ ,GY(í>d?ÒÊ-y¾8ªxço™±¡m˜5 mž;m…Ç¢iHgÇDÅä­•¼¨=Èä4Œ±² \²â¤vmqr§úl5“Ò©%½Öȱ•§%…'©ŒßvR¡/– oÕ§ >ìeêºÏ˜tð{tÊyMõ‹Åã7íKSÞ¸?kàÖýYƒ4eÑ9woŒ¶Ûà »²¾.c>ô¹Ã,ŽKUh<ÕýÕÁè.¯nݹÒ4íËF“»¼¶ÙåÛÍÎÆŽÛºU­P›†VOŸŽD»tÑî£'†[Û9MÚãx~Ü'fvû‹6óºõ€´¼ÜQxÿðö/úÂk¿j‹üïÎ9ú§B2æÓ7LÈŒæÓ÷Vf7ÿÐú=ŸOÛ¥MY9 Z$:pr¹ï%«ÓÄâaÙ ó¼Ú³ÔÓ>V x»Ràÿ`žIê‡õÆ =+õ]s'ïº(­Ô£ù86O[¢ŽfkZ¢µ»ChU«èÜâ—é¾ä·ëæáÇ]ì÷SÞÏ×ñ¸>A÷Täpc·K“Í‚/Ï2óO™a~c®IjÍZ“Ëï7 Ÿ-¢ìS¦Ðg¢'p¶‰S§+3û«ªÌQ¿Q»´ôöÖíH ã•ÀIe–J"¹¥ã;]]°J“¿ZŸ¿–޾¿Fÿr•Ñ­ÅÞmåè'mb2Wy1në–4ƒ¾Ü§+{Tuм¤Üͪ쥿yq‘‹,¯ê´ðÊm¸¯‚rŸhræÂ}ÌI:ŸMÝnå­¼t …&RC†â|ç¡ Wš M—‚±ÚüNý÷|q\¤÷ˆßªãøpœöñ¬áºgsÆèœÊ©w—_'øÈŸƒY>Aoeìš9y—9ÒÖ0ÂkÒFZ›ÔÑŽM[è¸ý0öJ«±8»Þ”NkÔpn*”#¸']@‹‘ü˜ã(¸½T«g~­HJîÃõHQ Qz£:œ9ÊÿÊ<úÔÅÑ”mÐx&0g1Ü"K©7†{¸ìÙãÒ}’Ü™,§v7—Ñ«Ïĵn%¶meS?hÃ̧äMÍ)Áßt©­›©à‡‹Ea÷—s¾šüAU`LÕÆï6nç-ñ¾éÝà×ÕÍ5´r¤®n‚tMeÈXvNYp&r¬¶mÛ … vÉ®†ÒXºénÛÙ¯E#>¦¤£kŒ4·î@zÚÆHhB#‰ÜJÙò¤ýh ÷”¹–ž—Á½A2÷PU¸Ç‘»Üjhy«b¿äö;©ðòg-‘SÔdÚóÒO¢´¢ˆ¢UÔÙ¨ Âcþ#E—þÐå5bou3ä^»x¸Ÿ™ºxu6å?vKVùÜšcš\»ÖôÖ-³+_ÕÍbKVš¤÷­7¾üu“qƲ…¼‰Yùßdf…c ïþ¾ÅÄëÒTÅÓôo›èÜ^Ú,¦e©Cô‘]ü$ÑÙq¦â½4ÖoBæ-DÛV®G†øÜÑœ‡Â½lÀ¥';ë3¸Ø©°§+èìN=Éj‰øn˜»ÕĈ¯7™¬=*ìÞ2Æ5n:g6‰sJžÎ8Äa7•º6ΡàJ¯•ßn!yU}Œº÷Y ¸òMK˜ùQ]xùËæÞ{†+l9!Îk9,¼ò}‡è”ïhæ´×hÊ5]UP·yú^.kª< ã^<×QëfúŒ71~Ìk+z–9çªì0>€ô™JÆçÇšåðºÂ€Gó¥'”VöƒDçšÒ•47kâó·©cŸ¥Æ8GMa=Óf½^pMæA»X˜Ò²Utí³.u«Ëˆ¸µ€v ™H¹ÄL8&N2õ¹9Ó$ôÍ›Œ zòsJ:ÔÑR{eúŒ’¡éž¢3Šñ‚ŸCFkª£ÙC& I8oZ1þ'¤µe'ÒÚ¼˜b‘ÅJvH™è✸0V²÷ð ¯ô_äG½Gï–ì¤Ûhñ Ç‘pÏ0—Ye(Ë-·’Þl–S¡/—‹ì'S¯W 2{5h¯³A«ËTzX‰Â¶*ÉmÝ-½Õ,£/}Ò†ëH…å­`ÜSgжÁØ Ùs;º×kf’û‹¶Ù­¯Úf·¿ï4Ëþ²]èwc¶ÀóÚ ¡CÜ$Ñ1ï°/ ?f*Apo>¶õÉ´Oî|ê´ßh°{Êûæl¸¯T¸ßn°Æaú&2$’œUf\SUéØºÍl\“ðfŸáºÕH‹®öêÀ½]L\ùêRƒ&•Ù¤÷‹Óا0®‰ªì¹à ô¹Àq´]ÄDQ$ŽóY}ÂĪfWz5Dw{M©ræI§Œ~ÞmÁåµí£r{…‚?tèG½ÁÕ_wPG¼Fq–L-N(Ãý[tÖg=Ù£Úƒæe¯ÝäoKœ˜gÝ2ÓœèïóÆ&¯çê +÷¡¥*sÑ’Q3ñWU¤cÈ"Á»ÁƒvƒÍ¬N ¤öž,”Ÿ¨±CmÇþsûúÍD:å7š9î2B`i­±B|ììpé™óã‰fÔÛaœÕ±â#g‡W‚ør½©ôf½”¹ÕaFyǪÒ6ã…iµ›™KºÀkÈœó'v VaÒjµdßX[>r;Py'ÌâiÉ)æR¯.܃ƹߘÍDTo`î.bϧ¨Ñ¡ÏW27aœ°Hpù‹†@Q´ÂÌ>r¼À-cš©ÿ³9ÂS1ã´´q¾°v Úº^ inÞ…Œ{À}–‚ÃÞÃÖÎ_†æ ŸˆæŽš€–ŽUEÛ0þ|eîš4K|{Ü“'»xoS±ÍÜ;{‘ØâØ@HŒXù¡„‹´0Ny•¸‡Mç"ï­a’_o%—oÁXzì¿0¶b­ðÖg=îæ{Zx©yè(0'}Ç€îúh9_»…J¬Ý¦wï"g=ðæBæBú,*ªd{½ÅŒ¹Ó"‚½e^´[²ù-{é މ›)¬ÂÃÃLèCJº: ÒÑ0A&ÀsÀu(}2x,í˜6 x£hkç!&Ìì;Ž*Ñ?‡Ã¶ðãùËá¾ærŸëskuØyuÒs$ãš‚ãùMŒ“Ûˆ~˜³„J,ýÿØ{ïø¶ªlÔ I ¡fèA$€”ÓKB³Bˆ;V/¶‘m9Q"KF–ã8$¤N¤RHBèf˜¹Ü˜a†¡÷;3wÚ[~¿÷~ïóÞóÖÚ§èÈ’m‘D–sD±ÎÒÙûìµöÞ«ì½ÏúNöü¦ÂûÌgúžýCµçÉ?O%ù¶Ÿÿ÷ÙÞ—ÿìÄ÷4\¿¾Ñµëm{íS¿ßÂXÏ|{ú÷zçcÿ¸©v×/íµ‡ÿ×dl¿§kíÙ®ÄÝý›_ºÖuô?ÊÝÿ£ófº·¼p{ãËã\»ß§jÿyRÍ3ÿ×-ÎÎ=çMŸ.c¯¥Ê죯*¯žX6™bʦL™R6£jvÙ”ÛÀ¶|ûÙí³½e·M«.»íöš²š¦Äi®®çaîAÔ/øŽ6æZÄ\>OÓ`w-èwd0Á{èç‚ÿÐ×S<‡¿)ÇœÝî¶•#½›Ÿ¼Ú÷ô׳ëžû(ˆc×·ñèXÿŠ=—`N¬À3Ÿ¹‚¯}^xõÛ÷¹¿T»þçT÷“ÿ3ß óìýDFîÙ~±góãc¾ÏyŸÿëœÀ[ß7;Ÿû¦×n}g¼kë‡7Ôú«8çÐß&9×=sEMóÝCkw¾ÝÕ<¨¦qÑwÛ¶³jç/&ÓbÙÄ˯)›ÌW”M¿¥ +ô¦³ 1"17|hÃÓãëö¿?-øðooFÜ5ÌC‡ù +k]õesª½esÅ΋ñ]ÌûØôØ5ø)ØË½Ëv_è]½oŒkÿד=Ïþc¦û©ÿœæÙþ»ï®½zá?ÌïëÜry'oÙžKˆ³ë_i’Wpó«Ü¼Myv¾åð®{êJÏÆç¯v>þÇ›Ý/þe¶÷Å?׸ûŸJ÷†—Æb¾ŒÚúäiÕÞyƒkïX<Ľ`ãÈ9ˆÛýܶz$æÔsÞ±x(æÙÃüžy÷œá[vàR߯WÇ»úLÀñ…9Á¯¸Ü›Ür¶çÎgyZWŒpÇ–ž¹#}kžëzôK™¼ƒ¼ýÇv×ßÈøn%Ø¿†º×~ßxõ˺úŸ}”üüóyžÿ2Çõð¯YØ~×ý?ž€ï&âûkÞŸÿ[SíSÿ«Ü¹lÿ…ÎÔÎs\«Ž\æ<ú¿ouû{ú;06+œOþOæsÍMÅ5êPó`’§eχlíÁÏDÏò×̹£kHÅ3Ën¼A.›2ù6—µe³ž2g¨i°+±eÛ=gzÚ–Œ¨›‚”$ÇKsçPO×®ÑþÍoÞ€9}0¯k}çÎ Bs»Îh˜»xxÐß<¸nn×ðú{_åÛûádÌõ„¹1<˾гñɫ܇¿¼Ù{ðÓ[}O~{;¾çêßòôxÌ'è9üUyð™OÞ¾®u>ù×òÚgÿ»ÂóÆß¼Á÷¾Šßþzžï™¯v>ùå­¾ GÇúVìºÈ½ý¥ë\Ïýcywù?‡\/þw|Ê8;wžëîÜužûÐßovùÛ-žÞç\›^çY¾ïbçúW®r-zøüòòÙe¢ƒ+›vSUâx"Ö—Ó Áö8ë#ƒIεOÞXçé˜3•ŒKЛ¾/Ú½Gÿmºûð‡7:לão[22°æá1ž]oMôm{ÓáÙ Ï;öŸSOüéÿÊ=—zïÚ>Ú¿öù«kódÇhß’/D;é[ñðÅ$§Î]._|õãWø–?|1É%¹x×<‰%Ã=‰Õ#I¾M?Oþ.Üv®{îÒÓ1×<–Á÷ð1G•sÞ’aøž4æÛóozmB`ËOž¶ÕgÎq7šíl(Ãñ쎯é_¾ÿRœ/Χþ³ÒùÜß§»Ÿøs…ûèLuüæ&ÿ†ç¯ÁÜÀ{äûJ̱†¹‡<+9¬ÝÇþ8Ýô»Y¾¿uùÞø®ÎûãoýÎ'þ^î½ÿÇ×cÞ9´®‡ÿ•u¿ð·Yîçþk†ë÷²C㺚«ëÁó=[@gúæ&ô!Ü|"ãûã˜ÏsG:C0×[Osßµí|\pþþ&Ïî_±î¹«Ï¸}zâ ieU3eþÔ¦süŽ\…¹)ý«\²¼À¿h×h”±3v÷ΆŽ!µMñÓ³ÃóÈG“«s·»Î¿ý' æÖÁ|Ÿ$ÇõÊÃW`îQ’Kl…sï{¬óðW7Â|œä}ð Ú·ç_$Ͼ'ûäöºcŸ9ýG~;ÝûØï§zŸüËmžçÿ4Ûÿæ¿5>þdIý·l®ÿì—kðýûð/~ÖåíË ê\ï²/‚¹ËyŸùk¾‹ëyöÿé\vìâ©Ó=e7‹·”¹Z7Ÿé=ø§ +ßÑ?ÍÀüb.qm|õjׇÎC_tZb¶6”a~’7rÝ“×<ÆÈݧîÜrÁz¸k÷˜Sq•m]ýkïÏ <÷©óÂxç}Ý9˜Ýóôßnw>ñ×rÌmæ~øsûsÑ!f7qåëÏò®4Ðußhïæç®Eˆy›<|À×=ûY îéo¼­/ß@r®yä +ÏÓœxã»Ï[ÿ·Î ÿœæÙðÊ8bwŸlÉž‹ÜóRC«jjËwß«G ¸Ú¹K†MŸQ[†z‘à”à[ºlúòˆÍé‰Ä†`^L‚W ã sBU;eÞÆCIc לãKÂ\Z¾÷RÄ#ÀÜEÁû_´“¼ÌàCûÛ†’|U÷½:1´õy;æåBÌ*_41 óÔùöüRl}özÌo¨à.?3”Üpâu#¾†gß“|‡_‰¾æ %¸Ù+ºó`_ø2XÿæÇóƒÏîóì}_Â9ŒØn%â¦bÎTï⣽­ëFºš;†"V†áN‚±‰c çe¿q{~×0‚%´æ ÍÛ¾î¬Ú;À?}‡¹½ë[Þ¹ý|ÌõZul,Á›Y½ç2Ä}"˜®È?Ä-˜+±ºœ`#oËÛ~ïÙÞE;Ï'+÷ ­n<É'…뜻^›8üѴПÖ|2Í·û-ÇeþÃ=s´çÞ‡!ùü¦ãÁàÑïf»u‹ÿî½ §£SƵïKÙýäOÜÎýßÈž Ç® ,äRlÛŒ)Ó`>ùʼ ÖŽtÏ_9|N0>ØÝÒ5ÌCYtQ퇘§²L¼†/“íBÙÔrÌËÙ8¨&;ÍÓ¹ã<ï½Ï^í]¸õ\̹T ŽpçÆóBwoGì¾sϼzv° ó>|6ÌOúÏ£ ÍÃÜBþƒWb.f¢›’wŸéÚÿÛI$ÿÏÛ {ßø¯ û‘ï'!昷móY07Ï„ØkÖOŽAÏ‘o+]»Þq žœ>ÝUvÛmÕeˆwEú ó¾Ñˆ;Epœ“¹><óÏq‡ÊœÆÁ˜Ë›äˆN,=Óß¶h¸;Ü1”ä”}èä½ëö½[Øöã‰8®½-©¡˜Ì÷ЯdßþnÁ¼_þe÷]@|­‡ß“<}#â0Ô­ÜqihÍ+ nó‹7`®CÏÞ÷äГŸÔzŽþiº·}ýY®ÆØ‚s¾îÑ«‚÷»q}Gÿz»÷Ø_g[äër’‹iÝÓWû¢ëFø,á†ùW ýy¥ý[ß´{ùòÆÀŽĖ8jØg¸–†¹‰|Oüa:Á<}ã»{ß%¾å/%þú}?uøýöÖÀÁï§×üºªîàçUÞ¿»±ƒ][GûWºsb=<Ï€ù½+Œ!>Ǧ׮ó=ðØÿ‡)Ãßß^wø“ê;Žü¾6øØÇ31"ÌeGpÕÞËëVl¿$¸ãUÆwðƒŠÀ¾+alŠÄ'߯»îñ+ÁÖM ùôâÏBLLÏþ/oòýûLÿ±¿ÎÂu \'Å|ÐÞu‡® v? zzÃÓãp}Æ»ü©Ë]ñ #= wžçnÛ2Ê=oñ°j_xPùMSÊnœ|Kî ÍvÏ„Xî˜ Ì{à«[1/‘ĵ5µ¾2O¤u(bT„vüL$h[Î#Ø´0ÏQ¡#Uùü¥Xñà%˜GÞŸZsYï\ý(ø]+Ï +&€ï—“|}/ü­ÚûÊ_=µOÿw¥wɶј“±:8l›‚sèíØræI÷mxñZÔ ˆˆyéý-ñ¡ ˸¬~Å~[ýŠÇ` æiD=Þ0hfÕ¬2—ÿŽA˜í&æÛÂ\ܘoعs(É?¹áظàC?ŸìßóÁˆËŠ9G <æ~пñàXÌ¥éÜ÷.ïá+wèè§5ÌÅ]¿à4‚iýrÇ±ßø‚G~;èÕIÞ#ŸOñ?óYïþ×®÷,\= +søûR«ÏB¬cüëK,‰¾9®=øW?fÜÏhO0ϘwÍSWúî:|‰«å®aˆ±6ãÌËç9ô—r߃ŸÊ0†lû–ì¿”ä®;òy¥ëÀï'aÌ‹˜Y¸.FÖáÖ½Ç|ݾϦa®7ß¡o*|üîfÄ>Ì[zâú!ÖŒ÷Àooqùì&ÌŠk"Dÿ¢œ×?=ֻë|1Ã{èS |%æ}¨¿kë…þ¦ö¡8ïqÍ)´íUÚ{è£òÐÑkŽ~â îÿýTÏÞ_ˈÙêßñ’sÝù×<3–à^­yBðÈŸfŽý¡ÆûØMuúþfÿºÆ‘õãõÇÆ’üvO}W]ÿêï"¡—¿jðlû…ƒìc$·ŸãnÛp&ƺs DÜõjÿ¼A˜Ñß±ûüÔOòH"f Œ»ZßÜÁU·9I¾cÄVÁü…u[^¥ê×>~¿có¹Á¶Mç—î¹Ø·ïÓ[B?¾Í·ã—\hɶ I.d´¯˜ïºýž³ã̯bg¹¿ìùïkB¯ÞLrªÝs`Œ†…~”'Ôú°õ4æÝ{!ò[·lÿåu‹v\ˆ9Pë—=4óÁ¢­%˜`o1/>ÁÂ[¼îÜÀÎ_Š¡G?ÖðÈÇ·÷|x+Áò¾sÝYõK¸¤nÓ«ÄøjH!ÆÆ¢áÚU×¥äâöm;6ÁÿÜg5Áw?ŠÖÿìƒæâžQ~{Ùì*’‹ûð‡ÓêžøÝœàãŸÎrúÕd’‹cʃ_ß14ƒ91 µ¯<Ëݾø¿{â ØÌM_·æðÕhë1_ ÷Þ—®ñ´n:ÓÙÔ9ãÄ/ ®zêÊàʧ¯$—럾}ÌYDüˆû_ºeˆcËéF\>ÿ¡G?™Z¿ï«¡¯Ý€þ¯Ë4ÇäE»˜WˆÕvÙ»ãU÷R÷Ÿ‡9.AÞÃ×0´äõèW3Cßt`uÜCB;æDûÂw ¥VŸMrp>ø_·ÿÓ ?š9w1Ï3â¹€>{àŽà"ܽÿRÌìÙ÷ÝMž¿¤½ë^¹Æ{ß;S½8Þ·é¥ îÇ¿¼µîÍ[šÞ~{aÝ[Ϋ}敞ío;¼÷¿7Ñw×>¢cs÷é|÷ìƒëzˆ€ùï»Ãwø»)ˆ{2cêíeÓ§‚^­õƒzÇ o®®mÕYÞ–ÄP´‹7ëÎ-ç"V +®¿ ƒèÒá8ïB©•g¶‚Ä«˜—›`gþ:ôñôà±Ok1Ÿïènw?±³æ­álZ8±e]þØi.ß‚Á˜».±æ¬ºèÊ‘ˆqBrÊ6v󓜶+Ï$9•ï=zuós#Dçºs‡qfê|6 1V¶qÛº³náê'®nX¸åGwÄ—Ÿ…˜*Á{_­åân|â÷±ï¦×¿ñþÜ;>xw™ÿ•ï¼8fnŸRS¦à4=|â‘\Ü›ž»–àa£xì›é§¾ªixü §ÿЦúÀFì,°ÙghéžK;ËU×L°³Bì,×SÿY‰ñ!îoÍ®r_IÁÎZK°¶Mjù(Ħ Øð$/í‘Ë1ÿ3Ž= ;+ôÈS¾™BÆ1ÌñZ_ë`Œ-ÄšÇ2!Äj¸ë¾¡?\uð +l“îòáþÈÒÓ_¾nï§S¿›†¸ž¹X>6ØékDð[3|ã“× Ž!y·>u½×[\pÿÇS1¯®ÿðwÓ1Ç£wßW·€Í#yçÝ;2òÎ_ªç?ò§iu¯~ÓÔôÞ;+BO|^íÛúܲnˆ8kž¸Â³pÇyd]që«7x|—ǵðÚHÇÌu¿ízÝáÏ«±Ïñ¼úœ¯qp1Ô2Øj&¾ÉÍ=ïÎaˆ‹Dðjº95,Ø +ãfÑ}£1÷yð‰of쬵 [ ;k3bg×¶rT螇.ܱuKÀî©ØY¾ØÚ‘µàÏšâ*óø›ûêàY §ù›Z‡b®e_=ŒÍù8^·œGðñÀŽ‘5‘Ôº³ÝÑùCŸ sz“¼×þŒ'¹¸g ì4þ×XâÕ5,Ý~IèÞcã»~!ù1÷¦c×"þUè‰OªÑGƽ,ïRð™âkF¢J.n‚?´÷£I$Ï,b>cžkl÷}/Ø1g-žG#ø½­w WÖŒú+ÎDì¨PbéH;kçß“ŸÏÄõA'bgÕ—ÕT#žIçéˆÓ…ûnˆ†v(Ôºh„Šubg‘|¥vVdéõw¸<¸ým®~ÕSׄÀž‘<üóïAp»–콄`(.Ù4q,ëVôë–‚.„~ FW$ã{ûÏ,öðl¥üJ¥ü݇Æ`Îjß¾ŒÕEëÏ­»÷È5 û?¼=üèdzIÜtøc=ï¼GË;ÿô×µÙy翨À¼óõoàÙ‹ï‚hÓC3t÷£—W¹Â5wÑ0\“pÍ¿ëtÇ}ç¡GܬÙîÆAÕž;¹GmõÓc;~+¡ŸXrð´ˆíçi¾k˜Ó{Ç ÚÚ`Œ“!‡µ}ÍÙ‹½sí¹¡©ëÜ®àµáœ¿÷¥ë¼‡¿š‚¸D¸¾è¿±eç¼z¦«¬jêm;Ëé ryuì¬+qmbõìú²ÙSkÁ¾´ FûTY|FÝÜ%Ãë¢]ÑŽÓ-‹Ï@XÜŸzù®KB+ƒúÓ—X<í=Á»ÙúzGDŒ’Ÿ¾cÓyè·†À×=p]h÷›bðþçíÁÍÏ]G0ÛÖî½ÂûøÇÓðì ®•b.nÿÂûÎóBˆoæß÷q9ú¤¸Œ®Š-‰çF6ÖšÃWâz Áþ]~xŒ·ãÞ³ÝM‰!Ë l&±‘vÖ+‡?¹ ×R4ì,´·ÁŽmçãx,Ù2ñÊ; ñ’16Kcg­R°³ê!Þ¿#6íKýÂû~h^8 ç.æðµo=} Ô¹u«¾œà™Ýµûâú»·] :ð"´¦Å§ì-(ßÐyÿXó­ËcZ{à*̹M0ûÐרýs¹nÿÏ+Ö?}]péÖ 0ï3â=,Ø Ï_ã}üoÓGÿRyd;±ñHy°¸àÝó.xïã×(¸ëÉ!ˆ•ˆø¸ˆ{^³Ü²ê@dð,g°¬Æß2cG\Ïží •!&¶t†oû/hô%‰õ£æÔ„ËfUy˪f×–yëçžV·dóõk½qÐ1.'ئhwÖ?7×ìúgÇa{¸ ñ]ƒ‹v]P¿â 1*;ý|Üç@Ÿ +ss|Â{÷]å=øQ9Ú‚‘°üŽ•^æ_<".Çáß¿õaEý²Ý—Õ-X1òŽ®]7,…¸~ÓÑñuGçªúÓ`ð‰ok<˜;yïïE‚EðÛŸ¾Æ½÷_v–oÏo&ì¬e{;ë´™8C‰ÁþÁ\Ý›úÞ' vVâ'#vÖ*;«Îˆ•а³žîmˆžæöAl¿}^ÄŽ_ñèÌïøè“ X]çz˜Ÿ».ElRâŽÀ\(ÇüÓÜžæAˆK…>ÁýÁò[^½žü‡˜à—(yŽŸ¸:² ¶®IðÉ¢§#æwpéÃ{øÖ÷Ô¿Ïtøj2âºï˜{ž/÷À«‘8¡µã O¸é´ªÁ²ZÄä‘»OÇ{f׸˜õƒwmëˆh0~Ãzq q§ÝÍàÿÜýÐÅþ­/_‡xˆÍ=sš«læ WúÛ¾h'èã‡6=9±|‰_ v;€údè\ˆe]Û æž·r?öuyàñoªvæHu wêØY‹T쬎áõ;ëYGpû[\(µþ§+<ÛŽxÛ¸WZ·dçE¡ûž¾¡aÍÁ«R«¾5‰Ç—½9ðØg}3Ï c|@°0ÚVžéiYvzíÜECÝÑUghØY¸¾„˜_iÃÁq¡­ÏÙC÷l»”Ø÷{öÚüÛž¹>¸ó§\ÝÆo@ìÊ`Û²3ñ¬Îq\7©[¹ßæ{àuFÁçø)GpcÖ=bÃ{Ñvkë«Tݽ/\Z¾íbÔÅA,ß‚ø[ˆsïßó–èÛÿÙ­¸¾FöÜKpåvн»/ +¥¶&α{Ö}ý=ûl‡Æâþ…c—ç¿p£L}ëÙ| – wú"ƒ] ̓Ñvÿsú/Þ:zæ4_ÙœÚÆA¾¦»†Õµ®? ãÛº%Û.BÌÔÉþû_¸>tø³Y$2îUÌ»û Ôùþäú³Ðºë§Õ8Õà™°=èK¡«[¶ïrb#Á®œ]\ó„¸ Ï§áz©‚_rt¬wÛ˜[_Ę˻ë +qê?pÁ[¾w Ú†u{‰~myebbUÄÀÁõMSxëy +ØPôSw¼É!öú1xÀ—@ý€¾&ž;A,`_øŽb£¼£ýßîW©ÀïÉè+â¾ +bÇ#. +âüøv¼>‘ŒMÄ–YJlÑ5G~{+ŽOÿá¿ ÷ëB‡?>úû€ô'âÒUÏBüÄ–ÁzÍ+íëÏÆ=}ìoâî¸/åÝùSÚóðbgÕ=õ¥×õØw·"v–ïþg'à;þµO^å_~è2Ìeí%kÎoO ØYˆ‚ëY›a|®? <¿ˆµZÁÎ +<ðcÞ·ççÚ²Þ +6¿nùž1Ä×½˜-è{z‹ l¾×¼2°öЕk~íÑq¡]oòþ‡Þ•®-Ö[¿âÄðÛxl¼ÿ‡åƒ¿Ÿê9øáMžG¡®û^½ñìçñžB›^wÔ-~øboKëÐÀ}Ï^k¡g>ñ _DÖ6Ž|}«û‘¾ÄX$ÖØôÊ ½ïßxð½Iè'U׆Ë<õ ‡øÃ‹†ášOèÎ{ÎBÔЂ®u›Fûü¦²áÐïj–Ì]Û/@_ÀñМˆ×]0¶½ueˆa„ëÆˆGƒëÄ#8§KGÔ-ÛsbwaÌX± bnÖ>q¾cBÖ™VëÃñŠë—‰e#w®8ý0‚c)¸åùëq?ƒ`¼Çïåk^Dü}ôÁ‚ë^¼Ö÷Ðû“pM$¸öðUˆùöÛ:±…P®½¸ê¡Ë³š¼ç²ã=žà-ÞB0Pëº6ÿˆ`0Cß Øvb4ô÷ Ž úEkÚ| {!îbàÆ©Šé>ÊÿK7àšFèÅ/Bu/~Tï;ôû +C|ˆ«6P†ûW£fÅÎKÆ⼡ÖºúL²ž`ÀÎòíúKâ¶{ö\Øþ:þ¸kßÇ2Æï®–ÅÃ\àãûí½±Ò‚ëU,Nˆû`_á×°³Ö쿱ü8§~›`¬‡V?>V©÷Ðå8H,ˆ8Ô[ž¼Ö¿ý%»oÏ;"Œ1Ù¿ëgÄg!kV[ŽMÀ:6Ü:÷ð<ôˆnCÜ)˜£¾­Ëúø–às{<Ïýa¦{ÿ‡“ðŒ6¿î ç&»Vœxîgøõ_ÍoyíͶ¦çÙRÿÄGs¼G~WñP9¶uQhÙ¾1ЗÀÈ~ÃáqxÖÍ?wùÁuÏ]Cbæ=ïL +.Þy³~þ`/øÔÃúž#6ÄÝòÁøÁ1îòE»\ à:Ëœµõeޖŧ£Œ|yúW×% ž<Ýé®D°<áYÁ ‡Ç"¾ž_"˜D[Þtxü5˜#ˆ)GÞs€X×¢|scCk å¼ïÇ}[_¾×òÑFû¢Ë†»ëî‚8ʸ‡\÷üµ…ìõ"&Õ#W ήmã»dí?ãpÏŠ`â&Ž‹õ¯_Zóô8Ä¡®[yÀ†çoü»ßQ|K2Ž^S·ùe;Ž{Ò׸ބx\«ö^Žk×ßÞúÛáO®ˆ.îkL vîøžëñ=óýìºç¿ÿ¢Ú·ç£É³×îô«”o߯oò?òë›Cž¼–`š#æ-ø|ÄgÝòü<_ˆ: ¸ò¡KË÷À[¬çñ¯+Ý{~Éãþ.î7“wckF›´ùÙëPÏ£/ìZs.ñSî~à’ºÕûldOô»gÏ;¼û7&¢|gãyg°u0âWL°+Dç­Û‡gX®%¸AÈ7øÄFÀ¼÷m}v¼üsˆ[Xô'jý ŸÀõÎ]z:¶Ïžùžøæ6Äôàºõ£¿»Ñ·û]çÚ/ߦ#c}¾¬À³ž¡g¿ðúvüœ#ºzé¶ ÐgÅz‰Ž¾Ä³—ˆ÷„çˆÝõ+Œû÷ýªu*Ù›GNøm,Öï$†â™ \ Gœ"ßíCµ +&â’/BLä ÷Ƽ-ó‡Ìº}ø´Á²@;Œ Üc^tÿù +žùÁÍÏLÀ5T܃DŸ1˜\uÁÄ>¶­nݱkƒ»Þp}&¸Æ´/´þ¥ þ®?Â3¾Öe#‚]ˆc õ£þºû‘KÐNË>q÷H\¿ ìü)˜G?±¶nÉCaœMö‘—Aÿ"âåmÁŽþÁ­FÌöµ……àsàÞ9êr‚ųïƒIˆ]„eH¼‡±*Œ[ô³ÿë›=~<u^p3øˆ«„¶öþížC_•‡žü؉81¸WO°¾n<œ=ÁµF<´ñÙñþuà×"¾1^£~BÜåCßäÚ÷kɳû†ìé,Ûc昂o¼÷R²ˆëxvxé+>òÞËñ{ß/‰ïXôjwS×PW]ûiK núˆ ç[² ìÌî àð¼ÕÆ'Ç…îÙ})Ù+ÛýíÛÿÁÍþÝOïmº{Xµþ ÷<°ek³¹÷þRÄúÉ~ÍÝ0Vì»ç˜í›gÛ³ãÝûߟäÞóžà~辋ê‹-Žø˜¾Ö®áÁ #øpx†äž'¯ +ÌÚzÏÈP׃"Va±´Áõoy tès×㘄˜ëLÜ{Cý‚xSÁ¶Å#}íëÏ +vn9?°ê0è¨}—‘u>ˆ™H¼åPFˆ/]=³¶lŽÓ]†~4Æ&ï¢ÜÑOÂýV?ŒY|ñp2¶cd\µÿr<ˈ/B{¾ë ýÄÓÂxÏl…Ö‹g7p^a;p¿8¸è¡ 0vFý~$ÁMïØt9s„Xð‹î vl4±óˆ÷ +:Å¿x׈éLð„ñ¼â²½³;„¾âÜâí]Ï'XMDÿ˜&8¯¸f~(Îqÿ¶×}„ا ãÎbÅâ:;̱`'ÈnŒ3ˆOÐ/Â11ëÝõSû}BïÞŸ +û à“à‰!~(âã:®“/Z.Ù+ŸñÙ‚}> ߣó.ÏÒ®¹ÝûÔ5ˆEGðÊpŸnɦÑ'!vÎm"Ô÷¿r=9¼é™«ñ¼+â&"!žÄùE|-꫺û.'viË‹v‚ <ûï=p§Ÿë¹ÿÍë=[^Ÿà[´k4ús„7<÷òȯ'á|"[sÛ†"Nxí±»Ùõòfûýa–ÿè·3=÷={­wnç0|?ý?è»qˆÓv`™ˆ=˜Xi7™×¯Mü§õ±>ÖÇúXëc}¬õ±>ÖÇúXëc}¬õ±>ÖÇúXëc}¬õ±>ÖÇúXëc}¬õ±>ÖÇúXëc}¬Ï þŒ75Þ<%œ +á»mÔˆqå3ø Ô†ÛS‘䨳Ô0±<™šmJEñp²Ë6‰Ð|³ªÜ3¦Ø&ÙÆW…»"ɪn˜`›l_>ƒ¦ ü:ÁvÞK9Î6±6ŽÙÆ+Ûàw[u2:7¢³)‹¨÷NÆÿayšvÐ<ÏÙD‰— ÏжVBgX+2¼#t–\!#whôt==Ñ õÌ5Â;jD|Ôˆ9£Fȶñl>¸tg~I(£ŠdGû¼šp +ø‰§%×0;¯IFã©h|®Ý®Ò+"À©ñlù dE~tz¦O‹ÆˆÌ'êßQÔ(èÙ‰æùžÙ ½üý°¨5‡íÐÀd´±#i'"†ÎL†»ßÓ4/kNFâäÆ6qF<•þÿ—êjSzh|¢q~¤)U‘èˆ7‰ElÝñhÜä„Åçf\Žu¨%[Opoª½÷2ñp«RZ˜Qè†"ñLSÔ¸¼ÙìŒ6§æåÏ z{±X3ÁXWþLu•H_Í‹DçÎKåÏ—v ôVóÒÈÕ¢â1T>£¡<Ö6/Ü@çÍX´ní‹%¼é†üÞß,“·$â­ÕM©ðˆ }j,S¬NOu$óf2i˜¢ÚýE›¢ŠÏ›¹Æp{dZ2rgG$ÞdB½v+V,Vã g*šjêÃØØm'·»¢13#6£P1‡lG ÄÉ›Y¥p¾\êú!<нñ[iý³ˆ+O. ï½Cú¿z‰ÆûзVo.Öt&:’M‘éÉpÛ¼h“ þ̰W<îúj§¥D[$N%’ù3–.Qä V™hmK´GS¦æ× j ¬ònÇÄ)‘Ûd+8µ‚ÓþîXÁ©œž°à”³‚S•¿ü%a§ý28ÍÅŠMK$6mI†aÒÄf'¢íVtš°¢S+:µ¢Ó‚&˜ž`‘šx±š™Þ*µXÍT•L´VY‰9ç…›Ö†b7ÓL"Ùg˜óGÛSÍS" £al–ßXªX\6Æ:ú°…Ç'&-¦ó1=ÜÑÞ Ç+úäµû÷ùÈfzµ¹ˆŠÕG&,{sM»©ùT*ª0ÑÒÒIõ=}J_UTNKYIÄÐûâM‰X"9©s^ŸAW†%늙X»Qo/Ö°Ìÿ0L{G²%ÜQOçÍ^F)K£G¦ÚÛ"MÕ}L´^ Ï?D@ItÄÂÉÊD¼=Ž›à1»dѸ¥L³;uQ[")„ÝtÉ š @†OÞ[œ¿ˆ1ê§M1Uë4vÞ O¦×2ŠéèÔ$¢ñT•©•¥N\kœêÜ®R—RvÀ +[)•ͳ†»T’“· SÝV¢á[AÛLýMäoqôáf{ï-Öè3ÁQ+Bq¥àß/0¡ÙQ±›àˆ5Á[::¯tŒðÀ>NFSóZ#)¬•¢IŽES5áh_°e“ é‘þfÒ X@/`¶³—gE’s#(×Rö¼LOÉS¡“NhcúACâq°Sòe%zà3s^¬4–Vö8>ÞJæ\e"«HF"‹óßNèÇßhGþ5’áæh‡ ªÝ_Üs`íkŽÆÂ&NE”bt™§•ÚÖº‰áØlb8毅N˜CœH¶ÍKÄsó·àý0†È:ÑÒ„%¨ î+·&^ö³4a1¢¶wºyÀ)ÀÆü÷½JN=˜|O©tôCéŸÒ6Ó7%2“ò?]ªù;Mx¶%¦+(^»•½#Ÿ7#N±ìý}B–˜… Iú8(dœd&ßÌ)ò+9&Æ]É*€.Icþ°Ô ¶ Ö +P}Ea©6ÿ=³Êyáx<sFb‘&SËQÙ%‹Åmyþºs›]²ÈfmJ´½-nŠ´Fâ©Yá¶R¶m”MûÇ–õ•ÎøšwG“¯&œLíþRÐA¥b1ò_³+5‹Ñ†êò?TRq€É,ª¥TâKü³òè¹þ­,ÍtP‰h +ox—rz üWõJMš`í)þ6K[Ìîj‰Æb¦ÎˆÆŠ×ÙùÏAƒzf>òå´[±b±œŒW;n››£©èB3Œê%ŠÅc<7Á`SSGkGßç2X4”)“áXg¸«° S§ÂIsŠX)P,ùü™k6‘ÁM¹¹hLåïi'LøÙ‰âq‹Æ#áü_`j +Çšf%L¼kb(Q,©üGb#B«šØýRnïÿÞjK2Ñjª“»‹$…ãÑV3:ý†Õ“hÒ.Y'—ú}Ú4pO.™`­ÄÖsJÿä’™¾)‘™d"}]©]jÈG—,TÜž—­³K=ÇREݳ01#KÌÆ Œ³Kù»À¥uvÉ̸+™³KÐ)i¸g—L°f]²Î.Yg—NøÙ%ú”;»dF•ŠÅ°Î.•b`]êßÊÒL•ˆ¦85Î.5 ܳK&X+1¥q¶ÐJñ(–™6¯tŠÙÁ"Q¨™³ƒV÷œôî9¡yzJ®wNhcúACb×ò SHj¦“keøx²‰ÑË+6°óùŸÜcEUÏå­²ÔbjQ°Ô¢Ê_þ’°Ô¢¥-µ80ÕâÔ$P,gÑrK\+Fp[JÑRŠÇO)Z®¢å*ZJÑRŠ–R$JѸÃÖ`òðÁÖùKâ8퉗â.«5Ó +ži¢5ÓTþò—„5Ó¬™Ö÷xâ)ŸÿAUEµfΪŠË<AƒÖDEb5±pWƒÉ7‚°úŒÆ›#-ÑxŸ€ÊÇÛÚ"áÔ3¹S EŠÕÿÉHk¢¯tD%šŽ*O%då¢ÊŸQ+••‹ê80H›HT:ɨÚÛ0ySÞŒY©›úSê&=™¡l4ÿ§lðßdø'ö“ñ~Vñ§R;õ7om Ãèžô@¾8g½ûŒÜKøESÌY¯’”ÔÞV©$o07KD7öÕÎã·_Wœ÷“­m‰öh*RÝч¶;>ʱ˜z¤Rãµ”•Hþ ¤ úXj3öÞ[4‡?ŽúØÛËàˆ+¢§Ÿ?G&tû‚"ªvõq`/ƒ#¶xæÏ—Š).H­—ŠI'£©y­‘” 'ªÔMóII;ls)nÖáÖ›¯?°1ý !Ön¾µ›Ÿ7Çýi7ßdîSk7ßÚÍ·vó­Ý|k7ßÚÍ·vó- ¦ÞÍ'î-îç3Ôds®®µƒ_J+~¥±$fíà[;øÇ!¨²vð×6Hs´¥¥£=R™ˆƒç71 ³ +Íå29ÓœæÐ32 +‹Ç®H,–èÌ›ÑXtî¼Ü`oÂŒÈùóÚ½\Ñ|–ü­DG²"C“}šYª4i‰xU- Xëg–¿SÉÝZU,ýUE3VÃZZ´–­¥Å“ëçHÔzki±t—•¨dòÜd$Ÿ Þld2¸ѹ‰É £‰X$59ižœH†ã}]°Ö‹î¿ ù/ GbpenUÎP¤hÚSÊŸÃðâhkGªÐÛ û§(òòÕ”(Y‹©BG®œ‚ö`©Ju,Ky‚€.;e–_hký¥d×_ÚÛ"Mà‰'OÒk2EÚdÏ|ªâ0¿¾]²¦£Úè©‹Ú æ+„ÝtIk%ÊZ‰²V¢¬•(k%Ê$“ÖJ”µ•‹;k%êD}\wRV¢Ôe)² e­D•Z m­D¯•¨â¹nÅÞ?UÖלjÐ6Øö{î…,˔ʒÓÏå6Nî-‰ùT*ª0ÑÒÒIáôIFšÍiûUÕ„ãS8Vù]~*-ý­»NÚþLÉõ”^Záe)„—4GË›ÍÎh³™#ŽêíÅbÍNóù³fÂÏ+¢›G³&zk^ÄÔéGýþ’è/‘Fôâ•ÖþTX¼¬Å›‰ ”ÅiÀ-Þ˜àÈZ¼±o¬Å›RèòSaI ¿u—µxc-ÞX‹7¥¼xƒáe*læ°Ú@.›Nè!§þžC)ÞÑZÝ” +/4ó6¼±L±XlÊu¤Ô2`QŽüsB5†Û#Ó’‘;;"ñ&¡K·bÅâ4žp¦¢©¦>Ö‡3–@ðvW4ff¸f*«-É0L™ØìDÔÄ[WJñ|ùÔÖß'¤•6¿gUe%+ËöšŠ˜¬Ì„~µr•åϨ•«ÌÊUv©Ê(Gþ8z©„ ÷ Q<žN…ôk&¼ö–d¢Õ„$wçé˜åŸR¨1WG²±#æx,¤Ô„HfbYR9yyйô]л֊³µâÜëbä€=.h‚±9,h¦ +endstream endobj 295 0 obj <>stream +¯Jí°  ÖJæ¨`Újè#ËÅ)´£“ÿqŸRÝýHA·àýÊÚéÝÒÝIå·ýðíb:ÐVtÚÿ£SSÊÓŠO­øÔŠOûTV|š‹A+>µâS+>UâÓü}úŸæŸKÄŠOûe|šZái‰„§'ó|ž Zª Zª Zj>A?`T;=ðBT3½Uj!ª©þ*™ Õ›H4ÏM†MX¨¡lüÃ7+åJ?ÁÍå¿(- Ò’GÆJœ'GV™~“T¤Ôô`"2¥« kzœâ,+ÆÀ·´7%b‰ä¤ÆX¸iÁd›BJ´…›¢©®If“ÛS]1ëêíÅš„é;ñÌqWbónÑRžv?(­T©,›‚%b¼8àø)ä›´“4¶•YQüÖüó©¨Ñ•‰x{*Ü”cFˆÓ½`±Æ¤YôBgS،˕Q¨XreepÄ#Ó È%cŒöóp2šš×1ƒ²SŠf9MÕ„£}…È–Mî6Ù„v´lrÿ÷›JÄ&›à¨Dlraad©ØeÓ*Ý2É–I&¹—é-ìÜ’rÀN†j-¹N:¡)åÑRØZ|iØâSž4ß4K%|‚ÀÊÒÝ#»V´^ø´Ò ?Ej£Ôr}Ó)yw$ùjbÈj÷—–-9J·÷}"°„íGkªË?W *òêÛ¬<ØìßZf »¢§F* “ýºi1'Ý@Éžcxésìù ¥’?çd­¾…¹ê¢¼«^LåQú g~@Ÿ•Î.•yç¸T¦Ü?ȉÛ686]' ` mQ•N‡•Êd£M@¶—²ûoìÄü_Ü-Ñi7Püÿkãp8úZ"ÉiÑäIYÝ*Ž}Æ–ÿY*Ü‹xL.Ýf*ÖH È+€Ó:âMµ¥¬…¢²Y#q`ŒÄé%=iK%”XÑŽ‘ø ßÓw%ÃñöP9ýpvú>M©¬øä3–ŠC| +,ú(ã³?yüÖ²O/]FŽO–Çbý¥³ú›| +ÒÖ‰Þؘ~ÐÂPõƕϠ©†©ñf]Ðx$5ÌNÄk ’µÌ®Ò+"s£qã/£FÌnSêá”]­‰4©¼¹Ù6-¼0‘D¥3в•AÙ|øÿòȨ_ªáAiY–9JhŽ—l”ƒæD‰—eZ dJxåä˜.E‰ciVdxN‚ R¼$1,ÏÈMcAI‘ã)Y¢X™al¾0>E;„æë«ÛáÛ| uÚhÊ6ˬ£lÍÐN_í¨vÊÁq#É6†vH<ÇÛZH Z¦8¸ÝAó4g³3œƒ—YɆ·3´$ò@â±$k³Ë–hÁV u"Í8‰mUHä"/Ca†rPð_žÇ/¬ƒ’x-:Xa …dÚÖ¤4ƒU¢Z-ïQ(Ð\B¡9ŽOSHAÊ!K g¸Mv0È(Œƒ¡mv¨‡’°´ä iŽ%­×ea§i}#$‹u*UÁ³ ÏØô³h˜3>Z4™Åçê7ñЗ“f xå™É-ÃW”º&&ø+ ¢˜–$ö Ï2iy:Më˜*…ÆÉ¤³xæRåB 8I";I†ö ì”šdJÂÇ9XŠ”šd \!ƒÆâ0d¡vìhI”m,í`ED ‚lAB‚Ö&–aÒNm—%–Sk‚!®ÈŽÐP< !ÈJÀ@¡yìH¸•e¡QN0\iY 4Ž…ÎÂAÁ ¢BÈ襠m”Àòi "¡E|–ˆÌÛ úZ Ye˜pÐ$NÒnC&e +&_º¢ô 4<G3‘´á6hM‹évã £`Œ™ÃéÃÒ Ÿ%'0|ZJv–IÏ;BÁvêDMè8¡¬‚  %PJtJˆ–QB:ÏZ3q ÀÝ«z1"9d’&%Ý™C.iªáaØÉÙ²1P ÍOW“hGºY9‰ÅsÈ)MÌhSY›"&7!þMeÆûPZí Jbk ^Ž$ã˜5™ripm›X‘HÄ2oŠã²ûôŽh³\k೫ª…°«=•$§9 ‚ŠI.Û8˜Ÿ(rŽ}Axe8F$£}bm$SÞÀµÊÎXTÉã QÞôd´yf¤K­džQ#d}xèQ¤ûå ++:R©D¼!±ÂÔ^¢Áë:P¨SôÉÚSÈÆu‹Ø(„¢ Š(ŠF{N&­D¾‘X+ýt£ÜbWìCIhüðBTD›ê26ò3V©C_CF+r¤‰ H¾TéV.ðf0Op¡UÁÛH­èß“çT)_ð7™mjl•Å«£P, ¥[É_èNœPÿ>¥oj‹(iíÞ+bS õƒ&ƒT# ‘#U¾iµeäþÎ3¢M/ Ž–M¤ö»R½ÞbJ„H»ðR«Ÿ£Ô^©²7V4’éãŽãºD³mn2ÜÀÐf'·ËØù´áå1ÚV1u'•ñAÿ +'¿5ó'4È<˜TQyùZ³Ë¢çÅ÷QV÷ª¢©ðçVø\°Oä¹dTTÀÌpã”kȦ„Aö­™}¢}³÷ðÕØ«ý­w”]멌á’5–”aVip¹¾hC4–"ÊQdz6 õQh<ÆAe`¹©çQĘEp78´=ôˆ„½IçEÄÃï£,Z=¢|ž›kåó\I 3GQ6Êhøšè¢H¬&’l‰4¥ ®˜¢º ÈǤÑÇÛ¤q6˜À{Ò­We2ÒMÙ*ÃÉfÖ«­h2ÑW¸Œ©~Uµ#“ˆQ, ­È… ÙCŒY%>S.ኅÛÔk%Ö$ßô +Õ/X1„Eš†ÂöAo9Äô%67‡RldÞIWÆ»¨ZwAÿ«MðèG¡S¤6\i(~!ÑŸþ+ôæ=ò}Ø}˜¸(“m2Ñíà9L¦(*f#X¾¯›%î!–=¿š+ò®"× ËM$Ðj ~áT™pFêYçÃ`F6”ÙfdÃgÊFŸ¬(üÙqIH CM\úº79 rZP\nAI8 )lÏb{¸žøe{ç—R‡,£KF§Túïñ®œ˜1\¹n?HÙÜi%*r–Èf†QxQ¢eŒRÚŸã:R»±"fþkæucEì‹eGCmŒMí õÏq‚Œô:_ÎrL¹ Îú®¢;«D5¶’¿´êi•=õïñ‚\OýÆõÔo\OýÆåd† A^m¼2öXíÏñ‚\O³‰ëi6q=ͦܬð ++ªG¯v†úçxÁÜ'nC¼™µD9d†æD‚#()±¼¶Íˆ»ª4/èë96eÛ‘VNžqi6sj¦ÝYZ‹ÝðAÄ‚¶¦-¦nAiý/cˆýi[y›Ò:ΖŽÒ0€Ô޾‰zÄ–©i!\O]#özå¶!¸åÛÑg•ÁÖ£ÛE„^KËœ€øìýµ¾Ÿ-ðy.¼eÑ…hJûëP"OêÒK2ÑÖœèì{G0cq•"Ã×Ü!Þ $›<îBóä Mk6©*M² Ž|1Ò$r¦„#Û¼HŽÑpjê×ñl 9 %§«Òw5t"ža‚ûøtíiŠ`¨M#ÚÚ+M¯M{¢¬Þ¤·K#(gÓȃätEI‚VowÙ)+®¹‡ùx´@"%Ê„ôi把ò¦¦ŽÖÚD*‹ŠËÚ&ÎN¤j#M‰d3hu60þ¬D;VÀ…5V¦„ì\Y>cºª¡\-‰d«–÷N¸0›‘†òr´Ù™êŠEÒOÏßøX< +)dyÕ€¶S ãCJH/ : †‰r“èÈ:Á wf´i"%ã@©¾¨#O Rzœ é±®W…%e„rêµ°j©ûœ©Ä2YSK#i¬hÕj¼ +úKsÖ]Fù®põ2L”QÎÓÁG&QΩϳI¸ëZžÖºEⵉì#«û,>„¦•Z¥Ûs½ÔŠ+ú4ž‚2ÔZÑt"ÚZñƒÛ*ЊšéÖTÝäYŠ Ep]ž%©LIe~è®`ZÓ$£ÌRUÝTY–¾Ë°Ü%˜›˜­T»«Ý,ÝܧÂ6ZóÞhºIÈ2ݵfš´»Â5¨z”­³³¬~^§0úÖÇ üäôOJ积›Ñuœ@eècšè8ʬŽ#µ‚ÚE},k%úø¸·µâ·U rÔj)ä¾eª™Œ¨ž ei†‘D–¥ÜÓX†ådJd%ëE èf |gyIâ²… +ñ>O9gpã£ÿ—ëä†úkV;×®4ÝD§µ…¹3–«TU¯^¸6xúìkU¶¥}`È{®´þ‡¢Á³Rÿœì€wZ4ÖšWœÛSäÛk¸›u€Ä»4‹¯iëèæ)'`ìð‘ðtµJ«2Ðð yq£*]6ÍP¶E Çñ]Šh,ÙÁŒrþ@£¡Éàh¥ +Ú!á @9HZÉ^|NÉ\î™ÌHQâ(V`QÈ+:Ī «´ÄðäX:#8`êrÃã±hžœx„çó<Ì_Zf)Žžã¡å4%ЂD(¢$£Éeá‘§dŲ —E‘“YPw4yÑ„w° ÆSf8‘&o@åõ4I ï$Ð4ÇᛢÌà G‚L3²L‹Êæ ¾+$A‰)A ð€ƒc@ësÐ8ÆåÌ<ŸÆÁ|y´(6Œ4dÖA± ˜J€‰%¢Ï’ÁÉg âPñ4KE‰¦ó~+a3iŽadŽ!{MèGà5Ô¢¬´?Aâ»CÐZžYz‰œÏ Œ~ XY¾¦i|õ,”lPü¹UÝÄYáöÝ´ÞŒøÂH2iî¾BW‹¶µÆèNŸmGE¦Ýï»Iù§÷¸†üyÁ´Dd’~E4Hm¸]y1»Ú #oºb‰# £$µJ—Í7)A}& + *»zux¨ŽÅ +ß¼^nB’r£ò¯d˜[œ¬“6# šN…'Æa¤Q#|3F”ýàÏÿùgŸÿƒ¿÷üó?ÿyr~ï¡áÖïÖïeýa|öþ{_óë‡}P/€ïƒZh¶ÛtõÔ´òšÝ“v5x}²mZÇâÅ]6Ô·™¾Ö¸¢Ó.WƒïzÕeK¦º»UÑø]ÓN&7dW©¨7UjßÎT·7âÜÙ¾XÖ;sÊ]»¸®Ci)nc µZù3—P³½5|U4Û_3PÞYº†ÜÔŒZ”j²6Õà£)ïÚusÜÒDƒë6®7äÑ´ûQÂIuà @8©.¾{28|·ù$ºqÇSœù8rã¦)³GYÛPR{vâôÄDàH•ϰ•w¤6E=EGÒápöúCuc{$¹0ÒÜ`ƒrW{¦*I¿s,g½sÜÃ&exM„bqù…£ñM² @1øn30+³Ïç àé‚ô¹k–ijyP̦Á¡qµ“Àèxõ›Há› +ðW¢%"qyM‹V~Ñ•j,H±\šX¥šãŒEŒÉP»@Ú V¦ E«L'²"ÙEÕª‡/<'*µ)­Ð(¤6Z¡©{¨ +Sé¢:ßzõ +iEe.™iA²¾smЗ.×Ú¨T3ŒæMy÷ߨxИ² I™­G]'HFÆeh!‘5To¤è­OÓ­Ï ªýªV¯w›Þ +c—kÍ5ö¸Î”^4͸Z»‘ ÷x–̱Ú9¸…èLY‰ +³˜>Žg áPqb¦0y/ÉF¹U¢DÁ2”å2ÌXCõ‚.Jf¤FXÕ«Ö¥¡·À(H½­FIê,éeÓl«Õ º$³$¦J'š® I‰ê w€™âŒÒÀ5k‰ë6§p.2)I3̈† ‘¬§ë7RtY¦‰a‰„]½z]"z+24‘ÖÞ M¤±•ÖD:ëš&2Òš¨»Ôi2)iÂ4ү袠:×ÅAë™jÒ’=´›zÂ] 6C¼øzÃJ† žAÑ$i ¦%™ADVÓÕkÒH·Â I½¹Aê]³‘ É.MKËÎHCõš5hO7ˆNo¤At:'-Í«R±ñZ]–ŒT[M+9lŒ¢3Òƒ46þÊä¥ÁC–2 +S‹Ë”>Ÿ5ªKl I@¤Wm h²KÓÒ²3ÒE½fMúã“Vk¦Ax:/zA[µfõ&¼,)ivDu€Hb1IÌðepI%Õ“ î•ìÏBJ»ŒÚµÑcÔhF‡1]NuúÒ5«íñFw‘¶‚˜á-ÒŒ3«UÃ_NTy¾F0¸ŠÉè)¦ËiÐkNÈã+sHIžææ…§Ñt5J‚êh…§9dFáin›^Nsìôš5‚Qx:Í <MaQ«Z‚ö|£ðÔf…§±¢—Ó Õl èÂë.¥n¾ QxMgQs›t!hΕQzšf”žæ«éUgN¯Y½6ÊN#D—&)üiÕêОm”œÖF£è4Fô‚:ûZÕ‚.ºî2êæüeLZ•–žZª™NO>Õ“2ŠNs¹Œ¢Ó3½ æºéUk£ðtšAzšÂ£Vµ.íù³VmgÆ´U™IO[Mú´MÒÓ¶›œ2½=ƒô]V +‡š_¤‰@ó ¢Ó},ƒètOL£é¾šV±N0ˆ.MK‹ÎH#üéUkПoÖLƒä4N4“$©×p­‰­»|2Ý;ƒÔ4’ÆœæiÜkN“Ajšoešæi$Í?ÓjÕ® ÓIiH„/­VoíÁiiÍ3HKã@#éL«µ®5iu—K¦?g–FÒø’tC¡ð­ùIi©Þ”AXšÃ¥‘4‡L«T»6K'¥…e ¶´Z5¶Õçd¥5Î +)­ê IgY­Ôp­Éª»T28ƒ¬4’Æ–æòèóQu‹ ²Ò¼'ƒ°4K/¥z`z­êµAX:)-,IY˜WkÕøÖlœ‡jó ÒÒ8ÐKiLkµ¦¯5iu—KUß9ANÎÞ7¥nˆ×=p—[¦Ga©öÀõ›¤Ü¨ü?Ÿ=pIä~ð¸ºM§ýûÏôõý±,ó_í›õ±>ú'Ç*;>£¯ç ýœØfZ9 h¯Ôdƒ +lÕÉ(Ìu :È˲#­lBçÜÝéFÎGÝ6î¾Ã£ ÙãQJfíòt#›ÙçÁ¢Ù;= +Çíõä’!©1®H[Û”´Ðöýsîu#›Ø‚’¹v€\è>)š½Ôlb/ˆ0—µD¨íå’a¯¢Ï¹QÔlf«ŠæÚ,"äB¶‹HÁ¬ £Lª‰-#ÂYö¦!´m”K‚½ <×~R7²™%Ì}žcO‰ ÛU"E³÷•º‘Mì,î²÷–¹ Ý¥\RìUè¹¶2©ùoLaö–˜jfSÌàf–¥ ^¶©1ƒ3mXžÊ¤æ¿9–ö¯ «T÷š6³A–Cj½Ë8ÇΙjfïÌàNgʸ ý3ƒÏœ)ã‚öÐÒ~t¦Œ ÚGË!µü|èL´ÅfðŸ3…\À6[ÚKΔp![mÇ9SÂm·åY~Ns7MQÈNœÁaΔpA»q¯8SÈíÈ<ånº¢]¹rËËKÎrv9CÂ…mÚÜà ¶q—v3\Àæ]¶¼òr‹3„[À¾^Ú%Îm{{iÇ7C®ìï¥}á ¡°Ç—-§¼üà ¡°ý§ûÀ2-` 0íéfÈÔü6`ÚùÍi[ÙRÊËñÍi»„i§7C¦ì¦]Û ™°[˜öv3„ZÀŽa¶œzjÏÉlNÎëRoòôæþm‰Ö^Œs¿ÔѰ?XÎ!b”‡– +T:‹ˆ¤’WÎuh4„säX‚bA³½Ðy”¬“$­„,ªoó°¬rÆFy2YðdšQËX´‘ûT<1Fñc(t—2ˆ¤Fò¡ÈR +)H)Ù/ÈŒÕw€zh‡RŠ"Nœ"-«ŽJ©JSDC[%ù(-]ÒNª—Ø\$ô )NÉå¡Ë†T”˜µe†ûº56ûâ€y ¼+h`žhÚÆ‰‘Ç?<¢ªÊ'=éFM8‰5TÆí€®:ßl“?‘ÎpRÐó?âøÂ]2ô/"ÓÂÀ‘ü‹—ÊÓB)‡/UÜ ’êIùM+CîQR7ÚÔ\NÊÃÔÚÊíx™þN*•U à 64¹2fVR²ÂJp'M‚#üËav(øA"MÅ¿ +OÚ/öôívIy¶’k·Jù‚?2 +nªRDùÕ.)LÙ%…ý7CIÔ{RZó`r´Š†”;³+I–NõF÷QV¦èóÑæóÜž`Àúz.ØÜ`r¢a0«#™=i']™î.MøvUú†¿zFA·’ù'}_º°:VÔZµch¡aÚp9~@pˆÆ€ l¹¥‰ï¢ŠrY‰å¾ÊÊR# Ÿçö”‘¸Ïç +lϹ«Õ¤Ð'1×ãÈëë`àÐÏ×Njs .‚k?“ ßeÚ¦ü¨€`i_á'Æ‹r$5³ºª>R`–;ßXv­Zí1­é'æjX. ·eU×{k|œ–¹œ°ë8:´‰ \<æPÿÇßDÓýË÷9¡¬æçí$ÚÜm&€v ɦmÈ.Æ’ ¸F§¤ªS²¢+î*køÎ¤¿Û7ÙYÉ ‹—Ã<ävnW¹TßXÀïÊéò5 ÙKŠ$_¬UAÌÕ¾V¥Û§^ÁÝÄ WÕ¨ÕãIrõ¡UÚWí­(¶ÔÈ´Á?"±³2©«Uûªáé’ïi„UÌŸ­c¯*Q0uõ»&5¬Uá‰ÒdF +“²X¯¤¹nêÕF¥[¢ß„ «$s·‚¼ª ‡JKÒ»ÎðUmÞÎ*cÇSªdiòWgÛ¤ ¡RoÐqõÕÐç‘r…á3yJÂöýÛGé>Àóxv/ð¿}•î Øè³{¢5³“ŒgèSCO†€¡µNÔ†Œ>ª #º[/ûßРãê•¡wÓ£‡CÉŠ¼sô"ô•룼 Qjxy>¿‡þÎëùY`½iåÐj˜ùv}êTJz¢ÙÓ3­»‚0ªuTfh£²SOýH_˜eFè«Ʀ¯ò23(n9ýüžú1ŸçgõãÉñ¬‰Œ1¢”áF¦*­LH† oK:]OIB©UÐä j”1VÌ¥GaZ…ÜbøªÞÑbRX˜6¦3G]öl)ñ䳬C9Á= ±=wòAˆR¦=Àþ´lóÍAñøŽN«rÉ;šfïØÁR4Y)h|Ö¾W’1(bšT•&á^îIÑŒ ÁzÁv@ÂUKu¼ +ʦU¥>€Á²+9(YMa% ¢º–MnʦhõJ÷GÙ»7ÆÞ½ÁäØl¾ìFÖÕåõLÙØ’³¥Ú4Jó†@”'‹6ˆÀÍ;X‘³ù•Ÿ€Uœ>ÕjÅåä<­ }­ÔT¯u† Èy¾?]™²zo|’¡éÖU*ÃAk·‘§…iŸ.òä 8ò¬À*¯LR9Œ©’ªÒ$FT6ºªr”¬R_XÕï$œ´¦I¤sÕd +¢ÞÛF‚±z¢hWe?KUÙx›áñö ‚^Ýéôû_gVŠ ç‘«¦£ÕK­§D,­íÞä$¤ ØÓµ)WžcedÇÜ dí»>†pˆg8Ž&–*ëŠ×›”®¢[íéGWö×ývÎøyZaCbOþ®H­Ó™Û0hA?³ s›¬ûb%#AYÊDË ’ÀÉ ž¢á; Z‘ð\,©*€– >äunŠ,…›têS±”ŒG ¶„á¯x•Ð\QÆ¥%Ó+M”Š=¤‰­$)–E`1ÏòB ž±e£ÖÔMJ1m†äzVÎx6¿ŒÌê…’ˆùD<©šÝíH- ãÉ9õ¬®Wƒ›î|(–£ûÉùÞ€ò +A÷! æ­6=rHÔF¬¥[é?¥³Ç5dt÷ÉëTàÔ8.<‰\úÝŒñhp2Ÿ~[ª#{ØÊaô*M.KÉë€ßÏiÔÌj{&¶(+:ënã¡81gNâëú£Rä49…ý £U 7ÏSŒÞ3KpÕh̹M K™X^æ…˜¤:ÁÀšSâiÏ„BXÉR$V¦d<šµáá50ù<Çp’Z†Àí€([{M dzHÎ.á m0þ וJ¦!ô^4ã€pDÆÎÈ”Ë/b×CˆÖr‚ááKž‚3ÀÎɼëÁˆgh2?ßá¡"5s—¬ÿ”áe÷€ÿ…M‹&K~•ï„,ð¤c•7H0+ÌM±ÕHШQfÈ«G :p!ÃÁ YN8AK!O^EfÉ 8 @ï ¤¸úz+($1ÂI8+Iò,‰ì ü!‹¨¤Šˆ(;Fõ„ÓŠ••ý<u<[û,^ü¥‰N癦Vïíš8U”„9Â5ÎAÀÎÁé4êÅä°¡‹‹]Ï¡G‡[‰+hQœŒààxVÉ¿ÊQqþÉ)>,E6ç•·xå0¯RI‘7ö h7­±­$øz|¨©ûÕó“Ø[4§ÐE£ò£Ó=“Õ{•9z´ªï°?°¸-ç{ €#ØàÙÆ¶?¹¨S¡ 5+ÃãðÍ^Y.bxúäû¨ó$’­2œÌc ¶_®¾Òål9îšh+M­`>SŒ¾ÖDÑÆÕ FTüÒ¸wA)ûîȃŒ$%ij»4.QèŒàÛWH‘È**ÙŸ"3K§¡AT³ºI$g¤àyйŒ¬^£!„Ø žÍ’"HÐRˆ*-ÔHUF’  ×j4DQÀeNâ”õA™ÇsuðTõ…–ˆÂ®m¨­6"$DvÍ`K¸&«!ÀP%KªÔBRñáu´ +uUºÜOQêQ¦]«ëÁ +/\º* —ü´kåÅVNKŽzX79–ðŠœk*«Âyí%¯¶E¥¨m…É!« _²ä¹ÀŒF€àëŒzie,e ¬J-}¢Ì°ÄZPŠSDŽ!:8´m`By‰WÏÍ*$Ò_£œüR‹æ éµ)jQPW&´[[‰Ö%™6–N“Àß–(5G±ZRå™ bº,YKu()@·sèfàS$µJ°ï¢¨œÞÖi†vkEs´Úªô»ÄXÑi8õ jãXgȱóŒ9kxHVmi+b—ÔyL¼sÓOyލîOðˆ;iƒY) +Äô©×™q$„S)’öµ2Cˆÿ£Ô}pãɘ>¼aàdŽå#žËÞÇó¼’ÖAl¯"åô¢z?¬ÞAùÕ&Slã§ æõ4~Ì6/÷øÑ^'9Ydh"l™#¡ D)2ƒóÇIœ·ÀoòòR†#O¦ ò(ˆâi€u5¬žK¢äS­9•Šœ†¶× +ä  +µ¨bs·#¢Ý¬ö}Žú«"J@;#áÖ‰lµÛ «3;í €f¥5é6ayÀkÌZ޶^ùÅ3Ǹî‚ñlå3*’0MbRGU´&sC¥î°kx†ô¤ò–«K {Ý;‰ Jlš'N´iÿÀ|žH|º‰6õXsZ-Óú7Já}“É`Oã +ù©Š¤ÇTwþ”;kpîd‘l|.¢ÂŸ È„µ±™P=ÉädK£€Ì ¹F•CþUþK;ïTïm.ðùl÷ǃ3NÀ‡óäá8•gó6eé_&ÿžÈ'çÖ¼íóÔ.`È¿f¥PȰ‘•ß@!8S]±x gÆqr…žÇøòXW{{¸aºs‚mâlüh’'–ƒs²0¢ß4±2ÑÚ†}8-ôî“]Û”[²NTï¹c˜‰žh{RiŽJœ©pÓS•T„Û£M5$ "fª`ÈO±ê¤Zk5zc †Dª6Ò”³ßL~UnT¥a3±ÿ£íøMœi±M¶ao¨‹x?“mäá6ðlkÂÉTN.+ñæŽh*?{¯ +y7%ñ^e£»­îöÈÔ…‘xu³’ Ÿˆ8-±j} MÈR–”-HãÚ¬òùÆ xŠ€ÂtÜ<‹[T5ÔÙÚLí½á­Ýd¯·É„ä‹%.ô6(Ž–$ž“yZ"/.Q‚$‰2Ãp,/Ë¡ð‚ˆx×"Í‹²HDˆgBÕøŠÔ¤Ïä›y‘£šZÀE6<9³ûš…ɶwAWÄ"ñæã'鉤¾欧t½2e¦.Š4u`c”I9Tm”‚–=.-éÞÊÕTµnuKK{$5ôKUŒŸ‹u@4‘tDa†3Å*"º‘&Æñ5Úª@¤¶©-:Ãí®hª@­?¾º#Õa²á„Ç”h{[,Ü¥\N8á¦AWÊ +3âJ£òV`¥;¯NŒ=¦vš²Ÿ¿‘ÅÓàùê@Ò}ÙSWùÉ–ò³”߀t`ú‹"’ð]eKõ¨ˆ*bÛìH©ìjöMDŽLã> G³CËà= 7@‹,M’&‰’ Jjßæ8.-¦ÏJãzO®­ü¬Ô4Œš ø‡§éã¥òŠ&N<3„™ãešeH’,“G Ë€@i LQ4ÃP"C‹<Í)o³cš ÑQ$}²¤†¾ÙÿÏÞ{m§²$ ƒsý­µßA€„7e  „÷HÈ#¬@XaN÷9ó$s3wó&ó0ó™EQ†ª¢ÔýïÓï^G-AVFddøŒÈBî'R Ð*O©Kþ§R—aX %LJ‚\ÇT¢CÀª$p+ÃCbF’–Ó’Æ%³ê%Ë+?Ñ'&ºÁö?‘–, +†82b ’Žø2ˆn>ãH>e)F|RÙˆ)Oï²X0Н5ÑuAÿ‘ääXÝÝB3™"`ƒèšh’ ¸1€ÌEQ¬$çˆ) ÈüIÚýKÒ¤ÿët Ô A| üË`}IÓˆ¹ƒ$Á„@!ÓXó*T¯ ,T¼‹n£tð8Ò¼„YÕû/eî±´ø×9rÿ±|bhŽfÐ;ÿ@kr¸7¸…G?è +0Ñ(•,„®ž)\)W´cÀfÌߚͨÐùìd> ‚ÇC {ƒ}ŠæÀÛ§Gl#òYèÀùaX¹ÉAOr!yÆÏÈà°oFû·ðÙó-ÿ=0:%U‘­³ÁY~ü>šÂ›¿gÆâw+”1n„:’µ“?†ŸBù;ã¥vþN£›ê;a„Øö<ŸÒƒ%°Ûº:+µv9?D°ù`½V~Œ¹ë¬ÆÒE!ñ»ôðÅ”Tè¦ÄgÍ… ÿ¹j÷£Ì>“7ª£i@Þ†./ß‘¦ä•âÏsnçãÞ¢?8¡®þã—P4ø8ðX3œný7M¹Câ^ˆt°åøÛýÃ:!>­œû7±¼!î_§hÇðxeø-¼%ü5Ey>ˆ®ÓçxNøØ–eBI¸‰Š ÀÆ* ãÁ‘CC’~Ç?1âbtuÜ×xøß˜2´Ì®ÈuQÿÈ‹b>³ç,è2UôŽ„ˆ-†ëkÇ%X&?æ›%þ (™Mdzï¿Vj§§¨ÿd+µ“Å]å¿|Ò …Þ.÷_+sº•Áê’ÿ·X™ÿ¬ÂîÓ {Ðík”Öíkqäþ5|Øï\¶M©îÆû/ýû™h÷òØ¿5…þ×t«üì?ÍýøöÿoŸaJ¯˳ƨÓ_üãï™\úoaÞ‘Úo¡~ƒÂ<§ÿ@Ô¨”³½8;_º; tÚ VB¹¿qÙ ¡Nhïb÷;«‰nÑ÷Ï_ºúºîuoºR®g»Ôåät»R®|´Xý¥LGvÅ1øâ:1Â^vz.9 {ëÕîFŒñF }·g™.; ½“ƒáb58»¬Ö¿QHò{(ÿ"èøÿÞ¡õ_Åÿ¯õ1›iÞ …nÎB/ŸÆ?‰3šEïðE/þ%9]™Lüÿvh$ÃóèÔ§hôÒ +tñ5>ͧyšƒwáð,èoÐØ,E£»‹ÏpÍ'#ÿÇþˆÿ¯}\‰V·h!¹éâè®Û¿éí•éßA™þ^´Äí?sô"›Î¬M©}èÿgجëû_O÷kJú >ïl§›—¿§zþ›ÝZ$ÞtÊ¥EÿÆ’ Mæ3qŒFþÈ]Hw#ôc÷•ý×Í4Ò`øì̼/»ûømÚµÎt°Ù „ªuZ¤œOòwl¼¸0iîÿBúUùůÿ©õ´ØÄÙ7ñë7Ò@tдô#·L:ë¹äY}ÐßãC0$Gñ¡Pˆey†ÇïTñ^€ÁQ Ïq¨[gÄî'xL‘û"ÎÁP¨+Šä)ä‚:“Î(dÏäVƒÁ|ÿHˆäX ¢HwVøIùXšBwj±4Gï鸟"õgGšãh.È¡ˆ Vè³ +¡Ú!5râá7!ŸõÁîg’Ãê© ø³¸‘…dÐ+ÌYT  +IkMP鼿›Î~’áxÀ?ÄîÚ>y "IóArA†F1*O±\(D“G© p;4KA|ËèÂhcR´Ù Z´’ª¾¥(ÉÓg¹(<“ŒCÒ®;BM«»ð™bÄx,"8SŠ`X€> *t^ÐhßÑ6îŠÆK„…¼; ÏLª*êwxQ4 xQàE32ödÑ»àš 0Äîè­èåÑ<«Õˆäç•ma¸µñ€@:ˆI@„'ˆ êëehÔÿ„ß«g︯‰1âhØ EîDãx?©Ü* DØ„ !# 䀀 FD†,Ã<<ÏRdNQÙ†Ô„â^÷<ÈFÜr‘5#&£!^¢A0dI=Ž®F €Îà8IêhYÝãÈÓŠXv•œ²‡L!. 1Ð’Ôp +ἦ!" À,ˆI)€*?ÒôðT·ìÕ3+úOcØd°Êh +#Ü0Í’¨Œˆd—$`‰4º i.üÚDR~s‚ØB­0 {À j¹(Ú^f¡€5aÁ ó.(£ƒÚäIÄ&g¢wž(TVH¸üBiøµXDE½¡¤DáåN Ï‚ÿÜX,¡R`hôRTp’‚ÂëBµD•óƒ û – +‘ÆÌI‘’SN¡>(ô‚Mpa…+BPÃ0Ø 3ã#ø `6Šb%ÈÈ&£ðTñ'’ÓÌcÄaU(ÛuôƒÞŠÉï0sô†Ý­ˆuTAX6è`oXm`Ä2à§Ò'w°6—‹qHbäÁƒ¦Á‚•ù* Ø z+.'\–¢ÁTŽ<’ÎòBPg58Ž “¨—ˆûÀjáµh™%XæC§¾DD !ß 'CŒ…5Nˆ ´@jp˜]2–‰Ã&„¡YÐ `_ì°£†!½”œ*+aú€BÔ%W·â +xqˆbØž0!ç0°y¨]l€Y¼wØHpdXð•ðÆ€0ó@L@2!RP.`šÁ AÂàjzv‡½èA¹Å ±_!™:c+9; ¨Ð†Ÿð(ÎÆBM‚6#€’ƒÝÐÊÀf¸M†Å¨Âì°·â=†ÁÒáû‚‚*{‹/,Ò°H•^Øæ( -ð­hP*ð(XAÁõvæ(7ç£ku€.4GôÖXì‚B„Ë1hS@w3šÞ1}¬¨W…wŒc™Kfš,ÀöÁãÇÞRË"ã 6{¼àt€ÛÜÝvÄ¥ƒ5B‡|cµRÐ I@àI6›ƒDR°OÐ;"(€¿!œE ¡6,„ÝÜwõáfӇуÚr€×Ô›<ÚJÃ$ƒ°…Ž0%ZŠÃ"3 ½„ +GN`¿`Í$¸˜œ€ò÷Y Dáê€^êð +Eª+-Ìa4ö¼De¾«iÅù/ï™§’¥Ç´kY•Ã5&šxRÙ¡ÅbEˆ²V¬Ì@7º(^dY0ó 0¤C4IÃ#²„ÐëîÀt€Æ ±Âmoèp PâSÈ^÷ÿ)âô™PÉVµ† Aá°Lè"ÀVq¬ö'@ð “CD§…ë¹ÔË>þ‰ˆ…­;ÎiÂOIù‚AD»„ÀW‚;Ö¹É`' aJʆ8f—ÛA>Ò²,v~˜ýJÇ0D«½TŠJ˜‚૆Þ?È8™Ú}²[CHÇLhç",ôø'"*¬à0ã0‰•ìˆ<º?ìO®/‰"Hpù€ÁF aãBA0Ì/äÓ¸ý¢¤A† ~J9JU…¡40Ë“»ì9I€Ë±(ÒÆÌÅ¡W/† ¦âvyÚƒ•ÿd˜8g‰”%%jÿ½Lã|1ŽÌ‚H৤‹[ƒîYj1]¬Îr«Åv)ie¤‡X>„B^.#x`àA»ûñÜî—ƒL¥V +I}àÎÊÓû%‹âCÈ×ANð%Eí‘ ÀîãI´UBGíß³‘¥Âd/{B˜Š}~V§†â, ‰s€9Ê탂!Cví„4}(¤¦‡ØÙ!ðý@‰aOƒFœ‰sˆÈÆHR‘›Â.¦òôB‰BĤåKÿª\Ê® A³Ñ(7N£LåPPA;¬BtBmaIV$¬¤SQ’â{Ò€|´àî±Xi#ÓøÆHXMˆCì  !wùQõ%JX–µPÞr/Ù¤¼–”Îv÷'¸§½"¹<^oe.ª:Å_ò›piÜ5#+ÿ%ãòáÙ´ý‹/{& áËÆŸ³îbЦú?jÛÍf1o/þÀ¾£³Ùé&;+ߦӕ>üs“X :íᢷ]£Oj‹åíRõ "@ú Ö™¦íÔt±C«âÈÎf¦ýýÐìxŠßÅ^o` +4pŠ1©Vƒþxs–ê¬ðûÁ£År‰ê\àL¶<Ó¬ß?ËvþX¬„Co'^»K\5J±fúív; + æ@øé¢?@EèOYQþà¾R¾^ô:_GΜÿœMç0À×ÙlVã.pˆÐŽƒ+ðrÿÓüÙ8ˆ`¦ýÕ`¾%Ö Š_£›?—ƒÝ×Nû|Ýþ£³ZGd…Kò±tÐùn0úb­3µ-îÆí°Y+ÿüÛ“j¾˜ÌPiºèM}Sd‡z‹vÇó> LšY$ðLc°¹Æ«1±PùðŸdŠï…4&Š9RŒ;ÝéÀ”d˜ÙéÿåŒpºRÿa^- ±¿ãu‚Ý,f¿úû—²hxÝAo`E6äÐ<§þ;ä¦êz/|þ³Dy=üÇoÀßM¾žŽ{ÿ9j Ðþ}?…îªÿ1îã;ÀŽoûnäo¡¼}\ˆ¤Ž®íOSëúó7YÞ±£k v·¢_˜8ô·X …HüøOs*è7YÕ¾?Bw=ÝDܳò`¸©®ÆКZÞáC¿3µdc±]õIÔôóc +ó?%P¬]ç¨`v±šuô¤TAÏáx:0­ä ùðßB¯ ÜtVïƒ ¸U(¹³.¤M-óð¡ÿ¤dqTkÌ=Ài~SS>ð[p†Ó–ÅÿÌHÁì´ÕÎ~·µßÑ!nË2™’ÿMV7ž¾ÓNÏäúäË·ã›Ug¾^v`Æž9·RùÀoc¿›§oÜ­Ôô¿J‹åf<ÿ…û~+Ä ”ÿ-ð˜ 6~gÓùdøo#cëïN„LI¥l´ðøSeÐoggõÁz1Ýîš<÷% +$y¶?rfØ.ñåÇ›Á|°:«­¨‰\–Ø&¥‹Ëþ¬2XÎê5h»?Éàì¡ Å#Õíf¹Ý{ˆ Š·"h XîÌß·÷ÁYm±Ü.%.INƒ> +-îdT½¸Ôj±D'ŒÂ=Zž•Z5£°îŒcù]äZ[€nÇ;ç¬o§ƒ•"~‘.]ƽññj7ÄÚ³Îtzx¥´œ´âj‰º8îÿñæCe°"õÁ´¹¨ 8HÕë1ÂMŠSSqæ#éSž¥Ô¶±°N¬6ÝEgÕo ¦ƒÞfoÛ4Fìά¯µEƒ‰¾û–A5çûçÏ:»1g=\Bž½ãîZa0*‰ãôSg«CÔ0‰¢q6nëlg]ÔÐ-^_ ÙP4©Üºôqÿl=þk`Ý®ÄyGÇÅv2_ô& ™w¡ƫɧû‡;ÓñZ=áz¹‚(X^t.Yqáý娝~t†_{,H2#²è²ÓïK:'Q8Kl7‹½L¸UhÝËÎ4Êz<ÛN;2A?º™'í¼Œî¤î8µK„©UÝêÁªA8ËôÇ›Nw<oDÝ%¯vSŠ +)Õ™ÿÑY7¤%«¼àõ³ÛÛBú¬4øSSO5K¹šÚ§rÓE·3­–ÛéZ"–òÙ:Ê~ÉŸ>ŒÕ ˲)ñc#Û:Ë7+å³d§7Aü5ïŸÉãÙî‡Þ®g…Ò¿‰µì¹‹¦=»ð¤ðbÕFé"sÖØ€¸ÊNk¨äÊ‘Ùãâ3hQ©FÃ4!UsáÛWÐ51ÍYew±‚ÃÔƒZãyñõñ`/þ©^¸ìû±‚IUXæ½ébŽûJM´“mwˆê°Å}wŽÑÇk—z7U£Ï”öK>wj±üó;9’Wl£ó‚†n´‘–¹˜#5دéŒUuð¤ÇBâcÄI‰ö“:é)ÑrR§=Æ}mi¬hgNz*¨)|Çž"TNí±§Ög2Õxâº5×€Ñ\Lz»œŽ{ÈÌK$#˜Eʪ¨¹QED” +>¾.ÎÜC²ž ‚Ò!ÈÑEæWËÌÑII?˜î«X¿ú`è`Çu鯉ÇìDe µ~n.ÈUéT-h=ÒXvzƒÕ:3[nþL ¦SNðø3ù8G‹ù¦3ÕV™Ê‡vڛɖlÌÝ`µÆŸjJ…ò‰fº…=óòƒ4£Åcõ_é,›‡ùqM„ð-GŠt>eböò¢'w#š£Õ_ÊcDƒýÏüs¹§¬¹8“̽ÚrMÇK4@ Tö£Èƒ°ä^p,™ƒ¡Ý²Ë#sÖ’øÄKáëqûêi°g—ùçF +ãƒúƒïƃÀz!æÜtæ=qv]À¡‹wâ¼éìƒ>Õžª‡‚3"AaÎ({×÷A ÅPû`^kdNæßCz‹D#³ÀÝÒ›šÐhŽÕ›9;],Vò©uɇGŠ÷ïí6†çHŒ“Òâö#dté¢°Ó +)$uI”N +\ª=ºG–JAò%õÁ‹y¤3o¶äFž• 4”Iœ ÷I!ˆD§ãùàloÌÓõ¶U‘Pc0Íw6 ¤”/¤×òð_o,RS¤ú£å#š¨¤ ýV2è'ü„Ìo$ +Ùít*ª‡ÝUšð­FÐÍÈ–Ù™oÆg@•ޏBZ—ÎhGša¯&á6aèf’j7 HÇáNeÑÝ\|x®Ü[]–ÁúD->ûý +Õ:+áE_ëZ:«Y1:ž].kâªgfÝA¿¶Z ^)Ö_žU¹@mŒº¼ËÂä£R)“`J ×ÖhÜ⪯ƒÑf(ôµžÅ«Jjg‡4ÇʈÎ0™-Ö:WÚ7ÀWÁú!™I¬Aá­i ]…W›væ|Ó"f y0®÷&³ÁsÂyB6ê˜yÚe9æãõäÙŒ•’åe óþàŸÙñj->cÞ,b¸x‚é–Cfy”FW6›eO>¤#b“ý‡ˆ˜%AcÐ[ìcp uú@ƒæb© KšÜ>!¯±{æ±Ø¯_…),(¤·±íogÁÑ^בk#1¹žI[ŠÉ?Ô&´D}:¢ÒÇw˜Úi‰V[ÍJù6ØΗúþ€Y«³ng*óßôPí!ç´·@åÎÿ<[ ÞAÚ%O×Ib„èîÅšXDO¬ýµ…ZeÆsâK¾ÄóˆË3̲„ha,]ÔªÒb¹ªÎ Hê,Q8ÛƒB—f ‡R†ÇPÂSedQŠ=…ó¾‡çP +XäY¦Ö8˜ð˜h'Ÿz‰œUVã•}5)Ï¿ÏwŸç˜‡ÐyÃaêà0(µã´ºŠÓä>Jÿ#g)œ%é4åøÉ#cxÚ(sÐØªZ<•'&ˆÊÕ“ÕT8Y:ƒ +V.¦Â8á@#p'hR! fVÑGÖ§¤¹6bÇB”×€TtøXtýÝñfÖAºMÉe{Ö”_¾Ï&þ.ŠTá_¨Ï”2‹:ãgÕd}0žÔ@G9ýv=æÆqñÚ¥¿üÐ`ŽÜ•¾Á°Þªï߀2Úsžî\½Õbyd¢uo9íýi°aPo¾w)œ‡§º‡€qr'öMdtÚYúGÇÖ‚‰y +Àtýû±y×ûû­uˆ4]ùÁ™@ï6C§ŠFû‡x‹kg-°âÚAãìߦ}& tfZîN²R{õnHin¯5»Â ?3.—+ÿH•KÓ&o6p¦CúþY÷ϳôjŒZ•÷ž—U}’~!c:.Húy’Ç×Tè/-¹†¹ñÙR¦5‰ƒÆâsòã«]È,”ÂÝ]ѵáÒúƒõø}Þ9ºÅxC°uù~ kχ ‘³øŸ¦ÝS¤PÆÝˆV«£{.í?ÌëÕ)¸¾G•Jt;+Ã]PêßÍ^ ²”ž0.VÈÇQ‘Xƒ•ì¢xs í¡ŒƒMPb³8(ôÑ_ŸŒlGYo¦Û VóC¿C=²/”µìØ;»j—³Ö ¸÷‹@eÞñàÅ6lò‹h2—À ¾Ë>RÓ^î“Ø„.{®QîzÏœGŽÌèÖXý¨)·X>É*º0Š¥Yš2º²*×¹šN +ŒÙQ̈åa”`ÏÍo™0^Ú¤‰9ŽgÑ…´,GÒz7&’Rê +£‘2YòS!]Z)3*§š¦²˜ùÅøy± VC‡ó¿?]®† É…—\fùÈUµVRYÓ›É#û€§ìÌç £ÍŃ†Û¹¬„ã: _¿6²Ux¤ÒƒÕ‰ ÿçR®+µŒ'ŒXo—8 út½ ¡— ƒËþö؈µ‘{GôÆ#P½£Œ µ6FŠþ$ŽzŽ Ñìn2Y–GãZCW±Ž÷µ†¾k…Q‡ºaíŸÞ;²ÚRM=³†Ð Es"K¬Ñ«7 +™º^™ñQ~òˆá@'wìhm SÙiŽž8®·Ýµ¡¶1Ør:Ë:E ÈÑêlŒ¶T>ë‘ÉV T«õ¡)š:m†çs Ò»I…%L—õd¼„¨t>Ñäœâ¢[€€FÎ7ÒëÎæek¤²@E3íõà}¦¬¤·„}"²6þç`Z¬„×É òKƒr^”Æ +J^)HŽÅ½N4R…J)ð·‹%³åkÅdÛò‹Ñé@5ÏG²‹U4ÙVle:rm±¬Z„ÅÌ×ãáj|ó•翸êÃv”µçÊË¿þúËbq½¥-·Ãj±8‹V˜– •3Õ¿¤ÆBÅW7~9_¡?› öå} +¿\ÜÀ+—KÆ9#û Åï^>]ð‹Ãÿ̼õ +Eôgÿ™¤¹Èú³* n>öÂèÏþ3ÁÝÐKøÅiE“_&¸ÚÇ~sEÑŸM“sø^øÃFY빋É5 ¿y¯Ñã™ÔxÝ  ?1ª¡´¿î[Ã/>›M VŸèÏ[ô§/óût¢_:ðƒ%©Qw…ÿVÃnLh& Ȧ†/Ñ¿˜Gf9Êt›„5{™Þ&ütùÊM'¾Z¢ù¹¾Èf’n +èí|ÉtÏÃOé¡#‘.méWL5LO¦Ç;àIØ,#*] +Túü)L¼Ý‘õ¿þ²/ÏWq†)Žß™¦ïá‘ÊX|ÉÀhóˆ{£ÿöðv¸ÛB÷äQøPöíù +¨c³"Z{ÚøCô8|^„¥:J¯ðùd,¶†ÑUÛðM¡.!Ìb¦IÞ4®8úùÚOæ’õD½eOf¶ ÆÈéÿ|õ¤c“hƾ¸wç’ÏÌ[rî{ãŸ㤌£¤i«ˆßÐÌ2ôí“ÏÄlñ¾Í^f U†)õîRãh>ìÉTÊdüóªÇz2åì5CŸo{ý˜KOl³bwTšɆ7>Oßûè<‡=ÇüéÁúŠÍ<³Éxøúc( =AvöDÞªð©D +ë|5Ó%¼ÛDéÁ6„ýüð$}üÍSºÐ/8`ºä4>¥“ÓÐE—eë!Xõ +¤g¿ A±Þvy‘hl-#O2C s råóÄSŽn‚óù­é¡ï™N'+•˜zcw;úfæ¿,6鳨ÀÒY¬ýü‡Å’nyW)‹åª¸A˜Zwær¿X-®ëûO‹;Ì»1³ » CvÒë|AÙ²ÎGüÅ´|SO|ízçÐW>Ää»Åj [lÞôµåœòt-,H±=Z !)p„‰œÅy5}²¸2…Å]Šø-žkÒâ½{½³øž3×ç²ÞÇQ 1«ÝXÈ5;°Ð¶Í¹…ÞÞ2–ý²ha¼¶W K¶W.^¡-|6˜·„o-¯–H¯‡¶Éµ·XK,V¬Z®î¢ï–øœôX’awÚ’z²µ-ûêÜ’­}Æ-ù‹å³¥P]Ú,%ß6a)w.Ú–ë+ËR³3ËM71¶4 +• å–¸¿µÜm?¬–û…7cylGGÌóý-ky½™>[Þš!¯¥{WoXú÷Ës˰+[F‹ÎÆ2±yË,üðiYTý9Ëg¯õiÙx©¼ÕRèl­¶e²bµ'mv«stkõ¤®«o}ñf%*ˆ•&+3c }„‹VîÚá´FÂógkÌѹ´ÆWŸÖÔ¨Þ°f_KAká¥0µ–ŸóUkµ_ ZëÓ›¹õvs×´>0Ñsbjµ¶–¶µ;ÐÃH²Žoa‚™mùb]Ö¸³qÜ26kcun³¯F6׸۲ùLÞFÒœ-d§=6nÖYÛ.ß"C[¼þñhK_«¶|ƒÈÚÊ­IÔV{¾ ÚšQŸíÁærØ^ø¥ÕÖ©uV¶Á{cfû JÆ6¯§F¶µ=ñ~n­^ ÏÞÔû¹ç57:'"¥óåvvÎ?·?Ïc¥¥å<•&çy:á;¯xZ¡óºw=oùùóçÀ]í¼¶=+¥Ñùäm½=_nrþ Kd0öûëò…gëx¾ ¯;ó f“ð\\^ÛcIbظÈnF•RÔuÑ`ýñ‹ëæþâu:ù¼èŒ™‹ö[íb9ìÍì–~'hwLú7v¿}¶´YkÄ®‘Oöø8á0ösW²Wî's{ÓîÚor]{‡íïƒÐ“}žnùí[Ÿ«å°¯[>‡o¸wï^üŽÈMäÙ‘,-‚ŽBµÑwÔžcWŽÖعt¼nGÇyð8fåBÛ±™Ä¯6tÄ¢§Èß;ž ;£ÜÆ™ÉFîÐ‘Îæ¼aw>?wzÎ~qYvN“ãÜ$KV—#9è¹)OÍÅ–Ë1×ÕëÚïÊ}¦×®šÒwÝS-×ÛÂRrcMÆõ9åBî‹ô§Çí·?ÙÜÌKúÓ}•NÜyú|ྱ/:î‡ÅàÕ ^ϳ{2~yroí'Ëõþ⡸EÛÉ[»žô1ô\{ÓSO«r¿òt¬ë ÏG…ó{6Ö: `¼Î¶-饲…kï¥oñäͬ³coµ·¶y^j´·÷Fg¼³î¤å³Î›Ÿï"æñ±a_—¸þlùJÓáÂwz¦}oÏ­Šoâ¯|Û÷GÂïI>UüŒ½;õÇGKÆ_ºs¶üwåËs§t›÷O‹óiÀZ¤/¾z½àú¶P µÍ¿ªá x¼-¾€CÏÚk—p:—}k›W¡N–(nj6âî=Ý"º7tˆ˜`ò¢à,’¼vÈhÃ5" ¢BÞ.XŠì’©9Ï×Ïq‚¢¢[d¦T)õú@Ý»ý9 +|P–ú,Û´+ݘÓLÐõF§Bo·tMéþx¬Á{÷ù&8x8_×ôù:䙸7!¾ÅZC¹Tê"t¨ºB=ß;úôºYÆíN^1ù–g²É@ƒiÖm¦;uN™OþÁκŸƒ Ë»úYdár¯¥{ö.FMØþjáf×}dl*Õw™Ï/¹R*äc‘kn\Šð¶jœâ©A©Æ'íwKþ&3ºäßç ùÜ¥7ì?Ü„ÃY«Ô×U.ü0-Ããf4 `"ç¥é"L岑tÚ±Ž4Ó/åH¿UtD6¢uI8m¡Ëxêc|Yõ +—îÙuù9||‹ú®Rј»ïŠ^wF½hûî¼]CtÌ›+­bÑt÷%v]rbíÇ +bØr¼´_ù|©ÉUìzõrU]–kW¬7}µZvøx š Ä,íˆ7œ–x6Y&,¯/“Ýy'2ý‡÷Dë½5L|8:£¤ãrò‘äo¶³diI¬’¯Éœ-¹\õ<&å¿vÓ©UŽ¥›M15ìæîÒç÷Û~š­^¯ÓŪߟ~iéå[¥‘ ØcãL’s»2·Ï–Dfìž=d­u6ñÙëÁä6Û­nÖ9KØÍ…|Ük®àºF`r/½JîÓãZå ¾”ʧk«Iþ~”‰ågîé{ÁÛ,Å + —ë£pûÔK>øÜªèÚR×ÅØÀæ)6š£—âèn+9«OëRôñõ®:Ês¼);¹ÕC9ڦнÉå†#á.îž>*.ÒrW‰“©JóvLU>’˵‡}]'˜ÌÓu+d»¾ž]>§«þJ6RM¿TõɺõV?3GulµÂÕó¶ÖÞ¼nn,/Ãí —]Xoª¼óÀÜ =Œ«î ÔˆúýÁÖï¸ÀU}v}[löÛF.Pï6^«®eÓb}ö4¹æÕe³vV›ï›a÷ÖÝ»³Ý&ŸJáÛÇFüævÕŒLîB¯Qò®2ŠUî†öÌGË•lL+ñ>¼m=rÖÖjËÜ3ù—ûªÇ¹ŸTzž·sö!ýrÛ}xy¢¸GKg<| ÊWMoxñ8˸ÊOäpí~*Ñï¯Oý×nìÙíYžSãÇççî2öbyñÛÌKä:Ü}¹½i”_Í)ûì0¶×ªåqø:fÝ·mÿím¦]p’l»w?ò¼¹‚…í[jNNÞ^Ÿ6½Îy¡ûܹŠßµ:ñZ£³-Ônº‘z­Ö½ëßÕº+w·Þã®7w¦×X“O½E©Ðé3Þ÷þMXõgwO®A°H„µècr0MEêC:ÿÙV[÷Ûád§ßiŠ.¼Wööûd½°Œè›ydT ÌîFÓÉj5>»"ã›ÛðÓx~]FŽéSë>ÏžÙÇò½ðöir—N°“õDz3½ÌÜpÓ‡-9˜Yïg±Yü²1›½RÙâÜáäóŒƒ|ž÷Dtáeý›E1O·£nìrIUÛ²Öh¿-KÀ|ro±Ðg«Ð±®,´°Šû_îVm7›[».†üÿ“‚jÈ6o8H{„ ãåc9ç“ì-ïg²WÜŸz¤•æ@ÉZ:Û›]e PÇ+Lœê,…¾×ñaYŒj&³•lÚÙW•Êb¾èákÊÓ‹Ì…{<뢴' ÐÂ}¨ª|¾Ùí ¢Bm1ÖqˆÏ76y_êòÐÌFŠÈî¯0ž7ˆÆŠ.)…檳\‰ÀåáIé¬×h“÷<c……ç8da¯[ƒ.j;³ZÍðÓYg58ÛŒg»#´³µØ×óÑ`~¶º³:ó39ƒcAê¬Ñljþ¢;8ûÎw?nPÝàÉ•“ý¹Øž-ÉÎó³À¹´0Ý{g“É^‚¯±J¡V{<ïOÆN“*óFMI²]÷¢¨j)‡Uƒj<4åªêl— ;Ñ[-ºM¹óç`µþ‘$j¼P•„¬ô¤>p¯Mh¡ÝhÜÆ~ nMp§vŸ©ŽDé³46¿˜T*û{Ú¦$Õ¿ë˜G%çêÔBœpkÚ‰–i]£b¦À#Ã0Aï¥öѨ™cßàUÕþä¹lE‘ν·HÛ«¾d|•›ÂïsK1kñ:©qÇ¿>gnóÆŽßæb•àU¸üì¨ÄWÛ›ÍPî‚ m±N¤ß½Äy<òêwÇ/½Ëu|]¢&)[Vâ¨â&ùž¿)Ç/ƒƒFjõÒ~¿ãýV¹ÿÙtö"Ì>æ6é—dðÑçMÌåu¢ÐØŒ<1ƶͦƒç­äÇÔÑ0é!QìjÎvÎòCöîæé9ÑLùïô¡ÊÇ…_â—“ìK<¼öÏÛ\@â¾ÓßþÃééez¡gjlG.´Ý“¼ö¾¡#ÀÛlj°uÇQ¤×ëLÐocOfX  I"ÐaWãó·ðøµØON/®¾•çy›(7ìŸh®x¤8BGÇLäî%ž˜÷3O´ °³çèXq&÷SöÒÅõPŽu ØMôÃãT ›LV¢NŸwœ²µ™°†‡òE„NÓ…'ÆcS‹WÏå]ÿ)Lum/xÞØü–cÜ6´-OL‹¹™#RÅ’ãÛ1è]¿L/¶J:й´g-žÇà/^ñ,x€!ºÖBÿá‰e/w¿]¶2%a|Ê›yf£¨pð=á‰Å2^*}õÝMÔŠ^Fúׯx7÷Ã|ÕdH£’Å= +/ +¤3ZG£AüYÈ’L·1¹Ñ©qyd>z‰fúÓJŸ™NÇqždº·7—ùt;–hŽz›Dí¼WI4)±@‚}y°ÁCýÇÌýÛÕvO%yÜú:‘fã¦þU^Ü´‡EzØÈô1Iaގ˳EZÂ.¡™L¦Mzî’Áûb6¾ZnƒáJë +ï¯ØA·×“\ð¯jj*—.'½H*asÑT(éï‰nÙô”LÅP~䈱0QŒé.â‘æÆšh7ÛCjªvSFzq÷ïWôªè~úÇ 5©¶u~uÚ—®Ôˆ©?fºÄ¥;=X­¼Ä ì1(²'G9—hIÌs—¾·,Ù’?]ø`;;- ì*×øœ•Õ×d%›9‚,uûÙTö€5©Æ>ä’S&Ú’&g6åèc2ß´EUH àý šÎM.ëæ— Ãpkqˆ¯z\~ónrKk—ç=‘ൊ&‘Âz1L×c«NßSrÙ +yi]‘AØ>™®»“U<ÑâcQ„úþ :†o/Êîܦݟ%oÅt`uf… †Ž<“hVïñ»f¡“Íp7÷æÒCdž÷Yf¼‹k*kgÂ÷°ñ[>Ó›|ÚEXP¦AMÛŸeЕQG¢>]ºåãn:yP…Ž [¹ý‰ÒCݦ)Óèâ€v¼ÉÚ«©òg“T˜·==L8^&¡žÍ¶]–^(àùD+ÔU}+²0QXÙãn0«¹EÆÛìE7-ñûsO,ÊÐøÛ]qÉø¦gACšéR)ïË^fB.ü-^Í»{.ŒoVâÉi‘ð£ýz’•宯î`ü®`kùJì¾Þ&h»åS‚3NSÖ'ãhI7T0òhIbT´8!¿OT³éV;5þ`‘áìâ\_7 d‰½±l½¿@Øù$·içá6¦/ÒTˆ¡w³ýgŒ{Ÿ8ˆ¥ß}®+ {®êH<©À8 ïöKI*E¨2î÷g¥hé4ù>Ôòx *mCY†²Àû;•a¢sØc»KrPËOQà!…ÊØ@†*?”R°¤¾'ûÖŽñéÜ;„¨=CT.XQÏ{cq=«b˜§eDÀo7éá­'Z;›¦\ýŒ Š8œE&”Øë¥}¢'_löõÅmËfæÛ7ꂟq" \zÏOÛ+“7µ8¬æav½Kl.7×»lÚÕ¿x~a'ØÉ¶[#Ê¥îRФÕÉ êq‚ö&5z¶„=±\»-ò׋¶Ñ_JN*pükCIxÃ(+óšœPQ‹ôÅ>a@„û³)lÊ5"ø£”AA¡ôŸ½s ®åB¼ôßx®î:Ÿ"„&”¬bŽ,ÊÉ«‰F®ÿ{]Qñ[ ÷oBÔ¹¥ˆñ†ø ¤Ó®Fë-ÞiþT,€yíÀÍu¦½$»ñÈ­Ã/KªQ¡©52ÜÖ>ÍÛÎ@O‰ìsœtò¾½®V§:P>mš] õø†ÜmŠb,ŸÍ¤ÓŠ$¤±$“°§»ÁAã¨Ë0AbüŽ:ëªM#Ùtè‘òÄ^܇SšÈÈæ-ËÄ8Yn0IÑÞĘâ6í¯÷}¸Ùao³šŒ5;Oí²‰À‚¾åçbœÜGâ"IƒÀhðú†HºÞa—KGwê´ !ËO%gÕ2k +wä:˜¬néG w}ñ¸™¡Ì„I܇Š9·}rñpësæ»ïñð}V>• ¿…Ÿï¢<4²â—Þ&'—ÙóÝP áü¦{øI–Õ2ö1[9hCŸQéR³b•à³wÓr,ßÕy¦MÌ_ÒÃf%ˆ3ÞEe›ÅO™^mêRyQ»læûÅ´+oe×ë»D³GòÈûÑ¿tÆW>~›¨Õ/áñ+7„]o¹ÑÞȼÁ>EÀ7e7¸-Ï·ÙvdPC¥bŸ3Øéw ê}H_ ýÚ&¸îòÝOæï¼»Ï`›‘ŸÖ<ÿôe Þ¥úŽì– ”4ÇÞä"¤¯}ÉéŒÓL™X¸ú,yòpq»qxo`(ËÝ,ܺ£ðp¿ßý<òèKü£#›0“D3Ý!“SÎÆ”÷sWo¦xÓäÊæ€—ðéF´wÿ“®$êÍøç!ƒØÖ©q´²Ž‡³抹ϥ®SwW{·‘í {9î=¥ ½z-lQ›ƒÝµYÀ˜7YgñªÌ石›ƒ¼ÛH?°[‰‰”ÎÃô»í%Ȇ—þ8Ic·4•à¢Ù†ƒâ½§K×ùE1ùe¦x\*Ýr7®i?odÛ6{Vèyμ~lz8myHÒÜ&ÓMºQ›C¸â¡Ÿͦݢ`™«Â~Þò.©µã² ’Å?Ÿu¸$o˦/à;Æ (;˜M{›¡}šQÀ—Ÿ$2ÍË×ßùà[rËLºC]è XÊå›{›{· â´æÝÕ$~[¢c¢ätNØ5æ$'ŽM1|°Þæ£ÏA‡©µîü?Å,Nÿ33)\Cx’Yȉ/},âN>dÚÄ#/Í&9ËuÖõPÛ$Jd_5Zºî§û3Þ«8ñÜœ ô«“wI *yñ6 +ÉDvö!¨_Ïõâ#=ä‹Ót×=¾àËo«Ëlb:·âªŠi  Áðu*ðœ.•.‚GÝ4|Ù 9tfɺUÜÕ– A3ÀD³‰X’¹X†Ò…Îôâ@Mk. ÎK)VºT°¢D—J’.½ÛÚC6NlÚ°ñónÖâö’çÞ¢‡x +$ˆ~y¼âdóÒn§K@Ù&û*Å/TGx;:D²ÎÂ,Áž¯mÙt­ÒÈ^,ƒ gZƒ÷8| JB¹óŽà7Éï ¶aK%à¿|üÒçwiƒA£ì9”d~†QúPØl“DЙ¼Í8×ݤSH5½ˆµ÷oH°ïAL£œ¤\ææ¤£ØGu)±UÝòÐÊHd1÷ïƒBCØçíŸð Ú/*Ýiäžs¹˜f²• Þ”³/ÀñsìŸà£NìC3ñJÚ_]ʘ7ÆxY·ËË€w¼€H#>Åg–‘ß»Ûã1Å[ùZ幊+*ñZ¥8ÿÓä¦|Ùf¥/ßi̲7Ï6ôÅ4Ñè.‡B@I1Ö÷äÌÊ}Ȩx~ù¹OÉÞ`0-ú²ÃFnªµDc{K˜Ð*]˜×`Ç’3@qÊdß*¼¾WP _¢DWªÒ/Û´÷\t48~èeº‹¼ïȸ¦½õ’鼬əÇ.³Ù{N“ù$W×÷°ÝcY€j6™¬˜a62ïþw¼p½7ÒX™~¬÷Yûv9H·I… —…îxÈÌÉ:õg¦ÉZ<]èßlÒE§3‹ÎS ÂÉSbÚ™a)³±,"è":^ÕðkËZÎíÎÃ]Ùúˆû¼‰wlfoFÊ•sq»! +O¹K•Xˆ«·¥× _¿v·Ù·Wj†8ÞŸÍ?Ê*:Hʬ’xÄä lŽ3=´/m̦´‰fÛS@ füê}‡Y»Ùð«§N”<꽡]sœ„`'t8<Ù*\n½Auàè:÷ñµëÞš._>ÓƒËW«´iBDð³=\‚&y0ánÕnöqô,ÑW>Ÿmo^|Ù¸cÐTžè1X^vÊFŒj`­ã¾½¹Ü#×|Ît›‰Vú=d«4Ù^‰‰úko¸•µÛ– ÞTý€Ž2S£§ËÏl¢_†+ëíB™Md˜O’¯§{©Î$ízì%d‡…Ì>¥‰‡4@öYd«:b{öSk0hµG¶ù–dÓÛ>Þ¼7ÄáKgç‰ +XÔ¦+9‰\úvn‹jÊwPvm³/ƒšq7é5reQM¦N¿ËTçn@Ó¶£ôŽ|·‰ú¢üÆÄ>]y`Èœt\–3Þ—¤ž¥fRJÓ ¬ñó-öé.¦»÷ƒ:ˆ],Ÿ{h/ß°ÂÜ‹‘õ÷´Ë,FAû²6fu“¿‡è +vé3‰qÚ§T©çqÕ%s[ë@do½Ù Ò ÑõMÝ›.Z†„| Âà%ÉÜ}ØBd/ÊlX5ù~0â´¬ýñ}ž.^<8Ѥ™øÞiþ$‡²ÊÍÜÖ¿|M”]œÄ¨¤À‘ém­¯\5O7yÚ[ŒdÛÞ»°z5û‰š™…Ê”+'zK½²t†Î)ÞO°dr‰Åç:€JFªé—ñƒMqô-©‚p±sW‘H ¶oÀ7®d¹‹l~¶› ‚jûÓE-$=Ýœgz]o—%´¨«ÝÇ3«í~9r—Šù ¼ú¶‰fŠmCdÚ‡@<àë$‰AVÂN˜…v&"ñÈËm’šdúåý…ByÆ4gÕQëƒ Ž/aÍ +/5ƒï¿Jü;wpçżß9çß[+@6^ “$ScËêwËxܽÏ4qî›c“²¤Ü$„ 3+·ÝJ·^´²!­¸èžUqÛÈZ³íàE/óý ¬,ËKïíQM%+‚tJ=9BmºEv!ŒS_å,ŸBó +g^}¡õ²3ß_Oõ•+ŽÇóÉt½ñ÷dïBqþÿ×ÿóÿþ߯•­»ÇÖ½Õpõ©º8§0Ÿœ•ÇëüÎB—ž£Å?òã¾Æ5K΃Êvº/§ƒ„ê’¢Ã+xÒ«Î?4nPR_ÑÓ™÷F‹¾§].ô"s-;›‘ô¥CrGçøvfÞß¿?8 J’íäà}°µýF/oÂôþ‹›ýoø‹}ÕÜ$!VÌMò¶z´rþÛKy¢ufdqÑù¨Åp gŒÇäÒâº~ä-ÞÑxdqž?9-ÞÊ}ÎO—yø2º¼@]ë7>HÜ[ŒÈ¿¯v.RJVÉmÆS)· .´4ÄoÓ`ÊóoÍ:Ï´’ƒz<°~¿ ¿Ô*|ú1}5bhçÒ™z)lsÌuúÜ•¾òP+x²8ƒ9j) ¤ÛU0ÇË$\çªFZ¥†¹gK¢úÚ¼g4ø¿EYð€§¼^­¨õÌâ›ßt-^*›°x´Ü{ËÅ€,Y<=Êâ+ò÷héÅÓ—‰œQ•†¦ÝÌgú1Ê'ò¡ð¬fô”|»¦l)~å…?{>qq6ä­3D)܉Ӊkž¢\q¢@'Æ79OÊç®cL„xdCÇ–®Ë%~r‡V§žT (Àÿ„ß˃!íAjÍeçMÊÉ?œ};9—‘1€Y=¯ß9 ·õÄr{pM­+â¼\ŽnElCø37…ÇÒ"»!2GÖ«—H­J‚ §œrjŽ|ÞÊ^ À¨¯^Þ“y]¨ õ°èAí®^ž–T³æ®“.ÛírZÖZîÚöÊ$õ æc7ìüNjÐuï‰ôª UÜ ðjûvº/.-oZP‰,qu©•±s‘!¯íÍ*øðLd›ÉM"[³ËðEu\©kBÍÙe]¨Žb9XÁP‘ÜùvõÜ£Šªëpk­-ú"´qÀcÁÅÁ¾†Ïc;¨5‡C‚ +`ðÖ›lnŠ“îD7£„ú²z¹ëÖu †Û¡Ûþ{@ꫯy¡bÕ©Œ¡²aá Ôßjö¬µ¡ÖØW‘åPÌPŽØ©µ\$”#t«KNjÐõ⹌̴×jÍvB¶Of[öæ`¹D¶t“ÔÊØ.B\èJêC›È.šMTFœ;Ú˃ѭ&ÔÜ w§•ËÛ}ÿH€šyžd¶ºÖޏw5t°á>Xn¾= }º—@e—j¨åÂõËêƒÏ©Z+òûUP%C|LåÙ « µ`Ýr凧 µ:äu¡–üŸË‘ÖXnðÉC4ÊŸ[m¨%úµœÍ^Y4¡6 ã‚ +ªf¸QašozPÓÄñÊkC-ûlÍ~ÛÑ„z÷E{£»Ü;ç ½ÔƒZ!Z¾«¤ÔŒ§çV) *ª½?z›¯ºP?¬ÍrRê3C¼tÞ<ÚP¯oQä; _\{5—ûúzßÖ…º\9ßõ Vˆ·L9-Aý…Ûr$©½%­÷››‚ÔÕêÚgÛAíÒ.•ðxxw† v¬›œR=¡×­¶tŠ@€½Ë­FŸ¯™û8@®TP=áŃwu»UP/†OVÁ¶Sɲ€Íš\WÔ‰ÌõSAõèÅëkßùœŽÔjj£¦p&óá ^93^•R0޾g§¡èópª¤Ô‹O”»~BP‡P™ kô!Ÿ¨E‹ +ª…JVG;¨á?Úår?ÑÌD€zu[.+‰ ¦öc´ÀVvçJßR›™… +Ï»Zßb#Mmíº?[j?tðÄB½oÁëíVÆ:ß>ÔˆÌe5³SÎCÇä1J”ã4…¿=Ô÷WD¹~Ôû6A”û%FúVÍ)¢biqzgˆj¯P×û¶M4R“Ö·‚góä%w6‹ÎãO~¢¯8õ¾ ·–O¿ö·—bµµ°~‘hZ+OÜÝZ¢Â·j‰ >‰»wߕ޷e¢uÎ'¤oÕD{º&ZL&¥÷xx´±/zß~/÷n­o¢=³ÄËÇЫóø3O¼ÞFh½oãD›ió:ß¶W¤ß] +í‰v0 ã$ù7ª¢óm×F&í¯Y½odéÆZÔ'ZoA^O¨±Îã}ùðQ²kz7#—›G]¢QëšÅá*^ã”#æÌ+¤{°øóñ˜ð-R„JÙŸZ.ƒÅÙ·ûm 9qíŠé®m$„“Aoi¨$pß ‰µPŒÏŸàßd‘Ãꊼˆ6ŽT¶yÅ>@ùÐL?f.ýð‘M%ý½T*(yp|'Ù›·‹)ˆÊ@ÛhޱÆCqГ¤nî Ñû-’‘'ЕÃË}þÀG».%k‡Q7ášBý®¬”#Zó f…B2õ+‡¡8h¡ 5øp/Aü49`0¡ý€.Té@¯â ŽÔ]õ¦»\ðz}¼ jßn·IPql°‡J«(ŒbƒˆÌOËMD¶:åPƒs *„Œ¤_*Ž ´  +acCáÁ³¸\%ÔàÓ.T ðŒÒ…Šc¹ŸF«ˆŒbƒ¾Ô>Tîúæ^ ªFaGC—ÈÈÑhëA½9ØW[Ø»ƒY)CѸˆ©qÁç²j€Ñêª CÕA•eÚN!ÁÙí”è;žRR2{vXÏHr#—ý8é½%½ûOòdÂ.‹¶Td¶­ +ÑD7’Ãø§4™yYçd –!Ë\ì~x+ @‚K¯JåÁ °bJFF%õ“Ñ }~g^cœöCÔ8a- `”ñ +?vTò37;Üä„ߪ¯Euüc·Bˆ½±s{¸HXaÍr|…øGýÈ‚½×iÛØÞºEô…˜Gk… ¼Óº{(#Ú±m„F<'ÒKœJ•¶ÛÍæ51›)žÏ=,÷¾Àwù‹’ÖcÒ 9SÔ×åV¤Ðˆ^Ä7è¥ÔBþ…¤…v¾`ôà]* ìIpâŽdÐBr² Ð|b2E¡ˆ\vÌžÚä{ðnŒÑÁzÿØ‘/g±ë‰gæùN!žr%®-žBh£±¸+²TVŠç~GNXœÏf‚Öho5¿]8ŠÐ¤t®6;¾.»°.mžÅ!î`=i}sIÞ¥Ò`кÊ&W²«|yÅV¥&h£K˜]D€hÓ^éÑ&N 6·íZˆ`4ÉÜ]«¦ÚçÓÌͦ@ryàt©O­Uces¢fQÊ©`°›í­œÀŠw¯žö+‡ìÑÉR/ÛdIwWe?vè éëC¥JTÌæM:whÉqóè"F Sþ'­eP½ÑòÎŒ¶%øy°-n¥«vÑÞè)"-Ö†uݯõœ}WR¾7Ò&çÔZVm©7Y‡ýÙ9wä•έz“Í:UÞbl¦°«í:M E%ù¢6N{tôp’û-›.ZÒö™ÛÃɹ*"8ð6l†|‘¯gbår£O/bÐiß~‡#dFÍö1¸ûþRY¬Ó¾1ÛÐñyÿsD;âðH´aØùøCDSj·Ó‰¶Kƒ‰9›MìSÝRÉûWµ>’›µS<ç÷¼ùhl¶¶NË£š¼ÉÀGÓ{€%M¬?%žytˆR2N FZˆ³\º¢Ï#¥²Yi¡ƒ‰f¬0̨í?ª¡eކÞjŽ©‡£˜ ñdÌG5º˜êAnÌ…ú&‚Ë1VêÐ=ü©mG7±µ–ù“¢5­øoJéqÌFû:6„“”t> + :ãdŠ +®>Ð ßËzn"ý!©—ânèG»#æ£f}œ6¶cy³ª `BHœvD|Ì«‚Ã*òÔËÆã8ðZ8©¼-{£f^OÿÊ™ÞîäGÖÄ +‘ÜÛÆ‘yÉÔ ÝwA!E¹çÏ¢—†¤ke9ÌÑËÀ×=ä©ÔJ[Øý‡Â>+*…]'ŒSä¢t’)ôyØjýfÒaV”âÀý‰ÇcŽ+RH'˜H¦(s¹:‹#ßYœ`fEúê®Y9Fn£D}κëWcœ AHÌÝâ‹K’14pÊОž$º"‹[¥v§uÍÚ1Ú„NKVî¾5 tÞ1T +Š”„Ò; +×6¸vPáiÓW·&òÇÝìeIr³uåæ8ù®nÉ CtdvQÌuê™Æ’Ú4j³Å1»(ÈͲ¤4_[\Ô¥»8”~0¥¡–%u8} +»ïüu‹Ò~mIAsÙACUP:0æT¢¢K ÊøiÒæ¸›‹¨#Y>c†6åæ:P•¿Cv¨ ¿¥à3çL~UïZ§Zl!…Úþ}®63È„ž`þ°x¢Ù~(K Si‰à© yz_Ù®°Û<—ó;çûYÜÒ,ªãÕ'ò˜E;·yd]¸–ãd[¨7›ßœËaîœÃå:ôDï›ÆÇ»ãU“y2˜íkæG3öD¸œiŸêR³oÇû›Ùd™cj¤Ý ´ ¹TÚ > KaÔ÷Ü‹û[cí&…¸Ægàp~G»©’÷h¶ŸÒnw I»}ÝB mú'´:×w[ àj +“œvt"Ÿñ,{-pt"}MbþOÐ ÿ£…'*ò’¶ Ü4*ÎVqšü2 é»ìêÈv"ƒ""·ºf >S+ö/Wt¥à‹‚ }$xlú§¸÷w§Ÿ ëN…Áü„Ï/ † +*´¦"“Õ¹‡å#nåÞ ÍSÖL}E= YT^¿ŠÓN™È°ªB5‹NÎF˜H#ò>Ì Æ‡ÅFþºz6ü—V}š¡}ìXsµ}ìXËGbž]PhÂ>¶Ìzÿ†A!ŠÂ~Æû¦RG]N3cŸ?Íà;{£Ã(¤ÕL~æˆéX+?cÖ`¢#ÖȤYƒ‰~¢8 O¤ŸÜ;e]¤–qó§ÙGØ4ŸQÍÅqĉ.cûvzìcØiÆ5Œ#ª Ö³€ÌÓÆT•—TÚ¡³~´ÀM?jUPS’L½#<$´„\I›–s˜í'ø—¬Ys6Sr~”ivDc~&…ݼÓô?õÊàtÔô½aÎ[¿\O;AŒÑ2ɦ̔pôýàSYªƒzŒ/‡qØLéW©š)«*馯ã¸|ô9C…-G‚§J{Ñl¦LÍñ³4ócÉ*ù`µ›ÊCë,¨6ÔT¥¯0•~$Ý]UúÊÙÂN»l²æÄ"Û¥\ã^>æGÚùŒ{ù¢ý@;Ÿq/€ù™v>a/ß.ðø~;Ÿq/ß/¡uñûí|ZP¥^>QC»Ï¸—ï—pÌ÷ÛùŒ{ù~í»ð¾ÙÎgÜË'ßlç3îåÓ>÷üB;ßm“W?»õs6OiSE4²¨N¿éSmÖŽ¡¥“aq&8A¦ú¶” ©SŠ[Õ’Oi¥o|œTzŽqÍ!«_«¾H*eBJ£¦~G'‘ÓŒZÜ”Æÿ°ŽM‘±Ôæ¡jȾЭú;™«Z ªŽoL2ƒØÄgv…ÒùZG +MãÔ^©V¾Dx¡ðx¢Ë-ýþ=³Í{˜iå%ñz|ûš9)á¨×ò›y®êÆå'•^ftsÍ걉tókæôúQCKëƒÅ=Û¾Ýv§QpùŶ»SêKtÂ(Ôv÷­±QÎ0"0Oƒúy”"gh½@ͦÓ(f*æ zëʲ„X—Z¨<‹ãIfÓºKmOŽ5·´cmkÖiî’'õ½fÍ·SŠˆ «ÑΠÌ%õ­DÛ>Ñ(iä{••¢Mæ‹>†ªé4}wìh?š|ð„ÛèúbRó…é~´×­±…:©§ð˜Oæ–ç¸ôqX *ïMÜš¡è‘Ó¯¼¯Ö¥N/sÛx¬òþ¤žÂ£.µé=”g=u½Nó³éðÁ³ˆÑÚñÙôÏßM ¦lW€ÙŽ4üœ²LòG‰v¤ËàD¢Ñß$š2eìõÔQ½ç9òGÝÜ!Èo%Å^§3͸oï—xaÆ‘9Žé|òDšiÄ|ÏÿT<¸¹R ùa-‡êÍa7{ë*›MlM^å"Ûnmݧݲ§êX1±KªƒƒˆH¯È5Ûi[ž@ÒØZ+ÈÓ‹=u)r´]×­u¦s %Í.éX 3½Âh/ë÷Í ¡¨n¯QFÝ oÄÐÆ-P'ÅÙØÒv. ßÉ©pB¾ÀÏÈ>J_n%?Í©Ìæ‚TNøA=táÔ\©½_b×·I´q2•½‘%!Ð:){cÜì×6¾vÌ4©Lôâ ¥ÌÞD7êì j‹:Zvm.ë8+~1{£ÐôyØyþ#Ù›¢Ê}×Ïr˜ÈÞÌŠ?Qœ‹ :¿Ý¿ˆ³7ú'ì'ôÃÏÞ=GúáL×#ë6 + +`¾Ò ¤¦awTDn¢A¤”=Ó…*¢‘V:ÒCGzY:ÖkäHÿ’]˜QúNuà¾#J³þ@Qc6ª¡¯nYͬ²ô‘.éêž²8—¬8髌Z2{íٮȨÅï»×ž¡6œîþfʵø)c1U¢X2ÙÀ¢_s"‹PŸŸ~æôhŸŸª¦CJ›î>v™8ºøbgž*¾1SIþ•Î<ÝÓ¨ŸíÌ0ßî5Ñ™g®öÛyb1¬ª9ïkJA¿3ï°vðøD_èÌ;pՅ漟îÌ;ª:¦3oï~½OÄLgžä ëùVgžÆÞ æ¼ŸîÌû¥¸Œ~ßœ÷ís!œtù‰ÆdZò-öGßzîšÍT¯aé¥dÖý#¡:Øæ½ }XÔù¥«UÕ•)x¢/_¿¡˜Eb+ûoNœÈ¼‡¯_œ„'ú¡ûUS‚×ipÁñé%Öà¥ÇÜ*aÊRËŸÇýËn)/Ï:ÖPu¤ D××?LB¢ÙLI™RhÇ. üž«ž2[*qÄUGý‹ß¿êXh]ü y¼;Hy}í–<Ñ—#n™s‹'úžã¯˜J~!Î/Í[Í߉ƒVxP°„>S†Ýªó•Z¨ªn¢qâ¨Nký\“,.êû±&ÙÖ5É>þL“,iõý@“,Ìò3M²h¢i’E}¿IµÑ©›du/ºÖn3W Š* +W”@ C`¢„I!íÕ¡<¶WÆi0ó¥½ßjÊÓ2kÿ‚¦<ݽùÙ¦<¥/p,ÀÿrSž6Ñ~¼)Ïdì©£ÄL7åýú³h}«)ï ÈÂñµ¦¼#£tLFÕ@Mvû=ê¾RÔ\¨VNoñ›_êh .ú Ù>ÏŽÔʳêh¶ÍI×ÛMy²îi”‰zq/‰â`*£Ó(¤Ûg@'Ø +Á¹´TWšŸ\î*¥‹ÐoI|‰veŠüíöÎú9kñŽ>èýîe‹óµ-îR„´xÓõ–Å{÷Ú°xÛý¦ÅÝL0è·—²øJí¸Ÿ°;ã]LT™[1E¥l»s´ÝÕ„œÌŠî·µã|!{Gì/U³_häìž×': p®g£¶»WŸ.TÄiÙ$S•›aES˜¢7KÝv÷jô +=KH•LQ6ûår«‡=TuÛÁËì.-/º}h¿ð{ +ãuÙrUmw‘éíµÔÐÈo¹—z}hFÍ~@äwB*‘}Éë7û]Lw]ƒf¿ŽA³_ŽëB]­ß‹6]¨–gs«ÿžB‹×¨Å°`W1’[†›·ýCÐZµ ÌLi­F-Æã„œ j¿lOä­há^ª(Áð¸×©2°F1Wµ.•öš}ÏAÍ>Sç«“°‡u ;0&y–ºI*í‹á;½âÆwQ›m.R¿¢æXE×^¯§å ÖóG_¯§×Mtôõz&Iå°žXÑe𦸣o[QÔ¿ ï«oÖӘʫvÕ¿Ü¿xüE+n1(<ŽÖÑ’t#œd‰.„ÖIE›8©Î_—bX>›ÂIõò“jìÓBQ}ñ}Z]}¿ÔoŒù~cŸV~lç üdcßáâžm¿Ì\¤yZcŸþ¹ç6öé7bþhcß·ÒÝæû´b“C†þvcŸÜq»ú”FúGû´ºú´”Í7û´¢kÑëüÁÆ>­®>ñ÷û<]}»SÜŸlì3îaÿ±Æ>­ömìÓØa᨟mìÓÀ)®ÈCÿLcŸÖþÒº¸ù{}Š=ä/L8P_jìÓšê×ÿüxcŸ¹Ãâo7ö)§"~”hGºƒN$š™Æ>óDûVcŸVW>ÂûÙÆ>­®¾_š/üVcŸÖ¥Vßoì“#¶èv¬|½±O˯þµ»_@oŽ/4ö)&Øuõ)Ëyt·[,Ç_Õé–^¶õ³}2ÙØwõ™‹=u)b¶ÿGÿ ÿË}K +þ:íæ$½³„“QŒøK¿IV#†×íCÎôQ¿CDñHõQ8öOsa¿„»Ì©£äô?-¶Ü?ù?ÓïŠ8þ?“Ísû#))"ø*©FG-ºê £×*[#NÆIŒL¼ÀÏl¥Ö»zUþæIuR»®K_Ù ´ôË3NÃéàöQsúS2Ñçü$ L²Uñ’Ö¹§¹´ÙI/ÿÓ'šüýß*Á@/ÿSíËUÆ/ÿ3åøÞËÿD¹1~ÿŸÙž>Ýš‹Óê¡¿üò?eE—ÞûÿNk•Òxùßa2ÅduËi/ÿÛYÏ#ïÿ;ùåfï¶Kaû.G”~²ÇcY2ÑÜ´¯:Òf¾ù‰n¢’úÙ_ëéÓ-o<¡ºmüW»r)ÛJŠÍI0êå;, QYOs´9¦º‹Ôt +.Øo©©Zšœb®SÙÕÔP' ¿fùPVßó%ñ€jðHJù„R+üX©¾žà»Åñ -<™ÓP½ÿé¯à”8M5Ñw}ñ,{¨«:ÍN¤_¡uÒ;$æ=œ¿vïüÑnßSeÑjàã#§Qf3{h*MÿHt NkxÙܦ›òºÕ¹)jʃMM·b/žÈ‘;¬Ú¾[|çòu Vü»w? ¶°|¹ãí¾Üñöû7àîû_ßjÄô˜m¡0,E}ûœÏòë®1Ð1ôð%êèDÕHGËbU­$HP »(Nm¡xXbaTƒDUïýS&ˆOkT;¡¥iFÿÕ?ù®ïÿ¿·çlK&Yöûû<ü@Eòr”QP2¨¼ätÏÙ/÷·ßN3Ó3 Ãî={ÖDuwuuuÅ.Ò'¬Gº'ˆê—Ôý“ëž*¥ÿÎÉ!Ú¯û§ ´S¢qÕ¥ÒÏÙ)j  RóDtmhzëþ çÑ™íû¹ÒæŒ:yúŽäËk ?ež.íRO¶/g¦Ì¡‚uºjp>Ò‘÷¡'ó²}ßÛ¿<¢ :¦€ëàq@—¯EXç»æÙv§eßï‡ì("!OϾW9‹ækÕ”qFû±ƒúÖcg}R"•šÙN‘™&÷U—HE,Pp¤ý#?+êG™>¿‡4½g¸ChËó°­SŽ4=†6ºgg­7—Jƒ»†­îƒ;/T>)ïôéäD*OS +ý=ß-zv²ÄH7#O»îÍïiÅ0¡°Ìk9VNÍ»íoj×Òî©;ï@;ùT­CVuíwŠaB¤ôy£t¬wÛJ„t…ãy· ½y·j}Ú çAÝÒ᩵WHË8î{„ç§©âÌCi³^óÛk’0xjÀ<ÃWø'ar Ü÷0Å0ò ÝžRèZœ>Ë>ÒÈ,Gn½ánÖôB•—¦3óáÐâf‹ZfžAÌ꺧:¢ü÷á2|%½¦XMÞ°7ö—;Ø*›ûzz9ت…»ï ­¢€4<Ô*M—z¡Z•çÈm®~F‡2ó‚…øêzöAEw+Rmƒ­ Ç´Êð…Xe"n…¤ËêŒoJD<œþ0¼ñn5ïì¾ÑëF™x;²~%]ºµZ-Ý*ZE±×⦃­š-׫ljG!¡}tE&ÖngŠï@ùi{7›é¿Zµ³õòÑï|0I– Ù8a–ÎgÒ!ƒ¬7ÖÙÞfšÛ­s&ú`3šÖ}wÒGFot¦y¸ÀXå6wÀ ¥jLQÍ?ÂÁGæ´À­Ã}:µešÑ_•ÛRPN-L“93pK-U mõ:.µQ¥/J³+0Íh$íô¸#Á ú¨Š€’yÍ´#ˆðH ü^ˆ¢V²Ý~Øé}›tDOÄœ®ÀÆå3ÖMäpø;éŽj 9ëR9ß³½Ø6MTÜìå]ÇÎíQáVwFTöóM[ãVÕ‘Õ™MöÌÒ ×Õ/ØÓ²'™ÁÛÓ`JâÅþo˜·šuž—e™Ñsð*rÁÍ/œ?)´F˜îBæÂÚç– +ÑÇCó«3Sye³ÙËý¢&Ý÷˜O·!ð@Câ¯Ôµç#8õ¼$…ùe\*"MÒp¬Ä«î„6 yN×Iò¼Äcòœú «ÀL‚GŽb8!›ŠX6iÝSó(†Ãyv‡bÐ'ªËºõs0I@OµAÚ¤šW²ÿ rKUÔ\xúsK×rÿäaŠ ,PZÐŽ©1Ç:f“d´c¥ÊO¦‚ð/DÚÑl¢“vÒù(G‘vÌzÂ05¯HÛËb®ÒxO+4Hí7ç¤$êÍG¤—ç)‰{8H‹êg¤$jx±õÙ¡õ¥$êÍG”ÂSaœXhP5ÔJJ¢Þ|DƒêĺSõ¢Tm÷=õ*3ííOo*ÉÑ‚‡úë^”¢,BQ­vhØÏ[;¯à¡6”ýˆ®3 ª@q)µµ³ƒß¤‚‡GYçï<ÔÎŽ1Pg¦\TðP;Jb6—Ò.+x(ëØ^µÃ³%eÁCmÏ„AûH#ý5öŠ´›A‘÷¿QðСYí{ØO?Ùe´ç®DÏíBއޓYÙ¯Z˜QZ„Á3U-Æûï[9Ôò(åTµT˜¼ÀUÒÙÇsù¶†óÄ<¬žyž&3-@#¿ìŒÒëu¼:N0Ûè}’ ¾¿ð·qs}³º +Ž×JomºùtXLÐjdºm`¦—Éû›tDâ«#©6¯ãÉ‚Ífÿ2lö¯+Ìæž3ln1.±ùç‹-Ÿ:liöõÍ–§£öåÑb_‹ã7¶¶ùùbߨí”}kÇvì»ëÍÊ65Ûê›áhØv»þÅvªž-ÛõÔoÙî£õy½^g™õæsYï¸ùÛz× Z7· ª[˜jzë åÂSè+ñÖj~›ì–›zå:™¦n*/ù{ËÏäÆl1OÖ«éàÊÐÞ¥Üÿ[ÏDíB^¢iç\zŸºhZp^2÷úzÃ^†àYe¡ê@&sƒò]7˜àZ2¹R /*)Î ©°NÀWØ 0²[±ÝhÛ¶^?¹cõÚꎨç6ÁæR)6÷5¸‡HË—Ÿf›«¶¿óiM¤Áø*눟>X&×1Á Ég6ûè ú‡,S9«J¾Œd¥ »Ö±Cc%š**™0hdl-&[ôÉkr1·o0 8cºÎ“Ó–HÀg÷&dzù æ?Áw&WÒ349ëP¸5ÙWW`¸½U6*há‰^sö4I{ ÇÕIDJ¦5š \– ‚«—%çüþŽƒ«·ÒýYfbv£ßz®C³-ËZOCO ‡´’«¿#;øQÁ†kš~Ý®ðÖAnÃV¼u‘Û’—Á?ü`›LV!–ñÙälQÚ$Þß[l¡_¬ƒfrÛÇçdç]¡«vGÆy³ËY Å"çLßôÅNúEŠ/Üô‹ï˜Ð`¼„Í 6ò´LÜäÃ60oW6vhµ†…g ‡ØÁ6—m‡£Â‹œKz¢ìÁ³ƒe'&_f¡ùØAù^У'\ù•ë·ozB/Ÿhª¸þ’ƒ¨zv‰´t XŒÊÏnüÉÀŸæá-‹Ò¸A¡Œn1P¸ß š™¼FÎÁ<¾L<àƒW'ú€·ùÃ"n^ݸÖvdùéËMÖ²µöíšf{bú)ÒäÞ("ýŠ|ù•9¤<,Ù¼²H޹ÚDµÈÚ¯yŸ’ÖЊ¸6ok¾˜ÈÔ6>xqFºžëh´‹‰·í†aèï½@m-Sˆ¹ác7ÆR¦Yäò™AÙG®¦5ž\í>Úhã³¶^‡\ñß>À‡tš ¯éFŶøÎ´Ä +ë†ïìªx×VÿzÔä¥ñÝÈð¯øÂëÈ¾Õ p4}j4ÝwS.òˆçîu[MMÝßödeðù™‡¢éEÒ$Y¡iZ´”X(Màd)ÏÍ®8Zm1h  _ób`‰|øÈU¦7͈Ÿzȧo³¤²Gåôk+—™šÉêëçm¶ïJ¼!¡E'ø“5²]ú1Rá©´e¡dÈ¡$ÙA¡:£½8î¿Iï2Íܨž¹î²éV¾Z·Ê kö=õxŸ²M×°û ©,ë†9‘fiÏOßêŸÉ‚ßÔGÜP€{3…¹%L4¼Eì,Üàð@êÌg‘^YçØ\±ˆ¬2ß¹±R‚´Fpëµ!/мð6ìà€ìqÁ)Îþ'øÅ Ÿ¹‘VŠ™†¸|Û ƒr +Ìž­S”à ¬ + ÀVø»RòYÄ£,?«q´œ¼ÒÝIrȧšµ;Âoe}ý8Å~ó©•ÈwrAÐBcáFˆRߟ8dÁbd…O.Ô l8¿ Ã(Ÿ'FluÈh0¯röÜÕL;–©$ìzDD"¶–dGLH‚7¯ÚïødˆsL·‹Ýްéò$³¡$€gÙû~ 1ïä–>Ry)„>"Çñ¯ö>1±òOnPµ'~‚ÒWb§…¯ÄNŸõ‰Ðc¸­)F/ ÔOIßðØ¨£=Ó†QdÒì¬Á†u·¹sÜEòa"k  !õnÐÕ§×¾f6ë*Æ@WmÏÍ`æòXÞŸQWÙ/ëõlŽ“p€þÄãG£ã«ýO,{ŸÜOz‡?!ËSúÊ'tÚ²×és>!=†s£=± S‡MÀÍÁ&r…Ä 4ÎaWuøL~ŒÖ­]aJƒÊ–,5³çò8´Ò…¥nÓu¶íԒͳì´$§ÁÇ.ð8¸Ãß[ÁJ¡@ÏL[ëF„QQÀ‚¼=ïö’@&¾™gÖëØÂN‹ê@¿CÍD]ØŽ€öÞjx$šÃúÍMê:#ÀX0ÖëCàrõ<'é—'î2 ÅV¤21ãx-‹öfì ÇÑÎ#<{[ Ïkf\ž;$ H¬O² ++9Ÿ’"×M42« +jŒ­ß]©Ô­çá‰"S<$tÐŒ¬‚}Ì—#^ Î_Y 6ëÝÇTæôÂh<ò„ôÂï8ت™´:(?B ʼwÚÈV7-˜,Ö/שƇƒœœ„¶ö¯«Ÿ@M÷æqöÒ‘1Ú”BÏ‘Ф‘ºC#a\"ÓÆCÂCáá&jê +xð2`w&TOdkÔFÂ]x2G$€ñ`¿‘ãÁ%â´*ÿCTlm$ (t´v&ˆ4&ïæÃ¢‡pmDß)Ûƒˆ„BËmþ[€ög‚ÐŒD˜±Œ6›€È0w€ hJ@´+(R DI`pfÇé…Œ@ýÕyÙ@Òn—ÚÒÍè²§0#*ËÓÚÚ/!m(:TÀQ`/î1d@ñÑul ½è“Àó1傲l"ιL³û¡›œëºÈ!s¾rˆÇ7Ù?Öž•i@hµ‘Oáacâ§7Þ§Lw/ö2JÕ.¡´’×­@Iiš0Ú öbJ»ý±^FiìÜvEiš0JçQ*¡(0(­PE¨^lB“£ ŠÚ0ò%óñu«  fuPÛÚYú˜:6åSŠIàÀŒä¿½G×¾v'–a<ig ¤p`ôÒ&-rÐ)¸rç®À_â¤N¤“úNX#…»*¤k »‰ Ø»u×¢Œ~ûæ²-¡ÿíp(:Av¸{XrzHKÑ ëä××Eô=pÅÜjØÍèÝš möÈb?Î:wÅ;d¡œ oŸkIbóqV$k*|PA—iàÍÜ9:õÌ®—/¥[÷@ÆÃŽ_*…¢¥äYOˆR"yêdV´ÈîësêVÇ#GÈ7+gš¹Ækrðü”KÙþÞ¼€"…ì{Ú mfÝ'ðÉ÷#hšG¡V!¡ƒ§ºÏIЦTàW¥·ì{ÂÓ0º%tåJ¾…Ý_í+—ƒ2¹íõ$ýjcjÝfШ1Òžœ”}´·rʴЈ[¯íp¯™Xu…Duɧ‚%K„Øpmw‰ˆhõLù¶•ëQ¾ÕìÿMMƒWAh¼‚ªhÏäì _ÁŸAÓdñ½&‹o‘£‚ï PI.ÇÆ{ù)“euNpؼ³@¶Èp•nEåÂ.0¹Í5EÛQöLdiΞfn<© '6ï71ï´¾xAž! ©<(¥}D°FàQ‹Á&|§¹‰¦}œ`zYBÕÒ- ®Ÿ$vP'q#|ñ¶ªé[æSMOAêy$U}+ʃ œì}…ó;âÓ+†¿Õ'.D%&ºA4†G–[°!—Â\!ᇋz¹®Rnfœ¯å°p OçðÆãGƒ£~+XÊ|bwÌPä(¸–Y>3óþ;ä)³`hj£iÍ:÷ œ”ZËØÏ  ÇæPýns8RâƒÖl.«®¨47ÌãW,ÊgMYÐ`läç“RÆcyzAWˆÔ'° Ëj ôâõã‡Ô½GŽ;[äf3t‰pŽ;Þºƒî”`Ž ?ðvý `Ø9¯ ‹#†JJBCš¡€fjsšá/Â|k{rÜE¨âB‹Å€óA.€?­.á!,]äHÿ´ÓÒÜ O2›  :²SUe©š• äÈr˜ 2ií¡)€mCàãœU`Ð媠>XÞ…P4íÇ–RàRb +RÅþ;™1Þ r¡ko3s5JVÜ_«ª@ÏõíÅKP5‹áÏWƒ­ûnÒA¾&WؘŸ‚ù ß‹k$|È6ÏS¡VÈ—#G Íå‰ÿÆÊ9­±€Cá÷=Šáïùm-ÍzØVr»¬YðáÛ×™ÀÚdù;óbcJp+3mCŸ6mCƒ¶ôGŠÖåK!>õaocÇ]fPæÑ‚¢‚g䯒MÉGÙK{æ¼àª³Â~NG^= 1=0…É±Æ í‹­˜b¨<é. #?ïÄ47´8oeÎ¥w¡*6]¥Ý¶ý1âÕn1ý ŽœÕˆ[ Y‡Ø¯ ðƒZ¬d§›°_9⻋¼b‡|nv°“d¥ó4å&ñ@6?Þdz_Oˆ<}7ÀfÒÆÞç! ÿ~Cçzˆ–Zµ-ÊÀLê·8ßS±g1/+`"étñh04µÑŒw舜t¨Œ+&"‡7¦[ >ãpÓíÝ4䯠û×гë ØìVyÚu${Oó´~1Ìw=OU@ y?{ß$0Ü;Þæçò\ìãÝ÷œäOt´å’ÊתIÞ6|(ƒQÐÏ@lÄ~?rEØ£Eæg‘ÈCÿwâÜ*y6 +˜[ùŒØÅ±¢¬äQ*ÌË œ +E$`ÙEpv`u<ÿŽáR®I* £<š'-øNaè„3áÂÒ^kóãÂ+*x¶yCn äêE#§.º•œºè–ˆM@Ç·­Íȉ®$Ó>´Á|Sö U-:(%¶KQ3ôâ §ôlÍ¥¸ð"ç¦^´MžŽg³L‹ *ܶ0ºç‰Ž½É׬¢cø‰Ž½*¾_¹;k¡Æ-F?@ÕªxÄ×Ë2ùGo$» ‘^‚N•“¬ŒJÑ%ˆå;;a@•’}°Y߀Û* —6eì®Ô1\Àæn"ª_»mBdLáÜA‡D5ÊnŠQÚ¶¯ô?W&‚¼†¨®Ì¾¢Dõ*£¤<Ã5Vé¯ÅÂédÍé¦Ëäkrþ®ÜolƒúXŒøñˆ„Ô•"ž³é—$’é!'xVE¤í„'ÙÚðUÏü†è"þÅŽ¯ —‡ü 8d´ˆ®pÌÓÿ†›Ø• ­`Ô̤ÙožÃ(\xÒŠ¯z×陌IO +âéÓÁ“o¯ ü4}TdÌ]-W Dõ¦+Ãô¢qSÿ{t϶ÜÈ÷ì(M‘Û­yÐí$µ!ïø1Õóí·=ãS GVØ`IwüÍYašùºÙ¼&¢wu/ÞÌã¾–ªqV]3¾± „öÜÌ(%ècW·BØÉýŒ„€iÆK«g¾G³ä>y[Áúi¡$½éà-#±]pX#y’ìž0#¶Ov̺zæ/ Ö [WBðJÂ…j5@ssÓw¾­E5ÅëW-üq¨’,àmŸ$îKüƒØ´óö**6:b/´…˃ƒ~Vr@ÙñÁEâQ¾cLæ>º`%î&õ]‡&ÓÔÔ<ÏA‹¿jõdCÄ@âLJf7Ÿq}8PŒ–N þ’‡ÓSÖ…o¯[XØŠC­pÃù2‹"YÀfúEÆF"ŽŸ½‹ÿþ|>Î8#SÝMGëòzü=ž†?Ã&Yä¸Ú|¸È­G£×Ñ·™Å`7ͷư‘I¾¤‹Å /3,†#£“ÈoÊoˆY„ZØ +-3cSEæ+”Ÿ®ª±^æ‹mÄ)vDÄß×QX©cྌ““Ͻ˜¬…Þ6°k!¤wmÊqùô0d%S(k?Ps£÷‡ÎWQö4s¸36O!ƒ_«0 6jºq°o/ð6'tby£ŒW1(èóŠùŸÒC3 +óN0›a$ºšTµj?JLÒ2°®mE!2ÄÁßHîq.r³ŽÄ‚<Å–¬ú‚7¨­R[gKÖ8ÎÉgE}hoÄÊ¢´X‹píÆ°8T߸¸Óná—9FTYz=Ýþˆ±ÀÊŇERLiÊE8ä¢_´báC¿8*_Àf.1öä ´NïªðöÙ.‹÷„Ú4Äï3Y܃ë@˜lÅÎÇf W špŸw{W„˜{&pÏ5Öž‰^!®‹¢™ˆ¤áòºHô*…¹­ŠÙÔ ØÜ‹åMv¼­‹’Pù_ù\Ší›3ƒPM¾ì®ÇÙæ°c_9‰ŒÁ¶ßNBTÛ#Ù«—zæ. ÒË»‹DÙ>§!ÃgêgÒú- òÎ ÛØ;ÒpðÊ#^y1Œld懢Ù Ùo2Âo›¬xÅÉC~»|[”‹š:ø63¹&;Ýä¯O6ü§G6£ÑH;2XºEŦ{,¶2Äk üi¼ÃݺʼnW<ýÝã7Œ"oy¥î@. ôè9×}k¤3Ž -—Ë>¾É–°ùØQ?ìG’‰¨h4i† Ó°(Cm7J!YF°å¨çÅÜnÖï;§Vo€uÚ3ŽÏ˜èòÅÝfv½J¼ˆÝåB×Õaºu…jb•$3Q¯þ9Gr”¬óWåIÈ‘“À/Ë9’š9YÎy„Rn€h§ùëmD;… $„÷‰%œÔ_ú¡tR*Á¥#†VaöR§5¦‡@5È ¯ƒ¤cþ:ÄÈ0vdö1²x<_"…x¼µc//z÷B(~:Ý2ŸrÅÅk{V ¬í…ò›+:ö°Éß+bÙl´œU‹_”Œ“üN£`)ÐyAÞ)K‚ËO< “³ï,8à•[|ƈÏÀÜ8_VP\X‹Áå¬Õݤ°Y,bg8 ®…-ˆ4SG64 QÒ©¾r¹w…‹žXh§ð±öô$„9L°\[Àƒ¼œa×»º$°5³¯. |B¦KºUR2°%!6£…·C3Àò(1$v 8wg:#°™U"UÕÂTEJÛƒÑX*ˆòDŠÄ‡–NÈ"$õ‡Ëâƒt Dš%ŒþæÂüì¤POÙòÔ?#•Ï3bf ²£õâ•Îå¡›•ÑF1i²Ø¯)wéÕBca:Þ UlÄTàÊÚ,ÀhÌ$lá±1 Ûj|ŠdÜ fŸÍµ +òëÊìrJ{™_Ni£íI0öLM—SÚÛürJk,.aÄ@­`/T¾©5Ÿs±IQÚdwÙŒ4:‡×-9ôÀè¯.éÚÖ#U„ꟑÆêÚ—è +í7G2¹¾sìy¿h kåQ[ „ êÇÎ|Y'šWW:6i~ó)Á0ݾýÈ +%÷ûº·i“Vô£?ZCÆ‘NüPt¥`z‘ÑŸl.fýùöè¬jîKý•r¥«ËÐZäÙß™èÛÁ•Yvk¹2 8›¹˜ ô) +&ë‡Ý ¶u“sµ,ÁÊX:D©ù¢Ú‰òó‰Fkxe1oêçPJá‰G œtŽòœ~”€äÉl”·”C<&åö· uòæÄÓ.ÊaJ'¹Z—ìþñ2•ŒJ‚Oò1;uzl4#ø ÒNêÕt¾è†f ;Ÿª:°rÞÚüÝ¡tWìm3]%ã2I(®äØ.sAcT(JA ß—ÁꪔìD…gú€Û‡]¦ØyWùðˆ§8(3'ö 6JbºT3´»ë¨÷Í¢<*OŠ˜Îa¡áf.)ؘHÛ}ð9Ìç·£×Lq3IÑ•Ð%.Ø0é¬|Û´s%œ1ÐóRÞRŠÈúeì%®ë~!Ô߯³\¿T´«Nôî2ý6y0eýžG¸z 2¿“ª ;Qáá@à¶.$ÎO>XáªÍQÞRÊß?zèß>rù“WB6údæ?ÃM-ý!£¡m<Ûºd¢’Ù¶Y.Ï%¬àªÇ WCÉÏ; Ƨí_ï^w|Û·œÝ‡ë&ðæ2?æº7ØCê±t6;Ï_hù©()¨Óž™ÂCÕ³ø1…߀QÍâÿÅ~:”D™Åÿ‹)ü’¦x~Œ]R“!þðõÛ) ®‡Ý4pÉW#ž] ¦pΡ[´“i—(x|½Œ¶»%úÄ×I¾ÇóRïŸÑÚð‡3âXðü/ïó!øÖèƒK/Vô±‘·KsÃÖ˜„Vî“\o3ãÁv¼˜÷ÖÿÃðgdR‹ÅÔhM_rïÆì—‹õÖˆþ6ÞŒûÓ‘ñuaL¿¼Øk¶ÃÔKµbÆ6âF: ‘ü9Çv|ðŠ|¨Y"¢ƒz ÿÔÿÿâñ»àÝ=¸ú žýÇȱÆGãG‹5 àe¾ÿþŒV›±þnøSJ¤¢Æ\®£Xd!ú8>ˆ¹F£‘ûWÑÈý>¥QW¦½ÁVn<½þ³…`;ø`ݾPÀïóó>„uïòz|^wˆå=^OÀgôxù ›óá»–;û=¾1Èú=Øíïÿ°g™ðçgu´\lÆÛÅz<Ú|~n³érºÛÀ??‡‹ø;žõ¾á»éâ{áîmp¯½)ÎÓÝp;`dPd@ ‚@0üù_iâ…ñš«ê¨0Zím¶‹à#ŽV_½éˆ`ÔkdŠó-šΈ@+™\z½X¾.¤ÙQù¤:VœGÿ•OMH Q@I w;?ìkd`x “€?C·½€¶^2þÀÁÁÖcäò¤…ò.Žó3Ãç%7%á†õ¡ü™ì†|VDÝؘ‘I/æ_ãùxþ]ém`Çx#•œoǽ鸷¯H ˆ´`ý2N«‰ž„Ëñ¼G¼ÇÄùQÏÉwò;òáoªFM·~–ÄŠ,‰‡,‰ðö}Žäùÿ`ìž_âHÍØÑ剤ê÷²˜ÅÌðµ+èãx8YÖ'›è.ÈŽÜ`=< ¿ =â­ÊW‡ Dø Ý+¾3 +€xã £ vBxn¤/X7Ký/ĆĞï¿QŽì@Ò@Ñò ?/!‚WÇè‡êÜþÈ\¾@PúÞÐ=kAê\êmpp ;éuz¿\ñuÝÌPû÷¦÷?#co>_l{ÛѼ2~¯G°¶GÆÍÏâ?ð ü‘ø •s†?ÿ¯Þv +endstream endobj 7 0 obj <> endobj 8 0 obj <> endobj 36 0 obj <> endobj 37 0 obj <> endobj 66 0 obj <> endobj 67 0 obj <> endobj 65 0 obj <> endobj 97 0 obj <> endobj 98 0 obj <> endobj 99 0 obj <> endobj 131 0 obj <> endobj 132 0 obj <> endobj 133 0 obj <> endobj 164 0 obj <> endobj 165 0 obj <> endobj 166 0 obj <> endobj 197 0 obj <> endobj 198 0 obj <> endobj 199 0 obj <> endobj 231 0 obj <> endobj 232 0 obj <> endobj 233 0 obj <> endobj 246 0 obj [/View/Design] endobj 247 0 obj <>>> endobj 244 0 obj [/View/Design] endobj 245 0 obj <>>> endobj 242 0 obj [/View/Design] endobj 243 0 obj <>>> endobj 212 0 obj [/View/Design] endobj 213 0 obj <>>> endobj 210 0 obj [/View/Design] endobj 211 0 obj <>>> endobj 208 0 obj [/View/Design] endobj 209 0 obj <>>> endobj 180 0 obj [/View/Design] endobj 181 0 obj <>>> endobj 178 0 obj [/View/Design] endobj 179 0 obj <>>> endobj 176 0 obj [/View/Design] endobj 177 0 obj <>>> endobj 147 0 obj [/View/Design] endobj 148 0 obj <>>> endobj 145 0 obj [/View/Design] endobj 146 0 obj <>>> endobj 143 0 obj [/View/Design] endobj 144 0 obj <>>> endobj 114 0 obj [/View/Design] endobj 115 0 obj <>>> endobj 112 0 obj [/View/Design] endobj 113 0 obj <>>> endobj 110 0 obj [/View/Design] endobj 111 0 obj <>>> endobj 80 0 obj [/View/Design] endobj 81 0 obj <>>> endobj 78 0 obj [/View/Design] endobj 79 0 obj <>>> endobj 76 0 obj [/View/Design] endobj 77 0 obj <>>> endobj 49 0 obj [/View/Design] endobj 50 0 obj <>>> endobj 47 0 obj [/View/Design] endobj 48 0 obj <>>> endobj 20 0 obj [/View/Design] endobj 21 0 obj <>>> endobj 18 0 obj [/View/Design] endobj 19 0 obj <>>> endobj 268 0 obj [267 0 R 266 0 R 265 0 R] endobj 296 0 obj <> endobj xref +0 297 +0000000004 65535 f +0000000016 00000 n +0000000515 00000 n +0000040467 00000 n +0000000005 00000 f +0000000006 00000 f +0000000009 00000 f +0000363248 00000 n +0000363318 00000 n +0000000011 00000 f +0000040519 00000 n +0000000012 00000 f +0000000013 00000 f +0000000014 00000 f +0000000015 00000 f +0000000016 00000 f +0000000017 00000 f +0000000022 00000 f +0000367316 00000 n +0000367347 00000 n +0000367200 00000 n +0000367231 00000 n +0000000023 00000 f +0000000024 00000 f +0000000025 00000 f +0000000026 00000 f +0000000027 00000 f +0000000028 00000 f +0000000029 00000 f +0000000030 00000 f +0000000031 00000 f +0000000032 00000 f +0000000033 00000 f +0000000034 00000 f +0000000035 00000 f +0000000038 00000 f +0000363388 00000 n +0000363459 00000 n +0000000039 00000 f +0000000040 00000 f +0000000041 00000 f +0000000042 00000 f +0000000043 00000 f +0000000044 00000 f +0000000045 00000 f +0000000046 00000 f +0000000051 00000 f +0000367084 00000 n +0000367115 00000 n +0000366968 00000 n +0000366999 00000 n +0000000052 00000 f +0000000053 00000 f +0000000054 00000 f +0000000055 00000 f +0000000056 00000 f +0000000057 00000 f +0000000058 00000 f +0000000059 00000 f +0000000060 00000 f +0000000061 00000 f +0000000062 00000 f +0000000063 00000 f +0000000064 00000 f +0000000068 00000 f +0000363672 00000 n +0000363530 00000 n +0000363601 00000 n +0000000069 00000 f +0000000070 00000 f +0000000071 00000 f +0000000072 00000 f +0000000073 00000 f +0000000074 00000 f +0000000075 00000 f +0000000082 00000 f +0000366852 00000 n +0000366883 00000 n +0000366736 00000 n +0000366767 00000 n +0000366620 00000 n +0000366651 00000 n +0000000083 00000 f +0000000084 00000 f +0000000085 00000 f +0000000086 00000 f +0000000087 00000 f +0000000088 00000 f +0000000089 00000 f +0000000090 00000 f +0000000091 00000 f +0000000092 00000 f +0000000093 00000 f +0000000094 00000 f +0000000095 00000 f +0000000096 00000 f +0000000100 00000 f +0000363743 00000 n +0000363816 00000 n +0000363889 00000 n +0000000101 00000 f +0000000102 00000 f +0000000103 00000 f +0000000104 00000 f +0000000105 00000 f +0000000106 00000 f +0000000107 00000 f +0000000108 00000 f +0000000109 00000 f +0000000116 00000 f +0000366502 00000 n +0000366534 00000 n +0000366384 00000 n +0000366416 00000 n +0000366266 00000 n +0000366298 00000 n +0000000117 00000 f +0000000118 00000 f +0000000119 00000 f +0000000120 00000 f +0000000121 00000 f +0000000122 00000 f +0000000123 00000 f +0000000124 00000 f +0000000125 00000 f +0000000126 00000 f +0000000127 00000 f +0000000128 00000 f +0000000129 00000 f +0000000130 00000 f +0000000134 00000 f +0000363962 00000 n +0000364036 00000 n +0000364110 00000 n +0000000135 00000 f +0000000136 00000 f +0000000137 00000 f +0000000138 00000 f +0000000139 00000 f +0000000140 00000 f +0000000141 00000 f +0000000142 00000 f +0000000149 00000 f +0000366148 00000 n +0000366180 00000 n +0000366030 00000 n +0000366062 00000 n +0000365912 00000 n +0000365944 00000 n +0000000150 00000 f +0000000151 00000 f +0000000152 00000 f +0000000153 00000 f +0000000154 00000 f +0000000155 00000 f +0000000156 00000 f +0000000157 00000 f +0000000158 00000 f +0000000159 00000 f +0000000160 00000 f +0000000161 00000 f +0000000162 00000 f +0000000163 00000 f +0000000167 00000 f +0000364184 00000 n +0000364258 00000 n +0000364332 00000 n +0000000168 00000 f +0000000169 00000 f +0000000170 00000 f +0000000171 00000 f +0000000172 00000 f +0000000173 00000 f +0000000174 00000 f +0000000175 00000 f +0000000182 00000 f +0000365794 00000 n +0000365826 00000 n +0000365676 00000 n +0000365708 00000 n +0000365558 00000 n +0000365590 00000 n +0000000183 00000 f +0000000184 00000 f +0000000185 00000 f +0000000186 00000 f +0000000187 00000 f +0000000188 00000 f +0000000189 00000 f +0000000190 00000 f +0000000191 00000 f +0000000192 00000 f +0000000193 00000 f +0000000194 00000 f +0000000195 00000 f +0000000196 00000 f +0000000200 00000 f +0000364406 00000 n +0000364480 00000 n +0000364554 00000 n +0000000201 00000 f +0000000202 00000 f +0000000203 00000 f +0000000204 00000 f +0000000205 00000 f +0000000206 00000 f +0000000207 00000 f +0000000214 00000 f +0000365440 00000 n +0000365472 00000 n +0000365322 00000 n +0000365354 00000 n +0000365204 00000 n +0000365236 00000 n +0000000215 00000 f +0000000216 00000 f +0000000217 00000 f +0000000218 00000 f +0000000219 00000 f +0000000220 00000 f +0000000221 00000 f +0000000222 00000 f +0000000223 00000 f +0000000224 00000 f +0000000225 00000 f +0000000226 00000 f +0000000227 00000 f +0000000228 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000364628 00000 n +0000364702 00000 n +0000364776 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000365086 00000 n +0000365118 00000 n +0000364968 00000 n +0000365000 00000 n +0000364850 00000 n +0000364882 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000043021 00000 n +0000043338 00000 n +0000042445 00000 n +0000042519 00000 n +0000042593 00000 n +0000367432 00000 n +0000040992 00000 n +0000050118 00000 n +0000047431 00000 n +0000047317 00000 n +0000041483 00000 n +0000041880 00000 n +0000041930 00000 n +0000042903 00000 n +0000042935 00000 n +0000042785 00000 n +0000042817 00000 n +0000042667 00000 n +0000042699 00000 n +0000046210 00000 n +0000043721 00000 n +0000043806 00000 n +0000044140 00000 n +0000046493 00000 n +0000047468 00000 n +0000050194 00000 n +0000050464 00000 n +0000051715 00000 n +0000056712 00000 n +0000122302 00000 n +0000187892 00000 n +0000253482 00000 n +0000319072 00000 n +0000367475 00000 n +trailer +<<6178408F51A1D1498CAFDCB7D06B44BC>]>> +startxref +367691 +%%EOF diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/banner.png b/subprojects/tomlplusplus-3.3.0/docs/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..c9ee9963156a3eaf961e7bcba6619c82c4d4dac2 GIT binary patch literal 11547 zcmeHtc{H1E*Y0B|s#;Z5%FocbMGb8Y!^1llT4pI_sSCopsK;&N}OSU)HkjEP0+}-+NzsU)R2${lwhV z@F2f9KL7v+jc(qs1b}_uTaIUZJm9iAFi;FG`|sYg4+Ve&N7#QH-=>f|03ZVx-O#gs zkVBb5Ekixg=l;wU)~)kiG_Ae-=Hl4^P8P?@n{Va~FR5QN?MdIq1MlXD*R#{}iHoj1 z3_BJZ?ViZT?Sve8_fY2i(-N4z>ZyuL#0&4=H9gUdxuN>)74fry@6?@3sHW}7&HKT@ z_+}k^8$E~A?rd~@3yGsohUStcscm>BGd!0B?aggk3p);)2|O#D8Ls%p8wCy-_IlbF z;A5}*g#k`*(e2`n1{dI&5{C?X{jZPzkKB^|HuUu)VTI<~*hYIMrPwc2!Ti^jj{P{J zcaPpRE>{mC=qsNrzyW$%#*I@KT!5RIz+v`!V5s>^%icP9=FZ-Z z;@&0l005n z-KtTXuLkS8Rqa01j^T<3=q`@eoC0k3{TH62*>3pX&Eww-PGXb#((0;Awe>yo{(%IS z6$Y$f<#mQv8@rD9oac}c_*sC83}{$uGxTXWUb9LH=4S)dN8T#>UjgUP`w9SHJlbF) zAsgO)+r|YQINf4GzYl3aQ43o+Ar4~I?*>>? z1y1LUWIPa`R4A5DMX?p*sO69puy%>uQn4r3F4%9OzM*VnluNR?#Tpd^V05?8zZg}bQ zfrh2AQ$k`Eghd?`&ZkKcX_sPK@tcqNeTUQg^a!DfuXFQxbeYwWep~)55 z;J#fuiZWB*Z5k!Kl12p(dIM0Dto`;Xdg67u`uk5g;I7GGIJ-#?$W|{qQ&b zOj*^SYVefm=z3!H0t*a}jXdaDrM>DH={#Ozik@5C?d-+^PkFqt#8 zv5ntgWiIpwqt?k44HdQ0b9MyeQsOA$+pl&`;1ft8(XS8dna15t)oE=YWg+K|bXrPr z8$7e|-ex?eRI)ZiDxL-9yzz~z6MPC&MdZnNMN46*1;#v0c5d-!fC}S zhorluhfeAy$xu=pabubMb$n)Jl?*xIH`9{-?PD}2_whf4gZgJ=fUoyCbpaXQmn9Ao zqZl3Luuc7hy6hKs`Y+6lAF7Lgu3)GIR1K3kr`c&CPENptooO$Qx|vvynPB_^?P@ls z)QeuHv=DDw&v_%Bm;oSY4#n$KV9PdEZhj(;qmrUqghF% z!^4NntC$<<6?;8dsA27lLER%j{snF@`|h1ImLUB;JZIi}_)ifY1z#dPvz<2a8^AfQ zv9B>=Ut{T>+*A~gYUbl0zgNBq9W{B1en~#LQqe;FApm?eV!Pl}(UVcn;u*K@tmr9t zhbKcpo%$hy1MoQt!r@sQyB-h_vdN3DYdCthNh6W#FYJ%8gy|B1uGN@rg)D&p5v)bZ3zo*fW) zK2RWEh;1jFIu3(Myuql9MQE8lm(&cS?Y!pmD3C4l3uzZxON+mY4~kO2(#pabF|?D_ zWtXC#dO+!=a<$~(oqO{Hl|vIQk#AM~6;~!{n|9ZTaBp--7Fct91lW6+Vs^xFc1Ynb zmt(@bk}JN<*SCp(Ea5XT@{Aqq8KE+aqh{H2&ubxj!X;bd2kCIJx0@iqKEDbUiEMx5=`-8g`*fDA(h+wk~wFiXYW}HNSu4lTR7&iKUkH{e*M! z0OHp`z+AB@r`o)Wly!KkB>M{^(B@wJ(>H0cRT&L8w?NYedfTnGi7u$Qi`TUjMlY84 zb?rNVX*&-@D+{rAAfj1ga|W}A84oyht!gZ-Kvpg#Z`XQQ#ih-Eq1UF(F(~f&2h-sc zliL^viIC6kY_ATuin;>%&)s=PWy9bsukI5N>wYw9<&VUJ_es7TLYyfYTH$s=P02@6 z3}nPXU#mcwkz~UIwrauQHT56XO3v2zhosMHJ4E6o>otm-6dMA^l{QKC@NbyP8G1?VFI54sj8;4>oD(Pv#)a2dG!d2As#%W*2(LG#JYF-foT@u;RDm0E+b49$O`ojk0T zli=F{I|1goS27!(h2fzj8~FGfe;jrL6E6oc{ez#<)*x9N zfKnhBbl0NfNCvevd?e5Y?210H!F0KzZ{S9vyz~8E1l%)}~LLEu8;~|DjV#bWQfoM0j zCh#e=ZNxbfeHES5QSv6{^C4l><5aIR08n@v+@0~4u6-l>+%@4V<;!;GtnEtGD(Bj3 zS@nG>`#{6l@DjH21h#I)i$u%4lC~w*^uQ(u9Lu?QfR4M|>}Wumy=ES6KlTK<8sdBT z0p%QG5;4~E57!4v-ydfahYh@(Qq?vze()#&JYvW0 ztk>eKe!4a!9TNQymJFVrypMwuAA&|=fYPau(bv)E5o+n?^3H!E#G`Q*z_CF zouEnY8Ap-w9H;KjvQ-a!c@jcg1%;ayXnlUMq$cJ-egQu_C)e0X=*v4DLKb~IefV_I zE|Qh2DW{c(sS*UDiKoCVM2y#jdcRA)zkNp3Q-?7 z+Y(MU#U>x7u0AGs(JP@DT5Ds%T46u5_F6-0M>3q9e78g^_qr~oOR-I1GhW1atEb~D zsO1d21=KMW(6F*YKME{YAFgZXXkk~qi3c1TC6z=pikOvl?E&)mY{~(hvdMWd@a{A0 zyD^c6MMNS9GY@XVnOWI#I`Fv2nyWW=veU-KPFI46#<2BAzM=$@L9Y)gv6HJ>A&ph3 zG|qUETmV4!E$3mMw1bUM^^HXZ&3j1C4Dnv^O{a#oRXCi6+FmtJt>~w@Y{YofL3*W> zzk3)qBa6uABv7N{osEM9ehR9ycC8DadZsVxZ2cTg4-Vi2aR{C}B-gIBeTX-OMAA>7 zl+r^>`)Sf4V_3(%%!?LojU+3aWPd~$JzGMo!A4=w_@0K}8K zlv9!6?pG*SXK$UM6siF3 zjSVGC5ZMxR1>p)kILHG;r?F*LjDEL+)wPbhWLs)be4tRvh#vO~A>*LwmWpE}EciskH1$1A06k3_GMSv^vH(%wTps;TErVi$>J^pzT=&52d;u`(GzxoNch`{3jogc zpOpc?*Z*pN8;~-%FYC@6e&#PmK!)U19X8a=KacGGZrsZWjPxLwr%rA5OkCFqhF0zk zG@@Rz)+jE5v@wfHX#gaa{XmR?J#66m^}Llw6AE8!+UW_m6x6zK7K5I4u;yJDzBO&? z&)1$?U||J19{gWDfdCtISDW&d-)~;8knM5EMD+dHwdHnfkVGj=0lStJFud+~D-|_J z^lsRVTxboisAA2gQ;0<*HE%QRdTr*2qb4IF1-G>hAy&Awy!jK^Z|X2YtLc@8=4dgJ znYm`^mT6q^e%rjUjg21lf9Qx=h!$?p`$e6W3LuzPO`u`MIP%|9<1^~ zvHTewapUV~d|*x`$a)uThQrU zX6xXrmTb`_I{%dk8rE6)J6Z+caDCLxBT#e5r8uhMt*O3_MDM2vZk^Spl0S(Z6$@h) z5TW6U+^8kq_*Ckqo>sePsv;v=`DZ1!pNZfl)-At|3>ANiN zD&n5zDWutV&x(4s4QQt|ZSk0yd0VI9CfMGr7G_y6HsqoilFrL(y@QVGT3eof6qo%q z3CwjbyErd>uB=+1dg4d1{MM7+U#a~BK3NTq}f`tk1AV-pGv}EMB@WjGu8_Pzk8C;OG0Zs zf~m0GL^+m$z4T$=reULw^`JZKT%94PsFiA8-YP=8qU6xa5M&;BqD*k+qN={0OWcdL zW7|@9g#Lsi#TXgKrYzcQ({99fI|freDH(iyz4JFn-PV;0wl?wxKZrFU(yc8p0^)6iko&w8{ns#sgUtjP2{tD$u# z_`C{Y%C>F%^!Rp89ez?LLEb<0(oo7dbW;IsW}&JzZ%*9(;(#-2l)N+BR3l`DM4~B8 zVHE?HH}kGH1P_#DxJ*yewS)tuHT@fBgtK#JCYNGs-wXh*iU?f%9dGS-g;Z4w(^gx zo>}T@Dt$1Pnj{QM^Vq4gZO+;$1%-`dc3pLwX!o3NRMK|AvkZ9h4frtI0Q|4N+$HTBTs}2dOsSVVq zWp>5AYxT~eaICi(!)RGqn&gcYry(#)9h6b$1lo+KC4qKXILyR(#1q>-+Iq z$;r`3uBS$cq-D7CDr;|xz$=(jW`1-RrX99n^txned8D_wslDK9Nw(NcLE&8(L;th? zX{iYcqpo3H>W%}VYJJ6XlA^KXf1)cV2yffq&rq_Y%uO~iTMjKv^TvvinBS`jR-2Fe zY6;whH$lbl)Wm+lrs2VZA@S(PqES95Z+dQQSNEVG9UbF3bpKba3h%i$GaQklHv5IR za#dVf-11}0{x-yMk;+AGZHN|h%LKgeKff6|)ixUSmyJ%~H_YIL{eL|wRl0!DkP{}^ zZq^OaS<~M7q~pC(r*GO{)>WFMv@(^Sz$u19{%*lAE2>g4{{?zT&?G`D&}1PNnao7^ zjgc=*3~bqICdwT=q0g@Cr{oSe^Po>^e0t2_6P?JTFQjx-U7k#;e^hYNdyG_O={#U_ z)&(!yh2LDlW$r@S9}O|MM$h}>dZMx*BeUBlzXZB4O9QmZ3utc`P)#|Wp4hm|;Ug3$ zRTahY3)hx1myU^?Q(k!5{+Up-baW$H4ES4~Pjf*8yQ* zIaUu<+-OTnWp6GLvyl3P2;9D*%g+tAZgcN>V%L959R_|Ubr~*XL&6 z$!|64eV$1kAf<{sA2q?JlAbc4lPsR_{%`gGq$p*uX)BR1(Id%rFR z>>bsuPUotni0Xt=p)RGT$4uK&Lx&>{!iKkbpTRx*HSbrl?0U7u=EE3;)5Sa^aXKeE zo7i&eyTi~ARUSTl&HW?@3M~=+-Is-ndc!y=qy#&JS?l~d&7T`9cWffe;tQ{>K99Y} zV&~)bdX(#NH~%lX%gJ!_?>y0 z75fGw?I4Y0rKXTguMMZ{NMORCk&7O9*6Jbw`z zgCB}o?=&RI6#5W;I9ab4UjpPMWoUd{eQ<}B@*w##xO`;PbE5`BMdh}}n~mD&xB@_f zTvK_ceGp>oTN%OnTw*OJE?{`~>v4_V&|ZbC)y&$&hFa#knaEQQlaZX2wd+zJ)hA$? zglqO!5$7-0q)9zQ0_1`tSCvnMzc4dD+o;XVWGNys?IOoee}hTe-c1n%QTtug z3w(C~yMZ{BB={nBxx+#AuAKO%k6koR4K>cs#gQZ7{CA0I@10|tY9*7BWZM(-!ghvX zy>H}|(3@S9*yTHDibTnb#*e|w*z;w^NhaKh7}IsxcU#i~jZyRY1X|w3TrUw3y&454Zgrs`>s4{t7s09)?|<7U3@R6u zsJ=T=bco_`?!snBG>!UdI~}F-g#5U zTG!V}UEDFg{F&tb?@V47Y4-EPn#t9~cIU!nb(FKjW8LZ)lOiFfk1Ua&X2hf)J5S0qwd39-#0%y}F!iijHJYru02(=n zKqu`gEUojsYN3T&G4fqt$UIqQ&JofC)l2pt4^Uk1=xeTdF?Va7H#%`X`A2oEu4FE% z=r>Mm%x%*4mI?woL}Mp|xSrMa>g$g0Hq~}qk(#;T36ZE7>c7I(F_`Ri4^4NpKp97V z&8-r(J$e}I4-?ydnj2wz0o)<%4MGhx)DstaHXL8{6$COJrhrk<>_+_g6^4DBX0jNI z9N9+rQMFv0-iVE4XW*ieZ-u|`7CsE*AMx~G__$FqxTnZZV?bkzL(RVj%8c1tj5Ygy zy0TMH*mYw3UHPR;n!dLl{+ro4*Z4El$?Vwq-bXiaQr4~`(vqa_-O{OK#L%-!4=%YQftl^3yAN{e?% zCAgPg_BC;}Jjd4YtHwsrq9W&&B`uM&Z2yjTKTk@m{5|J$?>g6r-cm|a*ooh~5FeMBvh`+ceW(TS=S>}6 z{l}iipR1Jv2WH3gf8Ma)O5?3uZIR`7nWH(vDMaoMS-y?_YWla2-|=YmwxY~Ap_v-v zvlzKUNV6n*F0$yn+B-o8gibFl`6Pe9b1r8TMIW-6AX&An<1fw~BD-0#Ri3O6*X!E) zs=jMDr(KZvKq?q7IwXqFMK#a*x=*O43!2XEFzp*J464b7Ci3hlC!}__dgzMjk$yf_ z^nre;&%?f<)r*YkKgcaNrRuC$+ZfclB34G?`$b*hSS5rC{uJ(m=&>u1S6B1irBn0ks*D zVoBio``_biue|xE589}>8CjO`5yWxo0Gf)=AS!3vU@Q8*$&L952kAB5Qqu&%Utvf} z`*YKu^R~`f=hL3V+=LR$6FF`YWzJ8i+4bQF&a0U^m34?YFnU)iHrpbju;!-M1lIa7 zZfEUj!*bQzRf5ug&#y`IcO{h@inyh(@e>{(HZbmse?=SC8|Oq0&Gn_IEtpP!$bw@x zk5rBD-A%NHnxy$jla?k4qApv{yQ&)Z4pHCjM<^w<;LN(Ee@usNJ&ajFd%RMpG2$~) z+9w8-7;^{3A`?>cq+xpW0$8l-h-(|}lJZ#dN~qcfgmQQ!uvu?HEd{kLGT<`yH;;4M z=;iE9l^&3U51+cbNZOSm6!EZl3Ric~bes2!Ajx>sZ}M^DSUK;tmmfweK5iy7(Dlw{blw@+{_^!E;d6EKL*M`u)32tD0KQ zu`KS?QQ)-5KaNb2U?uJ{!er6zjrW`U>01%YJrjY-E0b>?OF2O;-uJr-oYWx9L^k86 zxQm-JBaqWW+C!$w1LuRwe6pJ!6`+$eC)BQeX-auuT!zS-d2t7JU103wSTbyH4W8KW zz}=-DGL+Vj!Q3j)Iu)f&TE6T!Jh9e*EJ(do)!KE2A(yvA2zJrmw@__Gq(9=%8>8pk zKJ-AcNBNXG%4??Wy9pB^9w^-z#jKePhvVw7u&N%ssh^Tg1zhsiP65jUiIb+g;NtW#4m7 z_iO{lcOFaR_QQAQbVhy{_XK|k6!nsuiTr4d|9L=g?+W(kn`A33-mJw9E3?nXc2=cF zeowmCMS30_4+t;S0SR@B+t8D7tZfzvJP0pR0xU5frz*vL7Z z8dPYSll&i-hJNqzy<*P8fG*gs>2iIn%pR$Ge4iJs72Gy0hzXeM)9mPucO8xEFesYHk@L@k9$saxW1-snmU;EO`E?2Vd{%5_B z=v7vROSnqpZ>sA1Q5F~QLzhz*oQ_d^*k%+59yH2M`-%bipZ`ZQCLA&V`1+3q5W$1p zcw)^;ucD`fb3`bHfc^Q-rDYDh(e)vBw9@rat@Rfx;FMkTaSyf^|Ksobe{dYK`l?2T zeHa5{RW!}%k7Io=593k^+sTs;1YHW`hqGe>{3jgTj3m^YtK2~!0;3B=U-{RLg>mYF nU;3YD6!U*RV`}Ybzqtp@si-lG`)84C&lu^O-l)9h`taWXUr2($ literal 0 HcmV?d00001 diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/banner.svg b/subprojects/tomlplusplus-3.3.0/docs/images/banner.svg new file mode 100644 index 00000000..b12d4d11 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/images/banner.svg @@ -0,0 +1 @@ +banner diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/favicon.ico b/subprojects/tomlplusplus-3.3.0/docs/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..518213d1888e57e2ed4343964aaa7202dd80fe90 GIT binary patch literal 1150 zcmbVMTS!z<6x}ms5Bd=y6M~Swq|zWN$r#IgW*I2jj2Ww64uFeM#FN5}AyL20R^ zSt&_<1V)HfjG6X8B`r0ofxxJ+l+=`7u-g0F?l=Yc(Y@?@&OP_6{W@!1A_L!EUc^s7 zGS4IOAtHY^Ug8yPod+WR=Dk=m_0Erhnu8dqJ^*J^25x2sBgaH2jPyW3xPgsaW{WT) zCxpFaz?#X0hVO7GZ#83*m}+B^<>&(N~$I zutRlbbe6;`-`1_#K6}g}6h+T>#dgmlFO-nWF}lhUFvwW32aK0|t?a)%!3WcyN72)A z9w#@F@*}ae9E`tfBXpND{-POr{Cv(akNuwBIxt4HduRm&2O~~Frcvz7*XZ)wF^{7wVgr7gYMc`iDEO<5(b}#vFuGJA9F~p16+XIF}TF?4a5FRsT!l)w!Qo zM{2J)7`Sr{$JY?o>cM_JwEl4)Eg^sQZ}`$-+_i?|M&WL}9e#{A{SFoX%lHR4d)x8q z$!(Ozd8^!P%uC^+a7&#(_y0x15wu%E(OPv>;btbsFflrUsqy#t@pT4MpWdM?VF~h> z8#)h!3p!puf2m(MR}}3Dd(1-Ew=F;+&&AyNr_a0o;*V%UVn}ZJ%wu=cF)|9rMF%>6 zb^Uaf#NjGyL%s>WBp;XQ`eA-Hrmkka#G$WB(~oFSwCHS1cj;Gp>/OCGs[5 0 R 27 0 R 48 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream + + + + + application/pdf + + + toml + + + Adobe Illustrator CC 22.1 (Windows) + 2020-02-25T22:34:07+03:00 + 2020-02-25T23:14:44+02:00 + 2020-02-25T23:14:44+02:00 + + + + 256 + 256 + JPEG + /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8ANPK3n/zpquhwXd9rFzJc MzhnR/SqAxA+GPgO3hnSHSYh/CHQDU5COZTX/FPmX/q63f8AyPk/5qwflsf80J/MZO8u/wAU+Zf+ rrd/8j5P+asfy2P+aF/MZO8u/wAU+Zf+rrd/8j5P+asfy2P+aF/MZO8uPmjzKRT9K3m//F8n/NWH 8tj/AJoX8xk7yo/p7zB/1d9Q/wCky4/5rw/l8f8ANHyR48/5x+bv095g/wCrvqH/AEmXH/NeP5fH /NHyXx5/zj82Aec/zD8+afrbW1n5h1CKERowT6zKdyN92YnJx02P+aGqWoyA/UUj/wCVqfmR/wBT LqP/AEkSf1w/lcX80MfzOT+cVKX8y/zElYFvM2qAgU+C8nQfcrDCNNj/AJo+SnUZP5x+az/lYv5g /wDUz6t/0nXP/NeP5fH/ADY/II/MZP50vmXf8rF/MH/qZ9W/6Trn/mvH8vj/AJsfkF/MZP50vmXf 8rF/MH/qZ9W/6Trn/mvH8vj/AJsfkF/MZP50vmWm/MPz+ylW8zasysKMpvrkgg9j8eH8vj/mx+QX x8n84/ND/wCNPOP/AFfdR/6S5/8AmvD4MP5o+SPGn3n5u/xp5x/6vuo/9Jc//NePgw/mj5L40+8/ N3+NPOP/AFfdR/6S5/8AmvHwYfzR8l8afefm7/GnnH/q+6j/ANJc/wDzXj4MP5o+S+NPvPzUpfNP maZucur3sjUpya4lY0+ZbCMUe4IOWXeVn+I/MP8A1dLv/kfJ/wA1YfDj3BHiS7y7/EfmH/q6Xf8A yPk/5qx8OPcF8SXeXf4j8w/9XS7/AOR8n/NWPhx7gviS7ytfX9ddSj6ldMjbFWmkIP0FsfDj3BeO XeVH9I6h/wAtUv8AyMb+uHhHcjiLLvIFumpfX/rzST+l6Xp1lkFOXOvRh/KMjIBnA2y//Duk/wC+ n/5HS/8ANeQZ07/Duk/76f8A5HS/814rSjJ5R8uyuXksw7nqzPIT95bCCjhC3/Bnln/lhT/gn/5q w8RXhDv8GeWf+WFP+Cf/AJqx4ivCHf4M8s/8sKf8E/8AzVjxFeEIjytpGm6T+ZflCTT4FgaW8kSQ gk1Uxlf2iezHMfVb4pe5u0wrLGu9L/IP/KM2/wDrSf8AEzmRLm0w5MiyLJ2KuxV2KuxV2KvLfzC/ 5SN/+MUf6stjyaZ82M5Jg7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWefld/0s/+eH/MzK5t uNnmQbHYq7FXYq7FXYqo6Z/5MfyZ/wAxz/8AEBlOp/upe5swf3sfekfkH/lGbf8A1pP+JnMiXNph yZFkWTsVdirsVdirsVeW/mF/ykb/APGKP9WWx5NM+bGckwdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirPPyu/wCln/zw/wCZmVzbcbPMg2OxV2KuxV2KuxVR0z/yY/kz/mOf/iAynU/3Uvc2YP72 PvSPyD/yjNv/AK0n/EzmRLm0w5MiyLJ2KuxVJf8AGfln/luT/gX/AOaclwljxB3+M/LP/Lcn/Av/ AM048JXiDv8AGfln/luT/gX/AOaceErxB59501Czv9ca4tJRLCY0UOARuBv1AycRs1SNlIskxdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirL/IGs6Zpv1/69OIPV9L06hjXjzr0B/mGQkGyBpl/+ M/LP/Lcn/Av/AM05HhLPiDv8Z+Wf+W5P+Bf/AJpx4SvEFS1806BdXCW9veLJNIeKIFcVP0jBRXiC bYGTsVdiqjpn/kx/Jn/Mc/8AxAZTqf7qXubMH97H3pL5GjeLy7DG4o6SSqw9xIQcyJFpjyZBkWTs VdirwfL3GdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVTfyn/wApHYf8 ZR+o5GXJlHm9hypvdirsVQ+nyJH+Y3kxnNAb8qD7sAo/E5Vqf7qXubMH95H3pb5S/wCOSf8AmIuP +TzZc1BOsCXYq7FXg+XuM7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq m/lP/lI7D/jKP1HIy5Mo83sOVN7sVdiqAj/8mD5K/wC2nH/xNMrz/wB1L3M8P95H3oTyl/xyT/zE XH/J5stawnWBLsVdirwfL3GdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVTfyn/ykdh/xlH6jkZcmUeb2HKm92KuxVAR/wDkwfJX/bTj/wCJplef+6l7meH+8j70J5S/45J/ 5iLj/k82WtYTrAl2KuxV4Pl7jOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2Kpv5T/wCUjsP+Mo/UcjLkyjzew5U3uxV2KoCP/wAmD5K/7acf/E0yvP8A3Uvczw/3kfehPKX/ AByT/wAxFx/yebLWsJ1gS7FXYq8Hy9xn0h+Rf5Y+RPMXkGLUtZ0mO8vmuZ42mZ5VPFCAoojqNs0m u1OSGSomg7jRabHPHchu9B/5Ub+VP/Uvw/8AI2f/AKqZifns385y/wAli/mu/wCVG/lT/wBS/D/y Nn/6qY/ns385fyWL+a7/AJUb+VP/AFL8P/I2f/qpj+ezfzl/JYv5rv8AlRv5U/8AUvw/8jZ/+qmP 57N/OX8li/mu/wCVG/lT/wBS/D/yNn/6qY/ns385fyWL+a7/AJUb+VP/AFL8P/I2f/qpj+ezfzl/ JYv5rv8AlRv5U/8AUvw/8jZ/+qmP57N/OX8li/mu/wCVG/lT/wBS/D/yNn/6qY/ns385fyWL+a7/ AJUb+VP/AFL8P/I2f/qpj+ezfzl/JYv5rv8AlRv5U/8AUvw/8jZ/+qmP57N/OX8li/mu/wCVG/lT /wBS/D/yNn/6qY/ns385fyWL+ao3v5I/lZHZXEiaBEHSN2U+pPsQpI/3Zhjrct/UiWjxV9L40zpX nXYq7FXYq7FXYq7FXYq7FU38p/8AKR2H/GUfqORlyZR5vYcqb3Yq7FUBH/5MHyV/204/+Jplef8A upe5nh/vI+9T0FFS2uUQcUW8u1UDsBO4GTjyHuYHmfemeFXYq7FXg+XuM+uP+ca//JYQf8xdx/xI ZzvaX978Hf8AZ/8AdfF6nmA5zsVdirsVdirsVdirsVdirsVdiqH1H/jn3X/GKT/iJwx5hEuT8/M7 B5N2KuxV2KuxV2KuxV2KuxVN/Kf/ACkdh/xlH6jkZcmUeb2HKm92KuxVKp3dPPfkhlNCdYt1r7NP Ep/A5DN/dy/qllj/ALyPvCpon9zd/wDMdd/9RD5KPIe5ieZ96Y4VdirsVeD5e4z64/5xr/8AJYQf 8xdx/wASGc72l/e/B3/Z/wDdfF6nmA5zsVdirsVdirsVdirsVdirsVdiqH1H/jn3X/GKT/iJwx5h EuT8/M7B5N2KuxV2KuxV2KuxV2KuxVN/Kf8Aykdh/wAZR+o5GXJlHm9hypvdirsVSi6/5TryR/22 bX/qIhyGb+7l/VP3Jx/3kf6wVtE/ubv/AJjrv/qIfJR5D3IPM+9McKuxV2KvB8vcZ6t+XX59Xfkr y0mhxaNHeoksk3rtO0ZPqGtOIRunzzX6jQDLLiunP0+uOOPDVso/6Gy1D/qW4v8ApKb/AKpZR/JI /nfY3fyof5v2u/6Gy1D/AKluL/pKb/qlj/JI/nfYv8qH+b9rv+hstQ/6luL/AKSm/wCqWP8AJI/n fYv8qH+b9qpbf85WahNcxQny5EokdUr9abbkaf76wHsoAfV9iR2mSfp+19E5pnbuxV2KvIvzU/PW 78j+Zk0WLR475Wto7j1mnMZrIzLx4hG6cPHNjpdCMseK6dfqdacUuGrYf/0NlqH/AFLcX/SU3/VL Mn+SR/O+xx/5UP8AN+13/Q2Wof8AUtxf9JTf9Usf5JH877F/lQ/zftd/0NlqH/Utxf8ASU3/AFSx /kkfzvsX+VD/ADftU7j/AJyt1Ca3lhPlyJRIjJX6023IU/31iOygP4vsU9pk/wAP2vBc27qnYq7F XYq7FXYq7FXYq7FU38p/8pHYf8ZR+o5GXJlHm9hypvdirsVSi6/5TryR/wBtm1/6iIchm/u5f1T9 ycf95H+sFbRP7m7/AOY67/6iHyUeQ9yDzPvTHCrsVdirwfL3GdirsVdirsVROnf8dC1/4zR/8SGR lyLKPN+gWcg9W7FXYq+UP+cnv/JkRf8AbOg/5OS50HZn918XRdpf3nweR5sXXuxV2KuxV2KuxV2K uxV2KuxV2KuxV2Kpv5T/AOUjsP8AjKP1HIy5Mo83sOVN7sVdiqUXX/KdeSP+2za/9REOQzf3cv6p +5OP+8j/AFgiNJiaIX0T/bjv71Wp4i5cHJQPpHuCkbn3lH4UOxV2KvB8vcZ2KuxV2KuxVE6d/wAd C1/4zR/8SGRlyLKPN+gWcg9W7FXYq+UP+cnv/JkRf9s6D/k5LnQdmf3XxdF2l/efB5Hmxde7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYqm/lP/lI7D/jKP1HIy5Mo83sOVN7sVdiqTX8iRedfJcrmiJq9szH 2E8RORyj93L+qfuTD64+8Jha/wC9eq/9tO//AOoqTHH9I9wTP6j7yickxdirsVeD5e4zsVdirsVd iqJ07/joWv8Axmj/AOJDIy5FlHm/QLOQerdirsVfKH/OT3/kyIv+2dB/yclzoOzP7r4ui7S/vPg8 jzYuvdirsVdirsVdirsVdirsVdirsVdirsVTfyn/AMpHYf8AGUfqORlyZR5vYcqb3Yq7FUg1z/lK vKX/AG04f+T0WDJ9EvcVj9cfem1r/vXqv/bTv/8AqKkwY/pHuDKf1H3lE5Ji7FXYq8Hy9xnYq7FX Yq7FUTp3/HQtf+M0f/EhkZciyjzfoFnIPVuxV2KvlD/nJ7/yZEX/AGzoP+TkudB2Z/dfF0XaX958 HkebF17sVes/kh+U3lzz5a6tLq9zeQNYPCkItHiQEShy3L1I5f5NqZrtbq5YiOGt3P0eljlBu9np 3/Qq/wCX3/Vw1b/kdbf9k+YP8qZO6P2/rc3+TMffL7P1PIfzt/LbQvIuqabaaRPdTx3kDyym7eN2 DK/EcfTji2zY6LUyygmVbOBrNPHEQB1ebZnOE7FXYqrWkSzXUMTEhZHVGI60YgbYCaCQN31D/wBC r/l9/wBXDVv+R1t/2T5of5Uyd0ft/W7v+TMffL7P1IXVv+cYvIVnpd5dxX+qmS3gklQNNblSyIWF aW422yUO08hIFR+39aJdm4wCbP4+D5izeukdiqb+U/8AlI7D/jKP1HIy5Mo83sOVN7sVdiqQa5/y lXlL/tpw/wDJ6LBk+iXuKx+uPvTa1/3r1X/tp3//AFFSYMf0j3BlP6j7yickxdirsVeD5e4zsVdi rsVdiqJ07/joWv8Axmj/AOJDIy5FlHm/QLOQerdirsVfKH/OT3/kyIv+2dB/yclzoOzP7r4ui7S/ vPg8kVWZgqgszGiqNySewzYOAmH+HPMP/Vru/wDkRL/zTkfEj3hl4cu4voX/AJxY0+/s7DzELy2l ti8tsUEyNHWiyVpyArmm7UkCY15u27MiQJW91zVO0fOf/OUml6lea9obWlpNcqlrKGaKN3APqdDx BzddlyAibPV0/aUSZCh0eI/4c8w/9Wu7/wCREv8AzTm08SPeHW+HLuKXZNgirTStUvEL2lnPcIp4 s0UbuAetCVByJkBzLIRJ5BH6f5d8wC/tidMuwBKhJMEn8w/ychLJGuYZRxyvkX3lnJvUoDzArNoO pKoLM1rOFUbkkxtsMnj+oe9hk+k+58Kf4c8w/wDVru/+REv/ADTnV+JHvDzHhy7ihrvT7+zKi8tp bYvUoJkaOtOtOQFcIkDyQYkc0f5T/wCUjsP+Mo/UcZcljzew5U3uxV2KpBrn/KVeUv8Atpw/8nos GT6Je4rH64+9NrX/AHr1X/tp3/8A1FSYMf0j3BlP6j7yickxdirsVeD5e4zsVdirsVdiqJ07/joW v/GaP/iQyMuRZR5v0CzkHq3Yq7FXyh/zk9/5MiL/ALZ0H/JyXOg7M/uvi6LtL+8+DzTy5/ykOl/8 xcH/ACdXM7J9J9zhY/qHvffWci9U7FXYq7FXYq/PTOxeSfT/APzip/yh2r/9tE/8mI80Xav1j3O7 7M+g+97Zmrdk7FXYq7FXzl/zll/x0PLf/GK6/wCJRZuuyeUvg6ftTnH4vGPKf/KR2H/GUfqObWXJ 1keb2HKm92KuxVINc/5Sryl/204f+T0WDJ9EvcVj9cfensqKmsa6iAKq6xqQVR0AF5LTIYfoj/VH 3M8n1y/rH712WMHYq7FXg+XuM7FXYq7FXYqidO/46Fr/AMZo/wDiQyMuRZR5v0CzkHq3Yq7FXyh/ zk9/5MiL/tnQf8nJc6Dsz+6+Lou0v7z4PM/L7pHr2mu7BES6gZmY0AAkUkknM7J9J9zhY/qHvfcX +NPJ3/V907/pLg/5rzlvBn/NPyem8aHePmjtO1jSNSV206+t71YiBIbeVJQpPTlwLUrTISgY8xTK MxLkbReRZIHUNd0PTXRNR1G2snkHKNbiaOIsBtUBytcnHHKXIEsZTiOZpCf408nf9X3Tv+kuD/mv JeDP+afkx8aHePm+Dc6x5Z9If84ya/oWm+UtVi1HUbWyle/LJHcTRxMV9GMVAdgSKjNJ2njlKYoE 7O47OnEQNmt3sa+cvKDMFXXNPLE0AF1ASSf9nmt8Gf8ANPydj40O8fNOMrbGndI0Z3YIiAszMaAA bkknFUn/AMaeTv8Aq+6d/wBJcH/NeW+DP+afk1+NDvHzfP8A/wA5Q6xpGp3/AJebTr63vViiuRIb eVJQpLR05cC1K0zb9lwMRKxXJ1PaUxIxo28k8p/8pHYf8ZR+o5s5cnXR5vYcqb3Yq7FWM+anZNc8 tOh4ut+jKR2IkjIxl9J9yP4h72TXH/Hb1/8A7bOp/wDUZLleH+7j/VH3NmX65f1j97ssYOxV2KvB 8vcZ2KuxV2KuxVE6d/x0LX/jNH/xIZGXIso836BZyD1bsVdir5Q/5ye/8mRF/wBs6D/k5LnQdmf3 XxdF2l/efB5Hmxde7FX0d/zib/xz/Mn/ABmtf+Iy5pe1ucfi7jsvlL4Pfc1DtXzT/wA5X/8AKQ6F /wAwkv8Ayczd9lfTL3um7T+oe54Vm2dW7FXYqidO/wCOha/8Zo/+JDIy5FlHm/QLOQerS/zH/wAo 9qn/ADCT/wDJtsnj+oe9hk+k+58CZ1zyrsVTfyn/AMpHYf8AGUfqORlyZR5vYcqb3Yq7FWL+bf8A js+W/wDmOT/iceJ+k+5H8Q97KLj/AI7ev/8AbZ1P/qMlyvD/AHcf6o+5sy/XL+sfvdljB2KuxV4P l7jOxV2KuxV2KonTv+Oha/8AGaP/AIkMjLkWUeb9As5B6t2KuxV8of8AOT3/AJMiL/tnQf8AJyXO g7M/uvi6LtL+8+DyPNi692Ks+/LH83dR8gwahDZ6fDejUGjdzM7Lx9IMBTj488w9TpBlqzVOXptU cV0Ltm//AENf5h/6sVp/yNkzF/kqP84uT/Kcu4PPfzM/My+8+31ld3dlFZNZRNEqxMzBgzcqnlmZ ptMMQIBu3E1OpOUgkVTDMynGdirsVVLeUwzxzAVMbK4B78TXARaQXuP/AENf5h/6sVp/yNkzVfyV H+cXZ/ynLuChf/8AOUmv3ljc2jaHaotzE8TMJZKgOpWo+/JR7LiDdlEu0pEVQeI5tHWOxVN/Kf8A ykdh/wAZR+o5GXJlHm9hypvdirsVYv5t/wCOz5b/AOY5P+Jx4n6T7kfxD3souP8Ajt6//wBtnU/+ oyXK8P8Adx/qj7mzL9cv6x+92WMHYq7FXg+XuM7FXYq7FXYqidO/46Fr/wAZo/8AiQyMuRZR5v0C zkHq3Yq7FXyh/wA5Pf8AkyIv+2dB/wAnJc6Dsz+6+Lou0v7z4PI82Lr3Yq7FXYq7FXYq7FXYq7FX Yq7FXYq7FU38p/8AKR2H/GUfqORlyZR5vYcqb3Yq7FWL+bf+Oz5b/wCY5P8AiceJ+k+5H8Q97Kr2 Jotd15WpU6vqLbeD3UjD8DleA/u4/wBUfc25R65e8rcsa3Yq7FXg+XuM7FXYq7FXYqidO/46Fr/x mj/4kMjLkWUeb9As5B6t2KuxV8of85Pf+TIi/wC2dB/yclzoOzP7r4ui7S/vPg8jzYuvdirsVdir sVdirsVdirsVdirsVdirsVTfyn/ykdh/xlH6jkZcmUeb2HKm92KuxVivnKVYtU8vyv8AYjvFZqeA eMnCR6T7mJO497MtW/5SLXf+2nef8n2ynT/3cfcG7N9cveUPlrW7FXYq8Hy9xnYq7FXYq7FUTp3/ AB0LX/jNH/xIZGXIso836BZyD1bsVdir5Q/5ye/8mRF/2zoP+TkudB2Z/dfF0XaX958HkebF17sV dirsVdirsVdirsVdirsVdirsVdiqb+U/+UjsP+Mo/UcjLkyjzew5U3uxV2KsP8/f706L/wAxB/Wm SHIsJcwzjVv+Ui13/tp3n/J9so0/93H3BvzfXL3lD5a1uxV2KvB8vcZ2KuxV2KuxVE6d/wAdC1/4 zR/8SGRlyLKPN+gWcg9W7FXYq+UP+cnv/JkRf9s6D/k5LnQdmf3XxdF2l/efB5Hmxde7FXYq7FXY q7FXYq7FXYq7FXYq7FXYqm/lP/lI7D/jKP1HIy5Mo83sOVN7sVdirD/P3+9Oi/8AMQf1pkhyLCXM M41b/lItd/7ad5/yfbKNP/dx9wb831y95Q+WtbsVdirwfL3GdirsVdirsVVLeYw3EUwHIxur08eJ rgIsJBp71/0NlqH/AFLcX/SU3/VLNT/JI/nfY7T+VD/N+13/AENlqH/Utxf9JTf9Usf5JH877F/l Q/zftd/0NlqH/Utxf9JTf9Usf5JH877F/lQ/zfteWfmV59m88eYl1qWzWxZbdLf0VkMgpGzNy5FV 68/DM/TYPCjw3bhajP4suKqYpmQ47sVdirsVdirsVdirsVdirsVdirsVdiqb+U/+UjsP+Mo/UcjL kyjzew5U3uxV2KsP8/f706L/AMxB/WmSHIsJcwzjVv8AlItd/wC2nef8n2yjT/3cfcG/N9cveUPl rW7FXYq8Hy9xnYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FU38p/8pHY f8ZR+o5GXJlHm9hypvdirsVYf5+/3p0X/mIP60yQ5FhLmGf+Y1VfNGthQAPr05oNty1SfpOY2l/u 4+5ydR/eS96Ay9pdirsVeD5e4zsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdiqb+U/wDlI7D/AIyj9RyMuTKPN7DlTe7FXYqwj8zXZItNdSVZXkKkdQQFycWvI9H8y/8AKU61 /wAx0368xdL/AHcfc5Wo/vJe9L8vaXYq7FUP+j7D/lmi/wCAX+mG0U79H2H/ACzRf8Av9MbWnfo+ w/5Zov8AgF/pja08y8/RRReYXWNFRfSj+FQAOntlkeTVPmxzJMHYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYqzj8s7eCb9JerGsnH0ePNQ1K+p0rkJtmNnH6PsP8Almi/4Bf6ZC2ynfo+w/5Zov8A gF/pja0uSys0YMkEasOjBFBH3DFNK2BXYq7FWD/mh/caf/ryfqXJwa8j0jzL/wApTrX/ADHTfrzF 0v8Adx9zlaj+8l70vy9pdirsVdirsVdiry38wv8AlI3/AOMUf6stjyaZ82M5Jg7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FWefld/wBLP/nh/wAzMrm242eZBsdirsVdirsVdirB/wA0P7jT/wDX k/UuTg15HpHmX/lKda/5jpv15i6X+7j7nK1H95L3pfl7S7FXYq7FXYq7FXlv5hf8pG//ABij/Vls eTTPmxnJMHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqzz8rv+ln/AM8P+ZmVzbcbPMg2OxV2 KuxV2KuxVg/5of3Gn/68n6lycGvI9E87WPnW384awtl5XvtRtZLlpYbyBGMbrIA3wnielaZg6bPj GMAyALm6jFPxDUSUrj0/8xnQOvky/APTkVU/cwBy38zi/nBq8DJ/NK79GfmP/wBSZff8Gn9MfzOL +cF8DL/NLv0Z+Y//AFJl9/waf0x/M4v5wXwMv80u/Rn5j/8AUmX3/Bp/TH8zi/nBfAy/zSui0f8A MqRuK+TbwH/KliQfe1BidVi/nBI0+X+aVb/Dv5nf9Sfcf9JNv/zVg/N4v5yfy2X+axTzH+U35p6x qbXq+WpoQUVeBmt2+z78xkhrcI/iYS0mU/wpX/yo381v+pfm/wCRsH/VTD+ew/zmP5LL/Nd/yo38 1v8AqX5v+RsH/VTH89h/nL+Sy/zVdPyB/NtlDDQTQiordWYP3GYHB+fw/wA77Cn8jl7vtDf/AEL/ APm7/wBWH/p7sv8Aqtg/lDD/ADvsP6k/kc3d9od/0L/+bv8A1Yf+nuy/6rY/yhh/nfYf1L+Rzd32 h3/Qv/5u/wDVh/6e7L/qtj/KGH+d9h/Uv5HN3faF8X/OPf5tOxDaKsQpXk91aEfL4ZWOJ7Qw9/2F RoMvd9oVf+hdfzW/6tkX/SVB/wA14P5Rw9/2J/IZe77Xf9C6/mt/1bIv+kqD/mvH+UcPf9i/kMvd 9rv+hdfzW/6tkX/SVB/zXj/KOHv+xfyGXu+13/Quv5rf9WyL/pKg/wCa8f5Rw9/2L+Qy932ohf8A nGz80CoJt7RSR0NytR9wwfyli80/yfl8m/8AoWv8z/8AfFp/0kL/AEwfyli81/k/L5O/6Fr/ADP/ AN8Wn/SQv9Mf5Sxea/yfl8nf9C1/mf8A74tP+khf6Y/yli81/k/L5L4v+cZ/zMdiGWyiAHV7ioP/ AAKtie0sXmkdnZfJkvlT8ifzF0L61zSwn+senSly604cv+KT15ZA9pYj3s49n5B3Mg/5Vj+YP/LJ Y/8ASY//AFQwfyhi82X5HJ5O/wCVY/mD/wAslj/0mP8A9UMf5Qxea/kcnk7/AJVj+YP/ACyWP/SY /wD1Qx/lDF5r+RyeSuPyn89EA/7jB7G6uP8AslyP8pY+6X2frZfkMnl+Pg3/AMqn89f9qv8A6Srj /slx/lLH3S+z9a/kMnl+Pg7/AJVP56/7Vf8A0lXH/ZLj/KWPul9n61/IZPL8fBIfNX5BefdcjtkS 40qD0CxJNxcNXkB/y7DwyQ7TxjpL7P1sZdnZD1H2/qf/2Q== + + + + proof:pdf + uuid:65E6390686CF11DBA6E2D887CEACB407 + xmp.did:76ecb5d0-0c0b-7e4b-b891-4dbb246228bd + uuid:9c54a817-4ce5-4a64-99ce-c0de4cc76998 + + uuid:996d8bde-2065-4f79-8b51-b6e5ce5ecaf4 + xmp.did:d8f12d46-b4b6-fa4e-a251-43d6b2c4ec29 + uuid:65E6390686CF11DBA6E2D887CEACB407 + proof:pdf + + + + + saved + xmp.iid:76ecb5d0-0c0b-7e4b-b891-4dbb246228bd + 2020-02-25T22:34:05+02:00 + Adobe Illustrator CC 22.1 (Windows) + / + + + + Web + Document + 1 + False + False + + 512.000000 + 512.000000 + Pixels + + + + Cyan + Magenta + Yellow + Black + + + + + + Default Swatch Group + 0 + + + + White + RGB + PROCESS + 255 + 255 + 255 + + + Black + RGB + PROCESS + 0 + 0 + 0 + + + RGB Red + RGB + PROCESS + 255 + 0 + 0 + + + RGB Yellow + RGB + PROCESS + 255 + 255 + 0 + + + RGB Green + RGB + PROCESS + 0 + 255 + 0 + + + RGB Cyan + RGB + PROCESS + 0 + 255 + 255 + + + RGB Blue + RGB + PROCESS + 0 + 0 + 255 + + + RGB Magenta + RGB + PROCESS + 255 + 0 + 255 + + + R=193 G=39 B=45 + RGB + PROCESS + 193 + 39 + 45 + + + R=237 G=28 B=36 + RGB + PROCESS + 237 + 28 + 36 + + + R=241 G=90 B=36 + RGB + PROCESS + 241 + 90 + 36 + + + R=247 G=147 B=30 + RGB + PROCESS + 247 + 147 + 30 + + + R=251 G=176 B=59 + RGB + PROCESS + 251 + 176 + 59 + + + R=252 G=238 B=33 + RGB + PROCESS + 252 + 238 + 33 + + + R=217 G=224 B=33 + RGB + PROCESS + 217 + 224 + 33 + + + R=140 G=198 B=63 + RGB + PROCESS + 140 + 198 + 63 + + + R=57 G=181 B=74 + RGB + PROCESS + 57 + 181 + 74 + + + R=0 G=146 B=69 + RGB + PROCESS + 0 + 146 + 69 + + + R=0 G=104 B=55 + RGB + PROCESS + 0 + 104 + 55 + + + R=34 G=181 B=115 + RGB + PROCESS + 34 + 181 + 115 + + + R=0 G=169 B=157 + RGB + PROCESS + 0 + 169 + 157 + + + R=41 G=171 B=226 + RGB + PROCESS + 41 + 171 + 226 + + + R=0 G=113 B=188 + RGB + PROCESS + 0 + 113 + 188 + + + R=46 G=49 B=146 + RGB + PROCESS + 46 + 49 + 146 + + + R=27 G=20 B=100 + RGB + PROCESS + 27 + 20 + 100 + + + R=102 G=45 B=145 + RGB + PROCESS + 102 + 45 + 145 + + + R=147 G=39 B=143 + RGB + PROCESS + 147 + 39 + 143 + + + R=158 G=0 B=93 + RGB + PROCESS + 158 + 0 + 93 + + + R=212 G=20 B=90 + RGB + PROCESS + 212 + 20 + 90 + + + R=237 G=30 B=121 + RGB + PROCESS + 237 + 30 + 121 + + + R=199 G=178 B=153 + RGB + PROCESS + 199 + 178 + 153 + + + R=153 G=134 B=117 + RGB + PROCESS + 153 + 134 + 117 + + + R=115 G=99 B=87 + RGB + PROCESS + 115 + 99 + 87 + + + R=83 G=71 B=65 + RGB + PROCESS + 83 + 71 + 65 + + + R=198 G=156 B=109 + RGB + PROCESS + 198 + 156 + 109 + + + R=166 G=124 B=82 + RGB + PROCESS + 166 + 124 + 82 + + + R=140 G=98 B=57 + RGB + PROCESS + 140 + 98 + 57 + + + R=117 G=76 B=36 + RGB + PROCESS + 117 + 76 + 36 + + + R=96 G=56 B=19 + RGB + PROCESS + 96 + 56 + 19 + + + R=66 G=33 B=11 + RGB + PROCESS + 66 + 33 + 11 + + + + + + Grays + 1 + + + + R=0 G=0 B=0 + RGB + PROCESS + 0 + 0 + 0 + + + R=26 G=26 B=26 + RGB + PROCESS + 26 + 26 + 26 + + + R=51 G=51 B=51 + RGB + PROCESS + 51 + 51 + 51 + + + R=77 G=77 B=77 + RGB + PROCESS + 77 + 77 + 77 + + + R=102 G=102 B=102 + RGB + PROCESS + 102 + 102 + 102 + + + R=128 G=128 B=128 + RGB + PROCESS + 128 + 128 + 128 + + + R=153 G=153 B=153 + RGB + PROCESS + 153 + 153 + 153 + + + R=179 G=179 B=179 + RGB + PROCESS + 179 + 179 + 179 + + + R=204 G=204 B=204 + RGB + PROCESS + 204 + 204 + 204 + + + R=230 G=230 B=230 + RGB + PROCESS + 230 + 230 + 230 + + + R=242 G=242 B=242 + RGB + PROCESS + 242 + 242 + 242 + + + + + + Web Color Group + 1 + + + + R=63 G=169 B=245 + RGB + PROCESS + 63 + 169 + 245 + + + R=122 G=201 B=67 + RGB + PROCESS + 122 + 201 + 67 + + + R=255 G=147 B=30 + RGB + PROCESS + 255 + 147 + 30 + + + R=255 G=29 B=37 + RGB + PROCESS + 255 + 29 + 37 + + + R=255 G=123 B=172 + RGB + PROCESS + 255 + 123 + 172 + + + R=189 G=204 B=212 + RGB + PROCESS + 189 + 204 + 212 + + + + + + + Adobe PDF library 15.00 + 21.0.0 + + + + + + + + + + + + + + + + + + + + + + + + + +endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ExtGState<>/Properties<>>>/Thumb 54 0 R/TrimBox[0.0 0.0 512.0 512.0]/Type/Page>> endobj 50 0 obj <>stream +H‰ÌSËn„0 ¼ç+üljó¸–]õ´ªª~êãЮÔòÿRP(dé½BLÆö0Lˆèè/ÁÝiÓOã„¢¢X€i¼šþ^'¯“Ñ ˆåz=›Cè2«0WLìgý'ØâRQµHDÆú|Á®¼kzæ›ÒKÀ쬶$at ­YÒ΢íò7ø¸IãrD‰1þj±!óAã75Ų¿ßo¢X(WóØ:Èi…«m ’¼’Î:ÞÑ:îD6ìhßž3MR\_Ó±à,ŸY…âÛ¢j’[×Îñ:ÛñŠ‹_SUý¬7Ãüž/ú[| 0i™œQ +endstream endobj 54 0 obj <>stream +8;Z]"8J6Y0$j4dLhg`'5-%=PIHIOiSa(>8iauWVEAcI,VAZh%d +rbW*$�)I^NgIjTBFi(TBFi('E252J*R(.qL@B%;?&TRrti:ukPO^4^Ak&2!%nikbQ~> +endstream endobj 55 0 obj [/Indexed/DeviceRGB 255 56 0 R] endobj 56 0 obj <>stream +8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 +b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` +E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn +6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( +l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> +endstream endobj 48 0 obj <> endobj 57 0 obj [/View/Design] endobj 58 0 obj <>>> endobj 53 0 obj <> endobj 52 0 obj [/ICCBased 59 0 R] endobj 59 0 obj <>stream +H‰œ–yTSwÇoÉž•°Ãc [€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó '¥ªµÕ0 Ö ÏJŒÅb¤  + 2y­.-;!à’ÆK°ZÜ ü‹ž^i½"LÊÀ0ðÿ‰-×é @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ +V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚óÈtÕ;\ú” Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAü om?çW= +€x¯Íú·¶Ò-Œ¯Àòæ[›Ëû0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.òò· åÒR´ ßÞô-•’2ð5ßáÞüÜÏ ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð=¨- t°lÃ`;»Á~pŒƒÁ ðGp| ®[`Lƒ‡`<¯ "A ˆ YA+äùCb(ЇR¡,¨*T2B-Ð +¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx ¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r 9‹\A&‘GÈ ”ˆrQ ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H ‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD ¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèÒÓ¿¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…寒°d¬VÖë(ëk–Íe‹Øél »—½‡}Ž}ŸCâ¸qâ9 +N'çÎ)Î].ÂuæJ¸rî +î÷ wšGä xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó ·‘ÛtÛ´¹i ÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9 œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4 ö +n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=GTB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßY Õ.©=bàá?SŒîƕƩºÈº‘ºçõyõ‡Ø Ú† žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_pß¶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMśΠnßLÝlÜ<9”úO¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ +¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû +endstream endobj 51 0 obj <> endobj 60 0 obj <> endobj 61 0 obj <>stream +%!PS-Adobe-3.0 +%%Creator: Adobe Illustrator(R) 17.0 +%%AI8_CreatorVersion: 22.1.0 +%%For: (Mark Gillard) () +%%Title: (toml.ai) +%%CreationDate: 2/25/2020 11:14 PM +%%Canvassize: 16383 +%%BoundingBox: -7 -519 521 6 +%%HiResBoundingBox: -6.81351234153226 -518.824028253268 520.813512341534 5.8240282532679 +%%DocumentProcessColors: Cyan Magenta Yellow Black +%AI5_FileFormat 13.0 +%AI12_BuildNumber: 312 +%AI3_ColorUsage: Color +%AI7_ImageSettings: 0 +%%RGBProcessColor: 0 0 0 ([Registration]) +%AI3_Cropmarks: 0 -512 512 0 +%AI3_TemplateBox: 256.5 -256.5 256.5 -256.5 +%AI3_TileBox: -41.6377868652344 -676.97509765625 553.682220458984 164.944885253906 +%AI3_DocumentPreview: None +%AI5_ArtSize: 14400 14400 +%AI5_RulerUnits: 6 +%AI9_ColorModel: 1 +%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 +%AI5_TargetResolution: 800 +%AI5_NumLayers: 1 +%AI17_Begin_Content_if_version_gt:17 1 +%AI9_OpenToView: -625.5 234 2 3217 1931 26 1 0 68 123 0 0 0 1 1 0 1 1 0 0 +%AI17_Alternate_Content +%AI9_OpenToView: -625.5 234 2 3217 1931 26 1 0 68 123 0 0 0 1 1 0 1 1 0 0 +%AI17_End_Versioned_Content +%AI5_OpenViewLayers: 7 +%%PageOrigin:-144 -556 +%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 +%AI9_Flatten: 1 +%AI12_CMSettings: 00.MS +%%EndComments + +endstream endobj 62 0 obj <>stream +%%BoundingBox: -7 -519 521 6 +%%HiResBoundingBox: -6.81351234153226 -518.824028253268 520.813512341534 5.8240282532679 +%AI7_Thumbnail: 128 128 8 +%%BeginData: 30708 Hex Bytes +%0000330000660000990000CC0033000033330033660033990033CC0033FF +%0066000066330066660066990066CC0066FF009900009933009966009999 +%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 +%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 +%3333663333993333CC3333FF3366003366333366663366993366CC3366FF +%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 +%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 +%6600666600996600CC6600FF6633006633336633666633996633CC6633FF +%6666006666336666666666996666CC6666FF669900669933669966669999 +%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 +%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF +%9933009933339933669933999933CC9933FF996600996633996666996699 +%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 +%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF +%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 +%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 +%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF +%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC +%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 +%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 +%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 +%000011111111220000002200000022222222440000004400000044444444 +%550000005500000055555555770000007700000077777777880000008800 +%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB +%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF +%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF +%524C45FFA9A984AFA8A984AFA8A984AFA8A984AFA8A984A984A984A984A9 +%84A984847EA984847EA97E7E5A845A845A845A845A845A845A845A84595A +%595A595A595A595A595A595A595A595A2F592F5A2F592F5A2F592F5A2F59 +%2F5A2F5AFD042F0DFD042F362F2F2F362F2F2F360D2F072F0D2F072F0D2F +%072F0D2F072F070DA8065A365A305A365A305A365A305A365A305A365A30 +%5A305A305A305A300D060606070606060706060607060606070606060706 +%060607060606070606060706060607060606070606060706070607060706 +%070607060706070607060706070607060D365A365A5A5A365A5A5A36FD11 +%5A06A80D305B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B +%5A5A0D0D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D060D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D060D060D060D060D06FD045A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A +%5B5A5A5A5B5A5A5A2F8406FD055A365A5A5A365A5A5A365A5A5A365A5A5A +%365A5A5A365A5A2F06070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%06070607060706070607060706070607305A5A5A365A5A5A365A5A5A365A +%5A5A365A5A5A365A5A5A365A5A5A06A80D36855A5A5A5B5A5A5A5B5A5A5A +%5B5A5A5A5B5A5A5A5B5A5A5A5B5A5B0D0D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D070D060D070D060D070D060D070D060D070D065B5A5A5A5B5A +%5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5B5A2F8406FD1C5A2F06 +%0D0607060D0607060D0607060D0607060D0607060D0607060D0607060D06 +%07060D0607060D0607060D0607060D0607060D0607060D0607060D060706 +%0D0607060D060736FD1B5A06A80D5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B +%5A5A5A5B5A5A5A5B5A5A5A5B0D07060D060D060D060D060D060D060D060D +%060D060D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D060D060D060D060D060D060D060D060D060D075A5A5B5A5A5A5B5A5A +%5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A0D84065A5A5A365A5A5A36 +%5A5A5A365A5A5A365A5A5A365A5A5A36FD045A2F06070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%0607060706070607060706070607060706070607060706070607060D365A +%365A5A5A365A5A5A365A5A5A365A5A5A365A5A5A36FD055A06A80D5A5B5A +%5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A612F0D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D070D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D075A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A +%615A2F8406FD1C5A2F0607060D0607060D0607060D0607060D0607060D06 +%07060D0607060D0607060D0607060D0607060D0607060D0607060D060706 +%0D0607060D0607060D0607060D0607060DFD1C5A06A80D365B5A5A5A5B5A +%5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A0D0D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%FD045A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A2F8406 +%FD055A365A5A5A365A5A5A365A5A5A365A5A5A365A5A5A365A5A2F060706 +%070607060706070607060706070607060706070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%0706070607305A5A5A365A5A5A365A5A5A365A5A5A365A5A5A365A5A5A36 +%5A5A5A06A80D36855A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A +%5A5B5A5B0D0D070D060D070D060D070D060D070D060D070D060D070D060D +%070D060D070D060D070D060D070D060D070D060D070D060D070D060D070D +%060D070D060D070D060D070D065B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B +%5A5A5A5B5A5A5A5B5A5B5A2F8406FD1C5A2F060D0607060D0607060D0607 +%060D0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0607060D0607060D0607060D0607060D0607060D060736FD1B5A +%06A80D5A5A5A5B5A5A5A5B5A5A5A5BFD0F5A5B0D07060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D07FD0E +%5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A0D84065A5A5A365A5A5A365A5A5A36 +%5A5A5A060D060D060D060D060D060D060D06070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%07060706070607060706070607060706070607060706070607060D060D06 +%0D060D060D060D06FD055A365A5A5A36FD055A06A80D5A5B5A5B5A5A5A5B +%5A5A5A5B5A5B5A0D060D060D060D060D060D060D060D060D070D060D070D +%060D070D060D070D060D070D060D070D060D070D060D070D060D070D060D +%070D060D070D060D070D060D070D060D070D060D070D060D070D060D070D +%060D060D060D060D060D060D2F855A5A5A5B5A5A5A5B5A5A5A615A2F8406 +%FD0F5A060D0607060D0607060D0607060D0607060D0607060D0607060D06 +%07060D0607060D0607060D0607060D0607060D0607060D0607060D060706 +%0D0607060D0607060D0607060D0607060D0607060D0607060D0607060D06 +%07060D0607060D0636FD0E5A06A80D305B5A5A5A5B5A5A5A5B5A5A5A5B5A +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D305A5A5B5A5A5A5B5A5A5A5B5A5A5A2F8407FD055A365A5A5A +%36FD055A0607060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%0607060706070607065A5A5A365A5A5A365A5A5A365A5A5A06842F36855A +%5A5A5B5A5A5A5B5A5A5A615A0D060D070D060D070D060D070D060D070D06 +%0D070D060D070D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D070D060D070D060D070D060D365B5A5B5A5A5A5B5A5A5A5B5A +%5B5A0D7E0DFD0F5A0607060D0607060D0607060D0607060D0607060D0607 +%060D0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0607060D0607060D0607060D0607060D0607060D0607060D0607 +%060D0607060D0607060D060706FD0F5A06842F365A5A5B5A5A5A5B5A5A5A +%5B5A5A5A0D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D2F615A5A5A5B5A5A5A5B5A5A5A5B5A0D7E065A5A5A +%365A5A5A365A5A5A365A5A5A060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070636FD045A365A5A5A36FD055A06 +%842F365B5A5B5A5A5A5B5A5A5A5B5A5B5A2F060D060D070D060D070D060D +%070D060D070D060D070D060D070D060D070D060D070D060D070D060D070D +%060D070D060D070D060D070D060D070D060D070D060D070D060D070D060D +%070D060D070D060D070D060D070D060D070D060D060D30855A5A5A5B5A5A +%5A5B5A5A5A615A0D7E06FD0F5A060D0607060D0607060D0607060D060706 +%0D0607060D0607060D0607060D0607060D0607060D0607060D0607060D06 +%07060D0607060D0607060D0607060D0607060D0607060D0607060D060706 +%0D0607060D0607060D0607060D0607060D0636FD0E5A06842F305B5A5A5A +%5B5A5A5A5B5A5A5A5B5A0D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D305A5A5B5A5A5A5B5A5A5A5B5A5A5A +%0D7E07FD055A365A5A5A36FD055A06070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070607065A5A5A365A5A5A365A5A5A +%365A5A5A06842F36855A5A5A5B5A5A5A5B5A5A5A615A0D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D070D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D365B5A +%5B5A5A5A5B5A5A5A5B5A5B5A0D7E0DFD0F5A0607060D0607060D0607060D +%0607060D0607060D0607060D0607060D0607060D0607060D0607060D0607 +%060D0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0607060D0607060D0607060D0607060D060706FD0F5A06842F36 +%5A5A5B5A5A5A5B5A5A5A5B5A5A5A0D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D2F615A5A5A5B5A5A5A5B5A +%5A5A5B5A0D7E065A5A5A365A5A5A365A5A5A365A5A5A0607060706070606 +%060706060607060606070606060706060607060606070606060706060607 +%060606070606060706060607060606070606060706070607060706070607 +%06070607060706070607060706070607060706070607060706070636FD04 +%5A365A5A5A36FD055A06842F365B5A5B5A5A5A5B5A5A5A5B5A5B5A2F060D +%060DFD332F0D070D060D070D060D070D060D070D060D070D060D070D060D +%070D060D070D060D070D060D060D30855A5A5A5B5A5A5A5B5A5A5A615A0D +%7E06FD0F5A060D060706A9FD31FFA906070607060D0607060D0607060D06 +%07060D0607060D0607060D0607060D0607060D0607060D0636FD0E5A0684 +%2F305B5A5A5A5B5A5A5A5B5A5A5A5B5A0D060D060784FD31FFA90D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D305A5A5B5A5A5A5B5A5A5A5B5A5A5A0D7E07FD055A365A5A5A +%36FD055A0607060706A8FD31FFAF06070607060706070607060706070607 +%06070607060706070607060706070607060706070607065A5A5A365A5A5A +%365A5A5A365A5A5A06842F30855A5A5A5B5A5A5A5B5A5A5A615A0D060D06 +%0D84FD31FFA90D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D365B5A5B5A5A5A5B5A5A5A5B5A5B5A +%0D7E2F36FD0E5A0607060D06A8FD31FFAF0607060D0607060D0607060D06 +%07060D0607060D0607060D0607060D0607060D0607060D060706FD0F5A06 +%7E5A305A5A5B5A5A5A5B5A5A5A5B5A5A5A0D060D060DA8FD31FFA80D060D +%060D060D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D060D060D2F615A5A5A5B5A5A5A5B5A5A5A5B5A07592F5A5A5A365A5A +%5A365A5A5A365A5A5A0607060706A8FD31FFA90607060706070607060706 +%0706070607060706070607060706070607060706070607060706070636FD +%045A365A5A5A36FD055A065A5A365B5A5B5A5A5A5B5A5A5A5B5A5B5A2F06 +%0D060DA8FD31FFA82F060D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D060D30855A5A5A5B5A5A5A5B5A5A5A +%615A0D5A2FFD0F5A060D060706A9FD31FFA906070607060D0607060D0607 +%060D0607060D0607060D0607060D0607060D0607060D0607060D0636FD0E +%5A065A532F5B5A5A5A5B5A5A5A5B5A5A5A5B5A0D060D060784FD31FFA90D +%060D060D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D060D060D060D305A5A5B5A5A5A5B5A5A5A5B5A5A5A0D5A2F36FD045A +%365A5A5A36FD055A0607060706A8FD31FFAF060706070607060706070607 +%0607060706070607060706070607060706070607060706070607065A5A5A +%365A5A5A365A5A5A365A5A5A067E5930855A5A5A5B5A5A5A5B5A5A5A615A +%0D060D060DA8FD31FFAF0D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D365B5A5B5A5A5A5B5A5A5A +%5B5A5B5A0D5A2F36FD0E5A0607060D0684A8AFA8A9A8AFA8A9A8AFA8A9A8 +%AFA8A9A8FD0FFFA8AFA8A9A8AFA8A9A8AFA8A9A8AFA8A9A8A90607060D06 +%07060D0607060D0607060D0607060D0607060D0607060D0607060D060706 +%0D060706FD0F5A067E5A305A5A5B5A5A5A5B5A5A5A5B5A5A5A0D060D060D +%060D060D070D060D070D060D070D060D07072FFD0DFF5907060D070D060D +%070D060D070D060D070D060D060D060D060D060D060D060D060D060D060D +%060D060D060D060D060D060D060D060D060D060D2F615A5A5A5B5A5A5A5B +%5A5A5A5B5A07592F5A5A5A365A5A5A365A5A5A365A5A5A06070607060706 +%070607060706070607060706070607062FA8FD0CFF5A0607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%0607060706070607060706070607060706070636FD045A365A5A5A36FD05 +%5A065A5A365B5A5B5A5A5A5B5A5A5A5B5A5B5A2F060D060D070D060D070D +%060D070D060D070D060D070D2FFD0DFF5907060D070D060D070D060D070D +%060D070D060D070D060D070D060D070D060D070D060D070D060D070D060D +%070D060D070D060D070D060D060D30855A5A5A5B5A5A5A5B5A5A5A615A0D +%5A2FFD0F5A060D0607060D0607060D0607060D0607060D0607060D062FFD +%0DFF5A0607060D0607060D0607060D0607060D0607060D0607060D060706 +%0D0607060D0607060D0607060D0607060D0607060D0607060D0607060D06 +%36FD0E5A065A532F5B5A5A5A5B5A5A5A5B5A5A5A5B5A0D060D060D060D06 +%0D060D060D060D060D060D060D060D2FFD0DFF5907060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D305A5A5B5A5A5A5B5A5A5A5B5A +%5A5A0D5A2F36FD045A365A5A5A36FD055A06070607060706070607060706 +%070607060706070607062FFD0DFF5A060706070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%0706070607060706070607065A5A5A365A5A5A365A5A5A365A5A5A067E59 +%30855A5A5A5B5A5A5A5B5A5A5A615A0D060D070D060D070D060D070D060D +%070D060D070D060D2FFD0DFF5907070D060D070D060D070D060D070D060D +%070D060D070D060D070D060D070D060D070D060D070D060D070D060D070D +%060D070D060D070D060D365B5A5B5A5A5A5B5A5A5A5B5A5B5A0D5A2F36FD +%0E5A0607060D0607060D0607060D0607060D0607060D0607062FFD0DFF5A +%060D0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0607060D0607060D0607060D0607060D0607060D060706FD0F5A +%067E5A305A5A5B5A5A5A5B5A5A5A5B5A5A5A0D060D060D060D060D060D06 +%0D060D060D060D060D06072FFD0DFF5907060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D2F615A5A5A5B5A5A5A5B5A5A5A5B5A0D59 +%2F365A5A365A5A5A365A5A5A365A5A5A0607060706070607060706070607 +%0607060706070607062FA8FD0CFF5A060706070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%07060706070607060706070636FD045A365A5A5A36FD055A06595A305B5A +%5B5A5A5A5B5A5A5A5B5A5B5A2F060D060D070D060D070D060D070D060D07 +%0D060D070D2FFD0DFF5907060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D060D30855A5A5A5B5A5A5A5B5A5A5A615A0D532F36FD0E5A06 +%0D0607060D0607060D0607060D0607060D0607060D062FFD0DFF5A060706 +%0D0607060D0607060D0607060D0607060D0607060D0607060D0607060D06 +%07060D0607060D0607060D0607060D0607060D0607060D0636FD0E5A0659 +%5A2F5B5A5A5A5B5A5A5A5B5A5A5A5B5A0D060D060D060D060D060D060D06 +%0D060D060D060D060D2FFD0DFF5907060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D305A5A5B5A5A5A5B5A5A5A5B5A5A5A0D595336 +%FD045A365A5A5A36FD055A06070607060706070607060706070607060706 +%070607062FFD0DFF5A060706070607060706070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%0706070607065A5A5A365A5A5A365A5A5A365A5A5A065A5A2F855A5A5A5B +%5A5A5A5B5A5A5A615A0D060D070D060D070D060D070D060D070D060D070D +%060D2FFD0DFF5907070D060D070D060D070D0607060706070607060D070D +%060D070D060D070D060D070D060D0607060706070607060D060D070D060D +%070D060D365B5A5B5A5A5A5B5A5A5A5B5A5B5A0D595336FD0E5A0607060D +%0607060D0607060D0607060D0607060D0607062FFD0DFF5A060D0607060D +%0607060D060D597E597E597E5A59060D0607060D0607060D0607060D0607 +%062F597E597E597E595A0607060D0607060D060706FD0F5A065A5A305A5A +%5B5A5A5A5B5A5A5A5B5A5A5A0D060D060D060D060D060D060D060D060D06 +%0D060D06072FFD0DFF5907060D060D060D060D060D2FFD07FFA807060D06 +%0D060D060D060D060D060D06072FFD07FFA80D060D060D060D060D060D2F +%615A5A5A5B5A5A5A5B5A5A5A5B5A0D532F365A5A365A5A5A365A5A5A365A +%5A5A06070607060706070607060706070607060706070607062FA8FD0CFF +%5A06070607060706070607062FFD07FFA806070607060706070607060706 +%070607062FA8FD06FFA8060706070607060706070636FD045A365A5A5A36 +%FD055A06595A305B5A5B5A5A5A5B5A5A5A5B5A5B5A2F060D060D070D060D +%070D060D070D060D070D060D070D2FFD0DFF5907060D070D060D070D060D +%2FFD07FFA80D060D070D060D070D060D070D060D070D2FFD07FF840D060D +%060D070D060D060D30855A5A5A5B5A5A5A5B5A5A5A615A0D532F36FD0E5A +%060D0607060D0607060D0607060D0607060D0607060D062FFD0DFF5A0607 +%060D0607060D0607062FFD07FFA90607060D0607060D0607060D0607060D +%062FFD07FFA8060D0607060D0607060D0636FD0E5A06595A2F5B5A5A5A5B +%5A5A5A5B5A5A5A5B5A0D060D060D060D060D060D060D060D060D060D060D +%060D2FFD0DFF5907060D060D06070607060707FD07FF840706070607060D +%060D060D0607060706070DFD07FF840706070607060D060D060D305A5A5B +%5A5A5A5B5A5A5A5B5A5A5A0D595336FD045A365A5A5A36FD055A06070607 +%060706070607060706070607060706070607062FFD0DFF5A0607060706FD +%042F592F5AA9FD06FFA9FD062F06070607062F2F592F2F2F5AFD07FFA92F +%2F2F592F2F06070607065A5A5A365A5A5A365A5A5A365A5A5A065A5A2F85 +%5A5A5A5B5A5A5A5B5A5A5A615A0D060D070D060D070D060D070D060D070D +%060D070D060D2FFD0DFF5907070D060D2FFD14FF2F060D070759FD13FFA8 +%2F060D060D365B5A5B5A5A5A5B5A5A5A5B5A5B5A0D595336FD0E5A060706 +%0D0607060D0607060D0607060D0607060D0607062FFD0DFF5A060D060706 +%59FD14FF0607060D065AFD13FFAF0607060706FD0F5A065A5A305A5A5B5A +%5A5A5B5A5A5A5B5A5A5A0D060D060D060D060D060D060D060D060D060D06 +%0D06072FFD0DFF5907060D06072FFD14FF2F060D060759FD13FFA90D060D +%060D2F615A5A5A5B5A5A5A5B5A5A5A5B5A0D532F365A5A365A5A5A365A5A +%5A365A5A5A06070607060706070607060706070607060706070607062FA8 +%FD0CFF5A06070607062FFD14FF06070607065AFD13FFAF060706070636FD +%045A365A5A5A36FD055A06597E305B5A5B5A5A5A5B5A5A5A5B5A5B5A2F06 +%0D060D070D060D070D060D070D060D070D060D070D2FFD0DFF5907060D07 +%072FFD14FF2F060D060759FD13FFA90D060D060D30855A5A5A5B5A5A5A5B +%5A5A5A615A0D2F5936FD0E5A060D0607060D0607060D0607060D0607060D +%0607060D062FFD0DFF5A0607060D062FFD14FF06070607065AFD13FFAF06 +%07060D0636FD0E5A062F7E2F5B5A5A5A5B5A5A5A5B5A5A5A5B5A0D060D06 +%0D060D060D060D060D060D060D060D060D060D2FFD0DFF5907060D06072F +%FD14FF2F060D060759FD13FFA90D060D060D305A5A5B5A5A5A5B5A5A5A5B +%5A5A5A0D2F5930FD045A365A5A5A36FD055A060706070607060706070607 +%06070607060706070607062FFD0DFF5A06070607062F7E847E847E84FD08 +%FF7E847E847E8406070607062F7E847E847EA8FD08FF7E847E847E7E0607 +%0607065A5A5A365A5A5A365A5A5A365A5A5A062F842F855A5A5A5B5A5A5A +%5B5A5A5A615A0D060D070D060D070D060D070D060D070D060D070D060D2F +%FD0DFF5907070D060D0607060D06070DFD07FF84070607060D060D060D07 +%0D060D060706072FFD07FF8407060D0607060D070D060D365B5A5B5A5A5A +%5B5A5A5A5B5A5B5A2F2F5A30FD0E5A0607060D0607060D0607060D060706 +%0D0607060D0607062FFD0DFF5A060D0607060D0607060D062FFD07FFA806 +%070607060D0607060D0607060D0607062FFD07FFA90607060D0607060D06 +%0706FD0F5A062F84305A5A5B5A5A5A5B5A5A5A5B5A5A5A0D060D060D060D +%060D060D060D060D060D060D060D06072FFD0DFF5907060D060D060D060D +%060D2FFD07FFA807060D060D060D060D060D060D060D06072FFD07FF840D +%060D060D060D060D060D2F615A5A5A5B5A5A5A5B5A5A5A5B5A0D2F59365A +%5A365A5A5A365A5A5A365A5A5A0607060706070607060706070607060706 +%0706070607062FA8FD0CFF5A06070607060706070607062FFD07FFA80607 +%0607060706070607060706070607062FA8FD06FFA8060706070607060706 +%070636FD045A365A5A5A36FD055A062F84305B5A5B5A5A5A5B5A5A5A5B5A +%5B5A2F060D060D070D060D070D060D070D060D070D060D070D2FFD0DFF59 +%07060D070D060D070D060D2FFD07FFA80D060D070D060D070D060D070D06 +%0D07072FFD07FFA80D060D060D070D060D060D30855A5A5A5B5A5A5A5B5A +%5A5A615A0D2F5936FD0E5A060D0607060D0607060D0607060D0607060D06 +%07060D062FFD0DFF5A0607060D0607060D0607062F84A884A984A8847E06 +%07060D0607060D0607060D0607060D062F84A984A884A9A87E060D060706 +%0D0607060D0636FD0E5A062F7E2F5B5A5A5A5B5A5A5A5B5A5A5A5B5A0D06 +%0D060D060D060D060D060D060D060D060D060D060D2FFD0DFF5907060D06 +%0D060D060D060D060D0607060D0607060D060D060D060D060D060D060D06 +%0D060D0607060D0607060D060D060D060D060D060D060D305A5A5B5A5A5A +%5B5A5A5A5B5A5A5A0D2F5930FD045A365A5A5A36FD055A06070607060706 +%070607060706070607060706070607062FFD0DFF5A060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%0706070607060706070607060706070607065A5A5A365A5A5A365A5A5A36 +%5A5A5A062F842F855A5A5A5B5A5A5A5B5A5A5A615A0D060D070D060D070D +%060D070D060D070D060D070D060D2FFD0DFF5907070D060D070D060D070D +%060D070D060D070D060D070D060D070D060D070D060D070D060D070D060D +%070D060D070D060D070D060D070D060D365B5A5B5A5A5A5B5A5A5A5B5A5B +%5A2F2F5A30FD0E5A0607060D0607060D0607060D0607060D0607060D0607 +%062FFD0DFF5A060D0607060D0607060D0607060D0607060D0607060D0607 +%060D0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%060706FD0F5A062F84305A5A5B5A5A5A5B5A5A5A5B5A5A5A0D060D060D06 +%0D060D060D060D060D060D060D060D06072FFD0DFF5907060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D2F615A5A5A5B5A5A5A5B5A +%5A5A5B5A0D2F59365A5A365A5A5A365A5A5A365A5A5A0607060706070607 +%0607060706070607060706070607062FA8FD0CFF5A060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%07060706070607060706070607060706070636FD045A365A5A5A36FD055A +%062F84305B5A5B5A5A5A5B5A5A5A5B5A5B5A2F060D060D070D060D070D06 +%0D070D060D070D060D070D2FFD0DFF5907060D070D060D070D060D070D06 +%0D070D060D070D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D060D30855A5A5A5B5A5A5A5B5A5A5A615A0D2F +%5936FD0E5A060D0607060D0607060D0607060D0607060D0607060D062FFD +%0DFF5A0607060D0607060D0607060D0607060D0607060D0607060D060706 +%0D0607060D0607060D0607060D0607060D0607060D0607060D0607060D06 +%36FD0E5A062F842F5B5A5A5A5B5A5A5A5B5A5A5A5B5A0D060D060D060D06 +%0D060D060D060D060D060D060D060D2FFD0DFF5907060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D305A5A5B5A5A5A5B5A5A5A5B5A +%5A5A0D2F7E36FD045A365A5A5A36FD055A06070607060706070607060706 +%070607060706070607062FFD0DFF5A060706070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%0706070607060706070607065A5A5A365A5A5A365A5A5A365A5A5A062F84 +%30615A5A5A5B5A5A5A5B5A5A5A615A0D060D070D060D070D060D070D060D +%070D060D070D060D2FFD0DFF5907070D060D070D060D070D060D070D060D +%070D060D070D060D070D060D070D060D070D060D070D060D070D060D070D +%060D070D060D070D060D365B5A5B5A5A5A5B5A5A5A5B5A5B5A2F0D7E36FD +%0E5A0607060D0607060D0607060D0607060D0607060D0607062FFD0DFF5A +%060D0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0607060D0607060D0607060D0607060D0607060D060706FD0F5A +%062F84305A5A5B5A5A5A5B5A5A5A5B5A5A5A0D060D060D060D060D060D06 +%0D060D060D060D060D06072FFD0DFF5907060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D2F615A5A5A5B5A5A5A5B5A5A5A5B5A0D07 +%7E365A5A365A5A5A365A5A5A365A5A5A0607060706070607060706070607 +%0607060706070607062FA8FD0CFF5A060706070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%07060706070607060706070636FD045A365A5A5A36FD055A062FA9305B5A +%5B5A5A5A5B5A5A5A5B5A5B5A2F060D060D070D060D070D060D070D060D07 +%0D060D070D2FFD0DFF5907060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D060D30855A5A5A5B5A5A5A5B5A5A5A615A2F0D7EFD0F5A060D +%0607060D0607060D0607060D0607060D0607060D062FFD0DFF5A0607060D +%0607060D0607060D0607060D0607060D0607060D0607060D0607060D0607 +%060D0607060D0607060D0607060D0607060D0607060D0636FD0E5A062F84 +%2F5B5A5A5A5B5A5A5A5B5A5A5A5B5A0D060D060D060D060D060D060D060D +%060D060D060D060D2FFD0DFF5907060D060D060D060D060D060D060D060D +%060D060D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D060D060D060D060D305A5A5B5A5A5A5B5A5A5A5B5A5A5A2F0D7E36FD +%045A365A5A5A36FD055A0607060706070607060706070607060706070607 +%0607062FFD0DFF5A06070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%06070607065A5A5A365A5A5A365A5A5A365A5A5A062F8430615A5A5A5B5A +%5A5A5B5A5A5A615A0D060D070D060D070D060D070D060D070D060D070D06 +%0D2FFD0DFF5907070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D070D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D365B5A5B5A5A5A5B5A5A5A5B5A5B5A2F0D7E36FD0E5A0607060D06 +%07060D0607060D0607060D0607060D0607062FA8AFA8AFA8A9A8AFA8A9A8 +%AFA859060D0607060D0607060D0607060D0607060D0607060D0607060D06 +%07060D0607060D0607060D0607060D0607060D0607060D0607060D060706 +%FD0F5A062F84305A5A5B5A5A5A5B5A5A5A5B5A5A5A0D060D060D060D060D +%060D060D060D060D060D060D060D060D070D060D070D060D070D060D060D +%060D060D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D060D060D060D060D060D060D060D060D060D060D060D060D2F615A5A +%5A5B5A5A5A5B5A5A5A5B5A0D077E365A5A365A5A5A365A5A5A365A5A5A06 +%070607060706070607060706070607060706070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%0706070636FD045A365A5A5A36FD055A062FA9305B5A5B5A5A5A5B5A5A5A +%5B5A5B5A2F060D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D070D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D060D30855A5A5A5B5A5A5A5B5A5A5A615A2F0D7EFD0F5A +%060D0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0607060D0607060D0607060D0607060D0607060D0607060D0607 +%060D0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0636FD0E5A062F842F5B5A5A5A5B5A5A5A5B5A5A5A5B5A0D060D +%060D060D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D060D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D060D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D305A5A5B5A5A5A5B5A5A5A5B5A5A5A2F0D7E36FD045A365A5A5A36FD +%055A06070607060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%060706070607065A5A5A365A5A5A365A5A5A365A5A5A062FA930615A5A5A +%5B5A5A5A5B5A5A5A615A0D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D070D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D365B5A5B5A5A5A5B5A5A5A5B5A5B5A +%2F0784FD0F5A0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0607060D0607060D0607060D0607060D0607060D0607060D0607 +%060D0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0607060D060706FD0F5A0607A9365A5A5B5A5A5A5B5A5A5A5B5A +%5A5A0D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D2F615A5A5A5B5A5A5A5B5A5A5A5B5A2F06845A5A5A365A +%5A5A365A5A5A365A5A5A0607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%06070607060706070607060706070636FD045A365A5A5A36FD055A0607A9 +%365B5A5B5A5A5A5B5A5A5A5BFD045A365A305A365A305A365A305A0D0D06 +%0D070D060D070D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D075A305A365A305A365A305A365A5A615A5A5A5B5A5A5A5B5A +%5A5A615A2F0684FD1C5A2F0607060D0607060D0607060D0607060D060706 +%0D0607060D0607060D0607060D0607060D0607060D0607060D0607060D06 +%07060D0607060D0607060D0607060D0607060DFD1C5A0707A9305B5A5A5A +%5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A0D0D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D06FD045A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A2F +%06845A365A5A5A365A5A5A365A5A5A365A5A5A365A5A5A365A5A5A365A5A +%2F0607060706070607060706070607060706070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%070607060706070607305A5A5A365A5A5A365A5A5A365A5A5A365A5A5A36 +%5A5A5A365A5A5A0607A9305B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A +%5A5B5A5A5A5B5A5B0D0D070D060D070D060D070D060D070D060D070D060D +%070D060D070D060D070D060D070D060D070D060D070D060D070D060D070D +%060D070D060D070D060D070D060D070D065B5A5A5A5B5A5A5A5B5A5A5A5B +%5A5A5A5B5A5A5A5B5A5A5A5B5A5B5A2F0684FD1C5A2F060D0607060D0607 +%060D0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0607060D0607060D0607060D0607060D0607060D0607060D0607 +%36FD1B5A0607A9365A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A +%5B5A5A5A5B0D07060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D060D060D060D060D060D060D060D060D06 +%0D060D060D060D060D060D060D075A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A +%5A5A5B5A5A5A5B5A5A5A5B5A2F06845A5A5A365A5A5A365A5A5A365A5A5A +%365A5A5A365A5A5A36FD045A2F0607060706070607060706070607060706 +%070607060706070607060706070607060706070607060706070607060706 +%07060706070607060706070607060706070607060D365A365A5A5A365A5A +%5A365A5A5A365A5A5A365A5A5A36FD055A0607A9365B5A5B5A5A5A5B5A5A +%5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A612F0D060D070D060D070D060D +%070D060D070D060D070D060D070D060D070D060D070D060D070D060D070D +%060D070D060D070D060D070D060D070D060D070D060D070D060D075A5A5B +%5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A615A2F0684FD1C +%5A2F0607060D0607060D0607060D0607060D0607060D0607060D0607060D +%0607060D0607060D0607060D0607060D0607060D0607060D0607060D0607 +%060D0607060D0607060DFD1C5A0707A9305B5A5A5A5B5A5A5A5B5A5A5A5B +%5A5A5A5B5A5A5A5B5A5A5A5B5A5A0D0D060D060D060D060D060D060D060D +%060D060D060D060D060D060D060D060D060D060D060D060D060D060D060D +%060D060D060D060D060D060D060D060D060D060D060D06FD045A5B5A5A5A +%5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A5B5A5A5A2F06845A365A5A5A365A +%5A5A365A5A5A365A5A5A365A5A5A365A5A5A365A5A2F0607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070607060706070607 +%305A5A5A365A5A5A365A5A5A365A5A5A365A5A5A365A5A5A365A5A5A0607 +%A936615A5B5A615A5B5A615A5B5A615A5B5A615A5B5A615A5B5A615A5B0D +%0D070D060D070D060D070D060D070D060D070D060D070D060D070D060D07 +%0D060D070D060D070D060D070D060D070D060D070D060D070D060D070D06 +%0D070D060D070D065B5A5B5A615A5B5A615A5B5A615A5B5A615A5B5A615A +%5B5A615A5B5A2F0684FD055A365A5A5A365A5A5A365A5A5A365A5A5A365A +%5A5A365A5A2F060706070607060706070607060706070607060706070607 +%060706070607060706070607060706070607060706070606060706060607 +%06060607060606070606060706072F5A305A2F5A305A2F5A305A2F5A3036 +%2F5A30362F5A30362F5A30360606AF070D060D070D072F070D072F070D07 +%2F070D072F072F072F0D2F072F070D060D070D060D070D062F072F062F07 +%2F062F072F062F072F062F07FD122F592F592F5A2F592F5A2F592F5A2F59 +%2F5A2F5A595A597E5A7E5A7E5A7E5A7E5A7E5A7E59847E847E847E847E84 +%7E847E847E7E5AA8847E7E7EA884A87EA884A87EA884A87EA884A87EA884 +%A9A8A9A8A9A8AFA8A9A8AFA8A9A8AFA8A9A8FFA9FFA8FFA9FFA8FFA9FFA8 +%FFA9FFA8FFAFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FD36FFFF +%%EndData + +endstream endobj 63 0 obj <>stream +%AI12_CompressedDataxœì½kÇ•-ø]ÿÙ ØWÇñ~x.¨ªSåë»-Hîn ‚&Ë2Û|eç×ÏZ;™‘§ªHŠ»[É:'22;ösíø?¾øêó‹g¯ÿxû¹=ªÃ£Ïþá®ÞÜ>yûúÍ/òñá×/^|÷íÛ7üèg_þü ãQ±ÕůÓãÚò_nß|ûüõ«_Œ9êR{Ãïÿì·OÞüåð«ç/^•ò³ûòöëç²z˜ÞÿyëùÍëo^bmøm΀9ðUkûò›X ™1ãÃÑ>/­iñJej>c +)xLÃdÇpÌÑ«ƒÆ¼·ÇŒ1Êù”“Ã:ºcv.%¹Í*Ô>—Ù½ýëóÛ¿ýòðO¯_ÝÖ)¼xóö«²œSªüY«¾üîÅí›~õü-^«t•Ëþöõ³ÛøÆÒÅÍ‹'2uRôògmñû'o¾¾}‹ÍóúÅwoeg§þ¬Óožüý–Ë]:Ôññ%&ùžõê-FýøùŸÿµœˆÇ_¿ý¥Žµ]~ü»on_ýþõ¿È+}Ž áŒb™ƒ5l•­>`Gr ؆Ø~}|ºÿ©Ú#/^¼½}ó +«ÔûžqýêÙãz¶oŸmžãå9|J›‹È]ø6æïÞ<ÇdüòsÍà}¨›öWož?[öl4‡Tþ1½üÑ:•M~è'Y~bÐ>igòI%¬ÿ[¼L_Bóøê·«¥Ž¿ýŠïƒ ¸zý’[ñ[¡6\f³¯¿®µË/R‡.¾û¦NPÙع_¼yþŠ?úìŸJ]züÅ‹ïPù«7¯¿ûæ×¯þôúÑg?+¤ö7Ï_ÝJåAjA4å³'oÞþíõ›¿à×_?»}²Ðo~~O§_ýåöíÓ?ÝÖO?¤ã¹} +âÃøìð»?þ~a/¤M‡ß¿yòoŒß{›‡tˆUyÓÞß•_ÛßùþéöOüÒAùôúÕ_o_¼þfÕqi÷¿xñäÕ“7}ÒÚ*ý5O°ªK—lxûöêçåL‹ô²]”{¬ªô¨'oÿŒ èöÕ³o{ïå×eä|›òÙCz¼zòâÅó¯ß<ùæÏÏŸ.ß|÷퟿ýúEï}§¾?i]'Uüæƒvðß_þñõ‹çß¾ìYòöðó§/n¿úû·oo¶ª<üo^ýîU™Ÿù-jƒñpq”ï¼Óèاõoí= •ÿ™žòÕS™™½gl«úsêÇŸàSÚ"_?{‚xæàßÙæ«¿=ÅþÍó?ÞsP9ÍzþêÆýÕwÏßÞ.góõËoÈ ¾úó“onåä´–_-]z¹öW÷ÖçŸß}£ép¸|µnò«7Ož=Ç &ÿW¯_<»}uø’—†¶þ7<\>{ôÙ¿=úL­þÓí?wø‡Ç—àyÿ>ÞûÑ«bVÅJqCñ낽 +«W%oÊŪ\J¹’ÿOµ\Ëÿ7èñ¦–ëõÀôúǬŠ]·)%hðMò¯¸*iU2ÊEýóB_®ÊU/ü÷©ÿvB×('”k}³.ëé“áµ»*Þ8”ög`yôYùÛÄUÉ«r±*—¥<úìÿ:·¦eÊÔ°ª\ÍíºÎëë•CÃ*×5öXÓõ*g•PöÖ9¯V¢Çõš³,kÎ"«ÝÖçŸåGí®9¸OYoƒU.+ïeűÚmÕQÆÕæ'Yåe¥û£Gþ}]Wv»ší±VÖÒÕâ¥p¥¸rIJY­Äuš–µâš]Õr’r]Ë ‹­ ­1¬©–ÕruþS׫2cuNœ¼)ߎïs’Që:Ê #ºà^‘çÞÈS¬u&$ÿl/QNöK¯DMç]tÉ] \¹“»v7˜N‹â|ðÑgá¯PNçCÒxq‘4BT½@¹ Wán°94¦ÅÅ!ÆÆ/ãU<ÅlIrÉC¶\/Òe:¥ëtƒƒwÏ6»ìsÈ”5.óU¾Î7xa}a1 /ÒE¾¸¸¸D¹º8]\_Ü`+i¼‚»ô—ñ2]fT]]ž.¯/o®ÔHŸLº½r4†p•®.®.¯®®NW7ØvZÃð:§pЧtʧËÓÕéútƒM`®Ýµ¿Ž(é¹¾¼¾ºÆÉ¿¾¾¾áÖ¸ÁÔÜ¼Ö †‰r‰‚ŽoÐ`ý#kªdYûg׫rZ•«U¹\•‹MÉ­ ÇŒÇ/%®JØ¿*nUìª`7¢GSË–²©¥¬½þ9mÊU)˜2þ}¹*«’W%mJ\•°*¸t°0­¸M±«bVE¯ŠZJ›öGŸÕ­_`ýsµ*—¥´£ºYÏí*n×®­Úv¥¶«ƒAn½"«•ØÎÿvÖël3,óŠùç´Îäf·ó¶™­¾AëÃ0_Ûy)srQK–’j‰RB-¾'ÅÖ‚}'‡Q×"·B? +åÕÚÃÚÏ¥”‹Z²”T ;¼ +µÕ(ÅÖRhr»@WWkz-ëx)ë–d¼¬ WCÉìŸd¶/dßF™M'³§e¾®ev.e6Þ.Ê»óù–JÞê$oq!ãŽ2J'£ÂX°q®1¥W—— i¤-^9bg@ò0Rl©kLöˆáÈby ’ÄÒ€d*lµk,ÃéÈiʄՃÀZÜPw÷ 6Ä “u 2œƘ¨rô ÏDZãf¿ÁV9a*/ãˆx1у¬[w ^à›è„é½éϸb¸ \°¸tÀ±¥¯±ØWþGö WHð—‰ÅÍ©ÁkÜ`ã°$—¸p2.žè® ‡«ÈàBR8רW¸¤.pYaŒ¸¶î#‡KÌàÞW8ר8WrÍòâåeLÖŠWµ6Jò»bkK¶m-[Ûrõ“Ý»–0áb- ØŒ¶7Ð|ï©ÒéÒÃò}aU6ôâfu”}–±Çv—ÚÝYØW«kDn)þð¦RrW4á}Åc]n,¹³xcáJÃІÀ»±ß‹AîÅ<ÝŒVnÆv/^ð™íûǰ•ƒÏçZø ]9 ßy‹q)„ƒ3ä÷zÏ,yÁSû„ªžõ=Ê Øò +nÍdBd2ú:]ÖÆN;€,&$ÂC + UÃÊö—l¯™*+¾°Þ"²“j*ºô$BƒôQ¾¿7I}Wp)ûbZYȶŒuñÎ|ãˆr/›áëÒˆÕš\-Ûj!Yk¢%d«Ïþ1Û’²ûY_Žá(/ù²ó×­¬e¦¸)aUÖ˜krz´•”ŸÂóoDâ-O´’é¨b!ØÏk)òj#]^v2“ûßi(q,U–õ]ÒñƒÌëºD´.f§Ôô¸þQsY$³•”v]å·ë.¿×;[JTI¯Éz¥\œ)ùléšô‡î,£ô:Ñ[”2ê7î+v*²5Уy`Ù›ä‚wãC~Îè>‰W׫é[øßÆÅŸj)|[Ó…´“¿ÈÞ¥Tm +Nu‘Ó›ÔÞô1ËQÏvã}¯†RO­œê¦Ehz…¼sfC-ˉ]ôR‹ÆÊµ¸ÿœòžì‡´êIЦdu6Ûé<ÉÕÔt,W«óyÙõ0û§s<©]§#:œñ´¦á¼¦^òç•¿—3ø'vG9MÑ\ÝwbÏŸã~–}zܯ{·Ý~Îê:ÙÿNõ¦÷² +Æ© +Â^Xàµ4Ž%W~% +·b +?( 9’Æ„*Tš.^Ýt®DÄÁWb6"…,ˆX>ƒE1«Y–B–ˆXEȺ­S´(jAËVA‹¢ÖĬK´R´}&––ƒr#ò÷‰@ ¢V¶(n™"n‰Àuª×¥\Eä +¹HʰwªØu#b¯"z]„$â—ñˉø¥ý ޵ +'_å_aÃ"˦´ ¢ÙZ´èƒ®E ;‰œ|!BÙÄ2 +fM4£pf…͸Á!º®®ðuR@Á³ðwäð¢py_°üѺWÊ~êT}áã^x5'|M»WT[èuÑ4}nù{M“Ê ¿zëöéìDK7œ”]'¦QÄVÖšòstî:µÃO| ÕøžOuEKYkÈÖ?[¥àJÕ¹ÖÉÜ#ED]EÚ¥ØMÙêüüP¦€Øhã eL d®‚óº\Ž¥j4×å4•ùçf.m·@®or½SÌn±»¥içâÏ”p¶t}2zŒCIw–|OK1èµ÷Êå‹P|ôxõÀrzXAó§{Kùà‚ÏÕ½çÏt½¾÷ÏJA¤:ßkª¥”¦C-7JÓ¯ÆZšþ5×Rµ³è±hkÛO#ËjËÒèmÓ7®¿iŠ‹Þû»nŠñ¦•XKê%×rÑËåÍÂO×iïP«™Nm(Ô>mÚÚ)64é 5:G…Ö”çRôAçiÏ4gCc*]Úy³CYî£(èñN:ò +2P +±ruªñÞ”buúÏÒ‰R…™Üqªï.?à©~'µíFq ÆîªèRÅPL^Ì:œA0„A ÆdÁ7w£±‚ŒkªáØ‹é8ñ¤ùøRÌÇ×ré²–Õ‡pÇ#›«)™Æäk1'ƒ²%½˜•‹aùBXe—y˜Š™&fòŸbf~ô™˜š¹r17_‚<ºÑYK$ÇIÃs1=‡……Ï`ç/Ä}òq]MÑê'L¿æŸFiO»·˜¦iœ^ÌÓÅ@}-S‰™š<®c5ÍÕäÝ£­D,¦ë‹ËK!“'1a_˦m”¸ÑàF{ÕmÔ¶PÚJcAou]¨j£¦ ]¨çB5j¹¦‘…:®¨â†.4pË“­©Ý–Âab@Ëʶ¥eõÚáŒfú´æyöùšsTgàJÖ=ÞAEýßÿT7u8]¿Vèú`è—~HêèpvÑqZ ÓûñCÚ^~»ÓçÑ£¥W‡¤ÃùdžÒÛQȃ*ã´ã¯àÐLggtH:BHs:4/vŸ’±Þd§QãñIl¿`Œ¨ä7ö &:¯rÂ3u}¢9ZåÝ2´ô©å=UDÿ½9üïÑ;>QGAb ¸‚2òi˜e +ŒŽQF¥Wesy +[µGɇüĬ?ðq5{T {«ÿQ‡QgÂçä0uÖæŒapÁy©Ç ÒÒyƬC®Ç0³·e¬u¸¢ñNBVKã"ßÅ”E©›Í¼Ry=?â(~ o⑯ÇÇ&ó¹ýÇGïQŽ:)9qrŽll[±ŸËÓâKÛÜaϸÈþîÍÓ??FïØú/tlÖŽ±Ç´Õ*‚Ã!ÃáeZkÀ$ÝgA ·+-__ïøGê;v˜z/ÁQcׇ©çJ‘1Z©õd}¬GÔû^»çZºp´Öƒ\|´—Ø>åwÌWù;· ÿ—]Û+ÿ«2;kƒ¼íþÉÝ8U™–êeQ×=CcÀÁyèêé„-¥䥰£7¢'.lhôBXÏkáIèé«d‹ImôiÇÿ·øú6 I‹LÑQ’ÿS'…æìpÚøŒú;¼Š÷~F}ä¾÷¸_i Ѩø‰Q÷#:­ÚÅ›¨ø¢êS$*íëêUt廣ÂÝÞRÝWêžR£«AçÅ×|xsYœg®ÈoW^»9Ð4þ:7'šS_¸•ãm‘£(C-N·t¹MâpKI‰rm)]a*q°õÕ½ö»ÿG™åîŽÐ<‘6¾LUÝ­º!ÿJÌ~E«¢ÚU“—^Ì8ô&Kó$ë¾/Í€ãªS‰)€ÕóïT½ýš—ßbÎñÕ—¯øð)aЯ'7‘•«uw¶.öÖâïa»¼ëEæ b¶Hµd‘‹Ì‚Õjp#²ð" çi®c‘ˆ‹Lnò©HÉb5Уœ,×Y\®›ÓµHÊMVÆ)ÛJËÜ%Yä嫪"»îîØ¦Êʾ’¤$Òò…HÊWMRÆÚYÙV'm_%å\ Õi%%k±ä Ù‰„»óv—!GŸŠ|Ü%d½’)#ûEF^IÈ—"%‹ŒÜ‰ÕõÊåfíà[TÆ_÷o?­ß•{ÊŒ²5¼¯ç¿»é&{ÓÄÍf Yi+Ëßvó·[5´¿×Ž?Å(tÓÖèÐþlÁ-ä!÷°‡uðC ¨.K±„?\¯B–À‡%|Å÷À‡¬’º\R‘°ƒ«)ØÁˆË—í'/ôSWÎl1)žìiK×6¾¿—;¾¿±zý.¿ÍÓ·úø*ÑL¿ í—rk\ÈK²ßB½=Š!ØÈd)Ù©ksðÅÊúb±¯Lu3 Ÿdx…nÊÙhg§ž~6 +*¹BEAG}V)éš–®©éÚ3wë›»õÎíþ¹>+·©(IfÝs>ºwxéÊmÖœûÞ˽O÷Ó¼ç¡?z ßá¡¿è÷«Æ7ÌE·l½ÒÏ{¦¯|ÓkYy¦£Ç»½ÓÏïÏT-%ƒ_:vö♾öKW}ÏÞTeÙ©:-\ ¿ÓvoÙ¿Yh¥ìbì첓ƒPÒe?Ûê7Yˆ@ñøi{ûºNÙÕÊå¡ìsìì²ÛcÝñA˜R¹æÊ‘•£_M±Œ—p-§@ÎAwÙ³NŽñ(cÙ·šÉŽ1E¬ìF®l£(¦(ìÃ)–eˆ²Øh£ZzdËNÆݲŽË¸/ÂÅŠ{ô~”ËnœË=gèDïÝ“t¹²Ÿ-gi}žV§jÒLsÔ“à¤{]I.©ày?‚ä{ªV4艇 è!TdG“Ò1ƒ¼d\à“ŠjʮԩhÌgTr9¨æJò££è@†³ŽT0Qô¡JÅåh 'EÚ.à1¥ݬŽÔr‹ª)Á¤Õ›~ÔÇ”7‰-¬ +I)å\!Øãz«êꎋöHÂ)ß|d©xê6LyXé|8Š~jy¯ð¡Uo&ÙQi’õ¢ƒPÞ&\‚A@Œ¨ +-Ê3þ¿Ò*êÀó°Kê3òÑ{µQŠ|ÜǼ«Vä»—/o߈b¤üKTs‹m­h"ÿÚ±²… ‡ª€H=,¸8—^U‡ÔëÆSW'ô%˜»ñ¹…«mì°[®â-‡ºY‹@VÝ~‹ëÿ˜»„O¯qï– +*±G‹d˜»dxÑ$C)×M:„|H¶]U¿ãÒ•¯ED9IÑœ°‚®^¤EøiLH%ûͰUüƪGswÝkÝ‚S™2Ö’jɵTF »v–§;)4?µî»,œb)¶ßËò{ɽ\ôr¹ôØ\Yç­±ní=¼°«"Ói×õâ7eþICÉ;c¼˜ÊÕ™rº£t“#•g\ ¦¨{‹lhHæû(Sȹ®§¹—°ó´ÝA–è© ƒZÅM•s‰XUŠëÈ)‘oª È3¶x,~E³ÂSãÚY¡>ç墆¦S«DOÖt)¡î÷EBíIÙÅV¤_÷g’ýÈÿO²î(êKRõ-¸Íš¬£8è6m‰ïêÛ¢+Y¼ +nDOBT-×µ$Å› w_‚SUê’$á™›–$wM^ûRô$âEPõ$‹'AÑ”,ž‹/ÁZGB aíC°ò"€¬±õ#o‚ÅŸ`ñÙê>Z+ï,SÃç‹7ÖÖkíQVÜâžÖÚëªû[U)°ñµ…¬6~¸ñÉ£'çì1µò’Úðó³·Ô9÷œÉcjùmGæxˆÕy_ª=¯Ís›w–¦3ÑÛõ›¾8ÞçU,z‹CoRØ{®z¡ÈG2“ÛXó%z?öÐÂ&»,QåÛxò•üQ¥ŽEÒXd‹µŒ¾ÈçkɼËåky¼zÀlåñ}mÑ$‹rx•Ä«WäVßJã[y|+‘ÍRì29¤rpeM._dó&›%¨V2úÍJR¿î‡©ÁƒV´‡/?¹—ÔËr­-—´ïÅ-=ÚUY"-õ¦¬½á·5k1Xr!W›r9•‹¡ìý@®»-»»hÞΗÎ(¡G¦¸w.rµ ¸É÷PÞ ¡ànŒ ìŠ܆öÎ8Ûß-VÁ­ Zà°»ÃÆ +·ØáNýéF{Z,rÝ&׬r}c]§2¯f¯¹êxy²±‹µêP¯#ö¢€K9 +¹Z¦JÈM³R}êb§ÜZ*›­²`„€SCpŠÅr±Y6«eµ[оõB¶T­kÓ»úÊË[Ñ¿ºC-¬èaoª4Ðt.«NöB6ZZêÑЖp°S¤1$€R¢µ½‘ ìÂsªrÌ¥hq/ª&·ó¬ÃyB<ªPc±+EZj‘ÔEŠÚqž ã¼ðÈ ^¯‡q/¬ê¹`MYƒn1¼{þ™ã-ÏEøí\õô¨Ý çrŸ'ŸøØ¤­Å~ƒæÇá6¿ÕÜ5Y[[<™ö¨h‚LÕÃÂoô$nGuÒÕ"£'ÊGzÄ;ê*þùÕ«'/oŸ¾®4õ;Ÿ®}ö𵼨+šª‚ñ±[`7;\U¯‰ +ï ê:TC‡w0¶nÔ¶Š7qkm&†Pƒc_\§A&Ÿ ]Gn«Â%ôÑ_ÔÑ£æÍJTkÂÚò—bð;u5ÊCÃÃyÇpìãþVï9ê6ëf5âÍÌcÔ‚»WÕ>8GUëìaì;³[qd¯+±Eëú(@ßÐ(Ђô‘±‹~õ8ê…Ã’¢ÑŠà\òäÐĤt¶` ð‰(¡Mr*çŽÅé2l~âƒ>Ù§É?ÞH³‹Ïž|´ŒióáSv¥öi;>G÷~¤îFhLêr%Τ'Qp¯„v[AH$Íŵ(ʨ$ô¡8f*ÐÚ_ÁPÕ¿1¢&è#Öƒ^ÁÝÑdè!¢co04u´&ǽÆ&K1î¹B¬?ÿposÆÂЮ¼!‡õÅi}[®Î—v×n|®Þ§ôžf7õ‹;íN“¬ƒ47 æ´85¡¥„±¬ô§ë|›qåxÑsf¬si\å“íi eÔF·Ú=Ù#}uÆu[­{o“v¬‚Ýs¤û„%wXKÏÕp´VÐ- üPZ­`‡¾—6[lC4h¦l΢µAtÆ6æPh<‚§¸ ÖT,£BÊô­jøpA túäŒ÷Ö§2¢Ü£Ñ.HlªD…3 <;0«àIÁCÊ' +uÁŸ2ÁØÔ½:Á +{mƒÖÕK¹ú'[Ü0)ñ1ëpîø˜ú&ŸÀ¼~jëüá×ÏþåcÞÃÍú$&o-‰Œ§ìyâæ«*‘€Ó5çä8Çî\|YŸÔâÎo×îÕs+›(I¾ï|Âömš©«¹/oûÞ¼WM +wÒ×ïëj|¯ó+!8Z ÏG’§à 5\èž'¼ƒïöKHÒL¿ÓʵtKGÇšÆ9Õîž;ž‡ŽrfjÒê‚p–jêꋊlv]Xxƒ#âà¥àazdn˘ÐнCMß¹\Â+ôA1“*Qñs©¯¸¹¦ú¾¬8×ÕYdÁ¢³+RÁ…çO Ò©Æð—x}SGŠÛÈEE,Üb–sÐÁ²F¸¬5`–ß%# 4k ›µ +üªÐY;¡_=ÏR üj¹–îÛÏïâ’~æL>Ü%}gç d—á}¬G”ך3Žkhp¯±{«5¾A¸M轇5 Žrk„àõp¿Ÿþ>˜¤}FhÙŽŠØ2¬± ]™î¶W¹ +FüÅæøÔÝúw®»+ùâ®i6®š±"8öÛtÀ-VÎ÷eu‘°rŽsìÏ9“Íù JÜøµÐéYGa/¨h~}=E^¯PÿšÐÛ\ã›ÐºÅDkñÓýâí‚mZ®Ún¢«õ*¶ã¦U’xÁµªIæR'ŒS4lvX=i‹Ô¶~šîqÛ×Ã3/¶d¸ÇE¤¸ÆàJnÏ!D庣ºATë˜k{©1ŸTªgŒÊáùJRçeQ¤[ôr£êÜ‚TSaž±Û,™=$ø,m²:GAÌ3øßC>YÌuî›OkX•Éÿ‹uÃiÓ`%?hP‰`ub?ð`‡!’1J0ZøæIT¨3 +2"»Iò°Oúˆ‚9B X'¤ù”FUÕƒ?ªÕ« IÉç|2ƸaXuG)eð$Åeáüa©˜*â`äéWåìr£U“„ «ŒŠQCä¾åÂLIuîÿd_îû4ô¡‚£Û•ÝhÅÃUivޱÂWʯ+{+ÿM”ãŪ÷ø•\%ýœ­‰çÈ1ö±©›NUݤEÝÔ áÂFÙÔSË­Ëmu>úl›¢sHιÆEL›Pœ®¦žë)9÷~vÐÜî-ÌþŽ9ï+ŸB]UmkÞ—KVâ.JÔ{*¢A +`SR02.Š@öNÐ< +ƒGöÿ²/VØESXÄ +-ÚEoj”…‘8U×ÁA%Ö¬FS–Ü€à³8øφ#:t.¡ «­4kžƒËÜ)~·8Ñî•ð¾E’P~¯åÝ{ì{¤z¦šè¥IbÚYƒöÆšÇ<Ë¿Êç¾f0/ÙÊ]ÏSn»adÉ`nVêUþrµÊd¾Ž'zXÜÑ{ýüÔãC¿±diR8žWþޝÃQV +(dxJF$Ê”(P(ú·’ bÍûwÀs¼ÿŠûïüÿ©º´]ÔL&%ÏÉ’ÁÈJ0YË´Òr³,9]*XcÅœ¾¨ÙrÝúeƒ—ÒAñî~Uܪةœ +[ô8&ÈÚ–`Q¿ÿ»†ïJ QŒfãF›*zNÁÎé¸9wçÞªšÍÅÜÓ4Œ[SÏå +ᯙzÊßÚØ£“¶IÉÅpÝÍ>§ŠÛ|YÍ?ý¯‚R5µŸ¸µä/[7{¦˜ý"¹šöŠ~ß‚ßû»ßWÝ=k1­MdÍH6;m5—­Ôq_ט¯d2Íïuɾò¤×-Ö« Xö°BÛË:4qëe;„9î&¿–|qçÊžëÝ}媺m}åSèqÔÿøŒôGéñN‘=îלÿ¹š6È&/‹¸M,'h?ËÑ6Ç‘éBÜúTµ3E/ƒ–}/U3uè¹µ–Ü{5£Ö9O5§PÉ$Ä{ÀŠ覆Sô`ŠJÁL‚4ݤ~çüøŒôõ¸/X¸3¢HGèŸD—IȲ +¬—~›º(zÞn¹v³•»«Ü<…-* ëW¡åjÈby+8·NxB# }| †udÛ\yÄÂ%°k·–ã€B}qᯅW¼¨œbÑ.ñB` ‡(¼aåÉ ’ÿ#¿G.ïBòkÝâúãsHÿí{ÜŠv*¢º37Ø=‰‰v%Dn…ÊÅßÎWžü{®âlê"ëVmŸÄEè]‰88?ÓÏÔãÝŹl¼µˆ´n6Ó½LûRÖbPºÀ”ºf Ëä*`]é-¥fC¡Õ«$?n“ä'‰WRü\ÕªëޝÛÌØw²g”Ýc·$ÚÉÝHÙPcÕ[]Kz]jª˜D’ëöŒÍ?:#ýA=ž9Δ*¨ʶÌBÎVZ H{©vÐcO­SËeEŽZèT)ÁRGjO·Å“ Iå3Æû5rf3Üçî’°¤¨µ=9m䮢-¿®Úò¢+Obn¾ ¹ƒ³Ç©ïP?>#ýQz¼S$¡Éã]Ðb–“mYD©–^c¸Ö¢Ø" 5¤—EŒ Õ^—46è1÷T6ëd6‹ ckÅ0â:k»í¢Y-R³R€µ®N´Åš ñ,%?¼ëÙá×™áO;þ›Ñ%P2ë@Ùh£2!æ듵qq®œl¿qù•Ö¨j…ŠéHóÝ!º£öqmnýøÏ*¦Að^8ŠŒNPÞIˆ†ÒW•‡ÞdbÁA¦q~u¤gh2®<Õ®’&ò¡l˜w ·Ú\<â’X½ÞúØš¾ñ{ŸÑÆãöÍ>êc>Ô`éw –~ôußõ@Û\ÝïÑîܤ½çV_gV_çU'Ðá>}‹ãhšúçò¯5G:j~EŒÝÀ.µ?·l“oœê6‡uswwð*_Ò5–sÉ­Rô¬ù>Mkuq_gwºYe¿³;åUÞÚm~'×ó;a$gs<]m‚2›Ž¯ðãc€46}V*bïè”Å£[™„á=.wCç™âÏ­¦ƒ¼N5¡ÍÚÃ{ÄJÿ8O¨IC äin[l&p#ì?YC"&óË<³%›ç²•÷ù3.ïéLöÃ`üOq0dÆŠƒù)æ¿~LÈ»4Hl¨ÙI_Ó=Ý¿½ßö¾~ÐxPf’Õ‘Z22.9/k6…–—1õ¼ŒKfFW³Gö¼÷;÷çG¹¶gã£=¢¦°šò[m7û¹º{ã>s'îvؽgSH­"§ôKëX³ÑÆÛ¬ÚÓùØ$LÚg¾#Šùî´WwŽù|ìòùâü±9&wÞ;½yî>|»Ï”hèç»Iƒ¹„‘¢"v¶O´¯XžñÌ…Øä³¤²—Ã2^#óñ9›·~<Ÿ?Ò>J¼õ¿þùùÛÛÿy¸|ñäé_x@7¿ÿP©ÝZöøNîöè3á2kr7ãoÉ=ÈQºˆÿ´ÊP½MìÑ“z<ú¬ƒï•iS—>,¹Ð6µ¨I…ýØ­Óc·„ëÏè­Z:jP­U•ƒ²ñc'ΛLï:OøÆ=sªî¶ª&„iš%)LKã°È#=5 ä,á[M¹î²È½éa†ä0Uñ>¤oxŸˆ¹uôë’lá}cæ¶C«¤U{ÀS;Fï¸'ž–P}_‰ «ûõ¸#n6yïÇqZíˆ"Ÿº%¹Ç{âþ;ûB¼>$Nqˆ§ìù¡ß+RñbNѳ$àÙKb3V}D“#~À÷ ¿k½¥WKr†ÕîF§âíJZ»)¶ jlè£Ï>0:4–øÐ%:»ì½ãC«¹î²hˆD;dO¸ÕE/´†'»Þ(ûH™)ßOó»ëY%é ¬ûí>¶ÍöAמðZÌwQ €m‡¯==Àv _[£JÁó|P\iÁu¨žåWŠ]öÞ‘¥âUNO¢P½ÉéGγu3ÀÈÅ}°¹ŸöÄO{â§=ñÓž¸sOl'¿w¤ÃAòc=⣪äðÉãzýê‹7Ï_½}þêëÏ?_«Ö5>û§o¤Î–º/ž¼}{ûæÕ/?»xñ÷o¿}B½@ý×!çc&Ó]Ò´=çŽ*›È$ ¾ó`t820;–Æåòå¯?ü­þzË¿¿+¿´™ùÃßËïÿˆÿ>ý¦èðÛÿý»:<{$ßþ’ ÚÆ^²öÞñ~³Û¬½ÏoÖØýp¿ÃWüãoÞžž?}ûüõ«'oþ~øeQÎüâòõë˜Ë_×y}|ýìùÛ×o_>yúÌþãß?qûøËÛ§o~øŸüÆÿÉ?væ©üò?¾+½žÊ‡¿+;Ô@¼P`ÉÔykŠÒ8áhCÀ5Ai‰sw!çˆ=œúÞ`“ÃÚìJÔ”¡Ú­tÊ&úÞ”l×Íj}T6`R!_ñ<øt´ê²`öL èÆÙŒCrð™VÌfÖG>ÆGÌ.‘4¾º€µ!L=xÔX¥ÃSé&ù#È™áÊiÍnÌ1xv“ìÑœJ¦áV6\>Bn +¨Gm-û­ñæàì4É´þòQEKNŽÛÀ¢u”aD–IGÌKÂßêè3Ýð¹ û>1cºvÝÞÁE`4OÍÊ_ˆJ¬)/Á +º™ "ÓQû`1 !j7¨Õ ,HW«;&g…xsî¨ÈÈšŽ3èÁ Âb+z|Ár0žƦ6YAá©ÃÌä„9 G&¯<L¾æ^†o¡?}´–-ã7¬?ºÞ›>B~À °ˆJÅ>&ø#í¯]=Ì(Vqtáè4dWk¨²°í±OChý…cÆ•ZOØÖǤS–—r‘7#îÜB<79‡z‹= 3ˆÅ ä€îýa²¸bŸë#^‰+oÓQÑÕæ8.‡¥Ä«¡#ô;×Ȩ̀Ç×~°7ŒS¼²âAÇ:9$=s˜E5عÎËçŽÇ +ó‚E“=cSn;Ì’lp"5^çÀÞ]ðÒ{`šx ÒSÑk]Ù_ÛÑ;,‰?†dÛþ²úˆ_T®’ßÁ‡#•Íøš?Bàäלá\‡çñòÎ`G‚ͰIâÃâ-ýá´i1*%ÉâþEk aïŠn½¼ ( ÅÔ`Û^æ,ZÄé\NâéÁâµ²«05™¦Q“ æÜ‘຤åpãH&¬ '8ƒºÃðBÇÁ” + ,{ÀÄÅ‹É3ž“±Ãâº÷8NØXåÔk=êÔ£)°ô‡Š9¨Åd¡â“ÄÀӈ燎“”0Ù ˜Eªy–†I*÷Tvo:‚ÒDÕ„„„ܼܫĩbœ·BcpË{)N‹‘éµLe÷«Ÿ×s‚wÊÜ^Ø.ਖ/"¹UßòkG'ü ‡œÉaê ç)X:äÏoËA]zùÚ0ý9ûs³L"ÈâÑ0( T0s~£=rW”é›k]9¢YÔ $QC¶A.¬è±†ë·~\#ˆ-a@ô*Ë‚„Ec­Ku ÏEét¯|-Ñ¢/Ø*rýFéo¬ÅýÀjOOš$7—!ÿŠûr"î} P‡ÚBaìØ/˜º#ùL4H$.ß©Ey”ã%ÆŽpKv:Âá/©¹Ì¡J|w‚(®÷©E¦Ãs™±W‹“i/Æ<ÞÖn"Õ¸2±\ð$ôþ vn—ûµ x‡áƒéµ NipíÓd–x9¹…FC6ÆË¶ÅyÄußÚrÉm ø<Ø´d—ΧŠ:¦e§lj5vpâ˜Æç¨BZû ÔŠÔÎoÐ[ïÜû?3U#]9s‚Á>áÃaæÅu%¤„Sí©ôà'¸WÉåD^èÑÕœ/k¿ô48Rᓹ«GØ€ÙIJƒ3פ.;GÉÇ׋˜ÙH*p[¸±”;ŠC;Dváüx$É+ðQØH¨ãdÆAOê¨À@ÌÏŽ¼„–½)|,Îþ‚ñ +è9çCvG^y¨H K£rdƒü!ƒáÅZú#×b©K€Éùâv°dÉæiôD6ÃÊn¬'×Â… +ðM˜XpFMãÍ‘ª}zÍbô2x"0•”^"øCgÀÍàý9UÏ +|³ˆ +ÆGîe]ëµ`П!Ùÿ‚ÉÉ9Ëø¸+9>pü™lh¢RA”'Ú‘ÄÕŠ²ÔŸ¨°´}ªL…ƒ,ùÓ6n¨ðfË µgXºƒ¦ôKžD5Øì(/”þ @a-P¡’Aî̈¦–&âTú„Ã’ å¶!÷Öã¹¥´ny(ƒ¿d?Zj¤°­5;- „#‚eõ}èc3 :%—2aÃÈíáå¸m¼Üù¢x¡L5 —¢›dÀŒèää,OÀÆÖÆ[Ô‰0À[ÒÄÕ×T ·© qÕÿX±¶e͵Õ6?¨Íæñ­mmýmzëñµ{ÿgfë?µ‰íGPЃš2hšÚ !ÑŠÖSÊæV‘4ÿ ¡èi »1ùet*t±îƒù…+׃÷Mú¥þÉi:.àÖ¢J·â´Á ñ4 L$ÔäˆmµZ“»@CÜ'Ý#gp°¡YÊÓùeô†IªP=4ÆLàÁŒ Ec,ÕI…ºiÂ2‚{[¾F¯“èÄ/÷¥9¤T]|ÆŠœ9¢®újINTK m +`£Azpsâ Q Ë"c¢¸PA·'Ô~lQg4SDÏFzÞéhZjRC©ñTÕì´7Ãl0ˆª˜ÎÁçÐj#lï8²iq¹˜šá†ûKu +Ý…ªW½~¬¡<Ë5îÙ“È*4èèiY³F$ô¹EÝt4¢ãî@Eÿ¤¹#CŸŸ!”ÏÇ7è~R‰k#ÀœQ©äó㨄pKÝ Ø-½3î±E}À8SGó\ƒ¹w5>Yéfòí¡Ž\5·‰=ã¨H­mdÙeÚÑ}÷Xä÷-`Œ".ïèºHy²'Uf`Ò|Û?£#ØgÂk±y`=;3‚dƒ'V”#1'*ÍT‘¬[ 7ª'ŽýQƒ{£¥txõ^ðú»Ÿ#™2ì^%LY¦‰ptx¤Þ)Ò.é™ÜG5ç êùH 8ØnJæ6gåfHÞäe2 VP²™|!É0RçE¨ K‰yß)’ü&8Wò›Ñ0ÜzrÄtnÄt‘ÐÎn’´^`¢y€·èΠ£÷#˜4³£™aÞì8‰ÅÆ[*´ÀÂÙ˜fJ2T¸‘H‹Þx}L³;yUŠê"VŽð¿{î•´{$šöDK{ÆÏRwlÜ\£Ã%}øH™=/µˆJíeªç¥è÷©ù¢~?Š@9x`R”‘ ÝÍôŽ+¦ãjãd@ƘÝêšÛød‚ï•yЧ>ÏÎ™š »¢òŒ[š¹·F7M±æð&c½ïÖãâ¯Ée£ÑËÚÀ tܤI ÍÛÐbAÌìÂÉí£ÍE‹—ãÑ—Str´DS'ǼY“S§Q—z$Ú ^:ÚÙ» äGJ“ç·êæiÄa~ØnÇÝSàÙ°ôéý>é ¡;W4ú}òñ)š*($æÙ”¢]£ÿ&µ1“+(XPHÔ´x[j©»oÜàj õ¶DÞ¡÷$çÉ9Ô¢êÏ9á4f/QZP„XasxgÜEiƒäØhƒ$·6ûR‰ &[HQý”gÒ钹ד”ß(´—JÒzߥ”·’sX\vtJ™}Ki`*3ާã$Ï^žS‹}ÓŽÄ­tgõóáÖ¾¨¼ „ú„3(.ìÃã¨å/@ Eà<î©Å¾›êNGãNc¹g)îð`ÅyÂûiº Òës®¬´ÊÉh$1#ŽÞäü‰óDÏ>£­bß§uùÚàœºóÄ©Å0ô}/Wž/vo°îÚÍÞ®†z>j`§‘׊}o×åkÓ\¼oÎ’ÍßÍÃÃêêC¨ÃäÅO>ƒèv¦}óä‰U«@Élâ{Xt< ØžÊWTš×Á`x1ÀSSm¨å7¸MqÊ‘ ©‡$¯RhÒ›HWZ<É+’·xÂȘÁ<8ÑŸƒµ£&3$M¶K4ŸA† šO-1ß¡xoöçU•j«7®MJ‘2MÑé•'`#ÆPx4Ã+Ñ 3É—¨|ЊIìð' –îtäS}n[‹ò=Ë·Â÷ø yX^>Êm6Ý6è|ï +ÍJSKå,UÁàV,ûðª\Aýb7çÌÍtav‰ná8÷¶ø”Ò§w"¦\3R.‹—¡À2rÓÏ-ª3QÍNK +•ß;ÍÀÉ/'³GVظ1Ì-†—©›aBEó¶Ë £> Æáö2T˜Rmv^jhð´™“éÛãlN¸wY(9ÿø^òô}”CÉ™Ä 9ã.Oÿ9P.B˜”µüæé¦øNNÌŽ=N?©Î7¡sò¤Ÿ›,5µ¾föœçõXÇœ£ßk`k`ºÉÇžñ±Û[šat|«ÙÇ“\[Ð \Å¢ýÔbßÇ~îhô‘7Be-Cgƒ/|ÊWº¼•¢匳==~…råÔMKiè7-Ü»¥>u§Å¸'îwÃ7TáÓµÀîûãCY‡²…M4*ÏŽù“lѼ᧊}gýùû£ÿý<†¹Åð2ûŽü"›`!(›(#/3† +5òœ»*ŠO~}™±bßÇçûÓ„Nc¸oe>Y÷ò¸MiýWâ”¶o]˜š5ëÂä[Ь <´bÔ Ä™‚̼±.ðÆtÓJk3uëu⚸\À)wëísÅ!áÔ@tܘFã³2L¶ûf. ƒZÒ/‘Nèike ‰€üqû6rjšM¡ý¾1%´' }„BÚ1 ˆ÷³ðñ +ÅÛ3†š´££®Æó^w;M«8î_çãq(v@º§&ŸÏæf£Ö^L«rˆÁã1Óù¤ïç7fàõÍØz©| gØëH7.§E¬¦Ó`¦» +øfƒ&Ìh ˜ßj׬0OÏÜÑ´Ó`î[«óa?‚Ÿ”óõÊ·àcèBM×"ÑÂR-‡=7ãeÌ™{%”ÌUomª»£LCQ~&P}Sh7Ѿ(¤àÒÜ¢ûTáU<íJôÛsGÐ4[8:zÌ#ê‡êç¦Q¦A¬ 1èÊMµxêìéK²Nâ36¾ÏØ¢ûtmæeîgšÚi,÷­Ñ'yax‹†1è+•½²"ŠRàn¦*ãâvîLælS),R¥S6RçjÅÑ +çHS›ÅóI[èù&:lò}¸]$ÌSÁ¥%ØD˜êîüÈYúÊ:‹§qvéCf´ìÐ%-XMŽ!èTÎ|âé"ñ”¸(&ŠÉŒ£Kå®0t`Æþó¾9àSSmÄÝ3ÓŒ±©Ü`’Ÿ$Y:H@V‘F½œÜL´»¨“è“(²ƒ|€•§g/ÍŽD,lì8Œ„8ÊX@'QŽyo¨ñÆú8*²xЖBGÎ(âÄGmQ¢Š+Õ!¾l;K@l;ZÓš‡Å{Íf`Ù©Á„ì§éŠEŽ¡ê*qˆk¯¡»*e¥eeì\ñÆ‘ tk1V¡(°iI®‡*°) {x©@@‰t±ÒщĖ@™:³(€¶"3P3Í~À +¥gsœ¹ÿ=®ù>kšœ^Žl }æ°Üer=m±pÓ‰Avã’ø q¿‹+z¤K‡¥`ðI0)bÑŽªŽ|Ä}aºYÉ3n¾XxŠìtÁ¡…Àƒ#£¿dï#Cð28,pèô‹MCß^› b¯OFæ`éeâ( ]׈«…µmv:’÷ óÈ2'"Í0}D1Yzq÷b²mÕàÐA›qF¸Á÷ÙYñoh˜cÐ$#¤9Qè"¤b§‘gæå™fÕTHÛ—5Å$xTìQ‰{‚@HIã Õ¶Â\Q·­ñž8‰û_7´4î=¹U #¯ý¶Z:njÑõeš³çš"oM´1¿ïPÑÉÑð¾Ó÷§9›†pßäªêãÊD³/Y3'¢€ìUˆž^­/÷ZeUá–œ.ÑI–*œö$—F.؈ +€Á‘qöÊ4Oû„¾S® ×9A¢2AÇc©WPI`‹ñ!PÅ~‰©„³ˆB‚÷´ê#*ADHE+Ã)eJ³Ê–á:†5—¤v·è?±„xhŠ.ˆ”Óì4è]…aßášÞé'æÂ0ÐO×F[YP¶È„ß-‘¢5¸­ +Ç<´¨Ê•¦îQ¼\ÂNG®*ÙqL>u)ä†><¤ÉS ÐàªÇ­aãÂ'm›E[Bž‚V=z"ZàÑâ‹™»Ä!m“§¹8–«¬|µ`Ñ6wÉ +éIVy"SUêÑåNx³Ðæä‘w">(CÅ5.Šõ¤ê +9î?·è—d ®4 +"óN³âÃx2Ü¢ÜKt‚±¢›G¢»(c18^Ôòåª-÷ôˆè>ª¸×K0 áiV¦jÉ ‡Éü纱Áhqg@ލ· O—°VF;ˆr“AîÕÚ+”Ö$P¬ø61¬°ØÑi¿r{@(UÏ~7¡Ø?Ëkóâ7…˜%[ü^Š›¸;Êüý õºóiÅ/Ö‡¢[åÝC“>QÅzQV.Ñhd(åÉIstBF«M† ír¤kSbÛÏ"¤2âÂÒEÝÚDg1˱R×)ã’0RJ<#t{G¬V®ŒhÙðØXM1Ç _@lÄNòÅQ¼Þ2ñ@¾<Ó,W§ Ùí\ÌÁéXªš‚¤„”둹ÅñJ p':¬ jÀ™f°,ý°-…ÊMýàtPy^Ÿ;c™Z /Õ54‹EF#¸—0Õq0 ¾ Q {oêñ¥ÆõIãäÌýL<徕Z­*ö4èÝé(M;›Â8ig£×i›QžŠbmÃ^OŸ˜‰qh‚/†ÅDaœB‘&{“D³MýÚS.J¸8ƒµö¾ï˜éÞ_äö†0µߥ>jjF©žŒ¨eºDw˜Ã;ñ@«ïP¯×èðæ­ñ<µãsîüe¡èE‡€LVårŒuÁ”ÛésöòL3G¥šÈ_Ή°Ž3ïhY¡S©KðEój(ŸÒýÈ$ñ¿åMºÓ¢^ê4¸ÒE4»ÓLÂÛ a˜Á¹y0;-†·ªššªQø¨ÄиÃÎ`è¼i«ó&]òæ·Zà˜8¶™P̤3ÈctþaÐgƒëâ‘7ôׯ!J +?¢|M-ªUu@ Ûéh‹/¶# ?®ªç•˜âòutmÁ¥Q,6cG–~yig ­b|‡~ÍK-]9’UâÊá…¸OäiwÌ"yÓÎÐÇU=2ÎÁÔÑ4Ó`î]OØ,:áI‘Nûâ–FÈ,½…¦Å…Wb)¤¢Žd×݉©Þ´pÊVõÒÆ£A?‰EÕ±­“@‚r×)#I ¶èuÇ™@„L{·æÆnjQÅï‚g7D¨£Ö¯(÷ Vv§EÖMé…Ü”ÕC3á—¨Rs‘ÍôŒy'ŠQ–Fî€ß‘=*ªP2=Ý:¢à1lLFd³¿ä㎻Uô?ØPZ¢ä¦¶ÉÀ¸Å²;·‚ŒM 8Z‹¢Àí xŒ%—8Ù(Áˆ7µ¨ÂûoîgÄ®,‘‡VaÏZ½Ó¢1©`1¶+â§fšªÍûΈ—5fôJ³é€}Çð “F­qO±ïèê*Ît[ùˆ}GUFeqPyƾ£BV¶‚õ«¼#ôãÔ$ðÓÒM’Î#ô(v±Æ¢Øõ‘ x­¨z™ô‘xÓËQ]ƒà1$‘PY ûŽ{ÛœÌ5óé¼/¶ƒ0ë4â7À€†GûYH;hxäÎåå%5¸—ŒÍ¾l#Oey,!–T…3y\ lK îüN(Ç U®}Þî”nùÖg·óÀ©Å0òú„©™.F#Zî›*f;0l öÁÎ+Œ ê“Æ˜û™fqË}˱RiˆkD€À¡ÂñL îñF7¶šðìH<Åï{_Pí´ð Ô2`ª™všÑO1orÜâ ŒgD ÈTIÑZÝV7¯44¨OÀèvúðìvÆ2µØ©©Ù4;Ó`Æ ¾{™V :âºñÄGy:ÑŒB>'æú,AþÆþÜAÊÓ‰wo“ ¥À ‘nlЙ„  ÝÔÍ…7dn1¼ÒÓF^†fºX—=s’ª8ƒë‰ñŠ á¬÷^iÛ ^vÓÌŒÝL“;ŽäÞUz îì€áÛªhx|>ÅÌ7UL}û@TßT1aöM@“ƒý>PÅ„â7ULp~bÅ„ë·X1üMÐÒß]Ñ ÿö+&ì¿ ±bB+Æ€€}ÀІö7áTLø€NEÿê.<Åw0Må8ÁSì îÁSLp‚<ÅŒ+8ÂSLƒxŠ `p©h@ƒôDƒ%œ°'>á9Ñ +÷‘&dá0Ѱ '\‰b¸'1¡ޏªá„+1Ánp%&xà WbÂ9œc·FÄÃ}\‰}8ÁILˆœÄ†¸&1¢"N`#<â„%qÿ=°ó2 îƒIì4 & ¢áîƒHLp‡ó÷G¤Äy s‹=8†f¬Ã4˜ ¢½Ì>²Ä4;ߟ&tý+³å07ЃûØ;ͤ‡vذ!&hÄ ¤Ä„¨¸|mÀ`ÜyÐÔb™a§ÙáaBņ˜G¾†”èïÙ[O33>ç¾>gõ˜c*è¿ ³P¸0±9>ÌÍh2$“pÚI;M>Ê¡Ž„K% ·½-ú‚DGl½Ó¢íÈö‰ZÄ‚\ËÜ.qKÅÚÛÃÔbx™Å>¸m:-<ÁR±åƒ©rØ&«´÷VC‹ú¨6+ã÷ç ÇpïʬÈåo»Ó‹Y@ð¶xþ]19Q^£ª +wO3ÌÍ4!ìÔbc—OÓk$"GÙêàÚ¸Õ™D4\É µ±Œ¾œt#³(Çi‚VFïõCi@úñ»«‡×yÚG¶­lÉá +ÚÕag`ei†q”’”ßyŸ¡A}Ð4/S?ÓÌNc¹o‰Ö;êG°‡0ìA ž†wFî(P +š!3MPœšÑŸš^œla= „ç +n! ñ/JqÚ©‚UQ Pðj^ù¹EU¼«’0UÌc?‚é.8'ä¨âÎPæÃ;UNql–‹¨Îlt˜9LcAƒ˜åÎÆý!aMã;-ê; s3÷3Nï<”ûÖiu÷»TeO"®×`¦ä O v2.`C3î@KÖ[î/JQTøIÔ´XLKaÉ‚{Zò(0"†qgfª¯ÓÌ8l†€(fmwz¨:q"¤Ø½3Ž©Áð>óŸš%ïÀƒaKŒøv(tÒHó{”k¯ã$´ïìLòð´û–áG½LÆÜëbÅ}êob – ~ú5LjfÄ- gëh+‰Á"ñ}Rô¡™â-´€uY*ÚŠ'a|h°ùÀ MMáe¯Å\lµ¾y$S‹á•ºÙ}jM½¶C SÓ~о¶3ÅåA÷Íýz«üðêÄ‘ñ(ú}’\<Ò +Xø=éÑ2 `m’Ø4##ªé¥à‹ZÁQ+d•kRƒ(axÙHt,mdTêymiížTå}•½Æo§Š‰Å Y/BÖ8€¹Åð&=°hhi]dèqÆ¿ËÝP†@÷)ê/pË‹/öüC‹§ÍÆ3ÌÄÔÑ4›Óî[–O‹âІk%¯é·RÿaiÔ¬`$‹÷²Ç©NêASQYÆŠV +Ûçu2#H/•­8t8ê_",™ eé °zÊXQÇÔ ^ÛZÜ#’7kzN,ùyæÑÅub¡éjmùÚÿ8CëØS 4™Ú7K}œgÒÏ—ûµX%ñpº(=}.3‰ÁxC³ŽW¶WT&WKuØœýkŒ)$c +™®=gü¼Ž®ö6Tò€ðJžBªH}Ú4¸ZÑCY¶ïÔ¿6ÎB{йÉû´¨¬È"* +EÑ &„àŠÞF+ñnÛŒš J7‰ ¶  +›,ï­«J[E!$á¨Ö ˆ¡ûâ )ÆýNf.ï=Ð2»×—*ï¡U ïЯàR ‚ž£ç©/aÃS1½0šE<æ¡-º07ÌÁÔÑ4Ó`î[Y˜7ñÕ9!E%¢ª{nÎns3š`%Š'2Ë…¨¿q3%B·© îZ©(ËŒY1!–áþWTE }Öé7OÓ]v«¯©êîjÆøécƒqàõS3"}ˆþ +k‹Ÿ÷vbæm ~>Ró>½ÂØ¢>jœ‚¹£i²§ÁÜ·Ÿ”v‰ìE¨‰iµDP‚· †àËm­©f¨„½î j‹\3lUI9Zpê gª“ØÎrv*ª¦Üc|qÀ¢ÁÍß'§¸–9÷Æ0µÞ¡+å‡fô†ß\Ң΃ ÇDÔ^Ûö—*ê¦É˜¾ßæqzô™éÿ´hŒØ^iïÇ*ãŠ{›éžÁ Ü¶]¦f´‡ûbwU/†» !ÌGšÏ»ýÉ€‰,ŽÈ’ƒajPgœ–4Ië©ÖÙéF5cÂÏ#™Z ¯ÔŸ443å2Ägûa ZÐÄH„b\þüNc‹¾Q·s3w4Íï4˜ûêÇëm‹ï»(¦œÄPðr[›˜fކ:„Ç£ÓýKÄ3‚‹ ðÏ®Â?‡âöÀ°tº=à=ãÜ¢Jx®$@¦th$?âÔ„u&–ö• {ƒ™Z /ÓͺÛfØ'˜ ªŽ‚ñ©¸wnƒ +4)ì¼ÕØâi›·íôÌÕ™ÇpfA–mò}B£¿#âù'J@pQî«YAˆÉˆ¨†iU„›€ÔT »h?-N5ͨitçP>Í`i‘›Ìø3 i y˜„8c£¡‚ø´3$Z`–@n´]$4‚– uÐè‰CJ0ážÑ 3ÆspgôåRÆÎ(gNð[ì næ (.B;˜fóäÌPf’9‚ÿÁ,0¶M›-rY$ Í3`YÌ ôÖÎ8e¢Šù <ÝŠ$~žCÒiF'Ó8 Àuªê6¼'“€ß °ùŒ¨=Oư_C*!)KúמŒ"½3~†%;»Ï'בD7,DØ![j0lí(g#fÓGÙ³c‘~ƒôk#^U’þŽZ*öpº–ÚçkyжŒobly­ñk}"†¿ú™þÁ”gJ.Mµ?$65kHb™Ic³ïbôA”ß׸aŒZaÊ–†ÆF—g @a’6—¦±]|0zhê +v»ÁmALp^$5\Ý]40Pï,ˆÆc-蜥flDì"xó9¸/»W¥fL/uÄKͨ]Â$Ý +Öe¨I<ÑEƒÅ ËeꛌZÌŽÂ.&<Þ«t Ÿ’ €[®>ef‹ðo#°–¯ë?ái18Œë¿£ÅãM =‹’ý4‚fñ8ªêö=ƒf¡¿Bò+XÆŠóà€‘tí ×bäÜ"bÑ»H¾5a¥X+vñ¯´$Í"¼ƒ³¼5&ü«ùÈŽX÷ê‰ðóÖ@Ö]à«¥v@›’ÌÓyF§ŠbÿÝÁ¿*oè³¾÷5âü©0?g©ØÃ‚Zj,©åA Õ2¾=«þVCå2 ÃsÎÎÞ2Ï´ˆ ¦=„ª¥vƒªžPŒQã9ªx$òøÔ‘»msªUìCMµÚÕ©=h„ªÃÛÇ“ªï4V.“0<æìÜ-Ók%õË9¨¨^;Â3‘j抑@·³¿í#CÑx,¸Šã·È"ÒélzN«ØSZj0¦öœŠÞÔµ†zê¯Ðõ™;;7EË,2]¸V;ˆG/·µbR0mF°%ÆkJ.á]°&/ȃnçkôTfçA½b»h©°– °IËøö`—–׿Ö'b|йù[¦˜†BQ©UŽØE 7Ì{7ÃÑúÉtäû°I¸þœ‰;µôn,ÍéA­bch©ÝBõçTL£>ª5R‡Ö¨MÄÐ×™ù9çŠË¨6€ U¦Wï.¸ÄÜlv`. ]µâ‚6 B€ÓÅ"»3ˆ ¦Ð’Äb¨Å≠3=¯Wìb/ôÚ»¡?h„}èãÛ…ßnl4ÏÏøàû'ú㨕>(ãÞÙxuøÅ—·O6Ýòɯß<>=ùø‹Û7Oo_½}üßþ½öî¿øõ«·;Íùד?¾¸-/ð›×OW_ªÐ¼¾Bóž}äïŸãûÿúüÙÛ?×/úsOûâÍí_Ÿßþ {ñíù Z½ FõüöÛõ˜Î6ÿÍíŸÞ>ÆJܼyýêí½­ÿú›©±¥§'ý½r`Vï~ßÿ}ûüë?¿}è ùúoßž]èküvñkûøúÕ³úõúÁåí×Ï_Õ~yøÙ?>ÿëíÏ}VþÅ–°ËL@¦"BÝURÊ%3––L±™¸ü¼Cátª_þúÃßößT¡nciQ‡Ä¿ÿŸþ =üöðoÿ®ÏI/_a©Œh|àëy×°¿Ùk5½ÝoÖOº»vÿ ¯Þát×U¼|òô/Ï_}]þËÛ§Ó™}@jÌÃïÊo„å÷SC^IØ·QåXR[g‡N†ºOjILwé .Ø‹Ç~BL_ÒXÞëø82,Õ·ˆ[ÖJ.6Ô‚á?Dšé„ +6±Â3°‚± ^•4Ž2‹4*–Š%m A˜èl<½QXËdß%nÃ`Ü dT*¿œ$œ„dÎt&û g +’yûªðêºä~ðL@3ˆK›Y0ÄuÖŠ%XEˆ!*Å Å[ „Œ†þ±¹ÏTcËbWÍF¤ýTKÞ:ïÄ{KåTsc•y`&m©0Zô)¨ÀE„ßmùJ7ª¤¿ct$“Û˵§kª¼[•D‰î%³6ùUb@n!S*¬YfM@Ô˜–‹lƒ¥+ˆÙAœ T(¾%/ÒÂù%Ð-á`$ƒƒË” „ÄFeeP+sÉì©’õ+Äãò÷À™Â +нàüáþ ª'úœ[9lO¶ôo6n2prÆsmz 7+µ|láü„V)%ÖB> œh¯C3æ“c­¬Q¤iÄW~qs!« Q·ü>‘ùS†ËÇŽa2-,µ[VBSÝIDpÍ a™¶uÌ'iÓDA$B4k±ÛÛÁí¸ýp)’3ìÖ‰ŠÏçœGùöFÀwâ ¼QÍîîéX_5ç4kRsN8—ö€PRløDÛ¨NQµ"Ï„3ÕÜÎx[†ë™*žÑXºà,AbϺ¤ž`˜ Nàƒ½ßº[šLÝ¢@mI 1ŃR diqØ´Hpd¨Ä +'™¤e´¡Z̤…^’ÃJ³$Í *Í2!㱕 ª=$þ•‘MN”<äçJ(—¸>Pqäî™ +ÀÒ‚I^ØÂ†Žæ ¡…ctµ öL”­¦ž‘X•¯&ŠòµÚ#<óÜñ– +±Ò±Î¥c·Äßa„Ê”°='b(¬b¬%&G¶udÖ^7Ôë0¢Z…‚‹u¦>¥Ä6Ë„ò=¸É”Xá¸ñ¿¾X¢Dn†|Rõȃ˜(à8,4%=HÉQGiá@„»§6a1¬X Nf–íSÎŽa@\‡A¢?§“fAðø¹Ë@ÙÌ:Á?Ô¸ªŠ„ut¤J.ñE%‰-h/ãöD£¥lk %$@iV°=x©ðs =•áq2H¡‰N&- íS¦flSLi•eAww¦µˆ**z;ÓàÅó&#%R‘ÀœÇ)qWtýd’7B>Š1œêTÆâP(¡ƒ¡ÍWý ŒãÃRO:åéÍ\xz¡µ™^ÿíXKÖ $µìO»Ð31Q ’ˆ–æŒ*TW1R[*œ>c×D†ÏçdŠ«­!‘[\×x{³ê¡Þ¬Œ¸„3cíK{-Þˆt93 ¦.ðÒ<Žü82s•|îºÂŠNØôOU‘i¬%œ@a€¬1È;#IâH‚³‰&Þ$ÙWxÿTªr®ÊàBY2mé½Jû¯èLé )„\Sð·$Ž‚¿h“à/Få ‹ÞEQ«I@¿#/–O#°ž¡&·âAÁ.¦}ÅI kË&P*Òzm®œÌâ*®ºÞ‰Ý8%Go%¹+5pò˜ +pi”h=OmMÑ +§›!ÀAÀÒã8&™¡„„÷r¢-ˆ„M£+6(R¤+6ñîR±CÔ³õ£w•Kƒê¥ùäîÈÞCªQÀâ½ æ.c×Qå«—SÖ +Ü/ÍhT0Ó98—´a–:M…k¢ï$Ÿ“àï¡Ï»jÙr"­ÕRik'JyÉy¬8³¥—ÄP$.¼avéöÔ§mWh‚v‚ìªYˆØ\ ®Ÿ@‚Ë5NbÎŒ‚)–%‘~Ь_3]Gf†'ùИb?É„ûLèćnD‚ÅG³‹ä÷aB@L&ѶTGÆf-i"kÁϲ–8Nåk‚lLÜ2ŸX¡ƒ„g‡ú ˆ%ÒŸ^w§¢Åö |KÉyrÛ2 ‘zK~ÉVW]fdž#ÆõÉ£C8Uig‘õÄeU`"é€'8h˜Àè—4*4:ðb$»NSêq£t½’ìîàÁÅ$*øiTã=Qñ˜:9Ú’ÕLK\¦‹–v;åfu¡,¿øÉ’‚jKEq”kx\‘ð+šq¶"NHÿ7Pj\‚¬M¹ˆz±›XQE˜# ŸçÜab‚pµ´jѲé8AÍ_ql‰iBµÙé¬-sDË­fÄ9à‰d,C!ÿ܉X2žÛRN$†¨‹ÝÐV»!m"ÃMqœ¤I˜Aüw]å½c9 •¢)±ÿ¾&ó¢ÿ.S + ¤)4Kh(ܰ¾ìB»$BÎÌáVöŒ¤ˆÌS;@¼ 4Xa“E Y¤?‰(Á­`öq^Édôbm ` k[¾xaËŸÊÓ},Á„’IŒ$7¨ c» K1o¥< “EW±ívŽ3(À„˜Û@„žòúÕ ¢ìˬˆós™3¬«l£€ŽÓ%µ•®c–|íÁQì6Å®ˆ=B1Žwb>X:räbgœ ñ}°¢EïfQ{7/²L´{Úç¼XeÅ ,æºós+¤‘I1µ Wâv–•ÕªÃmmVY‘[ÉJImŒ¥;°¾V`h‰$† +«Å•Ý–‘ß ‘ÄºÂøÕÙÃ[enØLÌÊÌë@ø‰9Ëš'K$8:>´´"ÜÚYb$º — „D‘º²„̓T\ìcÄP‘¯ñ„¡¢Ø‹ I®«E…¸Üôþêl¤(üDnÓdÈÃñAYi-L—a®}$Eò$óyÅ?ñÔ“få~Ü7å*¡;#qµ@p£¤R#ñ¥lIâ@:<­Ö˜‡«¦\Ñ\Dˆ£ŠÔÕ‹b­@N‚Æ] ЋY.8'ÈL¼lNN3£B×2‹SDÉÓ‚ùz-­qèÌeKUÓ*ÁT_ÙTɹŒ‹¨‹ù÷i×µÓËFN~7Vœ:É z©ðâ¥JK†ÌÓVø`ú-,½Hè¸>¾¦ðMœÙR!¾)&«€öP5MÙ;˜–pZa!'N×ëœÛˆ×`(º"çJ‚@ñü½MHε²8NÜ1éDàvÓ@IRâ²Qåú¦xE\ò²¹ø2ÓU*YÚ='€xÀt2het ½âĈ[†u÷¯/wä¿")–+(¥j†¤ +TŠþn~-dRyž—²==öØOB…HâÉ(GÆ‚ƒÃ"¬ð-m.Ø)ËÇ0Ãu—&X‹Çˆ3ºâEìdßê’í]¨ZÎ1p_pY—ЬÅFGþɰÄ4.ýÑvÇZ¢&±¶ìSV0—+ˆd+‹S!² €K}‰¤"ud(]e0ˆîŒ|9`C»¢3òÞBýsÅd(ý+Fþq6©F«k +¡40¡/ö&-ï=Už#ÙzbË9Ñ —8j澡¡‘q›Âï.¬©€øÚàÂS qd:|»Ç +In¨GwÌeãFq@çà ‚Y[©à½Á +#pïìŸî?¨,©/&s·(AT™¢<äAÓÀ{ B:H9i¯.rÇô9Áä;?:V¦ª#Ä%.q$¥TBˆnYtýàäTÿ¸ù*‘ $¢í;U0ô–(št³SAw¾C3ÖÒÌ@mÝÖÊèÓ±9ªÉHgÔI `Ï~Á á<<Š“.W{q;Ôúu´´Øàl:Ê3¦hØ3êàxÝr!¸oºÛtÑ"ãÆg­Õ©¸8ˆîF hÁÚ°B¼ŒH p#±"—·Ê­¼°mšoŠZ»@Ô¹Ô©Jk¬J­p® ­/»yuW1ó%í¨SàÕCŸS%»Ê—T_TÉ‘îZÑWv¼Ò÷$&|ZY@]ê¡2©d;Çfë#žHªž)C¤¨„î],¤¤Kôô –Šb´éÃ#acšvªØ)S<¨nˆ!MÊÉÈŒ€F®m+.ºå×¢‡¼—¯N¶xB¡Cº˜'#H?²¶¼¡è o!ò6‘ÚÝaïȺ1·˜u¥Â!Gý„åQÙŒñqû",7[x¹(dÈ© û°¶àË'_THÎi$êlZEtŽ\–¸¹žÑï\d`ž÷,سآ¤ƒL#¬-™’ó…3%Ç“Tä¼fŠÅckÊ|›Šƒ‘™‚Œ­«ÆÇ‰;"³”P‡ÊÐm1’'Ô +XŽ4ˆ]–ˆY[ÞD€7Ááèð‚‘J(¨œd'—¹5enÉ8Á~¦)CÕ„WlA8×G2{[ò„ RšPTåQ´®²”:ê·ªàIp1ëˆx/ó"VYI"(Q‹ÌšWøFÈZÖGVlAµ[HF'a9ÃêeèÌ—¡U¼$ä¤à ³‘¯‹s²ˆ³»L›€Ì‚àHÊ*ÇÀP[0˸n¤¨¢Ä•ºŽ ›¡U +D…Ö‰"xÇO\OÂl9FðÉU肊`$e&UE%D•ùˉªs ߑ䀤“ÌÎ*›Ɉ .Ê$C\hæN´Ö ›¡a+Êð$æ& ¦ˆ¹˜¶±j•&‚ƒ_—æT²AŽ@Ñ‘ZðVE{ìh%Õ%r3°’°k[àO -s¢8ƒõc‡}²¸U ­éU`J3Wšu#{fr$±?ò„s~E˜¥ïAM%&T‘-ÄËTŸ£!KèÜUhÁÍ„sµºœÃÀœÊ˜™¶›-¬(‰¹’’td nYup ëÊK1‹¥4P=q ¨ DFƒ=q8éi cH*, ½j$$TKjB|Cr &U`$»6¡Qœñ «’‘L‹SQ×ßj­#¸,¦C”Ìšô‘Æh…ȩ́F„K-ˆÉ$É*›ùÇÊGq-!N¬ðT¢" +“"6Qlf|Ÿìci!x½µKB5jÓèËWZžàRé(×V‰!p‘Ðî¥Ò$':º õ‘æqÔš3eˆbŽ#b¥ˆõ¾ÐW´ˆ-˜ÁˆG„#›—Á#¥{  Iª|ÌÉ¥0S-&ÒQ1,ή<Žé‹IW~³'³~ú,p†àŽ“‘<4ŒÒúFËK*.)‰“%í)mÞ÷Ó9_p÷IþHãùÄf3×Åö +EGâ%µ|ÖÅçÃÓøhŠìÀHXù¾ãÚg +GÔXkj}b;rq$åîg•™'IGQ|¥ÙŒ^OB¬+”-T_ I'^lÀ—㓊³$U£JZ„Ðumt+vVÍ\êÅoÊHº>±øFŒs!Ê”¯DqJ,¤‹£_ªìuŸ4%•â:úâ®!Ö¦Ôrꚇs!ZÜ5Ä“$Ä1;)^ W¤øcˆÝt±&ùg>W©dŠQ¥…ÕÊT½êú{r¶ŒœH\IlO›A™â¬T2a£qÄÜm¨¸•º¤d Ct%ðÞP¨ ޝTxÕÓ”ªj¡§¬K73_$%f%®ø™‰ÃLÙÈý¢Å\Ê=)Ò3 .MÁÊZA‚‘A~¶øž9ÑÀŒj&£ ‘â¥È<—Ü|¢¥JˆC)> +¼O@š%Ðúe QóbG0ΔµšaŠâíE8Ðë(ßÝ¥|èÏé”À±çˆd-M(Ì’tçJ:^U“މ/ $·µø‚%÷w©X¼5\ dú:Ä1 RReå\Q´N5…¤û$`R$Æ>Î+¢ÌÐŒfa"‰'üZ𥠗‰/É,…Jbº…YãªàþöÞ¥Wš¤;¯û+ï°•‘qÍ¡øÙ040`È{Fm0/ ©ÿ½c­UYu^}JðÀ@w£OETVVVf\ö~ö³zŽÝÙšA昆½þü©mµŽ0NêpÎJ€b|-¡äˆÊL¥¸èN^ûëpéåÈc²š`·ÖÙ6v¥~çAšÍ_‚ g"(…œëI¤”»(©Ž¦™·S_X¯5ÌÐÐîÔ­s|ðEVÁü oöΟ‡+4k +ý-4àäë} m%–Ÿ­EUÛüÁV~{¾>Ä@G¬ÜØ5ö‹¤˜ç4ÇÉ…™®â8b…³Giû"o¹äáÕ¢¢÷ÿÓ9ÜVôa\µžÝ¦óP8É-H·×IñûÜèªWNwë +Ù¾Ÿ1Æ:MzW‘®wžÖ\Ê¥à† +õ$35Û´˜Ÿ—Ùn:Ý›°Ä[âåJÜÎXd#N?õâ ¢“ÒÝ=F±ôèa8€pQ‰eRà=²ñ„9Œ„ª÷Œ¨Ô¼d[âD·Âî}v«9 +ûT—¡ˆåRs. $œËª_ußsœ¿à0ù•N'](â+×±MÉÄxiØ3båãŒ)Ž n݇*…óT•ÚCEMÕݨA˜Óª{ÄŠgÈ5"7¾vì5Æ“t!Þ6ÃúK9Ê“®‹Éé~ ââcÅÅ1 þíÙÆ…Ì6ø­¯2çVl2®0Šˆ1X7tâãä£}±ÜÌ„1EÛ½rÂ0è×iÖž»>¼í§@‡6ÙüzÌHߓԛÝRÉQ&©Învc/î"¬§u è1'¸è1¿O§Ç|vâ}?ƒV$ßO©¸­ª;Ë"†;z$Pf9«¤60†tº’üŽ?:{‹²±Š!B7ŸÑ9âDõCDרn°qš{Ø“JKÊ€òÍ|¨9Àp§“ãtÓ= Wîóq†šB.—=Ô½ìÀ÷̵Ou5H¦7?¤…¨Ì;$›6kIC¬›Š6ä–_Ç3¨CˆuŽ 4¦µ4»b•8ï€Ó“ ±àënTZWCÑÚ[ÔQ,Eõ2ŸÓ¡· :˜>ʳ/p:RœÃÀö¡lAd™Å¤j[°«¢…ãܱÌ_Å”½*S•i'>6CÿçÕ.ï†ØCÀ‹Ê’ ý¾Z”pù­ÀAžp¬Eƒ˜Ù`ÎY]E½óö4²l¢dˆ«›#ƒ9¯»Ã©áʪÛÞ©óu–о¾1 +³ÑelE4']  æ—ûÙÙ0'¢~¿Ky$Õ‚á§s£­Ã!QB•,kO™ç‹•#š¾Z¸7LcšyÄyNQëϵåʱݙ«.pª»¯x´BÚôRý¾þ&"¼/õýLƒëç9ü¤êßÝZz‚å÷ßë‡ÊK}‚Ó^zïÍŠo]0€ò& ? +‹ëõ»?Y®÷(Q8–GÍÞ-©EX©”륕¥ÑL)«³%/oJØæ¸œ™£V\4øSΆ2<Ê[¢‹VNáZ鷱Ѝð§„Ež^ ;.3çƒÃw¼‰<Æ\> ô>ó3j|z+ ã‰÷%@sìœÌàã~47 ›sHáa-K)¹ +ÛX³ã`DhµÜy#ŽhÀQL‘áôÎ×B*Åkž0åL}3giͬ©g+‹Tld¶Í†¨ê(nÀÈd‡¡‚Šjƒ {ÃF«¢ßs‰Jûµ +ó +¾n8œõ~Ã7¦„›£ûF@¥y€*š[C4ý…¢-ígªw]õ cx•=ŒØZjŠîDÈ:oæ:';âA9ò{š`*.nÐæ]Í>û…ç1” \ü]Ú`cZ!ùPtîᨈàp¨% ô°ý4!Iu ^Ü4\o‡Ãb†F¤¦JUR 6˜âöÚ)‚÷M5^¥p +©>>ýMŠÙØc ;¨0'•‰AT؃Ûsnâ Tdp=~_oÛùû‚)Æ—ÛK±\YçÁ•X´°(¤Ø( ¨z‹iùéƒøfûüJÌt Ì´£ýÃIÞ«¤ì­b0Q¼Gàã.í!Ñãï;Gý9IÖ?b”‹_0#ä¼¨Ž ƒ5opj¸Ö`\"~YѾyÖÛ°3ÈÞb£Ãjž”f£mŠâæÏAÒþ'M>½~€9о>/[Ì#ýU»vBâkÁú: +–U¦ÐÉÍ_9Ô?9]Þ9´~ìûYG€ÄE¸š¼ìI +‡nˆ@¿›·@]¦êž=Ñà1oÄ+bÖß HÅúŽÑ}6^«à×Hy/¶3òë±Ðˆ%‡‘)T±¬ÚOgÍ;LAíå\ß³¤¡¤ +9; c‰]*Š: ‚«`#a¡bÁ>Æ‘üîõ­’G1_$[ù…=¬Mˆ³ÔOZ?R¬4ïW×o2×@p]]¡ Ô×f^\m‘ÍÕƒÏëoi0ÿ„Jdìãݬ°ùìâòJ(Õ›kjô‘ÄqúP—¾ª¶¸½FB ùH¢˜h_µÑÙªŸ¼)?rÅc/ÑÛ[Œb­ÃœÊ\±áW¹î +B[QßÎÖ‚Š—VuÙèГ–縨 ph‘·. gŒÐ Zé¯ãÍõ>¦¯ó»\q °Üæuúóu¶(ä]¬SÁA"¡s¯¢…ã}4¬ »•|! 9bâ?oqÞ\<¨™?ek¿Ý[üio?þ«Æ†¹ ?*sµ1˜’e1$}ÇÃV £­º?¬[÷_Ø|RÛ}ðnóó¹8ý / ì ¨oîsÃ"ÞDîù»•\?­¨Û*3óKy>ðÔ’Ðp8ÑÎe‰…ƒs<ͬ¡WÃ-ÎúL†“ÖÒ.î<“9¨Å®1öxö› •(ô…M+¦xêpÁÞL+~†Dñ¤#`*!“` ´}ºV:n1ò¼Ù8¯Z£UÑ›„¼¸ +ýP%9¢ÊÞwôpÛM0ÚË#)]BÁávg£zYO¢˜XÇšÑM¦ Û3¯b + jÚ0vؘM®g%öW–ã%ÁÀŽ åš3”Zómã.ï›7Ñù`××ÕûØÒ²TÏçzd™æWéê¬'àqP4kž2¹×LúSëi2MNòuãçÔbDÂ:W¡0‹ô(Ò8ߘî +\ð­¸ÁŸ­šµ‰8³áZðáš|ö‰¬'T þí°Ïáñ†É~f€r².U"?|V‰ÆòÇx°¯ÜÔœi%Ö4~†TWgø&A”àÙ¸áx†Õ­)Ä¥^,>œ'«š’Vì¼@ƒ +“9⊠[ã×»»HdÂê$9HÌ$ +“B"Œ1—1ݪ΋¢’ ¸Ç”#§¸F”¿Y jžìôCŒT\ÔA™ÚÞ ónË;ª¨N¢$’!:N‹V–K³µ·¨ò ñ%ÂE‹eæšq¤Uk\âxŒ®t¼6tžÙTùãßV7Ë•M]§®¬Ã‡Z‘×õ‡9pfÉQ“¼w½–1"ªu´s²%…Öä«°Ò&jM˜Ð(¥La;k1ƒéºjÈðB˜£? A#"Qʶ¾ÖãÜ’3ŠŸÂfÞó.¼ã­*ï èMµž‰Æ°Vàõ+^'õBC”ë4 n5õH×!ÅVy.‡TÀ‘"ù6³mÉòÕêéU.çûñæ cáKÁ8ƒW)qc¸å4ŒÆ‰ðÿ1޼bs¢ªç*é=šß%C2zô?Ý¡‘8¿y)<^‰l«ÓzT¸^¾ˆº:á6 û û¨f„þŠeÙAbsÒ+j¾×BŽºÇÃú¸‹|¯†ÂuïÎ¥ÍìN£´GŸU0©=*Bª6î!ƒWtÜÕ§¼ˆË5› Ò¶ºš ¦Agl*Ä6^¡¡eìQ_‡ó3æUÍï€ùòì<¸›ð@-.Ø®Ècúâ3sD¡ÔRFàS¢Îc8åÑšN”Á|vµ0?d ó8è[çRzžM}WÏ»#Ò77iƒÛ‡VOƒÝ[±ÏPño÷z¯ôØOŽuñ—ö§y‡þ»_ÿþý×ùûü?ýÅ_ýÕøÛ¿ý/ÿðŸþé_ÿ†ÎßVuÿÃ^'SPÐY—È#Dîó~Iíµc½á:àv£DˆT±Ò½£GX±Êʲ´ èQÃ5ÄuÅz8ã˜FfZÂE¤lh-©-ÕH½P$ÝFø^%÷Žôhž2Ï´|¯rÓ÷*­¥¬Eó¤Ç®=–JmÞ[;†ƒJ‰dª›B¥(I·³jH×úRh¦:»Œ¦Dß„«µH2Ä‘d ùÕc­Ù[Ô»|¿Ÿœ„{vQW6øv¬ÔÕMÜ:²†‘ÜÞ6Â7ÃG]ÞkWZÎj+ÞÓq Ÿ‹%éôXGÉúìX7ÄöÉbQ2ŸXPò©Ä×ië#H:h4…evsw`í~ ¬\(âu²ØW¤Pud`Ê´@ã7Ÿp,±iŽŸ %ßìv’¶G3 Ÿ­sŽ{%r±áwÔ {¬:6J&_¡:àæ²"¹FX(p­F™Ñ•9RLv¯ã œ³wåPRÈ@[g…ÚÊKZEFsHA*‹\®žáÔ‡~4x#žPíè+­åº%z-c¥Áºü¹››}¤ºÛF‚qS²AñmÓ>ÜÆ¡ÏFƒ5˜hØÅ™$Lƒj"×ä#lèúXåŠçË´øyô¸ÈÃz\´é„Ò JwÜ9†j f½SõþœYƒplG=‡ôàœÏãí5ô¾Ëûk¾‹ÈkCžP‰EZ£á•¶pó×`î*X­œ°Ü¯Ðw¿åÁ¯?ŒÑ‡#ôFtÜK@£¢¼».¯ŽŽ„°*7¤†§-¸†ÓH"N0ljóT—f=ãŸv×5V,ìä±ðžgÔÖ(óþ Ké¾´ ÇÒ‚^ây2‚ñ}<„`=AEý0@`Û“†bœ²6§£ã ÖŽw-‚‰&´¶8˜ÑÓ0»É342 oò†S±Çá¯$x‚ðkü’êöúÒíUÝΦ~0GA3‚ âÄA¨›‘ûeË9ü,óÈ–?DZ¶‰îX:–e,ùÉO+YB„JWáÆœ(Êë!õÎÈ8|”'ߟ˜Ù!Z…iMY[k3#¢pXDôZêU‰ÂÚÙ£½æ ºqs"eD±qÃ…¢cΓ£PóJñ~³A³÷ݨÏd¶-pÍëê¡jšÌðÜ(–Eº`§:wùT;’f²ÃÒý +ó(äÖ¨XBiO3Ý¥to†B{Që¢]ÀÙ%[5ìC‹S"kÁ<´9=ÔNk·ó5ů˜·ß ¯,h+¾ëëmÇyçüæ Óœ&…ÿ eM釄…(ÆC*un­ýw·>×ì1úJ/BöáÚʑԩÿúóá•ûÈŽ–0™•’Ï6ÑÒûžæh¡æá:rTâ5GêUä%•;Kh”©Ai‡/+‚“áuG%7Émê, +7‚ð#V ¿Ëݪ-Ë}â~ 5Rr‘á=‚cßAdéWX]fßuôýÂB‘<È‚8[º yÊ®m§õº¼A¡;‚×ñ Âᬄ¯lÛ§ Ф^ûWOKg›åZzÌ]Déñ 7p‘l ðl ,‘{h9#W ƒ’¡öGA3*ÉTiìG­‹¸˜ÔRÏYáWz‹Æë¥xÉcL¬3 õ·=´OÔ5®QÔu×Û>mþL)Þñúr¤ÛZ8kžLAÙðYóm¡0;CƒÌßz‚¨Àbp6¿üA9­ìaæÏŠ=š«ª@G©x}»*yÔz‘OŠÃ°PdÞ€^[&o’8‰eŸˆúívαu ¿¡Ì¡ãÇ‚lëZ&: h\0W©ÿ3iVjd,5 +,M4ìÕa5tÜ ƒú\ ]t¬ žÄ{áa´j¨âÚ +Óí¯ luwYÒþÆt0CLhBó‡Ëèòï 'Í94¢¡§¾™Õ)Šoì¾9P +;H>ßóAªPÃúÅZî9o]ÌN€¨ËËÈl_ÖdÙÜõë/?,R#¾y?xTžÕŒeïD œ¼k,ðzúŒÎ™U© áÉbs,iË>0l¸‹$•ÜölK@µõ©Ã¼‘Zé¹Ò­ápìwEÔG™Hª‘ÍÞÇëCÁnÆ€—Ö-É ù12&ò¶rëæÔÎÀ›óo1¼2uV ª$ +Ƙ*¥ -JªÕ±x!uùéÏ}å\0…Dñ^ÎkEÓÌ–Óé…´Qޤú0g7®/P÷Õ¨IpÐDÍ@üy¾'•¿\[\¨Ôü-93JwžßÙ Š‡w]ñz9³2Âêa©C«Ò#fpBñ6´4° ÇšY}ı8clá¹5‡l¢P +B–™ª1ß~έß®e€Y—ÁÒAЯ˜Ì·-å·*¤”˜i„—ÂÕ“*мÓªyÎ Þ#ÆÏç[0V5´H†Nv´êƒ¦ˆ:ë.=øN³AUcHÅ-I!ˆ]h0LÿJ›ÕËì-Ôjh[ùåVïŒz_t´äš–åHL­-­|;ñé3Ⱥ_¹í戎…›çðN›®S®È1ÌK‚c­2)+HYãfŽ>cÕ”äå|ë$ÿ££füÛg¥éè£ñ¶ÞnkKj‚ŠÃ¼bv¾ãê2I(Fת–ïñ:+CŽGì9#>¨ß/ø"DºhP23oÕ3÷¤øÇ†&Q'‘¤JÏéðxDÛƒÝÎR†*=„yÉuºfÀÁéÚa¯F}ÕºÙÎPÞR?W[zšè§DÃÜFBnU— 8¤<~”àUbŽº•îá»…î\MºBáfUZBÌ×OW…Á­SBUGTÑì£<°H´†ßWÓ^¾†àÍ?µ˜tÿÆËcG1õ +G%FfAT©ûƒ3»¥®gaˆß˲ôo”B!·Qm¿î2F+Ïiþ*‡ªGs`eù +ð.¦R³à:”-›E\9ÎnË?P*!—"3„!_Éy-/¹÷l¸ðª£A“P.±ú%VGùï²kv>D+”l‚½ð|O‰ksŸ–!ÌÖÔ,ƒÇ<7TÖçsí ÙC¸®rÏõ(]¨¾½6 ;¬ÕQe.)ç “—'M—yÊD$V}2£ºïªÁªÉ'Œ ±R×X lêgW#¯,Ñ>^µ*z¶òœ/{D_Ögf„Ë4,Ôlv¿ßΪ‡{'z×uô9Ô"•y¢]¢~ #׫ å$Kò1‘Éå½eÈ!þ ô§ó6Ö`…žÇZ¥^Ê|Å–ElÓ†…b ßp¦}ɡӳÐt´ 汯ñ¹´g4˜ ë"•k¯‹eé4ɪ”?F×&|åÊóZáD¼¢ÄëVé{µx}W® æd\!eRâp ØY¨ƒ£(Áæ?±ƒbô¹Åo{%ä¤É;¨¿´æaŠa,J:FHóõ`£`\èÒyfkÎÓûÚ‡ª‰a÷¼ÿôåXª,ÂwÊ–‹ËÙfÉVëËúS˳òçÀÄUwº.7>õ³¡.çÆÁ«¨CO/ž–y‚}µbÃà CuߺÇ>ËUôÜg•Xò„êIChréó¤æSíDIìií³Úzôç²…1{]aüFÌÈóxs€÷⟡z­¯…¢ä†é"D˜S`uèSŽ,ë|€šBÀ®Xö›¤t½ïlÈõZ,~Ö"[J|CWÑió~F=xE Н+=mEÑxÁc3ÂĪ4”áÙÆõ»ˆÀƒàSt24lÊ|!çƒâ£@ÝO3Ë'öɬë5<–µû· +ùbþ5=¨‹üZ ±ç@ÐŒä¡öÃ$%-µÄ©gNÁ­„;²†ÿ.«pD…Qß]Èñ|vÙº™Ö… ȱÜ: ë#Î¢Þ .ÄgȰruŸÞB˜•CO”«%™ Öµ¢rž7‰´lÍeZ¼­ùHâfŒ/É®¢PƈQÐüñòðB/.ÂÂÓíE׈”ûYbï[ui­»a‰ïŽpIÔ´½Z)fóç(L¤Ã4‘·±v«ä/ÐhCÙzl¬+v÷i­\è­•ùÊS³rlœ=rY5¡@…уëu׊N$ÙÌIP¥‚îž8×ãÜo³AœöÉÏÙòvDs ~½- ØË*Yr¨ t1t‘Ìf²;:;:•ݰVðÃýÃîÍñ¬èfo4oaËy„?Fyæ£Á»¸Íq¯\q%!„rY[`eÍg&ù7¬=Ø™J2ÿûm;j‘RDCqy²`ñ«áx«óújm­ŠÈS=Yà Ad•;"H9 +ús%TGnûMu:Vô˜òóÑlµHÔµµ9„ŸP·)m°Ü ˜JŒç6f„L8Êžq.ÿr‡2±ä¸æE}§³ç×=ÞÜ›œu7¬ãõp•Ÿ÷}>zFqŸ¾n¬çGgàFè̵ø§†’”¸Z‰x.¡2Eu&ó]¨Oµý»¬l\ 2?#œ¦! º„«†W]‡­á¼0Ÿ±·–Ûñ+`ýZüu.©~bô)4´×àx-gÙz®ÆUj%§-À©&®­"õ‡Äx$ù±ý¤ú€v!v’ˆ õ.`r ÷ÃȪq½Éª¥cùß9x&¶ù‹ßŽÞZ‘Ô]ÞÉs:|æÄz,FámêÖ•ðÎtk:Á‰ ÁüÅl¨u¨SPr¼Î8ÅÞ–V†Ò±Ö¼ÂއÒ…ë’¢ÂÒ¤åZ.ïã)ÍÅ..‡ÊÂR-máø:EYoÓGš×u(…¿‚¥¸…K-LE ™HY9y+|¶thžñ V—x§_”E»6¿V¤‘»§§È_µ÷kcù,ÁpW)I`a‡µÛófl˜®åR¥«Ýk¡>ã_Êeê…Ê,S½rl f¶Ó"n}¸a.Ûâ#B…´^~9|ø,z¶µúbÕ¾¤ÌÎ Äð/ÏÀ4Òë\ââU›š'ê[2›l^ÄÈÅ|±¹FB£ÖŸ>¶/~V”×ÞÊ­4½ômÔEÕ?Vv2ÆA„°*í«é1UÜ ë§•"ŸjÇTë æÃbЇ2@¤~ÐúSŒÓ>Kçz~÷X“Go­”>•„ìÈ@^e2ù9–™Q6î·©³`‚éfµ ®È…Pá£iH†pŒnÅoªÜ +«Fëká,.½ Ñ6ñQVÀƒìá5üf©08ûþKP.à ëBzm.­™i-Ö(C •î¬,½qgÅü‹±®Âu}‚N cCh±†KmÝmÝ}Å„«›Öp[FâÏ ëõôn¾r¿všÿÐ[AFÒü®€_š.S.råQ¨T«Þ Ù²g­£ô›Ó3:„¸G³ ò#ú-»¸F™·V…ã¶µ°IDcZª}AyŽ„u]¤‰MUS1˜vܽ¯È;B7ú%ÞG®Wba¦ÃŽsç›ÕŸ’/†×$€HñÁq.ZRÍÊçúà›4M”EgÃ2:ÞºÁ‹«òI[°î:ì”XhP}š®¸/cÒ „ÇZ¡×dm½ÔÛ;àAÝÈ¢/VJÛ“¡öˆë 9(ò»»?ý›ï£üþßêh¿=XúõïÿêŸþéÿúõÿá?þ/ó¯ÿúwÿòýÿï¿þŸÿæïÿñ¯ÿôOÿüÿüõ?ýý?þç¿ÿ×ÿé_þé¿üó:èÏoùO÷Ï÷7ÿúwÿù¯ç‡|~úõë/þݯÿýão?ÿòþÇÃ\€tÜÀµ¦ ÛP2€ó替}Ñ|×õƒÛhþHÂæ Õ¿€s›$7{‡…2iû ¼¼ÒÓY¯³¹´½É‡ _€§ã`'5ÃPŠÀi²õÕ+nvFAXß4^™MkʱžšÖ‘GX°-§RoŒX ?¢¾Ø…¹ƒBSÐ$°ü ÷‘+J#ÒùkE@ÙNsU~\ÃÚr½_Çm + ß¶ŠñÄŒðíM(ñrd±8ò\1ñ·ü!L×úóv"¥œ2&:F6y^s¾Á#+ub(ÔNgY¿^0º/¥—`ŸãRíoµv‘-J5tº§z¥Ý6Ðï­²ØÉt"N+ì”î+D4—e¸š(´Œœ,pWéÇ-ë¼i 0¸,æ“·e÷ÇXxŽwú9ò§=b]›ÞûW5t§kpÆ?RÅõ +'ä&ýIé&VŸ[T@el_@n‘Ž$nXMªöÔpäÔY¹æ,X“ªà Ø„åÛYˆp|øaŽXǃ"Ų͡¦â– aeO1 2ès¬ú !ÉÝ ÔÎä¤l ¸Ã¡Ì·Þך!玹4ï£Åë¡~ëÝjOò>Z¢àÿ‹xÏÇœ£~ƒî«õmå7|ûŠNÌs`í©MÍÚ|~`í ­y™¤ÙßõÂ_{½§\|°ë[˜«ýH¬'BYí'§¾³óicãéY+é7Pz—šõúfÑëO–Òw µ¯‡þg½nY©Ýìy\ÓúU¿‘ó4Œëw¤yöÚÍÝç`¾S,¤OëW¾—0O|àäÙÐS§}SäGýƒô׆Ç#c†U÷`Æã¸Ø£RG?ù÷•G݈xþNýI†ç=Ä1žãRI½@ðìDPÎ<øïs¿6ö¡ QðM{çÜ/> ïÔJQϳÝõí̦¯æ<ÔÚf»»ò¸ˆˆŸ(Î'Û=Ö%e­KÒµáî.Hªu„ ç wb±´ŠÅ®ó w·F /‘ÙZލj6QM‰Xªêî߇w[üò„º{óËHƒzrÔ uçç;ÎÔ}\¤Ÿ®̈iìÍpqNâäd3Ü]^aÅÃòŠP܃á­.Q±«ê›¦NÃqêû^z/æÙÂø y}ÀܽM¯Ípwü†n÷ïÔ|ó@Eþ`·‹ÀÃáF¶ãÐŽ ö&µcÆQWÌsÚ/¬b7•ÝhÎY7Œýb]ÛÊ“Á΋ 7zýZSÿM\ç<8È;hio®åæ«óÔí…U§Ê­„£Â¦©_9žÌ›¢î­ÊHðtV0(+Ìth΄ûnTz½‚~£Òë¢<éu!doB:~Þ|ð FÇÆ› ̃‡^ÍâÔAÇ”Oº1èüèáxDŸ1¢|Nê¹ ó´nØ9K96±ïŒs‰Wil´y }Ù 4')N¼î4×B³7Çœ”g·G@YN%j9²½+`âLBŠ&ÃÊ$¶ñd”£(é…&Çá¹ÅϬø¿à òµxóÇÕ_€ò ìx)àÆó¦oÊ8ÉbÁ¯g™[¦¸„+ß,ñsMµ7Büsýüʦ­âj–@€ÊÀp¬D")‹]¦èUñs`ÂYÌ0È?èàš[ÔPp•P”óòó¦3Ú_¾“u•wÞäo>©), rwÅ÷¨OηF!êDâE]1…˜Õ$ûÇw˜7¦µäcn†7.®qµtžC,C¥ËØ —ûkñ¸9—šÞþš{žþ¤rƒ’gR¼aÜü¯ÌÍàæoýüÞÑÛh=k¨¡”ŒúÔbôÈ¿ýç;_‡0¦Ç«=7Ч¾{ ªPÉË„³Þ ¢òÌm³³!x·£lf6‚\T6kºö>æ6cpb»ÁØ´ócN-$ómîUæÇ=8ÐäÔß Ñè|Ý‘ßÔçÃ;!ÒžÿPBuSž[Ìě팚1XÊoHg j‘œõq{8Qaþä6 óê/\3—è Ò|8ü=ÐÌ.¨¸·‘¹­âEd.n…f¨ÉÌ¿Lâ»´uù +TǶ|ÅÒí†,ã€R6Yù<Ö|õ>ñ¢LÒ‹w•í<ÜÈC’É‹Ï}Ã'÷£65O( ›oZòý÷ƒ’|¿xÓ‘¯È,À1XU×Jo0äs-lî.kËr£÷ßïÄãûÅtŒ ÇÝ|ãuË=°Æ—ž¡eÓŒsè7Äîƒ"œ¼x+ÙohñáÆ£œV|X;ñI)æyU›{cŠÿ’=Y>ñ¡!_ÊO.q¶P²¿pÄ¬Ãø{QˆM6Õú„Cûõi1‡ç}ãØ¸QÃF3òax>­<7Y3ÿAÍÀM>TB„ÌïE>ÄP¬ƒ!':@¦·ÐÝiÚ|m:ŸÀà€Ø¤'øX¸«›LÄ,'˜|O ÇCÈGÍ7˜ÑˆMðƒý˄îõ†þb9Ëds³~¡;y ~Y"ؘV]f,üo /Ù{o2”kßü^4XYˆí7v×ëñÅëeáÖrÚ¼^.uT§†‡õ7DÒtÞûÅÊ‹Pu„o¡¿“W%Ìz_åÃH¹¹mn/:=Ç›¼K»”´wòn^a͸›—gäÍÙE¦¦ÎûÍHø8Ò÷E×ÅôÒþ9^æëzï¥ËúÄÂÏÅÐeÄ#vãq+ ÞüÎÐu±Ÿ_/ª—zcèÞ?ºûÅÅЭLå…Îý\æ¾ÖÁ$,våq?rþ™˜KâÒpÝO/tnR1LÄRÞôÍÐExÉš$×›ó“¡›zKcæz™ÜÖ'C—÷‹vš7'7C7ñ$R_Ûæ²Üßó'†®½¨Pmó¹ŒõØ–Â<1É9ØöÁÐMZG‘žg¸×oº(©WøáØ0¢U¯åL‹û@çÚc(.Ä8ƒÎåD¬ýÄ{Dþæ':7@šèÀÛ²öþD熴Wð»öŠ?’sɳgêË‘`æ•!TÉ÷sæ¬iKûfçJLEÝØ˜-Êì7;×nxî7 †ò7;—t—úDæúBù cU“ƒÌ BnöUäßÈ\†á· ê2×·¤x xÞ'2—?æç’\-|2sMÒV0ÎÓsÿ`æz7_*­‰:Ÿ¿aæ’×#øÏ5Òfærü†pŠjå“™O±ýcÞ{T +üÈÌU¯p¶oT®øQLÑâêî¿P¹|ŽÞÃóƒc`þ•Ëù Ê÷,j?Ó7*—/|À¸Ò8†søDåzR¸6ÏîÉ:ÃQ¹é\X.8Gêߨ\Õð„QÃ+‘ûDå†^þ²& ·ÅÀýFåúQTîÏnãÈߤ\Oùò*§ƒò)—)ݔśþˆÊïÊôIÈ%› ·L§&6ý€Ê5¾Þêo¹Ê´åÏlÛ7+×ðæeþ©@ä“•{Í¿kI¿aåâ'œë&ä¾;SÿãΆbÿÈÃ¥µÜ7⋃ë›÷¿åc®Ÿ™·5G»¾Q·FxqG˜ß´”C§Þr±c êXöÂ?Ro¯ëÕü_°Û‹²é‘Æ-IPÁ"?¢m ÿK÷ÿ@ÛµÇß@[^?m÷›c;ˆÇ|ÃkÇÚV|AkMëöë7¬Zü0kK߈ZãÛX3Rˆ‘Úù¨U?¨„ø|³ûBÔzÑOïP~–üͪõeç=Ç7ª $CÑQ{…E×"Ó‚®A±u©Îߥ>´¼6§Ã ¢åÇÂÌŸ•EIîè;›ß™T8q¯ßØÙÈô]Zo̅еù³ŒÕ'.­ý ’zþ†?ë\ äH%àHßüYoŒb:uÞ.ñÑábÌe:¥¨»}ògÍü#kH äæÏÚpdÓ‰Í  µá4wô`<´‘GwI("6€62Ø#E{¥1ZY)oŒÉ”àã¾§”ðZæ‹gàÝyhuÁ‘ W^¯M åRé¿÷žeä”uHÉŸI”E e­ÞÜ£GûU<›¨GM½>I´¶bHÄ–¾Å?lõ[™ËÊà×+¤¡!¯L-NÙJäy´‹§Ÿ–Ÿ´û0RFu¿áÓRÐ-£3)+×?ù´<ÕìÁÙÆ5ËŸ|Úd"L­1büü>­F!n°% ÿäÓÒ#vý2ùtûƧ5ŒD([Ò;½ñiS¨ñ|ÿ©Ü'ŸÖÖ‰±Tªý›OûgUo1-VG,8-‚{ðiÃ5¾ãŧeyqJ™s)ÊÍŧgŽÕÏ\zâimd÷jYz©OËIP]riGr”§¥Aç‚®*Þñ´ªáŸw¬Ãδù´6Är’_3m@m4 v+RÀž€ZÎoŽH…Ó8 °Ý€ZÆ#o.-+­£·ŽVÁL#S,bÞ8ZUKÁ1-Ë9"Aù"Ñ2 _×ëEàíê7w¶1§Í~ðfyñ-‹(þTtYŠ3qrz‡Ê¶‚ ›%‹<„mÍêßBÞɱ­ï„»à·¾ ¯‹ýÚ[düß9±BTÇu¿F‰ÑUÓÆÃÞ¿ãa÷k ;\Û¾8¯°J ÿ>¨°½Fww’Êœ6öþûýº_[Ä×yþÐnâë8Lʽs^äæçu0[¥¼ñ®üÍE}P]yÓ +«)‘±¸7Ìu°7½R­óû˜€¸Ñ­}ÞÄVgÉœ?@­/Ë‹Ïêß©l,+ùàeßñ¢±ò"Ïà aåïòÆ^%iL<ò\íÇ-ä*iâ+°¢VMŸéIXEù¹ß`UQ*(o°j÷ImOž*„‘¦aadWáŸÒ6=µ‘0OýMõµE+e£Â{ ÞˆTX 5@«»Œä +7ýQ +.¢®ØYŸüS+W°S[ØSUº*,Ü©éw~ØwÊ)òT}aÜ´­€Ì 5å<(9{°L=,T´«›\*œeö;°T¯nÎÅ)Õ™¦ô'}äJ +^È­á‚‘ö¥l8öÓ½¤˜“V=Ús\«Jå/ûúh…|µXiuº ÆÜTQi%ˆQÞi¢½ºnˆ(ÎuņˆŽ%T|°Cy‘áãf‡Rmœô™ d((U†Õ)”ºñÃo€PÂd†Ë–9Ýý÷;t¿¶( 87mÃÔ‚ *±óóÒ7ý…ú$#won…MrݨOÍ^•f†šöD}Ò{qö€ÒÈM©û¬c£>Ýú³Ø™[«¦ÞIŸ(´Ãøl/Ò§2u`]ϺIŸ¾¿RaêôFúd씤b—™Ó&}²‚'p> Ðqï<¸ž„@Ø«Ý\OOÝý~CÑ›ëé"Ê%­¥=¹ž. ¼n‰(Ú¹¹ž®ºcìÊÊæzÒpÜ™K¦¾8¡›ëË¥s-—n¶+ •„s¡‹B¢;u“=mˆõd!®ÿ${º¦®ú¬vŠ67ÚSoX6z¬V壶âw˲?í•ÛÿçО&¡†Î•Å™ðö´Õd©õÍöŒÕÙ"E…öm!ëIôä2/<$•º‰ž_¡¥›èIJG¿gŠË¯@p¾ž&µ¨»˜÷êEþîFzÚà·—v•6ÒÓ³‡óRQ7PI³eÌá9ÜHÏH,‘­a¿ÓÚFzjU4ê“äi.Âgt~„óæ"y3=Ü!ÏmoK›äip8Ѐ,Ú“äùµø_$ORÃn £„Ê36I}m’>Hž?4*CH*|9Ä• ä©+m WZ”gާ%®¬í;;Ôœ7Ç3I|ÕYаsÚÏ0vìhÜúOާu(ÕzÐKÿ÷›ãô–²è-gÚ Oî?c¬¾Ž¾@žTýS—t“<±õÀo`<©®ºžØN”âŠH–ò‚½»ðÒiÆ€i„ÚŸŒN£Ê-‚Çá\½`_…Y7¬Ó†:žŒÎx±ìN]îX€xüê~*x½Yž”;©¥­=Y¦ªšÿ¢ŸÖ í4`D‚€(v Úi~µÍ;µ“¹G Ö /BG©Åè´º=D/4'FåÚ@ÎŽD¥§ ä„F?ò“ÃÉkBA‡Sï° ¿Ù[lÔMj®³Ü°MþÄÀçfl¢Ù¿‚ÅùBköÒ¸›¨Ù‘“uƒ4‰F#&ð3»¹»¾±™ Å‘66³­t˃– @OàEËl+sC2å ô'“×XÄ,"f3Ä|c0ÛÒ]=è—êsYÝ-°NþØ‚^rê¨,¬Kʵ¨ÜˆKÍùí(Ù²,áûh©<òê›cYz”HÜøJPsõüÀWÊ@qtS+ÙƼi•üÍ–í©DLàfS¢U—<¹”À Ë“C‰}ò²?YqcÚÌI”ÉÔ^>P“¼ˆ5ý˜DÑLäý&A¢xF·ûJÖES7G²ë¬ÞÞƒaĉùŸ%ËÖÝZiIE:U™2$.°|Ð „¤^íåͤjŸ‰÷äEž¢ÿX{è}oì#g’£¢é%¨£H’ê©yDîE`÷®ÛÀy ôƒíÈ÷5’²Žì‡¹oo’#^Rùè;ÀñJQ€{s5)ׯ5R/ÆBýkäÅ…A2Ü`Ýýõ‚3RG†ùÉh¥\­ÅxõžßFþ¾?hMÝîæ*–pÐ"0Þ¹Õ¼ˆOÀ¼qž¼EüdJ~ñÅ_´kc¯7Óƒ®H>Y#ì·;¿—‚“ÍHÕãÉ_ó«5µËè77^ÑÖ€z–´ñŠI°›†ܼW4éf‡r¹¸Q^œEZ#™ìÈ êô•jDðû667gÑCôd-WeÞöÇøú°\¤á@œÅ9Z‰·ˆ‹Æ’bÜëó .²zŒêA$‹Ç(”}!øez‚.ââ—ŽîA\tíLr¸±¤³Ð8sí|6°äßèÅß®Å_‘ßcôâ¥*£|#þaµâòÅY$u¿ã¯%ÿ™ªHý©RÖO˜" úc29Ñ¡ŸÑ‰Zç䈉žÞʰèÐÀ4LëAø#(1ªsµM!GP8PJÁ¯šëèÑÏ(a~¿%ïèDwEIâ\”؉† <å'2Ñh<…ÌDãã? ÍÇH0w +™è%ÈQ¤ú %º©Ê!L(8ZýþÀú¢"»ˆRbTû¨öo‹Öø@&Ú£7¿l ó‰رé™ÍôLôçq1W›@ˆ‚˜øùò˜hö ™#@U‚†701,ÃX¼’Óʘ¨â$,Œä'0Ñä',6‘œ#o`" §åóå´h0±t'F­ò¤«Nx]BÃx!çzöÍK$«ÇÃ]GwX?”\j³R}ðý.9oL¢¥ð§^5sfÃOca-ßåô˜šHÉ>0‰¶:Lt“èëÞSHãòµ1‰ÎtQu õ“è¾!¾yÁ +rci8=gÃi×Â$ÒO±Só9¥xë—h´ÉkçÌpÞÜDU¾F()©ys †2B On¢A(°¤áæ&2ªÌï@jeÞuAo›s5Lgh˜È9>¸‰š²"!GWG,ìæ&†´Ó8,,¼ù‰¤a×ä’i~òõéÅ" KÐ\^EBm9Bºp#­["­{…œþEPTŒ‹ñ +Nþ&(Ú ²b0µå› èáÊõ'"‘ñNh˜­3ÿ/p¢ìšdøu“y‡¿N›7äüÝžäD»‡‰Þ+ Ánr¢Ê¿å¼$8¾Ü0DTõ +¹°‘JQ{õª#Adëtd⯷±dVðpÒçb(’™÷‰ ŒƒËù`(ÒZÀ«µ¹ÞÔ3U†"íR½ælsæºYŠ(D8b‚ħŒE¡Ãu³i8ÀT²’7KÑŒfCCg÷`)jŒ®*+öˆ‹¥Žé› èQxJ9ü™A1YĉR¹Z› ˆTä½l޶ Š2BÚƒ›¨–$…de€’¹¹‰~g)`êÒØÜD¨,÷©F<·\On"­qR ìǵ¹‰I·n¾ |Õž77ѵs/3Ò›Hcñ¶Å¹íj››è»¼Àó]=››è ¨Ž×F=?Á‰È„œéÈ^`¥|ƒ¹;Ov Âûè› øÕð@)~·.¦"§QØ:Oùׂ#&ë<”4”«×“©ˆÊKôkÓÓìE\DÜߎ­¥¬ªøÝðNUüj½±ŠI€…§Q¬Ò¹±Š_é°¨.ëzqõCç§™¾§‹«¨Ìƒ)d>é„E[-oÑ@tÕtœY=E[PDS +-`+"åÈ1´¿ +Ý#¬7˜ótÍXÔ Âü‰“°hçÎ~†,Çu>I‹BP@d;zÚ¤E%2§š.YáÏñ -F‘O‹ÑwÔ¢¤ÃZšàÖ.Ô"×v›«+T²¨E2wl™Êx2%oµÈŸ-Ä5"07j‘†Øölc>X‹´fïþsŒ ]´ESkÑ7tц#T<ÌOè¢wE趨}º™‹ÊÂ,ª`¯{„ôü¹HÅÑI–yšÜ›™‹ÜÔQ}E¢]ýÛsQ³FvÏó—?ˆ ßÐE YºÃX¤Õ'tQ)ânt¤„/oú"ÛÉoIe鿾è‹<¸X4SœTüH'‰©MJËB4¾Óíáí7ÇVëÇ>é‹öˆ% u~ýL_ô|P3ãUØîá;}Ñr*Ÿ5ÊêÚ¾ÓéɹíPÿF_t‡í$3×§Vé,ü¢Ø‡÷’…Yû¡wþ¢u=&"Žëáʲù‹__üEWsWu5=î×ÑŸPN6~?ä/Ò-é1—ìÌÚ‹¿Hƒj(Š-j‹†Ñ·¢Šç­×ïð‹öò~Æz-Ÿ¿¾ð‹û`0Â]¸¬ïF‹Ú¯Ÿé‹Z9wâNŸÄñÀ/"µv‚Â$YÏøO£.š„xçµ9Ã룙Z“€×¤o £»SŠ‹:&·o´EG:®âþû‰a4(v¼^¼Jäi¾ ‹»áGÖâ«õ±xµpmøB,þ6Œòß p£ù ƒÄ;Q1¬Ó)^*0û‹ŸØÂªè‰Mlß´ÄeÚ’8ÂØðÉFœ/vñ| a8Âúl“ ëŽOâÛùöž®ÉM;auõ¤âEdÉb„MOd!Zä ’©Ûâmñ`’©!ívCÿNË+ú“dÈ‹Cd I+/l!…úŒZ!…Þ¡g H!‡”% …ü˃M(UÁ…$¤”ÛiŸ¥®íƒD¨ãÜBÊ´õà[n2@mPÿ=¸ƒÔÁýÆ,š‰™ci³ ƒ™ø“,È*ÙÇ $ŒrñæÂÀÁºöÉÌ9ô9H]9•FÛlx|Ÿ´@^E«rSsŽðù¦f2@9Àóe H@Ô](zî;ðø\ügÖæÊ›÷G|×0æ;çy@ü"·r,«ÊõkGœÚƒåÇ‹EÁrlyÓ¥UíJžÀ¾Ú×/·8}º-ÞŲ÷ê ?¨|èuM#/ÚOr+7ƒýç½Gú•›¸‡@qý©nì c°_ßY6U?Ù‘Þ4=ÞÃ]ø é¡ >Ã)ÜæI•€êiïÒ—ýÁ;3/‰ËÃÊã"ø­Äy/r„BÉ¢\7O^pòµe]ø à5áóç†ßݦe7ó®-SÄêŽ|¡à¾E¸ÛÎS l——]ÚlG Ñì›gí Ó¸…±#…È û ×é +ÊtY¨ñ7Ú¾›UW­<OD/â v“é°ÿÄÈâÒñI)T /]±v=oü«èsäMÃj¥\OÖœÂÊöBÌaÓÊs´Ør\î¯RŽÉ`ß(9HId€o‚\^9üAî¶ß½Áqü}íÇñ'Ûâ0ŽKÂnåæÄå¶–‹——à ‡¹ˆF3a´Ï˜Znæ%<Šö›•ï‹ìÆ û×&½!1jýÉw;×‚áæ»ñwmcÝø‹Îí,aж)neÝ@o«@çÚF²~yµÈj³à¸½m + G}’Ùæ‹†?n;™jN¢o‘qBŠÛ¥Ÿ]zñ׊žO/ìÃY` ßhk52µ²–ÖœºØj#Ê€hµ(eN›¨6¼›ë©1kú•ßùi˜:¢ð¼±i#J«,m„Øø‘záMFëK廀hç2yѾ ãÅA³dê ¦`þ žCÌå;‹™e#ÎÔü´ÄéN¼ïn²÷­8ò4S(œ?8f9V97¿ì\³÷-Ód¬–'­ (ƒõb”±!“$r£É0ø8Ò'šlþ¥l"ê£n™›FÖÙ¡ótÏ(Is߬€wNR¹Â-ög<ˆš¼}R‘¬^\±Ùw;¶ó†$}!Èt‡ Ö©Œ›HñA>*#ƹŸG5Å´øÅ9BFPË o¤.¸‡]À7ÞA {Ûjä¶sõFñ#˜dɶÌ‹¼.èƒaTÎP>1ŒØäEótQ!Α~àdÑÏ… x•3¼å„¢‚‡§þA(Šd÷ Lô¹6üÓ¿ùêóÿý÷‘dšN’uhÊÇt‡Ï\%Ô^ªÈnÈßè6Ü…ÞCsØÌ!IHÍ<äйÔWh`ѾR6d?!õô&f™÷€Ù9b’?KÖ5W\ji„”qªÔ:ÉÎ#D‚$ëÙÕ)S³T± á™ ‡Ér®tޱÅP-…ž©NêìZ›PÒÄìa™aó:þ[•¶xÂ…ˆ­Š°`HJþî™wÒ²ŽÉD-ÄÃÀÑ|\Ëô²Æ=«†„"',uºíRuE’ZAzmퟠdñÏõ+X¤Ý$(jñ~—cœªNƒaj.¨´¡0ÌeØ(":ÏÕ£È'½®Ûþ-i@~õ,¦58ÓQý¤n,!ÜQ äÃËæX‘¼ì…E°ÊC@éhf­Z’í&ÂV·|ñ“Q}j#Å®‡HØÆÄQÔ¢vrNãsíúÁ ne¤§·–æîüN²öbÝ:'œêGµ97 ß¹Õía>·è“C(ä*01i÷èAÑëìáT´?Éjt†Óçlÿ9}¿ìw „±9öÿ|B §Ì×UÌsCò’ ÈÚÅP1aä¯ í€F¦EÐwÂ:¢Ü¯p…xîˆ×Suv5 އÅ768óÌYêŸdÆdÌGðs§Ç_$‡ï «ngpálDñ_B-|¦ö²Y U–:Ž“ÜëI¢ Ñ÷ü92N ºªÎñâ<¼WОæìß½a-ç6ºRÅòêÄ\àlaGü†¯EÔ‡»Ý¸Ñ %ÌøƒÂá   #4™ô áëÜï€Ææëeãbl¶,ikÙçÀ~ÈOFÏ'˜© £·` Ïꃯ|r¤#9z°K¥GÝNPÍ ¿ÂЉ‰nµ¡õgÈÚ„FÃÜ‹´¹Œ5|ŒæÝ–Êún _>¡mk­ˆN h˜¨jí¦Nn^í¹Ð,Rµë h½Î=¯Á·FM&%êÊ»UklÎ+ü§SØÁ„c÷è:4z†ƒ:¯©@Ò878Hú"o{9¨šoaÍçh€bárhìýµéÅÆÝ‘>½}Ý]rnÖÅ„p“± ã&ùšÕ—Ëé 1¼ÕÒXãó|ãQd‚ŒP 9XlO3v¦è?æ¯Tÿ‚’+8µx æCzT&)O…CÁ; ¡=–Óƒûž*t‹Vû£Wºü}}ÞâœÛ1²8oìj0›¯ê=NBnؼI‘Bɸ¸û Ölœ ‚sT$z2ß?ÏÐæü Ò„(“H™¿FÁÓÙPW1xÓ׬qüÇà¯#¡ò‘’‘|z2ƒ3ws8FFµ"ü¨Ä£Înç±FmÅ÷³Û ¤`ö80'§¾€„¯Ã«s“|½"½-øÉÞq!{Ax¥W·T˜é¾ùôãòqÞ>’ñ¼DD*Ãê&uã9»¢¾;zx5^É8Ï‹ÀeG‹Õ¬ô +w½X™ ¼]Æ´Šæy#†6”ë>¼åJŽªÓ¥ gíRn[>¿)È4Ⱦ¨Û=!‘Ù³=Æ(¢åЫKTksvÊšæÙåC  ¹8pÞ˜Þ±Ðïë–÷p†ìv0ÍûEë„Ïû¼O1Øöùg¯Åó/.œØ*³Âìç3{TBï`ŒDâƒ,£Ç¹¡$Œ‹79z¥dÙ}¦Ç‘£MÅE],eëf +M¢ìyz|M‹Ó»—EãýIK65’¹„‹ç Oß™¼ÛG¾¹É‹?é…Oœ”u¬°”Öó¥Æô9Ú–nsƒ&‡_¬Ö¢ÊXï¦,ŽÇ)(ô{üð ÎþdDðqò¦í ³Àçù<ð]ªóʺ»¯p/ÄîùÙè¤^‡ÅÂŽ%Z·ú}:{ß¿DPx2æx¶û#{Lç}qî¹@ƒ&m !cÏý¥¯wGÀúdtiÑŽv”§¦sõ-Š×Ft¾ÿ\=P¡r„m‰`)qc¸óêÆŠ†n‡ì¶´ÙÆ´ÜÖ‰RGˉ&†_ƒ”ñÎ1®ç(wc6à;Ì$2üÁ×åL©3?ÃÚ›[ßÁ˜4Ý- +B’ì‚yBÞþ£„q4G¯›˜¨‚Ö:ŒáÓ‹GÄ0Öædv¸ôeµ²¤wb?* ÿ|üé•Ý^żnYñ1ªhrXò'H›óyì,‘þáîæiv åÝT870h—;Ð`a•å.b!M¢Ÿƒ[,nµÇ¡·k<1¯½³Ò÷ŠMnO°Ž»áF‘ãPNÒ#À8ë‘Û®ìôK¶´ì‚}Bò#wÈv§ 46Ëós_‰í–åiHOõÊæ]Gˆ‹ÜºrÄ.˜š·ùûàB^¾{¬C]ÙCã÷DŸ± Öƒ¸Q¾+%ÂæTWKœÁ(ÎNÔ¾\P·-¥¨Ob)sºB¤³ç\\e½Ù°f€hM‚¦Y(C•òãI_"ª1ã&jn*s^–M õÿ}ýŽª*Yž½wüì…×´W‡:a¯{½{$gÁ9òÐøAG|еM~D¨Ö@êÝ•IWó“óHUcÙ8=’%9,‹ɧXT^D«šøPòÎ7ÝÛ’Êvg ÜÍ`ÍlÀüu2Y KÃYs%Ë®RƒkË@NÊ~ÊO=F°à ëÓØ‘¹‘¬($È#^êó”« +x jÔÙÎ% 5‡·£9Î]ÞÙ8žôÆÃÐEšé$›/cußv è*CüÀT-º­zŸ9TÉ‘;š=¢ØA×îÜõ3Ö)ƒ5ØÀnfÄm?6ý`²q'¶¶Ëù2ôË÷_ÔªÎsèö÷æÌª®Ä'ðŒp Ò‘Üßîfckr¼& •R&XnxK¿`*qIh÷¾ZÇ%­)˜õ¡ð%b¡€AÅŒš€÷eÃì•^VÉtc#Øß[lÊ3­ÆÈt¨Ži„²,ëTÀCK¡3…5³Q}{c®d©vµW»W¸ Ø#6}-v—£™ï§Â™Ùcúó+ÄvN—áÙ£²Q§GÅò—i¡æX¬ÍÅTÛиßCÑYŒÛèUÄDÈ’=k”Èm8ç÷@%¬¯È¿zÉ™L‰’0™š¤m#¨ ªÓíTJÐÕó|HK +WJŒ+–U*fMÞÇe__nìóWkQZä:ÙþB‘>ˆ…Á7úÆ á<|•I.> +Í€ƒ“[#îö–aZ»—;òF^09PÆ Î^½¸†gûƧ¥ Ê Õ= Þù ÍÛ7ÅÛ)TáíÝ拏\ÿ\],f«ÌËsA‡¨…g‡¾É0ô2SÙØþÑ­x?øÃH-¢ÁH:˜Ž­ÄpGØh[[ùòB#Ôb;BÙé½jJk­É³àâj¹Ùú%šä]ÒCÊÈéò– +]²Edna'7 ħçÓUåZ6eÍJ/÷[ÇZR3ÏZÒB!§¹²¦9žú4˜É›*©CLsŒyÿxá³Ç⺓¬×¢|ð‡ÍÍv94r`SÑ\KÆ˜ÔØ›‡¨Æq¡s·£Hm+FƬӶHò£0i®EbrTäÛæ$Œ#¢Ö³ˆ•hIÌ\Ÿõ¶üçmãy$î¯2*R¹v®±v7´ÀñV2:ÃÌÁ[ßlt®©¸1»/Á¢†áÃ@~ÔÅüè"_·M= ìaA*)EY•¾¬î³>鈴›´­Ëm”(ò4ÌJÍû8¶âs…y(/ +Øc-õ ZEIÒ"vi+"0g²¾ÐTq¾">»fTØì·—!C[8·ƒ‡rx·âOî² #åÊ‚ËUs¬…–y;?y@Éæ<Œpd>/ÇÚ˺R›Ëü¼ë£Ñ°4Ù Õ˜5½œÍHÛŒ­@GRb€=møÌ_v9i“ÿó^Ö²)zU!ÝôélÐ}V™oI2á*+{ &Ûù—ì(Ï!\n®„£ÇnÂ$û£Z¬ô°är«´Ú·µo¡9Ó(â4Ö{°í³CÓjFt_«Ï^cåL•NÄ•ˆDxgèmz3|B%9ä¹£8¾Û׸¹",ÐZ¾Ž²‚ý­.æ‰êÓ=:šìzD½Èú€ÏÖZwîp– bšç‰çdd +n¦n˃Öììxá•ÔW=%BºàÙð;ãŠ+ÃXò?°rxëÄÝ2 %ÒurµãÆq‹ç^vÖöÁÚ›Ýò™â^C AwI™òz ªÖ{:Šj¤{ªµ=¢A1Û‡ÏÞJ²j]ã¶2ÚB>´…|¸âýaãphK=аyTŸÑë¢T[é%¨Hü£Û!WÉ-–bÀY‹(Gð§†JGDD1õ … âI*ÆX!ìbl­Ë|μ™9ЂnvB$Ž*lg¤ +wÊFwõ•‡‚>·—%x>çœ _®4s:9“@²ºzÉ``¢%˜)•l…òòÁ¶GÍÑÃvÍ –µœ—€V vîoÓV0!ÎBío|ß&+gœçª¸ÕL…Q¡Ñ~¡Ú2i)ì´Xö ×g*J ³íìD0EJ0E £‹Ë9.犑،‹ÿÆ1y ËÙŒS²ŽÆ3‡ñA[&$F^Ï×CÉoÅÞ5ês‹RcÞ,ßw~rF f&±m΋–s.b™Û¶ÄX ã0Å„¶Ö2¬Ñ9!T‡î_b¢Ìs’bñTŽpý™71®Ï‹êrÕtì >}øÎö›Œ(c$ꨯ,ø‰sËè€I·ä®^_È{߬7³=ˆÔ9þÝc3c"§¥µ””ã›ð¬z}Ré±ZMµ1`’cÀdÉP]Ê +¾l^B˜y¯o{àÙáØ ¥rÄ„ni\ñõ²È¸—×ù4¨"el•XÄØÚb§k²~ž@° ÝS¶²è®¦ùê¦ovSÃcu€ˆ³¯±¹ú˜¹×¸* ƒ‚v–ð²\›7f9u›5›3a ™öZ¢,éÔ|ÿºçîæÈ‘õ}­Eð +´Ö⌳Ï[=—å¨#8ç$tº°Æ²®±syŽ‘)"]]QGp#FÌÑè&™ÊpeNÊnñûm1T>úº+¯M>›ÓØåb$EÔÃàÄ~ìÒÅA<É÷+Öìè€`>܆³7윕Ûßo#x}.K- ícµ(t5à§ÐeoéïV„püÖHtFd9FQy3oüµ<‹qÓ~NðφH_QÕ³I™£mŠŒwðCÊ<fN=qPU\³ÒsYúE:Y²ÝÂôˆùyüsr=OÜbCUx¼ïRö² ddø0:³åV$ÆÊó8-BxYP€têcTXÙ¡ë£0µ¢œuÂP-sæñ’8ÑꜬ™¾ÇÌëP ÷5ß_Q¨äpÆŽãf–Áµ1]oåî&Þ;j{}‚î³ÛÜ`þæ$jÍèã ÓzFö|-Ìé†y³™ˆÀΠs‚ì¾ãGGpI@X£Ú<ÐàZTjÑŸçJ½Äxo#ÏgñRXÈòKb12)êÐÖÏ6ˆPb_'Ñ_ÌD‹1ýæ'‰\È„æasxL¤ýuzXBÎýë©’ÅšÔJäyÜ·²Ÿnš¡Ïnĩ֥Í~2Éä¬5{t«ÿò¤øì! ‰oó&8(™µ-®{:öGµXûBf…³çy›´x²pµP[a0QÇ·xDjôÀûÆß‡çnöhé¶Òð˼ãË …Ë5¢sïÓ‹Çq#Z¸ë²ñ,{åÖG~Ýü™” Ìѵ÷<ë«ýx•TO[…ú67¾ÝõJÏI ½ø‚°ò¹Ša9qàc^Œo'ï¡ V-´æÍóæ÷vt.Wϸoâ"Í+ oâ,áŸ^Ö¢„o; )ªR‘8Y`‚räl:{yW1ÿsW»ôÕ­s‡ËŽBL+ 7Å)†Þ +mÔˆÛÜ/UvÖú‚aÉËÕC2ÊÒfþÜžµõ}ýŽˆ!£dÓî‚n#ºv+ô0m ”ˆ›«ÌIÑÀøHƒº+çЋ/3ŸÔt½>ÁN÷=3U¢Â!DÏNÐsÈÝOÈŽœL•Ä£2F6c} ‚Y”Q”k‡«ÛaÏò\ó…óú3,ÙÍʲ Ø*)Ë=˜ô5˜\Hñz` y­Ó»Pa$Þg}SÑh^ﯢ»s® T®¨¯‚Û÷”‚9 /!X-IC¿¶’%‡"â5V›´¥©§¨t:T’„‡-2çí ‡IcÃn¤îf®¹ù¹0†|‰NrÐEzF£Ê),{|;ƒQ1¢ßìÁÄHJ´èÙ.wôp„ÍG[<Ó‚‘Lá8è‰S +¿iÆÁ*.Quð½ŠCËÇbº÷WJÕÓá#D™Å­léÈ­(ÀùΡ3ŸÙG‰Déœò.#4šºc•*YX!Zc&©³½ˆb¸,¢]B¶ôGlS¨Âp"Õ²ù6ÍšHª!o°»©Ùƒu¸=<FE€Û”1A?ß>A«¡Ù –¢Ý´âD)h]Àµô8BSéòWÕ®œÁ*ðæ'±Â§Gs8!^µ×‡ò(” -Ö:S¢í¦Y©dêÊ“p0Eá8âag«ë#B\¾Ás/ÑHŒ#φßÁ0²—‚ÑÞRêùYíŠñ!¤’nÜç äƒT°‡Èn.À¯ÐŸ™È"±½Ž[ëÍ?9z¡bVbgˆèéZ¢nà¸4 ç‘ãÖ¹ëK[ía¦µ¸¤Þàì†ÆGühˆ¹JQ•„5w÷<u‡D[œ‚ÓJ}Âç(õóRÐmÙ*ÔвºPUפª…²¶—%GgjÈz­A@-y®ÞDZ|%~ VÁqíÏ…KœOWcq¯BÝá¯Qôqú›5*Gæî¹çp¾DíK’·„,°uw·|)ÓeîÒêXÓfÑ…"NÖ6¢Eüñ†þôhl°Šû.;@ðu<·x=õ¸œ®÷øÙ_"¯t„Ž + Dñ‚ªùÝqpõ†6ðDp¢ƒb<ʧæ´ãWþ¾zœ«ÇVù!„D‹Z°1ð¾cOv»…”¹¥ÌZ!«¥ †ŸêØ&|fbdq]µžžcíüž·£BZá> Rç…­NÞÜ\,f²~㊥d%++¥¤ŠñEÑê¯lÔüžçjØmÎä¨J s¸NÏÅBr™þ9MÐC±]tvÅ8¯9=S»ÅS¼…cwy!ÝGèã‘Ãùœ3ÂãùÔÓäô@!íàœe¿f|cÒ™{0q yé/3I«×ä­7û¼2‡%j€ À`v©H®’â•?/—QTbÍÕn*º0g%|cËhøŽÞ̹¤¹fÊ¡c­à¡°‡©a@\.ãžèÊPI”$¾õ(®å ˜Qâ ì[+/`s¾Ø­×%^«êˆNmRscš)zdd0`¦ÜýôaN6×F+1@ߌ·eµsÇì–Â#Ê}O-s²çp„4¯ï0ïU‹5¬ÿ©œt‚}rA|~ç`éæûØ6¦µD2[B·sv=<Çjô5Ë!4{Ä®S! ©vשØÊ2÷Ÿ5>a Ö*$1˜ƒ9·5Ÿáj®ŽßõñѶ“fô;Øýþ„9•1ËõäÀxÂhåj9vdêe9¥·rµæïTZÈJ¨È!ÍÈõ\‡èÚÕ®hÀ€O4 ’ M+îÎD‚Ò{>ê;(^WÑm¼›wV“ÒTæqn`Ø‚:)‹tBòœ®ý¥ªù[/uµ‰¥”ï¿æ£2ßoiš2ë(HH^í@ÙšBš{…84Â(ííÈ5ÒíŠÅ‚æÉ.±.Q×ì0äWPfæb{˜ÖŸ_%Õ#N¶Õ¢(œk}R +ßéùðÌå]|fÎ&ìIîpùédëâcá¬Þ­èpFlœDò“ZDŒ,q¸]¿ˆÖœ±Š·Í[Hz$¢OtnIÙ*¤êÎù×Ù+Ï÷q§%ñ,0+5"ë›4ì9fdÝf£&†tCé@yÚ˜„§±ÊÆšõ4…jÆÕ#7{äKࡌ›µówÓj.ºÕUš¥z‡˜’sa å\®UVFØí 2¿ÒéOÞÉ­Ø!¾RÖªmý8 ‘1?fN§®µ)¸Ë|¥²ö°Än,Fjëù¥ì”o”‘6ƒUŒØ1B}U@hߊ_öᎪÊ¢dÏP6Ù6rªîž ö’€Ê¯dtªÇ6nNCô!QC®DÍû6Ó—‡G/Qúé +A‚[A¬Çâ9!ýæ.*¯rµL‘Â<²"0ž‡%$e}—÷¸LR–}ÉlMŽGD±pHE¢ùü©ö‹èSFµÖû£G¦ŽÍx&Køìr3Žë9Õ윩ÉãB Wu™÷Pœ#,L’â8­÷ å?9}‹²²%ºUðøÏc%´²é*lÕW”UFn÷:7qdj`Qi)¤•j5JšÁ ªn+úÂ-”Ý%\PŠ+J\‘ʈ+`$ÎÛÛ“¤äåZ¶º'PQãb–ü E·¤ZrHmÐyò~vöˆ=A#µÄ8Äš*²žÑ8«ÚM‘Qoa¬N¯Ë‡ûX[HìèÏ8QfB,íº…AǪyÐN9ÎÑQ©2ƒÞW˜Â4›¯RM¨r—)CÂÚJE,h’eU崺ݑìmQEX–RØ¢IQÍ5Þ`~…¼'(RÖú™÷¹MÎié%Sè%++¿©¦2¨êñíŒ=íÀscö(¡ ÿè{ZŒ‡ˆE¾ô‡n¨I¢¢HÇÊ!8Í¥×09A!oÁ 芲ߢܔ |׃žëÕÆf6Dh±¸¦P)…¾Ý’ÈÚ 9„Fñò»Ë•ð* µD…>{O4S/?}l5Ù4UDÃÖõ«d•êŽ|-UVJ_sïßRlOÍYU~f>>jÖïüÔ>ÕóVµ†Í˜jÀy{ù¦‡>’QKxeKÔ+) +ÿlXA‡þ9eOìëýËŠcè¯OQ•öçw|,"·ˆʦúîÖcÙÊ“dwý¾6|s|Fÿö÷l˨ù¼8SHgÿnX·T^bL2žéÇ÷k5ˆôá0[É_”Qœ”¹z(aDyl1àÛÝûÑ­¬D]Vû"ýœʪüR+5ç¹K}g]qŠ Æ«Ì—Â—3Z/3*ššòº4*¸G‰ ZèPórˆˆ[ì(jÃz­:¯k8¾î÷Û+DìZ¬Ëú`¾Ÿó²ÇÉbcöhþŠ^¨Ñãˆ"‘ªµ©Òíq¨ø+J¤‹‰ã(”ßÄ?Z nÒª8…[T‘+Õ# +£.»îˆ2xå©s›šJ†J¾¬] \èÏ‘äúú¨(K«ìçÂw->!¼@ðqŠèÌ<¼]VGG +ˆ.¯¬bBNÙ›Sصp”Ås]fЬltíšÔ³îQßU5&VÒ¡&nA})b¼XŽ{w ¾œãxj«4=eKÔݤ¡øª–ªQңȜ Ïe‰d=|È*‘Í/ò²è×ãe…#’ÝvSÒ˜g"¡JñQÉRBÊ–FóPì<'Eo‰#dUÙmp\9>*å­*ëËázv£.(ºÕ¹Yõ¹ð6ž‚U]s¡èƒH¬¥)q¨y•¹¤0FØ)ô¨FùŸB› ô`)ÔÛñ ÈP"uK5YŠ;ÏÇ0ò“¹6{Õ—-Êúyn­,¥Í ƒåazÊ1sô•1€ï,S"Ç}v8â‚aå•h=hÈâðŸ*/B“×åŒëR¯ð¯²€à“†2ÿœC±›+ë@¬õ­Æ¿B=piCÁ¶q©ꆡњx˜!RËïê’ô…º¦Æûs,ºÅ^¤w¹Ì/¥°ô§sð"ϵ¾æñ²Š‰¤ð묤Œ©ÂˆŠcµösyÜ,@uCKI< Îó5¹~¼?Šóº$æ$j¸=Q'­ ž25o3ò³¥.à9‚>Ê¢¬‘¼b_‹¾õXú–G5Ûb?Êp|Dðáû@×¢ùUV*5àˆn~ÄfÖ0܉üCŠBjùŒõµNž.þÊqƒì-Í%t‹"[×]H¥¼§ØÊÙÀ– êvÄ-ì6nö8ûÛBD1 Œ‰ÃûMïˆ*O+xÜR0Ä-ßš=Zs¬–+wˆ˜“¼®å¶Fõ"OŠF[–mÁB?–ƒAŽ2²j£…;ÜŸ g òéœûq¯y~èv…¡“59b Vúj[r[Z1vM0 0^0f&@¿E­Î™îPŒm«Àh‹óÄÜšž7 «[wØk¤#$c8ð‰¤=E-U’$„oï¹Rû¶b áPz€z×éðV» jjW¸œt­Aêò,RÆ=.6Z³G +Àö*\:¥Ä²Ó—ÑîsÅ Ô¶µðc€-@ný-ê.Ö¿D[l6é`1Ñ ¬õ>þêCÒÿg *‹È÷®áDnBÌîP +‡CäˆÍNëN,ÒšJC÷ÈÍ¢ŒëõshCY Õ|T„T/€Î0¤-ÏÕ›aðÀªÈÄrŠ;iNá­­â¹ \Qd{oÏU¯ NÒú~ÑèÆçª·ÄaܸT²Çò-¹Ë§²:ÉÌUT­KÇXÎÐ1îÈ(±#0>¯uÖˆñ b™¯ëé„H1‡œ²µõ=Š: fP)ûkï/r¬QÑ:•ËéØÝøS$ͬ#˜OÿpBDQtD&é¿pøÓN„áÞ–tìÑ ã8Gƒ"­bÞZ“ÌE>á'‡ŸÎ|ºOuÿ„µ\XÍ[$á\wm?:­ê¶'ÝñGy¸Ò)ýAB‡ôG ü>-qH]ŽÔv3 ²è´WXmà%L¥Ç–õã´³NÜ‚.ôúÏ$Äß=vÚFha¡Ó:!¹ŠjùŠèy²%Ÿ[W +î@^ðuGïãñ=ÕUzâô©¡Ö½~7hb"Vyjlªcë0ç"õp_ɪv®œÖ\ÕsäS° imò¡±/ +³“¹á·ú^m†ÖQ£QÛ\uÊè¤GëÛâ.}ÁŽö”‹±S!çAP,¿Þ>J_¬&WXÆYÎ4ác}’¤Cv6×q¯U ÀTÛÃrn\oL*Ñ#8k yÊK¾äF€€£Vœ¢Tä/—21F·¿< HÍý(+Zþ,Y#]+Yu™™O&‘â?ÝÃñ3Ƕ¹[[å¸1V1—ÏkÕ£Bm•çV8§†Y­þD…­…€$ ëŸá-·× ðÑm¬ÕyagñÚ+ì«’nçRF˜§2FØ}iºˆ’nK­™ +–vÎmËfÊÌ[u{óEr(äpSÒ4ES·îN·P¼C˜købgðéæI]ßÑß>à +¾N_€ò f¢X¸"kE™åMÈ ŽÊ1ͬÐ+[¶ð/æì𺯴ÇëQe‚ UÈ0½—ÍÛÁ‹~‡Í.„ÖÃî_¿N‡íùü™{'ÐlÈ7ofæî¥bXÂO5ösÄ=?ü¨Í>s¯B«“(3¸=Ì ¿U”9¤zÝrä÷ËðÙœš|äÚ*… LÞ–)±¿|ënrs÷6&éÚãž Š2D{á’ª%`Χ0vzXuÒêq„«ëJ~"¯Cœo'Dd´fû¸)­z˜¿p‰ MDHêˆ%ÐB£7hÎøå~Ö„ ögI÷jœúú(Kâ*¦„syލkð±Á>(TóGwU·Ô˜D–õÁé s•:ŸyIVìßÅ,?E3=¼QdEvjD¸ý²H(EJÊ3¢Ææ)ªåÇÁ +ÖXàç‘Þbáâ'iE|Œ·L׃i‰«*yÅem?À2¦piRŸCZo1Æ®EçöÔ Ûº% {Êú5È”]ëTkªš·(‹Õ¯åÈ–þTŠÓ®Õò ¦©¾£sÒ²|BÖä¼®ˆ|kTÁÍy¬b‹ã0o_"œð™Óe¹åZ3ĉ-Åí[£Ô©ªb9ã›X˜EåS:ù¡+EZVÁUüË +ý£Ð. jŽå¯@t¿…œüfo!pmvëmYbY«RñçmQŽš,¸?êœ_n¯6^åŠÏ–NIƒ!Jžõñö Q–z¬KªcÏŽ=±&PÔ-xݧ «B¿z.û'×;H +ó2«ž¤.Ûë“ X[Hõ]˜a¸C!Sy…}Ëi‰>šE(QCt0ë·ÈühÏ€ª".8¦ÃCøýá( àx‹{85³aŸøˆŸ®]æánoü‹‡°ëûužÏžVP››;A/j ª vrj`óIþÙWt(‚ázZi¹¦mM\…¾§éZO\˜¢:ío–Ú8:§8 +ºiqÞÃÈÙ£ +ÿé£òî#¥®RìéŽ7ã/I¬ë0õÓ×ÌÂ(ÿ¯ç2ÎiUY~”¨ _ ,jFZò®GÍ| ÚíÑ—Óú<UBÏ…ŸP|«–ÕêaT š;áþêÊ‹/ŽÛ£1/Æ´ª³Œ¾Š‘´9°û¥A'$½ì ´UÌËV±„ËoœÂ`#n²¹™q­]64˜•In‘ccO‘{3Ši«E^å+°þÁž¤N”×ÝY#®¦F)îOq-ªqäÇGÐá{‘ƒ˜Ê™o롃´}j¡z^ñÔ…­Ø +x]+o®=tu40hQ1`G?1WŒýØcf »±ù¬…Œ¼Féö’}/~jxÙ1Fõæ“&Øæ†.<ë2ìLÅa3¡ó k¿P‚Ïû)å¾zèl>W{K7»•P‘P»ÊÊoPºÐCOUã+ ô‘rÈs/3Öª7¾B$Àü´×:.  +ŠTn+p©¹Ü†ÿ}øŒ1Éõ~{ï’úBmv}\Ü|בœœsží®¤Ý„LÜÝ$%×M!tš÷KCyN´(ɾ¾€äñ• Ç˜[µ‡:k~¡ù4Çô› ¿©ð‰*räó#¸É&ðHøJóE­ÆŸr»•"Ç9˜wwÃcRtÓô 7­d­9:Ñ>Mbn˜‰©4ì8^I_ 'i!5À“" )Äd^¯õ~uO<>gV—j +›d{”N×Ë–…ýÃy©ñóGsBv"N»X(Àu4¹rcUì&±Ê&èûÝm +5$[mð[Î{=€…V=iõ éd6«¢ñäí*=ˆJé6óSø¥~й`j†&­¿›l÷Ô7êFzí8—¿¬Dù‹3®±ÿ“@¸œ;@ã&`ð>nñn;BÄSî|7‚ÈíâªÀî²]0j¿ o°X¹jq€–äKü¾Gl…»Ì2?ùûw€EéÝ_ªðqªÃ:[å‡#{ÚÁ€|Òpa¬;«¤ú@ªª/4ÁãeŽ&,‹¯é+±ÅUl±Mq@ã†Òj›7ð1·`‹Á1jäf1„ÓŽ`Lœ³R‹ôPœ|Sûçe½J+€ŸB‡Ÿ’Â/=È÷’T=æ³BØß" ­I¬Ø»Š/h½·{WÑ7)áç½>r”€êm3+K~LmäxC¤hÇ)✌àœ4¿­7!þÚÄa5âûFæPùËaD‰ª€kšÓSéâÜðPu›]æÐ ¡s”9J\Ì,Ïf”Õ-FÝŒ 0tú€ ÃëS±ôé!uYmW‰õQç¼^~AÙ8…›î%Εþœ‹o¸à85 Ÿb{&õPÑŠ‰¾ø/]𽤚Ã7‹ª–1 '&Ä9_ʈ/èsóËàúýoŒidÚ‘Á—ŸÓÝGß;¹š–ÂÉ ‹-ì…¥-N±,T TFUSzXï{Äd5ŸÆËIΚ*Í" ñ?×1Bnž}×ø¤~Rd–‘WjgÞ}×ën¼½VDðZ¯8ah`r »í+Æ÷WÙè{ª2¿¨}-é°«jH} ãz™ m!’ÛÀ'k„„%„fi#“Õò'èÁ‰ŒÏ^¯¯êog‚ +H (ío˜—:TÀªÿ\'Yàyœ+(¬E˜s¿¼Îõ^Ît= .·ˆ¨â\6‡ìÛ0¿DET’âùòdE++J×¢Gò©9 ¹´¿Ø¿pYЮ¬'gsº¼ Iˆfèã[ñv¸¹"S”‰o¬Ã+21H³t”{7hÁ+é×R»ªÞlY¸r Q¢Ÿ¼ï”¾ûåø_Ó:(|qµ ÉQŸ¬Ø‹;9ÇQm¦Šxœ>ùcTÕåLûºÍ,jàÛÝ#™-Yô‘mâü¬—½o± +i>¤ñÊA’E<ç!rÓä}éúsímÖŸiš,ɵq ú—‘šSžÐL18åè +nÌÆéÖ:Fc}É«nni—‘ÁŽH .˜¦i6“š®±E4éXAK{¾=)&!?£+Ð)™ +rÔ!êâ×Ú…u$ ÞŒ®w¯„ e¿(sû;v»”õRy%{ÇbÂØ°Þ$?` ^²62›Xc"M'q›  ËÛY†ê,Ãã[F¯É>–jâÞ ÔùÀÑ+x¦‡Þròàw0 ¼®çD>¯“ºXÔ-(ƒ9(ƒŽ(¨“ùm9r%F4£`·ÙkÈØ$ËØ(yFbDχ”Ç´ð”p,!©ø)/kŒë?²JžÒÔ1O[„[<:§¢‰¯¹z{(ß„u³óñ· `¹FD¡ +{Fði_ï´Ý—ÝRpº‘")Êÿ5KºÂ²— 7GŸMÕ<¹$ÕeõÉ ZP™›ýåš4— ë¨É)†\ÊQÓ/].!äe'Šñžú)iB$d,›z8HgŽÁ³ÃòãªNBrbR[ïQà)õ¨€vfÁD-Ò‚¶kµš¡„A†HÖï{<øÏ$Ö>.¶‘0(èµØÄiÖÁ“>é‘§\5cÃpR‚ºu‹1®÷xBZå°¨­ª…s¦@m0½ùÇϬJ?–2Á ã˜ìö­9bb(‰$ §_ºÑ̲Â\³Â=¯ÈM&#A?,ˆwZhøÁ¢ƒf¯¢cHïx:—çšG®Q&ž Óš´ -º½š¤w¼>WkˆN ’WýúŸjë–ÛY–º@ƒ+&…Óyüž>Ö\7מ…b +ëhðã•,£°:7>(ê¡éoè…Ëy´¶TëlÑCê®Ô1Gr7 +9K$öãOC®R‘¼$6þþœÝã°4{Ÿ¯#Ìur5jm­Z‘P ³tԈȽ iuÛç– &.‡Fd´Enëñ<€íÎ:š`¨tw'½Ä¸½^¶d4 x»„wC€¥‹©ž}ÍG34’$Oa#±ÙÓ˾qiûâÈøDQqkYÕåC…Ö +ýøóº5ˆA‰þêߤˆd°ž\ÝÒì6é1• `ËŠ2ýÀz:ù¹ uEjlÁs1E¿°^7BPæ†ØËûå홦“¹Gº.±âÈKäwÛ²f½âIäoJzxëðÄâ»Ûôd²ó¶ˆ+ +†CŒÇL¡Õré…¼N ‡«(hLÔX­=麮kï /¤ov”Bà5(€­…Ú·":àºCˆ±LA¦MAä=•Bá%‚Ðé…«ÛÑ’“äèåÔà +;š”KÁ:qæ½ÊÍ&m^Æz½¿ +…×á¬Ss´Ô¢vWCs•­HºŒƒ†+·þRN=XvuSsîCõ“2¡*WTjõ„€N/û¯d+ZD§ +! uÁÛzÍ";Ðcîí¨\¿‹ ¼(¾Y?ÚœŸŒÉn²h¸6°âÊÇ €êqn‚è¬ wóû¦\°…yhr-æh€É"à!- ÚzÚ÷½L¡`º§èf[ŽÉC¶<3 aâgÏÅ’¹_í£±†ƒ‹ƒˆºˆÄº ¨×§- ×YNÕé±uõ hãÕ ž!€B¤ˆ}Žû~~jL±ê£„ô®èr@΋ ߯A’ïïÈØ¹©›¦](Œv)i"ª¤9t>ÊÕ½ýz’)š½bcÓA}FÆRŸ¡iËyµàöÞ2øT•Uë‹¡ž|÷ƒtmhhmTš…ê%^ÃÞSpÁ…$é–Is­„Ã:.QÃ&#ZÛÀE¢8*ý_ãC»¶Ö\Dz‰çYíÕ¨n¼Apq1FÇ/²÷(#(Ÿ2$X–øî•võxÆ• E«B+ÙB—2{1OhHz×H9ÓÎ&§˜\ªÉ­Dy½ËïêP>³jÑ%7n”¶Ñ­Õl3v¤S(¦A(#Ôª0©ƒÇ¤ýwõôE|`_ Ù§uÄŸ¾ öV€ R PíËC¡º[Úb_ +›‚9)™+$f-²'åXD^¶¢©F7!„«*–Aµ,òA”y­l\ÄÄ©8“D‘‰¡¥êd² °¼y½¿²W§ø‹lŽ=ûJU¶%ñGËÅÈ8¡îÍc-æ±¶8[]HLjÿ”)9‘’ÍÊQ!ßP!|>:¤egüb 3!”’[>üby,Ð{ýuîF· —Ñ1Þ™vFbËÑòÝ;zle`©»Èq7óÚvèùä“ÝÀ¬Íi{C9A¤ t-²<­Q«èr66ÕZ»zô;¬Àtõ™là‹¿:>ú…c H§³ˆÝáÏ>T[‹ßek Y‰¯–/ÇKMvB¨tIãÿvžI=ö” ú’,¯~ö$T‘ãÕL­žXéBX¾§/ÊLo5.³:¡uih ˆ@ç>ï¬V*Q%’ÛUÁu\5XÐ[ò2³&Ë0ƒ Q¥ǤI ›¦J æ̬H£Y^ ÍbÃ6k‚³ŸhL¥BwóË;‹ ìÿ†3æ°sLÍ à:? Y…5_ÇÇ®†³-X[u§EdÎÃl‹nŸá>¶áéšJÂgAµàÎîa¨ƒKÁ$Y¼yö7îLóÝ’¢ÜQÂ\3ë-ù‰aÿ“t© +VÂ5q<†5©&¤/Ü|)ë-¹<ùÙ¤à‚Ž€tmDͶ0«öÝÓªÖ¥^RâRz\Êï€Àdg½ ÜŒ²YW!^_1ÜÑ+ûy˜'G¼‹QkW.Ýc4:˜êËóS5ù¦Û½m€Ðµca g‰±.ÐØ— ’ÐjCq5K³©ë8+r=ˆY–êPvo×Y­Qïùä65Dú8*e*3æ)+hY'Ýåff¿]jBÇ.¦¬éC,b +bæ%ŠYO75¤Ðú]ÏF¢ÄzSäu åêÑ#uõßF Àfu+©Û%æsñùÎÒĤþ¦pÍ‘$W#ìZЫEKA!Ë×2ë#vKÚŽpgPÆèþ$m*nÚ-/kÏæ2bÈ2:Sðs1G“o—'?‰‡¡¨†fq$Š1©dw‡j.ñ##a˱+¶·È|¢NØ^«LpzoXM ú;ŠB<Ìû#ÂÍQ¡)ÅË,Ö¡°o£~× KxßäÄÄ„*:«{0wÒ£„’…ùˆ“Ÿ …n‹Í5Û žËžDñ5¿?üS’q¡¼ +ú×Pĺ¸fî!­ ¹fÝ=zˆ0—…°Œt@²ÚUÿ?¥Ì?Þ¾¹Ü(·”¹‚ +ð…öPóP}õâäid|ßeÞÜl¨§~Í€Ú] ¯Út¦ká™Á@v¥‘ð@m‰"SnJû +µ‡ Õ”ÙG†m¶)M”±Kƒ¶\I=`”†oJ-öMÙ{²ð~PÈOu‹¹é(h3éX ÇÙ— HkC¯isõh6f¹Â?§»ü¤k ´z`èéå)8B|1tG¥çÚ‘>N‘œÑÞvEö5yAâz—k¸V3xh*ß L{Á6{Áj©DôSžaÈ _ú ä[¿pIûu©Y}²óÚ´3mz© +ùmÖîõBÈ­<‡°i_³Œ€ý¨:PÁXH—m"â­ÞÓ°GorˆöCBr}8¥r ÑODFljÛÛªvÚtËÖGäÄPÈXƒªCˆ N<Ýáò_jeY bJ‡´I­›í0}KñæÇ=Í£jôʆê“m]’Ý®~¾ôBŽVÊC.æ±SrFnŒ¾oD!BLC§Ê®D{wœ¾š\l‹l@êÛ…z¿¯+Ùnâ9£vdÛd±uvóW°!  %²Ær¢7?û–œúØÕ=TQišPÆzÓ€;I1•ÇrHìÏÊK<œµW_½AåÕÄt»dŒÞk|ÍÉDÒ< …7ËÊ8]Kb­5âyzÐ:åÙ ŒÎ°3 fQUåøûnH’ÑïD”Ö…ŠSi@ëA]áqß`5Ñmº€iäç_d% +X©Ñ¨®·Ê:”¥®É“ªAθÌCŠÂŠpñg÷ð“Ï®[0ÃÞ©±•v„u(ùåNa1Œ½Iä˜_èšWï+"i-+K–68"Vw 7øqž\1¨Pl¾è!%ì„Td~~A;'¢¾$¼QXÝ Æ)S?((ÊŸpWþ8zˆü ÚäÓ¥HÉ~èq~å±éfDý¥±¨5T.)šIDÚÉÆÀèLæ³Zo(.ýû±›žÞøø{Ô"%‘G–„}&äNàB”åÜõ¡ ±b͘¼ïD®ìTE±ÆáI‡—ì:iá`Éä`É$ë ©BÆ-‰ò®G$l¦‘Ÿ(`ç^>HPKü£†veÙæ}l¿LbG%µbËûnz> +ß5?YÃÑ£fåM«Ë*@ZÊf1Õ’åd©¹s±:•ÑÈýÍÝÐ$L{’zˆ¿V‚æ´z¨pÛ”QµÊ¶\é¡Äçé3^šyÜÆèFRèŠ0‘b¢©aJ)‚[þ‘¼,¨õ@™Zôã¼QRV¢ä}ø©aë׳%qS麚ÚD®¤LoE“éïZ­Z5ÖA£Gqú¹6WòuÚ¦0'ˆY”Ù)‘‹FNV,E‡¬[%lÜ: É€1©±þ“aQ‰þ”îefÛ´O_¨0©®ù§ù“hñ ÅË[ÿVpxç '¦oKæ+1¸¾qܤV./(v îe\ÐÚHYˆ·1ä§üHﯶö“Yï j¢ÏD!6Ìëž^öÚX¯·<œ SBk®Û4K€)W(еG¼1i!v:Qö#òb•Ø¿Z÷ØF:EUª‡æ5õ_3a!ì}l<Õ…Å¡&Å1ËØQ@m¥ÕCÜæŠjãô¢`æešvô¦’“ft“ëêÂ&Òb÷OUM1WŠËÌ> üÐ:`âäÖS”óxµÙ) ñÎ(EÐÌi òšø¥UhïHË`!rvÙp#ó²p–bB] Ÿ‹§ªŸ¥˜! –ÝÀŸQ տܰ›XkÝ–·ÌJÉßQ~âõ•šôr¦Ð^h¼íG„®´ {hO&£ŒåÔqáú\ýzºˆÊvÛ]z¤ÒüoÁ ( ‚p%}On]qµW7»÷` Ú`§QìrBÜç¿`áºfy~éC±'°ôMîðü‚vckqÔoéfÑZø ~,…¬F÷ Úȵ©Ñ??ÑÏVõVe¹MŠuæ(Ÿr”Fæ¦Ëî’-ÙÕm¥DÊúgRúý +ü¡G<–¤¢·ì·D|¹„%ñ¢$ózuš;5¬$Êú²%6š#ˆ[¯à½Å»±«¡öÒdòÉ@ͪ”4>ú"äH’<ºÂŽBœ¢ùR;·wƒxT”›^J·È(ÜÁÁ—5¡uè@ï‡YŒ}7Ñ ÒðË+¼QA°îQ+]ÝF€F¿ŒSà¯ÄXˆdÄ ¯ì~ÃãM8Á{6•ÆŒpYŽ #ÆVŠúã©/ÆìñöŽx{™t)Â1ìväc/p·ÓžCÇàëqŒƒÉ*R’”ÏŽ{EZ³uÃæ^Jû⥭9¦^®ƧJ%é2«¼KkŒ½Nzèçò nT;ù©mÀnÚ»¢/V›yjh$Èr–]°Ta´ÑW‚.2ûå·«T8ùœ /I¦WEÞ¡¤å… ¹òA{Ù°”¬|®,Ïï°<ïèÅç]P-ÏOåx‹}ªˆºOk áï¥0(<™=e ÞXˆJ+%=Ð j͈¹µß9’¬¶ õèÆÙÄÛž²ÐËø·ßlP˜’5úµ7ƒVvU²¶õèĦPÊE„´ØÕ 祤Fµ ӧ왦ÚTU!!«ÂN^|·aJ8/Â}Ó)@èi­°„:Þ³:6.Q\2‹BC…ü!±dö9 ‘Jd&J¤Êk:Á‚ðQ$YÒ'od»F­ÝO’ §ª•h-)¥[öZfI삱(m(´Ï®•üÜ@ÏÍä.ȉ² 7y23Žß%UqËoï³_ÿÑó–Ðûcö“ƒ¥·?ÿË~ø—·?ý‹ŸÿÍ/~üñ»ßýæÛŸÿë·ý‹_ÿæÛ¯øí|ûÃ?}ûW¿úõÿùw?üÛocÐÏÿäo¿ûíw¿øñ»_}»~äý¯ßoúgoÿð÷üçÖü·×|!˜Þ$X>UÞ&q1ßXÏH&gNH_"€h‰Lð«”b`>B€Ò3FÐÿ>`úRP²™Ö'r•¥¿¹jq™Pº$¹] […““ügŠG±öQ¢¾:¦±÷·)Û¹eœ´ËÉp/ÞÖ׿>MÇ# AHÂJw‰~­ÇDá!ÑrüžVTÇb5dP4 ©ÁëC còî½…¾S’ÇLi™ßÙxÉFê`+È#ò,ýŠ- ÜÑ›UÇ{ ëûé:4 ƃ ÉÐB'™Ó>ä.v‰E%„]ˆï{·Wí$î{ëãWö¹36FÒ‚Á(dÍEÔˆ¥š}#"’…êþÖP¬Øa¯‡i=:ݵõg]zl·Å}DLqÍUKK=/Ø¢ªò±C›¶1^·?¼Ïï%ä,rätÞT4-!G’báZÜÖi›®‚®=÷xÉÔ䣲Êì@©3V䘢fYEçMd·BYþQ%ÙL2áû³·8žË×§€)=Õ¡þ +'!ð’ÝoŠ«íÌøGróM|91Q¯`þ¯$o$2$8:j•Aì &&¹Î¬•Qÿ²œ@Ý&Wjcc¸ àCäÉX2fžÖ%´Äd%;=t*úž8üm‰q&‡]DB\taP–T®È޾ߺ掉éŒñ’Ç;<‘Fjh‡HȈØzí¤W®èªo<¤Ï›~A¨‚I mŠ=J8±d‡ª•ºÕº–¡}—ù6á&]E|ÙlѯᚺŽ{´Bëf§MådyŒ}Í(R×Oþ³šõ<Ço#f°®äpWèÊBPÜçÊŸ1!ø4¤:H}oE5˜’@žAÆU–óoj +endstream endobj 64 0 obj <>stream +_‚¶NÞãºÕ#Íâ +Õ™Ž;Õý6`ÞÁ¤—±ã ÿ÷uŒv_áeCd)©ç·ÙÐÁ6Ï["‡Ðn(É8åT5—H)kÍ%ÀÇ|v$µÄ`â(›8YÓ¬÷“¤X™fUaE{Ûc^œÔï¶x³È­Åñ¶rªÉz(üø]<|¸Œ!›–8€.TÐu0÷y¸µC”ª]ºZ¸t­Šo¡èU‚ªR›]çZôHïN¢Ž‘ñAØš87~R¡œ£Z.§'´Á‹ŠúÐr‚Ç'ââ5Š0pP0Ÿ§‹5¤ô×ïÏG—Žn]uOêRÞv™ŽK^ãÖ8—@ˆMRVWHYM÷ì`§~û—l°z¼¿­myf +@iDÌ“òîuƒDx#ñ'ûHÉO²¡¸°ŒwYzçK¨ø˜¥ +~9Ó +Ù)ÌRå;"©ã\-Þ{X°Ç¦:ˆX—º¡C^,¼>4oâ(ÈkLÕtO[*¨øw™ÒÚM¥SÚeo¹f®ãI·áƒ‚lpÐÕjfÍñ:Z‡œ< 4åôñ4üÕj6屨•€õ ná%„ñÑ¡ÁÙv­±{j X ù¶fÓ꤂\ËÎD(󨌸´ª³àžØßÔ{ 9Áb9Á¶¾e:µà%O"œŠßîÒPŽ  +®”Ëh¡Gi{›^Úq…]G%ª§£Y6…þÌ‚Yïå§nŠu·u(äVÃ:t¸ä á1½ý m”s» ”º¹ t †·ë=Þ&Ù¥°a!‚ fY=ø$⥗¶",†ÀYI¸o Á* u̘€yÊÆdn˜ 0ý51ÁN\ÿ½ŠH—6` +Œy7 ”¨r8rÜR‰W¯ª†ÍÒ³ëòNäÀh¡x"kAúŸ +¨9!õ‚RÍZGI,chØã•ÖÚÀIñäÀˆâ®¢Ú¿I¾úµ±=w8w)!7‘X|=šnCwtŽŒêí¢/]7ã ™ åh–k†miÞõ*¬C-)Ú¶Ë{=q[˜þro(-ôË\.Ã18Ùx:"”N®ªFÇ[í4?ß >øˆPõ"PWÊVäI” úZ2WÃ÷qô +„˨Α‡Á T +ò°hðú@×S!.ïÂ¥‡ÿh•²i“²M†É誋‘°à9ô¥yg°(@óªµØ2ÚWÈIÏg{PeÒ“‡éÆRÚ$œ'Òº¦Øzàßã­»ÚÇ~üP¼øFÞ•.ïm,ô>H¹ë@cj)\™žÓÊzùuŒWJ ˆìä!Ûµ9óVÉø¡lüP_¯àÝœíõ ~0E¥­uÕr|Š¥•±®£è¢Zú´Ý)Fvy´{ÃáÖQEµ|ºS¯üÙ-àRÓ>ÊzÚ "²4Æ0­dG„p•DÒ«›…PÔ»š.góThÂîúús`†1)ýþ켫Mb ¯„ÐÚc4Uá“AÝ f+p4jí‚Ä× +™CƱ‡¥“ºß®e¸ª²O£Ô~Ùê q$EÈÙ‘誖ÇEJ‘¡-°Î…Š3½IG뀊¯*w}^+kp!c–£¥¨Ù–‰"úrøÛI”2tG@ž®å¡¡§™Cy‡ c3ªä,"1!ΠBŒ¬ë¯RÈ«ºìOl½¸¬:Ž2-µ¢Ê#¹(‡Êì@¹;žž0«ù£¢éJe ŠÍ”%Ö-Ħ¹EE#‚©õ¹ÿŽÏ M­%,äëZ1¹)ªmŠYà/Üšv¯lŽe+Q/ØäHq× B‘=€€hIÆTw,oE1krÆY? èa?ãi¡  +\(€*kJ*e#´”dn’ÊOoåÚóùx*‘kc5)¢º9ï>$­ ͇í.x æ¸¯+e¿> eÐ<ÞQA‘¦ÂÚÇ0ÝÊäñ,-LK¥9h5…º‹2hªSa9iÍOª+ñù3Yh6ÁUû€&mï7ŠGBÕö;€ Cæo¥ÄSÂux‹¤âb”ÃSfC,ÜBeIŒÞ!*!•‹°³žIº?p¬B³|Ì"ûR`%MÍäg—dÔº_¢!6”…Zåå ”×˾<Ô½wÕEbC6³eL±Ÿ3NöèP寓оTÃñTqCîY)È­—áO¦'w¸-@!^+'BSš•Š³Ê–—‘˜Â®)l7ñ$õk¦evïxS‹#ë#ölžÔ±€‹F~ÖŒwhá—vRñsÒã¤QK`b0Ý y4Ø~‹Ð‚«ÏÎx!SÎÃtmq's•o+ÏHñ{ j;Ûm^Ñ‹r¬ GW +aØdÎTuTÛ7\+Öõ"а ¶ÉÓZˆ°‡gmR.°% wHÁ›eI>äTK4Ý–5&×$f^B5¶Ëi1çç(tMbk?R²óßÒéÐò:Œ5á/”Já3ëbn€™¾Ÿñô±A&q ¹‡8Û{Sñ©ü ×mâÆä ~ë3“@,ÊÜ­;yØ Ç!VÅrÇÜ®'"´eŠâL{É–ô¨»ÃéÕ:”¯0gB®³Ý"²aJšm¬ÿÂH'ZÝÎ÷ö&÷FoìÃQÁþ%µ0¬X½Þ‹ç@Þäð6J¼lÏÑjé¨õ @J6­]Õ´ tÀîxûÉÁ“M`‰‘Ú¹Š9ûC¬ÈA”´y9ìoxk’åy\GÊ$–³yÊÛËÞDzÜÐÒ(Sæõn^f:I) ªy*F*ô¬YªxƵ”À|wUf¶ˆåXìtõiÏ='ßJ1c³ÚEáÜlž‚ôW¼.eÂù”8uT:kæ3¤-T25rï1«K a“ý÷ÊÜI'^ÞŸX<ÇŸ’¥/0÷Ž•Ïâú'÷ Òµ +,×'–Ü®i‡„Ó Ó@²SŽãç³m5Kæ¦#¢fQæŒ\Hë_¯Jå†-mèX ­ñI ÙcG"S®¨v@ +ñ.ëC~*=°M¤ÈUì)åP²+W-øžE× ¦”5–¬bÎq¦¯I§ˆ·&$Ý”J‘èE‰[Z†n©˜[¼ÖÃð;É5ù¿«…"”‡é¤JÛÄ. µ;`%´&©ÂÜ4¤"“Öˆa„LÀ$X¬ÁÛkz\ñ"hý¾‡ÎÞù…›J,×ÅD2z’(Ä +&ù§ìd­7׸]VÕ°Cà”Å^w•gjÂð0ârD‚ܒ鯫ú*ÆR8—æ+XÂÀGóð»¶Vô³$WP¢ØÒÁÒ& }ÔsPª‘È^ +º\¨i.À‡“ç,èQ ‘]ð9K˜øJCéÖjbÕ»bÕ»Þhø +t±ÿ¸í·ñ*”à¥;…^µâR[Vù…‚Q fôl¯Í5C¦š ”bvz€•9»÷Fw'ºMw«’æ„o+Ÿ[¾hÒàâãå˜×> ¶UšÁSâÐ/(‚]­ ¥YZŠTR×.÷²øù7Kû0$Ð[)>}-ªzB’O=î¡gæþ |ËV€Ì t*IH¥vÞö5žQÑÜ:·G«ŠB% ^qO²Þð›|žŒr›‰Š”v¡äÞí.x +yròîÖH½¬Àt½5êÝ=¼L©å¨ºŽ$Ž›55®-ìæ¸P€›Ý¢|ÝrkÅ(¾Â$2Dãš…ÕÑ$• áp³d-RWŒ²=N +HÊåBŠ n±éN]ÿì +$!¶aTS"Å.›ÂÙDòºØlãQŠßJvâ -ÀúcjFgAÕ+fWEí’iMÓ‚Z¨5²ù$/¬cSÞÃÕ5Xl&e>!·‚:dâÎhuõ¡ªyeÛ¿£-ꦭ ‰¹’²pyž0°S˜EÜb4uÎü*übÇBj–ͦ@_ïRéÜYj5Jò˜uZ4*yyä…”`kìî°àfKˆz}¯%ŒdQC8uNëÅÆúA­“] +õÏ •B–@lu 6#sU-¨ŠBóŽÍ¦½j*¶]w„ß16bŠÎYÁÆäßÃ’ÄaPù "3Í´ÙÁÓID,ò7* çusx1H›rÈÃ;"I2Ãz{\˜gÑÐ'ØË:‘( ʼnRî0Ê‹r¯K™.‰K®)±Œ„ÍÁ÷È« %!ªÈW6U +ñk„UŸ«R80œÛÞKb['Òƒ’Ù@wó6UCNËbTÀ@Xd"B^ÒC½_~¡jRÂnÂÄ:;^s=â5¯Ÿ”à;é ƒÈs‘…ø&h8ðæbxrôÈÑã&DAÔF(Œ:ñ »È1±_øÀ‹,!L¹îº|ÚØ£™‹ÖÚVì'åIª…kuô6ä€[ÛB‹ÑspB€Kå`SIqr®/S¹Õ$å +g“³’^ýEyB\^ Œ0Û(\ï*H9$6¨9ü“]8¹¼n4Þ®ÕCÊBC>Òk ‚…óS¢íaè‹»¡vÏ©/X8Rqfœ³\é +>ôÍ=¨¯Ðc›Ñà‘5³¤W) +¸òßö®$óÕ¬Œ™±I)ì°i‹·´„‹ +GÝjoÍùu®Kݵ+DäPˆ¨†5µ š÷ +›*R NNt/’(˜œ¼)¢Ü^m:éÙdÞ¤3à\ÔyíØ¶z·Ky@½ô>¯^¶¼•Ò„ÇqºŠH6¶?0˜ÁÜ&ß5&Z±Ëù樔º£I•®£Þᜠ+äò“ó%¬Ý€ØÄô`i¢Gkþ)4ÉlÑ™ DdR¼ ZX…íDìJÌ8ÔrÀyµ½[Å¥$5åGÅGT“շ宇"Y;Äåf]>}–_Ã¥n9’/ÉÑ*îV w È9’ ¼JÑ#ßþ)‘bW"§ç§äºB·ëÞÊã%”ǧ­L5Cs2É’àwr)Õ‰,´Ò†y¶»ž2Ž °V¬¸Ukã84{æâŽÎ½“¯«¡Ž« ÚšdÄ^…씵U]Ÿ@¡cˆõÝŸ‰‡ÈÚR*MÖEƒ2u‡3ÂOWŸÅºRòøÒ~|€¦jÿy}IÀâ$!cXZ÷¹¦aÙöÕ­ÜÑKÑh¹Nã$ך d %ãžÛÆ=BìÔpC¡G5PÓ\¾”~~H6- ¡¤Â¡d•°Ñä倲¤|쇌})–¨äº2"ôx¬—% •, å§xOJö¶V*µÊacEvä Õ-(ÇW ä§#]§xÌxÌ~ddg¥Y܇½šQû¹,$*±§nÉ#Qh2í#³W*\|`Hš÷òÑŽ,Þéj=õ.é÷K Œà¬»¶•³jhŸQˆ¡_!†>fTÅšª_€ã­a΋MPÎ%Ý.ã¡…&ácNécÉMho‘J«RM.ã±æZî˸ïäkå6Ÿç¢=„ôC\8ÒPhfw±†ÊÞ?ðé¶õø‚aS(Ù,2ÁêLŽî´¾VeµEα*ˆŽÔ-…™Ä’ÔU ðFĺazo‘Ì*s@]‚ðñ¤>";Â¥ÜKÑn©X} w;]·p1íV1³±’pçàòPùHŽ ¼êÜ^9S3¸ +•®`Aî*¹\ì®åBb˜ï%g¨ª$Ž.TB-Î]­Ü>¯Ç,¹¨Žv»Ì r8|âø’R¦ nþ%9õ ….ÊÌS¾ä4‰ê.á$ÖVâšQ.)*Šd,ÍÓ¼¢*C¤Énz€ “_(:­oÄ}ÒîJw¨GÊÙ1W‹!¿/S3O*Ê#YDQÍÖ?ç3$²VíãµC]O¥ zÙX§^J°ðG2Š¥É¿`S,Ðé%–å@û2G7ñØ•iI¨{›ÁÛ§Êó_=À¥G-ùdÂó—¬]z.³$Î9gÉØ„SuUöX@˜§È{5„Ñ_7ìí5,©‰Á«r–"Êl®Ðm¤`/J†!w š„'5û ´w¬UFÀïèŒÞ÷'G±0̓nH¡¯[Çr„+@XPʇèl5Ž^Qivä –z¤ðH=ßÒŒ27ã€ùÙA›É ¨íñŠÊ+¢ŠJ3u…#Eæºýû?ërNþ¡n·ä²ZdúJƒßåLÙɼáI4)ŠÓ þÊÛè +|À~J`óþxt² 7ËŠ£ ^-Ûs ?™²pÝš‡ÏÑËTK±?‹˜ÚhIÓöƺ•8«Îòþ€o PÓ‡?c›?Œ7‹Èc,p^öÀZÒ¶Uày]âh_m¯à«±ê0Òó —,Í‘E@øVîTfHdÞ*yõ.>•Ô•ÈÑ­_ã€^‚vrüfçRžáT‚ Ó†E±B'!0~»m¿ƒ|ªn&¯LÙ²4/^¼¸¾éèôƒô׈|Ã"KöI‡¼¬‚þá­EiEšÁœAI°º4ïŽT't $ß$»>®¨GŽ+TLœw¨Uɾ” ’ïÂü  +¸ÖUHc|c!{réo žŒñ® 3OY¾ñ+ü™a¶¨ö®ˆs@[6~HF¸p]6>«x‰gµ-HœTzÕ¡L Eq…åke†´84évW ïô¾ôš—²KÊØ´•·.l±ƒ{YÅ¡DJ¹®ƒoKF1Ég°‹öºÏ*G1³…ýÑ:ªd,ãIÿž¨Ikg‚C=8à2x Ÿ7ó®¬]óÑf»¨Ûc5^YßUw4Æ7ôz(€]™Œµp$ _ø±ªþVÛdu)uŒ/스TxÁ'õMc)Dxkaöy¯;Ü# lENeÁÁ,qYª÷¸­K$:Û`]RqRÆÙX k…â±k¢æ€ÖB`·@øhèê@Ûö’!æcÆœõcmæáú¿IƸú×õU’pkk:x_Àl,ªÛYZ,œÐԵĩ[aÔØpJmX$ö·îA~&îwíþ(E,öÐA›+Þg=ÔÅbEB€kÑ[{ö7T±¤÷þ€ç `7|ÿg·²Ò¤jTÊ‚¿þ³¢;Øyû›œx/ ?HÁ`ÑÑÇ>­Œ˜…ÉqöÜÔ¦bd«êNÀy±Í”’ÂiÅ|èw¥pÏ$Õ6}“òÃhñYä?ï\.[Ý´j½&½ÉÅ AIUäÊÏ¿óÞ^ÍNŽê©Zøèmª·0«¤€¯À,Sбv§r[*ˆHBS(Õî9)ÝáŒÑ\€Mî‹ WA,]-,oÈ:;z¢8ÉýУ¤&4˜ áÐG>uXø{Ê@Š´æÇ¬êS +ìÕÍ&t·¤?ñ‰j÷•Zx?³7É>ØßÃT×¶Ï£cœߎj1ð}‘Åé¸Í…¶a>!µØ0JzmE~¥‡p,óš5¹‡ñ‡—D/?eK­Ë0Å6ŒUÇ¿=~IÚœò»¢”°¼Ò"È~Åç[oÁÆÄ6sÆV0ÕšT»­I%)’l5@Rv]ÕÕ(bcîM´‘#ëKlGÙøCÊÂtöÚõÎáƒåšKBéÑbùÁûÁè)æ/¯}Í`ÎÛÕþNáïÀ>ôšLÖûÊÝÓ“Ýt¤˜Í¦Ò†oÉœ^›¥õ6HG- ÕJ燤í4Ö WÀTÔíR}±1•2“«G“×é¹c5U2<_=øÜ}¶‚ Wö#å™Èt¥ðØ[¨„{æÆã6Ï;Kü:Š;¸oHv•TTÓ¦¼.¸`';Ò¾ê$-Þ_R@bI¸ ~@ARtþÜù{ìzcQG8Û@³û +°fza;ãNsd°¸¬5s‘Š‘~ wVÀµ:+jªdÖ¼« Z¾ƒÉÎ5R¼•8%Gíq†ÎÞíÒªöí<^¢²×P¼ìœÙR°P.ËZ®Iå:Q–VU‡“j<å²²Âêf€+;Twa¼BÄ|‹É놳PÕŒê@Á™Ï»®£‰{^-–\·`å8qÝú¬›BøF„7bé7”î[OJ?°¨¡Pÿ{ [Óß”»QÓs2¯áÉ}¿I™Ovqw`îñ'Ùö}“§áƒŠb;0og>.)é–0#ƒÀ_Ž*%øÝ{§<1zD.¼ &yVÜuߤ‹[›–Axg1.ofÔ×÷üKò—¿S‚,W©‰Ví0$Y äœI{ Œ ªßÂx[*Ò¾'å`>…@Í%C¥Ü´3 è tíF.Q©@4dÀ?¿Â(@ó'Ió5ïŠót• +ckÔ &9X×[u¥G{eh¾Oð‚æyògÝ>5ÂôõVRq³YöÖµ‘¥T”.r±<Î×,rë,ä±—Ô–ð±õ ~ç€ +½·î…,ºzúà# šy ú”]ÓùsoìlpÇ,Š0k$WaþrÍ©‰9°NĨg±?¡ « @bŠýi.4LlV"lLJ~·¢ÙÈï†Û ”;4•£EÔ¬€@±µ¢¶ã€’;ëÀAfABøZôîlz7àfä‹úÜš ]Ò kÙìÌ­™ÐtRrðx7ê¡ä´´§„à%ϸ\ç/&ÀN +çrAóù%le$ ‡b«Sá†ÇÝlWØÃë© ‘tæ”2}νué48/R*ô7 øé¼×¯Ñatª’>RäÓ»hÑ 'H@2 ¾vá®UËÀèhÓx+&*ú3•œ?î–zŸN „‚à‘7R’³«Ô!ï¹Fšbí•üªƒ¬v!Óǧ§´‚]™’¬«æŠËâÞå8=rà )Ї×éÍàzÊÇ«†×šFPTd*—*.©žóóä&'n¥«ÛF0G¨NJx¥ê@üÐ Ùk–óí%E¼¦Šýˆš´\ÞSBÀ1ÚG„6ƒÊ°'ccËH-¹Øå¹o½%\¦&4/T™¡°X•­’eì÷W' ‡¾û­Ó +¬CCo}}RÔe©˜-Ê5{ìÁR@8f§Gh¼ÃH^)ð¤KW¤ÇYÞQ…^íYT‡Ed×IÑ­€a¯ Rn>j¢‹ÅPp¢³âÏôù"c·ÞYì³ö¢QKèÏêìLeò-Uq^2ÑÂFÐÉU©é»¥l·×(]½ˆÏb›2±Vö}Ž…=¿j¨mÖœø•|Ñ=âëóa„D„L2¶ÿætµ6X*¢Éá—ºsQH»|¡¸¢„¡e.ÜJüÚH |½6N9Ý„hÄE¤úýò/¡ˆS†‚4 ¬¶Šßgã»$¡_ 1S +£ý)L ݲ”ç§„¦Ôj˜â§¤䢒ô¸§ò…šæŒ©#sÆbÒãqe¨:I=t’ýíãù4[Í1Oe3c!åº,«”\Æ\sUÖ šÂ0Å:O@»õÆß<ÀÆ­$Eê‘K¢›>Z¬DJд£Cƹ¸&ftg©MÙ7Å þ¡j²QcÎ?[96óÊÒ ™Ä«›ÏylwJEŒòi)z {TE¨÷'UþPÞà)fÿ±„AC6„}ǵýç_M²¿£í +ØKþ:Ö¾Á~Bz ÁT£%í/ê4ùUFë_vßæ è‘-ö—º+ÄR|ƒü;ç€iãQËžŸ€ÁÀ¶;“²‹‘B[Ö¢ Ðç“€Ä KP•9ŸQ>úÅw=b"š.8I÷nŸ ”’¡‹kOÍ&Ør‡äY £FŸ¡t»A ˆQ@ýzÿ”>62a”-YB²8ÏÊF#kæ¨ìD§‚TPä’‡±Óèi¡ž×;“æËÞ*&­{JNÇÌ‚Ä)L¯väžìNük|@µöFÄÀÛÈ/Tìç²vOÊ YÎ+ïýªw’ íÝöÛа.GäX¹¤=³ž {ÒœÂöò¶`´žÉ¶SUqC4Uy•ŽK&mDšPàËu»å o-ÂUtECÃòΖU ííc@!Îàu¯—M”Š[dHØ]›x + èƒa¿)¯õ–èÙ¡m¦m,دG ¾z£ƒBŠýÃ’á-9 ^[z) ­•^èD8gÞÒtP*)U†Šß°ý‰M².R…çšZ” +;µXN¨¶PÀd„z4Uâ¼+ª(J›)¥YÖtC6°"*Id- +*¥hQÈ §Ç¶ƒº~žaT«vûŠ]X,›Mmu…u +3Ô¯•²[= é=@tS[á· k„ßR>LÌdk=-täí²Ìq\µTv§¢±¡âpL¢G¸Š¯Ó£z&WYIõKj‰»¨Ls‘¨í“†hþÜ;+GXÀƒýÞÚŽŒ÷ac·¸Ž]Ñmúï›&PL)> xÜÚ‰†BeKW,:Ãé’)ÏZ®—Æ^GñX7»šþ[‚QÈŸä=ªÁUb)%õ0ýWþµ>—Ó.¼ÅŒHq7 +–özÒ¾Ó&Ù“–@Yu\Á$r~ÿùáÀŒÀ‡§¿Ý²ËO|]Õ‚%Ɔø˜e)\‹ÂÙC³çÚÃí‹ñSW¸Ä®Ï™ÈÇrD7XóTH}Ï辎Ïz ›‡$ÏZK;sñûnw¼ô ÇÍå ŸsµôXQMÆ[—|DßÏcòŸ*êQ¨«¿ð)nÛ=™¤¾¶ý·`xÙÊÂö›–Ÿ­$?xká® 4túõ‘DoIŸgúj! ‹,Ói-$Ò¯œ2 ²¸G@¨UaZŸ*½´;%ã|Ó_Kò-ÞÄ*5|´.ÃÉBiõõF_Ío³­½®ð\e©ÿM¸#S¤PFÆ{5–(%ÒT™Ôв3AÉ÷÷õ7ˆžª.U  ±Áõz=d¬e‚Œ¿g•ëü×ûÓ´ (».È×ÐàÔ ?ìÛSqhþ%¢DÏwzeV‚);$j8u\-¸8¥=Ë‹¶¶ë¨À&$˜T "»j<¦})±F}[mkG^lëM +Ï_å…Õà:ß5§U²Šõ¬¸æ)Ø`ݵaØÙÁ +º]k7ro=Y\5ˆXÏ|žLP4Z樂X÷J~ò¤ìÚù*Ø<+B3‰ È¢2’°UЉA6°ÇT޵*ÌiÏ—éúÅ0úžnI|i’¾J–dç½S’H=©2Ä=ª&Zsøµ`í!ÈÑÚ03Q¦òB§“o¶|·¼ý1"ÔÈܘÌo3ÕB¡jÕWÔ-䋨V5Ã¥:ñèìÓË%›qIÄŠ^Ò<Òî z¿ùkÁ’lˆ(0Eã$¥ûèa± +)™&æqu¿LÔ#±ÞwBEóV&ÝeHÏëщ/JEOŠÉtEÔ¸b˜Üñ QÉöØu„>u9aJiÂöì²RzeKX3¹;Qxކé,f~Âî±£„,ˆF†&©«ŸLcþOHœJ(øj=«•2Åo£KéªãoÚ‚þV%ÃoªÑײA”ަÅÙåj&Ô‘Ûþ8 +—ìò²%Ò*¤ÕRì¸àª>ÿ'E؉_Ö8\8Š^—12úÉH`oÚ‹C8I_è•Óæi!l„8OBk +"ðÙpCâ¾ïÏB²q3dûœ¶NZ.L‹»sÓ2ÎWÒÂÎü–·ˆ%ml þ¸i讉¢!²«Y LÒN_‰)T° º(3‰ÐoŒÒÑ+¡qÕ^»1.ä5{ñÌ%Hª:¯K•¦Û‡K»)GXÈvñP;âÑÍ“³5“šPË·ìií}i`¸Y®··Ì`±N‹Îˆûâ0½ òa:žä¾yeß$è#«Ðù +Ø Íð;Â~ç§DYZÀs‰ýØ™ €Xq=ÀhøîdíÕÐNVÏ#<Š~ê¾í¥l|7*”ÑÃæ“„œ<ÓN{²¹$:g)pH¼›ŠB£°È(‹€ Y½aÓÛM°>L„ÐÖ+_‰˜(,¾ÐÊëÀÜû*ä'oÿ•±ø¢„@yÀÊß}È5?’Ö‚òØk9œí7 ’ÅRõâ†käÁmY)‰ÿtÞpA.» %*l-À¡o>ÄeøQŽš?‘Åþ&½HÄhòˆ4œ/– Ÿð1¡˜û W•v"±'êÐÒõb3žÐQäóß™€®$‰—… ɦi`MÉ6ö+8b†Eh»KÛÚ»ˆkI.o¬×`ÍuMñà0ÝX.¾@$´sBIBR–Å.VÝì–ó +‹Þ âÆshIíÕµé2°‰—ù¶¶#Œ¤.YBR#‡EÙ¢~ À·%9ïYyû¿¯ä#û2é¬)C~¤ˆQä/µdCJ»4è7#C¡®7üŒ×AØé±_ö)Q¡rB*2ì.e‚ºBE)e&©NâÓQƒÃWáÒQ‚ºD 1.¨nŠŒë²_ ‹Üê RCUe)³u¤ÆŸÀ¾Þ®f"ù]5Ax=àÞ_˜JòºÄDμ &éÇy£2G…;(Kl*8 ÏÕ±]êh%p;µ9eŽ= \[ÀŽ•’,¹feÃÁV´ßv e qýðΗŽd8ÐªŽ±z‚KŒJÊð<ÔVbñ¯ó«c¼#ï32ÚÕ6"Mþ¡EÿöÉäJ&ù–aŒhd°U TÇ{†‘9]« Xƒ4‰˜‚™+Ùòp6©ö8@$™ŸrS•º_ÑÁõNè¯ßà^5¡ˆëc =#Cê½IÁpÞŽbi *†„•Ð\ðúmLï4¡õmc²ÖTâRdä3ëá=Ú%ê­<ƒÉ„« +1VãûÇÈcÇNv+UrÏ7B÷e#-{ÄÈÔ·¯í¹p<{XMñkȧsà’SoÀu×­q@©º>¢(¦jç³$ »2#¢ÒAá0îÒš§[¸ÿaž€aÙ¾EìHÚ¬¯i¾G(×ÂÐ!…IæpIÉFuïQzL™=”auVùñ+1“£Îò¯È‚¼™(Dþ3ã~†\9z\¤ _Ãær†Sð®£ò.X?ÆÖŒiú!ø¤.é—Â\–"â`»¢d;È#±‚ [+pÝ_Ñ4ûŽ:,õí¦µ)E4ke‚Ñý9±`î£SZ/@Öë.•™ QÁ‚Ò7È2UØ,?b5Áµí«›Üß¾èü£tS˜Ñ¢Õ-쉾’X¯µš}~k¯µ‰X·|i’&ñ‹«ôõï.ñ]rå*¦!%îÏÝJÀ Ǥ¹€LåŽK‰ú¬ÄBŠ UÆ•LÝk—BkZtNxui”bº g΋£òîÁBŒðnC[«ØCȾË)Ò’UîÏ ¬¤ô^Úê3ÄŒ'±?‰A¦ÒÌÛ?ƒâZ·<ój/÷IWéFË~µè™ʲ"¼M%ˆ"ÁRºï µ{ÖKh¸8èYtV-˜f[IVEÖš.ß¼òá¯PÎ*[Rº zÉÐ,b*)J×bE颿™B¬W±YŠ£‚þ¬dcÂcm½¶æÃïÚ[ß»GºWT;ðÜ'³WbßÃ.A™uàÉÛ-ÅÔ%Œ°;¹HR‘X4¯˜s³LöíVß¶0C§wó¯ ‰ÑF3EŽoÈÞ^ΟYþH0·!¡JgíiC“1¦L|@+üŠ]]@ò öe÷òélµ¾¯¿è;rix­ +êaúX—„˜g$¨ÍaDçaHgûˆ4¸1ÜXlsoâ°‹F£çéísñK6Z·þÓ‰ƒ?~’‚¥Zy’°©Vj¢ +ïj‡^Á[_¯ØöÆCj ø„v +j“œu³Jßó9…mÈ(m«œ³îWŠÁ‘6ç£Úø¡5-Qvmªq@¼} V÷ž›#í8: –C¿¢SC'ÕÈ”MýP`rk¨'°aÏ’HÜ*¢UùY¶N 8³A™eR +Þ‰Y«NL+ãån[ >C(5hÍEoýÈ4—{FK-ïÆyï[‚ï ü.(íâ K¾ijs±a¿ÞÔß¡›fÚ•,CýáÞˆl(L°] $˜ÈÙç3žcÅ;D´×ÑÊä† ©ìÏÞÿ…½/§¬ 3Μ‘h™‘¨C`½TÔßTû›Ûž æGƒÅÍûÞþ\±x´Ï™!NÉ`­tÏÊdú ÆÞÇÆAª€öb&Òí¢¼+”¥LÕ[í R q‹Å½;à˽˜ ëÇ£“L·Ìãúž^.æUv +nÕ{¨8hmn.ÝšY¦ ±µbÂa +‘o½F¬Ãxß)3ôN4Us²'e.¾óÑ¡[œ‚tS.¡ë€äïØ¿®÷ñâ-<Ò\(üRK„’êZc +ÄKjÒ*Í^Óx¼;ð~iì±Ì³9(²5wèŽÚ;·¼îd„Ž&ã]ì]{™\‡%¥ˆJ²þí=Þ†DÉxÑÃ6Ø ‘kŠõuÍ-@˜ æt¾SDÎ;î1öãa7ÞùriÐÐXzûmöÕ¢l 9_  ©ÃŒ¿ê¨WºÈØú¶Ù׃ÖȽÖÿ¬»#;ÅÑR×ÄCºÀHÝ®ÝÙ«áb†´Þ»q‘tÁoæb˜‘Õ[ꄈ›®ã.VëÈζ^ªx¶Ã­Ž.9*¦7xÃ[7í–6¹SaqçþÅïñ·¬¨mì{]/Ó¨Áõ¢6«M¤2ζ©Ü—R{¦þpÀ7­8Q/Õwm/ W:sŸ*å/ ªä5+v§^eߨSõMâéÃQ ðœX©þi™–æánÃvÉ´“ø”Gù£äêù· ã‘Á, +…+—(nêº _„r:)äý'’Y$ÀFèþ³µ@R"ð‡òˆ×_Z1¶°ñjŒx5ÖôÐ/³~sÙ® ©d÷ŠY8]/Îq4¹”+±CØa(ÑGÉ "p)K˜&¶KÖ^üØ{Ã^ìRÅtc=xI7ÒzÇÖݘôÊŽ"á{)ÿ=UGUR,âÄÉ){£ +(@D* |bä†rTFýŒ×Ì=ÔNhÅV¾„ÕÿÚÓ ªTâÇtëÇÀ¥’×’¼z¡È +‚—×éiXebsôŽmprlB½Z®®ëš%0Šý F—'΄\œðõËŽ»Ü}nš4¨äÒ.OÚ5…¯øS3BöÔ:÷ýÆáj¥ýäIá'âéÜÛ¿Lû)Ýëá2[Ec=rç,}@™-Á£×ù+ËÙ ·¯ÊHÚË.RHôÞ…š½`ê44K6Äu~ÕJîËþÜyGÓødî{ày‡-ÏŠM ,–ŠðR‘ Èoï÷ _ÿÑw9ùcö“ƒ¥·?ÿË~ø—·?ý‹ŸÿÍ/~üñ»ßýæÛŸÿë·ý‹_ÿæÛ¯øí|ûÃ?}ûW¿úõÿùw?üÛoßz¿ý韽ýÃßÿÞñÛõöçûÝ/¾øüáwßþ/¿þþÛ¿ùîw¿üî7?~û|÷1z}ûóŸÿæÇOºóÿ~ñÿþËw>¯o~øåË%‰ÄãמgäŸüÍÿúë5ÀßÿúW?þsüeû©Ÿû›ß}÷ßýÝ¿¯_û—Ý¿òñ^½\Ê:­_÷¯¯'õ“Ý¿ùîŸ~üvÝáÿõw?üæÇ?Øû¿þðÛßi`ýÞËýß¾ûõûçÿG¯÷oø÷ýÉýWë_ñóòí_ýæWñçjh4|û_~øÍ߬—ñÇõ>þìgÑþ—ßý·uê/Gþä?ý—ßêØô±¿üÝ¿ýë?Ÿ±þôÿúÍo~ñýw¿zö'×Û_üɺÞþáßù¿ÈàüÛÿ‘^Ôi®·ÿ}ý×ÿ·Úþý­¾ýõÛÿýÿ\o¿ZüÃßþÉúY½dº^ +ÿ׊¹¿_Íðç^š¿y׌:!øoÞòSíÏ0¿ùâTÿÏõ¨™ã(œåb:Ñì× ‚à;É¡ô‚È7ù®„M~v,$¹*B”¤YØýÔû²”­/ùUåG /ÖÒ‚¢Ï——Kñy…ÏmÀšEí¤Éߢqôè|±¯r#L7&bä¯÷غµ»÷7rÿàjÿ'‡œZÓ…%ÖÛßïö +ãIíÔ¡ß܈Tü,•e7âö¿9Ë9%ãGöÑÈÆÇ—ÈæÃ ZýÖî—6Å9Ìk_ºìì}?À¤Gc Švás7näèãÖå]~ó>ƒM$I£_Ê/¯…Ú÷T[œÔ8$!â²â¾¯ßlÎéD{+m_A=÷€¨Ã#<÷àÝsøz?"lÜ)YéÐZbG<"Ðë~G{g-Xô~p¨e½ÅûïûiùrÐó{¨Œ¤ý8puˆßc¯gØ4F#[;}‹÷=ŸÆ+E#ü³¯ÏcœÎѵ³ð ¸g}zÏÉa~§g½†€êºOŽM^´âKM¨©Gãú\¢ñÒMkLÌ}jt¾w{÷MÚ›-7’¸úô þGžTCê@í)Å„åö^ö³B^É5^p@ñ}þÇ5¤³Vüö6ä‚¿?íð\ÜNègâ©'Ò⊞ä¸÷Û[ü5¸ÀÀvîΤY£qîoýu }O<êÓnÜÓ\ƒ…ùéUó%¯ýþÜ8¸¿ÛÓµ_yoÑBÚ’).áâùQÞϽBYb¿ô‰|sü\¯1W¤Sõ¯k¿!—&Ñ÷ò³ß÷§qóh>½Š×× ]"¦ó:i#ìv9¿9íõ´÷{¿ª*¹qÏÜF~±2âq>`èö#†œîh¯ž2h$OÍW4%klÜiO9_´Oì{„\£±=Ã~yqzjH]o¶kBÒéE{oá&7´÷;ò4öøîPÍÖé¹}êL4B>ç8?—_Fx=‡sz/q˜µ4ãôÀ4§víáNœ”g‹§ƒ—üÛn¼âéhK÷¡±ÄÊüÙ/žä–¨]<í¾?íà;£}x.•Tú¤1·Ýxï×û¿Ò£s†cÿœ¾¦OÏáÜ+0úsO¤Iã^A“DÏßï"ÒnŒB¯_ÍÑØüAé“tq2ÚÛ^Á/½–jLä^¦ÏÎáõë“'¯'R–Óóõ=³h‹¯)Ÿ8ÃŒÝxfrÍ·gιžµàÚkº»óY ÞÀë­{wáßÖÎ|û¡qEÌÿxî?êÐnß“¶Ûï²':0]1ȵ×G±-êþû aËç½4kúþ´S¯ó /~¸öíŠ×¬ÁpÆqí0àêû…W{.»ó¨»ól{X¿Oá ]€øô=™Írâ*À)ï ;fÖø9&͹”}u“@àÓ«x.ßk¼üâ÷§ýz–¸uOÜØï½žh§cߊÛéúhg͹ï¾ùD°~!i#ám¾ûŸžÙ7gAA +ýŠhGÑÈ÷»=])v2Š2£±”øÒ2¬Ñè‰qït^TÚóŽ£&¶'n¬±vQùíÓsø2¤Ü¿¨ˆýÌBÚl>b4æñûýÔ4íeïfUƒÆˆ|án(¤ûÂ+ìžÝØ#¤dŠxûô*^¿ +…®^LoCÜ>I¸ß7»=ÚçySûµ³äÓ‘Ï–œ-®hBêü~·?{âÉ6õ›Ó~Õñò€bŸÆ«¿}:òs¥ øÚ'W +®ÇÞØû67žpý®×ˆFÙºñz}½ÓhñþÜ •¢÷äá|uùÚ/¼©=‡s{ý@›×û¬5ï^{¯5¿…ü¿ùïô£Î!ïL'­3 +}¿ÛsóúJûÔ÷/ sy1©¬Æbü©>Ú±£„&㵸ïÂB»3Z ûðÞñoá¾øŒb:îZ¬[«±­‹‰Ÿ+tJ—{7Ösßi¯;_2!EcÚ#èŠÆ¶?×ûªóáùÞ°qˆ;ÛòÞp"ÅùJ;ȈX'Ã8áK,ž4öýJµÙòçìŒ €²¿yOÅ´EÏüüüþãt½N“ÏäwÁ†¥1y»¨ÈbŽ2$Œõü|òž³ž\4îäR4ñKÞ¥Ò8Ÿ¿žªj8“Öö7OÑhîóÕJCôï1­åüŒ»#¥ï}^¥—¸\E]nIJ#†mÏ߃;ÜÏ – dçO¥=¾¤ôòz)eòr÷ÙÊ÷ú\[=¢©¸c³œáÞ’É~zž‘óµ÷@ix~â2ê~GçŒPßNéÝ{ýQûË;zÅÕ‘ž{›ƒŽâž|UÕ÷¨œÖ}ÛSl“*Ù¬;ΫLßžJ¤›ö·Ã.öŒPJ=ËyëÑ9C„ö³^¶©HBcß!~~FXñÆ^flÅÕ¿Õ}/÷Œ \¿íÎ%â)0zûÕ¹Ë~ô šË™Dj­Ñµç}Šgâ—ÚéÙ-÷ã&ßI^OßÞ*ÁÀï©s7^ýJ/g„ë:ˆúc\èèƒì°¶Òuv0ñ®Öþr ƹ¿|ˆÀFg%¶bÞlið¼$‘~¤½­»5Æ~áý¦!¢{…—ãZϧI´p^_…ïq¢»9÷µD%í·?úú¤Päú[£ñù´@ñ<#×q>­}#~jØëÜ…ÑçËuìvD+ÝøÔ ´3‰ž*Îû½.ýáÉî­n=;/Þ>Šý4²òµ1=_F¬”qÂë¾³ÛKÚ“õ šÜà)ö‡#S«H'9™ÎC}àY…Êùb®µÓU{É‚%Q÷é•ØÃˆ‘¸«3Û!Âí¥ïÏÑçjÆ¢ùqD*ÜÏÜ‘9øÀ=pü}uB¸1—t"º¤Ç!ÏÜ) tÞlð­ìv nÌgwîZÏÌÐá3ÂŽ5˜C{~BБÎ*ÍŠxÚÛ 8E±BÖŸekÞ!ÒN¤Hg?Á‘=³¸Î~QmùzÆy²·gMTéÏjéô`4^{ñ¸Æ~Ë,(ö[Gvô›Ýþ̲ÞfkHê•+ûçRÝßÎü°?ñçgp^KÝö2³N,Ÿi…??´»yZ¡sÛ{¢ýéÉåÙž¡ïÆ·ÊŠ(¾õ3_çÁQ¦Ý¯ÄžÐ¡´ýà4›Ä'E^æyG$±Ku#ûçâ}¸vŽ@“Þ ç¥ÎæÈçÜÊYÞöìmÁì£E;ö} ç±!·=òí˜"“‰H±åÔâÆ½Â-Ñ^¼Å#®¾÷¹aÁ;Q”§,8 cÄŽçj~"y‡ L+'L 5ï„´èzYó#Ø•ì(·ÅfØíõäÍûôCƒ–w ¼_ –ÏVežèjX:k[„*ÐÌNHÞ~ËÎe¿~(ì¾ pv0{áGïtFõ"Fx +^ïÚÉd²Ep}5–4Ïgë‰ǹ{¿Q½œMH®®ÆWàIâÙ™·•&ŽÆ³[§TñŒÐæ~I´SscMó|Gg,k_>–3Bçžµ³É8ì:Çì‘å+aÆ^ì@¶}xÖï‘™#ÏŠÉ üÍn/ùÚ;àtÖšœŒDèÊkqŽ+ð —cÇÌíUæîçcÌéì”ÑžUÐúŒS̺?s¹~éžþõ޵™UÏa³ŸUÄûÎD…/è,åI>Þ{–`‘úf·§s3÷jNc~Ÿ>B°ÖUF.çA§çãØgæ“R™{Då¦âc9yVì™òžô{÷VãIT‰þF£¼¿^4^à’ŒYbÆ(±Îâ³3÷§¹Ã¤D8p2×Ù`„“÷©œRTÒîû|Ç—ï9’²%ïEÇoµÍùâgÔt¢ýÀLvÖáº_òÒáqãKÂjžàù‚´¾ç¹œ#&ZÕ}n¸þ}Þòëùy&Ãqæ=çRè|"H s¢1·=wë-;#\eϼ9;odÎ3¿º{d‡#¬ô㹞Ȓ¹Ûò%CöÝùö2ư׵—óë>™¸aµ€xqËþ¹+‚<)€ía×ܲ¿ê~9Ií] +Zn¬'ì¼âg¿'Ÿˆê}9‹…çÓ‹qŸÃ¹4ô]÷¶¯?)™ë™‘³qa?sêvö³èÞ»žÐ6âeÿJJ÷ä²OÑìÅ~G÷¤úÉIQß•ÎÆ=îX†*F`=ÚéÄ]E@•ø”zŽºÊeûGßsÖïý<7íÊ{„“&i½žÆzf±rö$×kh5±zq£’ê‡ï‚@[ßóȺ!m—{oò+gÕ4~ ¦qØãÞmÖ¾KR×ÞÎ+Š(ô˜$ l»!’ŸLqM§äÌ—uö‡³ôèÜk?‘Àñeí­ˆò³/#<»Ž8aä/ξšˆ6OÊJèáQ²!:åÁÈ&WD7^gi¼ø³hŒÛŽ$Dz9·|>Ï]w¹ûË^±Œhã‹TÂ)Écí­ìú½¬["¤(ÂÓ'¸ßošî>ë}Âr;ÚîåÞEýv.mÜíåž]ÙyFtaßošQzwÛ…Vłס½æÙú}:Ÿ„“Òö‰Q€­3‚æþ—HN=ïÄd)n€ö¶wà¸[>#dAÏÂH):7"ÿ‰Û8瀚c9©ã€G M{ 5TÛ.!å|à–" +Dûþ\^ e¡EÄz¾ÏJ‰Æs+i¿ª°xöí©Rë.ÆFûŽó‰§Ùwc{àkž‹ ´÷†Êä}³ÛŸøH‚c§ýI^åöÒû>˜Ò·.Ÿ‹¼¼7Šžeƒ·Nˆ¥ö½„Uð²[¢iwîÑà´þRˆöñÚþ±qÍ·;ïðõr$ãÆ¹/ÜEËn”Г{Â9?'Ÿb_1ñ“óÙ8”ÀÈÑóä!_À0vOªG6×K–¬~¸±œDÄÉ{¸½o +(n<+’ÔÇ£ñ,h¥–òŒðdÉ”öüf·´£§¨¸qœrGÚMwßSh?.ç r*\¢ø±ˆô.§NÜ3`£œÁÞ½»ýLV)ùÚh|R–Í+Œ¹§t—þŒð€ÁÝçÍ}´Ü»±žrObÒŒ?Ÿn¥)@rÓ©sß‚ê "š{â® ©ýÉÖ@öb4XöB©7ˆÆþÕŽ¥TõŠ¿ï©B×~&zJª Ò£¦r–¸šãưïÞ“ƒ÷3nJ»sN Î×E ö¸²þ‚… 8FhÒw.Q¹îMRÞ Ûv2³)×ÖîÉEê68o=ÙÒ=WB|<Ó²Ðl4’1ÜSmy¦‘ù€)¹íÎõ̪¹ÝØNX«JKŒ_ÊÎÂÝ=_{4æ³–Kã÷Rj6£÷ÑË1=O»9øgÆÎžìN6*w(~¼Ž—á›ñî î]÷g†ÿÅ3î %yB¯¦ÔW¨ù´‡}™¸ËÁéçÚ¦4ÌósíÜÁ¹±žX91B=é+ä¼, “СÜ;Õ'XûÅå—å?:—M)h5( ÷ÙŠ¯³Íù hnÓû|ð%úf·²gz#¯ÔˆÒTÜŠøë5³Ä<´†3òS§Ó|ð0®3ìÁæ¼ï—™Ð;n¼Î9´ŒžuÃÙgE0ï¢:4€ÝÞªF£‚­Å~'_n0#ô¯À[ ~î.;L͵îsgK•Ãu1Úûüò{ÞÒ =îÎOûóuHª÷´ï%V®q>¬O7ÜiÔ”/uÅ¥ŽÎý)qþù>íM˜ 1’È|ÀXj¼ÔcÊ}ΚûžþN:|:^ÆYÈðÕHé±@GX§¼Û…Ùö̶g—Aûس虾c÷w€Qì)ç@ÚS=Ü€é)”Î#ŸI¼ŸÆS5)ÁÍpûSÎѪBc#ÐÞÙ‰\¤β›Ž|Ô—D*ÞmÁ5ŸŸ:#¼ÁϹŸûYu”Ÿ‡öÓ7p Fy¼Û,Eÿx:Ÿ¨+ÅSÆ'L^¤€öÖ²¿Ú/!¿w9±Qϧó™ÀÚàëóu}‰ …ä³åCÞ(}{Gh$÷Áø¥vRó&£XfÙ÷·xKó“”§*Ez{Öè¼ñ¿Ä}+‹”¸Úùr2J÷5´Ãwyª‘¥Æ­YÞV}¡pe ÆR}m¾×³rí(u¤—:ž¼:c²F{²»Ržòˆñ>ÜùðãžÔj61ÀAo¯ýåÔRÛ© ÍHq¾'ñ’r;ý ÁGzF¸"ÏC…¼žÅD +0qnåþü)Ç«“÷kª%ãåÕÙ‹—@’‡,Rò™ÊÛÙ®ñf_›沉Û‰Z Ä<÷\©ÒÐyÝ[Ù[¢òŒðàÇ%5àÆ‘JœCí¯ÐÔ].»L]ƼŒ½ø”ÈsÝWÑ^®yˆâ‹qoCŸ_8y£X±Çóù°ÔØ×,‚ª~­euîÆ~òß h¶º¶ãv6¸qníä¤/וÜy£¯.óÓÜsç5/4¿Þ#¨ ªvM#gä]Ü_WfÃÓþ0J6§¬×·(À+JûËCÎ’›çžG[0zèɳËbp1ìØœiÃ<«Aßoá¡,õSÎx¶ûØ¥µýøóÃ*B¿)Št—ñ$±¦r.ùÚ¢ ruaìû#¡¢Xl…ä„k•ö<¡ÌÐY™sDúÈÛ¥ýs÷¡ö”¶GÍQ?¿^·1Š$ö©í´—”}eWzèb?E8Ëûõ©›°<‚ã2,9¾¹¹£ºKg„yømzÛ!?7ÊŽ9w`w}u=“뽫¢·¥—íÆ®!‰U}í{Sìòðâ#àØs]k/Á~¯û»M‘f»õ*ÎÂ9¶Ï9´ëe„Ÿ"(îó +”œw'u¿=©¤½G»Î½<…ÆØ$m¶’0ßìí[TF_©*³î{œó¦ÀmvèC±ö‘Îßö^ï™ðF<Ò™¿˜ÊËé0|Ƭcw¾÷¤ÛêØŒ»‡J­-î/Ïiï9vÄ8¥-Ó÷’Ò÷9Èøwûz‡K)Ø7»½\{&zx|æ;B·èyæˆ:_G.gš#yºô²s«QA0þnÏ;úxH¡ ›Ï‰t®îÌû¯©¡|ç׉â&ºdû)ï÷SNc´§½Ïº‚<ötÖ°^-eùµ‡MóyÊOª÷ +ø:ßoöI_qq“èιŽ×/×±œ´È‹íÆó”Õ“éõ|¡‘´)»*ŽyÛ#ô‡žÚËãÞ³Ä;oÒ8yŽýÙæÝ˜Ë~ýòK–¬òlÏŠ{v‹´ß›Å½y‰ róq•¶Óîù’bÚqëõUù¤ÛÇ>/øt;'3f=[ðøÝæØåË»×N à2¾ò¤Ì6¬êræã$óÙ‚õòœ|à³dóg?ÌXãcäÁ§Ý#PeÞ˹N#ËVÓS¤#'yŸàFJ5>ºÈ?Eã¸whm¢ç3ÂCq»cG<‡“D±¦·Ýq/„§Úé¾ýYâ•{o'JrÝ)Ø|í“mÕ^&¨wig|ýÔî£5!wÎMl›Ï•Lð8üSXÃßìvœx_fz7>›Ô+8øsMó|:gä97±?ED ½xýÝe“ëeò.-íD{7´Oš g&“ÞèVr¹¯¨õ\¹ª9 êf×Ëó<ȵòr?wÍâꇘ¹k¼i“µÕøZyi‡º¹c·T–÷l:ò.B]iõ2ŸÖÇÑ>œÃ}¶4%òq”‰êŽ–kx\¹}#—€F%6¿r #M-½Œ39]×ËÖLÅ;ç½öþ{´9¢ø£¾í\±}â]Öݘ¦Ùoå3BÛjúžšÛÕÛî%¼Ë4†¶Šªy›‰©²ã9ò[rã÷Œˆ/¨4z)•’GÛZ ‘"Qç|4?~B ¤×½®õèB¨Óy[Ga÷<ÏíåÕ‡ë„Ë®¯j=ò{ãÄêI5†Ä¿ÈýFô]âÐË$qKùx_Ú}$qîúÂhèıáÓ—÷¡"Õg«èæáÞOyDùEÕëý,L2Qc+ûåyº ³¶h°H~³Ûc¿¯éäŒÜZ>sŒ‹^TÖ[>=óËÈíÈZÐpFŽí/íÁ[EÆÓ›-5Žr7YÛ†§À?ö}Ûl{ {&øýb7ä±<×c?‘}‹ú©å_'aú!o©’1NjDÂCÙãtž[Ê¢¶r` +}“Äëu‚6A%ö›YkÔE;)ñ¸Šú€-ÊyÓØI?#D±ƒöT¢±îévçˆ?Õ`pû˜û£ÛUL°‡KÞ#&¾ÇËt«¯úŒðlùŒUçòs‘àr¾eqÕð%¨*j›Dt8ýÜ9‡ˆo´†Ÿ° Ðuæ“Ái<«œ™håsn~töE‹ÉIœÈänšgB€õ¿w#»JuÏ—-œ¶1òÜ«/Õ>‰Y÷ßïò›n÷WÃùû]ˆÍ“#Ý®'tïÆyíøD¢7g,÷\yïÓyG mÏ×ssx–OµPØ3¹_Rlì[–£Úwó ç]ÔÜ;ìÑ +¡„Û5g7îùZ*{Í(/äóô³˜Ý‡Äù‘Ó¾‹ O@¥!γ!÷Öÿ±0Á|¹äºS!W$ôhÌ{‹³ƒ7†Ýán9;SÎàÞ +Vs?¡û…/ë* oìh#_GŒ†ö6‰iûÍnoå|Êÿ½®ÖÔ–Ê„±ë0Côà4`²1NœÛµùB×+fE´7Š>¶oPŠÆ'}!tÒÞO܃ý¶BûÏ~¿´G¿Î²|ÄAZÚkQÛByW²´c=—Õ>ë>·‘³è*[´‹_Ì&ï¼¶4RÞàL´KËÙ1åƒ&-.`Ç'jrÀÑG!C³—ûÑѲüŒ0÷ç1R ‹‹]‚âcŽgW6·¤…¬RŒPw&­m5cbûŽP¤¿ú³ß«ó!{ß·«K=a'‚Ól{„ ›¹< bÕ¤8²wôs+ZüÇÓùËAŒ ¾ÚÎëwÏX«{TöãçÚ{ë¥êÌœO9¢ö±ÁÌŸj‡Œ—Ĩô¥ÝXvìÚÏmÀE;Àƒ§/Éã£óQ6 ½)€Þóô|hS×|½Ár7:?v¬¬™^O&ùÀ Ô¾q2[OÌÃi/%¥ð~ª‚×È/Øöjd¥&ç²Gˆ·OÏ'mÄ~n{©‡÷ Ìþ|öGãÞT*¾Ï}{îÍi–• _g.©Sƒwn·OÓJÔ÷¨‚±Gø»Ý·žZR›A\H;Ë©ZkÚ[í2æa?$éñú†BÐ’vTïÆÀÊé Ɇ”^2ŒWè0ÂIìó6Gc?©Ï:(<X=9Êbx} +zÂK>T\ëÌ}Â[œ‚X©â!}¦S³l‘ÂG*çÃ(›^’ç³ <Ï$Õ6ÍTK÷ÙsÅMÎÐJb²!îÛΞï©YÚÛûß{AÃè¡z™{ÙKÄRk] ™~ïÅöÿgí«ãâJ¶u;H„¸'#™¸bŒÅÖ½}7Ü‚»»»»ÄÝ}âž"@Œ¸¹÷\^­êÞ»93sÏ{¼É¯(6{×®ZµÖ÷­µj•X‹ ·›‰åÂð!‚ª;õ©ø§'l´1ÖÜV†*e ‹ÎU^)ü½‰x…C®U«ªp¨”Œ²M¹ÅC£ÞÁd¤ôÚ«Úõ¥ª‹ÕÉDµµBŽ…&£Ïv¸ØL´rRõK˜ ëMØì¦ß—"š©÷aÀŪ§Ê²–x’°WOYGÙ¨.€‰±êR¡¶ÕJ\ o,f q£ú-¤¦êjl&±‘Tíš2U&Õ)Õ‘±PdLe0µ÷ Ã ÂÆ"¼Ö3Êš©%XªÚæ‚<ªw÷AE3%ÃÝ•ŠeÑŧn ÆûÊ?7Ðjñà‰Ô·Ï©B²®,T§'PF\®AÕh *_õè ʳ@¥þ5Ðë#O*ÈWšõ1ñ†õôEfœ(¥úUÂ$QÙ¨*X€}âF=a"¼hJñíÌD¾…Á±ªQ_0{¡¨6‰±ªÇ™šˆã¦J€Ry¤3PªQ^/ì$„B³‚ Õ< T•ðU€GDødwá‰Ê|ܨÊüǃi$ÜVµ-óoQ¬ Tš$U¹IÖh±ÀHÌT§04ì UoÔGâò…v5ƒÁ“°oEUm•¸Ö@Õ¨ +Î Hug©w0Tm”*ëë©| ÂmÕ–ÓHmQá¬^Ñ{£¬ì…¥¢¨ µN”‡í +ÔJ_´’Ò>KÇðUog¬t.+eH*îõ5ù¾²„'ÞBl /ÆŸŒÕ3gÒÇc)TÕ10¶•+åUÜÆl V©ÔSof·7CŒÄ@jMÌþ @8ÁR=a󷾚$ôÙ»¯×Ç“`¨§\K†°ýXè›TUoÌP (JÍ”ëOu±.3´›IÅ‹Mb­tP(wÿ‹.œq!ÞÁüV¿EÊúêP·Š{àöôE%nƒTè»6Äâ +úFf0Š[*kSª–¾ð8Uâ~;±à”mPO´¡¨)àì[1ø ”Á‚zRµ2UUG3îSƒ'à¨îlÜÇ)਱!U7ªj÷)Ck,F”í¢.Æ)ª¾™(Ó•ïb¨äx†øÔQÕ4«*`€§ÆTAq5Âi1F‚ê³sކÉœ>œÆ©lìST[µaÜ »àE};¸žQé]3AŽ ±Ö¿©Ò\Š6POž²8Z#„lpÞ‘òÎÐn"–Ó4TÂh” +Î/#U68¾]Á3[ÕU} UE‚ôûÄ¿ôUeÆàðN1nŒ³T7Ðï“…a¨¯„(FBýd¼ T0öö +ÌHuƒ>†Q*Ör02èã©35S•ŸF‘Ӫꑈž\3qT Åâ.ù­ÄsFª#K¬¯º¡™è±732èsÁ ¥LÅMêd +\KÙ(#´øIâ߉2ŠKgö):$–VV…F=1(5ºkjbÒ—¯©îl$ÔDc¿¸ÑH¦£ÚÿjŽ12Ô§ ’‘PF¢Òõ• 6ª¯´Dp`ªLë’ðAª•0»‘‘rc²ò®ªÒÐ(ª‘¾Ã+r¯¥jï.ô$@vï0’öÍ42‰´‹.L3 3wâÑU¶ác·…™00îÓuýPl÷•&b!U#SᮆzjPkÚ§ êv™Àm "U톆+EDgЧô’T¨X„‹ªÒ“±P@Sè°²ÑH_Ä¥z"C…vCÑAlª'–×2q©PUÊX\ÿ8/Iý÷B”o™Ý(´«Ž~©EÅ)¨+#c¡ FMê5ÚÛHDÌ&ÂÅ‚”ªª­÷ Üô)¨EÆÄ°‹ ÌáÔeªjO™ô)\k¤ðúë G•ª\p©*´ñÇô)4í&âJ5Q•>3QêS•(è ½RC!U•Kï` âFS#ñâ²+› dÖW1B»€…ÚÐh¤NÕQßA &aŠxU޾÷ûB¥˜ûšô•31|/Ô8‚ÛŠND±îÌí[ ÌDÜo¨§¬ä¨Gc½ -Rq+'6ŠâŸ« ”™ +àâÓæEÿ”©Jš +)ãØŽè÷©¯g"ޱªR¡Q_O–±Pc œ]bººÀT·îé ›‰™q‚oÕ¹êÊípµkÓT(>hbª<±|¡‰zzÕ(]ª'” +ëc" Z¢™ r‹eÅ$ñïõû$fê™(Í´T¯OáiA‡JñŽUqÆÅªMR=¡–1QSHqù•JM…r¯bâ¢PÌÒ°on‡ºl‚ÔPܼªöiC£TðÒáÔWU£úˆ5Ï€²±&RQvU5T¥JïŠÊ!§D +Ò¾ŒDL%ÁíjÀdªR6Ðhf$vLUÿÓDé™V¥H‰ hWJ„{ô“©¸OÜPz¦êv©àºt!À-1’)UUƒRJ¸è Ž¢faŽE^$¬<DQ:Ë• ^BŒ•¢®t]ª=w‚¨c¼0u‚ ˜Ýfd(ÜÁËg(†e°‡[Øx†çSuü>„Xpw‰ˆÈX¿Ï0*' +o'£CJ|`¬/lßTBPAÏãbjÊ­¼Ø@ܰ¥'Ö^…Ò‚ HÅ@™PF…<”À—õœ›B•'¡À¦ò=ÕŸÿp胡¡XñVeGq•#囫jŠë÷©Ÿfj,úôðÎ+¡jSâ€7ˈ%ø€¾Ší&b\J¾Ï åô •Ê +n¢®J§ªš…·üˆuRõEÒ%ìëS^¬ªj¬/žz¤®ÁŒwÍ [åÌŒÅ8§1l¨ªfá] +…vñMô”Ž1cðH ›…… +Ÿp¥ºÒª©ÈAŒU‰ôª÷7„¶O•RUYap<«÷&« Êá0­°) cU£™Xô[E˜qÜA]àQt2aê‚`Ç¡ªQ¬‡ajh,ÜÖPÜd&†ïU¸[Øøe¢ +cs!–t›™˜X +ò!ºÝ156Öãž*¥"nn–ªªbJÿÃÁ(bÝ-ÿJaÿº0õÊš¸Q]© oáX)(63•®0PmÁÇ}Š”ªШªÏf ¬8¡V¥Æb¹EUt4·‘°¿ÙLPçZÔ²ª6pF®°kP ¥Æâþ]uÁ(h4ö›ê¨ÿÜD,†)à6)À\±6©‘Ðhd*–51ês#q9c_¦²Q]AnñõbÉœ·©ºƒTpò ZOuõ)JĆN¨£¥o"ªh7SÊSÊžTÚ·ž¯T5;Ò>%RqÇÄ;¨w‹šˆw0 ù˜¨X°T*Xc ¬-"ÞA½ñ×ÎP6ö©f¤$öR#%öV-+þIú”Â…‰Uë ¥õU¥Â ¼±XÈPª.ý®:„Í@].üOeæi\‹^_w•€yÕ:Ûì©×_µ‹´ªo£é_´™õá4ê îBZÈ¿ÕBƇÿ-êK¿ŒUå»Ä;ˆ/ÙçbõÞä>·ýÃK¬ªücÖ)"ÞÀè%´›ˆ›»„‚¿R!7 4G(ÕWö!åz†h•ÆÄ •s ôÅÛ«ÅÅë ²ˆ·~©:&î#642îð‡·P¿ ‰R*”œì„8ff‚WÁ@£èRîhV6Š®@\'åŸï , „§'¢G©±ÈÓpÁ=5±îCÉ„T>åBe£‘ÀÂ×5nÀª±á¿ÝÁàϳ–¥ú"ßýÃ8(‡ŽÖÕ„ýOäÕKl–MUè7Š^aU.4ý[–‘šø©ÏÌQ9Èñã„d'!é?PGØ a)L EVl"òÉÿ«ÛM ÄljÄËHý"ñâù‚Ø„ò; ÒPH÷ADVÜc*¶ýõ”¿ØH¢®£Ìzøc£jçä_î—q¼æê⿘¤z©ÛÿªµqŸó18Ýø¿ÜgcŸ#ÿPÀC<2ŽqUµ«rÿ­€®Â¯j+Üê‰É˸](}` ìnÓësÔ©¸]寊ˆˆ‡þ¡ô„xˆ TD'†fb=jWO*‰A£X ÀP(ñWE-T7’¸[\0&Êv±Øš¡pF©‰H{E÷«L¨ë1ªòèñÄR }Åjúú}·¢þ{ß6ö=5ëß ë‰§f ;³¡]*¤ëªq¹˜x +>±$´ Ò«ÂÔU,”î'Uº®XNTÏLH.þsq?U÷þT¢ËKh7ßTØ£g¦/lwÙÑëv©+"ˆÙ§úâÞe(Ê Jx˜XUgÌüeVö=æHµ ”iÃ}ÿŠW +N»X8å?”¹Ž P•P5÷¹tÑÿrÒ_öL=á}Šå@ ñøY=ñ ¥AVî²+I ;zÿ×53*b¨6W›ô²B‰•?÷@½ˆ0¢Kê‹çó©4–‘ÈñÔEÄ”Çܨi— +50ôû­ø«'ö=»ù¢îŒXaGugÄâ¸]Õh"b-¡ŽÊ_uF|¨º:.Aþ}¨‰ÈÌÅ¿ôÅŠaâÑ…ºïÊ>Ç‘©¹²~ß#IE~†kœ©$• +õ¹°Bn"¨~#áìê?ÝYýP#eI*富ų|MŒ”n e»©xHmñÊ{‹/$V©ý½VWîÎ06é{òÀ©¿êšº×ÆÊ¥¡4»zê^K…˜˜Êì‹ÕÌ Å-¿ÂN{(–#úÍT…$áF¢§]O¿O-CõÞ@áÔZ©XÞLO]oéO]ëkšŒÕYsF†jÓ¤Jリ‹Õl©P¾HІ«Îˆ†ÅDL+U¦×(Åì23á»?õA »L”ZÀHp|z‰ÍúbdÇÔX܉z­Îr4ö®ˆ9/B§ÿt_õÍ”Y´J;i,žrKš‰ëÒ°ÏOS±&Žp²Ì_ÝG­fõúdEHÕÇ´ê СYOÚ§¤¢:˳…}›}fTãX\ Tá"¼ËKhWŸÇŒ÷ωI.ê£pqþôÆÿå>ÊaGtÊLwî<]ŠüÓ÷³–¯7µ]½Õq…_ ¿«¥}@€“ßVUë +'·­ÿÞ>W¾u«½—“£.nÖEíó†êé.¶F ‡å‚§b¹ü¨¯«‡ÿQ¡ð“9úεëêëénÒey=]Gôç”5꼉©¨/ôŠ&°ÿÞ};üZÃMÿÐgè*¤ïßþu«òÏ·âúàדڮqótúFõ=~Uk{ô–è%ç¡>Rk‡ê,Yåäæà´r½A—Ú®N—óÆxEéОáƒà+ë6ˆõ‰ÌFŽçãê§q‘EX¸>$o,ç2qöï¯Øš4Œ÷CÏÌŤ }¢3¾)ÃH§°þ6„c?¡è'g4¨-Z¬SàÒÑW›rñíϸ üúËŽÖrZ"·÷Ô¤ýòF2þi#·Àþ„‹Ÿ6é M ±¥="q>IÃd¶Î62»~6Ì–~”cPʽ¿w˜™;žËØ9mœF¹‡´âÜú‘Ú¬Wüüî©-³øðâ Œ+ºÆÓ/}$˜1’®Â&´L§£«¾"S†Q¹¨½`4Z0†t‰hÅoÕ´¶÷Ö¤}b†Ðá%㘨ò‰\LÉWLhæh68y$“è‚ LlùWT@æÊ1°?ç›<œõ‰óFØzh´†%ë¬aÉ»hXPNH9‰…•s?Kkû~,9 ÁùkÙ y—Óž–r$§YÉ&sN²aLbI»jذ^š2ô>„SôóFKZ²zÕF‰¥Í–~r·Ø¤[²ŽÜ-UG¶%DÛšñÔ°9÷³°°—ÈîšÖ + óÍ6Î]ƒòÏiåà«i¾‰‘¬Xk!ÙdÆÑ>´?³5g87’òJ"£¼5¬XO +E€æztÝú•K¹’ÈþÐ9ã¦ac¤Eò>Z¤sHÎ=v0ï3„ La]27(Go"Cï‹ú Á†äá¢j&ñq º\tÙ$>8{ ’çq|dÅ$>4c Èí<ˆp îÏ…W}…Æwë>ˆ.ŸÌ•œ7c NñÑ9áɽ5dí4óM®H¨Î'7|­Hª™Ï™· +œ¨ðÊû… æC2ÇðYãà9Œü0¹ƒ·iï¯-wôÑ–+\5 [7MÒa«6ã…dÝ#F‡ò‹F2“?^U6™,šÈ$ c£Ð:HÆÅ–Nâcê¦r!9cÏ(ÒÕ¿?í> H²O¸lÕ¢œ|µyï¤al’ ”‘|XÁx>cÏ6çàb>¸tã=˜òŽÒ9çâk¦r±µSÙ´æY\JÛl.´xëŸ2‚ñL²ÉÅ6Lc“[¾¦K/™2•·¿£²vÏ¡£K&°Ù£Hß„!6<š $”kê’ç¸ú©lrÓ >¶b +”4‚Þ©Cy…bÃ’FñqµÓèÀÔ´{ð@68k4‹äæ´óÔb=µéÈúI´WÂ`KÆIcÍ2s¤#×H¬I´Þø -kÆGSÆx ¹ Ð’£5ã®±i3#Ù¼’XÉìûÉ[5)¯ðA„S0Zóý,å +‰5 ë¦!Ûâ§E9F;„j“^)CH$¸¥Ü±ŸéÒÏŠqêïÀ¸G ¢ƒŠFÓ.ñƒlx?MxÒHôg=â3ÎQñü¸G’óÞš û²-ýdœ·&å:uO,ã|4m8¤Gm½µX÷øÁ\HþXÞ/kç9˜óćäŒU„匣‚ûŽaýiÏH:2o“±g›¾}¶ÉšÎ;b0Ìë—<œÉÃdŒ¢ÜîAØ â±xž"K&09'–p9'õù„Š©|hÖX6kXîXн´¥ìšËç3àÓwÍãŒò)ͳùÈ‚  °Dút.èoЙŒwÜ+Æ7a(Ìå6Búd†ND²TÚ ca¶`ÜüÐ~qC¹ð̱¬æH&´`,R<ôØfÐ'hMLäÒZg³);fñ H–¢+¾bCrñúa’†Ó C¡/ aE㘠ÌQðN°–¸¤m3جƒ ™ìýóé¢ó†dñ =6±Ý£pàøž‹©™÷¦r.bâk§P¾qC@†Ø$w©­3±,¦5ϤóŽ/áSÚfñ‘uSñÓѳÆÃZ"]‚û3>ÉÃèÜÑ úÐþ©Ãiÿäaئ‡–Œ‡µBnEcï®CyFÂ:éZÚ'~ˆÜÞÍŸ«¦ÜÖ ë:Üo˜ô7ŒsàÒ5t€ ¥ègMÚ÷£Ü]pÖ!Œ’¶Zô–0´ÞÃ2n¡ ¤圛à$ÿƒi4ß ¬×€”z>ú`¬£@òë“2„Ex‰*™@gŒ¤Ñ}å ÈB´É­©CظmÓèôsØ”ƒsÙࢱ¤C€6t)¬X“¶€ëÐxcù ,Ç"ù°æÐ½)' ÀŽ ');_m‚wÒ„õïv™Kkšú’ó Á8óŠÌgŒV¾wÑ8ŒAG† [0alÅd,ÏH&à÷0÷ ñµÁ%ã Ñ>qC°Ž ++ŸÈ†äû Øæ(šÀE!Z0Ž MÍ&à‚2Fƒ Ù…í¯’¤Ë°Ž…5U:l)Ìš:ŠO¨ŸÎ%Ôé2ƒ€þ†õ +ë’ ÎÅ¡¾Âºá’®JnœÎÅWO…~ÂØ²á¥@ù¸í3˜Ô=³Ù¸ŠÉÐG Gd#æÒûæÒY‡æS'–P™çÒ‘UéÈ2„‰+'ÁWЙp›¶c×8…ñÏ ºd‹o˜F#Ù&‹Ïp©»f³H—£±@ò5t?åŽô_âP:²x<²ãk&µm&^:°è=Æ'~(”6Ë€’Ù ìQ 7q[@ÂP¹{Ô@Òé>„—‡2ñh!} º ÏÇz'%‹"ýGzø€±è4¦#[‘½@ö•EkŸñ„Çúsj ^[ˆ€nÄë ýt`&ëÄb²â¦•z YvEJeφæa½Ó†ÑáUèôãó©ªGßÓ×h¯œaÖ §=4Ù°ÂqlîELÁ‘%lî‘Åxì’šÑZ­œ@¹ ìü´¯³^_¢y Dö ­G.¢ü+EÂö™ «@ïPv®šŒ3²Ë€—RwÏ¡JβHÇl"ÙÄ…¤fS¶Ïd2̇yÄ"»ó 2„ç£5ŒÆÖ3~0´>`> 1[cs>qCÙàôQXGÁ|ùeŒ€±dAç¡g2H¿Ã:¢CT6p?’3,3ÙÇ1™H¯"9¾€çõ…Mß90$ì?‰æ Û|°ý!£€gQ9‡EÇ—y‡Òé­H—Ö낌r¡ùXWâOpÖ(:"k4¡Ô£túñB:sÿ*mß,*¾n2”ƒd%i~?ß”áØ>'í˜A§"ûŽôé5HîÒ_îì‹9›P7Î=º®™Lù¡ùs‰sý£ýR‡ÑÞéèˆÂ± Z\RÛ×´OÆ0Щ¤;²¯è »L,ŒmÑxô&â ·4Ò-v·¦Ì9Xt%Ø +­,Ÿ)Û¾¶¢œûY#[nÁ¡¯ˆ«À÷V´—†5â_2}lÆÜâ§í)Ø´£ó©¢kR²úæ7LÚ¹´Úp2Öyá:ácü}Þh&u÷,*çø:±m:U1Š*O…Ž¥B‹ÆP15_Á‡ˆª›Hxg •9k[R®zjîI:tpÁhÊ7u¨Ü5´¿µÂ[0)þˆ“)þv€óÏÅäÆr€lØGñ ¬/“G°[c3á¹cä5w¿¡êº—cþí6ÛD4¿òšßÈkº¿%òO.dãꦀ|bÔ  :p5ËÁ€­'˜ +ºÙ­á Ÿ€ñü£÷Gxv`~À |tådÍ™£´³È¾0Ⱦ€ƘÉ2ôƒŠ*–A¸Û!„!Àþ3žˆ7x„ë`,‚l'­jGédÑú™=D£~ëÖèg&¹a:›ˆdý÷-¥y†¼ú¡™¬îá·Dξ9`¿)çÀþ°Þá9°v˜‚1LÒöé’5lçì´HÇ@mXg0.ðLÒ/Íâ̶žšÀ)dï4G$âþJZ5¸¬ÜÖs=X[°>aüØÐ´Q Oidci7Ä9M"=Ð:p +íO {Ly#¼‡ä“öÏAú ùDãÌf޲”!®BØõ_àBèi ¼ÝSÚvA<ÄÙtÄÅ|ÑóÁOø æé,°É b3·õ¶™Arê—‰æ0e(è~À‡¤½‡–ÜÙGKæè«…íÆp¹[h™S€¶%‡Öâå6¬/¦Zà› ·&&ìµ,¯³[5-HG àcÀ§`Üd¶>š´+Z›èÀÓi·ÈŒsèðû \7œC7Íà´”³Èš‡ßËkŸ|‡×è±è¼ òúöï¨Ö÷æ²[mSûÂŒJnE×—…e0¬x¬ÌÉOËŠæúQè]È’èü‹t`Î(¹£Ÿ6øpï¨Á°ßè! 71Ž. +âÒåˆ[”NQ#Là9„óÑüÉ…§>Ã%§¼bt`Ma®€¸6ÂHýI„Mï˜!|0–aÙc^D}„xOXÂéEc±®E6 Ù·1€Ü#lñ´æfÒùG—0ˆ[Ãd}Pß@ž7¢š_­£w>³"¶?]ÉdìŸÇÀØø¤ |M¹! éŸ0” +Î…ÇÉÈ5à.Ð`¯ ðÀ-HOt=èJð ù¦ #\Ã`˜ °pí—5エZ„Å›uã0)€™‘ކ뮦£1&™H$'·ÆéÀZÙÄ:­ø>|Evaýš ˜w™]¨6ðgÄ…4”ë'ýì…ðÞ í¬A{Äê€Þ¦‘Nÿ‡ŒuÕÀ˜é&¦j“Ð4 -‡ÖÒÒ)jé5PŽxµâ4–6¶+Æ¡ŸœGœµƒî£\‘ì:EôGò¦ |ÝšG²ÇúiÊY´6AœÃúÃ:”Ùùká5†t,ø-Aw"¾§…í¶óIC¹€¬QàŒ ¼ÙꩀѰ®J¨›JŸ—ÒÅ礀ñ1gD—,;kHîz¶‰ÚÿÁF¾÷÷DÑ#:ºh¬càq6à‹pÑ ãª'Ëü@æ_H¤[D8¢g#ü„q+Èc\ƒ.~doÁ÷¤ˆ­žXô7íŠùúÎáÿ¤á÷#™}¶ëPdcA—±˜¯§Œâbk¦²{ç±»æbþS=…K¨™8|†\xî8> ñ´&¸¨‚‰/§5}MÔÝýž¨ºaJgŽ&È2ŸR9Íh™C–\•Ûž­$š_®mµœ¨¼nJçŸ7@:sã‘2l-á>@î9€ +x•,¿nB\2¢#+&>$Ý"² ÛuÉŠ[fDCç€g™ø¦©ttÝ$*ªV‰ÒͧÊn›Ñ5–1u+™š»ËÑØnÀv%®j2ðRªä”!ÂVó°]Š©úŠIܦ‹ñ1ú°™Gй§S¥×ŒÍ7Ë$à˹شA¦äëH®`M/'ï‡ßƒ +ð œñ'ð¬M$÷àçí“6ŒA¼…›è6p¯| ÒŸáýÓ1Û…–Ž£‹0¶f|²G€^¼>aÙ–@-IÊ=A‡ñÍÖ‡¦ å A»EbüÒG°ŽÑA6 [/-À¡¼2öÕñ‘Å_oû;# 'pûæ³é{ærÀ½† JX®šÄ$ ç|¢†0IµSåÕ×Lä»?›û>m–µ¼_FFŒù³ä<4À/K8G cc×9ÒŸGÿ-™Œ}úàCJß5û“°ÿ§ô+> qøe(·€þ øúÁ—‚ðâëŒüPðóȦ~ /Æú üŠô$æPˆ¯3i{lœx +æëÞ1ƒY¤ùÄí_Óù‡Ã{²)3ô=Qwç;:kß\*< ŠøKpúHð¯RÁÉ#h?46H/Ñ™çщ Ó0BKç[L%´ê2á _„ù;Ag]@Ö¿\F•Þ7¥š§‚]d"ª'RÅÇõä —Êª®Ó)Û¦SA¹£wdóÎInÒ…uÀVÝ[NÖt|GÔu|O—\6÷œœ‹ÉŸÀì_L]ÌäXÀÄ7NlO#¹Å.çôboYÙ-#YC×·À«Yhr‹·6ðu +ø:ØI„›À‡Ü Ö5ÆR¡…cñ:@sX t``À”oæp6¼RÉ׃2F`#Ò¹`/¨ „G÷Ï!óO/f2ŽÌg‚ËÆQÎ!à÷LxùXSŠðJð釱á‚ÊÇ1èY²-ÞZàce¼¼#} >2âð°^X—ðAâÓ¶©øzä`ð×`_!ÒetJëרGÜÍ%p3 d“?âÄtLñ¢ä”¹ûÅFöðÑúv-W3ÖŠÌ9ní3´GÄÁ_ 8ãŸ7 +ì‰xtxÞxàç›ârA飸¨â¯€¯ð Ó9dçyÿ¬QØWã_3 ¸2ö—û& cïCøô-øU|}(p,èøИLaÒÚf!î<óæh4ð;Ä›±8蚬=óÓ3ÙG‚N$*¯™Pù–PÙ€ýA¦Gˆ?P®aÀ÷ >À'´KÐÛ„ºDùcyõm3*ãàÒ'gØ4ð]³[÷Žß9‰Ý© vsIdÓ¹Ô–™dÕeS2ñJd³)Oð?û"›¤té4®êþ +¶öÑJ6õÐ<À GdhÍ#½¥ƒ×5²kT²]?S¥Áï…ñmxåx˜3¢ì²TÞôb©lûçÖÍ/¾ø:`Sàëà3b=К÷ +×üà }ËÓcët¹øúiˆÍÄ—M JoÐÁþšÄÖ¯Éâó†TΉ…dÑTÎј·!®DÇmŸJçžYLÖ>úñu)í7û÷Yo‘¯Óù‡³Y€ÿ p:¬UÀ@J¾ë%ñõ¤‘8¾†æäÄ6nÛ .¶|2æëöˆ¯#ûûSZgb¾ mQØÌs™Ôí_c?ø7ÐÜ3 ÷V³m-™}]rªåÕzYíU32kÏlÚ ¹#ÂâÎç°>šç§ øs¤Ã`mB8ïxÌ×S2Ìgc¾ŽýIH˜œã‹ØÌÝó¸ø²É,æë¹˜¯3i;fC1_"ð ày C‘¦ +Ž-!ËΑù'ƒoü”˜«!\йzLÅ$ˆ‰1ñU“©¬½Xµw¿¡»VõÝK&Yzx¬Sì³õŒ,W8iïb!ÆW1Y^}ÕÄfÇç•tìö©VrÄ•-äÒÞW ã{Ï”¡l ÒÃùãÑGï>ÖĘئ©€‰ ;ÐkAÚ|LÃ4¶ºc9S×µÞòL 6”rFÏÌ…8Û4&÷àBЫTCû +¢ +qìœÃØç +üŒMß9[^Ûþ¼õý*ÙŽŸVË*ïs€‰`Ì’vÏV$Ôêò>‰Ã@6Û°ùGô¨²«&TÝÝ¥TÕõoAà÷D6•.>nˆ8Ñ"6¹NtSÿp×úØ +Ɔ,»`„å3cψÑÐéûÐg÷l*çì":®M—ðNbñQ¹›èW.¾Iælø5H÷È”gü`¹}˜6Äh'Ä}Ð<àxwÎq}Ü7ð? Žt‡t;èEðσüÑ…'õ±ß(0{àQ:ïÐBº±{¬þŠ)V§Ë&VMe³ÈÜ9Wt/æL`ÿA¿DTcþÇ”Ž¡lnµY1ØX`(Ä=¹­ÈN#YÃz2(g4ŽÓ·wÇë ûÐc+'Ó)»gÒY‡ç+õz>GŒ#rƱÁI# ~€94âF€ ðWÐ)ÈþÁšÅºt'ØÀˆ—+¶¿üø9¾Ç«§P%' èܳK°?Â+f0ày°“œoÚ…'Z®[µ1o IŤO¡ÚoÄö#¤fÜF+^biÉI°LA<½å1p +ë2ì`^ErýLx7…þñÆ9r ÄXÙü3F|Òî9,Â.tøH'Ÿgbë ˆU±Ù;ç“7MÉš[ßR…G—°‘•_Áµ\ ¡™ÇæË+ÚMˆª»fdî±TRÝðWáàn„×!f:ŠOFëéLðÍ‚þ„wEöÇܤߙæ'ë‰Æ—Ë)Ämïâ!†t +íê¥ ¹à'ÎOy§Åþøña™Sˆ¶…s?óÕ$ø<5¿ä¡„[ÄkÎçØ µK¢5O Ûþ$ÈY¥H¨ÖU ; +œ| ¨½?çŸ:8Žq€ÿa*ªêÞwlÖÉÅàW 1#«o}+oî^.¯¾cfÓÔõ=à4ð]Z"¼½yíz‰¥¹…D†¸º a×vðÖæktA7@ìj³/±ÚÈbù„gñ~h=ƒ_Ò9ûf v²‰yµOÒPÊ5hø°Xà÷H߀… ÍßÍ 6{¨ms¸$ÄŸ Vî¥ôuñ©Í³ù”Æ™—Åò ñ%ÀhqI¨/!Hg{#ùErÉ{§ Ãþ3°­¹‡Peç¤Øoï§Ì­ AO¥ìœ ¶ü΀›ÉìQrG-È ý qUÖÉ'’3¤ÇV²MÖ“ãÁ—²YæØO¦ÐÄ2~Ȉœ±€ïùÀ¸á0\lá$»øêévQ¹A—qÞÑC(dã»­Z 7ŠPÄ\ÂRN~ý±!®~pGðíÂ:ÿ;Æ¿I{fb¹óÎz„É?¥/ox½ŒlèYN^ÐÇþþÀ”áÄöW«`ÒqC!þë—Ãz¨h<Ø3°­”GÐ@ÈáN°öp¤[˜M–1m³ÁÿÈ"\5,,-$›7ZJïï<âÀ‡û¾YÃ@/Z±nëÖ’’Ußl¬ø~dÃ&J¾V7ÄÃÂ*ÆQ™H߆䌆Ü00Ì?æ¯Èf‚¿Ð†qÕþ†}ÀË`c«&ƒÍLv8/‡ø;ªð¤ž¼ùéJÙÞ÷ëÑš’œ—æºïVJ,Ö[HHʶ|lHZB8 qFüŸE˜b·ÍIÉÆ „„v¨)úû']CÂ|㸆ÃVmüÕÙGÆŠõDöé@Æ;r0á„õÆE'¤lå…ï°^Ì ¾N„‘é¢STÙycÀ™t`Od‘n ËN`Ÿ}TÞGM¬Ö…8*èaºè¨>ÝòØ\Žx4èmˆ¡(B‘.Ok˜É6Ý[Ç·<±á¶¿° ›{Öȫ‰­Ó`лgË«."ìwÖˆ¬¼eFU?üø3ä[lØl+ÙÌzkP±ÍS¨ü3KÀŧï˜Ë'WOGp¬!E|â£Ùã×*¢r&?´õIN¹ ¹pìOÚ¹i¬»Æ»Fvž¬¼ý-]~ÍŒF¸û 2wÏ=‚9gxéx.yߪáÅ*zûs¢ñãrðK³ »¾f¢j&‘­=kˆÆ'Ë0ç @6ø䇡Ä-‘¾ó" +Ç/ÿpuà¿táQ=ÀàCãœCòÞiç‡ê@ì“IÞ>ƒ,¾)¥£·O–{¥ &ƒ Gù#@>­97µ«-$ËW®•¬_k%± Ýq<p'Yÿ`)Q‹xhHÉXðaÙÈÖ¸øöÇ|"÷˜ä|Œ’®ýiÄ¥áݹ†Ûk©¢KRÙ6ì{˃ãË[> x¥¼¾ý{zÛ‹õd뫵Tþ‘… 3rf‹ãè£Íy…êp.>x÷€|Tõ.ïb¦ð„6|k6h={‚°&U1‰‡\(À.!À×f-ç%ÔO-.8,ùs‘Ô<tÈ+ÖChݰåç̘¢‹&Џ]˜Oð¿³s†t +—R7áE²Š“zÔîn f{ט_ÊÞK ëÚªÛKù¶»ÖLý½UtÙ9cÐ TÛ#s:k÷ð]â|М1C<ø7Ä쨤]*uïLªø¬Q÷ð¦ùµ9ÛúÌ‚hû°V¾½sÚ:b<„kô™kh¹{â 2íÈlyý£ïÈêÎï8ÄË@Oñ鳸ܽ‹ù„‚ÉØ¾#[ÆäïYÈž6â2÷-À8ð²8·é{˜+²æÚwLí½•tÃí•dÃe0¿à{&‹.@솮›Ì&ï-¯yü-QxYJ=2›Ì=½먬C󨂳úTæ®Ù€é06‡8à}$«BWÜþŽ®¹¿ 8^6xÄë÷àõXòöL0egMÙúŽuTÛó üÁöüžn†Ì9µ€ «OŒ’ûe ƒ„ƒ–e×Ï +É)p +á´^f€^cÐú_Ä‹,Ì \ºp!Ÿqx±"yû,Œgü3GB¾Yƒlyí•LþECœÏ1;¤_…X/[=‰FÜæG^qIJŸÐçÒöÎåÂʱ|s¤Hª˜Î§6Íâ³,œ%¦©Ÿ‚}ïà +J‰}ìQe_Ç>ŒÀŒ‘hMÇ1žÐ´Qàß +_Õ¾š­¸ñ½’³#ûùûçó)ÛfÏžñ¬ŒCg–2’ÎÝ9ÚÕ±‰9Ûî¨8yÛƒÎ8±m +áŸ7‚ )Ceœ™Ï¤ž˜ÖúhÌ£²[æ‚Ï‹K¬ž6c +ðÏ–7¦Ê.™‚ ˆø@|ƒ.p!à©LÁq}ø=]9ÝØ±󓆮å3¡ +ÎèQiûgEGUfTÆÉùttÃdÐßòòkFTÓ«Õ÷³Ù𔀭TæÔNc!¯žŸ{d1[ywÛØ¹–,¸¬㲃cBîˆSC,8:øÒÀ"ŽÄîí ìO^ðæ·;Zï|»Ö™wn1Z7žòO +\øŽûçŒÀº8¶vмæ¢)Ùøt%È»9ƒæ«6J,d¼ÄšEöÙynkÔ`Ø„Ó)À ßy¿lœWÌ&MÛ…cG[9?È.2Ù‡°™GðqÍÓ!&ø0 1Jˆ¯ ¹„\1Ð9€!È>ú&Ǿ~×èAl`1âÑ»f²ù' AÿqQhž“G®Åü5ûp—É »tX&ö«ƒßDQóx…惉®™œ|Qïc’?ÞÎ7n8‘5ŽMo™l´èZ˜[yk×*ű[Nv—®„QŸÊ NµÉ\&Û„ùøv’š¿¦rÍGœÞlz¾šÚö`5Yÿd)]|ɘM?0Mnýô1Žù‡å4Ç`³vÏ%*¯˜õK Ä_q\(©ñé#K€OȪn™0ñ;t ¯D¹gê`$#“©äý³˜œƒ ƒÐ‰5ˆ«”O?+›‡Ö8Ø ÈÇËß·ˆ,?+›Í'·Íì'øW1§Íh™MÕÜ\ÊÕÞ_ÃÖÝ_En{ˆãWà_*ox±ŒÙÙeEnïYÏ_$¬ªþÑrv_'y˜xÿÉ"Âm ™œ]ó€wCî.äÒ…§ô©œƒóéäÝ_CŽ”7šŽ,å?çôb&ª~ÈèàfTs÷Z:k×&¦v2•´{Öehé"ªh,øZ † /k㨠13ÙrÀQì¶Î Šà{’3. ¸ä“FvŽ°ßŠ8‘6ø3i„=À2¨ÌUÃ>ðˆâ tÞ±EØOô“¼w]¤Ìùž˜ñ œ£ ¹ŒÙGÑÙûæáü ˆ7@eK°6Ä© ¾±!ðQ@®—X¯‹óÊÄ9·{aœæ‚O‰ô +€sd=^zëàŒð‰ªšÄ#ü +¾Z>¾d +—¹k>ä÷R¥§0fYÝÖnÎìë$dÍ/–â…­‰C ÇrT°ß±úÞ7à3a’šu±nN ë+u÷œózø,’)Ì= w%¶b2^«ó‚OœÊ?ºˆMhT¾Sü¶éTáÁÅò¦öäÕ·LÈô=³È°Ò±A¡SÑÏWLqü'¾z*äpr Û¦ã{#Ý 21 ¢â¼T^vNûMRÛfB¾ø‘AN˜¬Ã ©êKßò»çãœ>ȇÜEX;iûfÛÞ¬bZÞob’ÏÁù5èƒqYZÛ,ÄôÙä]x>ÖÁˆW µ(ü‚×ÄQSïŽ(œÓ_ˆð `]¤Ÿ˜˜šI÷„˜åŽí>Ì1é2ç¶F×O†-p" i(Žú¦µ¶Ûª <ÉÚÖECt\«.“wÃpÕ4Ûfï„¡8Ï{jb¶5b0‡ì!è+e¾D"ö÷âço_jÚÞ9˜oäYyO°žA÷AlçQ¿Aö +äƒË=ªÏfYs 1kˆÕSh â—à/„_ðó'¶ÌÀ~!ˆ™"Ý‹cùà¿C8ƒI‰õhêÄšAFóé!›8ûÓ!ΕԈd¼l +Ö×'ØÂÃúÀã”þĪiDSÇ +ªí¥¹¼©k)z`6”;ŠòŽ }F8æ{¦¹s=6-¨` ~WxÄ @vA¿€o›@úTÞp)øUð;Å¢¾eí›Kç!ù):k×й‡¢¶yÀÙ ?Œ,ÿјl~ºJÞút%øB©¤íÓèÄmºg¾yÍ3&ç¼>öK£µùzÀ·1ÎÍÞ3bÅòúûß5×Í@7€lÃ~ÈA÷XȤíÁù²_€8/ø4 ‡,½lD¶½Y/«í0crFn8W|Š»†õΤíŸËFÖNb²FqáÅÀW„ÖÀ,Š*ÄûFpì?¤b“ s;æaÛùGõdü{ÄÁ´{2þàu·8ÈE?šÌÖ]™Sïà­¾%MðË·FëÈ]ÂúË!—Æ;~×0…*¸h@–ß1µ · ÔB¼^ÃéXÀÅ› ¸ÇË"óÆÑÑ•!/…Î?§¯ƒÒ‰`SqŸ!)ûÔb²ä® Quû9¤[A®!OÔ6±þkÌKÿÇÖ`ß'›~tÄ•þ€í3ÙŒs¹Ì£‹èâËÆ³ +?8OîðŒƒÀ/Œì%Ö quSA^è‚s†då3ì¿DrÆu.›}h!Ò&dÃÃåDíÍoÉâ“8†ã½mö BLâŽà3Nn˜†ñ²gDÃÈŠ³R·òNƇŒƒ8?›wp øÓ¨Âs†Dåu°ýDåec²â² U|Dô2Q…ô4¶uȦ·"›½{Æ´ÈfCÎ'“¹¶ý-=ëdÍK©Ô–ép-øeuÝßALŠÌ¿¬üE^ÝnÆ´<ÝL¶¼YGÔ>ùË}Þ±ÅdùUc¢öî·Èfƒ†8*âÇFàóf“wÌý6‡Ë8´€.<¶û@Ÿ­¤w=±$jî~C¦·Ì€¼;ˆÇî[µ±½C›hzµ‚h|³Œ*¼%…qý9¬TáUC2¤t Q;NÙõ5Ùø|Ûܵ‰¨mÿûa_pˆyAÂv]ˆR®‰:x¯JÜî\̶iCqwdÛãœdÐÁ¹GŽ8­‡1GÂn]:qÏ *ûȹ§õè†Î•Šû¶»ì–¦»rûÆÛÖlåµ¥ ƒ|`ÞEt cà•DíƒïÀ?Ãæ5„¼ ¢îÁwH–M0çDØžn}¹‘j{»jz¿šª¾â&ð!kî~‡õ\S÷R²¹gµ¬±ëyÅmì—¦óN,ýI´¼X º…ªë^†xÅ*¶õÑf3.cï|ìKÅù¢æƒ¯tÊîYdá©%dÙMcyóËDS× +²¥kÛÖeÁ´<ÙH6v¯×?þúþ軼æþ7 ' ×Dã‹e;BîxkNíí¶f?a¨ƒ/å6Mï~U?ûFÞöÛêô[öÚKúJwºÛ…:üŒbö¢º–?ÐaKïï’±û»Ðß=“³G:íèï(¢à–>Qp]O^ñÄÔºí§¥äÑW4ºÃƒ?úÀ° ¿³CN¶¼]/k}¶¸ ˜=¾aUvÍŒ«¹·Š9üŒ¡÷¿‘Q•÷¿Áù0©­³©ú§+d%Wõßô¡À»Éú‡î;ÚxàD6ÿ²†Ì¿¢Ç&™ËfžY x›ªy´Ç´ÒO,{ŒýNaý҅׌Á†bRvË”Í8¹ò_M,Ù¦7ëÁE¥šøÓ2®u +™°cš<ùè ˪Gú–‡zWËNÿSFœÿ•—_ù»=yéWgÙÍÿÞbs·×|ös$óæeõôK4yï­/}ù½'Œâîíî^G4sö3yò#KžþÀqg{*N=ô²=øÀAÑÜaÍW·¯æë­£ºV!Ýó-Ì+‘j!U÷l·½ÛÊnû#‚­{¾†Í:µ¸¢]BÍ >*o¢Ê(ÛÄ–YLÄŽÏI›!yûât`©Ý/,¨=¬è#ÏiúÈS†>ýb {ê‘ sî¹3»ëA´~\CÔ>þVÖüj½û…5}ð9E¡9”üh!?ðËfjÏg+âÀG+úÀ ’<øÚ†>þ”eusüÑG»s7üÙc÷í¨m/ÖÈ~'ßöz9ú,™£òÔ¹#·¿ZÃ4?3‡x-Óöds³bG¡Øs¡š;Ö]Ë@÷ÑMHÿÕu-…˜…¼éåRyËÛ6;?­"w¼_Oîy½I¾ÿãFbïçMÄþÏÔ‰ +úô;¤ÞÐÄÙÏ<}á­+{ôÕvzÇÏ æècw¬{ }ì)G|e >f›Ã¿l’ùe³üäO$}ñ³‹ìÊ¿ìäga˜ÛϹÛ÷#í.\²;u}+ྂÚѽ‰j}»úF]4[€í +ÂGĹϸP·ÞøR7ßùPWr#.ÿÉøñW[ÙùŸâò{êÎkþùítþÅÍ öþHêÌK{òÀ[Ùöi½¼þù÷òæ/«`=P‡zHúØ Ž;ÚeOzBSmÏ6È[zV2­Ï,Çï¹€|+NÝñ`ö?¥È}¯­È]=›˜ýÏIîp§=sú¹=±çsùÏ›è½ÏåÄ‘6ò㯠âÜ{yñ'úúúN?uóµ7uïeu¿Ç8û‘£Ž¾¦À6g߱ġ—2ùñ÷2æP7C^êr¤? d^u¥Ø~¸YÄ}z’+ëîõ±îèu&žüD=î §~|çDìü²ž,D64¢|ð2ˆib]Žp)ØðWY>Xd½ë_+™#=<ån°ó‰sÁ|õÃ5TÞñ…6{[+ß÷ëÙùŸ(ùɤMÛß–Ë*ÞÛÔþú [ÿi½¢õ©Üþ`»»âʵ0ÛÛ×â·Ü¼’hwñVw¶Ã“ß×Ųm/¬0VÙþn-ð4Ù9zÛ‡õs‘ۧȪ:LdG·”ßøÕ|÷S,÷åf÷éVóåe&ýûë æË“Lú—÷iÔÇ÷IÜÇÛyîÏÚJ¼»›ÊRîæTÝI­píÙ[F|ü{÷¾+ÏååáJ»77K¸·Osø]YäÞ`4ž>ÔŸœéóŸœd­¿­7}\ÆŸëô±»|'Fqâ©;sá­ yøAzÍq7;CížÞÈånwG2?v{±7žùó×î‡ñ·Ú£íÚ/¥²7»ùó}Ø«}¸‹~ôùgòÇW[¸s‘<Þóâ/Ýòå.ß÷E:ÏÖªùõ76Y‡gYWvXïÿŸÕÖ§z­ˆkï]ØçS¯ïä+޷糯;Ó™÷ÝéÜ›ÎlòÙË›[ÿmosë¿ìä·~w–ÝûÙ|ù9’ùô$ƒÿÒ^àüúX÷¥+—¼÷Ò<ÿFAí~g!/¼ªGæ_XB”>4&v}Þmì™'ζçï)ÎÝñQ¹çÄxb«8Üî`{ Ýž:þœ£O¾TÈO¿¦éóOÙKO¼¹s¶r'Ÿ¹±'^8Èü¶I~ì£5…ì/}þ™3wï^$ûðAœ¢ë~ºýëkÅî/Ôz=ÛUëúêp•ÓûóìÇÜÓ{)ìíŽPòÂ{;úæ3_ºûAœÝ›«ÅŽïΕ{<ß[ãÓÝTø¸¶*èaU™_g}¥Ç³¶2Ûó©Oo“d¿{ZûÇ&ðÿpþ£ÙØ–iDÃË¥äŽæôöæ ÛÀvÉâÎL³lølL]þäj÷âj¾Ãó‹%ö/g9õœ.wì¹PδwEÈ®ýf¿ùpïr›ä33¬#úo2·•¤³³g:w䑃CÏ…2¯çûê;·ms{z¬Ööñ °kô¾n‚ÝÑiÅAãôãÍ »G3îùÓ»º,ù}OYÐ3ô‹ÎÏçmHæ*jn&—eÞÊ*tzs°ÔöÓ¥BþË•|‡·ÇJ"•`™l»WzðVlé¶›‰e>Ý å<’[§×GJÝžï­à?ÜÏã>tg;¾:_F=ùf}´w#ÑöÛZYíëo©¤“³Éí?¯³;ÕÀŸìq“·ü×*yÞÍÅÖÅí‹eg~¥ÏÚ3{ÎT¹¾8Ymû®½ˆyú${õ8}Ë›ë¥ü«ölêF—ìò[›ÿ°”~CPןyR÷žÊ:~u¥^?Šƒ9q|u²Œ}p;ÒêÈßÖZ4?0´lýh¶ùÐ?—n¾Ø»Áºëî^O[*ï&TÔÜK¬ÊîH¯IìÈ« èn¨u~}¸‚ÿù^!÷Ó³\æËólö×gÙŽoŽ•úw6T»?ÛYfÿþD‘̓ºZîÿÇJj÷ÏÜ‘gÈÎ\Ëd[@ç_3ìJµ½Ù€mî¡§<³á¿]Oå¶-d|ýssºæÞDùucbÇçµÜùg^¶÷n'ð·ïÅ0'ßÚËZÿ¶BV|c‰<ïÊ"ë’›Kä§>Éù‡·]_ž®qy}¦ZÑs;‡}Ù‘bûévqPgmmòܺ¤‡9µõíñ•)sù§7ÒÈGÏì?\/‰RÐö8½¼èIByK{lI[GtÑž{1Åè}KÓîf–eßÌ,;—^ò¸¢|ËÛcÅôÛ·Iä­ÞÔ™öüé'žüù'>ü•ÁÜé'nôÁn’ÞÝmÅ~îÌ´ùÔFÿò*Í«{gµ_÷özŸîu^Ý{ëùž™äŸ<¬oý7/ëø§›üþ¿Ü-®öZn:׻ƢéµÔrûçoØëÏ‚¶¼½Qæøæ\õôm$uãÕVêÖ _„ŸÝ¸æ.KjçËìásý®ŸÝ“3Ýžï¯r|q²ÔýùáÚÀ®¦m%•)²J£ççÞO)n¹W²ÿaTñŇ¡·;ƒó®µ‡^¾Qx«#4ÿþƒÐüÛèç»÷à +oÝŠ,:z;º¸åv|iîíŒJŸ'M¶.ä³;²^Ÿ,‘?ú/_›“½ÖÄáÿ±¡öÿjC{DzÇ{¶0;>[R ¿¬æv¼"©C¿’Ìíž þ]W.óêi +ýêeÿáa÷ånùñmóÓ‹LŇ[…vïî—PO_EÙœù»üôK9{©ÃSÑu3ÿОo÷ájIBG^}öãôÆ€îÖ펯Δñï®e8½9Sáúú@•Ëë½åaO‹+ò$•l*¹ö0¬ðò“Ђ ¡WÐ׋ +.> +8ÝY|­»ÆûñeÛîÄ—ÕßM(K¹Ÿ]¡ør)Ïâv/cYxkžÍŽÞåÌ¡,wôÃþÐkîJ·ŸÝ­‰vO®åØ¿¸QÌ^íô•µ}\)o~¿’kë’qÇŸ;ñW:ƒ¸ËÈ&ŸÿÙïx˜œ}/«1öAI£ý³k%ÌÅgòÝ7·©}l"Ûñóêä;–éêLì¬oð|¶·ÎîÝ5¤ /–Û½¿QÌýò8ßñÍ‘²ð®²Úš‡q•k}ž¶ÖónæÓ=âÝzT'våÔ$=Ϊ¬zW²§=ª>îGŸ@ótþNdɹ±•§oÄ”¸SRy;©ÔýÅÎRöóÓlæEWŠâA{*sé¹wëa({óI(w÷A$¬’©H®³Ê2ïf–'Þ-¨Œk/¨¬»‘T‘}7«–|õ6ÎêÇ^ëÎ^wW¤ŸrïdTW^K)ßv-©,êQ)’¯ºº‚{éuî¨oÄÇO±›®ön²ø±w“¬û7_¸·WçþÆüöœ9rwú<ÛÛìüêH9ýän8s÷N@â˜'øœ¿Q¼çAtñ¶»qÅ;"‹¯= -l|]îòæ@ñû›xË·½nVïÿÇËú·Þ`ùo_bí>œÌ‹n/®Ì¾Ÿ^Q}+±´åZRiäýÒrßÇõ¥~ÊÝ»ÛJo¯ä9¼9]¿íÌç_væðÝÏ2™ã¿;{þµ9ó»“C×íR¿®ÖFïî¶——*¶¼;[êøöt9óùEºüíߨwoØ_Ûs]zö•9¼?^bõ¢×êû“ ùòA„KÏ¡ÊøÇÅ;l]Lµ¸Ð»asë¯ÒÍY'§m«e]7fs}—¾ÕݰĻWѯvTt&VV=H(s~½·Äêo½›^õÚn|ÛËmøÐËoxߢè¥6}êu°ú¥×Ïꟽô¯íÉôoíÉòŸŽÙô´—ÛXÚ5ÇòpïZâê?¹ÝávÚ3ÜŸ¬~PÚPz7­¶åNBexge#ÿæ~6ó¸3Ž~ô"‚}t?ž÷$ÏïIs]l{qmøýÊš=—ËŽ_-}\…tö™JŇ»Eo.—;¿>RÔ]טõ(³1®£¨Öóykõ÷שdOO4ó¦éλEÎoŽVx=o« +ꮬ¬xœP™ò(«†ùÒI¼þ)’èù5Âúa¯Ãæk½›7úd¶± r†¼“×ßè]nýê·­ìï÷sÓîeU4ÝH(Av¯dϵ„’”ÛÙÅ^]ÍÅÎ=»‹©“èÇoé _œw¡;{bÜ^¨Nz[{ðJ\Éù›QÅG®Ä—í¿þ6¾äÔÕØ’mדÊ^!ûþZØ×Ì{Y•§®Ç”\ºU؆tÖ­ûaùŸº‚s?£Ï5¤ë’eUÈþñ9výÓ^k«ßz]^í-Ûþ$¦âZWHÁÉ'%GžD”æu¥Ô³¿ÝÉa»Ÿ öÐþÓ•› Úp¦wÙæ¨¼ák]}4WÙh|oÃILW˜KŒ¾ùAbl¶Bb`¼\¢gô½d‘ñ2‰ž±…d©<ºßêÈ“#W·þ÷¼5z×?¿ˆ¹]X¼í|ZÙž“J‹.g–U^Ì(kºœTRp)»<aïÎÖJæÝÛ Û×÷Š\Ÿ¨D¸¨ºàvFMãÕ”Êm7Êv"ÜP~7¹pžMç¿v=×KÚ®&U\¾]tõFtÑ¥Û…§®G×ÝM(/¿R™v?»6á~~MÝÕ”Š}xNJª®§VÝL+ßòîT‰¼ç÷òý»øÈÎÂŠŽ®üÇOƒóЪ–ÿó}‚ù“^‹u;_¼.z÷(ó°æ›bŽÛs]×|çÏzëüKj~¬÷óŠG³—Y»Ifê.‘̘ðµDwÜLôc%C%ƒ%C$ƒ$:è3ý4^2F¢«9V2s´®d‰‰•ä»BÍe!g†,¯þ4eMWïZËŸ{·ZÿÞfûál>ûîuÓù)‘íz“½y‘íöroEj{NUõÕ”Ò¦KI%»®$– ½XÚr9¹ìĘ’oFm¿‘PŠôqÉ™+±%?^Ž-º|3º¨ñNBYé½”ªîî œÞ×>??«ûý½¶gOCÑæ¿÷z¬ºÒ+]™ôãèï¹°~ú߬”Ì™­+Y¸h®dµ½¯ÆúäãÌ[Ƭv ל5MW2B2L2P2@¢-ÑÂÿ´Ñ{i¢ý$ªŸµPËôÖ:èªþè'MÜ6ý›:tžDÏ€•|Kdi¬Úß»€y-±ä\vI噬ҒK%å—2J˯§–V^N+Ûv9¹tû¥¤ÒƒJÏ^Š+9z)®øÄ…øâhmî¿WrøZléÕÛ‘Eé÷³«é_z2˜ŸgÈÿü´¼âB7²ÁÏ‚ Ê»bË×½îÝü½­»dîĹHG¡þCß ^ià·€¹Œ>ÐÓ~õðû?þ§ß®„*Ðo$ú:LÒ_cúi¬dÂÈ…’ÅRGɪ”öqÖ‘ÝøÔƒt”÷¾;Ûãé®Ê¶‹I¥—/ŵ\M,m»žPŠtLѹkÑ…I÷r+íßž,H¾“W²yüJLñë±%•7’K=ž·–2¿?ͦÿÞ™Ó™WÕþ20¯¨;¶Øâï½^«Ê~œløýF‰î±èâþ÷G=„wƒ$nú¾ï÷§·ùãýðÛõ}ï~è̺ßX´üà)Y–ùlìê=½ó7ìu¥{Þ¦(^ÜÏuxz¦ØíéβŽÊÊЇe. ,‹dæ°òJZÌã‘ Ieç/Çây]zâR\é“1å=w¢Š¹Ï7²Ðýœ7öôÒ–ï{=m~ë [³wÍ7›%#Ñ ýÿþÞQC5"ðmÕ˜0K2cÆfÉâ5!’âÛ‡¯~Ý»Žør'"ðV]^Íù̲ý?&•Ÿú?ì½wXTÙ–ÿ½‰JT‚ ŠbÀ€E0‘3TQU'V ƒHF$IÎ(QÉQ²Š`¶ ­v›m#Š9ÛmÛmêÛé†î;S¿½6ö;ïÌ;¿;Ïó¾ÿy|J Š*NX{…}öú~.´œºXÔvêj~ÇÑkù­g/¶~u®¨õüÅÂæí×*š +GëÚ¶T´ÖÞÞÒ²{×]·s›öä7v”´ˆ~Vnò8¯\á^vÐØ9r³ê¢…+ÐdÕ ÄµÈ^üg›S%ç_Ø)|ýØ%jâ×Ç‘±76UÈ÷ðÜxüO{U=4hÌDæ¦nÈfU ZÒ¯êñHéAýømnÈwŸ× _-l¬½^Ùû|w3ÔÉûZ /ƒºç^ÍøëæûÍ­Ñ/‡›àùá·qÎþè~FýX®›Q×õ °=ìí±&œ_ÈœÓëÆYšMþ=÷êøñÏÇúÇsp¼j_;nMrf´ñÒÆÿ&Ñ;æQÇ|ÚÇcÕ"ãÏdâR4Ï!9n8¨á±_i+ùN™ñü³ºä;­MW¶;LxÜ×|ÿbÑŽ— ZâkøèjÁާ_õ<½‘¿ãþ­ÜÖóW +Z±}¶œº\زãjY‹ï¥|É:9š¤gDÆÖçþ·ÛÇùßmpLZ¯©&þ7žÿüÇDC;4}ŽÍuJCËd]*kv+-ýTFF<>°¥ûLEËÁ³¥­g/µ_¹T¸ãÖ¥¢Þ‘ëùÝ_^.l?~¹ ¹÷riSîíÆfxÖ6ãøÞÔz§¸)üõÁí>#Jßùs–þ¯c̪‘}Vû§kªòñ5müªþg 2MR³DTLðu2Â>ÉÇøiÈHcš >é«Y#­h²‰š·®9®¿ á|I¹ˆ{s)ç-M8@Lh.¸]×*ûa¤:èýÙÚØ§;›°i>}e/#àk 'ß…}ëåë9MÏž¦7îÇ5gƳÆÿ_•ýßÌ^å#G“Õôÿ/×ý_ ?ÿ/`œêa¯Çd:~š¬¿ M1vDfF+‘é${db¸ë-FÆã!C…Ⱦ×^‚Ltñï™8£™KÑ}Ð5·a¥à•2:òÉÁš¸»»ê 7;r¦´yŽ}/¾*xv©tç×× +ûÞ\+Ùõý­Âïî ¼¹Ÿ×ûìNÎŽ‘‘¼.¨»\n+WLPûÿÆ?þááø Oëeªa… ÔMñOðU„È㧪9ö%ÓÐ$ud4n2Ò²EƺKÑd 74Ýç~ùh)×£²œïS]UýÿOÊ0þ» yíç*›?û¢¼ãÚÅÂö[— ÚoU¸ãöͼök—óÛ¿úª ýȵ‚æKØŸž»–×Ï·Ü(mr}©tž·Èù},øMðÚijûøýxâG´>~?_GSh +¾NæFvÈÂÄ™Y¬Eæ³Ü‘¥µ™Y‹‘ÙL!25wG“¦{#‹9,²õ­C«rŸë9]Q.’}s&¯áLm3É[¾ÚÚ|òrAÎÍZÚ®—4á<³jC—pþ‚s±7r›|•ßüÕÕ¼f|ŒM~¿(Cb¶©Z/sıuâ¿|\à'ÇÏ N¾óccP›d#Ð$ÕÉÈLÛ™,Bæ“×¢Y¶r4ge<ša‰1È|ž™Ï ÑäÙš¿)åÖËÿW× öÉÑ&|ÌÇbŒ½±×ôð«ÈDÓ ™ëÌBfºó©áBì›ç"[<þ™ájdj´­%ÇfaŒ,¬ehÆ¢84×§Ù…QsØöÚÀé˜ÒÆåºrEÀʨ¨‡Cƒ~y¶¤ýޥ¶Gø:ÝÉi~9’× cîë¹ý/ïæõ¾|”Ýse$×õ®”kfÍ÷þ_󾯱"rý žªš!C5\!áqe„Çœ±Ú4üÜ4¤¯áü0g&é.ÀǶ™˜­ÀöéŒm2MYŒ,W$¢é.¹hV@šËu¢¹t7ZvZuõö¿LZ7¢\¼¹žžv¹g{ÉW •_Õ4ÞÀ¹×]|l'n䵜Ä1näznËˑܶ׷sÛ_Žæ´_ü*¿5å^g£ûå*³ SþåëöÇx‘ÊXÍ™jNÇÇ4Û£1~^Glý±×T-©– ö‡øÚé,Â~Ó™›¬EÓfPÈzY š½6Íô(D³\ дu™ÈÒ}3šêž…lDhqÐNU‡ŠœN)ç +Þ)×ó¯¿ÊÛx½§¦øbcý'¶vÝý²´çá…Ò‹ Z fØv«¢}Ó“Îö˸Nxt+›ÌCJ8WîtH9ËÌlÑ¿ËÕI®9"Ž^ê8–éXaßoLÕg`?? [ä$b›FøŸ±ª >¾éh²Ž52Ò™Ž}#~Lœ‡LŒ±ÿ·öAV¶!Èja$š¾$Í\“f4¢é>ÕÈ6ò ª}Ùµ•3\+p'ÿúLi½þmuçkšž)i=_ØòÛÍ‹ù §oæ4~s7³îO²:ß=Ëê¹u/§«ûfqcàoߥÚJ3þ¯×l,þŸÿð%c¹°¾Z:x¬ãkhFÆjS‘é„EäZ™ZºbôES°N]*GS³Ø§ ó™>ÈtŠ32îL£iŽxÌÖ ¥1‡Õ–o¬ç8¤4[7ª\ê<ª´þü{lä“¡­W«:/•·`ßÙvçÒØF[ŸÝÍÝñíýœî7sz~|˜ÝýÝüÞW£¹0—Ôäý\)°¶Zù/]7µòcþC Î>tç"«©Îhº•7>'d6ÍûŠuÈd2ö“í±ÏÄã 5 ³ÕÈ|ÊZdiê„,fåÍXlÜ ÑBI/Z´þ¸êÒ¢[ã—Ô=Óv<©œººÿ·).—•K=_+’Ÿe½!36gŽ, ¢ó}‘­g²¡3ÑœÈz´ 縺mÅÍ¥•7´–•\¿(ý”ú¢Ü³ËËni/¯z¦»¼â‘îòÜkãWd\çX2ªçrRiëò@¹zÝ~¥µSí3×aåÏJOßGJ‰ßK¥Ôï©’P¦§Ýkk„œŽkÎóïÔ· !òöwA §!ß÷”§ý$”œ²ŽOS±ž³æ°KUrÍÀ¯O2Åùðd'd2Í™ÚÑ—$´*C ¨r´HZ‡–ÅìU³¯½¯¿zHi¹î,¾>w”Ë]î(Àÿ­ª~h°"zPm‘´ +Ù)šUâöj¬)Ñ_[ñÜȹíg ·“Ê¥8?ñòý³2XôÛ‡Tžß)y¯ê›–~ÍOm„Û¯ÚÐG~ò7¿K‘~ùËzúàï’¿;sÃÿ(=ñkwúÇþعâä½hÙ¥çɰÞ)àª2ÐIV­f¬ö?Ç=˜‘f8~:Îõ—¢©V"4}~0²¶E³=2‘­¨-ðÚ„®‰Fóíh4g;²±ñ@ VðhU­²2åä8‡ÍWµ]úÿm†Ç]¥«ÏCe ÿeõÓ¯y‘_ﯗþx­\üË/’Ëò}®ä¼ÿ²À§çõß}J;ÿ¥PpSɈF•!’Çï¸'r¸où¢5ìõ¹é_W3Þgˆn(å’;¿mà¾}QR|w{×èÈæí%£µ­®Ý¦Ï°Zñ/Ø¥*Tm8÷Àã §‘ÎLdn¾ÍZˆ–zÆ!{ª9Ð9hUl—ºCÃ5ƒu_)çyü¦ •6Jÿtº€úËhVà¿ÿ¼Qò·{™¢ßŸfüM¹ÁãW¥ÀóG¥È÷W¥Üïge8û§×%þ¯•Á^5—,|ãµ<#k5ý.+}Ä·”áÿ¯æï,>¡ d^½+ˆy¹¯#êÕ¡ö”'ý=1_ê +ú#6¿*e.O•ŽÎ·”ËÜ¿SºûÿM¹>óAcÓð­üÆöÑ¢¦‚{µÒçŠ`ÅÛžÇ9¥½ç ¥×-¥‡à©2DôZ™$yÿ{¶ì—{µÜOßlñ?¡t +ŠQu^¶ùx¸#裄uŒTÿ'¦áüiÖN Y|½ŸÜšÙó7_þøû zðGO¦øÀtqÖ ©od͸K…È\oæ™ úÛTÃyα&Ø ™ËydÔ­ººö¥ø?·Éx þªŒþY™ð'e„ïcì (©€[JÊï†Ò_øH&y¯Ì +üV+¸¥äÎ(½„M/m…%‡-}ßÙ‰GÿÁ¼ý¾@üƒ2CôRã7üû +aÅ1+ÑŽË顽˜Ï?pâ¶›K¨º3 ¨®³+˜#÷¥Ç¯Éä·®f‡<ºTÍŸú6„ëþàÆ6ŒÚ³5_-b?eCžž«–w«F0¢d—¬¢ÿÛãÒÆ~q‚šš8ÞêOÇuôr4}ž/Z䟉ìc¨Ûo¹­»úÀ¿Mu½£\…Ç“ÀëœrWéS¯¸>m¿‚£¦~ç•ìÓÛY1ßìëT|¸´}ÿ¤XòöÍæ€ËJ ²ÙT°^]°q“¦ ¿T߯帵ßU¥ÿúI)÷äyްüðTo‘„f¨ ÷þ}-µ÷7oIb­¾$4Kƒmx¸’?ò­TvþiwöewõY¬ìÆHZàž÷k%{q§_¹Ò»~pçO}J_ü)Ô÷ŒÒÉmãésÖ’:ûŸ7C3,’ ®RÅ9÷ì·;J'ß”ŠÀ•É~ï”AØ_Ë„8îÒ?ýRDÿò¡ØûïÍC+<Ñ +‡%( 1E#ðè/é“kùIÏû2ž¶÷„¿9ÞBÿð¾P0ªä}vÿ°Ð·â‚¥ÿçJ'Áye@@ß«¥Â†Ó³…ŸÿæEñ5K}ö6Prè¯ÞTZ›‘8(YÍ7P‚(E¬ÑIýý‚^K¦óñ*vï/Š OÒ—柳{?¬’$lÑ Ìè0ôKnÖ]ퟌ¦›Ù‘­FæÓU>Ú¥š¨†ãÚäeh޽­TT«8µ|7ÅùŒrë#åZŸ¿(’߾ɦYÌýõQeÈû³pï{÷¼„yð6¾òKuþ¯2öê‡xÙƒ'Åò‘gùÜñ÷2js·‰¯³/òvt@¬˜E°þ]Ô9b'<õïžÂÎk‹Dé•úÐ-i»¸”Úó΃9òV,i»·\’×1™+í™*«ìŸÍµ¬|È(¾º™SÎ÷þ^Éàúr=ÌÑù¼Wr~¯•¼ð¾2Øÿàßý"r5¼ý‚‘—«Š‚G«†Ædé†öÎæ[o®áªOØø‰ýô)Èq¦9Z ¹S‡‹=¢Ú/ÚIÏ?ÜÀœ~ʼn[/-¡Sª&õçÃoýÈšè˜\-&,C´dùžWî|ïk¶þìR¦ïµ«lÿS޽ûz“ôêÓdj÷_ݨúó¶â#?ûЗ?D0Þ¤ +¾U†{Œ*×m½iè5 ¶rýõÕë÷h8Ç óH?1Á½ð”‘מŸm™ï‹`-Nþ½úÔ›Ÿ³ý*× Û^/ü´RpTé8ôÛÚÀ´ƒÕ«Ð"«)h©¹9’xy¢Ðø$íÈ͹“Âsʧ@ŸXà‘ŸÜ™+/£e££9âÏÿ,ù³xÿ_Ü%ÕGgKrª ©ºÝ³éCOdæ™ïÃýî.®:7›Þ<0Y–«)KÕD'k¾—=¯Á§n']|˜FyÏŠZn,UŸœ%èÿ°" ëíbŸ‚ã&.²|ÕÅN +4Çæ)óסÎ!È.´^ÅyÛ}SÃJ[Ï Êµžñã(öû}ßÏö(>`ä™Ò¬P¸Ë$pûÐôÀê>KaãÁ™‚þv‚¡ïŵgçRY}“éÔ6#.³{2“»×’ÉÚgÁÄWéy¹z#÷Õk‘ÈÇ+‘Éä!ªEˆ*SÔa.n»¼DÜ~i©xÇ%;ºíóe’–S»ß¸²G_rô—_ód]åÖÎéla%=ôÞS~úÞ† ‘ѰÛªƒn^Ï—_¼·I¼÷ƒ;ôUPÙÆ‚Ô-:>Ń“<¶ž5[V¦¶`…&éY!£ñ¸Àu¨Íbrο<Ñý©ÒÍç{%KÿôCýî/ù¢ J6pŸÒY˜×a¸ŸËÔR=IýéytI¯%öêL|©.h +ú;¹#åö(`;âÙÒ+D´ãŠöXg4Læbä…_Ä~ƒ)î´ ÚG–SµÇm˜ÊÃsØ-GæHžù„ Þ•s­#Ž\ö¶IЃÁT˜C÷¿ra:ﯦëN/”ìþÁU>ü5#ûþ^µâé­ªÀýÿæ,)ê5wŽ,£N`ƒž^¯~¥‰ûõq¥ø7e¦è/ÊTÏâ½_))ïcÊ•ÞéáÈS¶^Å¿óñöÉw›ù[¯Ò˜S¿p’”V·uÞH( +A¤G£â ªê”XŽVΚÖÎ[†\œQ°,L-<5Ï02%Ï(4)¢"«v2ÝýÕ*XçËŸ|LÿZD ÿè)Úóz­¤¼ß’ª¶f¼ÀºZɾ_BÅi…²ŸeƒÖ,^ü𸣣óÆC/héÉÓ*Œ@‹j8³ˆ~í-ýì¾”?ú€ç?cøOÄÌž·ÞTà [¦ ÓœËl˜Äåöš3ÙØßvšQ[¦Á8í}çJ]z,ýê~uâG‘hï/®âÁÖ‰‡~raN|ÏpW_$ñ_ÄŠ÷þê"I©Ôg6•êS;-D]ì™3ß+äÏî–G{b÷íÃBáY¥ à ¥{@ËÛþyÇM]¢‘“¤Þ=1ð˜ÒS\szv€,IU–¥! NWÒTñø[„Öá|„N­œ(üÖÆM¤š [̆&ª+R«eµ_,ãûG½è¾'IÿݵìÎç^ ¡8xW.þΕ.ßcÅäµNfK¦A¯ôÇs[wZƒ>OØWgrâu&=ÙÝzýb‘t÷Û¶úËÌÖ3s©]¯xqߋՒý?zR‡¿ó§kÏ¡sꌩüöÉ¢œîIŠCÓõ׿2vy+ÒU=¨x_Y–š€NUõ†«HR[ Eëô× ãŒÐ$\7-2œŠ\W¹!WÇÕÈßW@tˆ’`J£F¸8I[&J#b5h|¬ÀQÄ—éƒî–<¹PŸOÊÑ…žanðžŸüøh˜ìÐsUa¡$«Û„jº²D4øÎ‰.=8X]BY¬*…mUzüe¨ìðs9½ëOîp©†‹‹˜¢~K:s»»ex&hR'Þ +ŽÿÙ=ððÏîG~u þi­¸êà QÉ~Kqvç$IB™\_à ¥zó±­›ÐÇgS›ªôÁC3 ¯T¼~³¦/ÎÃ|r$‘¦©1ýtÇ#G¶ó™èfƒžÑ:ü”–ì{ç½]Lçè*j×gjð™+ô‹Óا0Ýlúv#:½Ö€ÞÜd,iÆq~Ï{'q÷½•{ß9I޾Rç_+˜/_Ëéso‚¹‹_GQÇ߉Eó O¿“ŠöýÅ…Š+ÕñçBT„ÁIjпEïùÑ[~úᆠÛW +7Fr™³oäÂcÿî!þ\ ¨¹2ÓS…˜ÎDóõ¦á¯ÈÃE¢èÍšâ ›5Ã’Ô©ˆtM±b“º“‹;Z‹ýçÚŽ„ÇF¥Té3‰ù:¢HUˆ|Bš¶,µÜ0£¢3µ¸°u>.M ´ø¡ÇBÙ¡Ç2æð·TY‡Qc(xèÈìzí º†LzµŸ³Ý”xè*?u-2ìêéÂ軟5ŸIav½ó„4®èà ¦é¾=Sst.[ÞgEן[ÌÔš‹ó„¹¢¡ŸœD-×f5Š +wOVŸµ§´¸ºãzÁnZ½Â9;z!Q¸ +ôYŠbË´ìfÛ"kmc4SÏ-˜hÖàüò« ‚žéÒíGAOž|ë [®ýΚ ²á¹|p‚ºHÂ#V£N´…‘R:QZÔ`Î5ŸXÆô^Y+é]…si[¸þâŽ;vâÃ?zs‡¾§Å»ž¯Ž“\9¸ týé…ÔŽ‡«¨î‡«Øo¼ÈX¯=dÃlÙ9jYÎxÈ|öB×–9ÿ*„½ô"‚>ùšÁ1Ñ‘*Þc)Ž-ÖÐ1ªž òp èÜGŒ§“·O¤s¦€n™7NÀDc߯Jol0À¶0•)ÆÚK ¡o…zïËVžCÅæiQÉ%ºLAŽç‡p>ØbÂd6ùÈÚcó©î[«˜Þg.̾W¾ìþoôžï܉ÞöÁ×Ìg߉¡OCÒûtµ¤ñŒ­høôA- k¾™/ß)Ä;?¬5^±õÿ¼ +öŸÎ( IÈÑbªŽÌ‘ ¾w¦v}pÝLªúÐlªâ³Y’¦k‹Eýß9 +÷ýºNœÖnè‚–ÍYŒlg û™‹ÐªÅK‘››òö @n^8¶áüØ'C> òò /!†%¨I2 A{ü ôhƒÖ"hý±t˜*%¾‡ŠP%ü¸Ö +¸¾§ntÿ3gÐì¦ t˜ª=3Ù½OäF¥`»lÅ 5—ß>4±ø}$Òãåü±ç2æÀ÷jðwjÏOžÐFwÜs€sÈÖ™ÑU»¬Å;®Ù1ßò§_†‹üÕSTsÎFR3²@Ø÷Æ>°ï­£¸lß4axކORõ‘„«CÓÕ©Äíú¢ ÙšKìÑ¢©³Ñªå.Èsö›bŒHІ—mÙk#ï¾æ!m»µ¸k Cz…"‰ +Dx˜ù fÐëº/|åÎÙÐGŠãÀT&·É”)î²”t?]EïÿàK ÿàA×}aËnî0eðôâÙ´jCÒ“—Û>…ä7_-!º‚UÇæRÍgÓ §2eÃÓ銃3Å»^­¥ÀþNHíüÉ•ÚrÄô2DŠd5³^Uœ©NÅTè·Çþ9±X4õÄÁ™ ³úôúÂñln9[q̆j}°ì 4q^1•I®ž@'UèÓqùÚTlöxÐŽdKXKv(*SKÊ…«Ê£2´…ý3ØŽ‘U õÚtn›)]±gÕÿx-Ó{߉ÝóÜú\¹ê½6 'H÷?q–î»/f=‰÷¼qíÿÑ…>ù–‘^~/=ót=»ïµ@¼ç±»eКÍoœLÕ™'9ðÁ›ô.ŸüN&9ü;®;î/§5Pi†Tß»µ’·ëèækv’Ê#³è¼.3qùÑ’ô6#gçd¿Ðy¬ñCÀñÖ—XŒ¿âØ#VD¨ÍÒÝD£“‰Mš©Ä.±ßdÛ2ƒ_{Rý#kø´’‰\b–_ÒfI7ž^Än?µnÂoèwñîo×qíæÌæ:c®ôàL`mÐYõÆlV‹)ÄI6¿ÍŒhêlÆõ`:ÎÅ‹wMcóÚ̈–dfã$:!K‹N(Ö!z;•ŸÛ¯©Û ¨¨ìq 5ï>|Ш¯ÏÒ„>iÐÛã*Ïå«¿XH'ëRá*â öLÅépyÝæ0^ÄÃ?¸Š¼ó¤vçB ¾w—ô>[Ãm98´ÝA§€xé +k =D·iXSC¯<¹Áþìáçöä 9óùsN¼û3³íóù ;qCÒöÕ2êÐ[êÀŸ¼%Í×—R¹}f0¯&Éh1¢«±Ïì{¶rªóžôƒž?hGŠex¬…Æ©Q›·ÁÜ€¤ÿåºéê2*ªx¼'ë äçË#.¥r"·e`hSrÅÓð¹4áÒá‹csÆ‹ƒ6©‹ÂâÕ€ÙAwŽ:«4¤ÕCó¸º/–‚¶è}ë‚þi =J´´q¬w\^&î²GG¦åä¶ýÒJºkd¿óž|蘸åÉì¼ãÎìùÞ‹>ømwêë þî½,ÅóëUŠWJ ÿ>äâÙ îøc)ø\&·e2»v̾7~ЋKïÿÍWœ;dæîI£µöë$®J—éýÖ…üÖôŨ‚¾)’Šc3%©­†‹z¸³5¾ Ñ,Û3›ð#rÆñIÕ ëas“ hÊW xxëǯEñî‹A† ÂÏ—MMtzï[ñî7ΠmFµ=´‡ë ZtÀ,`bq]™T®Ïô˜3E8Îâú‚ž‚Én2á2·3ÙÍ&T®R·0©Û ™Mu||‘.TªGã \\à†¨,^•ͨ7†þVjà35ðÒ t<¸¢ž©„UT‹ëœököÀ>pyÍCljÉÐpaöíÇŸx"“y$çö?CšÑ0wB4„ªöÙ°å=V õD7_ +Ú3À¡qD¿÷¦†?xŠûž¯‚1fðg’óu¹¢NKÈ[¨]ß¹±¥¬»ˆk¨É€ÄVìž6 +T|®V€H>A4ß%Ò4%1yãéÂá©xl;q[ŽÌ †!÷µžÈ/GTXª_¼c*舃_  ,Ð'dËõÄ‘©ž¾òg£Uð¹°í!Ðt¥C’ÕAK†%úÙ»­‰– +|Ý24›¯˜ÅWšO´R*Í¡šÏ.!L‘¯ðbzo;q '–Í»mŸÙ³Ø}²½÷%¡_^Øq拌 ý£ +¢ Ùx~ŒQIû;ˆåü—ÏBù«Ï OjxÐqe‚C°/۠Ƥ5àøØcÁ$×L€¹*:«Íj?I˜ŠÓj?ä0g%r_çDáéby¢š7®]]½„8—Æ9¤4šð·…’ÐäýiÐ/í:,ECLG©Ò¡5øŒZc¦êÀð ÛD7__.ßÿ€—ï}Æð5Ÿ- Ú…%Ó软|ù“/‚èÓæ)=è-Gg‘¸|²¬öÉÔú ?¡wúê'ŠÊÒôô!ð‹„S†ó6»ÇôO ÆÀ”‘t=v öüèšâîgô–¡é|^§9ì›·›O,bbJu¨ ZÒxU*2C“Š…s‘¦á-àpÍãŠìg/G¶+»3èr†ªCbÕè´zCfëþ™Ljèă–*á§UÊrê€Ýgö¯°bh q½w]A‹™ø¦ä]I÷-G¢ÿsæMsòORªó¥#0ǘÄ*}<6T}qíåH#°Az๫¤ñÜB𓞞äå%@À»"× ­Ö¸S„ãLfEˆ*èR2$æCUAË›hD'dër‰éZTÈ& ¢)ý!×yyµ¼ë¼ ¿ýóE`×LdŠ胱­WØîëë@÷‹Ë­5!¹VÛå•tïÕÀaÔ›ËJz¦@^uxhÒ—d{î‰èÁo=™åú’ÐXuÂ9/Û1Cºmh>pÙÁ7>ÌÐ_ëž:-¦²½3Ùè2m6&O›ÂãO„¯èJs5§léÎÇ«ùú{ЊŽ\3˜Km"v÷7ž„yŠý ›Ó5…Íë5'ùzí— ¹ÏøÞ—žòÞ§~òÞ‡~LÏíµÀB”fÔsÅ}Ó@Ëtô`=è3–$ç¨<>m¾¾‚ïþÆïé#ï¿'¸#’î¼ë ú‰x,/”uL•ç×M‘Ö[Êö^wá»F\±mÚ“œ ç6LÙ®é8ÖÍ%zzñúÀĤ»¯aßùrCoüaÞæIAš)ë›Fâ~2öÓ[ö΂ù&oxª$~‹Ú`H%VëQë35lˆŠó7´zÕ:÷„¨(`¹ƒÓóÄ t|É9Âu­PÄ":"N²ú³ö„¶©Ú°iñ8‡s!õc[®¬äó[¦€Ž<—R¢Oæ;‹w༫@_š©¿ŸJôú½0GßТ½?º2YÛA“Q Ý€cÛçÙT=tÒÙ-‡ç€ov"èÒs‘ñA¹ÍŠün+E~‹%Ô`t(øñ _?$á‚U@â&èm7è ÓIDrËÐ,ië…U\ûõÕÀeÍQ€íWœr½Ö ¥)î:¿œ;ô„’ Þò Å­ˆQ#L|]‚‡n²Ò;>د:2ݸ}„ì¶ãóéÔb=ÐðgSŠõu _Ù„<ÈÍaî+ÞišÏO@gŒ)žÎnîŸ"‰Ü¬ Œ=3&‚.Ý÷½3ÛrßÛÔ~|V·9Ñ®xè*é¹ã5/0³`^ŒÌÕN›—w=ð­7¶ï™ Ûy{-°øõÙã묦çÖ:ÉÀƒ5  +s"ÄÿÂy.ßkÍt=[+ïyäÍô}ã†ßï +ºŠÍ5¦\ØF ÷0ç$Û~l Ó7ê,¼+ ¼ÇH»ï¸Ó7€ÙÊÕ±­;®dŸ5á^•6W:ð­/?ôÙù'wªïåZ®ìÐ,2\>dMôí†_ÇnGÈ>{Do¿¸ÜÇH®›H%nÑ…Z7×€À]pëU@‘ÛÔdÄãÏ':’ÀŒÁv'b£Tý¼ÄDïØ* _(¯>¶XQºk6·©Ê@šX9QšÝnÆvÝ_'ë½ëÅÖ_±“em7%ZÈ_Aïzc¡>0θì,ªçe_ +e'†MµÂË?ØYGѲØÆ©q‰ )Úa +Ç+Ïíž*O¯7 TEn«%èÁB¬%Ì oAŸ°ð2Ë ø†+ö²÷=‚:ïúHÛGœË;©L_‘ÕnB4Æij› \ ¢Å]y`áaƒØùÌ“~" ÚõHÌõ}ãÎâMØY8fÎPvû`gIäá„%û'v–døW¨áþV€Er¥1vV)a¶MJž°)žèÒLýg°½?ØY²ÎGn|Ï37bÇxŒ‹Ø8U ¶-`ÍÃ{dÀjØ\; òiiQï4Ø'.*O‹‹È|yyÇ}7¾÷…pè(x¬ª˜ W!ü`†Wì™ >†è Ö ÏçOÛI»ïºƒ®.×ÿÂ4™®'ëpÌ#ºóTýÒ7ÿ‡îüÀ·òcÏÂÂ.ŸË—í~(`kÌ%ó†Ày(Ù=N­7$óŠ5Ç0-ç—Ã\¸(b“:hó8/‡¸.ï(€kë­ ç$¼bààQ©*–…“\hs¯OÒ.áÕ:·°³ª€…ó»Ä=Ya«hÆÊ³pÜûÈÎbcKuD8öw“ š Weåøo…ªqaq µÌ*°mn{­6$|<ÇÈœHJÙ*zƒ:ð™@Ó›è^·œ]N´¸³…ã4<‚Ê'¯.(»nŠlë ßxq%ZÜ•Cs€%Û}O92ÜËb²qÎ_¢ÃGiqþPǨ#Ñ™æ3è\Ã~ײÍZXFø½q›µÆæ3 ãC“¯ ì(YB¶Î;«Á’ÝóÐæ¹4`g)P<“´qÀé‚ûnÀ ƒ8$‹K×þÈΚ ì,¢Wú;+"{¼"§gª´îŒ¢hx¶ Ç3¢Ã¿¡P›p»²:¦†bV¥1p,åM– ¥/ÏÆ¾_Wit±±ïº³+àý8N{ÁØûsú,A³ì›MÀ¶š^n ß:0;¨{Ä'dÇÝR7õßý‡î<ý‡îüÞ§¢ÿª;ÿÈtç'aíÅ )Ä4`hÊrvXH ¦I¢Ò5aNB²aó8nS­!ÄxàfP¡*:XEµâ½Ö|ý­•çòY½S þÛ߬)f‚UD")Âv¢N8¬K&{Z©,¿ÍRžV7Ækƒ1¿õÈ<¦ÿ‰p‰`~QŒó`Ëç\à+A~î^„%æd*æì¬é0G1Q @î"_"U!>É#2ÇË£²´äÑZÒˆMãøÈÌñà£ÅMøÔySdm–à?Ù„L-ˆ÷„wÏ-×zÎ?DŸ~S¥!ä­2œëc?0OÖtÊ^ºí ­´êÀ<Âl+í˜Æìºëko`®´¸¹ÔZC&ð͸®»Î“ 4:_[›§ëF«¤:Ì·öo^¿%³ië*,A°œpÌ$1òvVÏ]¾ÿžÌ¥üÁ΂x+Ý´Ýì™Ïª6^°³€— µÙ°³ŠÆØY +\ïǪC|Q¤ÖNâÃS5a삆¿lc!ä@àsåEmS Ïls“™"g»ö“!vða™ã{ ¿?(m› ¼ôÖÿùýPÇËJ{f€æ6aöA®ÑtÁAÞ}Á5¨|ïï™°`·œÍìzëÁ~/Y`ǼÇN˜`Ú¿°“nÝ5{Œ»ž¬¬DàÀ| Üóò§x$à#TýÅR$ä"U v„ùì± ›Ã>ƒ­»¸rI>¡\/P‚üýä BŒ"JMžUe¢(Ù18èP—¶)Äò60w@X°åûg†=¬)€š•Ú÷½7×pnðæk%¹ U`gI1ÀÎÂ6þ‰°³¼ñßÃ`¿Ë7UÉR‹&ÅfèG룑OÔdÃ4¤ñ8~» ûd¾b`&0¡FæÎkÖ9º–ë¼¾ø®ÒôFE~Ÿ0*øÞ[îçÃ}È©@››ð ·vÍ`zG!¶FB9Î; +vXpéøËÑç[#.ŠÜ& yL¾NpF£YP6®ë+m䃷%н÷¥ÒÝÏ…4h'wܱ'ì,Âoß;›ê¸DØYlûMGÂÎÊmv–š/ŒEY‚*—¿Ë´º ›zëÂÎ’?ØYEcì,ù?³³þ`g¥Žc‚¢Õ(×–2œ·CÎ ìøü– ï ü ÈI€&O+Çã³ÑØ +äý¸îà£ðûƒ7¨Qt¸ +p© g Üxõ±ùäL œ—Œéïž)ÃçR—¯CødÑ›Æó[šÝfF7_ZÆ¿ö•ô\&!GîK1 _.¡Û®¯v–|ø1#Ùù ØYì¶ýs¡çƒ+Ý3ƒËë³-k†Ì9Ÿ™KØYÀ +ù¬*lŸåýø˜ðñ;«xŒÅ7¾œm¿°b™oÅ1_ž×nIrMì÷Ùù0ÓzÚŽ¯ÃÇ]Þ;/í›NX󥃳d§–s­çW®-ÜsI)3Päáú~C6\÷ˆ3ß{ÇîYCïÀŸU{l>ðì€ó¼'Y剅òÌ63&2Nƒ¯Ý?æ4dûîÑ‘¹§NT祄ï„k,RkT]Àw\[Ë·\v„pPe1Úò´Jc®ç¦kPßm!aÉl®3\€ÆõP ×ëlÛŒÃæGó$#œÓlmyn»°» æãó»-¹Á—îž=&dž©hÈš{…ùË„\m>)_ò0€Á¶$­>8îgÆ{|¡žNò}ÈÁ¤e‡ç°­×aNDZÚ?˜ß¿Yìã€-çêQâ‹Z-€YMú\ê//'¼ ÌjÂ@•gTM" f|m åëqÜÆ5äû„cyQi¯‹Ï=©€‡›‰ÛéG¦»·íȘÓ~$“U°}w\¸ xu‰ˆGpÿŠ0jò¦ÆpÞ ‹+Ö%ó ÿÄÎbÏ.#u[a»_wb äã’®»P¿K"35%8ÇgÓ;L€•&-ÿÈâÄuÇÓ¸?ØY%ÝÓmÄÁ˜j;Cë²â]ÖcŸÛ7ìÔ‚À¡®Þ3‡«;b˶Ÿ³Ç6æÀ5ž%9 ™³ªš ŸAØpeØîñ߃\€ø6àNá1ÊÖàZ¾ïî:é»4}à_ª{ÄÖØÁ=wYÕ‰…dÝdFþþÀ=qȉ«"ŸJ ;x%R±{4¸í‚ë!gØgðE²Ü.K|-ñ1às¿¥¬uã¢òÆKËÌ&5sû9Gifƒ‰X±A•Á95aXXw‹Åö6.a£U%’ œŠ‘X¤@Ldæ8ÈḘ֯–ü®'lj)¹ +ayâ¿%ÝÒo |+X¿D˜DÕ§Ò-7–s˜r¤Ïײ0ÅFÅjk Χ´öóElÍgóa.b4«Eɓԣ ÷Ð¥eç> +¹× LªÎiÀYƒ¹mè%ãëÎÚÁ=+Â<„9L°‹òód%{g‡Z^Ðcëo¸¦sc¹%Gƒ³åUŸÙ‚Ý“k óMÀã*ê˜ +s×|ÿ}ì¿rÉz|t–š¬!M«ŸëzØ}/äI¥» ØöÑU„Ùs„;}l1Ûuc ×yc­lËž9„iÌ[œó‘œµúà\X_>@ZÐj ,¶ùô2z×SWªýÊr¸¿ ÷›I¯cl‰‰IUû矇\JšQb@ò”œæ)òâ.+rOûwºýÜrªùä"8?ÀY‡z^,S~aªà¸B|^Y¬a™C¸ApÜ8$1{¶f¿ ‹ós\·,ƒ|BÄaÿ„óP&*{ì7¬=cw?ó óÖ;n¯f›Î/ƒ±ñ‹­°f{»ÀZOÙþG [ÁŽøêìí&³Â烯%¬½Þ¬ qæ® îïºê >•Ü›‰Pƒºb,|>‘ k2`.8ElðF ±(hŒ‰˜Õ2˜*pLpoŒ‰Ü îïãsZ)â7b»€{ÌéÛŒÆxæŸ/”Ví› s¨prFir‘>abá 9웼lhŽ´ñÌ +˜Ÿ‘–aûÃû'+?2—Ëh˜k"ظ\mip,ñçƒÿÊéœqR +,û„˜¿ä¾\Ì#ÂÖ°á²Z'CMî#çâë 2àåÕ²…|„p«Ù^ºÓ×(„Ï÷ÎÁ—O×uG`Á{H½µ*¶[È€Aw?]K︻ +|ž´ +çÀU‚X»í°-Ý÷ÄY¶ç®81p¯ž°¾R+ ÉÚ˜k„5@ûm¸2œ×ß~ÿÜå¾»k$]7VÒMç–’{:é8v€íà16Æ7î0'÷a>Ög7›åÈSaÕu…äN|ùàL*,CC"ߨµp« ç&›µÇ™&SçŸ<¬·ªØ3KVØdNî•5_Âv__Ë5·‡ûôLXަ€Û B­Ç±¬d§ÕqÅ>ŸÜ¯ÉÁößecŒ+°¢·ï·¡º¯9Rí—WP­í •ÍÖ>&—¡%ݲsáÃÁ’Â=3ø 8†ÆêÈ2ZLU(–6ÎG¹ê؇˜6‰k.]¸÷þxSÒÄLvc¹¾4­Úˆ/êÇ>ªË‚ÌóᚉÔø}pŽ€/-ð¡@1… †Úê]8ï'ÁýVÛ,Ÿ©ElÓøœI‹º§ÂZ>>[[ñ¼ñärÈW€§õ ¬Ù’•XÃÚ W°p¿XšÞjµ3øoÈ# 7}S¥!Ys,øômÆ8Ž“8¼WìS¸ÌF`:ž0¬WÌí Ìnä>À¹…9ÚÍF„ÕD|ðçKçæLp +cœÛ~bÌûû8¹V,̳ã1&MÃç®Û®O /Ä5Ð2¦ñË%p!'d:¾\Á×âÏÀÇIxbÀþ0ÌóÀô‡>:&çÛ°–¶ Ÿ·­Ã³EGxepŸ.«Òê$`×ÁØ&çüö£óÉzàÊ}3a½+pAëa|‘Ÿ[ðWòü®©$.U¶%Lp|ÌÜÖžÄN+v[ÓÛNͧ«OÌeÓ!Ÿ#Çë^:o8Âx"Œ­¨D à„‹†¾^+ùì›nènð¹/]»•¦ ý!ÿák7 8=8Ì%ã؃ åúd¿É¸>¾Hùiû´}Ú>mŸ¶OÛ§íÓöiû´}Ú>mŸ¶OÛ§íÓöiû´}Ú>mŸ¶OÛ§íÓöiû´}Ú>mŸ¶OÛ§íÓöiû´}Ú>mŸ¶OÛ§íÓöÿó6k–{|¸[HJˆž6륧=ËÙ{y~F²1%"YO;?´È99Å-:,%:!>$9ÃÊ‘<ÇúûQÞnVŽV6~!ÉA‹ƒV͵Zeeãì½dq~~u®ÕøÝÅ —ÚY-E„ÄZÙŒ}°~ÝJŸ‡…ÄF|üÝUðŸž6Eve%ìŠKò¦ë…!)ømñŸu‰ÀoüÏÏÛPññ!qáVäi+ü¼Õò¹z‹­œõ´[±ið¿s„žö&øf‰ÕbòÍ€Ÿ|ðwðsiVK[ù[Iå‹­ÂñY‘ž¶­½Ã²åVä¿8øi¥ƒÝÂ+Çžðûç'>~õûÇ[þËßÿŸv¾IúxÒ=¢c#?~OŽïK`3ïë©§½È-"5:,ÂÕŸóµbñ…‘ZÙ’3K¾ù§\ºtá²ÅööVr«%øçKáh×ÿ«oW?¾íã—•Vvx'–¬$§ÎΊ|Þ×YdGÁz­ì–¬X±‘·¶—7ƒÜ]ý‘·?ƒüÅá*B&Jþ|¨ª€ +Q  SñDªxùòÈÃM„||¥H$Y¯"ŽÈÓ„ÖJIdަ$2[Sžª!”%©º; кÕ^ÈÛƒCtŒJ€"I5@£êáÃ"7ç@äå!D »&”¯WElÔ IT£â +µ%Jµ™¾¢ ä/E 5%KQ—D§«û‘¿í(ÇŸ!Fîë¼ñW +ä¢T¡Õ–Åûù“ß ä¢UèÈ MO‘gVO™$E~ÇTh߇öZ" [ mÖ¤fc•´´BK2,w†Pyqû4hoL:4I] +-Ù ³›¥ r´¤­³öÈbh…¶5>.G›È^à¯Ò ™ZÒDE©7 +"‡¿mOëÓÇó‘5ñ%úòdü÷7U‚ +“˜£Cä"25ÅÐÆL+T(i˜*H œž¤mŒÐªÌE$k‚<·ˆâ«Æ%o3€:z“&•Ldk@ö‹‹ÉÖ‚MmK‚UÄ|¨ + 1øø2µeÙµ¦²Šá¹òü¾iÐþ(‹VaÂ6i€œ9öòݳäÐÚ»´¢ÂùLÞj@d“r»,¥E»§s¹S˜MeúlJ-~¾ÎˆË¨3f¢òÇÊãÕ@*–KÌÓ%29­fdé9‘É)5 çÚò[§@û,Ù'KäAÿ:(Fæ‚UA’Q(Rén~FªE!*¾B™'1´Cp±DBÒßOŠü¡à%Aв*–Æ©IðñÐaøœâŸA~ÓÝÍAK+HÉ2Ñ¥ÚTt¹¶$4]ä ™*AÅ5Ûô #hÙf7Ö†%©ùøóÈÅS€ü¡¥6$C“¯™À¥l3`ãJt%l‚*`!)jÞø÷¼]A8Xä‘`?@I”ªÎÈÕ™ÈtMÙ†|y\ž®tSÙÄ Ü:°¹iÒ¬:Xâ.ÁÇ‹÷AUš¾ÝX–³Ã\^Ðkò ò´jc„$ZÆ`?\lš¦)ÛÜ1Ÿ_s)Haä¶ZÈšÎ9HëNÙÉskÌàw8l;\|º´19”¢.Òš?&ƒÐ1 l>(³ÞL‘”­'ONב§WƒL‘ØX¨2LÈF <é:(Z ‹× R”1yÚlr®.´p*rZ, µ˜O)Ò—FæhY¢üfshó’¥×ó±9ÚÌúš FÚ°íÓQñêlD’ÈLHÓ±m¤–@›¾¼bÿ|iÍ‘…ò´f>.W‡MÈÑ;‡ÖA@‚öÒ˜ÑhBZ+b‹uÁ6eù½ÓˆÔVó¥•|ûÈjhärÇä)˜¤"]±_ l¤Ý9Û3´ü–öÏù‚‹ÏÖ&í-™%†ò‚®iܦò‰Ü†´ñ¤}Zmñu#-€‘±\v9W¤#ä#T=œ|°ô@"7yªºˆOT“ð1øZ¦¨Sø!â7¨úð(À—Ãæ(âÕˆLMDóa*BJ@âö$bÙðÜqÐòÃÄ•é‚ì|Ž +W d¢Tˆt3>h“æRŒ¸¨B-±Iž\e(‹ËÖ‘ÅdhAû«"³Æ„ ƒöŠLMh­å²·‘ö4é€ö||}´ Ž_" ”^e,K©0„vG"ß—Ú8‰\§ì¦É|ÍÉEÐ^ íßÐþ*ÍÀçd/°ï…yÙ^ù¶Kå[÷Εùˆ³åÙІŸ¯K| öŸc­ÂØ'cŸ í9`W¤_+6&s<´ºƒÍÈÓŠ  ]–´äã'B %a±-zÑÈßO$<~?öItX²†D© +þ‡HD¥ûß, Ù FGÄ©C»µ¯@‚ÙpU&b³&§Rºð·AÒlŒN×€öb[ЖEZ©Šð>WM`áøJt¥©ÕF qR> ³!M©1)Ao7ODÉbU¥ÐªU M'©ƒ$‘^ű—HO`_>B“© ² Òäâ àAޔݭm²òkh•ÿ¶ÅÇ`ûÄד´Zåµ™ƒ´ðrQYã‰dYÚvÒV¨(Ý=›´gãë&Ëj1Ë º§ÉÊfâüÀdŒd[fɪ/ß$Û²Ï|‘a³6´ŸŠ}-HEP!‰øú­'RÄàëÈ~ÃõÀïÖt8 ¹.f*€u`£q\Ø« ’¶LPŠ:š© RN ÃGc¿HÉ¢U!vIâé'¹Éx\Gí7±L—Hä4MfÓ*  ÝšÂ¹‘®ÁÄ—ë‚Ü·õðiÙ"5–¢Áa_JÚQñ˜ ‚¼dÁ~7µš@˼¤×ØU"g€ý$œ¤AË#ƤÀñ±@\†Öq"›Nò@Y\žiM%ÇÝ`Br@ð‘é8–çâœ0¿Í‚Ø3ÈÑà×áÚƒ$¿›Öd¹Ș•ÙjFÚqü†Ü®!‘mÉÁy\F ‘ÚT2Q–ZaD$—°m€"ñ7Û ´"‚…1”ÓlFÚ¾Aò*£ÜP^Ô3]VÔm-äuW— m ­‚0n@òEJ$$:§Â~iÄÆv{¤]² ´F‚mü£-¶â  H5ƒì[yĤ¸AnZá+øLÒÆ í}–ÐÚJZ6±­\È•ƒÌ˘Œöåø\`û2ß²³lr±Áp” Yƒì ´`Bn~O,Ôƒ–FbÉØfS« ‰L#<—R¤GmÈÏ„aß2¹ÐÆ_ˆÇöǤ½dÊŠõ@vÆþ‰Ù8Î <À—àsj ˆÇñÇW)HïŤkµâ}¨9½ˆŒ-\€o$ã ¿¾r¾êäB¦í†»ý‹EDθúø<Ò2™°EŸÛÜ1™Ûúù<öÿ°öpUmëÚøìN0·ØÝ€HÃZkÖ*@[AE¥;¤;݈`'!"Ý„”½Ã}ΙÿñÜçžïÞû¿ß¹¿ß¿¹µØ2çïxßçyǘÏW¿‡ }»™=8Ñ€yú„¼È&LAtg04w<ŽŽïGÆxä¤ë°¼"X^žBøÒ +«ª_h>Ší¢gKÝ®,†\y‡19*²K/]i‰›D(ÇAlŠAJö’Ï4ZÄ{¢q„{Eã 1²ønxTî šXªa!áiçqðÈ+–_€ãuÖw2ÜKä<,q~y"Ì#öÒÏ ¸I…˜9F|Bqú—œ ~\aHÕ®ùPû/ùNžrX²2øþjâÆÉ¢[‡à\‰‹þSY;ÿi`£ydV°½€ßíe`ŸÀ¸&ÍÅ’ g=&âë³ôš„ë³ÇÕ… iù¤fáñiÒÜs,‘[Ò|6(o5<òÌœEãwÄq4ŒœHéÀã°`qr¤bìE¬…ïDÈ© ½?æî ÷6\‘…¼‰8Ä-È{ÓÇœÇðÁÎÂüâÈ•P+„hþãøôJ_dĘã¡Zn F_WïØSr<Ä¿â!«,Ãð×£¯Þy+A?Rë}g9X%€ ~|ú"ÂÇøûàiÂË×—0WL6ã3¬ÄÀú†±ŸÎ8%̆ƒrHšöK ¥v|ÄÃÀz dâËËÀ&„'=#˜âdR”¿ÍmGyÑùi8P­€ú(F|çK <í4Nh4ËG$µ¨bþ}Ìf ®‰h|É„š ßO…<^ ÒòŸ8x¤(A\ òr€­'ør ª[“ >'âñ T³ónÉ1­ÃuÕ!ª/‡1æ@±ŒmQÂðãã·à:„0–ß<‰xà ۱‹ ÚÉþ|K¹€<š¿“‡ðcÊ?ÿ˜/0§ ? =S`‰,ô>7¯Œ…`}RêTà­eP¿Aö æ;ü˜; ‹Ò< Š5\ç@¢ûÕ˜gX¾ýM°BœÙø¤ƒqF9 j2ÂÂcD¾wWÂü‚Ú ²³ìY¿IXå~À‡´é‰á¤¹ÅpÁ!ËḜóD³ 2» ÈC¼|HJÐj8ô&èÓîã(«á†À×E§å èCrÀÇ€OÁ}[ȃl$–©E<=f?dü° Hϸ ŽëŽÆpšWΰa wãùyÌ1x&™\½›ÉêÓäü¦ÎOìØò›Ø"bÐ&b†àðÙáF¬xØÆÑ‘¯7³!ùY«À©ä¡³# ‡R0„–Žã!ob>ì=Ä¥£ç‚t¡ô"ÂöãÅg.ü)¶õž|lZ@Rææ +ˆk#Œ4$@êZraK²Qé*°BÁ™—Âgà\‹jØ¢`lqrö`Öb6$oË?{LÂrÂ^nf2º°9mFÔ•V,EŠåd,¼&¾ÆÒµçÜ&€-¾÷(ö ®wAî„z vÀ-è“è÷!WB_ÈÒ{"uÔvÆ!€ ¬Â¦‚¥Æ‰ó°¼5Â8 Ï‚s4üÂÕ`§€%`Ï{N¢O»Œ…¹±‰s,š bàûðÕ- Æ]`b=ø3XÙÍŸ #Àzd¬¬¹{Ây,ämåè€Ì ÆŒ(A:¤+¬e +h.9@ú¨Ãhñj#Äi ùÆ„‘Ðl–²D¯CîcŽ¢Ø=l7ä*¯ƒ¼<):+r€ H™ÛŒ„y(097Ï1”c¡o ¹ñ½á¸þá:ï1lú xªÕ¿Fù +ä/"^nÁÒJ +œq\} ¯µé1·ûùäÍ_u©ðòÍ`åóxœ_Š­SÁ¤æèà‡«™ó—'A-¢¡¿ ²,€[!]R”ÀîJŒê-ôž¤Îñó‹BþybÄ×G‰-‰Àý kò!ÔrœCANdw1_÷š +ò¸Ø¾À÷ÚrÌâç‰Ý掅ž¡Ø6HAb6$åè: ãeï´ETRÅl·tÑo +ô3±ä„Wì‘oæ2:òÍ*½MÊx¿[JƾÝΆ¼Ü2ŠÂ^ã¡Ö‚­yÌ~X!^¥£ßncC 6³ö13ÒÇìFƒÔ9SºƒJiÚ‹e\ÁÖË1iã8„|¬dde;Ø„zaR­š0¡B$R†dQ]q‰› ¼ËL&Ô%°]qOWÂø"¿ÜUlГµLTñVm}½ ˆ =Á_Gqs +[ Þeë_ xCœñ'[ÃsÅ=ôy ŸÀZxO"ÞRèзÜKDùÓÌv$p:‘Ù#Ö*ck¡EÀdÈË€w ' Rñ“ /´ œ vë|ÆLŽ=æ8FxÖg²èãhˆM”*9ç‰{u  ½]Üï´›)ö½5$!<ðÂpÜ'ÖÃr)çÝ&aé`Ä_ÈøâmäõÚÔ­A}AfŸ +m:âÏP|Bú² 8î–‡yŽòÆç Må9÷ô¡‡äsmî'áþOÔl!…¾ È; ¡×g½„7_é#èK¬PMüh+›9$q„ð+Ê“˜CyƒÔàÍe`ñxËê_?ã4N²’îWaI4,ƒ”º$"A²d“Ûé¬5â/}¦@•¹è9¤Ç±¥ŽßÝ`¡ŒùH\?X 6BÛ”Ù€a¼ N°þy«èä÷*LTÕvÆ-㨋B»øYLÄÃõdJƒ2X†±^é ˜ AS©ã¨æY!œã™¦ó@W©J'Ôj÷°‘…Û°ÄËiˆÏ "§™ÂÐÛkÁb¤Œ°dÈÅt?p¸À§ká~ d¥›)Í»°ŒÙ DZôÁ3#€¯3ÀסN"Ü=ü¿$õ1–²›çÀZCf,ý&‰lc‡øúßɸLjr.Ô ¯^¾½ŒyºVè›»RxQ¦À˜_ïc+ tnRÛØ!Ù^toÄ¢@>WplqN˃$‘å[è‘ ‡‡ù":b;Ö„$Þé?ùºý8è×à^!Êe¬WÖ"Ü#îvÄjÈCl +¡÷Ó†‚Š|²ž¾Þ¡+ºß(¥²>h‚Ìî_6¬¹ÓhÚa³sÃÓ ÏO…º%±)Eàç°6%Fqˆe³@Êò§[Ê}ÅòŸÐ+€û嚀%=ÊýMÙ ^‡ðä[,5Ä×'Ç‚sò‘.qó„ÞÙKw^y³#¿!Ù«i¸Çœrÿ•Àé…¹«!'R±ÅÛ˜Wë˜ÀþÓî“)Ę£6£°T¤GÚÀ'ì‘ £ŒÝ’RÑE[Áʆñ½»Œ¶œ5 z×¢Óˆ{»æ,:ç(AÆ\ÕtN‹5:ñJT³A®M ¶”[*°®ÇUí%Ö«= ` È#`Qrêx^£ºÆ„£Úóz+•å1¾µU„1ë°¿\ù¸—ѱû/¾˜GŠî)ðulgqÍùS¶c±t'Ê·ÂÐëEîIJb×äùˆ/9GÀ  û5`…ñrøh5X1‚•4æmˆ+<"Øщõ{_ßž ž„ûû¢3ÿäëlȽµ`«ý7Àé0W ñu˜/Nã@¯¯¡q„81vI_(vŽž‹ùº)âë`EÆ÷½²c¾ ¯w˜(ô»ºK*AŸ ÛPd/¦Tª‹²ë …·šI&³KKøf¶¡8†îù!„ÅÍÎYÈSâ³òCr«ˆû£sÎl€¯¦þ5Ë2Dô3 Ÿ„âAøpÈïú +±«l®óõ Ì×AfÎóuè!Ÿž9åa°^¤e/7ƒeôÖ¡O‰¹Â¥˜«ƒŒô\ãæ2`³„ +endstream endobj 65 0 obj <>stream +r!•X±ìì¨äe„I†l(&ƒyŠ{¶'Ç‘ÒÃØ†Bô/6`ÃÎ:_ùňD\Ù€$hSËŸ6^DV(Û…(‚ …ÈÂvÌlqâœö `bÊòÚ …(¾VU˜Ô¬×²äPCsô÷­ü§‚ÔÈnA^K*qìÀû¸çŠeë|r–’‰Õ»É¬¾ý` VÔbÀDpÏ<®/•º%*I,Ü'Bl¶Á²ˆ²7Û˜¤ +e&îí.,} × Ò™7±Ø‚2I ˇ&×íg5Á½¡e¯6ãøô½± ÖhXŸ[˰¼[àó5¬K¶uÆs¼¬’Çä ¿Š]Ó”`¡&A_ƒ>n?dlIS›°¶0d ª€×»nÀçý‡ó‡£Ü%F¹ò"–{Cñ‡m¡o{(¦À: äo± …w’Ò?m(üÀ†"pÈê?ä»xÌÿÀ†‚E\°¹‘¾c ¨30¡60ˆ{‚$+ÄΓ§áu:àöÇmñ|Â=tçØ¹¬×õŬÿý•Cù ý}ïÌh¨rj°~€94âF€ ðW,yxgÌYœK!wBýŒ€x¹al€Þ~ޝ%ÆÏ™V6èù:Ü8å4ð<¶r°ôž,=‰æÀÑÓ#0oÃ6ó˜ì]\?. …„048¦`=çÈÛœO?m(f \›ô/ +sûÑCRšÏ6K<®/!ìÂÚ@q"èyºg-Ä09+ÁþŒN(Ýń孛ø]\fý¬$cª·UÕÄvÒ<èWá5ÀݯÚä(‰'šß(gBoËßõ²©5^sÛaF£•ú^•AÜKÖ"<R¡SÀ†öJ@Ÿ8?sÆgî?À÷ˆ _aÀ7¦­NCÏSl¸©cv£ÀŠöðÑܥќ»Hè'ÁžÀQ` –À‰ Ç€^ rÂÀðô/¦bâ*w‹ü¯Å–èžÑñ¥»ÈŒU2¾|?­yà4è]"¼­¯©…m(ˆ«ó©ÚP(An€µ+} a¤+Âñ  ÛIA_ÒüîÍÀÚ9Ä&æÕ ÁyôÂ(èa‰€ß£|}ç’·Ÿìe ÕŠ×ÊO õº$—3–b‰ìK!3†¤/ŒÆxÍ1°%‚þ§è Š_—’3^qÿ jkÐ=l¿‚ûög‡öV°§ÀBÕzè;c«õKSÉCÃao¶©8çö6)Õj¢´-Ú.Fñ/ +ô¼<ŽèCÚÎ|60b絡p²¡@5ÛH ¸‘Z#tÄv4søìHÜ_pIžÜ[ yýwŒ=n,ÆqwÆw"ä°g%SºUè”NU:ìÕÜï·òšD]éÚó”µr™ëO0Å8…+bKT[™FÃàÔ`ÿöZ IN¥Õ¨`ÙuQ.D•304 ôu Äû‡ÏõàÃÀý(Kÿ‰Á²ô€&Mìß©CìÛs€ÛVèµò}XŒXCß Ö°àß Œål¿¢š ýB°ÊöÐ ^V¡`j&`r¨ÀyA"î –ÍhUÜìÓBsj Øpƒ …HƒƒO³Ø>ÿÙklC¡Mº:Áµ-»”¯qòè¥Ñ0Þx]ÃìôüÕÜbÜ+ÑITÀ:÷Œý8êÈœ‡0¶´Eûj7΋€9¡× ¶`áO62²—[g‚4#Œ)äZöhãÄiðL¼Žê¯ë¨X2AÒ–Žx·…u¼2—<å5¤ã©ó!“!>yâcršê„ªš&¡¥iD°Çñz(àN:¹F$nA2zX| +,,Gb>ô`#ìù‚¥Zd—†k§”i2á[Ĩ¶áÞ»Màt¼þ{9œA*6M‰L®ÞæwhaŠÜÕ3ä?m(¬ÚPœ-Á67ׂŒ¿ø¼÷è­ñÑ|¢`ï š‡˜9Ø ¸ñÈ¥QÐkã‘‚9xr¸øbÈ ,{.<2C®‚xÅy$W£_ì†ço“º¤(ÁxBÿì* §ˆ½’‚Œ² æñzæz‹ðJ³Œ/ØYá\W¦,É®à “+÷³²[!70ÙõÚ û ½K¼$TýrVþ kvÙP0؆¢n¯0£[[”Õf@e÷k’WšTØËY‹a‡:ê8JpÔz$yÜ}Ì_6t|Ón1âe§$`ts­Ä-t.®ï¨– Cn¬†=Ý,ö»µ +ã`À¨và½=(ßÃXÑ Å»…‰•jlJ™R®ã ½g:¼`#¬ÝˆÀRÛóæR2¡aV¸ž¹œ»”zºç(ÿ{+Àæ’ñ»¶0Ææ°x,Ü3³1e»Ù„*à<´­Lx¬×ïÁó°<ìÛC1!”=ß.J®=Àd·ëHîÖ˜Jn´éÀ'«h›EÚ*t*yÖ"¬AðÍ,†1&ÃŒPœa@óe!ä5!šßЋ‚õ"mŠ€ßÃV.J|ﯕz^Y‚ñÌ9¿)°_¬+D‰åjÂüMx?¬Ùµéϵ^°ó‹V2¦` ñhØPˆm¢qz°çHê³@r9m‰$ wìéÂ4Éópïú@¼§à»ƒl6ðqÜÃYÞóž“ðµ÷TèƒCoEW­.Š)Ù3ÄÙQý¶…ý·WJ¼Ò—@Ï[Zâuhÿ©ÐÛH6(gs­VOø¼úôqÙ °ÔÑÔ%ÀvïeK-Ý/ɨÕ^©Ñ&“ò·cÛH°éŽ,Þ +rü ×#ÀÒ +aèÿYg Îfªë¢d ⦇‹¯7Rä•vU°¡ësÆ#mþÐúDú<ê\ðd°gg|Ÿ­Ä66Ó0 +È\=/±{ü|lCá1dC!’=Ü +VX¦a‰â®)JØò ñT,cŒÞg“«TÙÔZuÌORšUaͬ‚ÀJ +ÿ?¬ôæþÓJ/­Köýèóè!¹r¼Ï q¾ö5Àß9öØ +Qj“&Z¸îÄ^;XK޽4¨‡ˆ#‰nÖR¦_‘<¬>ÄËù  +s~±–±NR¹}àšÀ—ð:ð¹ÀÉ8;'Îùv:µU â]áAíýºØÒ”'BõÕyñi‡qR¨#`[zÂjäwÉÙ¼¯Xä>K0ÃÚì-ƒ=?¨. +A¾Ù/o•Ä%c¬ þÅÖo°F ë+h,a¯äÀ`Ù'¶tŸ„{ýGLj¬"¾¶Xòxä?lï6è`S†øk@.–‡†Øemüp_ú&Ò„† ¡cÂà$Ћ‚ý>Æ—BM,]&‰íü°ìþOÛH[2«y¿ôAéa“‚"æn«Ö©ô´Ô&Ì× ·¶‘÷V‚.Ö®Öžtr£2Q°Uäsg…È3k¶ñ…5ÛpEèÑ1g<&à5ر¡ ÅëB‰óÁ2ø„ ®tXÙQ§ÜÇ’'/C12—ñ¼½,¨±½{â*Ñ¿ÿ²¡€:ûñBn­¡£Ÿoš-ñÌ^Øï¯þ*æ´¾™K™„wÊâÄ* QRÕ~:½îŸVzô_Vz9ÍFÿÕJ¯^¬ô`&žcÐ?B±ˆ%鯭ÀvS¨þþC°=ÂÖLž×Á°,dí#qü>]+tHžqù¸“Ñ¢Éú_[†m#=®/‹jÊ:j:å>z-°†¶šÁ?l5ÖÌ„¨–Ž¥7éV„Þ)<"ûa÷a›HTçÀB 씡ŸÉž@Øúñ“VC{ÕpìFƒ¬Á} +”/À†Uè>´çx +`vÄ3ð]ØË»lðþ Xo€u”ƒGÀ:¬ïÁÚô(`¯‚Ø=Y ï+ËXƒ{2_„£.M£O…÷È z¼K£C·Cܰ›ƒ^­Ä5ržØïÚJØßË€m$`fˆÕôjm°\dt(ã= +§ÝÇÃCØ£‚ûŽñ•;¡g²÷8·'†ùuùú2¼çò>ðÙ@°Ë@Üö®8ÇÌÅs¬,CóÖ‚5³È-uèš\Ó0aw×’iÕ{ÉøÒm´Ï%´MÔ Ø1d„~ÆQ/6c»"‡PEëÇÿ6Xø@ÆïÎ +*æåRöbmÕŸ‰ÐGÆÖ–þ÷Wƒ¹Ä÷úJ¼§öÃÞE˜;Þ·–Pé=û…™}zBÏûËðþ°ì\æ½q† `ƒ%ú!#^æâÀ/xnÀ:*pJàÝvÑŠpà=ýaßÖÛ§„9°î k~Ì[\÷aŒé“—Fã½­ŽÉsa¸uì–e +´åå `< lMÉãK»d) ƒK6î:¤ÍŵùŒÛ¼/9)qØi»qbT±=Þ/áŽû½øïo…^ª÷Íe˜oæ®Âv)®°¿ìµBuø Ø÷ øåmùç®±…5kX«ÇvÐÇ„õKèÂ_èó»g.Ä}!X3E¹¯åC þ?„3ØK—§à< +¶L°Ö 1ò`=¶(€~:¬sy¤.–h¯Co…Ýß%Sª”¡¯‚¯ÉXΣø ¾[oÝ_^[œ ö‡%ѺŸÌjUƒ^(ãqe>ëž®û¬ ×C&”ï¾Ü€ûÒhnÀ~=àÛçÜXkÅØ>áíÈ Ûð¼ìAÿÆj¡÷ ¼_Ö`z°‡Ž*ÜLg÷h kwÏN¡ÌŽá½’ÐS„µk˜ïBïÛËEö‰s°ŒmÄLè¡9°¯9„áçFðÚÿ¥°éØ>å7±ïÕ¸öcþ?¿Â}{Üxú1—±°úhããC{êÍÎ ‡ÞßøŒ<ôŒÉÓŽcÉ#6#Áº¬QX—”yLhþF:º|̰Xì¤`_ +òbÃÐ=ˆš5Ÿ3ìA +x²–ެØvµ˜Ï£Ü +q ûDÝ“a^ +ø¬F'ùä­‚5Å¡~À•Å`Ã%öË[ÃFnŘp˜M¸">ð>¹û«0‚¾0ª—8/¸$ýñ†¾Øö_¸‰âÝ×å`I +V>`ƒ¶ftÄãx îw@úÜ„5!Xw„ž±gÊ|ŒŸP=£RÊ÷Ò1Ï·àu«3^Á^ ÖùEÁw×A? {± l\¡öS±…[±e`DîzÈËTÊÓ¸Ö¡è“…jöõÓ‚µXùÝ^kfçAF“2s9sü.ôI-»aMŠ)Üü…Œ¯Þ!ÌlÕ§3{P‰»qÜ?›¹­TbÅ.T³¶B†uTÄ7CÏ[äyu1ä¨9bß{«Ø°ëp¬­¯5R ;iŸÌ…Ø^zUÇOÀõlcÒºöQ©=*LXé¸a+öf})j:c—8“õº¶ˆNmß'ÊhÖKvÜo„纀ƒÀš'àaè¸]Q‚u@æ¨ûXü¬ŠËõ…b§ôù°‡ Û -ìI†”‹pÄÓõs¸]WbÝo,drW2ôw³ÚÄ*VaS(‡¤™´kÎ|2²lyíÓúFŸ>ÿÚWuAî}êÕ7c*ÿãA:¯Ÿ¥¯~Ò!³>í§2ÔÙ[Ý|ñ“æ#’Wõ–â×M§™‡b&£G“y»ËørÒé)»qЗÀ{WÑ=›I4O— ƒž®gSšÔ¤Wë)Óì +ÑÁ´ +Ò4µŒ'Š-VÆ–ÈVÁÓ¥Ž ø¯¤kvCFü|ìË ’jvƒÝæœÛ³Yïu™ì:LZŸ:“ܾÖMà‹$œçÒZ”i°!MmÞKÆ”á¾4ühäO*³Cr “Ô¢Ö’`Íq&ö½¹÷Rñ~Ñ;+ ÁWÖëú:ìÉ:Zön+™ñ~•Ö¼Îl> Ên6f6ꂵ$™Ü°Îú7pîdBÕNˆˆk*µCöŽÐW?h37[x`OÍÜ}OòÓz÷ +âÛv’Ùß5˜§=Æ¢â÷çØ¢ÎSâ§-G˜ûmŒð&:ÐïJîÔ³·›¢ÛÍèÿk#E¹M&ìý.† +-Ý@…¾]OÆ4nçeV¦óºXÉÓÚ’¼3À2’œZ’Îü %ÈjS®öK°×€‘ï'TîÞo²·{LlÕÎ!kÓ¬¥Lrë>Aä›õ”¥ÏàÝtr‹²ñ½ªCÆwjÓ_5è¢õ`½+ò{¶Û¾%Ô+ã5-ŸG«¡ã~ça›‘ÀÙ°â­PC1‘•nù>^û_¤iõ†¢´-èA1—ï-Eüi&í’5v»:ŸôÌ[hW¿Áð§.xúC@½ü&!‹~7¥ ¾™ Þýí ¿‚3£Û¾Ø {Þ{3­ŸéÊ–laßI¸wÒŠ27qe­£ðy¯9ýx@D?틟7œ”>©;e|·ÆLšQË“ÄW«K’ê0)ÍûQîÙãJ…íEy ‡¥ž”°¯>åuÝB×x§æ5HÅZ²ZÅôÝ.ô˜ù÷¿ê r¿ê“?ÓlþÇ#‚¢¿›Ï¿ +…emVâ²*{“Wo/˜hÁ¹±áù›¡ຂðõâ£D˜Û#aSû5X” ^+1a“ÚÕxOÉ™Y ÛKX 5.(²–>«°Ýí1æöJÅ7;D’ì6Jrµ¦µh‹²zôÙÌmÖïÑ*°Ñb}î.£#K¶bëÒðü-€_DÞhž‡–l¥wh‹ÒÞkÑ©=jüì/ª‚øþ¼ôo{xÙ?” ‹8’×Ì|øó’¸¿.PØßåCÖ~9Cµ|±fú>ºÓ}ß\%ƒ%Á‡>Ü‹<Þ~#FÎ<í•ÒûXá³3¶ ý8“ÿé0]Ô„)í±dÞõZ0o>£ +ÿ8L½þf,xùEH~2eÊ»-$íe>’Žw¾¢ªr{æÙ{SúÎ=¨E&·ï!3>í‡ùÀÜë¤Ùbq^³){¯‘e²ÛtÈÌN5aV›ôaåˆoé“òÂÛ­ }«Ûˆ¾Ö©'¼ÝN‹ï7™ +Ÿ¶›R7¾j“w>ê±7ÛI*·ƒO>즨}R:ÿëaöm[ÞyŽy×}†©|ž©êìïµ邿CLC«•°«Ù˸ÿ]¸x°1HÐÂYðj9sªñó¦¡Ó–yÝ{˜Êù¤E‡¡j=x¬iâ\Žp)ÔèWñÂjÖð®ý]M˜Û)‘U\4ôâ¢$¾Nƒ ~¸šó»&y뛎àåg†|<@ó³SÄônå'~Û)JÔ’fµ’¦w«K‹ŠmŒËŠ]¾+r7É/µ?¯=)¹Õ,ewa¬r¥Wxê›Þ¯…0áV±ý•y‚¸Úm‚¼_ É’oftïggñ§wâÁÒ@á§÷~ì¯Ý¾ÂO~ì×>of ÏC¡ïRÌ“n±ø]“µIkI¸¬Å^øºå”¨¤íœ¤¸ÊFRZíhR]pYô®ÅJò²ÎBô¦ÎBœßt–}ÙiN¿î:(~Ñ€â±ò”¤ ÔR\Xe‰rž±QF÷N¾ÿý%¼ØÚ¼ÛÿPç=ጨâ¾#¢ö/iwyˆ´¯:DÔÝä#ìkñ÷4Ðmïíø¥3å—þiB–þj.¨ürŒ~ÿÑ^8Øè+ùTjÞý Fü©9ˆ®|–~Ù#e®÷aoÖÓ!¯ÖQQu[©kuà5ѳFsã—¤/Ê-¤¹•‡%w¥÷«ÍŒïT›2ÛÅìã÷Ròi7˾l54ž¿¨?-~ÜvLô¨ÃŒ¼ó]|0ÀcPýe_¶™‹++íEu5.Òæ*Óîâˆãïï$žj»–x´ë~Üá¾—1¢_qk¥—¨¬Öš~Õg¾k³d[j\LzÞDê}}¢ýf‚EKZœUCbÜ…º8ÙÙ¦äØmÙ2ãüfðƒ‡ öד¼èAÿG|.tšÈ9s>•ò^™¾: Í^é׆ܵKàòl¾aÊÇ­LáàQ“Ž7!fíù‘¦u…þ‡;ŸFê|-¬n¶7Õ¿Ï©ò=Ÿ-䲩§mLд¹œÈéÆqn½™Yç+Ù©ö[IVMééÇZ$7”øB]coµP¢«MF¢\tŸ^¿»`RŸï'}Uy޽Öl(¹Õ*‚<Ãv4¹lÏŽA1“ðÎSæWê 1x¸çn”ñ`A˜äSQˆÙ‡‘öõ‘8&³K]¢î–:G¥¿s—Y´¤DKPÜîÎ:Ö~3FÒ_,îo 8ÔõRÆ4Øðò8]*û»¦ ±{ãñx)}åË“'µç%;‘™î'ƒß­åET¯<ûÆHÛªýÌ;ŸÅíxoÜ[.lmtw5øìy%éª`J:O +?óýa(xÚC1oÛN2•mV‚ÚoG™îz“C]e¢š2{£Üß4 2j6f ìп÷CY?ŸÓá5ÿqüTkflj…[LB¥{\@­O‚{mpâù–”Dóîû1’/•aâÏmAÂOí¢om‡zDkJ‰?Þ–#3í{ίùqÔðöjÌõ/âÜ6Tç4…¾V±!Å›»2Ù=:¸æÞk•¯#üw­•4άH’۵لʽTôÛ­ÔÕšâ—m§Œ+ËÜ$e•NÂÇLY¿íD”¬#ƒ‹Öð"ß­#Ÿ ’’º2÷£ïŸ&é~/í, ½¯õ2,‹¸Ð”˜èY˜äQ˜˜\íëU˜*i-ñ¦ëÛÏ›ö¿tm Mñnð‰ot‹Î¬vŽÌ®u ¿Qé®7Ê»ÂOðÎ/* ÒGv©!&úà‡ì‡tiÿæÙ€©äiãIÉËF IQÍEñÓÆcìÝš½Þb$úØäÇälد]Þ§Zrâ϶\I¶h¹štªåf²¤³Æ.ù|‚Wú7‰ öÇ1²êïÇ Þp†z/8 ƒ´î-†W>î½m»pðC‰ìPÏ ÓúÁž)é:Í”vX"ü|LœÑlÈä¼×ݯ• +ßVœ5i|íw¬ývÜ¡ŽÇQÇÛï'Z5§¥Û5EÆzÕøG94GUyEdV¸DÞ®sˆÈ¯³-kº\\mVXiVZkRUcR†~®¨² +-µÏ+sŒÈ,s +*óµhL‹1î"¨õ7ë~IÖÿiÉÌñ¨ûÿà3·¿ñ™½"ÑÃ΃« ™”¯êâ«]4sï-,ë¼ émvµz±]ï=$ýu¡âO¡ôÀ7áç?ii˜IoU$ÓÚåÀö;Ÿ|úžÔž”6¿ó–ôW‡˜ô¿‰t« NhðI=ß’uåP×3™¤·Ø÷pϳ˜£ÝwâŽtߌ¶iˆ ©ñÝ­vˆ,®³ +l´}ÕdZ„¾æ×Û„æ×Ù„>­¶ÈEó.µÊU–^î*K®p“yUÄH?”qBðÒü«œªðÞ€Hœ×Pr¯ÛL\ÔrÖ¤´Äݤ±8д£$Bô¦ÉR= Ffô©‰³›â‡í‡%EMÄ…¨&¿üb&©­ó ¨ôOu®‰L5m+Žæ· ¯ÿ®ÍOlØ&¸úEƒyÜ+67¹Y5%§œl»™dÒ[Œra~´I_I„økCÈ¡ž\™m³,1¡Î%6¦Î=Ñ¢5+YÒÿ.„í¬w=Öy'Þ½90Á£Á?6®Î%òFµC8wª"¡qzYnù¢Ä9öi‰“ìN©Sdl™GÔñŽœ(ÑÇÖaG³—´¦ú²° ý”¸´ÎZô®ÑZ\Qcs#²ä2Šk™_…_´{Eh¬KuhlR‰GL@…"ÝõÁÅè5Çç5qÇ¢üTî[ì^ì!s¨Bñ•”Zé“t50è¬÷†Ó3xÍé Z¾[¿}ªévjHu`N`MPŽEÛÍ ó®Üh¶±ÂVXQ~Þ½.4Æ Ž—Uv7j#Ò+\"îÖÚG7Z‡¥6:Fé¹CýÚãjø;fÔ÷S¼ïÜEòû'g“þÇÁŽÕ±U>1ñ¥îQ™ÅQöUQÑ– ÉQgR¢·dGJ?›õ<”|h +‘¼o +”´´ù þzˆºñwá³_›5—EmÎJ=Ó’päý˜ƒ½Ï£}x-üØáC~øÍ†éíq}«:ÒyKfÖ÷0Ò¨ƒ;aÔ2x„~_cw¤ó^¬kCÄUãúü˯8ý¬o[ôýÏ×·Išjà˜4]?¹yƒQÅ"ª·ËñD×ÕØÐ&÷ظ7™y÷ÍH£ß¸óz]œ±îN¬ÓÏItú8¡v?Çè rfF_¹³F?8+ö[µ'û½Ú“üòÅI¯•ëF5/3¼ÏiRo~—´ØšÔTûo½›èX•Uá˜YîkÛ›*é© +64¹°õv¢ú*WIocðÙÆŒ$çêˆD۪؄…oœ#¬âPÎ~+í¯7ë)Œ6ïιВ”ê_ï—êRžx²=+†ù½û2ÝÙé(ìiB¹³"ܼ'/æT{vÜ…–ØØ˜·X¯zÿá§?ªû³=ÕùÍŽWÇ™ésú:÷wè†ÆÎÔ Î™«U©òº¾ŸýZä]é“Vâ‰ê^äb·H¯²€ˆSÍæ×#˜þ¶áƒ-óêÓaTǰMNÇ:îÄ{Ô%Þ-r‰|ùÎ!"·ÈUvû+ú]#Ÿ¼qŽLë}¸ ÕØ¾âp¨¯~•þ±OÞ:E”8„e£œUZe2Ø|1è#:ŠQ®ó¨÷üñÑY«•ã}笎tÝ”]itŠ)n¾ú¸Ñ.2·Ñ.*¸Ù+Yô½´Ì7!õWlú;7Y Ñž±€óøM?aü1?,½ÒEöå·§MÖa·Û¬CowX‡³?}ôr>m1°Žœ¬¦#"VÍU"W æ +Ä\b1Jèû•£gëf/!öíZb{9M©›üÎÝ4±tÊ\b1 ýÖ,b‚¼1Yn61s¸1wôRBiÚZbáÜÍÄŠÊÄC bŸOåŒϹ]zÕœPÐõ§õ†;$|óÙ¤ómdö˜Â7ŽáoJà Êìž¼uŒHªp‹Ž.óŠõ® +Ht« +IHzãs ©[dÜÛË1áï¼£ö>‰$;½D÷õºÚ7…ÅÔ6_ +ih½ŒæP<ù£ÏM»‘38óëڎקjÛdLÖsº« øVI;çËz­Ü¿oÑ~ÀíÔŽ©_ªÂ;F,VZG,œ¹ˆPRXŒ®a1GŒ'ÆcÑ1 ý¤HL'”äg‹§)ë¶{MÂäU.=¯?8O£™Ó4üÂæýÊÙ÷?õvû ›ÝEÍ=^➎€cïoÆ\®Œ‹ã•Vày­È=åŨÌBOÙ£§È×ﯔ¸E¡|ù¬È9òu¡sxá;ÇðÔr7YT¥W\KË…@®Û"ôK»MÒ¯}çNv¦„ëÿÎØ_ÄmQóx=mØf؆jIJ¥JÄê5Ë uSK9-Ï« +Úî™ÓÕÙÊ/™¯DL&&£‰QÄb8þ®K}#ä~þ<½2]õXô[#ÑOòøµñèó— +ˆõEÄ.Ê_nÿmn•°¯Ø=òE@dì3ÿ¨ÈßÈèߨ跗£b ½eé…žQW +<¢îæ»E=/p‰Ì+p‰xôÊ5âš›·K\"ï;G½)³÷© +ˆg¿vú +?7ø’¿~r½ØóªÕà¶‹¡ÑÍÎѺ9ý=ÆÇ‰å³–£8œŠÎÎm:+9|06ãÐg:Œøxÿ?Èá«ß„;05l +ú:‘)7ý4ƒ˜9e5±vË!b¿WµoÕAÎ å¨Ãâ¾–€­×b³ó=¢ + œÃ3߸Ge¿u‹B9&üE±c˜GeP¬é‡Ç¡žåÁq›‹œ"î¼uŽŒ-ñŒ:Ñž%üµ5€ý½ÉÏ©)8®ú½Upx‹s„ÁïÜ©ý²×s7íÑ%”ÆÏ@×0ŸÿHt†ðýtMÓQÄMEßÁ÷ÃþËÕüçaøêþõº‡¡O»±èß›æâª½' ¿¶ê7¸•úÜQ¶óƒ—´£*ȬõYıÖÙ¥ÚØXë:YÌ«WË¢˜„1Œ-ò–Á8æ¾ò½,tÆã¹ôQKTc‰Stg¹C„øc‰?ú÷Ìu;9Ö°;ÉÿÎÙh½ã4vê›SÐý¿þ€k”ûyGà¿#~Þ3…QKˆ… õ‰µ—ˆ½®Õ“Ô»¹Ô§r;«Ò¤à„—~²Û¯=¢Ÿ¸Èç»Å<.vŽ»ÿÖ9úEktÑK·èWù®Q!o}#]+Cc‚Ë|£ƒ*¼e™•ˆwU8FÞ(sŽH*óñ¾rV¯¸­ê^·¦«šÛÊ­[»•˜)7 Çà|ÿgÌÉáû/ã¾þçkŠÄ‘èýQxî ÍÃaø{xm4ú‡²êb&1eÄbbŽâ~bù®ÄVÓ49NƒüÜåhÚó00§Ø5"¨ÄOv²53 +ø°Ecª pðJ„½¢|ÑWÛÚ¨ècí9‘ðzÎ;—ˆ +„Ùj­Ã†°®uhbk¬Y_n$ÂbÕK¡£æÍšùÿ{ã_¯õ¯×àzå¾7tÝ#ñ‹îÐXô9 ÏÞ¡Œ:”ƒä^ë<ÿ&o$Vî8Aì<~k„Æ n ‡³>Üz/ôlUztä‡gS£jóÝÞºD×£1l(vIh.rKn~çœP[îýêK4ŠOÙãBWYB±—Lg“lP–3&LÃsë¿Ë ÿÛ¿®ó¿û€kósLG¢ÏÑøú'¡OT§n&,+T.›Ä‰Ãödróô>sæ‡oz'=÷•Ýzáýâµ[ì›ׄò·”²ç¤g…®±y….Q)…ž‘ŽQp¸UE¡ú]åy¨ûVˆv§³jÙÆÿõu eCy|Îòÿ2¦Ã~¾7½;}N6“˜!?˜4LÓ4”“æ ?Ÿ˜6b 1iøbb¢ü"bʘÕÄL…ÄJebçÑ×#T ¸uloÂ-‘¨@Mˆr©, 0xt²9#嘨'(W¦ 2¹0ù”[ K"[š/EÜ@œÓº%B¦÷;¬‘ö~é.m 1S~âÿelˆÿ’+áç¿êÌÓ (+Á5)Ž^BÌœ¸‰˜=}'1kÚvBqÆ6Baêbú„õÄôQ눩ãÖSáû±…ñè÷T‰ÅÛŒ³å÷çpË :¹cæM·OU_ lv÷¹gTª}mEîé-žo]S{ßz\ùPîšÑ_å’Þ[ë”ÒRåPV攼k_·u’üÿ›üøW„ëœã¥8B‰˜2\ý4 "T~T?åæ \2Ÿ˜1|91mÔjbÚ˜5Äôñ‰™s÷ –#ì§áLld“‡m¦Êí +虢÷…3ö¼vŠ}éuïé帷ù®±å….±E® ¥N±o c‹Š\bï¾u‰*@ùôå['¼.{ç©ÖΩ®\§ú¿¾–¿ò&䈱8³úùýhœGÆüü~2GÅ ‰ÙhœæLÛLÌUØLÌš»—˜³D˜·È˜µˆOÌZlH(ÎQ'f,Ð"æ.cˆ5:¡Ä.ÇÖ *o¸uâ÷ÏŸEaÜRäõ¨Ð%a3YL‰G$™ÑÀ=n ü‚°Ø»wŽQuEÎQEÅNQè#u¿qwœ–[´i'ª­“ÿíë‚<9g†áøû¡84Çb42‰˜!7“˜5v91kÊ:bÎ̽Ē5bÙöÓÄÂÍæè8AÌY)"æ,¤ˆ™KIbæ|b†¢:1{öüÞ:^4±Û©n‚ú{NS¿;lÖt÷²EEj`ÂSÿ¨Ògq ¯ÝJ +ÜP}]ìù¾Ô)f Ò!¦¿Ö.v Î!±¶Ô)0©öN²h‹ÑÿjÌàü'aŒ6é'zªy0÷†Þ›€ÞB(ŒœEÌ·„˜5~%¡8u-ÊÍ+…)kÐüÛAÌšº›Pœ¶›˜>m/¾¶¹ËMˆ¹‹ÄÄÂu§ˆÚ¾ÄæCwåwwOQÉå–ï+á¶ê䎩¿ê ôÙ Øšט4N5eQíeNñ0ç:êÓÚ«RÚì“ß”9!.á¦VÇíY²Jë›C×Jàñƒz6Un1U1$4¯¦¡97]~>zm>1á$tLµˆ˜1~5º¶„¬­(>UQLê³7šó¶Z ö9Kôý‰l<±‚J"6˜=‘ÛòÛ å2nÝ[rébarˆGQx¸_Q`Ä;„½ªÑµ=xç${„j\Y‰£¬½Ì1¦»Â1¶½Ò!6¿È9ú|M|„ún׬I³ÿíqûk¾A¾‡J5]^‘P¹]ÓlÓÑëPÅž8ôžÜ\BqÌr”ÑØ[‡òæfbŽÂ^bþB’X´é±t¯5±XÕX¢æBÌW¶!æ©Û¿¨ÛËyÄzã ¹¾m“Ts+ ú¹£Âî"§s%ÉîùaOø$V?óL®홞Ÿï"Î\îkÕ[ˆxBC¹=îCŠ>¾¼¬r›[2kÖº»–ÇX 0"ª^ÃQ-§„rÿ"BqøB”ç磈œcsúœ.§€®o1sÜ"bÚ¸(7¢còJBa:Êÿ‹´ ¥5¦„ÒZsbÁ†“Äâ=ÎÄbýbv±Æü–Ü6¯ºq{oq Õ9„ƒOI:ž{ž©I }uë¹Gdå+WYº¶Ò|çð'¥ï«mB?ÕÙÅ÷·Ø%—×8$&•ºGýè¹°Fdý³! ü?ÿ•K†°ð4ZãÐ\›ŽÆp>¦ËÿB(NZ‡ÇJqžŠAb6ŠÃ_6Jˆ_Ö3(§èskгU Å„âzbþN4猉'îÈo iœ°ó*7K¹’Û¨ZÉm3üúçIó¦«>¾Åþáñ—e(wƼBXÅhtKµcBW­CRo½Còçzû¤ž*ç”ÎJGè%Ejµr‹”¶ÿ[ã&ÿ/ùq(LDׂÐÇø„Ò/ªÄ%-t*Ĭùj(W( +3Qþ˜¹ åL4ÏÐ\›;k71gö^bž¢ +1w¡1oM,ÜxŒX®îJ¬¤ëŽæÉmt+½!´eìÎGÜ/»Ó~ÌÞWÈmÔìæ Ÿ[ìŒÛxy¾~Y‘ï™^\èýøµ›Œ_öý Á3NÛè>â…ß²mnFÜ)Rn¯Šwñ4Å ÿÇëªmc0:„,9£,¨Ð³‰)hœ&­&æ z¼dƒ9±RÚX²ÍŒX²‚G,œ¿‡˜‡ò圩kÐ5o1wöv„) ˆ«ibÁz±Tõ,±V?XKÇ›>•ßÚ9~ûCn¶j?§¬öžÛ§?È™ôr'Ø}žGZn†ªÏŠ>Ôu?âTSvlê+ïØ¤×>±§›¯&˜~(‰r©‹H-/· é«´ /ñˆ:ÐÇQt-ÿÇk‰¯g®Í“ Eœ?ÆaÌ? ùrúˆyƒÌEóQ‘˜:%búÄ5Ĭ:Ä"e„-ŸßÚ7cÏ5n¾òSn9àIåGܲÝÉ›µ3²wÚöî);\ÊÇï¸ôhô¿Š)ªyÜŠýuœªÑ'î¬á'îŒðK±—ißÃà³Mñ‘À瀓Ö|ܵÐEöì­cDY©}xó;‡¨Jç¤ÚwNqä—f5çwÓ G@~ÿwbsÌÏZñ ÈXqÔbÄÂU:ÄMKb9eC,3#V;ä _ãûfäF¿wc6y¼½îÒãáë_ŒØâU>v‹Ëø-¾ ã·8¾½Õ:ÔNÊ ûqköÕq»•op‹T‚ZÔr¸ešuœ¦N'ÐmçDºÍœ?È]ºX˜®+ag窰ÚÐÒÛG€ž†äz³Êý"0ð¸5[YxqØ¢e{þ‡¸”Ãcy}†"ÂÃ3U…ùê„ârCbÙ>Kb-éE¬&/ëD¡Ä¦×ä·ÕNÜ}•›§üO·e_·òß®€ú)[eɯù›¥QÃvœº6bKÙĽ¾­ÓTc¾ÎÝÿˆÛˆðÉ_9ÞÁ ì—bwNx  tžnTórÃâåÔÝ? …¥=çEϾ¥ný©/Hÿ›*›ó#уï¦ì“ϦÂÜ^‰ôQÍ1qAëYØï¤_Ì©ˆä§ËÿÏuú!0Ó¦Ž^€°þFâ%±`• ±hÛIb©† ±†çI¬>`E¬ÝsŒXµ™"–­V'–/× Vo[É€aÛÏ?µÃ¶xì¾´¿/Ô¨æÔ´ë9#½^ΔüòÝɼãF˜èóÛËüo߬ŸØé´rì¬ßVk'w¯Ö¹ÎmÖ+ã J9šWÉ™ +ΰMuìû×C½O£Íº_ÊD;èºkÞ;N"¨úqœíjóp¯I¬,³ ñ¨ ŠVK\°Pië¿—rÀÚö@ó ]ç´q‹‰9s¶K65OÛHbå@ì:™8|GøÛ)ÊEÜJÏ<'úôÄ…ü­ÒÎè_Ï þ¨±áýÙl­ÿw\ã;g ù™ãé|ç$º_¹Çn½nÎä@`Á\Sc4̓FêrÚürî~ÎŸÛ ¯Íä?àŒèÎ~—í×ãŽtÞŽ=ß”–|¢ãv¢¾¡Á:1‚ {¾AœÓ@1OzņiŸ¶hX%Ž[¼bæiÿÝÇD4n¿(n#–®á#œëMl;õjÄv¿Ž‰;S8E{Û|æ(Ý߸Cº?¸ÃÚß9ñ¾fn§j9·I½‡S×ûƒ;jS™Sî[ééR!|é=m{/¹mš¸ÍÊ9 ƒfΔ×ÍY +þ´« b¿¼÷Ö{À©èŸSÝ´ÐÖP'à9JØÇH¦5©Ðá¯6ˆì2æŠO‡M:ç-¢³ÿÐæ SYŸ5i÷› øvYŠ:æ£Vo4$æLXü_zAÿ›òg!Œ5i9±x‹Ølœ$·;¨}ä¿ýŸñ|9hø;eø+g¡ÿ‰;¬ÓˆrAGê—s¤î;Nϰ3 pvF]ÜIƒrŽÕÎ0Œl_cèqgžAjÏf~å‡é¾.üœ5¯;¡›óçVCß\%^BÝêêçôÃA–Sº }¾šL|±•¾[k$Ê{+–”Û›6w™²Iƒû™ðÊmL`Ñ:&¯™1m~ é)4(㘠»¨ÿöºÆ¢¼8I~.1yô¯;-Ìí sÚxdV×~2¶t ßÿÆBóQãa½múð ¸wð¯0– +“W¿¬T#VëX»-nŽÚ[¥õ£¿< +=:íŽÕíæ„†µœ‰Þ­¿íÔ=ì8BKׄ8 Æ'Œx&KšÈ±³Üz)±ÕæÙ«”‰…ª¦ÄæƒaÃTƒk5îpk4_s{5óÑqåýÔK5ÜoNÓ<5VßõŠ‚QÈÕF©ó #n-6H«ÛlpõÃN~Ћ¤]êLêBÌ4Ö&i&íxmmw}.}ÚÂ5-B}÷^‚§êÏKLåRS9Ú-n?¦p?¶`#?¡`3óp“ áõ2³W¹ßÎRÏ:„x_¥OüÆ5yuu@Sò¤æ¸qY¥«YÅëãÒgI~ÿÚ :ºQý¿9ó^sŒÑuNÕÐ)nºÑQt//xN„=YIy¤ÌCy`8}ÚszÊ~e-ÂgJàg4|Ÿ.'ý/׿KˆíKV{Wn"ô÷©&b3ùCœ¦šŸwšvÐÒy²Ô.h&•T´ öù +5˜y<2ç³&/»{¯àrÚ<Ò?g}³ÓöÕ +®ÓàÅ´oÄ}ÜF]ÿ»./ºre›¤Hž¶CÛEÌà§6è’9¼¤Ê-¼°×+ Òz¶æq†w¹ýú9?vè^ÿûVÝkÜfn§f?§¯ý+'Öäô´8]Ý·œŽþKNǨ„c ^p:ºÁO”ôÎ8Ô7³7:xF^[K“رr>±oÛ6BÛ@Ÿ ]Éœušà#þ"¼ƒç‡C¾`RçèÞR¾ °ˆoÚR‰£¿"sÆmBK]ŸàP„Hj&ozÖn¢‰[êbS«+àÙ ‰[Ø\xÆ‘½Ú®kz§ê¨èî{1ÿêg5c´åqåAúGAdÉòbô4þ™€ñ‚+ªHò[Î3wziü¬‹m‚"<ÏLú\_Hº%̦\Sæ +|ï,2L©ßlx燚ѵ¯ÊFqeë 2¶ê_ýºC?aÙbÎÀ¨òo£â¿1º÷ÿØeàye–³lšaÆ·T^?eÛ¶ÉÐ>fšÀ6a†àbèCááa*[wÛ–,'ö¬ßJè¢yGs ϲ–žä¢ï4Ðb'߯£rºµD÷jEÂûuBöN -¼Ùħ³û´Èðkh—ø9¬Mø Ö1emòmü,Ò;}>ÌCÞµ~5² ÓDTT{†|ð™Ç»öMŸõQ™õË>úÁš-n³æ·ä_û¾OpÞo"må9‘tɘËKlØF?ÿ •´T_>Öõ íªw5|Áè?åÔõe}«õœò÷é#´iK9ýKI“r9M~à“¥úbK9ž™ÝÉ¥á†Ôq9Õªhþ­#”¡.øMdu©Â¼Ñg‡fè3-†K/L=Ý$L«<@¥–©Òª÷2­@Bz«ZÂÏéQ£.g+ÑNÑ3ôùð¬<Ïúd,}³¢ç§¯Æ[6e&,Éweöé3ÏVÓ>ÏWWTéGB~jÛnÁÏšä=*ðÎ2Ê!t:é;“ç4ÃÐ÷ö|ƒ°·Ë ¬3§iI/Éi§‡éˆíä ¨ rº†‡† .üì½etTY»ï[QH‚{pwwA’«ªå«* 1âBÜ݈;wúÚÞVmm×·_Ù{Ÿ3ö½ãî;ÿO5½ß3Î8cÜ/÷5F:t’JªÖzæcs>ÿß1íáZ{§šÙÃÆjƳºi…à Íî-Κݛ·jÜÝOÓì= j´!©ÖºÐTkoÿK.0ÉZgŒ·Ü¹kf;óŸÛ×o&Wn/DgÛiý‚Ì+ä¨D[5¡Ø˜Q!)6’”¥‘h­ùÄS/õüSU¸ð½7WÔ2O®tÐõ>Ù,ôÿ°º†BRÅ9£f¢Ðûd·áú'AþßÈ yx©Þ÷ÖÝ8¡ÿ×}˜A“òÎÍo*//‹»ùº;+…ªó‹Xž°H{â;µÇ>]ávÔA›;0Å«âö]\ó˜Ý{X½°v‹fëúݧÍû5îÚ3ÌYjËlÖÎ_¦™c;N3wäXÍÒÑÓ4ÛXþüÊ'§s–Rsqfò G®-“šló):¹Hö²Ôêeh ³$-B°0â +G+yõS¥£×Ö]m×wÝßÂrée¸ÿº–kuþî"ÿ‰×õ¿ÜŽ‚[6 +ܾîÆr®íÉ®ãɱïçý´Ö«Î/JúfqÇï®Ͼò.½ÒãÞ +ï~ç'~ð*ûÅÄÍ\þÐt]x¾'f¾o¯ Ù»ÓSã ûœá|lÍh>£w +t£ø ¬ažBó‘æüáú1Ìfùì£êƒå˜[Nüæ&–^XÀ…gÙp±#„œnÏϳ|ðØ!¥Ñä#«®,á:¾Ø"t½Ø%œþÎM<ó­'?ôãÒÛ>÷ƒ‡péGæ4ô]Ï·ên-Óžüu'æ€PËâÌ·ðίF]ß_·i>Z¦íùç¼~>¹p”>*ÃF(¿¸@?ø›×ÿ×]ÐÍä*ÎÏçJ/ÍÓ7~²RÛóãf¯Óÿ¾C—Øì°ÏÃO³fÁJͲq³5æ®ÐlY¹Zãìì¬q9à¡qÞÏbË]½%«‡ Ù¿×S³ßÕKãåe¡O®w€ö ü f´¡µ­?‘÷7ç´Ì÷pæÄ;þÞz©û¹3ßó šÝ\tŽP>4W<õÜÃpö¾ÛKçHÙÍS ‰%ŸþR¯\}b¯¼T…³?yrƒ¿ïá†þ±3a|Ë£M¸†rníd¾¼Ž®í“µÂ¹Ÿ½å_èÎþÏ}ÚÊ; õ•w—zuÿ¼Á»û—ͺ¢Ó3½2¬¼äsW}€™×Á$K.ºÆ^šn½iÕÍŠó5[ÖíÒìÛq€ùMŒHhë%§:>Ù«4}±Ü5èÐA¯P«7j¼= ñ0³ë'cÖº/rYß|Ì‘²80CÈlœ(ä·O×w<ߟù«wò÷½|íÍebjËD}@/^L¬p ™¼Ìæ)”ß4üeé +–_YĽµ’¯¿±\(:9‹/=7W×ÿÝvîÂOÂ…½¸¾ìæJ.Î^†Öká)2×ú¦Xra¥vÞà6ÈÌ?GçÛASOç›b=è?ò‡r‡‹™SÅÒ+ ¹ã_®‡}Aó—å3„ØŠQ|L©=‘mË…§‡v¤Xpv޾íé&šA®}k™¾óóM˜­dñÏÇpõA€|å©Áxû~”üÞ“Cü…Ÿ¼õMŸ­Yì×W¿µ³‰˜_ÞûÆ_{òŸNºÌމº¸úÑú¼ÞiºÁÛ©;ñë.ä;Ì6wé†þ± Z`úàX+ô4<ÕsÒii¾»FÛõå>«gŠ·o²å®­nš­K7iœ·ìgv©ÕxèxNõ7ײÚ2:wf« ޵ƒ’4^­øä†qRùõ¥Ðô®«1±~‚œ<Ü'8ÅF‘Ì ÁÉ6ÆÜžÙbËÝ-Ðz‚6ŸÙ4‘/šÍõ<Ý.t=Þ)½tÅœ«Tqj!ôùžgNÊéÇ:áüs­nèg'홿ïâßþEP>|©Üz~H<ýƒ§nèéN±dpŽ˜Ý0‰«½¸Xö¯.4»üöªþÂÿÅêŽÇ«u‰õc¸Ä®û×íúÞ_vðG?Y«/»8ÏjŸ¬+¾<[ŸÔ4ÖÉÉC³aùZÍÞm4àx‚õ¥Ó±Ï,öèŒæ¤ùQ8@Bxâ0h¦’]2¿)Ö_X& ~³ë¹»MN,-E§ÙÉMÓù†+ÄšëËùFö÷Nü¾G7ðý)§yªZ;N*<7¬ >­nœ˜vl"⤘Ý4™4uRY=˜Ärñüþ™bVÓdÒ’LiÏG¥ÙðQùv¤·SöÖBúœP3† N­y<søÐ¨ÒJ³Æœ4ôö¤²«‹äŠ›ËùèüÞ\€™‡ÎG{æ"óì¤¬Ž©X/º“¿ïÖýu7ðã.nð·=ú®Û¤’só¡í¡÷ëÝÐXƒößdÒ°æN|·O|å.^x©ß~eÞz)é~uªßZÝ9Ä }Ó_ÖpçqçÎþÍEôÓÕ\f÷dôÕôÉÇÆòÌgv¿Ø†‚k}´ óãÐó‡v¤Nekí`„—Z3½}Ï×ÛøÆ×pÁùÃ]÷ɬÚ«9à&k¤¸²ÑRIïlhSJù½3Ùµœ %5ŒÃ5Ö…g ×ùÄ[jý#-Àìà[ïo«š@JʼnÅRíÍÕÐÖÞ'i\çôÌ„ö(ii³X¡kùp®çÙV¶7 ÇÞ^%6°‘o¿»Eî{äj8ñ¥NêýbŸÐ÷`0ôÓ~þÜ÷Òõo|ä‡ÒŒ/?-7~ùQæïýÞ¿,]}ªÀç +™Ç&±µ»V8ýóÌâògþÓM—ybòž}¼fû†}Dù¡ëû]âà÷.Ðãrº§èK¯ÌÕ'w@.ºw˜­>èÛndÑÐ|â1f “c*Fë!µq4åÁU±Îxõ“`ùìcta„ƒÁìëE£¡‰ÎŸúÅU7ð³´Í¸¦'p¡EfÎêʘb{!§sªÇâ,«/Dæ+„ôÆ RJõ8!ýè.‡ÕG Õc„„!¾vŒ™7‚)ɳ ..¸!ÄU#ÍÅäºq˜oåzuâz¿Þ )¯s±ŠªXÓüÉðÅÀÇ—l&h ‰ £ á"œùæ€|홪^üÊ ùR‡šÑè†Pùé…bq§#´žøÆwWC{lžÕIüÉß\¸“ݧë~¹kfø3±Ù#¤¼ÖéÈ[¸þųsÀÝõfµ j20€ÄÒÙ°Qhhp‘™6Z|‚94ßõ¡‰Öú°¬á|îÉlmï”J..ððò×ìÙ¾OsÀ[Öpþ Vr~Û èˆCHˆÌ± ú„BtñH]P‚Õ>7Iã.†˜±k1ÚCÐtåýb-¡%#’~öÀÒRÁç’óåÒÞyrÅù%¤•Rv~wôö*bŠô}·O=ý%ç郠k·âü.~(õ>u!= +v¯¥ËÏõï¢ _^â÷õûµ˜•ƒV‰z¹|ðô7—ëY ¢oûlƒ®ç§múŠwhC ‡ïvòÒl]²QãÂjh:QÜŒ)q±ÎA8rf®P9:ñÐR%Žpb©ƒšQ vßðÌ== tŸˆÏ}*æ_q1ÚBR×ÃÝÐb&ß›1BßñÅfÒÿ¹õ³Ÿðöß®õëÍ`Ž Ñåölm˜»±ÚËÝ›×ÀùÞ—»õ w–ÃOîÛ§×ìßï©ïŠîAbÕ8p§ˆã&³ÑÏzÇÞœªÑÉÍ¡åMÑQé#¤è$Î/ÞŠ4å™?”Z?Üjhw—\óÖ +صg}0ñøÇ›ÄŽOw@÷Kʬš@¹VÓ‡ù®Ï¶‚Ã`È©›ªtÎÀP~a)´ù–7©C´üà÷û„ÃÅöúƒá–Ä9/j›­TŸXî 8ø³«pâg7Šõ½ÏH‹©èÔ\1¤ÈV ˲åØúÓ²û]i©òú2¾õéV¹îîhÅ£†{†^´‰Äo÷ó”ù1£}Š˜Õ5•òõªw–Km/wÊ]_ï3t=?`èzr@è¼·,D%¹rœ”ß=Z†ÐÑÃyè 9½Ó)ç(»ºX<úéz¹ã[g¹çkWCÏ#OßÞZ¥ï¡ôÙZ^®äµÌ0d×NQꮬ»>Ý%·ßÝÍlsåd,·Šúg±X·ˆôô"KíÁÄä;žnu“Nü쎾ú¤ÐƒŠºgRÜe~ºäÔ<ôg„¬“3ô‘%v|B½]1’;”bí)ú™9msÖlݲCƒ=!.Ø ,wh ÏvBÇ—®«k½´¢†Œ°£B­»½hñĦeë×Bí½@<öÑF9ûØèÈKqöÔïÌocyW޽•bËþ=ƒôúÎÿâ)\þ™×žúûn!­f4=•PÛLœC!¾b4tÒÅ’ àÀN„.½iå“ytš1»Ãј}l:j0þ ü¸™Ûw^ò5ƒ#â&ô¶ Å ½a>0ÆŠô'KNÌSŽ¿·Ejþt+¸¬Ð%<´_Y>(•vÍ–¦®ýÝuÒùgœ:øØK†·1Ì‚˜6ì¾øžø\Tz¸2¿ºYè}â,þÒK¬¾º„OÈ 1.߬c|£²ì›£÷ å÷9Bóñ:cBÁÉYbjÏ}Pª5{,fŒ†.ßý““xìñ&fCލýä´Ž©¤]×ûd·¾óÁfÔ¼`f¡/F}¸ÂÁY°yCû—{¡õ&v¿Ø%¶ÞÛö|(}8¸~`Í_ìÐ÷~¹ :¡è‰ÿÅu.>5Gh±ÝÐù•‹Ðý­3{þnè>S+'Jþ‡­°îÑsRk®¬ºï;©ƒ½| Jǃ=|Ëg›Àl•ê..ƒÖTpzq¯Š/-Rz¿w“O|ë%ôým×ýõv©èü<ꟘCúv'_y¯Ü T/=óákÞ_Nû±µ£¹è’¨u½Y tÈ :ˆR|ãX™ý~Ò‘3†ÙV 6?°_GzÇ`«@¿ÐPqe¥±°¾_>F‰.­¤7OÛïP»îë>Z«¦ÕL$-dÄWè]εãLúƒÅgyÙ¹¯½ÔkOHS-·súkvò(^=Ìüa„… MÑ–‰x¿†Ìކ¤º‰Ð@5fŸ=XÄZbn°x ]|bᥑë?Ú ¶=ÞëÓúÐUi¾»“XÞ1EöÆ´£S eW–ƒñåÆF’ q°Ùë2$›´¸Åš‹¤³_z)ïÞ1Þþ4 +ZÜ.N®¼I‹»çî^ÃÀ=o¥ÿ±;×ýñÒâFMÙõ|«¡WCsõˆz8Çž;Èr+–ÿ{‘Õ<‹7Ц7ôÌE¬‡^ päâ|>¢l„Î?Ñ +uø%JÞÉYJΩYĸ,>µ¹4‹(¨¾¸×¶¥“"ÍÁåƒý«möÛŸ¹¨¥W—"ÿÕKfÞ¼Ÿ™€¸æX ,. uW¨î‘㪠qÉ®·5¸†j;»^mÏÜÔÒëË¡£Ž=$Ä1N1ýb¬Ô¸üQ¤ÁyìÆ:CÇcŸ®ûÐÜ…Î3xG\/ógG?]K\„ŒŽ©ÐæÛ_mãë>Z%]ž/TÝa5Õ……bÙÅE\ÿÓ†ëwƒüoÝJ0ܸ{H{ú¯»ùÚ[Ë…êWˆ©íäcÁœÃ>˜Û1}=ð v‡ØóÊÜ—=®š}{˜_ÕJ,õ5{Í›3DçÙ AQVˆ‹ÄÍŠ©V +úïÄ0I·ÁºSãrFÉ•,BcºÜÄÎbþ«ûá>åÄc-4øÄÁo]õ],;ëP¾­Î?ÁlY½n¡ÃÌ¡Çmˆ*°7„äØqBš²­%Ò´ÍAšÊGçÊÐç"±h48ÜàÌ;¿tc…ØÆÑEöÄ-̘ë“P1Þ72ËLåHÏÜ×ZÜJéÀ|îÄ«}Æ·? öýôÝLéò+6ãêì¥1qšš& DZÜeg~ ïÅ>ùä3/Ÿþ¯tR÷·{D£‰Åb6q†Ò›§€¥7;Kýv–þäï»QbËãG¹’‰UH¬bÛÄe›‚Øð¤KÛ;úϰ½×ì,µõ+g¹ó…3Ù1[ãZ1Â\Ïl ¬yÏ7׉fÄo3¼th>| é Vž\"5ÜX«t<Ü]]©çÕ>h< +íÏv°˜Gºó\Ýÿ¢;?õOÝùÞï÷®¼ð÷ÿðN¶:ðÄS¬<»ˆú†à< ÌäꨯXye©pìÝuè…kã-¡u,³¼qÝÐóÄ÷ç­s¯\0Õ s@¹isб‰x5àAÄY+Ìn’ªÆAû\xáNì¬Bvm_³³ÊÁÎbù]tÎH5÷ø4hÆÒXÜûƒ%†ÚiYìî¬×ðR€¹h`Ëç …äa­eÑÈl3öZá@|<Ǩ'W4Š µŸ šÞ¤{}ìö:Òâg‹Åi|øD¯Î'½vŠzäÄB¹áý´¸ËN,ÿJxä‰{YB:Ë™" ìä“7ñ‡Zîo&Y0Ÿ¡s×]u~4kqø½©6¦>p +1>ŒaÙ#ÀŽR£ÒíLì¬úéâÐ7ô¥D°³Œ/OðL‡Ó…}7ð‡Ԉ$Û?ØY“ÀÎ"½Ò×ì¬ÀôáÆŒÎJí­µÆ¼“óUÏH‡?4×–¸]i-Sˆ¡˜V6KCNãthéÒ™/d÷U É·#û®½½Ïgñp”éù9¦çgtO‡f5ì[Œb¶šT<Æp¤w¾OÇ]W¿¶‡T7õ<üSwž­;ê¹ö×ÿjtçoãìÅ+1 M5£mš’Ó;Sœdž„>4u˜_å€n–wÐÌ“÷5Óƒ£–jŽ\÷ÅFä¹rZ×Ä?°ýø€Tkàk¦Õ*f'–Äa=\0ŠX쉅cÔì¦é†ÄZ¯ kþÈÅÅBÏ3gp‰Ð_Ô±¼lpÎ=Ýôš{ö;K'©fzáOvÖ,ôˆ==Œ=Z_‚ÌŸ )à Ái6†d%0~˜”2>,nâSg5LQsš¦ÃŠQ)6ˆ÷Ä»`×V:~g?¤O_怼Ue¹>ó‹ÕÆë”êsË”ò³‹‰ÙVØ2Sè¸goÐ+…·”På °ß ¾™ÔþÐ 9)z€JH¶­že‡s#ÄÆ*è™…~ ±³z¦ ñGFqþQ–Ärb1“bäkvVçÃ]rÏ£ý襼fg!Þ*ñ5caÏrZÅ8ðÊÀÎ/µÙ³³òLì,#«÷}Ã-_Œ Uãå€k¬]hø«‡+ÁçòšfÏ,µq²1£f2ó“;dÿ”aÄÞbÏ÷I¬ž€çCoý_Ÿ:^-ìœ Ímbö!×h|o“¡ã½Ý>ŧ+é• û Þ3±`KÎÍúÙ+þä Y°cÁÆ£ç³Ø‰€Ð|s­r¤¾‰»k V"øèbÏË“5žr ¹»NÑxIAf¨ÑÏöЩ0±%æ3ÄÚ÷W!—”£ŠGz{ùiÜšZ` ¶0¤•O0´Íu9±MwŠÏ.Dï€X°ÅgæAÃg +P³r§r‘êï¬oì,œ•”|ÌÁÎÒ ’F;‹Ù8ü±³\Øßc`¿âËǪ y£}“í|CòG‚Ñ(D[‹QVJ$‹Ÿ`w1Ÿ,—öÎ 5êƒkÖz»Ôúé6ð]•¤† ÆìnG0*ä®/ö ÏÇ>r*hsŸðHûl¡ë¾b 1ŠYÞ‘Ó6MJbï\Žž{,ߺ»Ë˜Ù8Í–mç›Ü0Ù'Õõeƒ ƒ÷ôÆSeà¥íä–ˆEüöSó¹–ˆ%6¾™ØY™Í`gY¸a-ªQæRvÿthu›úȱ³ à'ƒ•gbgþ•õš•0Lð ±àDV[ª,oGÎ v|vÛtè{ƒ¿œ,0Cb1[Ÿ SÁV ç³ºCfÏ÷ µàø3p©3÷ϯ¸²„>ÀÔ`y‰Içx`®Ê®¥‘mG|²øa`~+éM“ù£¬Oþà¦ï|¶üCÎ7ØçËyöZꄈøá¼Ÿ¿ÅE£åYM˜1 ?ãáÅitƃærjå8ôP¿á÷¢‡î4ÀòŸŒã“¥ÊK‹Á«›Ûm¯^ãæ¢× ßC™?®›¬– -Ë—òJ·eø“æsY-#'×óç­¸¾çNrÿ‹Ä΂Fzx²îOvVÒì¬x#±³Î,Wjo¬UãŠGëô~fxíàmc¯ÔV?I­:µÔ§ k®O\ñ­©O;:‰ôØ[>ÞL¼‡À¥!-{ð +ˆMÞ0IN­a¹×ɹˆƒbË'[åÎû{„öO¶óÍﮞza8ŸCµL§#Þ—Ts5´äqîQ-½¼\Rµÿ±‡ÜxsObáXÑ?ÜÒšfËêµiRÓ§[‘ƒI¬–5ñ%Mì,ØY·Ë}ß¹)'^xã 2êbaDçŒàƒ2‡iƒ“¬¸¼á¯ÙYè/9@|¥’®yjåÙejnÍTŠï¹-ŽRÍé%Jý;k ¥–‚]©DgŽÀY1¬qôM 9ŽâÑk«M|ŽwÖ7¦¨Õ?‹Ø¡€ÇUye¥áÈùÅjVÍdøbÏ?b þ8÷Ró bÇ—;Ñ_£=w°sj™ïmœ¤ÆÕŽ#†sx.±î¹íŽri÷ì_¨]Î}ÅᚊEÝŽbXšN 4×û˜#vRþ Mÿ”Êqn{E·ö ™èŸjmˆ(¶G}kH«™æ |²T}~‰Úó¥;é c¯âPÆpø|)¶Ø±3DYxéšyáÌ‹=鴂 ™í3(F²¸Fœ]ô‹{Ø{bïì¬|;K>úÖ:±ù½ˆÔoe1ßÕ,¿±V®eﻸk–\Ø=‹Xó…ƒóÔ†ëë¤ãïn$®-ö\âŠÆ³X}†_鉅RÇ]'¹ëÁ¾ëî6¾ý®ª+KÀ³ç¼'µìÚrCJÓd!(ÂJ®:³= õô#yõ6zŸïäZ?XO|'VcQ­Qvy©ÜòÉvù؇›‘'yjý4¼1ÁRòK²FÏGɵU K¶5$–“:?ßíÓ}Ï‹X2©µ ð¬òöbõºžÙ¶`Ѐa„¾1x4èkPFœÓt[Cfó4°»PóÉÙÓÁÜ fcÆ„úLy'戰Wô/£2må˜ìÈÈÃlI©8·ûÄxÌ)$Q¾L)º°@<þÉfôD”žÙ`~#~‹ÌÇ-„ëŠz”übÞñi`VÓœK݇눔RA TCrùxb0³{ƒäù³ßºqw7ãŒöÜÕòkËéÜdrö(ùì#ßµCƒ®^ö?÷QqྷÐ{o«‡œðšá‹ÔÌöéì^²÷À®}IÏ<œu“‚³†+EgçSÍÜ|g³’R?Ag 5XNM ëÜ^Gp·Df?°q½b®×û°ÜP§Ñi!(eòc¼/áø_Ö¡/ÁêÉa:Î`F,Oö·”’ž9à[áü1‰*®/ç}¶Ì0åhÎÕ²èE‰ÁáV`máz*Uo­+/-A/1Z É´á 1–à(c]):·€ø(´× &UëLpÖÐÛÆ,™\{{-ö¬ˆyˆ&ì¢øÚbµàÔÊY+Î-ÂùBø%çøT0°Ä£7ÖðýÏwsÍ­Ãþ.ö›iÖ1¼ÀŽbRù™ÅðóÈ¥”ä‚1”§dbÈow¤=!æßùæ;븣o¯Àõgõ¼N‰0¿‚˜*,®Ï+jÇ–Ä Âûfù#ŶîÅÊ3 E–Ÿ³ºe ò ­ÄüËC…àôaxÝ8{&¼Ø ¾uÛ½­bã»k°¿Ä²Þ9bçÓ]8멞ùJëÞ[K¾:½frVü^ò1ì^âì%xO8@q½+Ôýí;Á§ÒÞ´_ ê^ÄXü~!0Ê +g2Ð §Hô=l¥Óú˜˜ˆiÇ&©‚÷„½1!(ÔÒÝÕ…å´ŠF>Ìì{ÌIÕcM<ó·–+å§¡‡Š=HäŒJlž=1±XŒFŽ„×f(:±@i¸µý¥ˆÙ{}jñÅERrýxœ‰#2m•dp,Ùï‡ÿÊh‚8©€e•a‡þ¥\ÿÎ:0ˆÖØpiÇ'¡Î¦}äLvÁ /¯öü2ä#Ä­³½°o«QˆÏ½sørbñ´ºì"<‡ê=ÔªÌn‘Áw<ßη=ÜŸ§”³\\%ÄÚê ËøîgNêÐC81Ø«'ÖWB©=A¯g€JÏ,”ŠX^ ¾1þþ Üåî‡ÛôíŸmäﬦ=$;`;l™øÆ-SiýœN?:Ù”#·ÌÀ9®ý#ÊäâÁ¹œ²•Þpص¸UÈ9À„ÓjXœiœ(³üSÆy«Ò¡yjnãTÚ+k¼ºJìøt»ÔøîìÓ þÖžR¨wˆÅ²‚>G®å£ øý´_“Áì!»}*Ö˜TØëÈלYÈu|²™kþp=wüýµ˜EÃÓmÀÇ#’m”’¾yćÃ’Ü¡Ùr(‹¡¹vjò±‰`*`i³|Tªèc>ôìØ$«¹F`ï þ¼)%:ÅN<\l¯$VŒ•óz˜jŸF}>V3Q½Áž‡k¾´§›Vã­ã4È£Q› ÞÅuGž„ýV‰Ù¬™bC¶ Æ4»fJ^Ç œå‘#ÓmUÄó†·×!_O õ Îl©…½spvë +¯ûÅJÒñ ¨á¿‘G7=¾ÌΟT=ŽÅ±qçÁ{e>EJi˜¦3ñ„q^1³…˜Ý*rpnÑ£M-K¬&òÁo­"Î+z&,Å—j®™üاÌÇç +¬XôÙÙSÙµËcvÆêäE°AV­ÞY…ûˆœPhyg½\Å~{ŸÄ?üaôyÐ'O*C{¥,'ŸMé{âŽ9:!‰åÛ8K[Įۑ“óÁ¢#^öéÒÊÆ¡N»k›®üCõå%t¸ìô\œw7 BœÄú¢][ø+Cvû ŠK–œ½géHçl²ÓÒ9|õõ%|ŵEbRÃ8äsôÞpî¥õ³ÍXOÄØ +޶'\{â›íúKßzH'¾u—_ºñUgÁ‰Ö˜AþÇîÝ+}Öø,rÜâ¸ÐÉeÕJö öÝEŽKñ³+—¯^ë¸Bèî¸Ðô‹Ù÷=cC‚C"Ùuþ~áüìüg¤í² 7­[¾zÕÊuŽ6­Ü°|íê #ðõM«W/_³rÃúùz8}Ýôøºé'þøú¿üžÿÓ×ÿå÷i+Œ´ië=Òv“ãÂEŽ"ûß•ŽN#mcþ¸:{CÂ7ÿñï]ì¼¾Vì§W9ŠûFÚ®pLñÜí.¹9Šì +*Ž+é˜þã¸ì¿ÿ${k—¯ßèhp\Åþ»~5û®xèÿã3ؼ~ÖŸ6:®e/aÕFöŸ•ìŸxæJöJçÑËÄMÞì¸vÕúõÙ½v±Ýï"höìv׸¸ w]€™—lŽwù ¹'çgæáíoæîd¶ßMÖìuÖj\ÝVÈL˜e H}P†µ>(ÝZ`奯˜ïqòÔìØº_ã²WÒxðafÆs}˜ù^WQãìä­Ù¿×Ku4/Ã!smàa+o¿h ."×VZhë˜bå¦õѸ{Ô@Jçg©Ì¦õM²tóö¡¿íêm`¿C§Ù³Ã…}Öj¼¥`sLDàôú¾ô3ÞRˆ”l •CJÅx¨³[f`ÊS°¤àžc‡ihšz9\>“§˜Æ©dLjò›gb +“’üÁK“ÓPC O³…j,M_V]\‰‰ML—ɶ¤NÁ>+¡)6J4ÔKê&BiŠTKðó˜N:”4\:lmŒ,°7IJ¿_æµ!:ÃŽTS¬u˜6æfœâo¥"¨1V˜6ÄD±k m-'i8¿p )¶z &møxk>8–Ôe Î%…¥Û`’êª:½¯™N>h&bR?Œ½ÿ¨[5½j¢Zzr‘!»{&¦”½Õ3Á?Þ +ª ôÞ‹æ0{ˆýLŒâzÆCêF™íÓ•¼YRfË!¾È^Œ«b_¯+%׎‚³‡{"- è*Eg 5Œã“é„8©ÙŽ¡k‚©‚ìãS0å„“õt’*ìïð>a¼äkåD/C°9¶¡Ðìédæ¥õ3sóR5PcÒajA +'¥G÷ŠÆ¤ƒýz &KuJ„…ž½ÞŸ]SöÿPÉÜã|@ƒÉS(¾ +!…¶\H±­þ`’T½=¡lêé§ÑC- Šéê¡Ó`²Z<\5ÆÛ?ÆÂÕ]ÖìÚç©qÇä«_²µY9JŠ«#FŒÐ‹Qæ 7xã,\ØÏ¹ì†j¯¯TŒð: V¤óI° Ñ–BP’µšmgˆÈ¡Äöɬ…ÍÍTÒj'à$ºž½_öÌ•¤šqjFÛTCN—#T ‰ã ÜHJWÉ¥ã`?Rx¢ ’h­¦¶La×wªÅŠÌãÓÔÆ;›”Úëk ™•“ñ3³)2ÉÓ¤Z’×Nô&µ‚–™°yŸ”ºÉƘô‘†Ø$;CRÙ8¨ZÃá\{¨I~‡­ L…Þ'ÄBð´"ÅȰ,[16s&-ǦaXŽË³W‚2lH=(ûèTLc©I•ãäð [áÐak(vÑ”³}>8ÒR Œ±‚„’Äl#¡h ¦é ¥g–(•—N#2íĨ [Ø9&ü T„)šàKn˜@áù#`›jv×LRÄ:úÁF¹ùîVL8J™& !&o„ÎÀJŽcöŒÉÜžÙPY Ò[dº-M¡¤8rÚgJñÅ£¥ÐÄá4e‚‰XvßhR/(ÜJJïœ*EäÙyÉæ{wº2¹W£Øz3$Xjåh ½Æîeœ%Ç>´r¨¹»‡¬ñpMtc¤©É&²5ïoæÅ5PbÅ냒«9 “9BDѨóá÷xqfÞB°),³÷€if)¡~¬œk£3ÄZào@±ÓÉJXŽ#èþ„bŠÏ4u %JİäáJh^¶Ð©ÌúDY*¡¹vjRÍxCl¹ƒ‘n§†%Û`JÕ˜R9AòÇDŠ5&`¥ôjš"ƒš¦èÙý±%j»¤Ü“T>N+uÀT"©ì%4Œ§û”Þ8I®|{¦ 1¥)U%™]W¨S0ß‹ICÑ©…†êk« GN-RIå¡o¾!ÓòÙ#È2ÿišèe>™ùLLÑÀ®hb•Ý+1,e8&Òa3†Äü1˜j¥ÉdLäõÍÆÔM®Æ!{c~ÙP>V+£Äf„ŸÃï"Å,Üó´Jš*¥ ð#ýó 'æa­©…}s¡~ešüœC“cÝ3Õ¬ÖiPá1æÌ¡¿Ń˜¬rvË4L¡Ñ$tQÏlÓ~˜Él˜,§ÖŽ'e`({‡gÚQ†Tˆ[§cŠMΨ¨ÄçŽÂú†â+ü*TÁðZy#»—°GLò0Ÿû„r…a…)8(FÀ®\÷zj\h5PwÒ‹Ì÷ó÷F^fÏg>‰÷µÒ‚ÌáH‘ 8iì¾YïjÁFXb*ÚÍS¯ñÌ…ÀTk!$ËŠ·øÛPž‡ñ¾IV˜ÆÚÂôMJÄû‹*¡$TŒ…w †¡ÄU:@ñÏÅyŸ†SÃÍLÔçØr¾1–Pî …T{I!‚ùBø5,Åê Jlþ(øF¨Š¡é6˜VT‹;ç`¢þ¶%‡1ûd÷“&¢²š¦B±“¶RpÚpRK¬¡é?cáÀ|š¢f÷MM;6Ù”tÌT‹zç²ü`:Ô†Ô’Þyjù…¥ðMjÉé…ðE†Ä¨d‰AÑV4ÑÅÖr 9äð0L­ª©eã•ÃecääÚñP!…2¨ ¦7b"m>¦ yÌ–01‹‰C¶~HŽØØk=¤ÔO€ÚÞÖ&V•ò‹Ki·þÎLja² PÈgHE'«m:~7”Å1*Æ`*0{„’Åì“l°Å’¾¹Pm6 Í3¤wLÇ$>û[±–0ý$GÚCYž¦á¡Ê{¸ÐžbzrãD¬!’]û¨T[Lñ‘Oe¾Šœ_4»‡H1¾Ž^7î{&Èq= Œ®f /ˆ!,.„fÚByVð‰³”¦XCq jy<ó‹œbŽüSPÌ€BÔh¡Œ€ÊuŒÌ~£‹FB@Fã$1±t ¦¢9– pIVBdñ¨RIG.,PŠ..$E8ÿ8+‰ùRšekÒyÔa¿ñÇ'`²] …41МT˜Ÿ}c¬xC I±›½ÄeLxÓTxåjD–MÒû®Ÿ@9 |d‹å™,'ÌnšFö Õö}Ü{øAúÙÄÆ È… 6B>*åødšdñ¹î!©«d°<.¹v©5ÅŒVJÇ’2³ ø(Š¿±Ìf01‹5”qt2MgC™*¹ØÁ×9KÍëpÄd/M8²õŠu JLôaÝ@™E!¥‡Öx¤ åjf‡P£©Æœ&š`„mü9½Zzn!•¡N%–]\Ål¨‚`BŸá3iÚSŠ9ÝÓ1J“•ÌÖ *Uq¨±˜ÔΘ/gׂÙ×Xø~¨Ãбù#‰–QtbÔY0)‰Ü~OŽÎ‰ÉC²Xf³ ¤¦ˆ¯ÅåäB3† þÌ÷AÍÓö¹l1LSøP‹Ê u<žù?!ìð0\|À—°k:ÆÉ⋯ +òÂ’lLÓ¡ì5TÞXAk‹Õð´ÞØ÷à ÛÈåo/š>Û$ÖÜ\AªÃWÓdcT‰½”Ú2I:òÖb±åÉ6©ö“µRD¥½§~:ÌBI©› T]X&×^Y©qºv}³0™…9RA™2‚å—ñì¾Æ³øÅÖ£šv|Š1¯.|üŽè{ÈêH”/Câö…ù8ئ +Åפ#c¡ˆHS™ì>"¢éTv¿a#PŸ IkLÔâš°õAŠ*,’#³í0™J* ðQ¸_±¥£q-ø(Þ`j$¨†ªCs¤èR{øT(äáoÐ4z6®mýD ~“Õ°[¨p !Ù6:P'‚­à++d¶þÉ>‹zçx‹AfZË=Uö™Õ*ø··a®eõ—^5AH-áõ„jÉÕÅPí¥É×’ A4€ZM9'²ü˜þ]=V.>=O¬|k ԬŌ¦I ~P#&׳ڦàƒÏè˜ JÏAб: „0¨¹‹1Å#AóУ̑“ÒÏj2#óßA©Ã@…G‰«KvÀbâ£Êê ò—P÷‹Ì²“S«Æ‘ÊCÇ 'ª¿CRl(&²û˵=Ú •}¾æúR(ÀÃ>Ét9‡ ¯† +r+VÌ€¯aqkìy"Ý*XÌBμÊ.*»P—£8Ëâ‹Ìâ ü0åÌ–‰^’Q7¦¼YÞBqˆå¤’ÎꆰT[ÊEXì”þø:)®@E‰­_Ø$üMÿñ¬¬)øg¹°k)Y±ïÑk+ê› BÏùÊs ¿¡N†õŽ¿ƒµõ(èˆÌÖ(ÎAI; Þ +ëŒTØß„b¿>€ÕÌ>á¨EïxW0uO>´e2jYÎ'†j=šNgë×OI.q ‚‹±R«9XLÂØ:L¶æY<q ö)® ª®3¦Ú½ô¬Vá}ÍÐKB^ˆ×&ø n7×JÁ¬ 5‡ò@Ô'@~†ûÌ|b2Ë…m”Ò‹‹±¾›¡+Å–"åRæû‘ +~a–\P´¥> Æ’âÁáÒQ\H²5Ôp¡p¨eu¹Iñ/Þ½ !2ߎ÷·ôB½®DZx +æ¨ÇPOáºé}¢- îHj²¬N—BÒ‡CmhAPˆÉa5n>»GÈÓŠNÎ-kº•ÖüXfõ$®óáVqðWýÉÿ±G×þÍ&¨d’’?l0¥a¼>0ÖÒ[RÍ@wß[+Õ¼¿ZНtàb­ÐÃbÖ€“9~“êáÌ:ôPX-}|‰,'ˆN¡F%Ù"ÿTSKÆ¢žMÊçXST+°Z›åHÖP:€"µ!‘å–P J®™…)KHÉ2©~<ùZ³@/¡ÜvÏ|¶I©op®Tsu…L*Í£H5þ¨îÎZ±ïûýÒÉWÞ|ÿKR %Õ—è¢QȯIaöpÞHÐèÚ3Ûƒ]#ï‚ïD¼µµ…Î~¾}¡˜{þPê0ÊCÄ×9€ü@yAFûtR¡f9TTÈGãçX^ ê)µÆŽ"sl±Ö`›äcÙZPQïã3‹ .{Ý4¸ïzßd+ÔÏ ÎšÖO‚P›ÖKAæRX¶-ü¶Ä| +úP¤œ‘ù +P˜H>6­¥aPíe çX]íÍj/Æ[ö7#ÅIöuø>ñ³ÝÀ4k¨J¢^‡ +<§ÄZ@µê~|PŠ5Ö¡Þ÷°%­1æcÑ·„ïdõž%Å?Šó#AÓC92ê«g G#_•І;ëH ê¨Y uáÔ+wñü¯:îìàë¿X âÖ1ê8O‘§ µ@N¨~k©W< +±ˆ`ê)È[a9]Ž R©,Þ¢÷dÌn‰\þ*¬^¦Æ°|J,Èû¡>Íü!b9ùP¨¾@—êõ"¨Øe ôÔBª³Z§«ym3‘Ç¢g¨¦VM0¤Ô™3j'S¾\Ò3‡ï¸·¨H‰ecÐÏ$eˆ¢æYJéÀ¡ñ£u|ï«Ý|ß·»ˆüØüÉF©æÎj¨ÊaE#kA¿áBÒ‡X„|U8þÉ©öƒµRzÓ$ä‡BHÚp(’ MŸo⻞m'µUз2;¦Ší¦áȵÅâ±»›¤¶';åŽÇ»å¶{NP21©²¸’Ó2 u)©ú@Íq t”ü^GÊÙ‡Rve‰Tuc¹xôãõ®z z° w7½©^gv…5E„V÷“º|hâpä +jNV?AÖ&³{ôyÐO¢KìeV·@±};ä½ÜAæ?ýS­QÓAí êDR|=åÖrtÅhøeä;è CÑ6 …w9¦r4¨è:Ñß\ +É´‘cŒV2‡Ã6¡üˆ<Ôp¸zuPqFo—úéu“ÔÒs&¥Ô,‡KÈ\TMâòF‘ÂoAû ®õã Üéß]ùsõÐü²SH¯ûóRÃÌÑ—…Z7ò8\+RwÇ:g~‚òs(Hå4N£ž>zHGN-¢~õŽNZ(ú2Pa–Ñë‹G/…å¬^‡Bzã†xS‘?¦›dR"bù+ó“TC•@ðìxï“úêõ¨,;êùýsH¹ŒÔŠºgCÉÊêP7SkÆIɬ~I<2ýU1±p4‰|SvqHÇT?A‰ºúÚrÐøäÔ®)Èq¿'¤ò«K„ÎowŠGlóúf .Êi­“ņ·Vr]_íÙK*ê%&T9ð¡,æÅ³<§°Çë@i¹ï$´=ÞÊw<Þ&5~¸”X"a…#•¬šIríùå a@qˆ”Õ ê…}Ôp•7—ãzë}¾Vßõ| ©…eÚ +£¬P¯‹¨×'YÞ„þkå{Ê¥’ëÆÓ:`÷¹|r`äÂbLÙ(%µÙT¯'”ަ#ó¹ˆP™–‹Ï/jn.—K¯,–Mƒ’†áûDœ`¯Í˜ÚlR×e×FM8>*·úƒ ×DZ@9Hfþ=2=«á±^”àTì Jzÿ¨×ÓíЯ¡^!óeRÑàê¢v Ž•nئŒ>Þ´¾ñÆJáô7”ËOüàOû †ûš!e üXâØ5|¸ÚqË~Š5QŸcoJevHêVP\†ÿÌëšuVRéD¯×+·”7ÿPå³WRX]Çòø[R¸2Õë#QcᵑºcNËt¹dh«QÝœÉîŸIj,õPóÁ×”ŸYŒš^®¸²>‘oþxƒXóî +±¹?l:4ÏêñPÊ0Rt,è™…üD +Næ“×1›?þ—õ Έ¥Ñ•öˆiè]+‘¬öÎ=9KÎ>éˆ8Mµ$‹éP8 M¨fu%‹ÙPUÓ«1 G0¥¶<Ø¥´?Ù Šr ø zNëšÅ5±žÅ®¦÷Ö‹Gß'@ÊoS›'âžJ¥¾ÿ÷]Ú¾o¶¾®×‘óÙ5E½NÔ‰0¶æ#RmIa“ù[¹öÚJ%¿ÃQÍíœÉêà9P]D +¥vê×€XÔpgXùöRA|¦ºÕJP1%Hh²Õë뤨êQÔßW¢þ¬×¥šKËA?Bÿ y:Ö*r S½Žõ’eåzÚ_c÷vâ“Ó;[Í>>êu?V¯ƒÁî-õ‹çR½Œ¯ÅeØËe'’òúLD‹š'wÝߣ }é%Ÿ{Ήß»èÛ?ÚD´ˆvÍX.Äò%Ú‚Wc-Lª¨¬ög> k¯êÿ¨×‘S¡~D õ$(Y¡Ÿ~³¹ò­eJÙéEjî±i +ÕëUT¯C ¯‘êuôQO Îƒe~„DáØµ ›¡·Ž>%Õj,/¥Zj{è5ä¶LACb¾o¿·Ô9¾óÅ–“˜h,'Ã:¥žmx¶g $Z„ò/´ÐÒ¥ìþÞ«•=9àó-¢h¤ÏüpZÍDÐ"”èT;¬"‘d÷Ì@NÌû¯™hJëc'¹ãùn¼?¨‡#†ŠAìïÇ—;@‘ êXð« ð-¬Æ®¼L=WR—;rr>×þp+7ø‹3¾ F«È‰pÍ +NÏ7æµ;¢óía›ÈmH½ðØGÄŽ{;Ä–O¶B%Þ'.ÞZ#)²Ã‘T>;¿tV¿òƵ޽»–ì³ôÌìÑHGÎ- ¶Ê[ˤœ!G>ªp„7öG¹søW5·Ç÷1 } !4}8Ôf9¿+ì-˜µh¿»ò­UôÚЈcy8ó]*óíð‹¤ÊÆìhˆèA Ù_P©%ZDI‡ãŸ´ˆ2Ð"*MÊýˆÿð/i­Tÿ!±Z¹¹·‡‘r ĬGđ՞PN…­‘ŸL¨Kût¨íCSi=Q=»yšTtz®T~y±É±¿•=äŒi• z†ýª¡Ym„œ€>“2á…%X³äKá;ÿ‘#°ºÜÈrRígßC}N?O{‰­Ó¡¦*UÝZAýˆˆ,;äóD\ˆ)m gkàP¤ÕmD‹h˜.}u€âGh——ª!›Â~NTÁÓl§€Äô-b2hxoÆ×´ˆ ôá&ÅËwÖ +N/PXî"¥ GÊj"ô<óg©¥âäbPÊ„¶Ï·ˆuWW€f‚Ÿ…2²Tvm1×ôpˆR&%ìŽéèWÑòn–¯cÏ >ÊPÈÖ7ó™èÍ’JÉ~É´ç:ˆÜ÷Ô…ïþÖIdµ-)˲|Šžð) eà¬úD¨ùŨ##©ÿ€³zX˜då© 2sÝ# çiZ6’6 Äœбµ+°5ª#úI8³€< +tG P¡ÇÀ¾n Õ_Ô@´Çþ%˩Ėû[•òëˉLÀ®™Ðúù®ï…×úÅ&]ÏómÈÓлôbù¶Ç>¢EèY­®ãÿ¤E8Â7`ïÊÃÓ ñ> }âoõ }É êÍ`ï¶Iu5”2% CKA}Ïü ú(PÑCeZÑ¡PT¥½òS¯ËPÜ7Ÿ”¬“jÆ›ˆ†S>ÀÖèAè*QÌ~™]¢Šì©†ØZu‰()Ô·5­à§@:a±}g"¢'U8pÑ–8B4‰ÃyÿM‹èz¸[éyä"¤5M|M‹Ðã,ÈfЇL«ü´Ü5û_iù&Z‹qD{`vcLf5Ppêp10Öšú 93Q;‘€­#ôß)ÿ-83—ì.ªÔ~U®ë‡B×wNBÝ»«¨ß_4ŠïÿÞëTŠÏ‰ý'¬_•üPýD"×°Ø*†% ÇÔÔ ´‚åp¾çÑNRG‡Ú)j!þ¹§—§Æã€—†Õýf¨s°?€zµSn¿²èþ}‚Æy³›f×¶ýÐUÑkÕ…€òÕ4D_ôͰ‡…߃˜TgQ¿²˜‰~!ˆvDç@/u9ˆž 5°˜‰œq5/”,q]Hñ³ïånýÙ_\ØšZZ6hž.P +÷1ÇN4 3¢þ‡:5Ñ"\Í7^#Jn•ƒùkêOJŽûMûþ‘Vô9(Ú +×J gñ„Û¨t;>8üåõo¯SšßÝJ~9'z wÕßX-»³y&qOá„co¯6)‘VO¢}ÔüVG죒rcýÕUÒÀW®Pè‡ßÆŠ1™ùò’®¹JÏýý†§:µÿO¡ï»½\ëƒD‹`ëD*==ŸkyŸhBó盈Áêgœ·póðÑx(Qæ & ˆ>³ [gÂB´ˆ\-BýWZDôkZD¼µàbÁ+¡æ”ïbO˜Åy¡ùîéøÇ›$–wRÏ ìôBøª9SNT Ï-»¾q–útå»sB_ZÉ;5GÎh›* ~·$6ªy¡Šz çÃØQ4c FÓ¹ˆ”ºñ¨ËÑ?B­ŽútOäè¡©AIà Q%£@³ÂÞ'”g…†ÏÖI™ýÓ¸ˆ";(¼óq5£aŸZ5Ä|ßOÓî}—}ÞO)”öC‘w +v@‰Êæèaéx‰b¬©ž¨º¶g¾`£Â¡xk‰ÕÒxïj×Ý}býëTÛ¨÷žR9Žöÿp–#Š®=Ž\çÃmRï7.D‹¨¹²6ÃýI‹Hþƒ7Ü@´ˆ³Ë¡¶¯Æ•ŒAoMÇÖ³',×4d4M5à,òÆà¤aèµi9ƒF<n©&ÖŒ'•zœ¹(è› _{%?eÔã·7Éõïo0æt9â~¢ÿª|ŠZÔ1jÇú¦ë+ÅÓ/<åþçn¸¿ N‘¯m¹»Ã0tO+wÞw–ŽÝ^ß =q…:3z—tJ§e'¡@ý=»×´‘h_n—û~pU_yòC¿îãúŸí”Šçb‡?”9L(Ùš Í·yM‹ZŸmUY]?eÙ¡êìrC^í4Šï,–É5g–Êu7תeç–PŒ|€Å:ÛÃü=î•ÐöñV¹ýþn©ëîn¡ë‹¸¿è= õ¬ÆÞòuáÙù\ÛW[øºWŠÅWæ U7—’*¿´4J±ìÔ|ät”›cù>H +ùs¥¦»[¥¶;Qó©Ç& nÀ~=êZÈåqnÙ„|ìÖF¥óñ~qèk7ÃÅG~†3/d¡òÆ!¥m¢_ëÀÅ–ÛcBçmé-úšy3;E "²<€­—Ùðk2[ßèEa¿ÈÓ•×à爸ÂòBCéååÆÂþy”Ï.ƒó L(í_ì–kÞ_Cç°gé{½ n‚¤ŠûÃ5}°Nlx{hjÊqêA €3GÆ‚¦Y†âžy†Š++p¦Ã”ÓtN§Þ;ú@ %c¨Çžql +êqêa@=7®píñ$—8 ŽÞŠ¡åá¥éÓm¦šÅïTœï8¿ØPÔ;={"OÒ>t¹z ;JU'‰§»Ë·¯ß ÝÑmß èÀt–­ûsgCßc¹ÿ‘+×ñþF¢;‚¦Ýøñz¨æCÅšö#@žb9úÿ&«ÙRk'`_”kbµ)ËÃÕÓOy®ÿk'Ð"@( zfšö'z§ó‡«Gƒ¢.–¾³˜h)•c©ŽªXˆž—šß:“h&Z„rì­õ Bš>Ëý ñ¬Èír$2«SIm˜}_ê|à$u?ÞCõI×s'와èâ_ÿ¿ï¦ýI¼ëù~Îýxh“ª83hŸ©à\þ>TÓ›ïíTºŸíj?\…ëÛ¡=!Pw°—н4ÄCV#)gó~×ß2¼õ0@{ò''¬¡úör1¹c"TñQk¢^¢}àÕ£Ég·O‡ÊºÐýr7ìݕ僮Έ<ªUX|gq^̰3"Ž€.? þÝ[A犕üúi¤”Œ½#œ-Ùe¨,—]]bÈé›…=!ä¿DhÃ%öWؽÄY1øä ë©1ù£¨×(ÓF‰o`uô©¹JÍõ5ðDa­<41V¿V\!gØ®”RF}uôMŒm_í¹^Îl›Šš½(œ÷ñIª™è“3JM+Ÿ@êøÐqo¹ÁçÎÆkŸú~ð—ñâK=ö©Ü]õÄ&ª×ÐÛݱòÒbk…ž¯÷€À)t>Ý!5|°^9ra‘R88‡h»ØóO­ŸˆU0’ö`ÿ…Á³ú•ö… +Úg‚lŽzBßòùçøˆ|[.¼ØŽÙÈ4±ðü<¢‰:ŸßÆj•ã3ä×´Ä œÇ«9·L8~kb¶¡phr¿×ýUªiKæ‹mŸíPÛìU:8 ½_þI¼^ïN>÷þ߉wOœ@¼Ã9LZcè1[$åøÊS‹ˆ +Åâ?΂ND¥ÂÓspFdA)½q"ÙåÍårFçTØüj3±ïÅ>©üÔ¢;œž ’4Ÿ|tŸQ?½œ…RŽ×Æ[aÏLf±y”ÒûÌMf¹"zOœlŽó°ÈûˆæÈâHg £Ÿ)…±ÜýxØd¼é¬õÀA­¾¶ŒúÌ_€–*gÖ›Î| NAÎÎê :£‹³ŒW–F@烰߀}”ƒ‰VاÂþö†Ð£ÀY5¿Ó‘Εƒì€=8PÄJY•T5VˆˆFgdX*jJÔÝiÇ'âƒÎô×±ü¹.è8YmS±ï‰=?18•â>4œÎ¶fvNÃ-j>Täc„˜â‘ z£N}” e¹tΠ£\ýéZärFÏ4ŠÍQy#i?ÞnAyXdšÊâ!)ÅÓy‰|ê÷ÒßAÝŠ^jÉÙToT^YBT“\œg÷ÿÎZ±8‹ú”fjÕÕUJù•e¸·Ø³Æ^=Q%ÐÇÄþ%ú…8ã‹>þÀlê aÏ”ù^ÚËG Ïcy†”T<†ü(èIØk†Ö\[I$ôÓ±ÏUÐ=‡Èeð×µ××*u—W¡Ž3õ[f‚/}ëÊõ<ߺ£œPå FeÚá5³PFÍÐÞRÝ8¢<3ÿ¦–žXD±ŸêÖiôý°|;)´>èŒzHŽ-΢ ¦÷ 5©÷²DoIçež1™i˧Xƒ0‚‰”Ó5]¬}µpü‹ X “±ºÞ\Ç|,òbœÍ%:öËÒ«'€ú„s)RÍíU¦kpt2b*½fœAª¸±\h¼·TYªç™o…]㜨O~çªK‘ÿƒÂjbåÈÕ%ØS4õúç‚–¥–]]&5|¸žrVäa)õéƒÎÉ]^ByúÂ,^’_Èé˜{‘jo¯¥‹ú—ÌîÙu]r(ˆ; •€>&4\_M{(¸Þ½ó¨'ˆ=!ì;¢g\Ø5“ò'Ïø®/¶ M·ÖѾUT‘=(hØçWª/®@?M¬»½´U¢Õ7¸žÈ~ WVÂ/ó-ÌOS¬c1ðÈ ‹Ù§QN HBeçQìøn¿¾ïÙ±x`~ýC}Ç‹­Ø“j>\…ú…k}¸Ixé! ü¸Ÿoº•ì¾úhpëùö{[XÌZ?Œ}TV¯EÏ[)<1þ1G-½´Dª»¶‚z  PŸzêÅ·ÝÛ,˜MôªB#­(ÞîÒóý.¾ûÇbÝçëpáq†U¬ûhttœ˜Ö>I*:5Gèþz—Ò÷Üätê7b® 5ö<‘£_×ïˆ}@ñP¾-ͪ䜞­fõÎÄ2¢Þ3ÉðÁUWXqs%åy§¥ü3³ÅŠ+‹¸cìï"gMižÀÅ×á3:& ¹'grw×p§þ¶_8ó‹‡îÔ?÷è¯ü§ÿî¿ùðïÿ~P¸ú«$œø›7ø7g~à·=Ò¹têçÁ†wŸÄ¨ï=‹ßúNû~Ü'5}²Å§¸cž1"Í} :»Ê®hl.«n®”ºží6žxÂû ÝSöÜãüºïj•æw¹8¾zœ1³®1êJ¾ýÑVôg”ê[kp.ƒïx´T ª9Yn/ ~{@úÉMìùeØùõ.ì›à$#òs=/v …v?ßÎ5Ý¥¾´Týö +øO~à›=ð-bÇ‹ @‚ ;SKÏ.¦^*½°~ Ÿ¥¢Óó„º+„cŸ­çú¾ÝÅ÷<ß% <߯ =÷”ž’ëüj^#ú7xí\ۃͰØ5ßýÍNœNüä*ž}¡EZ¼ø-§ëùy»¾õÕfnèß÷Š7ôQ>þö°ô—ï"Ô›/‚Å˯Dù,û`?k¸ðØG:ÿ\¯œΞ÷ŠS®<ó•./òµŸ¯âk?YÉ5=ݨúûáê÷’áæã0ÃÕGþÈe 'sÂÀO.úÁWN¨•@IÂYñØÇ›Ô¶ûÎòåW²tþG½Øü`³‰@:8_ì|¹KßøÑJ>æÈHÔÝBç‹>—ø\x(ôýs¯Pó—• ä*eï,':[Û“´§uäí¥ˆÇÔï L±F=(Õ}¼1”òcŸoTJ¯/ÃùcÏ/¥çGô ÄâKóYý4IÈœ.ä˜É^íÕòd•×¥ÿÚ£¿ùŸzþο¸¿üO?რÒöÔÝû/áÕ?Òå¿-_þ-S¸ÿSŒôá/á¸vÆ{wóÔû3å[? ×S„›¿ªê­¯Â7¾Œð¹øÈߨ÷Xkh}¸ÇÐñd¿ØõÜ™ùž-¸¯|Í¥bÇ«jÿ oßþ'¼Òñõ^¥üÆrÔŠ¾ym³ Õ“}9øäÌ“ë±w|›HN |bŸñQ<ý§xæWoéÊ×’tå¥,Ýüæ rãI°|ûë åÔ7ð½ýéaåÚ_±÷›½ú®/·r½?8±°9±æ½•°KؘÐÿý^¹ï•+ökå¡o`›Æyã™û²Ø÷x/ßý|'|ŸÔÃü_Çóسàz¾ÝÁ ü´Kwò¯Î‰_\„3?¸sç;ÀŸýÝ?ÿ»§øö¯FéæÏÌü(ñ·~ÿY{°¦šuï{hö +*öÞ{ï…"’dÕ:ŠŠbAzWé5”ЋJ±¢bï€"½wPz±?Ågï½¾™åóœ³ßsÎwÞ½¯ëM®eBBpÍÌ=w™¬ùý%Ô«þâû=–¢[°]8}¿Y*~ÐnI=èwzøhYp韛°ð+{ü™ Š>¾ù»9öü+MWvžWÖº™¿zçhþäÝqIA­”Ìk7!sú йQ1E[Q,`ã +Ìð%taŸ„ÊÒ¥ /°¼VfN¥uió-í•L­Î*#uJô]¨Yñgé³jÑ>3ºp@*¾ù^$ÉíÄ%yÍÕn(ÊéãPWû ©àGkÚuéÎ +BV¶U)Ú†òÑE8ϣʶ‰²ßв>™}Ú‚Ü/šÂä¡]üìoûø¹?ðÞ0¿9*ìÿãœx¨1Œ깄5|9·q&?úƒß|$#eÖýweGºn$Ї›ÂE}B¤ÝÍæ=U²Ã]/R$Mµ°ÅÄ믖tQßqYóyéË–S¢‚‰ôvƒ¹Åý*{Ë—EÎËNŠïÖK±œ/:ÂÔÎÝôµô~Ãaêæ†Ëëw¡õ?´fLçtp âI¯Ô -nÕژݨ—¢z“Èz¯C![¸Ü­GÜîà‹ ÛÌE/H^´Ø ~7Æ~O†¤ô›®“tQïò途x8HÑÏÞ[QÅ]GÈ¢O6Ä›¡CdEßI²|À|ûÙ/ùÝýÍLøò —|² «z$]•—$ï˃DµUnä³DA¿È1ÀÒ»öa—?Dó¼ÛMPÞ‹Å÷Û,¨»-™Ûi„]íÖ¦s:¹Ò‡5‡}KŸT¥owÄ­^SâZ· }»‹ßkµ ŸvYà7¾bM¨›]^ø^€=ìÅñƒR¢è« õ®Ïªê>M–÷ž k>œ!k»OáχÅäý^Å&üù€¿ûAˆ=ÒwÛi¢¸Íšlî8K÷´š •LjGZ…팿±Å[>;’ÍÝçÉ×6xþ'"ÆPׄ™¨.Cßi²¾æ¥(> õ*~tý:þµ¿kÓ…ÝÉ›j'ÛG/œ$ɺdÄõ‚›ßõ°[ߌ„/?“ØãaBû«¦0q`» õÛnQúˆ4§³¸SwDú¦ÔŬ²ÔDzüŸyQ…«øyÃ1É­6‘(÷½)›«\ÐCuã•=dsÂíb·+ó„I ;„÷áae߬ˆÏ^âOåa⑊0úÓ‡`ê—Þ úSK0õuð"9<è/®Œ8Ò™+;ÑžX–Su!ñp÷Íx|ø7oñ`[Ä¡÷äæ}å2qG˜ä}[ÑØíûÓ|=bK½±æ|ײ†5$/ZÌKª<¥:ŽÐ¯ú÷FpòI¯X\ÞêlÞQ.®lw£_·Û‹Ê:OKJk]$uæuÅDåíg%/DoÄE­§¨—ݶÄëKñ‹fh5ö’⊓â’Ú“Ðç™™^îÝ-¹·Œ/oØÌ¿ýþÆ/<$êj”öVEJë"E½­—èÁöKâ¾ÖP¢óƒ« âo‚Š?̱Š_l…5_ìˆÝè‘– ɧº(ÛÞ‰âOmáD͇SÄË>)y}€‹E¿ÝHD¾Ú€Ç5nǯ}4B¯‰žµØš½¬v”¾¨rÖØH +Z̤÷ê¬Ì +ê,ȇ]bêñ)ö´—¢^vØŠŠ[Nˆ_4?î´=zo…|7Á óI©—¶âš7Qc½·´­ö’Eoiì‘©ö×R÷ÜK²|™(®wÔŠ*œ‰WƒæTyçIª½ÞÛ¼ïm¬õÀ‹„£]7SÚ³’Î6§&96&ÅŸjM—íÌ7.Š$Gúý… ¿ã?øÝ­ÿˆOG©‰¼®.À3> ò† ©+C†È·¡Ø%ô~¶€—ñq;Y2rØüýÛH«®"™EcIˆM÷ÓëîW t]›«°ô»ç£)x¶˜oí:ÊÄÐ „­¢ÈóÆ"qa“•U÷«xû®[ig[³³í:¤š5—¡¸FÝjÇEy­¦¢BØO¯ËÍ›Š‚¥¯jNS×Úx’["äg¨÷­¾Çºr¡Í%¦”ÄW„$ ´é»g6R-ùô&ÒªÿÌ­IÆÚdn…wÜ +¯¸ìr¿x‡öŒ ´[›ÞÂ8»®›‰’¡ÚñP{¨uÏËx²eØ…Ÿ1Æs¿ë S{÷þ—W¾è›?i8#yÜm‡]ýã Q¾ž[·^øì)í¬ ¶í~–tøýãd³ºº£ÅWÜÓ|ɲï]œ¤§.”,ë¶–|2<ú'|Ú‡“ï:‘5g… ß“½MÞhL¬{Ç‹ê+ÝL Õã^®ßÂËÞŹû㧈1â·ý~ľãª<³Ú71¥Æ/)´áRŠ_CDê™öŒTÛÞ{‰’/5ÑâÏáô§®PÑ·ÎPë¾q§[3’tæÇ[ >ŠÔÿ8Ì»ý»6yý W\Ø ãü°ô` Yºå®dnŸsïvHèë0ÿ»Ö™]mJÒ» ©”šýx»íxÞG=ñËN{³šJ_Ie'ý¸ßB˜ó«–0¶lñf_V¾{2‚I+ýxšr¨÷Y²´»2Lô¡!Ðl¤2Ö±555 1,Í¿1,5½ÎGØ–)é(»H4u±z'ói‰Ê¸Ø|)!¦Å7áj—,·Á#æFg,loÜÅêàøÐòà¸ÐšKñçš,ûÄRýýþDÅÐ òÙ°…äiË1ÉËÉ›z'ñÓ;êN;A]o7}l Œ0.Ôמ‹öíùɧگ¤;´ç¥Ù·ßL—t×eŸò+þ&6ü°Ãjÿ~„û–ᙼ`t¹Y½ÛxW>î½ët´ì/‹·î{Ovô»‘e=ÇÉŠ÷'aþl'¾ÜÆ#ó?‹î5HéwÕ§Ì[^ÛuÝN²~ÿ8îH×½Ô³mYÙ®­2y`}Hœ{sDlxm`ìÕjoÙíF÷Ø¢Fç¨ÊV§ˆÒºóÑ%5®Ñ ΑµõΑ•ðçêZ—èŠ +·˜û•±W+}âÂ+ƒä-Y‰fC¯"Eà !V½eXÓ'>~ïòö7ù`@$zØmIç}ä‘_uÄy=y÷AWv;JÚÂ鞎@ªçƒ¿d¨1Jü©:Šî÷¥?¿–UD›ÔÊÈŽwÁ³ßØÓ˜¨¸á˜´­ü¢d¨.Ò|è­Ì·!"=´ùRæ™öœ+Ö=Ïâ%¥A6}Ï÷$ê½™àÒ›Yï§Î]VÚè]ÒâõªÕ9ê |,jr‰*jt‰zZç[ç]f­O|v•O|zµo|`mh¢ôSq·’¡yÑ«yŒ&}wX$¾?d)¹Ûk%~Ó~ʼ¢Ìϼ¥4Ìâ}Y¬èmëIaî°6vyP[œÛ&?첑¼iu—À˜üò‹•¤¡1 ´&$Ó«^–iÑY*£‹:b×3¤6ïæ}Ñ%ˆè¶Vß³­éÇ:o¦™”B_X”`>X+þÚiÝW¾->5¥Ñ[žØè—êБ“.*¤º›|ìº ’ýÚÂRü›CäIÞ²uî1è(¨u}Çée•›ìE™—üi™g|A…§L^éwä}~œècG(ý¾-PZ_w.î²W4:‹Ê[œÅÕõnhnÈÊ.@»‰®N𫎒{×EÉÓÊüC«CR‰ž~oÓ׌€ßÊ9 ýSxUP²¼40!»Ô?Þ½)ÚWZZTÍ¥´#ðÜðá/“·Œ ÷5c"lÿ~ýmûÖÛ™‘uaùaõáù7/Ûö&P-Õçéêª3~QWÑ8¡ãe­kìzØìjïØ; n±¥-ÎÑ™- ‡ú +ñ_ú|xýŒéà?ìùß'ìû'/ó¡Çu±òÐÚK‰É~qWKýãÜjãN6§ÇjÎH8Òž+“ö¿‰°ê{*“ô·FJ>´†IÚ;ƒé‡¿Xã7þnD?ûÅÆª­2îT[Næ‰öÜ”C +-žÇY÷?M ?¾¿„õÿêBôùоՅê¾o5øPfúž9jÚ>rˆøPïz¨û®Ü§96Ϭ©è÷cÄÉù¶òxÇ%M•ë‘6“Þ¶É´úw>Ðãq´'OÕê'Oª÷·í½)3ý•9cÒØ÷3b£!Fb4ÈІC i2ÂX™~eN™þ`ÎRßê¨ïuØ—/ž&ŒØ8®m¿ýa-.k?o^_t¤ãNªG}\F\õÅÔ«U¾òó­òLI_m(ÝÜêM5½w5ÕúHZ"Nµ\Nóª‹M=_+O¹Qâÿð­W¬ssôÙÏäҡ꫾’ÛÞÂDÇö´Ì¦àLÔc]9‰äo½ˆînº¯úÎêÛ¾û‰ö]¹IŽíryb³¯<°)$…þÔŒ÷~vû¿¹ò+N)Ã1º;²Ë8J>Ó("®A£Éïù~\ôKmøÅšÄ¬2_Œ{²¥¾²ÀÊÐXû¶Ë±¶Ý×cÉ¡aª¹ÿ<ùê“ Œã‡¨ÖnO»÷Éþõá©wÞxË^–»Ç¾ñ‰¿ýÖ~ÖGöä­—,û‚MŒ±ƒ¥1(¾ׄȟ¼ó”—¹GçBŸUQë9Òæþ¥Ð×ù7…$ +ÿèeÐÁðM¿3gõÜŒ¿Òâ™XÚv.êq‹«¬°Å5.¢-0]ô½*Lô½6ÅC‹‘72ÁЯŽFÏ Ž{Äd½ÃJÍÏ(îˆÁN-C°u÷~°}—ؼ]lܺ¬Û®6n炘‡‚ŽÛã©:9[¥ÛÄèâ_Þ{yVFÇf¿¼ãµ\LIp¼¼((>«Ä_Ušpæ'Zsäô@YoMÌá®9Ì‹’£*ƒR2ßʳË}ãóaÞP Gyž õïGÍ>Eg×xÇ¿„þíi«sôíNç¨Ûïc¨-—Lò?mã:˦h‰Àš¹ Ábå`˜æ50 áóÕcfƒ ³—--0»)êI}•vï%Àò©sÁ0 þÖ,0Qi˜¢8ÌT^æŽYª­‹çn«VÛx@ëRÍtýçÌ“:†öüqËXÓo?;˜w¿“å¾õO,yëó¶Ì#¦¸Ò5úÉ;Ø´jß„„Ê@ùÅÚÐTßÚÈ”´·‰·Ø1õ•%½»S~1Árà‰ ëþå18àãÖØÐv.²¹Ã)ΡdìÇ ¯a ÃÕÏÿe½¾ÇuUC—ËSL<ïÌ0 +{·Ð0ÿËFƒÂ¿o3|Àì6LlZ®Á·Kn‹g. g,…m˜&‚ñ` ÆÁc2üIL •¦ƒ¥j Á†¦`¿y´’ƹg4“Gæé¶1z¼/Ìqþ/Œ‹ÙÐóHÑ@oÝ:â'jë ÷½µûp3ñB]XRòÛÀ¸¬bÙµ7~2èã®–Ä?*ó”½.w¹Ræý±ìÙ/Ù믘’r˜Ì*ßø¸šÀ¤övÇ0¦×!êK—KÚ/ƒ§CugÄp~cŽ|ÃlÓö­¶O좰i·6X±|!X»n%б8©h7ÃÐïê4»óJË,SÀ$0Œ*@™½«Àv)Á»PüógeøÊØêqð·FÁŸ”Ø×&Àûü‰«ÀÆÍ"°Qù8u$$¾j‡1¸Ó)*¡Í+A¿—áì3;VÎZ íPž?:·Ñð¬ÙV ±t¦ +à?oèýÿzSd[ƒ~õÀD0Za*|œF)N‚?M3§®ë·Yƒƒu3øÃ0nŒ0žÐGÙˆÛCv\“çùÇ•{Å\}ë—ûÎ7ú˜˜¥Ñþ5ár‹þÇQUIÈ6¾ñŒ-xç%“—Äíʉ£é¥~k ölHªûp6"¦Ý+–ûc0þõÜ-ûŒÁ Óaưç? +ž!z>¶i´8Uø =Wøo­ù¯7¶uÿÜnxGc7þ½ép.®Ù hwN×¹Á¬æ 3‡©îþ@éûÚp«Žg±vùñçärçÆøÄW¯`. m¡üÍÅx4Ž…¯üã_–x±ã†|é£b︖2Ï„î*÷XñDzø÷l»Š7È|g\ ÊÝÝ[0ŽÐÿëj£âŸ=‚þUù³ÏfŒ^/æ€õºçÀ~ŸºÉ:½Œ>þ©ÊõlEZDÊËàøÛ¯ýž{Ç?.òM|\ê•tïW‹bŸ„7/}^ùÄE¾ ’ùÔD%FT%„W_Œ¿Zë®jÙJ¯Ø´JÿxþWæ¬î+f»Nà­iš¶ç7¬ßf*Nfmp,{ÿ§Í)²ý¯ÄÚ)zü¯møi‰£àû£Ù¹÷s*°ÏÑkcà}<ôªÁL0Ue)˜£~¬Üsl·ÈRÔmft±Ï=}ÃòK}bÃË‚ãu\Cõ°CKf<ÊËP] s¯¸ øx¾!.Á®+_†^Ï/÷Ž­†9{sƒsôÏ\×9*µÑGn5X(ƒù…Xó\Ôèy³fþÿö½2<þ¹­½†Ú«ôç{?Û=Ší™q°‡ÆÁûdvöþô¨?}ÒŸmËοS6ƒÕ»Ž‚ÝGn©èÞ`Ö ûg›Ž»Q§j³do/±vx¢%3®¡È7¥¼Ä;¡ Žas©wJÛßô¶r¯”†*„Wo½ }Æ?.ñ‰O) Œ7a$›HÀô‰jìÜúŸü¿{û«ÿÓ µiìŸc: +ÞÇ°íŸ ï0&ªn‹VÁ* '°Eœª°ï*3Ïä3ckÓróbÚó ø[/^¼ö•¿-öI©*öͨ,óJ{Vâ#¿_â—Q ó¨ŽC‡oMxŒï²„Z?™uï­HÃJÆhÍŠÍÿv;~zC%öœ•þiLþ|o|w<¼OU˜ ¦+Í“fÀqRƒ>iŒñ €šÊ20Yy)˜¤´L»Ìœ¡Vð»¿VÑ,f6PÅž0o‘Áx€bBœwuT‚øce¨Ùð‹ðcm—eÐÇÄ=¾2†äkPN~úÖ’2wY{۹ذætn7ùÎØèf}X¾ÇPf*Mú¿Œ øo¾ýüW¼@ót"ôJ¨Mêc–™“¶€ÙÓvƒYj;úô`†ê60mâF0mô :~=PEÏÇm3&Àß›¡ –n¶;Ìr•æ3+¹ÝŒmë­0ûº+Q(7»ó< .ƾÎ7~ÙíÅ—ß¿óÉx祿ÊçòP­wö@ƒgF{­{Je¥g*ª»´ª™í“•þßøÇ¿ü jÊSÐx©«,S•ÕáO“á(¢Èã§âèK€éÊ+Úèµ@mì:0mÂf0sîA°h%Ìýt½Àf*]a©¸'´oªÉÆŠî{í)w÷é…¤wE>òªoyõŸ”ê +Où»/ù›7Þò;ï¼ãŠ¡?}ùÎ3½_ Óîb4WoÐü·Ûò—ßD>bëÙGÿù| ëGÆþù| +Gu•Å`6§9j[ÁÜ[Á¬¹ûÁœe:`Þ˜µDf-åõ9:`ú"0w ÖE=5Þ2Äž{Æ<có–7—â•xË`nŸXæ/ƒyfª=nÃüæbååqo¼âÞ”zÆÁ6ÊŒ¿1–»ŽF(.Ù²ÆÖ)ÿr»ŸÃzeöùOøsŽc³‘É`ºâL0kÜJ0kê0gæ~°l¬Øy,Þj £`Îj˜³3—c`æ.˜®®fÏÖgßÛÀO{='ê|`ô8ƒŒUë Õ™a)OCâ*žù'5¿öK)+öM1^þºÔCö¡Â3q¸Æ=q¨ÁU>ÜèžÚPᙂrRÃŒdÉ6ÓkÌÐùOfs´Éf?cš{?ß›ß +fŒšæŒ_fMX ÔU×Cß¼ +̘ºο]`–ê^ ®¶LSÛ϶mîJs0w‰,Þ`V­Öw”vEôNÕ(dVj•1Û9™C‡šò‚Púì…¿¼¾Ø'±ŽS}¥{\W¥g2šsï=²ºê<3ºšÝÒßVzÂZ"(Z»‘Ù·lÁ¿m›?Û +ØñCñLUqPU‚œWjpÎMSZ_[&Á1œ µÑKÀô kaÛ6ƒ³¶CûÔ„6ɳ7›ƒyÛÀ"-°ŒVQÉ`ž6Y=QÜùëô•Ì&b ìœSIz¤ÿ›˜˜à7a±å0÷ªƒm{PîÿƸÊ2ø®JÄÞjyW»¼èW™úäX·ÌžY“gÿËãö×|CþEªiJê@}Ô"ئÙЧÁ×'ˆ=éç{Šsúؕб¿úÍ­`ÎŒý`Áb ,Ùr,ßï –êú€eÚÞ`Á0Oç<˜¯ã +VòcÁF³ËŠ»‚:'k1'è/¥ƒ#Nµ&ËP=‡jr”k>Bµk‰wü³w±•n1måîqÃ5^i åžIØ—6wm¯r5ä#ÿWls쟱Ù'ÊŒÕGÏs§®‹×uz'ÁJܬ°kÝï+¯ z;jspùØ-þoÇl8÷XyƒÇ •mUã¶…´OØÔC;ŸY¡×Èè53Bã.FdÜÆÐ‚æœS}b,ÊYP»raîìUÈ%xÀÀD ž†äz~rýoÍ>@;),Y±ï±KEvÌ_Ÿ®óá™`Æ ¾’Vhë±@°»6ˆ¢À–£×”v„7LÚ›ÇÌ;ðŽO-³M«–Ù…üߞЦ©Ûír”6ˆBÀViœÂ.ûk*û¼+'íêPÓLü:÷à#f3ÌOô~aÌù?F©/¥~F} ­Z1Ï8®m%/²t%~ç]ÑwFôìÛaüÖaöß4©ü˜Š|· ž|¶  $ÒGõvââŽSèz'N)cª!Uš¦ô¿Ç=´‚fšê˜E0×ß æ/äƒEkÌÁ’ÇÀr]°ŽÖêŸë÷Ù5[q°b­X¹R¬ÝNƒíX¨ÂÎ3Fï:_:N+ëï‹uëmÃ&ÆÔd€±À¾|÷´}#ZôùÝÁ·oÎÂÏ?\:J?ç×µ†é½k®3[M*·‚!ø5Œ…°eøÕÚèN}¨÷±xš`Õû2^ôñ}(Ñ8ìÌ/g$ÂÚG¨žN¿ºÈÔšÊó‘þ5á Úi#‹/Üþ/Ø¥"ªÚ`îçl§Úø¥`Μí`ÙS°YÏìÀüÁ.Üì9–ª¼+æÝÔo˜Õº?>9-úôÄûµÆÕô_O ¯wáÿÑæÌù9¢ûáê}føF߉ñWÆšüÔëoÒ˘ë‡Ï5²«g>ʸ„1T1Öœü?vò¼®Í<`L‰î!ï£]דuß–ŸiÍJ?úþv*‡gHë£*dôóMâüfœ|2 æe}Ú¦{6uüÒU{Ø:íºM‚ã6_}X¾NóÜ‹`‡ý+•Áï'íÎ`Ô¡ííÔÿÌàÆ¿2ÖÆ?ÃïŒX«Ù­YÅlÑéctL~g»4ÆÊò«¼bå5¾2ïúðXÑÈK_´†bmO÷%³Cï³U¿ŠÑå¶1ü^æ¤pø7ñ·úpêˇ‹& ŽÙQEÍ-;¡®@û(ÑuŒXV«ój“Èõò\ññè©´×ý%DîïFôýa3<ç³áws‘À5GÝÈ6lôÚÍ<0gâÒÿ¶ôŸ¶©ó,˜cM^ –n£ÁV³4Žá]jÈÿüÌÎKÞwÆž÷ ãÀùÄØµ@_ÐÈ`œ*3.gLxÍŒ•p˜q5íaŽq«ŠóœÑçɺÖñü æq3û¶ +j~·!û½g~sÔ8ÿí¼ Â…ü”ÆmxÞg}âá%H¬Ø„E=_‹¥¾ØNÜi0Ý'–T•ºY4‡Ò{,¨´‘ƒdLÍ2ìÍò~iÑö2TÒWÆ­dÈM{ðÿ±]ã _œ¬4L3¨NZëèm`Ñj#°ÁÄì8vSyÇÅê {oþ}¾v-³Î'®þKfŸ~Àsu}ûÌqÆÞ÷Ô_1ºd[µëÑד¥#Åäp«Ÿppà<§„árƒãÔ¹'+sOŸÅõ +˜d‰q)cH÷¶P­î¼ ó ø"À±tVæ]ûÛ~ìÚ¡Cø$¡¥« +Ó´“¾Ó#¿j³§^tYQ¥íÇÄå•N¦¹Ãû…×¾é`9ÝÚø•:ôã–xÑK£çŒÆÁÓ¹ã­ØÏÖÙÿ|S…1cí!ØE+hz¼˜|°–Ñ0úÈHM?3§Œ‡3è¯Å<wñ/ß|ño#~ÆÐ7œÏ›ºSClßµ pΨ˜Þе¾ó:Ù‘“éÜ&O·¸öáÖ0´áÕë‚^Ï3yÈhp_1Nf÷f^̓弇?ôñ§ïIìî ©ðöo˜S¢šÀì”’‘©`ÒcJ,' ñ÷½3æÉ-{Èkß8Ò×­NÒ’'AÆÈቋãM“TOÅMØkr +,šµ•ÑJìzºÂŸv©¦(Á¸6s X±CvJC4âûfk>gÖj73û e¤ÂÜð?ºü¨ßšƒ-†_Ä¢ïþ¨¡¢qÐ ûÍ{õ›˜,9.nlõ“T¶{Q÷‡ÅØù´FšFÀ`÷.@ +H€®ç'Wnå=þ‡/ùÝþ¹àIh´0±h3–;¤KÜë· =“fRéóÅÁYË)yå^³œ&Bú¦Âż²4@ú¼ñ8]ø^Lçwò±œžƒ˜¼b› äÆb£3qÐ÷mÓ”'²kÿ|Cc9cÊ*0µ6Xkäö:Ü}ð.³Æ Ÿ!`}y­Ñ3”q/Cós“[Ûmlã¡b`lôµÀ”o(Ì\Ñò¨ë+ŸŒåtBÅ>*ôÁ:Ž1ìX4ì^:ìEǪÙ@WkÀäE[E¯šŽOº)ABñ&üLÈdöúóüAcöšè£c +çQˆ%K§wëнºdô‹ÍDf¯¶øFEÖõž•¶Â®þv‹~µNpç«!^2bC48r{kÝFóÀ¥ +Õ]‡²•vÎUÞ{8WEóhþhÝs&ëøWf˜Fæ-2 ͜Nj½µ”›Õ¸•›×¿[þbæš9wLT£\Òf׿®×çÇC&êk½û߯+>ˆ%ŠB©…"á›4GX²I /Þ,H)ÞŠ'>Ü"Ly½ »: MÞë¢ðgïiöºÊKÉ‹HŸôyxÞ°žäIý³Ê«êסfe^’¢ú³‚k#:h_æ;ëxq¼¡_ÎtÝK/fí· +TZ»Ó'.jc`=ëЕ¹@Ó«dŠNsаŸ!ñ/}ñ¡_½ø¯Òô:£ÉóLšfzö¥cÀDaô“Õ¸Æ<蔉ãSÐDCènÛ8tMe÷ +±ì8ßÜ%æÎ13i®èÃ÷M¡ß ü’çbòÊmXøý•DpÁ +òâ¢ìvC«œ: •P¹›r‹˜Žö`¡7WàYÝZDrÃ^<êÉzáÕÚ’ü÷„¸¿>TÚVbzãïšBߌ9‚äÊ-ؓҬ­,È|ø­ŒúÞ,øÁ¸ðea<;nÐÍ`…ÌNƒsùS4¸–@O|XÁ$¹e-ÙÚwž®êv"£„g¦<`x| ÀîÑzº y¼ÒP ;—­ûWo-M`.¶R²vôTµ=ã©fyÒkŠÔ5|&žöfºÎ—~ÔlŽÝÏÇò?ëñs{÷ /dÍÃBò—7»¹èºZáõoºüÄ®-¤;ðë7æ'ÔlÂϧ©cÇÝÆ®±Ó™-{ˆëÃÆXþ°.?­f?úõ*nVßvÞ}F—w‡9ÈÉÿ±Ëøúß·_c¶ê3»õ†Žá/ŒXo„11lfŒß1Fœ—Œ‘iCq_0FÆOšœðűrP2µ<¡dh v­^´vì†\À­F‘§¼& †&ÒAú"|Ë3ÊÈ_î™s0Ø·xÐåE,$(k¹Ä#D<á;tN˜.Ìh܃¥wì#¯,$¼’fÞñ³„ÐJ^T³¬xˆ?ï /Ü^,pTÅî-?î°–ÔVû¢ë ¥ïÞ¹·‡‚Œö]DàõÅÄÙUa賕¼†|ñ@y‘Áf¯®ûã©:¹ãôœ +'ëžÉ`pÙÆÿÈœC×òñk+ŽwÎ }#3 £aÛ¤´wZ»ö¡ƒëXòZ‡ÎoááÙm“^ãx)@{Òù8 ¤'Ü'¢½hä•&³ebv®_æBÄÀ^n;€æzm~æÒ$Ì%B•/\öŸH2[8hï•ßÊ•<­:$ºß*‘6YRW‡ ‰ä®}´÷{ɬtͧè]ãþ­ßtùY]»±ÈÇ«…1× +¿›–ü™Ôœê=cÉéf,นÜb¶˜D4/5¶òU9p€ ôxÀ‘œSâ;ÆMÑ1};´‘¾èiµ[Þ¾ƒ?µh芺z ¹W èp€€‹‘ÔJÉâ”ë$sßÌ¥þy«ÐÞ ‰oô\´Ç‘Êë2¶(¨=,ºóA,Èû¬-ôH˜û_™/Ìþ¨!”•mœÔ'B'¯ü¡!)j?C ì^—ó)êh?3véúbÌ7e6î“1WT°„—Ñ´•WðCÛôÚצI•¹—‡·sò¾îâÂ\¶”ášÖüMbZú7ÒøÞï{¸Wfq½âÕx—¿íÂïá¦òÎ-<·D5áù”éB§¨©<ÚFAcû.°cÙJ°oãv` çnç9íeC,=‰Sb±c1Ï7àù½¢» "ú^#M´ôÍV‘;h€Å©È·rUšŸSæáG5wkÂù·€ùîmüBîBÂ3a&韽íõBûã©K—— >Õ›çîÇ[ò’O¶^M³,+ò]ä¡ÏÖ—ž¯Â® kºiAfç^áÏzXAŸ V°wš†yÉgòÝÓ¦ó‚n/àF¿[Áu¾ªf =§¨‹W0»*qqGEcžµ‚Ð1^•:j’æXé>í¦rê%÷k¬Ä·;¤XôëõB×´˜ìí&~Îpk1Òêâ‰)bÐVE÷»,ÅüÊ'ÔXLÑÂ7kî©F^Ì_ŠØØƒ!Sîý_tL ¾ê˜Þù~Ð4ÿË~AÈ­Å|ÿónÉÓ…'Ç£q1Búc<@{ó¡­ÏÀƒî/ÇΆLBvÞ^Œö• +Ÿeó0C®ENJ„wÖ\<©y7™Ü®¸ÙˆgÄò„ +Úpáõ!]´·‹H®Ùƒ]iÕÄrÚµÑ~qúÂ;m.y.R ?>?/›&Œƒq>wXCV¿ÓôÚ†ðÞ{Õ+%žõJð—æTÑûCØý!ÿÖ]üɈýW-Ì>`¼ e¡À3?©„öoṟ $OšŽ˜U¿õ‘–Wz/$¼Âè +2nØÛ¥z‚C`­úR°fâø8è“€ow~”àÈùQ¦V'•1›s£Ò³ÊZ:`?ôŸû·ïfõذ3!“¯ñ| [E+èNãÄŽTYÍ(;—±”Õ eÚÞi,b%Ðy-<ñí1QÐcŠ&ÍÅÃTÙM»‰+½zˆkHœ J»GªÙMÚ’Çïl­JŸøØÕÝ1^y†¸2¤‡ö Q¾·²†DؽUä…Ì…xôËDøíU0OXÅÏû¢Á/Û`ê§Ê÷¹:›úb‰àŒ|ª¶¬¶î{·kÍÝúÀ„o­€öYòŽÝº|X2nX:Q ¬2ìƒùʯ̼Ó‰"ïl@{ò$—¬£äµûÌóWÑæ'”ùBÒ£Ê,‹iaœ ˜"ò™CÅ=ØBd¼Ý/̨ÙséuhüIµ[Ÿ ¨Ûý¸àJÇ>¤£@œ +žŒtðè'ë±”¦=XZÓòò€>;×Ão¯$.^^„%Tn#ovšw;…hl‰WÝdq§ þ¨—€1q7æ—;OpÌo,?ª¨§K] .à"ν÷üTäÜ={6âFá¶ž£¹„ôÇñÓ1S¡-Ì'üà^¼í[!ò†È ‚Ø1ϱØ)ÿ „w&Œç·a>?ƒp‘ýô‘á…k°´ª=DF»q½Ûˆ¼ñ‹çöé°¼í[½ânŸíÓf´íÆ>_ÇÏÒ@û€P-‹®ù&ž I—Göñcß®ãg}݃Îw˜,<á>–¹³B˜3¬‰]ÑBÜL,ôör,èî2¡ìÝF~VßnÞõïNrU=Žزb#X7m1رtسq38xð 00怃ú0¶ÁüØÐ”†èër¾!ð¬N( cT{ù´G±ëÄ­1>ô=˜"«—ðz;•ÙvÏj×DÌnÌÁ{<’»”¼ÖƑܬ!Û%ƒr–P^òÙˆ‰E_oŠî7IèÂ1q³Ÿ‹å|ÔÁr¿è¡=axRý.Ô‡´OÔ,<äÊAÊ»­Ä­SúI—µàæozü°—+…a•ky™;L3w ¯/àY»«ð蓊†Bkžå9eÌ!rÿˆÛ¨]›v€ ó—ƒ=Û´€Þcè7iD"6¼øâµ•’´wº¢ÄªýHw qè¯/”S.X=L¯˜Yh¯?â¾ÐÁ——£}¤0Ì'‡ *\‰%4nGö…˜¿0¯˜Oœ +ŒŸ š„Û{ÃŽ¹AìHÒÿæaJË.vrÔÃuÂôŠ]ho%Œf’ûµÖta‹Dú¢æýºé0^Ðo*L,ßBÂØ/Œx¸ +íMDû׈×ï­øù_5iê‚31S„¾Ùs9ß4yCZ(ß¶©%Èý¢…X`ÂC§TКWl­ÈrZä•[ø;pϬ٦æÎÊZ{ÀÞµ»ÀÁ=úÐ.ù€#À@l¥(´µ¥ƒÏÜÁuÿÐ)e¤AÉ2^¬TpçØiTÈ㵈郸®R§˜âCÎc̹ŒQÖŠ’CÎc¥>Y‹É¤Ê=ˆõ„ظG¢:”»ËjÙOd4h¹†hŸ+zm%â âY­š¢ë âv_; É¿ñY 4HˆJZ‹ž·&¯÷r¹-äÅœ%¤WìL,êÎjáÍvïò£>±°àXw4l8ÅLÅœbU±Ì¡ýÂìÁxÜ»­Âà;ËpÏÔY‚ ÷ Ï%ªijrÀŽõ[î>c€t<‘Ö—@aìHmYæGÀU–ÑIs˜©¬]B¿IƬ#rÞëaY•ûh'ÿ)”ƒëxÚ?qûdùx=.ƒÿ_ÞGÁÕž”·|q>jpk)ÒÚÀ]£§‘®ñê(N’^‰³X¦ÎyXžƒ¹¸ß•¤gâ,–%é;?á:?á7žåí?\É>:FNŹF¬yô´1ª‡]G¡}Òˆ·Gß_E‡>];øM0Ŭ83€ì;î;žòL›ƒæ‹ ÿ£¶àævµO ËÖf´ï£.ÞZŽØîˆS@dwi#Æbá‰?ÖX^·•ÓiBtÉGâa%¸:¤ID<\ƒ¸s(nßlÁnš`7?ãÊ6c™³ÐºšÐ9^ …>3³}Ê!°äú]hÿ8âù#v¤@ 皥½v>R ­ ³ºöá²Ò-Ø!¿1†z4¬ƒt± ¨3ÁS¨‹Ù‹›’òË^ûru.vêcÁ1÷1³³Ê|«ãJH³O®Ù´zHš·šŠzº±uï“e\{g-@ìQ–¥ c… ©d‹ «u/œ»‰øG›HyñN<µr}¹ÞP’×( ²«ôˆËµ:Dn¿>~«‡C=~oF×Õ»J;ÊB¤oýÑþ{‹¢ÎÔýò¹„GüL8w·×ŒÑ^\üÆ#GÞ,=ìßqíC&=ZdNâ‹aÞ™³…A…K…Ž ª(ÕÕBš­fñmXnd`îrVÑÆ}4}2t +«õp^61å‘®ÒÃC±NzÿÝ!úfƒqaËCðõÀ)ˆ‰Ž_4\ÐDl3,±i_Ä¢CšÄ1XWž¼0‰ðNŸCøÂ8 ë ú +ÂM6ƒr‰˜F¸ÅÍÀ¼a}ä1•pŒT%ÎFM¥ûNÀOLÄa Fº¸H7„ÕW$£§¡ý­Xö&–Ý¥8”oú|V«(Ö9òw;¾ÒÇCº¼H› 1†HGÿɈáBÜxoL?h‹ï4K¨T# f4Z;aB!×W’Ò"Ö.{µ±g6ë$<ØËÑdvìAs1Ì(¤?sÊkå›<å-Ø•¾ƒdÀÍ%Hw×Ö2¨&C@dÐÕÅÈFC;î1–× Ÿ ˆ˜ïÂ#N£„G=Çà>ùóáÜÖ .ÞYÁáYýzÀØ”˜•£ +í—2qĈ8î=i`!>!ápa¢ÀÖQEψ&¤ì‹yˆ=„˜®¸Å)eÄ’!Y~öÕ%,K=^Ì[Ne/£Co¯aY)Á·W`q/6±š"—»õÄ×1«»Åv¶žŸ±¸SnCe·°< +8ÖÔ½6B\Òì 骸hÑU…öÊ!V‰øV=‰öå#=¡ìéz!¬A„)å;Yýû„¡ÏVðŒÑÖä½kvX ¦7OúO0FzÄ’Š<Ë3ÊF\+è7­iå< +±§¬å¯ Í’Š²ì´£~ã+ +é– †>é5 ?â8ÅmÉÝj©å½ò£Tô£ˆK‡˜J˜üÕ¢`˜OÜù"à]ù²›(X‚öD(Ì)cžn$£ÔLÅ6 +(×#o,AqÕÕËãʈí¾81±³áSÇ=¡ÏôOÚC_ç¬J#Þ¤‹|¦ð“Љ ŒB + N2«±í éX¡µG ±„`ú©qš4éPN¾“éóAjˆËˆÚ…tP‹›º¾ñê` ÓüÉȺ²±înËŒr ›†8†ˆõ!ÌjÞôX-X¤§ûr Ê»¨;ì8à§|&Íí”0óc?ucÆJaJÍNÒ)aWd¯hJBßHØ(¶.£Q !=ä³pÇ É<3{VCZ`mÏöÒ<35?¢Èr6|3ç¡r¸åI¤_ë”´Wô,¤‰…â9ÒaÅíÝÆ¢u2}Tæ +Bk×QÄÙ°©Ä!×Ñê(Ë)¢+ß#F +º²Öí7‘¼Ü¨OdTkP16±Ì»ˆ»ëf'Òî_kZ>{}ÖæùSg³5R– ûj š£Bùë­(–ÓÏÚ-éÒŽhŸªáÇ•0·€¾ìˆáãcú\âTØd´V…»&Î@5‚±ÐJAc¯1صb'Ð9`øÖçT%X»jëó`. sH‘«¿ÍZ( &7âO#~)bÿãVgTø!EÜò´ +í>¹¹ù@ÄmÂãʶIn4Ò’kívw-Ë.ôO^€_ë6¢ušáO~¡Lo3ºøÅ{ËØ¸ƒôÉ\å3±ÃgTŒy|€tgѾz¤Ç?ä:JÏ€_duÊ`@ºEÁ˜î9isâ6Ç”“Õ«„ö…˜P\ Ë£Êô)hcŽþSÈSp.y&ÍAzˆ]$Š(XÇr™aMZ:¨°¼ªð â°[ë— iV‘v'F!N)»‹»±ñ êzNŸº8éu#} <µl7™U«r3Ä eu³½æ ¦èv‹Hú¸îˆèV‰'½Û‰æ0Ò&À`_"ÝTÄL%\b¦öã…ÖgUVåÃjl"Có’GY*`GœG±ZBþ ‰Ó“øæ0?þ± Xë±±Ü)J ±ÞžyKX½?ù\¤ûÄjº¢öú±Ò‘V—Ƥ·Eœ¾4™8£Æjx§Í_¸¹’åI¡uÎØûè¬]ñÕž(½^—”=ٌ쒆úÎÅs"±h'™^¡‰êAQN'Ëj=@¹'Á~Š™†4e„©-»°ÜϺˆ9!Hkß…_Ì[D{&ÏAçfpPÎ'GÆcG¼ÇšŠŽ+b¶Î£°c¨/œT ¸¬y´ÁŽåÛÀ®uÛŽ&ârZ*ð,Ž)áNѪĥK ǰ©ˆXª¬Ž°SªØ= +i÷MEzæ\Ž î«Ï†øTп¢ëQPÌCl!*£N±˜YßtÊ}‚0­j7Ëÿy>`A<ú$Â’»v#Í1Â!dœŠF°ö21ŲA<»C[ûr=ò“zzB ¯ÏHðiHwŠÕqBšÌR EÄ;6ÅÄ@@[*"–7ˈ>á6r87³8«Â2å¡?¤’KöJR_iÑ‘7 »&lϨ >™Pº‹L+;€¸_”Gø 6×J,Ù‰g”ïE: ïè9bÿôEH@R°±ñ¤’]âÜz>žÓ£Gœ¾0IhyL™Õ9LY,ŠÈ[ƒtÉœC"oÀˆõÙmš,‹)ðÚRÒ.pyÔsçŽâJSa×áÉ-{éèʈ‡tÔИ¡µ4Ä&"¯~Ðc5O¡¿!ÝSg“žsØ|=üÙz*¥CƒÎèÒ“d´K2šŒ‰ôêýH Qä6òË\€X†ˆ£‡®g@|cÂ;{›sß_MÆ•m§Ó>¤³º %Yõ\óìZ¾èrâ'¹¼^ä›4_â5[]¸™Ì(Ó¢S+µ¡mî`s2˜ÛWÁX·Šåéš„41ñ´–}dΕ7`‚Ö-Ð:)âA™ ظ +úé‹×–¡õÂ3¾ðøÅñ¸cŒ*æ:;ì2ŠKZ(hî;öî9ÐwBìÒrG,0"½Uq|Ù>‚u-OÜÆ^iTˆ£_ì`5ÐΆª²Ú´pž£¾gדñowÒ^ñ³Gž:ã?‰]ïôKy—÷$Ñ —qðù|–×w{KÜÀù×>k®‘Ó“‘+:cÛOCâlèÄI'/¬@¾i'".=e{\ÅÌ#n®Ô+m¡Ô+~ªÁpKäÇÍŒŒM€2W@Ë‘Dš1Ðîøä!Ec}Ë;FÚ*ˆ_( -Ü( ¸²œ:2Uäig %Ö¬v–øŸ´³„ùµQ}ˆ¾ßâcl®ôS;+€Õ +`µmÎxNDÚ¬6<˥͞øÏÈöþÒÎ'7¤ÓÛ²v ç8Ÿ´WBÛBZóè3b¤Õp>|:ʧE¾ Ð9Q‡<ÇR6n£‘¾¼$©á Ñ©‹tðCèóǤµ«ß‚4Ãr—#ÃrÃò×P±O¶ŠÒêtW—ÊêÔCŒG"µõŒy,w‹þ?¸ósþƒ;ŸÝ£+)l·²*yé%¾ÚÄ%Ãn®b× ‘΃ÿÕ¸c´*»®V¸–ˆµ ­…ómÎ*#Ö1 ór×%YM\4æèz+”s²zÅHi"Šmbk6×cÙ܇OŽBºH¬^ Òƒ¶>3Jdíæ\ø4Ä>]m7aµ³`ßþ¥‚´³`~çà=Qì“01c%®0îý©E χy°ÉA!À)kERÿ/3K%ÊÊ^±–I)´Í#È^CUY}<ÇØ5‘3“1»#ÊHŸ 1½Yîuü‹m,‹élÁ8³¦ ½:3·¨ÙâKy+騢bqç­@úWâ«õ\”#£ï²7˜3÷OÛýdq³úCI5»YÎ,Ò|FœktÞá·×!f-ºÕïµ??öç:° «ñ!=ê5iG‰O¸ÿ©3Ìm2B냔ÒÎ’é™8F:]è{7¤†âØþܸ?µ³f"í,–Wú—v–Û©{ú|QÔó­RßüåbÏXÿŸq¬n—kÒlVCÑ5xÒ±”xËæ!–¾Ä úB8®";¿ñ¬}G½ØŽ>ãá䟟÷þùy÷ÌyˆYì›<mõÜ…©’KÙËÍÒ* -Rê8lÝ”U÷Üyü/îüµ6þçÎ7k!î¼ôºö¢S„bÒл§Ìyg/:7 +­IœM WE1éfq0K.n® D:j~×–ÐÑU;QžK»fÌFñiûáÖçG s>_ (³:¬§ý'³ZìNSÅ^‰ó$NQ?õÚМ¿tg5‘Õzé¡õEÌ{¶ Ò9ç ±Ž>«% Ä +Bâ?´³¡5"¹)àèða|±UDñIbã2FrÈu¬ÄÎy¬ÈæìhÚÖe òÑH‹›Õ§öŒ-öNœ‡ü'yÂe,Š÷¬Þì[*áå¤ñÃòéÏ«¢¼U s}èV‹ewˆ"n­…Ü\Íj¶$- ®Ôé¢koÐZ)bqSŽáªü›HߌJ­ÓD9)ZÙyó®aµ±ü³¡õVû×3kqöÒdÌê„2«åc&#ÿÒÎJ¯Ó¢³êõÑZÊ_ÚY(ÞŠÎFª!{¦]C§!½2¤…ô’QmöŸÚY¾?µ³¤°Þ7?¦Œâ‹Ô1|:mí8 +Í]ÄðŸSE9ò¹ßÄù¬žÙyÙ,©{ä,èg¢ØA[¹Œfµ·àçÍœ"f Ï#Þú?Õñâ€ôň¹Íjö¡\Cöz—$íµ¶Ù…k«Ena3÷é=³Z°o-'® êÒ9ý\Ä‘EÚ±Hý<Œh €?Ý*ºteùOÝõSÊH+é õ@ô— F.m£h"e«€jG´žÍˆÒĦ Ï £Š6¡\’>qa¢)ϘÀ˜Ã„ô’Ä5d†Ô?eÒAGu9«mŠâÎ…›+ÑÚ«{áÆ2İG× š»Þo@ż܂ôæ‘v]+I™)"í,!AigAGþ‰ÕÎ2€ÿ<ö»älˆšØÑwŠÙ1çñæv~‘F#mí0Š´>¡":ã'Òî‚>™Ê^Š4‘†»vŽtÍ’köSÉeû¾«è\ì ©WæB¤QAgTé <}Ïr*Äæfõ /¥.&2j4Qla5.À¼Ã;e.u¶érdUÃ|«RKê!›+9ê5ÞÜ9v–™¬ëƒsVJrª…Òk "ÑÕŽØÉIµ;Xí,V¿ýÚr,©˜ÕÎ"åÿ{ïÕ¶m /@ (fQ·ºÅœsÚ†mŽ(¹ªV¬$I’ (9çœ)rFDÌ9ç¬(D‰bÎîx ¼Ù'zÞ¹÷¾×¾{[{ß?—­Š¢j­5Ç£1çè} ÕÎ +̃v–ÖfÌEÉU“Þ; +\ÝT›:¶Šjg)¡Ÿ í¬°.í,å?kg¹~ÓÎÚÕƒµpÐ’s$·”næ…v|pá(ð{C˜Z`ÊÝÑd~fŽ€¶ý{’wöäï-µä + èR3PÝü}âéiôM ‚KºxŽ+ÇKä^Š.Á½©>™ƒgh~‹þ¹ÃY·æq^o–•´,…þ¡ÜÒ^ ûËä\æ .ž=VÖZ[6‰Œ™‚ää¶=ð#9c®Úª)ø& FñùÞ5 èNËmþ ÈÎ'œ +½ +hso^/c6o’1ÀÛœÃnâÓ‡KñU“¡åKq%‰ÛüI ñ¹$—¼Ó¨æö[É+ZW {Û¶Pí,p¤;{÷2ÿ‡v–×Wí,Ï^*ªux¦˜vq¾´3º¿¹ÌJç½m¬•*ý2†Iɧ[D”Ž·ØFõ­i>î—5Œò±çß[Bõ +H‚. 岇^Õ&Ï&ø¦ìu`<â —™PR·Ž-º¿\‘w}!4ài- ûsh.S¢ëâ3.Í—<ö=Jq§¦C—TÚÛh$¨/-°Ø9ˆ³vî¦rôÓ!ùÚH>·z0OrÙ.}É.í,–jg5.*^n÷·™b2òª…áÒGaØÃÌÞK[îÖó›vêKРúJ1¥¤¤#3¤ÐÔ4¾‡æë󩇦‰—ç+ãŽO‡v¥èØ{Å0ÇQ7Q†ësYgçvés\žOuc¢ +ôñZÄz\I§g+cM•‚R‡Ã‹øû­Ý ¿{>ïâ"®øÉJÔ×èš;´CÒˆïU“v¦ ¦ÎΡTë^Z¤/Ä•Ãú‹Üåh“÷”‹*Óçœüz™s¶š2 MÄNŠÁéï“4xózŽ15ÛªÁYûvWºD÷E~«ôKÍød>åØ4©ü‰!åAÆZŶ€žðù¼Gt_ÄB¹ÒUËÄ|«† öüØ,…8¦ ,ú‘ÆHרÎ.jž$oÃþ4ÔK»ôKöcSσ[r.6óülè(}²†Q}° üQˆ;QùÔ?H‰§f‰$W…ê›]šÂI»t¨H NM¿0ÚoÀT<KÀ?kbß ´€a_è±€f0î74ê€C8õéÙBÖíÅÀŠXWv< 5 éÐcp­mìi])/¸µê;‘‹æñ§¦ ù÷— Ù·—'›Y1 +Õ®n¼•WwÔ|$÷оÐA•œ¼u”»ãó%×X”ÕšP-ß4=`ɇLMH¾.#¶Í*h¡n =Ô5(£:§þ:ÊÀ¼‘ÐîBÎ'‚æ†Y9=&´Î¶{EýÒ5PGpîF5`ˆ-‰‰G§a=ƒj¼oÕål¼(Þ£ŽOârî/AMDŒ, ÍoÄoŽø8h á¾"¥~1,g$4«iŸKúíT/È'‘j *½†P f26À¡B:‰Û$GÞ§:6ÀE‘¥ú¹÷47‚®¹Nb§_5Ýuù”ÓQÓŽ7IÊãu*®¬~5o±½›ÌL`°~E5j‚3~ _Ðys ïCë ÿ¤Åe^Gó¶Ð¼‘BÚÙ9Àã²¢†ÅÈßev>Ýeãs^ùzÐJ£¿jq’¼ÌãÑü7í¬ˆâ1Ð6â1§r¯Pu)|︮÷-ûö@sAèP'VMâÓNÌàò®-"6¶˜Ï¼J1 ­Y%÷ ÚpQÄîÉç PßÝ)2G¹$’Ë—5¬4(G^l–×,Á;¬¹K ggÒ}“ÞÁý„#Í­ÎÞs´;sÁÍúè];Ue)»§v5ɇVáœá‹¤À¢Qd,É5{S>{Ýxû žbÔ‘‰4gλ¶DôÉÐ3W9j²SS ëÐ=úÐÝâˆýÀÆeœƒ¦LfA°¡9cn¦bX;ŸÀǸ.6çÎÔ%H>ÙÃ\®Ô Zžä³Ä˜òqзÂþ%ªI”xa¦"ûÁhŽ@SŽö9\µ(ÎÞYZ[¸Ÿbò¹Y\ÒÉi¨å#Fs½äJ÷nÐQƺutÕG¡k½Ð¤* 5Ô¶ÑK&¤]5+ªyˆ&ì"úìT)âàèP+CJô±ÿ†W_ë–t훨L89vOÇõ&èq…åÿˆÚµPÞh@ü÷LÞ#DWpðëÅmõÐw§Á¾îP‡‘òh“(îm2æòê–RÍÔ¨îôéÙ\уŸù‚Ë¥˜ªITÓš·óQÌšxt +öˆ!9# Åe]œ§ØÛºFžwwÖw±ÞL{#zÓ˜”px*ü<°”è1€â”€¬”áEútMˆøwEÞµò¬ó³p ³Ž|Þ\tÑ„~ÕT!q…ú¼¨"ìa™DuƒpÝ?ÒAæ=—tx2Gð9É[æO˜ñÄ?ÊÚû÷ÀycïWÙ¶€ +Ô­ k—qêëó0¿¸ø=㸒æÕØë)nb¹ôó©¯öOÕfÅûRCÆ{/¡÷„}4î¡v…¼¿èÞ*øTº6me«…¼1ïÏÚºjcOjáÐ)â,wh››Yti"úeƒ¦ +® kc¬c7CƒMÓŠŒ°ƒØÖ˜½Ru陟›)&š‚*Ö E°¾T‹Äh`$œ›2jÿ$1óÊBÔgÄ(bäü¤èSxïŒ!ØÁ¹êˆÞб$ïÿPðâ¤-{×€Þ¨_ +—@óˆêAk Úp~9ÃgÓuä@2¾Ð ƒ^^Ú±À#T·ší‘ãHŽBõ9°v_NµxŠª—@»Có=äªÄn ¡(n]®(lX +Ÿ'&,]%ÄÚ”ã3e-«¤ªsèÄ`­žj}íŠH÷ž Öˆ=@q‡'óQ×Bß?Ã?Aw¹¬ágYуŸêks階‰°2ǺôóGÐu@Ô#°wØ?kxFÎÿûäEw)v¢÷—[{kË”;´K@· +˜špœ_*‰3ê¡ÁŸö[ÅUMBÕ#èZ™úÌ®¸z9¯¾¾ëô¬u@wcÞQC¾Ä²ˆ +}yþÝExº^@ì!¸hæ¹G_‘zx²¼øþyÞí…òœ›óÑ‹Ê9û÷‚>&çâÝKŒ©˜@õá°‡$´j¬àHb¨KhoÉ;{(´ +Ehi<Ê'Vzdl’ä\}°öÿ½)Ñͧ7·#º¯¸;qVN|TÑHZç#9Í7ÈßáA_Úx³cj.g€£‘› ßÅ}NÂz+Ol–ßîÓ‹Ú64¦É=ÊÄ^a»¿Ž„xžy~ð +ô´bÏ–¹gön`^á<°^,zåè!w†ÿޤºéžñéž#hÁ{¥ &ql0óÐ{%>…÷ÉÔƒ¦3ÕÆ~ÅÀ|ªÙ-û@ç5Z߸AT«‰úàss¨Î+j&‡bŽó©g»ü´O‰£:WЊEÌ1q7¹waÄÎH~\$9Ð<6óòŒ#0!›y¡LÞƒ\'Õƒ~(ô‡QçAÜ+z]+%˜úlbÅSCôѱ^oc/m¹o±&B‹Žê•aÎ/~0ò$h×anÓûÿrjÝh<ö»B7„Ø/ˆùE1¹·ðWÊà¢i\J<>ƒj‚“kæcKÆR;«§H¹0M‘xv +ç•9xŽ^ö½­Ož×_8Ew¶þ*]ÙúÜnü¿ÊVWÇßÌÑŸMÿqÞøÉ€|çHžÛ­?g¶¾¡¾¨œ­oCþ3£§?o>ýÞ”ŸÏŸ¹ð§®'¶üó_¿nùÇŸü—'¾þÉöÿp"øÆý«5¬wp¶]òõ{z}ßlƒÜ‘9úÜ]Ykmw9XÛ®1ä7ësÄbDrâ3è wýO~¢·{óº>P©?‡œÄ¹¸Ömÿ½?À}ùúG_¿ü¤?ŸœÀœŸèm›¯?›MÎs=I˜ôýùs.ü‰Xö&›XfÝCf“!ËšÛh˜°öšx +[5åVF¦Ö†Æv7 ÌúµfŒÁf‘1“mÓ0· êŽ~O™]@w™w3›]Ú&’»æºUÆÌŠe™MëyÆHá¤a¤r×4’9i®7à˜µ«L™ëMpÁ™(·išÙîÐ6µrÓ’»„êÈ#uŒm}´7›Y0†Æ[ð_™[ïì&³ ïaféÕm³©ýlS%ysfÝŠMä«cÊÛk¢ÿ{õ·l±¤¯1å4vÞÝÁé¢ôIî&Upþà@Ï/å+véÞoÚã³#aúlÑ'=ØèKU†çFÏ úB[Ý»‰è÷‹³Ÿ8ri¯iò‰ÙèOE/à C¹8ÈWÑѧ—è®–ô¡àÕ¢-x=z±¶yõìvtWmè«ô Ÿï?Ü,¬[@oÊaëÓÝ½Õ +•†\´Ö/8XwmôV¢š·õèÎp39ÏÈ­œµx”è+R8xvWØ{P.p‘ñNþ½Ð7 +.Ys™¥†¹°Uƒ/¹~WÉ?y¨w`Š2¸l4z²M% ÖÚSôÚ£+'(Ño¼¼úcq?=bP.§À¢QbXå>0ÿÖ3ª/·3™<Ÿ6ˆ÷NÌÚ÷4Un×-ïÔ‡r‡ä §ûá)wOäzOÐCœózºÐG@÷탳‚|ŽÂÂIKÁ[j‚'ÒDi¯ >qðQ›Úi˜˜Yil6‘pO™£Gƒw¦¼–†[Dƺe úhÍE-¹…5¹§ägp‚®[»…AŸ-ømY‡H¹C´Žl«—68ÌÁãjlÅÈTŽZà502gÐGÎíH`jí®e`(0«73†èóµòî.lOêÇïLÀ¹Dô‘q®šÐª0UíÔÚD^·i 8Š-5ÀÙ„ó7“¹Å®n¬Ò­kçÕ]r î­t ê#zFõ·LƒÍýÒô°ï^F®—œƒ¦è•:X +(¡ )Õ§ƒrwâ`ðTR^/ï¸Á°Þyw/…Ãîî’oþäþŽÁϘ3RR_[,¦]˜¯ LŽ×ðÄvøí^½Ð[A9ZŠ(_@7Cþhؼ…Oúp•»¿®Òë·Ò+~0¸(7ŎоàÎ`­vhƒ‡|8 + -Öz»6åÇt +Òá<û ¯T=ýÎÂΰ¾¢]@/Ê•œ5½g’WÒ`Á9@‡Ý¶£;øÉhO±}…ýönœ­»6¸/D/b»¢€;@wxš˜tb¦rw–žàØ›s УŸ¼L艡ýŠÞ™z´ßÃ9¼lS +.Mù¿²ný$äÕ,C?'ØÅ™Áº‡õ1W’± ö@{°w{FrdùXpJP]»íþ:´çÆ'b 2¤h4ïÝŸwÜÝ“öÔ ÿ—ŒíK´sÖæýKFð.a½M[Íõ+ ˆ\Ϙ±d¾)wu3Ü´d‚ËÝääa&8j ŒÑf®KËGµ]‹rçØî&sÞZÃD®bÀ;‹óo-gØ}H¬KTpâ}Lä6¦¬½å“&×€Þm~WÆ Þ>´—¹ÒC Ÿ~ôb‹N!½ÁAÇÇ=‹]=æàÝ„îçäÝStŒè-“Ü´Ì%âG-\»‰Ž¡½%¯Ô!J„’‹oÉÉ»zrU>Iz¼5z>|º£ß—÷O¡=sàgªBÆòy% –vÆ D&åÜ•9„Ž“¿z˜t~z>Ñ“Žž\Ñ›ÜWpqß‹¾eÔÁÉÊ”³s•±§H”Ó¢b¢ÒÜÁ}¨$þ³«™ødâ3Ñ3»¢ý¹d¬8'Ÿžè¿‡Í(w‡@/íÃFMXÅXô8Ñ>]ϨÔÞˆ_VîJ$íŒ zëÂÏá½(?ÆÜ/‰öÐÒ~÷ؽ”û'`®I‘ãÁõÕÕç¸oí“‹(-Œç*´rý,ð;¸õ‚óG¢çŽö}G•ÑÛˆþ˜ÀÌá‚oÚʃ sç@ªŸC9— F¡gOH*z†öÃü¿-ü*8Ðp® +KØ#ú–ˆÏ€}‚§ƒ³wÑFÏø1`Wëƒ-f ¸¬d±Å +Æp‹Š‘ äï‰ORX{hË”všð?”ÁÞ«ì¾Yf娥°ué†ðÍÆ2Æ”³Ñdm}»³A½Àï‹ÏÏ>lLa饞gÌ-ôŠÑþ.×0rÎ ý8\ŸkDqWâ ð._ÜâΤà7Ü´v#—œ5EôÙ‡èÈ-Ý»§„òÁ’ØKù0ˆ/„œ|tÀ!z„÷ƒoç*çèß ½™RtÉ8ôoÃ?À¶'bŸd:ô{ÏPΠ ÂQxoð¨£÷–sGdp1ˆØúö`‹1ãÁQ­Œªš ô/ÞòYC1—Ðë%¸Eö>íýñŽÈ¾4¦{«‡b®°ÛɽwõÕAÏ"õ©Äׂ¿BnåFÆoåG†¯£çñ ƒ~yÜðÀ›s* hMp$.8ê€g—µØÙßêÓüRàT¿(—4_Ðà ~ðQ{<xP¬£"öëÕ‡ò!¨‡q»ã \N°€ÜÖK›ÝÝ\|ìñIbԉɔÿÎz§6O|)í‘%sÒ¸\”°_Ï=ôñ›޳դ ÄOr–îÚ +¥m?9¹Äeô³Sg/Š%— Þ´_–^w†Å€ð‘^$–Lœ;’Ú38rÈï1öðƒôµ»ÕzÀBàV¡>Ê'g8í…$ñØcH¹dŽóNÓ£ÜTžý¥]qƒ(± ø(=ˆÍ ?>s( k8íE—wô@eXÉ)¬X}Ì´Ÿ“ÌWÌKðm¢ó<4"åµ(øçIùÀÓMì¼´‡3$—ökÂ6þÑ«wt2ø£ÁÅÅÅŸ˜ ~pp  _á3io)z2CÊF¡ß–ö‘[‡8ÔÁ=ÓÅíF|9¹ľÁ÷ƒ —ó×¥Ú QûÇ‹}¡Àð{‚[¨.ú,© x›Ý•8rGâ¹aºrÇ€ž¬5ñ}àî·@(™cÄSÎp§¹†ë‚ PAüë´£î ð%äžPm'ñ‚ÄW|€N^½ºzaÉ9$]œEçÉàé|#¿ƒ/¶ÎÏds,æR/Í¢ˉg¦Ò>Nט¾¼oþ0>öÜT.ÿéÏ|Úýù¼KR_c3øi'-Ñ']OL>>CH;= =òôÞETŒøô(ç#t8]¾ô$ãêIâ™’_Ϊ°½ãá«àw8ËmZà‚¢x)|Wç‰ÄÇÁ6%ðÛzÅÿ#íA%ãD{qÉxÃFÀµAûÊÑ?Œ{Bæå!XHØÜ}¸”> +ãå×÷R„Ï£¼ëÑ}1x¯¯1¸}²°pD‚‡ŠØé7~œ íá&’'ñŸ%ãEc>b¿WÜ@äYàh <š)§¦ƒœöS©¯¤Ý y¿„AÐö€÷ Õ<ˆ?6 š\hñHÊSâÑ—^Ÿ{T?Ÿ#öÏüøoÑÓ-·s§9–V<šO>3}Øœ?ûÀžœø}У Ýp¤JUãx·¸¾ð©àÄgÐÞû`ÜÛŒ¡<ü&É`·àg‚{™CcÃn·6|%b…@æ?µÏ¨=ãL9; 3Ë%ò•ä*øÞ”wÑ4#ù—LêÒ?¡ÜßúqcÎLG1íó9>ú àÆ£=Ý» >¦ß§ ¢Mà’ÎMw7; úfÐãá¼3sA…?à¡(M(ð»CcÁœäaÐCw=ç­ í3•«&0)}(HN¦"þÛη08‡Ä©ƒ¨Xø(‘|ƒúKpnê-ø&¦œÅm«hþíàÓ‹ÆD2¾òÂÇK ) H½0|÷°Oê"JõáC€«ÁylEr‚ákHÜêûN¤ã]³€ùÀc#‘q—³$¾$¾ÀSÌAl™jµ¤ëÑžv‚[h"‚r‚:“¼ÁÉW‡b;ù¯ÏS~pF‘ù ›„¢½Ó_ÿós +þYˆ,Cy»Èïè¹EUŒ…øÝIG'!~ƒ‹ 󟃹®ðqÄÖhœo¸§6æå” Ÿ }™ É™-œµ3r$Þ) /ŽêCó‡#—•[¸Ó\öâ“ù‰û'zÇ ¤z $Æò$ç 1‰u"óÀÖ»»‚Äcè‹Á>ù‰ý¡¡ûŒ~ÉU–¨%âÜX äíΚf¼=ÉC5Áó½#Z'>Ã8Ÿ…˜L°p/1îÄTÌ/Äfpáòñý(O+ñýÀ‡¬•S7¹[7™{7vÄõ“;xw÷/øÍH^ÞÅoèÙ µ v{xo…¥g7äëâv-cÖFùò)Ü7™…›¸,)w.ÉÓyÿžà¤ÚHàà !9n8#à´¨  !/j^FçüX`Ê0yIÃ2nß{Ù¿¬3/z¾œ T·6è“9DfëÑÍ”—4 eǪoÌçSoÎå=“Êm<´QÃ?æ€àØ~“æÃ騡\:g$øU» &póï#¹zéJ¾1ƒÏ@;<ï˜S4W ¹6ÁHÝÁëþmån‚-Á‰äª>-è³PÞN¯Œ!Ô×’˜­Š `÷Ägwñîϧž™%PNêˆ~”#þ(ýÚ|®âÕFþÀ3SÅÞvÊJ9nÜ¢ú_S>ÝaºÐª ÷žØì¸ ¾ñÈ-XgòzøJÔ…Ücú*¶ùö 8˜À3} t.(.(E9· Æg õÑxÁÕÐx ¼´;#û±ÛCt0×`›ÔÇ’¹ !ßÇW6­ßÌ`Üe–ÞÚÈŸ¡¯Û5viCÜÚ2ÞN“w +Ößæ‰OAý܇3ÿ!€Ï|ÞÙzd.õG!»- §œäÕ¦$§11·`Lk ʯIž‡ïã¶ÛµõëMäë༗‹Zà(—¡ÂΧ;æ¡ÌrG7:LjEݾ“ä{Ýhü£q>BÚ¨##ï ±úG`4ê«ÀÉ‘ymå{× rF’ã‚‹‚=øÌ;öÁ\~äÏ-ŠŒGó¡/‚yŒ<ÎØ\Eõ\¡Kþ;6åÜtngt?Ä"… ùlpÅ·ÂCJõ¡Á%‘x‹Ú“*¸`4°(ü78“I¾ÞCr'x¼3ÀýàÚ&þ±œúPpÜ€ ˜æëQÁÙK5âN¦ùoPÁ()¬p4p,j†’o²žÒ'½‹_2 m8ÅË1åãŵ?S ¨ÝñPϤ<QycĸÊI¬úîÅžgk/VS˼û?ñ©×æ‚ÛQpŠêƒX ­¹ƒè3¯²9÷ñi·æóþ¹Ã€Y¿žà_gs.V”¶,§Ü²Ð ,Áua„سS¹ìšÅ|áÓ•Bqã¡°vx[º¸I\ ɉ¼”r»q Z0á{ô)>&1þô4>ùâL.ëÞB#ƒZìÂp³¬+_'v…9EõHHÞO¹ôw÷Þ‘s’ü ptn»GõÞ-¦¯@òð³£nÜ+ßJü§µowätà¶ï™A±µà–Ø~x5að×Ã&Ág/¸'õ‡¼9g­É;ö6‰M½4Sˆ;=UØ­ÇÙyõÀ奄97•o^—0¹7Ò®=púʶB«g»x’âoQ#“‘óE´÷í…5!eÌž¯ùºoÔkh­ø2>jß8Z#DîfïÙœä°Mu¼¯Ú +õÅÙì¡ç[ÄSÍ*ž·ÀýûMƒ· êÉZ b½£r:aGÊ@Ä-¥øy†"?ÇÚ”Dìry_þ3¬t ¸h)')j¸_¡…”gô+a_чäuÀßR>¯®|]9ÎrY† +endstream endobj 66 0 obj <>stream +äbª&Üy +Í›Éøuqq ¢5ä|ð5 ‡§"§OO‡OTäÝ[Ä¥^ŸÅ%ûæÃû+HþÀmóéAù+#ÊÇŸðö»zX„UäÜY}.îÄ$Ö-©/bj×âv’{‡#ÐGœ¦¹$‰éàsƒî›BòJ³Á!'“ܵ •=-)¿~µXôt 4S€1àG ›Žw:¯I\ã2Hìʽ±ËºI9)¾õÍŠ1ƒ +49e{?¯6«x¾ì[¾Ì£"÷ù:ÕØp"sÞÅW‡ò‰+¤-†ëK¡%£I<“À à¥§õè3e^›Ç%Ÿ}Hè[Ó¼äJàl„&[ôt9É×ð®)ýh}_týG¾Î§žœ ­'Ô߀Ó1WºòuÌ— Þàé§ëkda'!{ÆJÁ9#i¾nEòuèc±¥uç¨}ãi¾Œçvôâ÷O¦<>”øaèA²Ù׿CÇ µuÔ)i®Fp)ÍÕÁ-ˆZChþHÚOÄ*Šj—@cOQÒ¶‚`’.m ‚É0OiÍÖ9¸·\eKµ1ÄÒÆ€6<¼÷GS9É•å kåþU#JWô$~Ø/u(´1D7ßÞ˜;Tw%¸üG`b…%üZ—6†XиJ(n]ƒëW:b(gG>ß3a ø×À¿ +E>ɱ“NÑš+åÒ‹=0Q^Ô°L¾ïýZèC[&Â=‹84QV¤¯t ï Û¶¡\Ùwqŵ+¸üûK)'®|ž™çæñT³XŸrš–Æ1 u ÖÑ¿'¸uåV>ÚX[èÒ+IÓ£ëÝIçæÐsCýa'ÁáÄwIÄ·Ã/R:bTûu#ðþ›‚ž8y©6FL±þ?´1â¡‘Ô¥S€øÿâW@ó?hcð$675RQ „8ƒùˆØÀ‘Ü<±°5ê'w% ¢ëtÈí}é|¢5ô༑|Ô¡ñ|©©]þ‹|>8ý’ôÀñ†õšC“ܘ€~¥<ŒÇ§aÎR_ +߉øŒ@òrÁ6T£€üù9}=]K,îX>ùÊ,Zp ê €|¹ŸÂ=¡/ü"tT7n`™µK63«ÞÈ@KµVshšåêA¿u3¬aá}€)Ç.òW3Q/„~Õ"A-y9ôK¡MAb&09âr^ðvâ¾P~ÓŠö5²#ï7‘9µÚàÐÆ0Þ^t <ÌYž%òpqSm –Ù²YÁðÛü{ª ABü5­Onóê‰ñ¦ëÖÛµéW;7mÜ+Ñ™Äèùºú÷VØï¢~ˆb‹Œó ļë˨_æD­ZeçrÙ×g‚/c +ßÀfŸŸÛÅ»š2Œ®£†èc•òTfœ™ÃW6@~k(*oâËcJÇ‹åu••ÍæÒÞçÆlÅËõò‚úŸ¨6™'|Ü¡‰òü›TƒÍ{¸˜jcüû-6Y0F¢«&ô¡ —ˆ:Õ,ͪڥ!ý³6†Û7m Ïƒ–BtÔ¤xkÂ$γy5Kùœ{‹y‚;iÍ þÐdøšsúf •"NâJŸ¯å÷¾1P”}\…º´vpœP8‚Ý÷r=tçhÎ päKØFT3Ô#¢?Ýá“>y9êGÈÕ‘ÿBËø54ÉΫ§Ò5¦´»°ö ž]6óÁ>pïH¹KToðÙ+v¦ö‡}šIšÖ3«Öl`6m0eŒyGº +ÜÉ–<^Þ]𸣆e®€“{wšO$Ÿ‹=_°Qv›gwžäÒ¸v©´f—qkDb­½û$ ¦ëØË þÚr}yIÃÏüžç›¨6Fêéé°ù?´1¼¿jcì쩤ÚGfB[@Ú3µ5s2ŸØ{B°¦2 w„{¡€í½z Öf&W2ÜVçnÒîÔ!”“{."*ÆÃWÁ^©lÎÕÅBÆÍEªR}Œ'êïÐЀO‘¢ŠÇ‚ÛY–{a6w¨ÍXØÛºã -êkókV(«jÍ„’ºµ|öÕ…ð \ÕSpQ£vI÷ƒ€×5þÀäÈ¿±f÷Mƒ£ÚO– ¯ Ä}ÏŒU6È÷¶¬ä£÷Çb[`Ù6ïîrÇð^ß´1Ø‚–eÉË৔бH>2S–6’ÆwË„ÔÃÓ…ôKó¥ø£Ó( ±ƒîí!þcÅÞ[&Õ­áKkÖ°¥Vb|Q{f3nÍÅÚïÈ#å…MKé·gsѧ'²É—¦S•pr +´7¹øƒé(6Ç:ð>t#Â+Çó¹5ËøÂú•ÈyXßl=ä X¯GÞCç°<ö훲¯ü$–4näª:6+O<¶Rnؤ‹ÓXŸÂ¡¬gÚ@¹GB_¬A˜[»u3å,5L‰"á óe,üš@æ7jQX/26P0xÕ—!¸Pwj¦*rïŠgvÄÀ~ èiˆEÖ©7çÑý X³ƒÞê×µ^hŒB7ã#Ͻµ€Ëºk}bÏ(ÅŽ”þÐŒçâ.O¥Ú>Iƒh•X95/)¼`4ÕÆˆèÒÆ³Ï-„þÕ Ø_éIòÐR}ªCGòTÊ­L~Ï—Ô¯âË×Ñü¤´uÖL _}?EÆÐ÷ù}¿òWë°ïÇÈŒíâP§û ŠF‹Ø×€ÏG|^íJ±¬e›v{îl‡® Ack©ÈÑQKC<$9’x¤Qauẫò\ƒÙ·«0Ø”«39ïâ¡Ð@®‰|‰®ïHêO}qpÑ(pʳeík`ï¬ÝBuVÍDßIœ—¶ôV!Ž@KÕɳü»Ò#‘î+Ã3FR^h¬aoöü¸(€S:þÌ4eHŬ ÿR=:¬Qb}…Œ%öŠÁç@GPrïGkýÛ{‰ž™$>8^L½0þjN@›=Úi$M!˸úz +—p¹stob##¹Èc ‹ÜÝRDÎÂ7m Ä ìÇK=:ƒÍ¹²1[Y5Øï[}•æ´q•¹Â+¤¢úõbqýZvÏ“èû±ßôý´šþW}¿§« ï‡}˜tŽ¡~Dl‘òä'œB5°HüǾCh1Q½¨ÈCã°G:м¿z(µÿ¤K3…€’° øäf\EÛ>áà$ªeqh,t³ÞYƒCPkÁ^Ö7kˆ¹­§6ÖÌË£Ä=-›‚Q{’ öšØ ÜGµ+Iœƒ®4žQÏäö@=6éÙµWÖÀ¡šrv­SmX!0£kÏò`v’gÐ=ºØË˜xz´èþ ¬7`eënm¬Sa}kC¨Q`¯‚^¢O÷•CÇkpÐL‹#8Ê+yë²³Ý#Câ!òÊׂœ€üÐÀC­Vª%ÅœŠý½´,™a«{  +«x¾‚îQØÞ{ ±G…Ö ê– f.~êÛ‘c~EšD÷üÁï#ŸM‚†É=°w%8w$«Ð×L;3zÑbXY×5…îÃ¥Ÿ˜)/oX./x¸ˆ=<õÉ‚=]ºLägª[uu>ÕP +H + úÞÐB}&þøEîµòì«shÝZZ®±}QG¦z› §¦C]wh*ÝÓ‡}àØ»ˆ¹st‚bÏ›µBå{C!òÔ$º¿:bÀe1UHÎ0z6T7>˜äd..~¡së¨È)‘wûå ŃîéO'øXZ@A…#°î‰5?ÎÞ—Æ}Œ1ëìÕ“îm ,‰5Zä>ŠÐ€ÎÖcÝ£u¡aŽ< Z«rG‚¥Cöé )Õó;„€ò‘46»†éÒõx¥³ÅaÛýzK$R^|º_"œÖ{éç oE-5æÈ$šo$žF5\B±œŒ,öZ‘8‹üšBÄ>¤ä3sÄ„Ó30¶X³ÆZ=ÕÐ@ë—¨b/êüá•ci]k¦Ä÷Òµ|Ô°ðwgð^Ѩ…VÖša£©ggSÝÔÓ±ÎQ6Žê´Á_§]˜/¦Ÿšƒ<®«ž˜?ZQÞ¸š«za /o]-KaWò@Î5°7Î™à˜Ÿ¡+ ¦íJL¯×CrØ.ü jÛ +âOå¥õ+PW¡×LÎ-áèd>…ØOÆ•ùT<ùÔtòÜälض¢}­|_ûÔB¹ˆ½£ùð=úØg…Z¼ðÑb!éÚZ—&sûõoSœ›xx2ÖŠ©N}áýÅð °mô{`¿yéBÌaº_ë XçEMûqجÛóÙª7›dE‹…IÖt¯$jŠX»Æ|bŽMý‹FPßÌa¨‘90®¤Ó¾ºöï•>˜jZÿ&ÅíŸBc?Í? +FÒß;…÷æ#éƒîQwÑÁ^ÔÑdŽ]{ê­]»¡¶dn᪅š±|{ ŽÜÞ§;ôԡׇ”ŽâÒnÎes-Â\€Éë5͉.ÆÞ\ªÅ‡õ2ÿ=h\a_ +ŸzuN×=ÈŽ˜JÏ{/ÎdÕµ‹ ¡Kóyâ[aר'j^2Žæ¥ÀÿÐ?!9±{fÖ»ê{ÇCLŠ?3ƒÏ¼½bVà0ŸŒ¡ôA÷ÉšFqêÂ$^R¿Rü#ì…O»:šd´~IìžÜ×ÉÐI…¾´Y µÆf^˜K×Pp¿÷L 5A¬ aÝ5ãÈÒÑ?‘x¦(}´œÍ½²€®[¹Fõ…æÖùÅ”³POãү΃¶,b¿"ïöBªc˜yz6ü²"ŸøiëH ŒÝGbö¡)ÓBoºIñÇ¦ÐØ_ùr£¬¢e]9¯EýPVܶ kRlêí9È_ä ‹…Êv#¶òÍFEQó2j÷)g¡}·PQT»”Ĭ…ðÃXG%ùñ|Ô¼ÅÈýãás¤¸“Óøô³³h zÛ›M…µKØØÊ±Tóµ*ÇíÚ4ÞA˦üÕjEÙ›•\úøðØÃÊ¥ßÇze æüІñQDZe«ÅŠVCèÄÓz#úºƒ`Íxõ‚°½úXä¶…ëÐ^•Cc¥ =£±‡Œj A«{’დOqi6Åa‡ôùðÃc¹ÄÓSäÙäsY}òôäžéÅÃØÐ£åêšyòƒ_6²‡ß™ümìôß×·PÜü¼•=óg÷Ù,ß÷e­¢òã:þèkséb«½òúSwéFËvîÜK‰«x³Ï½¿Ô"ºx‚Êů7êtï*¹gо$ót’|i6_Ú²Fµÿ©ÂªªVÜZ^+·*«1óî­ :Íž)ƒU…ô#¯T=^†úŒ˜reöe(Š/ƒÍ9 ¶ç÷½ØÂU½ÝÌ•¿_Ç•t¬Æº Ðm¢~®¼m mÔ²ÖåòÜZ—æSÎÏ‚ÿTT>_ß·­„Þ%ô‚`gRÜ‘©´–J÷‹Ÿ?†¯|Ô¡ lúÅYlöƒ…òЫ孫ÙÊÖbU«±PÙ¼z—ò’¦ŸqލßàÜå…õK`'°kEÙó•Ø;ÂîkÀi3ƒf6wâ…ܼüÝrYÁ³%òª?Ös—ÞXˆ÷^ìàï¼t‘.µÙs§žqÂò ¯Uo´àµÊÄc­äïžÉÅÓ-–ü©Wœ"íáEÚýÙòÜæŸÌª~YÁžyÅ+/5:)Ï<¶–Qh”³•o7Éö=[…\ šPØkÀeß[,Ö­N=øcod\^ý’.½Õ}¹’öÕ2õÝÙ +÷X]äÝlIÛ +‹“õ6ÇÛ²¿­gSï̆°y&Õ¢+|º‚®iÅžŸŽxLë¶>Ý‘òé÷"†R’ýð'1î ìQ•?5ËßlB Š‹>9‘äOÃØ}£Ø°ý£å‘gÆšä?cr²sìÒßeŠk¿+åwþjÅÞúÝNöà_·š×vZ³Ï~õÞ¼ˆáÚ¿²uoÝùÛïqïTµ5aR]c på{á£È^ú IWšœUŸ¸Xœxl­ªh4S4¬S?ÝÈ•¶®%¾g)ÆU‘zq:Wül¥´·ÍÔrïS…Xܱ^L¸8¹¢eXáXe@ÊpËQ-Â+'X;¾Ju« gŠu:ÄGîÐscîðSþtÏŸnøKÏ·ŠŸÚ W;ìăÏŠ}×+Šš–Ê*^­ä=7ãOtpCù‰Æòã¿q‡?›*Ž4å?gÙ¯Íùsí¢x²MRži´±¼Z½C<[oÉíy¾^Vúd™|ÏëUä±6Ç¥Þ˜ »„±{_­*ž`½V¨zÛ4RíoT¨× \EãzEYëJø>¾œø¿âÖX³—¿X!¯|»ÚüÀ§µìþ÷›ØÃ¯ åÇ>nQùl¨8öÙ˜;ÿAÅ_zGüÀ^qå³’¿þv›xæÕVñ(¹Æã +áL“J:Û¶•?Û.±'^™¡Æl~ê7CÙéߌä~aù›ŸíewþÍR~å7A¨yæ)ÕÔû[^¿¿ËòâýíÊãõ*n›!·ïí&œŸqs>b+)®~V +§ß(ù²ëyâ ¶¬¶ä‹;Ö˜muÑ2µöì-N¬…Zܺ㭺\ë&žxc!œ~§’Ž<•UÏÊýM¬PÞf î{cÄW¾1àãÏOƒ¶{b«®^HõT3n.~cÈ’ÜG‰½ñÛVáæG©ºÉWu­ÙC<Þ®Tk´´:óÈeëµ›ÞVçªÝ¥“Uò}¿®“=["|e®:Ó¸?òN®È{¼õ?ÔŒ…}íFÄ™¨ö>–Y­·µ8üX…|“-¾Ž‡-T¼ÜÀk7“N·ZŠWŸ8*¯6»ÈŽÿm‹üܯ2öâ•p§Ã]¸ùÚ‘»ôNÅž{Ï —Ÿ[ó·:¹›_lÙ;칇oܹïܸ»¿8(nÿÍVqãw Ùµ_Åí/VÜ£×nÊŽšXåóqbý#îò +öø[[õi“¼¤ãgyÅ—µ˜ÜÉ—,ö¹$iµâO6ó\Õ³ÍòÊ—k„}ÏŒUçêìaߪ‹œ„cí{ôµ){ð¥¡p¬ƒ•NµX —:¬‡3ÿlÈé+N?7—Ÿ{­P\}¯boþfËßãÆ?z¹ƒ{ðÚ•«{±“«顸òQâμæ›WÞ‰Š“/dòsïeÂÉ6½ÕjÃ5µ{ +¯Z£,><È>5'ËÚ:ÝÌ;íÍ¿ìâš^úr7ÞÙ*|ÙĦ“ê—3 yÖ4©/'¸ñõ*³ôÇ3ÌþÛáôK¥òNín»óWw+ ž¬çRÎM7?òÇùÑß7Ë®ýÂÉ/|dÍ«þ²J–ûn¡yÑïKÄ’O›TûÚåV'UwîùXÔÜ ÝúàN¸å͇~Ò•FgåÑVQ¬znJ±ÊÞw§±$Îñ{>l"˜p¡ä¿w”,¿q‘ìÌŸ&òêß­Ùw¿K_$IŸ& _^Ä󾎾4Çó¿½á>¾>Ö¤8>«R»¶•gGÕ&åg<ŠÎÝöòH¶âã_C¤÷­)ö/NåY¾y –Þ¶')Ÿ·&°O^î&÷Ó»ñÉŽ¿öÉV¶ïÕòò+•W[Ü,o? +Row®¿µgO}Rp_KÒƒoËöêd©¦Í_¸Ñæ"V?Û¡¼Wï£|ØhÙp+Z|Ðæ©¼öÄM¼ûÄMºÙâÁ_{iÇÞxµUºÚDì±ÎEyë¡»t»Þø< ÓŠ×KÌNM0Ëkœkvìß×™]ì4UÜ{o/v4E©^?JU½oH_·Ä +ïÛb¥7-‰ì³~æÿÕÊüá¿XÊþi'«ûÕ}ñÙ_øÔ§üÒf÷úl®ô¥5™­{áÁ^{£â½3–§ßͦ^Ÿ¥Èz²Pqðóf<'^n¶³¸V»Kuõ‘›êt­òx³…êTƒµÅñ+î\‡Ä_x¡’_zÍó×ÚíÄ[Í®ÒÕ§Û¥ ÏÄóÏ­åÇÿ0”ŸýhÆ‘øË_{f'ÕÕù‹O‡¨Zëc­^ßËt|q¼ÈåÙÁ¢m¯NåÛ¾¿–+~|'µ×E‰5Þìõ÷–üƒgî|ÛãË7w3mÞ]Íqê8RèÖVžïÙT”¿ëI~¶GKIžÓ³ªl‹7S¹Oo#d:›ý›!ê?ÒŽ´AbpåhEé‹ìþüÞðmˆ]²Ë£MJ?/änÚfùünªuÇMµÕ“Û ¶//娼¼ž#4´úÉîýaetªs•yäå±f6~Ý ,–µÓƒ‘N?µ¶~y=Û¥ãh±gËž=íg‹,šªã×ø£m +q‹©xšÜ§vY>½¯º^·ƒ?Øj¢<Ú.ÂÏðÏ[œ;ªr‰Íå>ˆÌŽ˜´}s"ËâÓ­tå—;©ÖoϪýŸª©MV= É:ñ08kσðl·¶Ò%±[Û×§³:Žä*?Ô§HÚm^]Ëæš?ú˜éÜ¢¨úcƒ¬èõR.âÂDvï¯-/6îT^xé ¯ü—µò”3Í2fÊ.ÿΩž5ÄÛ½¼œ¿íù…‹w B{s˜ôª)vë›ûYÊW ‰\õKÙí/æçÿf"»ôFÁÝæÌÕ=ó”5þ¾{ý4cbóêB¶ø¸Æßôô_6W<žg²ïãb£“_at³s³Yëß]Ú+óÊjÃr ëÂóc ÃSŠv¶•Ù½>•«üµ.]úåY²ð¥#QüýY¢Í›³Y;ZJ Ÿȶz>Ãüñß·™ûÛîЯÆÒég$ÎÜ ÄÆ§Þ›ìÊU½ÙLcîÉv¥pˆà¿ƒír‹Ê§2eI‡_X·\‘s¡bÿç Òµg.u5aÊšº áÂ[+Ù¾¿¬–eVÏ’§Ü™a¦~0K~ñ“\ù¤&|Û‹K…ö¯/¨^Ö$‰/£,>Õdîj)*Š|’Tñ$©¨¤!4/êIR™²½:†}Ú±ÓêÃ}uhsZiLSlNFsXNeC°ºª10ãp]P&¹Þ¬˜ÚøìÄñY‰u±Ù^M¹9[ßžÍäß¾`~på.´R^jvV^kvSÞy¼[ºÔìÀŸhcùCm¦âç–xóO>üo¯b\Úx´í-qkÛ_ìÒv¤Dùòq<[ý‹“ÙÃUÊÿî ¯ÿ7Gã»&†W;×—¿^`²÷óñþ³][ßVgÛ¼¹šÍµ¿õçª_mç>w'øÙAªh5á¼Ø"žjT ÷k=,›oÄ;tË·y~!˱ãT‘gkù¿u^Ôㄬ€¦”Ìäú¨ÌÊÚõ±'™7Ÿx§Õ´ìN¹×à›~»Î/ýa£wjýcïÔòsm½OúÇþgj3+kB³’kâòÜšËs->\O?6&X¿¾ –?ýwó fŠSÿnÎûÝœ;ûNϽÜ*ìÿl•þ¶NÚÿŠåNþÎ +5/w)ßµ& ¯Ú£øW/"”ž¤I_jÓØoÄ_žÇ«>ñI»ÔàŸyšÌ»²úÐì=B³Kjò£êsU_n¥×t +&駘ïï\%œü(Jg>lUž|m-Ýió°|XnÙ|/Éêyu¦x·Å]Võq¼âý©ªU&ë°UÞiÙ%Ý&1ùÚ¯ÖÊÆ'‘‰u eÁÕeVÏî©…›Ïœä‡þj`^Ô´H¶ÿ×õÜ…w¢ÐÚæÙRRêüìH±å»{ÄÞ̱|_)ýÖ”jóæt¶okvQᓼÜ'áEníûJ”¤ò/Ÿ†:¼<^ÞšTÑ”—ÿ$D}¸! ãõ™çÉ8]{䯾Zœw©:(ûøÃ u^MD–ãóYâçöDáyk”êqC´p«ÃEzøÄ[|Ðì-Õ>öÇÜPWG»NÈŽ¯Ï ¯MË iHË+®ŽÈM¬M(b_½ 1½ÑinÖÒ鏸§äGqy÷¢röÜ‹ÈxšE쫸8­.¶Ø‘œ›âã§`û†Æ7: em¸ã½]ZŽ•¥6$Hzœ|ÀíÙ‘ +»W§søæZ_¡öÑÎð'i•'<®Õûe~˜¹§6$óD£æ½fïô²æÀû7Çs¾ 5yÛé`úþß]ÌþèÜ-ÿãK°å‡ ) ™y‰õ±¹ó*ïEdù×gå¸7•dy4•æ8¶U©Uoï¤X¿¹¤V¾mIU¾hIR¶=‹Îýi£8üo›…ËÚZ·Ödy´î+sm«*´qÙ³/ûÙ¿<™Ú”¹ßâéÍhãë›öý¾À(áÂh#ŸâÆÅƒJZç˜ÖþMT¼{èôj^ZKx^þã°l»×GÔ¦éÜiøªÓbËÛNió‡Nåæ÷‚Á‡NÎðS§µéo¦ïôäoˆäÿhˆ”ÿúka{§´%«u’É©Î Š»·‘ªÛ|-7Ä9¶Ÿ( +|œUšUSTù(,Ï·%¯Lù¦>Qhj áŸ>÷ŸÖ‡*ß5§x4W7dùÖ羞}înp¦wS>ñÙ—óTj3¬ßÜα{}:wW[qYÂÓø²ÆŒ"çŽ}¹Ü__G³/_ +oZˆï¬Í°{s&×¥£*W[^^nSX^ÔÓ„BáK[¼âõ/þŠ—¿û™=é´6º×i´ùä§Å[Òò†mN90rSuç*³Wlÿ¬OŽ©KÈ-¯S“¸§>|/LU“˜éÒZ‘i÷òP&÷ácßôÖ—»þÅ–Äq{¾åeÃóã“‹NÜ Q_{yúNhö±»¡äoCÕï«÷Üȱ}Ebìû{ˆ¯ñu yï©oU¤WŸõ°Þ'õSëîäÏäqøºˆ§ ¹²¿}ÞÔÞifúG§§ý«#Ù{›ƒrïµz¥]höSŸnöËJi*ÿx”$þQŸˆxhõéŽÚüÃ_vm¾Ü¹Ò( ¥ß†mnZk-wjþl.1?­6`æ/YÎ,\¼š™»p3{þÏÌŒ…+™Ù ™ò@uþ¬Û÷¯SÖ?í\¯øõypPMzæžk1Ù‡oDdeÜŽÏλ—]~;Bv+1'š`×–}y»·q¯ë2¶uÏ#¸¨ ­&®°ìnTÞžaÙnÈ©ÌÎ3où7'‹Ï7Ó÷Ô…d_#þíR‹wú±gÞiÇž{gðoŽ5<ðe±·ºÿšÍ"3m¤>3¶›3šÑcF2ƒ˜ÈCŸ|?µç̬&0«W‹Ì&É_sƒ*LkÉ2–™8`$3‚N^5œÑÕÒcúkþÀ ë¦ÏŒì9‘Ñ4“;r>3eÊ +f‰³:¶nÈÆ+K :Ù«ñTÜí´îþâfùò¾ºênDîí»w«3nÕø¥_¼˜Y\–“S•SŸXVŸZX|7*÷(Ó0uþýèÜŒ19[ß]TË_þéžêß’žÛØê•ÚÔ¾;…Ì¡ùß߇4wo<ðç̇øTô7 :¡·9é¾¾Á_go:ýo Îv.1È}:q¥™3^3vØ8F_o<¹†!Œ.Ó›éÃôbtÈ£ùi(3˜Ñ×ÂŒ¤ÏÌZdÊ,·L×Zéu¹Ïª‚O£Ö·vn0ùµs»ÙŸ>®¤Šï^'-ŸÂÅÖ7QÒ›ç‰/ŽäF7$åÜÊ*¿¡>x'\MübVåíÈìóÕAê2öV‡e¬¾|'X}ãvpÆíe²³ê¢òÛÚv%u¾vKûµÃ§øÏ÷;_–fýµÓiíÎk"n úYòј³d 3i¢>3}Ædf•»æ¦Èýzᕃ×9øjM­Ïôgú2=™Œ6ÓþÓ&×¥Eþi0š_îFžéC®Z‡¼ª;ùI‹>ׇüûQw +3{®È,U$h®=Ö9Mx/\}5Qw9!K}+Ns+.+ç~tVÞí˜ì=·#³öÞŠÈ:q3,ëÊ­õ™[!™ç¯‡f'sóXuˆúԽ଻5þ±õ‰üo/ã„_šâä~ ÝÝž“{½Äàg»ÓrZƒs6¾î4úÙ‘™<|2±Ãäüqn=ÈYiÒ«ÀØô&œ©ó¿üþ?šôjðJÜ]¦‡Æòµ/Ó]³/ùi3lÀtfæfmTƒžÙG7>ue+½oKtj?˜Wu3"ëö­àŒÊ»áYU÷òˆÉ¸z/0=¢.9Ïêí…´ÈG)ù°Ísw‚2ßVçUGf9uìËþlOäÿÚÔ’’ßðÂ3%£-8Óø¯.k³oŒœ÷óF¿Ïr =éùw'gˆïuÉ5 &7|‡ï5þËÕüçCƒ^Ý?_·ù‡±Ó!ï7„ÌÅiË™•ñφ¬;Ü9Õècç6þåÛ(ÕóúdëöË™í²½óò¼Ÿdç^¿N°,±IŒaÞ˜lŒãéëÙ×nÓqƒ/=+$«¹:(ç壀Lésuy?»-/;y“÷Îætúlzй~‰‘3€ŒÐÿëרùõŽàí¯÷L¯ÇfìX#fæz/fyhC¿u¯;7*¾<òó|XœRx->û؈œ‹·B²/Ü Ë½p/8ÿÔýàœ«·Bsî\ ˹~34+õ~œ:´.-7¥&.'¹6&»²Žä]µêÃ5Á™Å5Ùf¿uz®¿Þ¹p]ÔÑÁ«ì|5gÍ\È ÓìGm°=‹ÿhsšôþkQ;Å×ÿ| ]–Øü¾{]óPƒ~çz’½‰WÕe†1´Ç3#†®e&/ubZ•k®oê\/ÿåU Õ›sIî…f&WÇg;·Wf!vk.Ë.C^I°WVùêÛ˜•ãÐq@ç<ɬ%˜½©Ñ;½ ëz§= ͳ~ZMð…´Ê+­Ç¨áÃþ¯÷¾yüóµ~{׫õõw]×ÝÞr‡tÈ¿~tövyÔ.¤õõZ{Ñù§×.3u±³Äñ¨öúÃ3do:½mÛO¦yÔïÉQߥvèÚ\–Õx3¬ðÁ휧d ›î…¶Þ +i}\Øø(0çúÝbŸÙn‡fÞ‹ÊÞü©S9g…’¢;ˆÎ­ÿ“_øŸß®óÿtàšz}Óîä_OzýýÈ?ÎgÆL’1SVîfæIE?WvŽ2ü¥ÓζùHLñ•¸ì£W#s®ÞË»{+´ðÑ­°ÒšêàâË·CóÎÜÉ*½©¬ÍÌÂ#¬.9‹ÄwuN}¸ÚæõÑTƒšÎÍÓ&Íý_G—7Ô¢ç¬õOcªñõw:䷽ɿØ!Z£˜~zdœŸ4‚ÄøÑÌ í L¿n㙾Z㘽¦3Ãô62SW„0K¶ÝÐ^u«sÿîVÁ-j²BjÓr¤Ï5‰¯&;·V¨‰ÉºH|e) #ð5Àä{‰o½] nkõÊ3Bo93z¬œ7ï±÷žqU]ëþï¤*ETÀ.Šbï» ÒËZ¬5û*téHï ]”j)6ìKÔÄwÔDcïšbbÔì´]’sκã7HÎÙ÷žÿ=÷¼¹ïœù¬ ¸ÚœãOs<ß_ 3ay&3Îc3Þ­ˆ½"‹qpÏfF¹ç0“T̬ ]Æ‹ª^ôw9k˜¬xcX-¿úKÁÚ;kJ®4Ötz}ÛÝËv>¼\Ö}åJÑVÔ ›oU5§>im¾Jê„G·ré:¤æ‡‹.G ㇠›ù¿Žå¦4×BŽH¢—)‰eVŽÄ÷;1CLÇ??šXä j›vä?{ãÁäüÆ0C­œ;«1Ä7’Ç€)Ì`{âÿ|Çé!ŒãŒHfÌìXfܲBf\@#3Ƨš™yÄØ¹üÕò#†±n .$ŽÓ}y¾,á^׿ºK5[Žœ/mº}iÝÖGäÜ>¿RØpî󼯝îfÕýõANë›g9;oÝËkkÿ¼¤1ð·oÓ¦k2ÿ?Ǭ7þ¯¿ÿéKzsa 2ZVd®Ù“1Fö&£˜!ýgÒ±âàFlЗNìpÔ3j–H|J3bœ3d¸+3dŒ3dV03z1™s5Ìœ˜c&ók÷[Üc¶â¶aŽëmƒ³òçßc#Ÿô¬¯º¶±¡õ“Š­Äwn¿Drib£ÛžÝÍßñÍý¼ö×óvþø0·ýÛ;…_ßÎÇZR“÷sƒÂÉqáÿjÜLþÅ?öúr.$û°žÌ8ŽreÆ8z“ópa†v#¾b3x(ñC‰Ï$óŒÌµ‘Ö2#†/g†¸0#Ç*‡‰3vN43É}3ƒí`f®>e<§øVßÙuÏ,Ÿ1ŒZÚõÛð•W s<_ìÏr‚^ž./»Üаù¦¦/®”u_»Z¸íìåâ­ê›¿†*>6øž õÅÕ_C¥/_~mˆóøÜ°Ü¥òšÝ~cÿÇóêm4;„—´¤Y"ôpf §Áý§1#H<?;’™â‘ÉŒwcÆOV1cG/cˆ¿a;<óæ2#‡/$9¥‚3M`ÆÌÒ0\“™5Ì ¡™™·ú#“9u_[/üÐ0Üõa…ÛW†•ï ‘Š×†é»ïË¢ž®{¸w[ø7'ãžìkî¼TÙÜ~y}süÓž!ßÝØRô ±óÖ­ìÚïogÕµÞ(Ýâõ½Ÿí—ô?ž›9=Ÿ~46`†PÿaEs~+ú9ü¥½™ÉAF’ù8„±5Ãѱ·™Î ãË8­ ùqÒyÓeußZvÀ0zÅG†IÈ'Wœ1L\ºó߆-nzm·°öÕÀEE·¬eœé»lÃ]O&¯z`p ü«!YùWC‚üÓµòï?Üœü¤µ õjräšgP»^-ÚúñõüÆ›Ÿç6<ý,oËÛÛ…í÷?+há~zšçVø™|üûÿÆ6-þˆå°OdÆCúŒ`FœÁŒêËL÷Lb&ñYÌÄÈzfZÞ)ÓéUŸšÏÙð™ÅÜÒOûÎÌ8k:3ÿ‚Ùüò[–ó7>³ž_õÈz~þõ¾ 2¯ôY\z»ßÊ3†é+–®8dprÙôl°Û~ÃDÏOßGÖï¥Aã÷Ô «ß2ÒïmoD΂óÚGrçÂ;õÛ‚’ñö_É€§¡;øTæOþÄ*J _!§9M\ö?Ø¥13øõACH><Ô…<Ú2IÉL\™ÄÌàÊ™i\3SSÇÌ9`â¼é¾Í҃Ê d|î毼cXÿ·¤úáÀÑ{Mfj62óô[ŒÅ0[VtÓfyÕs;×í?\uÆ0‡ä'^¾3«~{—&ýt­Ä÷[ƒìUý¹ƒß–§“”µ×&ñÇWÊŸ›¢ùø—Õü‘ߨîs•öÿG æô¯!Ò¹C䓯uú3÷¢µŸ7H^{ÿ>Ígç«i¾ óüo”ŠÏ ‚ê¶!„}ü6Azò OúêÞºð×m {uq«æ‡/«…o3UŸtìßÖHß¼(-¹[ÛvûfvméíMÛÜÚßë¸àa—ƨÚHîAæ9O;«q̈ ˜ñs™9žqŒ3WÊ,âó˜%±m¦‹®\ñÃß *¥áÝZÍ_Ïq¿ø?¯eÿy/KõûÓÌ€ÖxüjPxþhPùþjÐùýlÿúªÔÿ•!ث擑¾qž‘›Ìý®|Ô· áû_¨,<0T}Ú(|ý¦(æåÁ–¨¯6§<éÚóåѶ¥?#†Ç˜‰õçgk÷?âÅs¯µÊ®¿Î÷Hm³7y ­ÓþO‡ ·QCœ™ ÓÕ$Ï­dœã.™-Üð¥ÍâÃb{ ½~4ð~7„ûýfˆðùÕ ]ùÔ°Øõ–a®û·wÿVg=hlÚ«°±ùvqSѽMšw‹±†âClÏã¢ÁÙó´až×-ƒ‡â©!DõÊľý=Wû˽MÒO_UúŸ6¸Å»Î]Èøx¸3è£Ä>F®ë‰‹Ðpi¶&g×Hm|ý@¹ð”“°ïŸ¾ò©·AüÞ=…’ÃcÔ9{‡øFÖô™6GÉŒè7î¿­ý—mš<‹äXý'1ãæË̼ v㥛^ÚÁÿ­ú‘ΗP密8åß ‰5Dø>&¾à ¸eàü>3ø+ÂØ·†œÀo ±Š[)à¼ÁKÙôrº²ô˜ƒ¢óÛyêÛÿŒ¾ÿ®Hýƒ!SõÒã·ÿ÷ʪ“Žªæó=?z ¾“ÔÛ?ŸÍ՟Ƶ]X ¿¨9u]«»u-7äÑ'ÕòÙoB¤öw«Ä†ÛÎbÍ_fЧžŠ!O/Vë¾½U£¸ig/áÿçeIüb“‘Ì€¾Œ­ÍRGÏgÆLñefúg1α‡M+¿°^zøßG¹Ý1,!óIáuѰ̫ìü¯¸NK¿¢Cü.<ħ_äÄ|u°Uÿî“ÍâÛ'%ì÷¯³®Š [†(V›*Ö¦š+ +Ëlü¶žrò»fð‘_=)“ž<ÏSVå­Ò0¡™¦Êÿ¶œ;ð›7›¸É† Í1.”£Ñ^z']x&]{«ýìfzྷËÙ¿¸s{¿vãwÿà.Ÿý*”¿òS¨ïyƒËªµû¬ÆL\Nëì=lI̘6“eIŒ\ó/ô_uÇàâûƒAø£!Ùï!ˆøk­’Ä]þ§_Šù_Þ•øßàÝ3p¡‹'³`Ñl& 1Å,ðÄk/Í“ë…IÏ÷vf>mÞþúÔVþ‡·ë· ²ÏžføV]vðÿÐࢸdèüz޲áÜ凿yñ})r|Èý‡7—¾ÝN”lâÈ2œ>Ö„r’Àß/êpZ/ü ¿ü$]õ~ººãÝ6¡Ò*0³ÅÖ/y‹õRÿdf̰y4F›Ðõt£?ìÒŒ`BâÚйÌDg–Y¨¯6rÙúíp×ó†in Ë}þnг¿}•Ëÿþ²DúÇ£ !o/4âÞŸôæy©ðàûtþÓ_"¸KÿЊ×ÞÅk<)ÑÝ|V(z«å²Ûûºú2Þ‹1¢Zd°ÿ]Õzsžòìx*[¯ÏTel°A4»ýÊnßáø÷jvû½ùlAËP©lç(톮 RóÍ¥A{ +ú¿|ž|óZ™þüƒxùä—Zyÿ ·÷›U\óçóÕõMÙbûmö¦ýèÚÁ¿ËÁ&3£¦¸1Ó|™¥‰‡û¬úÀ0Õû;ƒ@êËÕX£óykü^då}C°ÿ‘[ì‘oæíÌx¹©™@U0#qÁÆ¡19Öaë:&ÈÛ>_&UŸžà§bœÇ gÁ,ÅcòpÆc¥3Ã5_™§¹ôppîkI½í“Ù|ÊÆþtÿùþïýèžè˜| !,Ó,Yyç×îrÇ+±þ¡ó•›öÐSI¼û*Usíi2·ç«¸úKÓÕÇö᯾‹½NS|c÷¸mp]±þsÛEQÝ& Wï3]ºzŸ™kÌþ>§û»¯;kçµïçé»·ÅØ‹Sx¯~÷úç\ÿ†Êí¯f)»Z¨8apìùmy`zËÀ¥K]˜™ŽÃ™9#F0¬—'Ÿd™?(<¯b8úÄÿä.|ú2Z{ûvžúÿ©ÔÇÿæ£>ôww¶úÄ6o£-W·gô‰‚îÑ<ÿ]XàÑßÝÕ/Nà³»‡²aùæê°436:ÙŒö½ì{¥>ûERЕ‡éÜù·¢jëg³TÕgÆ+ºÞ-hû~–OÑ©Á+µ…Ƴ\ôÌ›‡O]ÁŒu aæ…Ö¹n¾?Äã˜aºçeÃrÏ+äq‚øýÎï&x”¶óLÙb°n÷àÀÚž1ÕÊÆ#ã]æ)z¾[¬Þta2—Ó9”OÛn'eµò89G +ñûy¹y3îK—3*¯TJF« 1fõ!ÆBqËõö«³ÕÍŸÌQïød¿ýùìŽËó¹=¯ÝÄ/%þã/eº¯r}ëqÝN¾ç­§îܽ5A7o¯ ûâruÐç7 +uW¼sG_—Ûh¯H«´ò)Ù;Ècý…aËÃÊM¦-á˜Aý»¾¤ uè¤Y +Ƶðê÷§†U>ßDþ§Šù7/T]6ˆ ®Ê‚ûÀÕäZ¦•õcëÏMáK;ˆ0âˬÁôwqg<æ;3+ÜYŒ¡½B”W¼Ï)8³a¨¬P3^ä߉ßJZGrÍ7çs›NM6›(VŸ¨é~æ¶÷®NÚvs±”»yz0„êÃù®¯W +­÷—òuçf°{~pÓíÿRÐ~w¯ZÿôÖÆÀCÿîÊwŒP·ÞœË{'=½QüöÓ&é×ÇÔ¿²T7¤‘xïýµó>iXè±€‹"”ñÔ®6òo}_ùÌ£`îÔ—*nÿžª}¯–³]ÜÆýNÂá¯ØWËüÅCµýå\¶ågþà¿û©¶ÝžÍg·áâs-„œÆAêÎÇK„ƒoý¸ýo=Tí·ç«ê/OVt}»@yÊà¡a˜¯úÁ½|ª;†°€¢½ƒ½|ƒwrNîŒÛ¢ÌÊEK61ÇB<ð2@ÞÿXÉw?ua“ +-•j=ƒžt/3ú„¼~èEw?ô:tCKûpK:ÁÀ`w=]9ÇUϧ¬·á²6Û +›NNAÿ‰®óqz¤ýOºnEiN=ÑéN> •ö¼ñZ_.cÛ¿\*v½sÇžOÍõ)ª#ÿðPu½\ÌÕžÂ6|8U}ò¿À«¿sþwHNõ¥!4àkC7ï#†¹þ›ó +6[±BÁx*uL€.ÃD•¶e€»¯†YæìÆøzéOoÆeÚ<ÆsÙª^-9ÁØÃ3€q]º’ñv`Ô +žÑèÃLB’sl‚‹;Ç…”öLFo®¸~$z¥ž—~!Çî¬ÖÿJ«îùÑÍß6˜/Ý=ŠíþÁ…mº1›Kßf§N¨¶fwÿò,E<öZ ½.Ù;† Ÿ™[p,W¼c8¿®c$[uÌIÙñpžòØon~^Ørs–b×Û=?/ +8IrÙkEàíÓ^û7ÑïÄ?—(ÊvSnµSîúeê Øüb®2w»›½c›^7P)G¹,XÄ8ŸÄ,›µ€ñ#óŽ.è‹^6°ôtéUv`±s çgòû_yk>¸¯‘O<¥cÏùðµ°ï{o®áôt¡¨u„”Õ0HÊï!ä¶Û:Œ«ìy¨:ðÆûäë`Í_î'p§T©üâ¦Þûà +uÏO+…Óß ÒµIò•±ê¿®dS6Ø©e6\Ñ®‘ª¶GÎÂùïôºgw+¢¿9½Cúæá:åƒ"à#ƒ{ÀÖï§ùœ²2 šñ’Œ2Úž4xªkÎMÐ&«ÂrÌØà S%¿ÆØu±+™3™$áÓ6 `÷~ãŠy ™n±šhªO«¶×núh®ÜuÛ‹ï¼éÂvÝ].îzî„þÈ]zÿ·n|Å>G¡`ÛP±´{4z½Ð/­ßå>OØ_ÎçÅ?îiMz²§=ôÆ•bÍžïÄê§ ëÏOæv¿uÎ|-«;_,eýèÉûÖŸ¯96‘Ï«³ç +›‡ªòÚ)«ŽŽVÔ_Ÿ¨ÈÜcç­Ï0öàâ|µ9& +>ÍØOnĦmµU­­³q]ÀŒícÇ "uÓLÛQŒÛ’UŒÛ⥌¿¯‚rˆl°§‹1¡º8I•4±f<9Wè¿èãËmÀÝÒ%¯³‘“ò¬Ñ3,í½ç§;u;L{ô¹ž«¿<ƒÍiÌ5}:[µ÷ _vd,´º”ÚXcŽØªæÔËPí±ç:~÷_Ýq¹†+3…â.>«ÖN¬Ü?ì@îô›@Å©¿¹ûÙ=ðø¯«÷ÿ´\½ñÈXUé!unë 6¡Ü +ãâ ý1¥†Ao>±õÁ|Õ© \êFØ=W~t,úJÕ«³Í}Iæ£Ð1¬&ÝD(êÉ·s7<#Ê:ö”g¾ñ@o—Ðz{ ·û‰+·÷™úÅyâS„¢ö‘bF­Ÿ±i ŸÝdÏn!q~ß[uû½…Þ¸°'Þ(¹K¯ôÂǯtüÅ×ÁÒ•/£¸SoÔª#¿yðçÞhTÿ¾’‹+³ò—BŒ”ÁI&èßâ÷ýè­;÷pMП®Óv3_¸ðZ§<ùê ŠšOÇyª£˜iCÆ1Sû&?G2~"£ŠÎ6W¯É6 K2å"2ÌÕúTS—•îÌrâ?—/XLõظ”6Bb¡•*$Ò±BNH·Ô¦UØRͨè, ),ÁTŽK·+Aîy¬Ô}¬Ž}È•·Œä3klÕÝ »_y‚k(dT”ój‡ÝÝtg¯G†];·.úî Áço¦»ßx¢M*>2Vhºï,Ôœ˜,Vt:òõg ›ŽN&yÂdUÏO.ª­7fæl±U­Û3\Y}ÁIÒ<ÐÍÔ ó–0K¸1®‹½U¸ú,U±åó&Lgœ,í™qýì˜iF2ËHþü*¨hçMíñ™èÉÓ­?=]j¾³,¨|ÿd98ÁTÅÊŒ¨1¥,Bha¤” Ð7Œ¶œž+t|ºœí¸½„äÒÓ1þê–;óÔÇ~ô–Ž~Ç«w?_!yCè.ðõçfp;.áÚ.w½ö¢s}ÓÑIBå®1ܶ›óÅÃ/…^°[áÒ×!â'/"ø3¯s%ûÔ±% +>ÆØÓC`<\Œœû袾|rí>¯{8¸Q|dA…M|G¼1¿¶a ±…QB ylúdúV„ž·¾bÕ±‰\l—\j-u’x~”äƒ[ YM½>rÓÉ©\û­%Bdz•ÂÁ¯}ÅC_)ø}ߺSÞö‘WÂߪѧÁv<]Ê6žŸ®ÚÿÆ}@¨e±ç[øø^½ëÝ2Uã§ÓU]?/Á÷ç3Ëú³ yÂÆãÙ½o]¹ÝïV‚›ÉUÀU}0žmº>KÕõíbåÁ_W¨Ó›m=B˜¹g1ÓíÇ2Îãf2KfÍaV­ZÅxû0«¼Hl#ù±O ÄøŒ—‡‚ñòQ2ʰ6³ÁìAøôhƒµ֟ȇs*â{¸cª·íò©óé*¾ë™+˜Ý\b‘•°qß8ñÀÓÝáÛØ®Xµ×I*l&–|ð«9õP'Ÿ|®§àöþàÎíûÉ=a|˽E¸†òººaüÆÝNê×ç G^Êç^†«ÿÃSUsq[ssš²óµs`ç÷‹ÕåG+ÃóÌ”r’±n¤ Í0åkmTkrÍÍvffŽšÀ,™¿’ñ\áGü¦šF$ØðÚÊ“tí×=4Ûo-‡î8tàªX=¨ª‡YØ0 ½þà¾ÈvM@)‰£„ü¦!BI›Ûþt è/·ÿ¾î£ébvË<À‹Ó«miO^~ópšß4þe6å +n<9™Ûr~ßpn†P¾ _udœz÷×˹cßǾUr»~rã*;—¡Ò'›(„ÕÆªà,S.¦Ê*º 2ñω%V`ꩃ³ÌÀÙÿ‘_½®¯˜¿s„Xur·íÁؘ¿$¯%$W÷瓪lø¸BK.6·/Ø‘béa'vÇãE´¹îÃéìÎÏ¡·’Ä¿ Ý©;áòÉÇ:ý…Û ò凫ùcß²Û?›+’ØÏnþp2zÑ¿&\þ2LµÿgWu~ûuJö¸{¤zï/.êž7+‘ïÛ\©Þ÷ÓJ°Àبd3¬i(´áÆ”ÓÒ|s®ªã3_Ð5<08ÓtåR_fé´E̪%^Ä.UL€šgÔÚ0c6‚Ô–‰ë¬ùÄKUT²)4()ã%<ÝŒÏl´—6ž¦¸®úô†Áڨ̾AQY)ÜX•i¡_×5Vl¹¹¬'°1øüíCøª}c¹®ÇË…Žû.â¾ç>ès•ªLOïzâª9x_-}ªRï{íª:ôãJþÌ÷‚æê“xÍù§«Åƒ¯ê}]ÄʽNbaãP®îøöð;oÚ»|æ[-{ìwRwÜŸ£NoÈ¥7Úro–³Ý߯à·\ŸÇn8>ž/h¦®81–ÍØnçêÀ8ϘÇx,óc ã ­/µšü$±G­0¦Ì²=”Ñ)Ħ÷3•Ú%ñ›bñéÂÞ/=¹®›ËäôÒRbŽ•\ºÝo<7S¬=;ƒo"Ÿ×óƒ»zÏ7+¤¢æBv½Tvd´6øœz{1gëÄI±pû0ÊÔÉ&õ`ÉÅKv ¶£,ɬÆA|BŽŸPbEy;>œD¦Õä¢rû€5× Œ*õêsôIƒ·'m85Y®þhŸXbÈ…¨ƒØ3_l%´À|QïÿÁM}ø'·çÛ•ÜÞ·îldzeRå‘ `»ƒS t¿tc ì!~{/ÚëùÚSÚûÂ_<öœϼР>—Ô{Þ¸ +›?œ +îâ»ý/s¹£ßûs‡ÿêÍn¹1‡Ëï†u56s«_M|fç³eÈ!¸Ö{‹Ð?ž?Ø‘j-™k¡q&\v­ÖØ®—Ëø¦ks¹¨’¾>ž2©ƒ<?_™‘R6 *»Ç‚M)•t&×r°”Ñhk¬ŽÍë«J5U…Å›@³ƒo½½Z=`iª{¦HuÍ[¼Oʸ.ê ö(ei“X¡n¹:WÝõd)™‹…­gf‹ÍŸ,äÛn.‘wÝóÑõýD«=þH'z Ff4ÖN(ChãÁIbÅNG°žø¦KsÀž6Oê$~ÿ[onÿ;Ouçó%˜3`˜IПI.´–Š[·p»¿]%–v‚în ©eP“AH¬Ú36 +†Ÿo ÒÁ'ƒùήI7gc +úòëö"sÛEª<>1@Ƹ/÷düe† K3“KvŒG !¾È +Xà +‰ýÔ‘ifž¾ã/F‘káö˜®|H²)X2"ågïq¢,ü¬ì™ Wu—«N¥¬” G'r[.̦š"»¾öÔ|À…}ðItäéó)!Ç?‹º{SkéÄSA{õQ¢îåç•!/¯Ô¡W¬í‘{"úò¡ÇÀ6}4ƒ%5»ã3gu×wËØê'ªÖ”õusU2K§.d¼IM¦›I¥Ö~Ð#Ö%+CSL}aÄo†1bX¦9ØSáÍ—}‚Z®¬¢ì´˜+°¢ [†¾˜YgϯI냸­ûà }è‰Ïb¤ú3³À¥S‰k¾4W8öV%ÿI­ÜýÓb¡ì˜öB5É)>š%¦ÕÙj#Œë‰å‡œgQW«CãMÁöçÖVö#KÝ4@_@|f±•G|]ú[¼É¬æ¡lTº™¿?‰¬Ä€“L5Öˆ=AÇ +kXB$õjœ¶Œ„Ž”^Ü_ή²—çT°¸åªƒÁ«#1̵—‘µ{,XwÐ-¢Ì¨´{p Áú`»-‡¾Õ‚…žjãŹȻ¤ãÏé8ðÉë¬Ùàh.8¶W·Œe+Ù·ŠéÛìš8ã@‘øF!ÂHŒÌêƒ"æ7ãÓªú+ƒâ¨†´:<Ž^hž¯1¦œâNÄä(J™áC“Ì _Dê”Áraý0hb!žC‡•˵À:™RŽ1&9‚žc.¤Ö ¢rú¨¥Ê)’ÀÊÏo"UíGêöà&Š»x _¸H §gSæÝæ¦C³Ú}Ú÷ÙÐ/§Fœÿ(3èÐm=eC6^š‹9Ê6_ž‡X.ü,T¾ö<}z¨áÁq‚Cˆ/[c"¤7ø¸s¤\ÓkU|ÎöÁ¨üØ0#—¥~Ì¢‰ ÷þŒ*<ÃL­K4ñ&µ«›—’äÒ$‡ÔDSým%b&7øÓà—‚ýχ¥˜©ù(c>t­™œ¹É^Øxx"| ¸Mü–óu‡ȺϹæƒi”]XÚ:š?ðµ¯|æEîoRàQƒ_yb<;Ð'ËiÊ­N1óSªè΢¯pª¨sOo¿HuÊH æÖ‘˜^` mN>"Ö\LªWIì L(…Zf„ÐS9™ØXZé1™Ì¥‚–Ð#»H³ùØtÊe&9´šhFyU›NÎÔÖ™.4«ÄèspêÄæOÉ5‡¦‚oØ«oX`­M®½nèkðm7‹]wÜ›Ju³ ·Ssô±FöîÍ‘‡"ßr}!æ0´ 8r-¡› +fªÕ`/Ä•[±á©fÐÊÒ¨Æ&l óR)…qk2Í©–Pi‡£°¶ÜFLòâïÀþH­GcyzXïÚâ'ª7SÒ<ºOTÓçOê°Ò¡Õ¥&1z[ÂÚõý…Œ;ªaPÔî ­8<‰ò¤°ÎÙxj¦ÜuÛC»ç¾R³óž‡ØtnìR&Ü3G<¶_Y(îüÜõ fï‹®ëÉ +)¯…\§{hʰmqû~ôsBÝþl_Ù3F.hïæ½ÊƒÌ'‘bʬ¸5Ešxc.2Óœ‹ÅµH7óVH¤æqcœ'ÌgM_À¸»‚Ëj¤ ‰5áÓëm…õ‡Æ i5Á‰K•ê§WÙjóê Ý7zæŠ îÕgŸŠøWìGAÌ[Hê¸ë3õMÉyÖlû­Å”ÿsþuˆp毮õåbhŽ ‰mÈÜ0ö%µ— ÏÀùîçnlãÅ𓞞,ãå¥` wEÇ }“=t§¨Ž4™õ!ÆàrZF-‡ƒåMÑ ¹ÖRb†’jF™òÄJ­W—êÚ.­”k?œ »"SÌÀ·][$¶ßXî—”¿i0͵¶_]Èw|¶: º¢úÚÒc  ÛxlX‡|ËÕEÚ}÷TüÞo<…µ6lh¬)Õ9/ß1V³¹g*tޝ}„ž×¾4Öw?u¥,¦òãÄèrK1¦À’#óOEÆ\i©æìt¾õñR¹þ¦3XqÐQØa- l"qÏWžTó”ø1¯m¸XÐ1‚æë›>ž!íxî"w¼ôÔu<õÓu<ôv~±ZˆšÌ{©¤s4X†àèa?øÆBQ·Í96œš"n¹±@nÿj•ÜõÒG×uOÜ}G¥Ùu×üD2—ghŠ[Fé +ë†kêOÎ;n¬”ÛnºÛt¦9Ém„òÝcH¬›LyzñU6ÐÄäÛ/÷¾ñ•z^ûcÝë¤àA å£iÜO&~ºòÀx¬ÏûG±ñ•V|Zƒ-—XÝ[e®CŒ\—­b–.YÁàžPe-w°À„O\Àñ¥×ˆÔµJ•ÈðqfШÐÖ_p¦h©Õ¶T›–Ìs\ m÷m?që§ å­ÃÁ‘—RJmèzgÉ’wÙh²,ÉŸGQ^ßÑï‰׼êÀnBN­=˜Œ +ÍÛzu…Ôêऋ•Ç&Â7@;\z)2Þ,(ËH}a»£¾p«j0>~<ÈÈ×ÏŸa¥`#ð7ÁÛ‹¼a>"ÉŒò'+{Æk¶]^"5ßX +]V0G©<د$”ª:œÀÒT·]š/}Âi÷ÞWÊ`qëcL¨¦ —àžÏEM÷âW ÝWI(Åͧ¦òi%ýÀðSJl uŒŸbBrs¬=H%»Á|F<gL(Ý?FÌîÎFf›CcÄŒàòñß¹Š[ï/"6äˆÚOÎiAÙuÝÝØw£æ…fÖÅè:\ÙÞ1°y]Û°ÞÄÎg+ÅÖ/–Cû@^Ûº~КvÞZÁv?XN(ÖD¨ÿÅu®8à$´=[®ÛùÈ[èüjy½¸úìš!RØZ3Ì{¬9ikOÎ:o»j÷ÞUí½'hÚï¸ó-Ÿ-‚f«T|:XwRéA'ª{UñÁdM÷7¾rÏWJa×_ݹΗ˥ò£ãéúqEåÛí¡ÐŸü"BûÁ“ ¾öÊ z#¹n—XiZ7Ô€Ð]WH«ÀA”R›ìdòþ”# Íbw*1ÊØÏKMyÇÐV¿PW}r–¾l÷)uã@Mâ†šÜæabÛýÚŽ»^bý§ó´9µC( ñ¼ëµël q&ý¡Åm#yÙ‘—Jíé‡á”©¶n§ÃŸÚYÈ£xíZâãL¤D0E[†à|uùí£tõCÀ@Õços±–jnx .>ÕÂË*(7|ê¬Ýqß#¨õ®¦ù¦ ÕòN*·Ñçl®Ûpr4¾‚R ±‘aAu°É÷Òeö²¸ÅÚžÉÒáJÍ¥ÛÑú 7Àâövõaüø^w×MÝž/5»ïûs×–P7jÊŽ§+H =ÌAÔ#ÚµE6\(É­HþKµIÁ“x6½®´kb=xÂúãø¸ Öê°t3Ô=Ð/Ñï£):0†j\V˜ˆ\Ì"šGl>>×¶¥–â¡Ëû×î¸ç®o{â­­:5 ù/+Eò!Fâ4¯ Õ@â²P’Ö=rÊf[0.Éõ6‡®¡¶\¯O|µUgg€£Ž{Hˆcœm,†$™iSJúSçÖsóuí÷½ƒ:n€¹ Î3ôޏnâ϶ܘGuòÚG€Ì·½XÆ×:[(?1AØt‘ÔTÇ&‰ŽOæv?vѽvþ|šîÜÍÕªƒïÜøºó3„ÍWgŠÙmÔÇBs÷éÄuíX׃>øwÐî»^¬‚»ãéNüªJ"yh°ÑŸzsºÄb!2Á q‘êf%U„V +Öß©†At®æ6¥¨¿\Câ «àrSí,â¿:ïzjzî«Àà÷~åÃv<ÚY«K,Õai¦Ð–e¥XVŒ1[—Pj£‹.²‚Æ eʆ¦›K”i[dM™Êë÷Ž“Áç†DzùèpCgF¿ó?4V¨¶qb¹ Õ-,Ù3.(­zPp| 4U4ë»ÆýÉâÖTí™Àõ¼ðÔŸ¹|ãR¾tâ…›ñY¥dzuš¶….eqo8<‘êaÃìzæ)ï¢ ÚýH-u~å.’Mµ³H̦:C¹ÍáÅê©v–ö_´³Øý?¸¡>Äý­?ŽæJ½ÚYeT+€jÛ¤ôƒ6Õ†§\ÚîQà?ÃöþÔÎÒ¶>Z%ï|¶ŠÚ1™ã*1Θ%¶­y¼F ­†ìMƒOkŠ;Fã;IQRDnèËëZ;^x@÷€ÂëcÕb¸ÕofxÕ¾ ð1”ƒX³ªÔxnž¦ý®;¸ºR× O0…¶'+HÌ£Üy®þÿÆñŸÜùîoÐéÂ}7è…!iã2,ÿÐÎ +í,Ê+ýS;+"·¯>oç(MÝùyúâý´$žQÿšu–T·+§e8ÕPÌÙ`K]Q“Xúº\â ɸj¢K¬¨}×]X€×“xØ¿÷õE½¯Ïët³ö-&[ͨ¨[ß=!¨ý¦OÈŽ»´nêºûŸÜyþOîü§ªÿδÜyýì½x¡ALƒ†¦6oÇHMQ÷h6*Ãkìšì>Rê&[Äxèfp¡F +>؈…ŽZÉ'¹þÖBä¹rNÇpÄ?hûñáÙæj!ØH¥Ò0ÄNL©ëÚÒþT‹=½l ¶p»ƒ.½®W¯ s~ýñ)BדUÐ%Âú¢šä=Жι—eüܽ¨v–ZÒ±ÂjgÁb¢"@ϸ«H|‰4F|ÒEdõÕEåXè¢3-4©}äȬ¾ðÑÐâ¦úÔõEÛà?Å„, Ä{ªwA®­´í¢34~(Ÿ>uƒ-òV-Éõ‰˜¢m:ë¬Ù|dºfãá)T³­¬e´°û®öÞ`­,n)m“­@ÞúfRÛ]Wä¤XÔDZjc ¬°o„jc•vÁz Õþ-èrR×÷çÂL©–‰™4Fþ©µóîJ¹ëžÖRþÔÎB¼Õ¤ÖÚÁžåœj{è•A; zɨÍþK;«¸W;KOêýàXSÄ}Ú¦Arxš9æ.þÚµ5¶ÈàsuÅÛGQ=³ì¦aú¼ÚaÄEìòúPí-òú ô̓ñzðÖÿõõ¨ãµe;Ç‚¹M5ûk4]^¤k¿ìTq`Š&·f0¸ÏÐ{¦Z°•G&»¿÷÷~§GÚ±ÐÆ£¯'±kBóGó4ëwOèÕ]O6…V"ô°ˆ{^þœÌ(äcµ†QJ‘F¨±ž Ö2ÐÄ–ˆÏë®ÌF.)'Tô T†0þ~ã b}”‰.gã`}éŽ1ÐAG]NµMw*OÂÚÕ‚­84 {ì)@ÍÊüÎ[j¸8zóÐÎ +À^I)ÈÚY¬ 1´³ˆÃ?Qí,oòyäíw]êF;mZñ€ ØL«àè’~Ðh”ÃÍÅð3M<‰ŸÐî">Y®ê Dh¨ÑµsèšµÞ^.µÞX}WMFã`}a§#4*äŽ[îÈóqŸ9ØÜTŸp}ÛX¡ã¶+b ÕH¨ yGÑŽ‘R9Gèrt}Aò­›+õùM#u1…VÁ™Ã‚rI]¿aï$ÝÞ/XýûÍžçJìä–;ÎT;‹ê·˜Àµ|Bµ³ÄæÏSí¬üfhg™øb.jŒ¥ÂÝ`uSmêõû¨v–úÉÐÎ*îÕÎÒý«vVŸÚYi}„ hN$µ¥–äíÈy¡_¸Ã|oèo '˜.½‚ÌÏÆÐV ¯'u‡E^¼Æ„ãàK…œêþàõÕ'§Ò45H^ÒË9Þ3NK®¥&®ÐŠê“E§öæ·&wû0~Ë'sÅý¯|ÙO–@ÿ Ž2Áþrž˜½ +hsûz°Œ¯7Ë ß£Ó‰?®¦Ý°o´|i^Iâ¶ RI|.©eäÌ:ªù‡ýVÜ®§®òîg~T; ŒôØL õjgeü¡•j¡§ÚY‡fhêÎÍÓ¦T P³!FøîÐÛÆ½R]NÃPí¦Ó‚J;Æ¥S}kZçlJyì-×S½‡ KCYöÐ+ ÚäCåìZ’{í‡8(¶\_*ï¼í.´]_Î7_Z xº†ý9´–Ùéˆó’>š–<ö=j«NLƒ.©v÷ý¹é£ùAéevbX¬©~MŽ%©×FJÛo,E&‘Z¶W_²W;K ÚY÷—Ë»¾öÕô< ÄdÔT #±ÈšÌÊ0㢋ûþ©…õ%hP}¥ÊŽñÚšÃÓµëjGÐø¾®ÅQª=8UÓðñ<]Õ±iЮÔ$æ[c¯æ8ÖMtEíŽâ–Ószõ9>žGucÊ[ñ\Ä ô¸jNÎÒ­?:E[P; ¾Xƒ×‡F›B :÷Ró9g±ý Ö×è=wh ÕßÛ4T›RgO5œc×Q­{ýº6G¹ªÓ ÷/Ô.Gq¸¦by§£“c¡#ŒÙ pcÄNšÿ‚éŸUcïë!2ªP#1,Û\WaƒúV—S;š'ðÉÒæ£Sµ]ü)÷*Vçõ…Ï—’+l 9]‚‰Rj¤Äž{K!ŽéòÛFÑIâÕÙÅš'©Û°? 륽ú%{„Ú3`ë;£æÏÌ‚.kËPªVÐ‸TÞBýƒ¶úÄL ©U¡ƒõÍ^MáÛ^*C‘§ÖŸí7äT<$—€@®‰}'І}¡ÇšÁ¸ÞШC"6œ%o¹º¹"î«@;º(ÐùëOϤ¶ m™\‹&È­·\`ŸR×+/ܯÓvÝ÷ Ù{G–ˆÿ„.Âú‰‘ÆTºtçhymEÜÓǘ y–¸/%4|<›ß~c´³tû ì®.ÐÎ7šŒž©lßX© s$XÖ]s>?™jgA+ëY‰}Vt‘s"ç í¬’^í,yˇóÅæË #èz+‰ùº‚fšk¿Íäösóä:rÞcä²Î1Tk¾lïxmãÙùÒ¶K ©®-”Ôú~U=“¤ö›®rÇw¾ãæ2~y¯M'§BÏ:Ð{Òn8=C—µ}˜g&o:4kÚƒ÷xäEtm£û© ×úɪïDj,Zkl81Mn¹¾\Þzu1ò$…*„áõi¦RH†9Ö|´Iël ƒªÉ´Ô¥o°—v~îÔù…’jÉd× F.À“z(PIêu–ض c a„ucèÑ`]ƒæ`Tç4×R—ß<Ú]¨ùäÂvhnÈe{ƢDŽ®3÷8‰°W¬_&ä[ÊI…ÖÈè ±%Mõ‘©¸ŸA5Þã×õÃ3h¾LS~l¢¸íúb¬‰hʺÆBóñ[$>ÚB¸®¨G©_,Þ6šÕ´Ï¥þê|ª”UM5Pu™Q f26ÈCåz·I†|ŸêØ /*ëpɵ§µôp³Èy;ýCÓ½Ÿ´ùø4¬ih=ÒêŽÝÖ‹wVJAñ¦¬JfpÿŠjÔ6 §_ÐyCWbM×þE;Kl¼0—ÖmëšGÊu§g#gÛî.BýÎFf™³$Ç3ZC+MSñ‡'©ûÈ<-ý©UÚ>ÚFæÔöóTc][²Û©÷};GÁh-êê}¥ºãÓÅæ‹ÎÄÆIhÎB׬ª{&ã=¨6\9±{òyȨoƒî™£b ©å;ï®Ð¾Ëó‡¿òåÚo.Æ;Üs×n<=ƒî›Ì,ì/¾§9}mM䩳‰aG>Ôï¹(t±’ÔC®øÎðEÚü62–äȵ¯ì½nRTA_Mùá ´fn¾¸X“Õ0X­_c,œšjX¯ëv„î–Hì6ÎŠÑÆ,DrC5£Vé!2«òcœ—°í/ó±.AêÉ>jNgDµ<Égi*»œ o…ýKT“¨úì ~ëgó¡9M9Úç@jY¬E‰Q±fÐÚÂõÔlúp¦XóÁT¬å#F‹Ñùœ.É:ʸ‡®)?2‘ê£Ð{½Ð¤j 5¬m£—L®»0÷¬¨æ!Ö0a§§hKŒ‡µ®h§#ößHM{sK:öNÐmü`:잎5Ö› ÇUÜ2 +k×r×}â¿gHÉEýäè 14ÙL“^?ûză/tGi4»)ÄæÛK¨fÖ¨îôÉYbÛgˤÖÏ–k+÷M¤šæÐ¼%9ÍY«LÆþBøMѶÐÀ·œ›Ëï~êÆ5:÷wq¿™ö:Æ–Zј´ñÐøyäRšÌÒ4OÉÛ2\WÒæHï ÿÎ7_œÏm93×:ë¨çÕš8cèWPMW¨Ï+oÖ‰T7çMòG#ȼkMI~Nê–¹È'TñO$¢rûà{cç™4y¬[ïøb©Øti.æâ—¸¡ÛIÜùx%özj=ÄúËó¨¯Î­ŒœïK} K콄Þö臵+Ôým×\áSé½éÔ½ˆ±x!"Á {2°"1x­™ZÔ«‰˜³u(4UpN¸7&D®1õ÷ñ&9­†‘×»À=æŒÍv½zæÎÐl<8k¨¸‰œQ“\lC5±HŒFŽ„ï¦+i<¿ë3šrbäûi+ŽO–2aO„—o©É„Ž%yø¯¼ÖሓhÙ'äYaýRnøx>4¨~´¶  —³m(êlz9ŸŒ/4È —Wwt:òª[ Íö²]N¤F¡ú¸w_NµxÚn,†v^Cë=ÔªÄn‘A‚oºœßqw |žf#É% «„X»ùØt¾ó‰«vß]5tbp¯žj}¥UÙÒ½'XkÄ ªC“¤r’×B߇‚îrçÝelÛg ù¦‹sè= ;`;dŽõê·Œ ÷±½Ã¹[†õæÈ-£°€kû”æNrÅÞq\X¦«[k‚ZºUÈ9  'æÔ’8Ó4D&ù§ŒýVUûÆk×5 ÷ÊšNÍÛo,—š.9ã>½–g®Öq«I,+Ýåȵ|êŒ÷§÷kòˆ=¶À“ʺùÚC“¸öë‹¹æ« ¸mWæ¡UŒÍµ€>¦—i¡©Ü5žêÃaɺ}cå5$†Æ­³Òfn­B ´´I>*Uï">ôðTØ$©¹¬qï þzSšÄ,+qm…&½ÚN.î">ªm$]ç#5­7Èëp /­ðU1jŽAÚõ.®;ò$Üo•ˆÍJñYÔ¶¡1M®™¦¸}öòÈñ¹–ZÄóÆ3ó‘¯@O õ öli˺°wó +ß÷‹5Û£v†ÿFIuÓS7ØÒ=GÐ‚ÏØlOâ˜=óÐ{%>EÊj Mgª'ŒýŠù-T³[‹Ü:·X£Í®²£ZMÔ8›ê¼b̈́䡘ãRíé^íSâã¨Î´b±ÎNæ˜&\»bbg¤>A^$5Ð\¡ñãÙGä„BËÇ äMä=ÈyR=1è‡Bë4ÉTƒ®iPbs,AŒ¥—›ŽÏB·&:Ëä¸ÅÄ›<ÏÛ ÄÞ`#Œð=@*R¥™ +ºDS!2Ã\»¦ÐJW`­I-”_›­É©Œ]è,9_òŒ5µöÚ¼#tEŽ èÒ«íAm¤”«Ì*{Ø›nÁG§›k³[†“ë;BZEþ¶‘Ú¦‹‹4ugçéòk†á9±)>ÔXRÜF»ç{I-£aóAYõÃôI¹ýtÉVºŒ ö PRÃÚu6 I!kÍ@%†Š6ÂâÍ(-2¦ÀRLηF—¥>oëHtÿÊ)Å6šÈ< J*Ü2XÚŒ{96ÏRX½Ö´.Ú¡ClŸŠ7#’Ì@‚ÐdÛH+ˆNz]Õ¡©ššã3té[ËqùVbBž%ìÝ} ¡C„vïe6¦Ý±%Ö°MmaÇhJÃÚòÉB¹ùæRt7Jù½ !©ØZ­#cAìv$§{FWnY×X¨Ê[|®%í@É*µÕµ–R+HkÒûÒtÃ’q£]z‘±fRîÎR\±•RŽ0öpñ!>ÒƒQ d¾éÒLUr¢ +DZL1åÈC%¯1ö™_±WÙFoBI2éd·)9= ++¾(®bx~tåqåÖ óá}”\¸Q eDéÊäÐÉ,¥5ØIQë,Ôºd|hèLÖÄYAÇg :øz;®A¡„ +’“ÙW³¦ÔŠÕ&š¨µÄ%˜jÖ¬³ÒfÔÒ%o´ÕÆåZic2-СªÏª,…¡"ËݯRîfÚA’:èÉøXRÅ 2”Ú“±Ñ^›Re‹ŽDJØKkDÇ)·i¨\sf&: Ñ¡UM&¹® Sß‹.]ùIºÍ§çèÖ˜¬¥„‡]t¹è”/´¦>øÏÞn^ⓉÏD ìŠv«’±c²ú¢6£K/ˆŽVÚ•ŒŽ“â]cÑñC»VSËR{#~Y—¶ÑN›R1P“\Ø~ïEiYóœÚQJ»¿×ï¯+í¹¦-Û5ä«Þ®¿½N´k¬´s´¶ u$<úu{œègvT`-¶ŒDí‚.ï«A§ºEò‡ÉÙuƒ(TïØ|Kª&C Ä­è`“óê†hR×õÇüí~D0|W^OÆöˆ.â3`Ÿ VˆQqfè€-våã¡`|üT ÈN¬HlÑ‹güýô +“ןć%›±ºHcøJ#ˆÊèûofCÖ˜ðq¦èˆöU°L n,Dd› Ñ Ýâ³A‡ñÁfèÆÜBçívJ(&ßycç—Pj­I«¶…´04)5¶ ýy¯òd8m¬±Ý4QE–\p’)¨”ŽJb/¥C_¡É²9A“\Ò¾RqM®:µ;ÐÍ ÿÛ’cˆ}’ñ¤ÝPÛG€Öƒ.[)*§/¥Š¥×ÒÎ?}Ùž ´ƒšŒ›6gë°Þ¼ }´¶¼{É@ÒVv×n<6 ¾I[yp|‘.½Ò„,12ÑŒvs‘y€ÜBŽ^Û«Úì ƒ4k7 ”3ëBéd  æ6¡m:uÅÄ–Ð-‹nC2(ŽÒ×Èw=d5 é 焹„nUÍÆãÓh'nÃŹèÒBWºŸÏP‚NÁ¼7¨âèD“ÐXh­) v‡.6Øbå®q 6ëÊ÷×å¶;  Ÿ|ÖÌ%t>ɉe6 ÊÓNxy×–ÙИžÙ4sEˆ'×>!Û|Ô§_ š’HÆo5¥Ã×Ñïñ ¯A÷8®¨èjQoå1šÄ…5ù– Î +A)¦Rh–9hK åñÄ/rÚhcä/èh-t&hAEÀƒæ:zb¿‰åÖ”×4TL¯ˆŽhŽä\D†™_a "•´þØDMùñI”–b&_J;FÉœ B^2#ì7uÛ`tµ«@G#Œ)q€øI18ÉŒ×EôҺɹ .£»›vôÇfÐ’Ú3ˆ1äß1öðƒô¹éMƒ‘ 4B}TÖ¶a´3ÄoävCJVÉ#y\fÝ`JjJ- M«²£T$bðQ4þ&›A· |,æPÞ–a´3TªÌ +[]ñÎ1ÚâvGtõÒîF2_1/AŸD7æ ¨,Jyh…ïIé V;v4m§Ý‹°ÿì\­:2 4e©Ä Ç'– "ºñ>“vZ¢C±¨Óݧ´«’؈ ŠƒÄÒK:#¾œ\ b_vðý ÊÉ%ý¨RFyÈ,è’Dn¿''®ë‡®CjÉÄfÓªm)I¿K)îÇ­Éë+„ß’-:íב9Fü1íÀI,¡¤Èx<ñBÌÚ>¸6xÀ—k:PO≯Ðñb2,z;CÉw¨97“Î-RÀ7ÒùFþ ¾¹¼ñÌ aûg‹ÄÚfRâpõ©)´«1¡ÒFÊn*­ÿpŠØòp™Tw}žWc£PÁOǘh²êk6›.ל‰ŽqzíJwAW>èr”€UÊ8’_¦’qM%ñ‹ÌGmζáúâÝãà«àwÄàÕ& #Ñ|©ô‡ s5ÄÇÁ6µ ½f¬· ‘vd’qDD;SÉxÃF@ž ]Öè¦Å5!óƒÒTH.$ÇZ¡+•à£0^ÉUp-5ðy”B^aƒy$eüc‘÷£k6b"¨LÄNÿìÖÇw¡Í$‡”HüÈxј؟Qe‹: ÄJ•Ü|bhÙ´“•ب6³–úJúHßh+ål´ƒÒü(H(T`ÃщP8×µ¤ÔŽäRz~Iåýi|.í ê üh°èpæ"“h¥)n-m:5 ]Éb2¿¨ü¾|?Ðnб +Cµ¥ûœ¤Ä*øTÐñð´½×¶aˆ¿IjØ-ÜBt¡…Š‘éfð•ˆ2™ÿÔ>Ë»ÅH#‰å +-ùIjü9PŠ3V‘ú‹ÕöªPRŸݩ•§¦€ØK»^+M‚šHq´Ã9äÇôÏ›í䊃ãÅš§‚d-æm +µ/¨Óˆ™ öbÁŽáxðyíàÚ9Ô¤ƒ:HîbRE?(y¨ô ÆÈIéƒ'5™žøïÈì>È@àѤÔÚQ; ±ñQKê ê/Aö‹/°’³7ÙSÂCû3WZGgYИHÆ—Ûqo1û|íÙi ¿Ã>©(íp„A^ r+RŒ‚¯!q«?ìy"¨T˜…œy¨.Z2 ËÑ8Kâ‹Lâ ü0Í9ˆ-Så’¼úÁ´Ã›ä-4‘‚2cIÝ“mIs;¥?~Oi+ (‘ù ›„¢Ä¼ós +þY.ëC)Väßèw+ß5ê ó5G&"~ƒL†ùŽÏÁܹô‘Øs h‡§šažQÂùLÐúÙpR3Åš fI¼ã¡¶‚Ž{êC[†¡–å‚’h­G;ÓÉüÄõÓdVÚRõc¥hRs˜$Äy‘iΓx µ-ا´¶z%pÑÑ®dI­Âa- y!¾›„º=ÖX%E‘:d1¨wPÿ¡ëÈÏ0ÎÄg!&“\ØBSu| +æb3ȰRò†þ”ZJ|?òC!$Æ”‹L4eÓLiau^_ŽÔÕ¤¦Qªƒ˜@9̈Ò&ÉïáûÄÕÄv#rÌA”D½<§I6±d?>2Ëó ^kJçñ±X·„ï$õž)4Ηöƒ’Ö#£î ±zr4ê«@¨h¼8ŸÒ@þ@ÍHj\„/üÅ£oÔÜá¿ùñ ·æAmóuœB­§ê¦Pi NØüá41¥¢?bN>ää­°Ç¢G(RiI¼ÅÚ“¾°u4rQøo„I½ÞG›DòPX÷ƒ™'ånŠüPˆÎé ¹°ýóE|Ǔ唴 +å­üöb^[oްþôqëÍEÒŽ‡.rû}7yÇ® ˜ô’ I\)j‰º”}@²D\‚2JI·#ÍÉC³áäTiÓ¹â–k |Xk° _¶·^'v…9EÕ9HÝOÉòkÒû"ßРæ$õˆhtn»Ç:Ö¤ÄJ™Ô- •cÝy/JügX¶9j:ž@&’Rhn-'V€_F¾ƒ5aÐÜa“ »ËI5 ˆ®ÃŒ¥è| 9yýMx~_Ø&¨ÈCukËèZÎXÛ¥ë¹õCµUGz)¨ãH—V2¹%š¤÷§tßÒ¶Q\ë5gîà>ü‘wìžï]„ܺA°?¥6Æë² u#õ¢dwÌsâ'h~zTQÓHº¦5¤õ&Óõ$ºþ³e8H¡X—YÆZ_*ÖRH¾AêuЉ°6®K%1ùcöÖ¡½"’¿?Ik¨JÐO„ +ò}J¾C½žP`¥ù±d·¥–QRQçXPAUÙXÌ®µ—2Iý’¾~ ÖWÅô² ƒSÕ› Ç'Cå˜ÖO Po>=J|ÿkoWå¶­OÁîÆÀ-v·b ˆt,Xk½µ +ÅÎmÒ¥ÒÝÝ &*Ø¢"ÝÒaïpŸsÞÿ/{Ÿ{¾{ïÿ~çþ~üÞ ¬ÅÆw¾sÎ1žgŒ1Ç#²N˜Xæ ü㕳†Šÿ J‡Ví S~¿(²‰žK?ÙH$4¨€ªãž¼ˆ¾ä;<Ž}ÞEŒsÜ’”`ˆ£*Õ¨˜Ú=d\í^&¤`;×…å4¬·Ib{ÿ9¢€ûëAº q]Õ £t×çób=j5†ëæèš´ð säÒç¸Ådx¡2¨ÍÐVPg}&ƒOƒØµø4æÞN™‹D™Jà§9.‰}:t74ÊóJ쳡£šPrN”£@]JUµ_[¯ +"€1ÀŽ€Št<çö5öktö]o•éÐ<® ‡o­#`Î@*…©÷óS:öüÅ×óÈð3¾Î)NœÀ{þ”õx®»&¶·¢€ÇÅ.qJ§ø…˜/Ž‹€A¡K;¯µ¢à×[hŸ§kA-Ôž9Þ†¹t0… *¶~æëÛ˜3~S¸ø¾øÌ?ù:ãÿp=(Aü p:ìUÀ@Ã|ö‹ýèZÏå×ð<Â:1qL^,qWäøºæë ç–‹;»§/åø2¼vÁv²ÈóæJ®ëÄ™8¥ˆŒe¢„J qF‘è^3A§uécßíä”"Žág~cq ŒsÄgåIÉyùᎨ˜ûc{î:ÿ_Lü|×9 ºXA<âIx=ˆ|ž¬{Þ^%q +Ss|Ý—ãëÐ î‘ãëC><l(¶Ã ŽH…½Þ +ªf[‡8%ÇÕ0.å¸:tÚƒXƒS”" JHØ’±»@qŽŒoQÁ˜dX)c2ا\Ìö¤ÃBv˜SŠÿ‹R(¥3©?˜+óD™ûS)Â}’ø"¶Ã6þ + !>k=ö§Bâô`bÒìÚ°R„8ºVM׬ãƒÎáàCi üï_ôšÝÈ 3ØUP!£0ÇöyÄÅ\¹Îr72—±Õ{ˆôþ Þ jÑÀDðÌ\o/—9Ç*IϺL†µ ؆ë\ön;W¡BG½ßÍu§„qBwËà'[N%2N‰ëð_w@’Þ` φ +{³•[ŸwV@ކ¹qo×ÍçÕ:Æ1C‰<ã6Ñò£Ä19°¯§$%˜GðI× Ž_ f 3«Q[Vï˜Íå»}žlâî â0ǶK‚m;ØE®#^œ"Ä  ^S îj9¥ˆëqJÿTŠð¥Ÿá®ýàÿÁ¾ØDsü”"ÌE›Ê8 ~ö#øsOèš +k³“—|fpy:àöÇ­¹ýÄÅÐ"÷ÛK¯G«‡íþ÷¡Ã`FŸÙÐñ ò‡ÆÜ0÷•ëJ˜µö,gKÁv‚ÿŒ€y¹ c®c?~ø9÷û\.1ztRe|_màâ§ì'žçÔÎ]Ÿ*;‰÷ÀÑÓ£8ÞÆ)E/ 3ô9ÿq”"¤ÈÈH‚¸5ùœÐÜfàPaúS)b.(EÀØd)EX\;ÜíòåV©ëíbŒ]+ˆ‘bN1O—ôÅœJ‹wæjP(£bJwÓ9@É~º"3žWÕÛAMj¸ v܈Wq9ÀݯCÎ l”Ô ïol3!6Ëu¨ud3K.çÊ ¢”F2ñƒ¹-×Uã!èæ 6”2 VâDÀùé37&qñøóaáá+£x‹ºÄ<å@)›äR¸¸ýùáÚ +쨜`_qgN ýŠ÷tâÐÙ‘PÂ)IüìüJ Õêâ¤Ê&Bá/¥¡ì‚<·f iã3 ð=(EÀHþU)ÂeX)û8N鯙%æ@G¬ÇÒ‡Ïæâ Žñ ;rjxAüÿ®w–rëîŒÇd°#  J$t«R jTà›M\¼ÿ¢û2µëìSæ¢ã$È?Áþ•pv(HS­Á¾•>qi,Ôð§…6PÀ‚®ádR*×:"ÊñŒxÈPßaÞ?xä€÷#ÏyM»ª¢ÚZ:°Kíß«@Yb­‚c ð1Ô|!n9,ø;€¹Ž³À_±Ï„x!¨ÙqÊ ^jž Ô€}&`rðÀy¡‹%<®ÛgJ«ºðn¿ÞSÛ@)”"x:Ð%Üd\ŠA Ìü:SsJºÒ×#sôêX(r`{ÍÅ'^ óÍå5ÌOâ¾ZœÏJ|ûP·=suyäg‡8lôt›8òÍÎ.æ„X'(w=ßL‡½Vœ ÝaNÁ6PaO7w!õ›ÃåQ]¢• Êum ÊÙĤ5èBw~°ÛC‘Yb[~=a©8©R[šÖ(¤vð¨”NM"ºj§÷ ãq{9•Ç)EP‘¥;9¥ÌŸ¡ÞBÏЊÏÈZ¨BŠSËv‹^ +,œR„Ó°R„ä_•"Îþ¥qq4ezLž—ãð.䄱Ÿ§"Ëv3áE;Œ;¹˜çí•`G8Îiª q»·‚Nè8À¤öè’‰ƒj—;ßZ"²™O¥wj‚ +Çy¡#6ð%¨Ã§ yÞu*Wa8 x9Ä€«ÿeOÀC“X\+=s} +(YAîºÎRÁ%Û»TEâ”ûèîN^ðŸ +ë“/9&§¥ÁCjêZHGËñ˜ã\>p'_£]h¡«9İ$¨Íñ ßÇ›¡æ Ö(uôâhsi»$¡L‹Êß&Á¾‹½[ùÌäòPËáÝ\“”ˆøê½Lr‡§៽Ö ñO¥Ë?•".Œ•rJw×C§}É…ëÓ ¶&Àû‰„ÚŒ5¥¶ó¥P ¸ñÈ•1kãRD<9RrÙסj.\S–‚­‚õÊÙ!芞»S”·]映ó ñwP”›"q[ Ž…Ï6Ò·[x¢Ôf=˜_PœâlmT™Š4£‚/Н<À„å*ƒm 3êu¡33Ä.¹zèrꙹ +xðoÈÙý¥AsJuûD)ݺâô6™1 E¤6©2×Ò—Bއ¨(¸¤-e"Êö01UªÀy(ë°ÙÀ _¼‡Û€å¡n¯ QØ«âøZm:£]Oú ÆLz§EDù<_CYÅ(P¦ç½&CB`~v¤1m:¯Sà 4Æx¿,»&ÂûbQ/âé’~S[Á¸Pêñh½Ì-u‡g~öœõ .!Ž-Wùçmáê gê£æzAqTTa~ˆˆümtðÓM !± +çb€š#™kÄ"鵤eRïì PÓ1Œiâp±wˆ]º>‹±Û†Í>ÎÅ0 sî·)\ŽÇòútˆƒClEU­!Ž(Þ;ÌÙ±ÿ¶†úŽû«¥îÉË fÏ©Nryh¯éeGÆ7s}«Ö@ôªúìYÙ PvÔÓÒG  ÌÕ²%–¦ÔŠRkt‰¸¼œ²#(i‡)CÇ|è`Íå#@u +cˆÿ«[`Îf0ò¢D榇Kn7’Dj»(E€:9íš´p8?‘¼€üÙo*(¨Ó/WsJV>38å¶b^—è…œR„ë°R„8ì‰2¨Apô1ö—^Ä|À)A‰SeÃ<•ë4Œßgâ«Ô˜ÄZ ŽŸ$4«AÎÔ|@íŽ ú?Ôîÿ©v—Ô¥u?†|j¸£8Wg»P u ðïCÇôÈ +Uqb“P° ž¬.'Š;Kޱ4ð‡˜#‰ïÖ’fÏÞœ‘>©>ÄÏìUƒ½@ùå®§-ã #>pMàK\øgŸ©œ-vˆ]Ö©ÄVuXïºêÐçTGùbìß±Ÿ—œ¶ ?Ê¢'.Žû.=ïÍÕ‹]‚¹.É;‚Ú2¨ùÁ~Q–=sÖHSANð/§Î9JȯไZ1°9€@UOrÎe +ë?j7N|1óè[KÅþ϶€ýã@©Ü”Ä0õÎæ:8ÃÚe¬<¹¸:ÄMd1 Ú Z/²‹™œbQPïcrÅ_Áôœã‰×l®3þŸÊŽ0·DzóÙãÒæù…VôƒV!ä© t…|Ç× ¶ÊŽ>WƒZ-•Ô®ê›T|£ +œ¯,¾‘µJì–¾„SÚ…œ¿uÄèè3®“¸ì¿(E˜¿ry!ר… j|BUºÔæÈS.㉓×&à5¢H»Ý_*Ñœâ¼K æ*á?‰þRŠ?õxþ÷ÖQ᯶ϖºe,ì÷W|•ã´iËé˜Il•¦8®ê•\÷Oµ;ê/µ»ÌfãÿªvW¯jwP‡Éí1ˆáµÈu÷¹µŠS„ÂþêA™ˆSOr»½j@U¹¢À­ŸëE¶ñóa]€=nF§´h1^·VpÊŽ®·ƒŠ4i:“´ 𱍅¡¬Cg _93ö倣ÄÉMz"Œ!öDˆŽÈA=,à>NÉû9P9Åcˆg2'0ö€x<¬É‹Ãµj\ Aý¯ãâØ^€RªÈ.h¸æx +`vÌ3¸]¨eôÎ^J\}ä rðò(ÈSA~rC£€Z‰K¼WWªƒ1Œ£®øÎ N]ÃÕÈ`¼†ë^68#\¶QóAbµR§Ï[«¡¾—eGÀ̰V“«uAU˜Ò¡ÂÕ(œv™5†P£ÂÅ£+wAÌ:Ós¶81ì¯k·Wp5`÷Ïú€¢æP»â¡ÈíUP› ÈYêÉbçÄá19%/¢¬'’ª÷Ñ¥Û©w–QV¡³ &bX¥ÿÌ©8ånå…l £>÷·Aeâ3žY«Èˆ×Ûˆ°ÜM\Ü”¥Îܘ qdN}ÒëÑZP —zÜ^ÍÕôA8Ô.ÂÞ¹~o™Üs@”Öo r{´‚«¯U-Àe×3–aΰ Ô]¸.ú`ƒ1¯À{qàno@8%ðn›p¸¸šþ@Œoë‚2Ž}Ì|È{BÎ>bÍù}˜cê䕱\m«]¼"ähû@9l6uîÚ$PôžÊ£ÄqŒ¥Ó•D~Å[wˆl“9ß|Æy——ž”çpØi› ì¹.ñ\½„ ïåþà­K½~wÇ7|²×pŠ&NPŽçÿÔZa? üvðúøæl{e¯ƒ¹…œ5äê9E ˆcBþâ…Pã q~—´Å\\r¦Øör¹|ˆaÁÿ‡qsåÚ4ÎŽ‚räšaú?ÞÈ©@<ò\®‰K8Õ2°×϶Šm7OŒZêðtÆ]"©Y”E—|§Ógì&À=c³Ô`EàÓ.ÌäÆ +ãÁÜÖ.؈m“Øž U*WáÆä€ï Táýðú zµ•SÇö}´¿¶ +8Ô‡j •Òz€HoU‡X(횺qIV‚:+ˆõ1å;E>¯7qqi¼7 ^ø6‡s½ï¬„\1§Úó~'ØXÛpÞêEðßX+º~‡«—…üäy!¦õ8ThÁV*£GG[»StÁgi~Œ«•„˜"ä®a¿‹®ß_)¾;ŸSl±ž±"¼–qy Û@îÜ—û¿8“SxÆöMâqsçû9þ­È½ÂesÜ»¸õcŽã¡âhB“ãÃ5õægFBlI`rFbÆÄi»ñīѠ.ê%ŒcÂ: o3^¾ö¨’a^/'À6p1ÔærÊt/»ê7Ÿ .…ñÏÝ4ü Bç‚Oåîj¼Ÿ¯§B*¶ƒ¢,Çç±m…u u¢&.ñK8^ +øÔ@0'ßÈY9Åáx@êRPÊ’xæ¬c‚ ”9Ì +8Ì*H»¸:¹Gk8qaì/9»à÷¬& w (tqñK¼îñs] ª¡ ¶J% Ð Ï/ö{°âit`îPZå”ê# ”9U¿àì`—É(l§9_‡}àtì³o¯â0-¨O€ŠçýUœïOëÔ¦4©Ð×ÒÁïBüPײrR”Á&à/DtõNQZ«!•Ö£MÆ6îáÖ½ßcP‚S&c+vcŸ¥ vò¨˜o…˜·ØíæR°?às$×07p1PPŸ¾ÕhDÆTì¢n¤-æ Vuüô(Îß²KR×~2±G•,ÝÏì#Ô°Òï¶PWBgÒ6±s÷[K¨Äöýâ”fPMçâp® 8ä<C¼À9U ò€ôQ—ñÜYÇÛ‹%öÉ ¡†ŒSå¨Iì›qÄ‹æp¾­Ä¸ÜYL{g¯"Âð¿ ˜Õ*r6q1pi7‡rÊ\H„”m!n}Ò¦îô +n}Õfÿ0$ß|3!ó>¤rêæ'="ýÓ2mPƒ¹×-"}SNò¶é4ý¤SB§ôh1ïw›\‹[&;e3â\í*~f ‰÷é +‘ï‹LB“ºìf=i–Q!>˜TA˜%–ñÅ‘E*œjñE¿™2»î¯$ckö@|Fì÷j Ôeq5{@ˆãœÛ3éôéŒ^=:©_ƒŽoßy¸@ň³sI-*(…&6ï#"ʸ¸4ã÷tØO2­Cl ×¢ +ê žëLâqw5KåêE³Vƒ¯ŒûíeTàó TX‰2‘òa?™Ô¼ŸJkÖg4óDiú þHÄ7ì…{„ø Ü;Sµ Ö ¬k2±CjG¨›½ºôÝ>(HÓ>‚¤¾}Âè¶]DÆwMúE‰¸èÃÏLaç)É‹–#ô£6Zt_øw¥Yµ&Ìýf¡ø~3þÿÚqv“)ó¨‹&J7‘ï7;øŸU¨œ.Fú¢ö„4§Æ°Œ4³– Òzu„émjÀ•@! j è°¢’˜Ê¢Gm"æ~ެÚ5¬>š¾œŽoÝ/ y·‘ÝÄ%m™(rǹœŠ¨{Bžü#}»ƒGß0f²Û&»Uļè8(~^D”Ûn!¾ÕA’郚dlÃnaJ—*s»ƒÏ¨i½û™C¨›ý:Ônâþ >y÷£yÿ#~: c^ôa;Ðï>J™7½GÅ9]Å÷ð³ÚIQNƒLò¸å ó¸UB=èâCŒYðè«0û«!ñì3Åä}<",ü»)ñê«HTÖvQRVuÕôÍûK¦Ïߟ–fUÉè›-tz¯Ü”·|çW0>"s?JEÙ=R&q@“Á¶àà­bS&®]𔼱ùÅ‘ L ¹P“üBKÙËŠ³â=&¢ì>™än‡XšÑFJo6P¢¤]qz!“Ö£Ëx>]JWÌ+¨beN]4(oàñu¼ÏŠ·‰“;tÅIt¨ÄuAÆ5aôÀN~ò·½üŒ*F…,ÁofO{ÿ¸"¨ó tÝ j¿œ![¾XÒý]¨þoNÒ¡b¿C½C޷߉ ÖûŠ{>xÉ:üL»ÊC޶çÆHë«Üðs”Po¿åõ—7XË^7žgµJe÷kMÍrÊO|giö¤øœäaŒHÿ¢!ŒmÛ%ºÕ%åÔeîöddÍNˆÿAÌX”Þjˆí‘,µFhv¯ê°ÉðM*©CƒµÒ©EÝoåK²›MŹuÇ¥¹§„Y¿ëO¾©ç2Qaû9Q^÷qúEŸŒzÒψ^v˜3ùíÇé¼O‡©Â#tiÏ9º¤ï,ýîó1²à÷ÃäÛo&Â×_DdÁ'3º¼û¬´½ì†´£ÄC\U~•~ùÁŒÊêRC:D|û^"åÓØôÃNŠyÜ!‘ä4›1:£MHëT¥·ñdO*Àú–=/?!ºßJS÷º©[¢ûí”äQ“™èE»yç«.‘õÑ€¹ÛNÙâI7Iæö˨¼¯‡™÷=g™òΟé’î3tå‡ tUçyòÕ „Îé¦Á7‘¯úÄäÃBâI¿Pô°EDå7¢Z/ŠºšÝMJ‚$C¾Âö,¿–µ ?_¢:­é·}‡ÉÌO:T ö¡6ás€—AN“³å—‚€x?°fÿÖßÕEÙRiaÅe‹§¹—¥Ñuš´ß“µ‚»ßµˆ{ßô„¯?ÓijAJñ«š0¢OYûm—8~HG–ÞJ˜=¨>.+,²2)+r:XRèbšWj#yU{Rz¯Y,Îè0æ°JjŸð4 +û9&y@cBeÉÕÔ¨Úíœ_ŒˆâoæTßgɧÉP©èÓOæ—nѧFOækÿuz°ßU2Xæw¼-#äLKR˜{…OTPùµˆ£wÃÈÁß%ýÍ~G><Š4í) ‘ô¶úH;š½¨ºÎËøyž¥ßY0¯‡ Ó¿ï'’U¥¹MgM ÊíeO[‹Þô¡ ‘ôón‰¤¤ÉÒ´µØWRÖrUô¶å”¸¸ígiQ••´´Úδ:ÿš¸¤å¢ôuÝYñ»º³’¼¦óÌëN êm×AIn^•§¤ù¥ç$Uç°Í31NéÞ%ðz´ŒY»™ÿüç¬1YÔDÜÞà.ë.÷—õWû‹»›nˆú[nHz𼩶6‚Ò¿™ Jÿ0%J±V~9F}øxU4Ôè!ýT`Ñý8Bò©Ù—ªüpžzÝ#£o÷ñˆÀw)ÿ7ÈÐ:eòÖG=xMü²ÑÂäuÅ%YnùYYvåaiV£‰ìQµ¹IVµý¤]Â<û #^t3ÌëV q~ãInýiɳ¶câ§æDÖwâñ ŸÆþ—yÝf!©¬¼*®«q”5WÝ0ë. +>þ!+öTÛ­Ø£]¢÷¿ŽÖxHZ+ÝÅeµ–Ô›~S¦¤íÓRãhÚó.øP_nø‰ö»1g[’¢.6ÄF]ª‹ +;ßy¢-#Ìd0ÏŸêuÖþr’ÿøwˆÿH~˜!vH[H&|P¡nê2©º`ÛÀw _.4Jø¨L 5íxçoÞžbVWàu¸óEø¡Î7á¢êfaÑw3ÃG¬šÀíåbþ!›Ñº&ˆ¢,äÄöwI²ëÍÍ;ß„j¿w±)9ùXëãX“†bðk̽R|³ÉXœŸÓÛ’K¦õyž²7•?3·š¤÷ZÅ`g˜Ž&ç“íxÍEÄ”¸…y–z…Ã<Üó Ôd(?Pú©Ðß¼÷qÈÕúnMf”:†>(uM.q ;Û’.Åëöpwvè±ö»Ò*?É@‹÷¡®×atã ?‡Õ'3¾k c»wӮϖS©_´MŸ×^>ë2ü½2yó£–äuÛ)“Ê2giY¥½èY¯™0ý×ýÂàâ „_á:~HÉâù!­+s9úáEÌ‘î—ѲÎ2ñ‡Zw“¡²àKM±±nu>q®u>±ñÕN‘îu>‰ÒÖâëT}û³÷!N ×n„5:‡§U;„dÔÚÝ©´Æã ½^áæ]âê]y#ìJCDøÁÞÇÁLo¯+U:p†~9h&}ÑxRúºñ¬´°æ²äEã1æA ÅÜn1lò ±VÌ×®ë§Z2£Ï·¤ÆŸm¹wªån¼´³Æ“*þ|‚_ú7©°öÇ1¢êïÇyïX#ƒ\V“—Ô½Í(õã.ñû¶K{‹Ãõä†Ñ­½Wéâ®ÓtiÇ9ŒŸIRšèÌúâGµ2ÑûŠó¦o=µß:Ôñ,ôxû£Ø‹ÍIÉ6M!‘î5^¡¶ ~Á¾UîÁiŽ!÷ëlƒóê,Êš.ûU[TÚ–ÖZúWÕXú—áŸ+ª¬KK¯å”Ù§•9…ú–yDžmLŠ0xã/¬õ2ï~BÔÿqNðŒå“þ! ïÐûÄâ'E7?Ñ _5$7»(úá7JTÖyIÚ×ì+êjugº>¸Jê$Ÿ*¨Á^gÑçOÙ@i i_UÝÚe+xù›€xñçמ”5—\—Tû›¼ q®õ‹÷n¸‘x¡%=õP×Ë0i_‘Çáž—G»³¢Žtß ·j Žð¯q {PmRTgXÐhð¦É2 Í«· +È«³ +xQ}58ï»Ä*§°är§°ø +ç0÷*ïÙ§|?^+2 +,]%¸Éª‰Š%9¥»Í%…-çMK‹]L‹|Ì:ŠƒÅïšÎ 3Õ‰”~uIF³Pò¤ý°´°é’¤ûä×_Ì¥µunÞ•^‰5!‰fmE!¢¼¶Äíßt± Û…7¿hÒÏúÄ¢æ&ç‹Mñ 'ÛîÆ™öa[˜nÚ_,ùÚà¨';̺9,6¦Î12¢Î%ölkz¼t ÄŸé¬w:Ö™íÒìãÚàUçr§Ú6®¬*Ûà§xž^—_ É-vˆ|Ql–UjYæz¼#3Tü±Õ[ÔÑì.«©¾&Êo?%)­³—4ZJ*j®ÂÞ)¾†×µW˜g…g¸KE@¤cu@d\±k„w…W,ÕÕëhü–ð›ØãG±}ò-÷ˆŽ,rO.r ³­Åë+.. òFÜq|oäàƒÁ;Ö€÷–5¶|?ûTÓýDÿjŸLŸß̳mwS,º²Ã™Æ +kQEù—º€4˜'¸^WÙß©± N®p ~P{5¸¨Ñ20±Ñ.üHOVùK“Q/{̸ÿ§øßÙËÄ÷O¦Ïü쪃#½«nDD—º„¦¹†^­ + ?×z¾!!üxKFˆ¬·ÐϼçEˆ´·É_ú¡ÉGÚÒæ)zòË!òÎßõD/9lÞ\z¾9=ñLKFÌ‘Yû^…ê}.úØqƒèýÕŠîëq«ö=Òy/̼ÿIˆq{¸eèõ¡ÆæHçÃH§†à›&õy×xoX=ÃôoÛ ½ž-4´Š›Î³‹›i߼ɸâw1Ù×ew¢ëfd@“KdTs˜E÷Ýã_Ù ]¬‰~/+Ñ`¥zý¬Hw€¥ †Xsã¯ìyãìEæ[µó½ÚøòÅÞ ••è‡6¯0zÄj‘ï~’·X›ÖT{o}kWšZq=6­Ü9Òº)2QÚSå-jhrdê;lÄõUNÒ¾F¿ó)qÕÁ±ÖU‘1w +\ž¼s¶lˆÂ6ûe¤l "ȼ§ Ü¢;;âRK\¢W½g¢cmPìÉöôú·îkTg§¨§ ÛΊ ‹žœˆSíQ—Z"##œ#Ýë½bDŸZ<ÉîÏWÉÎo6ü:Öܰˆ5Ô{8´S? rŽž_¦¢N1«Æïú~ZüK•ïõJ¯ˆ¤bçì÷Bî9‡¸—yŸjN ¶è¼L º2 ½Öô›O‡±?Â4uÚëÈŠv­ñ}PèòºÄ68»Ð)ìþ;'üÿ:…<ç’üÞ5üpö±ýEAà_=+½"Ÿ¿·É/¶ ÌÀ6«´Êʨù²ïG|a[çZï!üý£ƒN+Ë7þÎ^<Òu7,µÑ>¢¨ùJÀ³F›ìF›P¿f÷xñ÷rñ÷*oð‡fC…!‚_/é½dU mý¦h=+Àô‚Ü^íØ¯‹¶îÚ‡”wîG›•ÕÐÆ­{Ñ:eU´Q™‡T»WŸMÓHÿÛ*ÍzV“üÒá`_œüúzØ·®¡Aža‘yaI®!ùÞá×0v8Ó”)êëõ0é® :Úž‰qQt@™GLâ;÷Èäç°LŒÂ+Ü"ç šþ~Âäc^`r¥cØklß^4YÞo³ ¸ßaÄüh¼aùiÏ2dªºž­QTB‹GÎF Ñl¤ˆf yøRÂ߯;m˜· íß/F:’«rZ2gù]{(´|š"šæâßš‹&ÉÏFSåæ¡9#•âØåHiÆz´Xq+ZµJm3:‹öߨœ¥ýŠÝmPÍŠ„]\$ß±‡Dï>Ÿ5í|’ñÎ5¢à]лb» ü2›Àçïí‚ã*œÃÃËÜ#¯WyÇ:WùÇĽs¸ÇÍ©sHÔûkA%×Ãö=!:¹Bõ÷9]m +Œ¨m¾âßÐzÙï¡hâG¿³n#ËÓÎüe½¶ÝíéºV)S ìÌÖóy¯¤›ùe£Nöß·é>fwéFÔ/WåCK•6 Ås– ¥ÙKñf¡IhšˆÆ¡ñøš‚R@3‘’ü,´t†Ú°Ýí3 ”W½òr¢ZôÐÍfVËè {šÿ ke2ðÊ_Ü×í%jr7÷¸Kz:¼}¸q­Ú'*ú{hR¾kÈ­B—lCÓ +ÜžÛ‡¼-± J-vÅö8äe¡CÈÛ‡ ‚» Ärç°ÐJ÷¨––K>l÷Ù€/íVq¿ôÿì}²3!Èð7öÄBv›ºëÛ{%V#6íRG+–+¡µëV" ³sr:n7g뺤ÍÔ8f-¿l¡šŠ&£±h …FrŸ£ð¸äñç$÷çÏ#ñ+ñ¨Çãß’ç^›ˆ?š´ +mÜ,F»I/¹÷Ù5¢þ"—\ïÈ—^¡!ù!áù¡á﯅F\K.p MÍw }çú*ß1$'ß1øé§à,¼7ï;†<*r}Wv5èF•w4óµÓCô¹Áƒøå“ÓåÖðˆ7-Ø·]ov×îf ÷šG+ç®Äëp:¾¸·1ø®ä¸QÀÜLÀÜéôðþþãF¿ O`3bþ:–›Œš…æL[‹Öo;„¸WÏæb¿1ÄÚcuXÒßâ}¢õVdFžkhA¾CPÚ;—ÐŒ÷Î¡ØÆåÙºVúFšõ> p+÷‹‚µù¤Ð>8ë½CHd±[è‰öôPÑ/­ÞÌoMžöM~QÕ.úµ8ó~cO{«¸e¯>Rš8 a,wÿ£ñÂ÷“ð˜fâ7ßø/£ùÏ#¸Ñýë¸GàO˜»ñøïÍÂ{q;“HÕ³m–Ævµá {”éìu—uTùš·¾ >Öšv¥62Ò².,âÍŒeñš„9Œ,¼ó˜ýÆ5ìu7o`KŸæ;†6Û‡w–ÛK>{á¿g¡ßÉ2FýìIÁwÖJ§„ÕÜeh¦áúýc”ûó‰ÀGýùÌfY†/6Dë5¯ }NÕS4ºYmòS¹ÍÅÒ8¿˜×ža÷ߺ†?Ïw {–çñ¬È!êÑ{‡ðÜ|§ðÂ×ÎáoòœBýß{„8UDø•y„ûV\K«Ä¼«Â.äN™Cp\™kÿ+{Qó «¬á~o¦š…µÜ†õÊhŽÜn Žãîâÿ\srÜó—çÖ)|ýÏc^‰£ñûc¸½7¼GpßÃkcñçlU'¡9hÚ¨¥h¾Â´r÷ ¤l–$§ÙÀjŸ»ìÌzžød9û{†lM >|¶11 pðJŒ½B=ðWëÚÐðcí™!ðzf‰cpÆì µ–ÃX×2 ¶Î)Ò¼?;ã ‰Ú•€1 æÎùÿ}ö#ñõ¯cýë5¯üŸï {4÷dÆã'4Návï°E¶AòŽu·ÿfOÝŒVﳇï^{åv/×-<÷­sä»|§˜ò|焲b‡¸—N‘9Ž¡ n!vÁ¡p9Wú†bÿ^år¨ûž¿n«·fÅæÿõ8†­¡Ï)²¼À1²¢Ð)¦¢Ô>ò}Cda¡cäƒ÷Ž¡ùØž¾~o¯‡•¸…¨·³j«7¨ý¯Çò—Ý1ž³ìcþü~,gGÆýùýT< +££yxžæÏØŠgoEs÷¡ùË4Ђ%Fhîš»Ô)Ì×@³é Å4Z§€vÛµNR}Çn|xeôÊ7”Ã-…7BŸ8†`lQì‚qf8pûù¿`,VRbZWèZXdŠÇ¢ÿ=¸ó„ŸÜ’-»°oúo ìäXÎ2Œä¾¶Ã{p<‡F¦ YrsÐÜñ+ÑÜiÐü9ûвuR´bÇi´x«¾N ù«ÅhþbÍYN 9 yh–‚š7O›{o?í±¯›¤ñÕ2ìg›7=¸v¶"Ñ'æ…WhéKר†·.1ÅùÎ1ØÇG¾-² ùPj1Xi1Pk9Xg[[j˜T÷+]²Íø5gpÿS8Œ6åOô8ìó`ï ¿7 ¿; Í=ÍŸ° ͸)L_mó*4{Ú:¼ÿv¢¹Ó÷ …{ÐÌû¸±)®4EŠK$hñ†Sh•®ÚzèüN¿îiªÙìÊýŬ²áGöÈ‘ú›€A_æºFÖä;E4àyª)³ m/³†=×Qg—Ô^mŸÐÞp5þ]™=æêuìÞektþ×ksx¬ˆ›?ðgÓ忢éò˜!á}5ï¹™ò ñk Ñd<‡Sð5cÌ4kâZ<¶Íhö\e¼>Õðš4Dó6›¢ÊgÑ¢ývh™¡ZÅD£UdÚdþ\nÿ¯³TÊØMT_ñ•Ëñþ®…AAž…>Á%{Uã±=.±{Š}\Y±]X{™]Dw…]d{¥md^¡Cø…šè`wìî¹SæýÛóö×~{žj¦¼R½i^3ñë“°Çž<üžœ"R·ÛC»lîÜ ÿ¶/Éa-ÀˆØ{ľl‚¶ýKÂÈÅØÎ/Ä+r·6gàÏ™r³ñø¡9– aÛˆ¯©«Ñì™Øþ/ÑEJëÌÒz ´hÓI´t¯ZjŒéz£u÷ä¶»×MØw]¬ÞȪb|JÚñÊíLM’_ÀŸÐ{¯\C*ß8…5ౕæ9=/µ þPmð©Î&z Å&¾¼Æ66®Ô%ØøGÏ¥ubËÿëœ càÿøù/[2Œ…ÇáÙš€÷ÚL<‡s¹k¦üOHaÊn®¨ã5¨‡æáuøÓf)úi#mŠ!š¿T)ÌSC +‹4‘ÂFS´pÞsÆ>hó‰,ùmþ“vÝdçªT²›Õ*ÙíF_ÿ8iÑtó†G‘WPtþµ0l;#Þ`,×hxKµ]LW­m\_½müçú«q=U •vK +ÑieyK”vü[ó&ÿ/öqØ~LÆcÁècâ*¤ô“Z¤¤ƒÇ¡Šæ.TǶBÍžƒíÇœíØfâ}†÷šâÜ=hþ¼}h‚*R\ÌC VPhñæch¥†Z/L@ŽæÈmv.») eü®§ìO{’~ÌÛ_ÀnÖêfyÂÏ-6&íÝÝÞùåú†Tä¹%8„?{ë&(û~÷’Õ5~„ùEÁ÷ƒLG›³q'{J³”ݧz½h†Â¤Åÿ㸆}Û8‚•Ï¡,ðÐóÐ4h=‰¶}!¿9 sâŽ'ì<µVEý»ßpˆµàõ±'˜Þ~·#-wOÕ§‡êz|ª)#2ñÍõȸ·7"O7ߌ1ë-u¬ N,/·öﯴ +ˆ.v ÕîgÉMúçþDZæÆ3‰óÍS‘g?&p˜÷0ØË™£` ¢ˆ÷£š> +.%4sò:4w‘Z¢‚ññ¹W#÷ôÏÚ{‹]¨ò‚] xRå)»bOüßæî +雱ÿ{ÚNÇò‰;¯<»×³bšZ»ê@«fü‰=oô‰=#úRänÖÿÄï|Stð9àä€5Ÿw-p {ùÞ.¸¬ôjPs‰mè`¥C\m‰}ñ¥ÙVÝ¡dذïÿÎÚ÷§/‡õ ÈXaÌ|¤8m=Z¼F­Ó:‡V’Vh…E Zk›3rǻћ=KÆmq}7vÕg#7ØåŽÚæ^>~›WËÄm ·Ù½«l™7f—kå¤ýOÙuûëØ=*wØ%ª¾-³Õ3ÙZu¬–^+ÔogÅúͬH0Ä^¹\ ˜Æ•±³CU`2B:ûôÓÞn‘Ù_„<×{óTD—G,Y±÷X—rÜœ]Ÿ¥€ñðU4{¡RXi„Vì?‡Öîh-q m -'nÉo÷­¼ç&»@%ÏO»m»ìßnïúiÊÇÒå7ˆ½ÐVY舧nÚëX6yŸGë µˆ¯Šž²›1>ÑÖû…5åÿºÄ|)rÑëaEÚÞ¥ ôC›Wù­$üa$*í¹ ~ùí(yïCaòßԘ̋7cž6e÷IeOkŽIò[ÏC½“ak¬*ñ–Ÿ)ÿ?û=ˆ‡ÀN›>vÆú›ÑOJ|´h)Z²ý$Z®i…ÖñÝÐZí‹hýÞchÍV­X«V®ÔDk•EH™ð±ãÂÓ1;­‹ÆïOúûbÍjV]·ž56èc͈/ßí-:îŠ?¿¿&øöÍRøù‡^+Ëh§ÿºV7¾{­Þmv«AkÄ+e)~%k&l<Ã4ÕÙ2jœõ½7ï~&þØáMÕ ZòKX©°êÇq¦«ÍÕ¥Ú?¶²ÌÚßµÒ7\=nhÑb%åc]ÊkÃØï3<Ζ¢ùó•Ѳ-Æh³Ö)´pE;I[´ûdìÈAï§©²«5°|#vègñ§çŽÄ¯•6Æÿøú³ð÷+þÍ–†¿³Ç5¿³<­Ï,_ï;+ÕÿÊ¢?u»t³¦Ú>ùŠz§‚ÇiYøŽÖ/`uåì!ÃÌ?v9Üš#xÌSŽ'ÚoGé¼y¡))þDÇýXC#D:1Š|µI’Ù@ÒÏû$FIŸ¶i^Œ°tÕnާýw“ñ¼ý¤°-_'À8÷:Ú~êͨž“w%° +xííÐþÌ’ú¿²‡ô°‡u¿³’ýÍì.µrv‹F«að;{Ôª.8$³Ü!8²Ò9ıÆ7X<ôÚb(ºxíi¾f·k=f·j—³š¼fÖŒßÍžþqUò­Æ—ùòáºÁcVÕÐ䄜ږHWSÁ9J¨c$’šT© 7›Ä6)Š’ÓÓD9K¨ŒßõD9ƒ&dúg-Êåî"Mº‚ž…Ϙµ›ÐüIKÿK,è?Ö¦<ÆYcMY‰–n¡­&qr{|Ûg€ý;ð™Û/¾³§Œ~aÏ~bë5b[Pdžå,¡_Â5°æÂAÖÆ¸‹=É+gÃW¬¶QHû:#׬¼Äž­‚ÊßSý½Ž‚¬%¿=¡Ÿù‡²‘G¶?¦nyó³6õdˆD”n"^­%bs•©µÆâœ÷iyÑU³†|oѳ.3&nèT¹ö)Ü@ç4Ófͯ½¥=å>¼2–Þ´›üoÇ5ÛÅ)òŠhêØhúäE˜GoC‹Vë¡ VhûÉ»#·_¯˜¸çîßR¯bwãýÄÓ~ÍîÕv{¥ }*q¼¾ã#ý7¬&Ý\asâÃíhÙP¾=Øä"ìï³6,`y<ÏPÞ™£#y?_Ísp›¬–³D¿ˆÕu7¹1M­¶Fײ~Òá‹‘áAË‘F·þ¶¸õCGxÖw²ð Í(:¨~‡èA—Xò¦ù“Ûnεœ”””]6ÎÜ'¼õMƒHïT'S?jˆž}8Hæ}9¨÷ŠU=ðsÆ„E+öq<û_?¦cŸ±vƒídâÏu9 +M•Ç~mδb»íyP ë™§öŠ]«ÞÀîÓý•• |¸JþÑîÂüÖài6˜ ¹?f Õ•ªë¿L¾ûv˜xó›„.:-©kr‘–µ809ƒÂ:n¶žšÒÙµÑAý;?ºl«Ñ³hE¿ßÀ¿â9ÎA #ò6šÔƒ~0¢f›Ð>jãÿ“Ä3i9Y¶Ç$½ž’–Z™–¹É^ÕewHD™m|"½ëYºMàug±Þ…Љo›9r;ø×˜ËÙSW¡ŸV«£µzgÑž³wÇxÈ®Ñée)Ì/BŒNweô»Y‘Q-kjpïo»ôÛÒÑ7EÚêdÌ7E a*wð„ÍDs§„å¢ðÒ½Œ÷ãu†ú|´}Ñ<´ké|´®Uóæþ툈ÌÛ*~SœzÞÉÂó7‘¼¦põç™ýú\Mô »q”¹åhè%+ŠïÔ%tkÒ¹›©ÄnuÉf†®î¾(.j>O¤ýv€|³Nðà«.Y0t˜jè»ÄëbiV²j*7J§ï<’,¿ãhÆÈ=G3F©È£yåñ §g3´3¾®£†¡Ç¡&0†èûzÕà«bѽÑ(ùËÞ#VÃøæ}Æ—£¦íÙ£Š6(ÍC›çÏGBm-tðô¹ñÖv³Ù^›çÄŒ|Ñ Þµ“TVÚ +žüÂ<øEWpçW ¡÷£åB[¯éD@Úrò~«Ñ|Õkn|ÿ ×ëå¤uò¡¹Ýhù¥QÂcçGqç^2ºy¦Ï*ΙäÕ_&^ Òü°’|ï§ËxICʆ±ýusfï—8ÈmT•¡åØ7Ï[£‚«™¡­G¨ùÕ*hf±ë´Þ²û´òðõÛýÄÞåš.wgh]oè”:ÛØÿæ"cïÄFÁ÷–ò’ê¶ònöîøæ®"lç—"f0Vqs(»[ (›ÛŠÔi¯IÚê:HcÏ>Ä×ÅþŠo„$R39¡ÌLŽrŽš/ˆ(Ø$ˆÌß,ˆÉßJF<Ù"Œy»HëS§µ3äËWWy#zí¿€¼9¨%}^sܤ¬Òɼ⭷Ii±ƒ4¯æ¢àÖœ« ®Ïä]º>A×%}–æÜ¹ûÌÝå×î&ЬIJhÆXÌ0]¹‘‡Ô +¦j4³t{YšüòÑ™øÕÿ–¥o³jFöQ3âgyÉm’0ðùjÒ5a¶#©Ón¡§ ªÒܶªh }‚;+ÄõŽsÎXbj4GÄ mü¾1¶”K´"Y¶ðÍYIyf­ ¯?X!NnÑ5O¯–2áe»˜«~³à å}w™Ô¹ŸŠ®ÝC<_/Lû¨.Íì $½5Þ²ær/ã;W:'ÌD—m!žÑ&ÍŦƒïB˜ïž‚¬ÿWöög§u:YB'›Ý¡s%sª*ï Ò’aݸ–n걕w^¦ž}c„§PÑAF|3ÄÑðx±’ðz¶RW E;–­AûVoA†ûÕ©Ä\þÐ%ûéìg<ç0Ufã;‡Œ+Ü u¾¢§ ¦DNŸÈü¬ÅÏèÞ'¼–´€ðÊ\BÝíäA]­ðö7M~DûaÔÇíäí¿ëóÃ+7‘Öq +Äé«ã(›àY‚ÄÆÝÔíA}"sP“W¹øv/©GÙ(‡Õ4zÀ0Ìü±Sÿöß•õo±[5óÙ]Z¬¡î/¬Dkˆ5Ðm`õõß³z†¯Y=ãb–áå²zú~Ï• Î8Œ64?+o|ðŒ¼®ŽÚ¹z!Ú¿};Òå"òÐåÑôy‡‰ÐCtD@_„ðÂH°´mâ|?[Ò#e×Ä#i¹ÔÎK>ã<‘¶ Ÿ%L¨ÛMÄ·î¥ÜS•(‡¨¹”cØ\!¶…ÒÜŠ“K_¹“¯º$Âk÷ lü§“n–Jžµ’VU8C¤ìý{êþ€@в“r¿½˜º4]èýr¥QË'†¾Ø.ÒyÎîÑ´}6MãlÆx­ËÙS4/dLÔyÄnãd¯@-¿Š57tLŸ­­g‚4T ð˜4úN´çn$Þwä1û±p– zéI/{Ì€^ìDЫ df·Žøa­Xô¨NÄdµP¢»M*£_‡z¼ŽrŒžÏXÍbìæSW£±½žK\O^ûk@Èï4Öž!æóo}S¤TÜü²ŸzÜK1EmçDym'·¾ï^ðœL]t›L8¦(òc¶S¯zeÒ–êkǺÇ0]õNF¹,Ïð«aÖ¿ÖÀ>Ga¿á1¤K“3¼7Õ8›Õø<_n(9'Ç7·%4½2Òˆ<.§¶K ï¿ Hãò’çTaz—ìCÆdôÌ€¾ÅôÁ³#e—¼gJ|_l%Uj“‰eªÂ¤ê}tJ«6ô€Ý«– +2{ÔÉkJ”}øÚ5y!œõ‚óñÌ”%ПǼð•í鯛ÑçšÒâç9‹Óú iï—k©¯V©ƒjÔÓN‘ ±mðÎg-"«Ç€ôÉZAÚÌ$"çðmãfyÜ_È |¿‚g™6CGvEN“8=BOb#Ï#/Éé!¼6ÿsÀd5C´xÌ 4 ó¦ ÓBê» õ]{ëCÌšŽ ¤'ä9]œs×§ŠŸEⱂþ‹ì´ûdè»%=ï4YtÎv"œfÒkô¥9•æ’û­2"ðíz¡MÜl"äÝ&~ú€*évo1huINÊx­ŠsÚJ²Z¥dê' xŽDPÞÊ9iiå?ƒ¾ž¹zŒy9¿hg}Õ0~ðý€qæ—}¯{‹ù®w®FÏžqŸó¢úcFbgóñZŸMzä,'.zM†uO¸ß_ çJG­Gëa¦Ë“"¡ø²<嘤HF5좣[T¡o6ô3âú e5“ÂÛšp¶‹Š®ÜM¤6©é-êp^œÄ6…rŒS¤¯øÏ ¯øN#­Cf +C±ŸÏTÄÕì0¾5 *|4`D¼é–Q/»¥äë>S&¯ã‘3 àßû¡I>óoÿºŸ8å6Á€1adzNÎo‘Ÿu¤Ïë›T¼s’•”ÙQ¹}R£ìh +ž°†<ŸwKµGÐZ…¥hͤ…ø«"ÒÔ§ÿ˜õhÁqëÑÆæçF‡¯ŒÈ.ŽTݯöaû¹Oy§ÇF\ðšLu˜À7³_!:sy¼äÒµéœfÔ1«qŒù™‘¢S—ÇA¯ÑÍF#ÉýF •ÕeL¸G)’–>ÓÉõ»¨Ôn-èkH]ñž&²õW ’ëÕ¥ÏÞ[˜=w:Vý0ÈôUÙ*u@ Π1Î÷S!µÛ)ŸG«èk‰Jdàë”ïýU'¬âßü¢Ê+Þ`l:ï”6ÏÈ;w‰àBä4u ̶îF{”Õ‘Ú.mdÀ?4ÎYòOºÛº|Z2~&Z:iZ;UíÅøð•‰cü"±ÿƒ p&Ozãñ:&²j¯‰{æ*‘陑|¡Ѳ#¹^„ …qÁmªØ9h>úx •ðnŸ0¡r7ÆÒë`þQU[YŸu˜û½¤ µu/è(Pç=§€îø|=S¿›ˆ«ßM§ôis{Ý÷þJêzÊ""¼l}·Í˜zØ&„¹¥ÞtšÑùm‡É§Ýö‰»—Œ‚“.ãxä 9-M +iªòúÜsKž÷ŸJÚ&σ¾Q¤…ýu ÛŽÓräÏAÓðZø‰rÁ—oþz8·BÝÔ£=²V'íÇç]'RŽ‰ØŸßÇx0l6e2l#}³×q廩„–ýÔíN=úΙѣÁõÛ¾×mH=ìÀ9 aBóað«uüÌU8\j¾©—2AÊÐ^~ð»uü¤¯»áþIK·)Â3¶ã(¯+„éƒjDêÐ~è›Ixß_Nx<\& y¿‘ŸÔ³ËèöwÁåÈéZ†fhËŠhÝÌÅhûÒ h÷ÆÍèÀHGßÐÆ¾ ãc]céRH[“‡´u‘ùy¡eÐtè=öÎhC¯EèõG“ærÛâ°§þV™Il>@&µ¨AÏnâ¬ãÊ+c)}«ÙPz·R k—öH_Â8D΃žX¢ÛuBqN½T”Ý*¡îöòˆôDÆ-8FFÕì„g(r +˜Kz¥.ļßJÝë3=o?$¸û›ßçõJ¡OÙZ£Ä¾íƉý»î·²e$:'§+<4Âèà•‘ÄYÿÉüãWGïÜ´møi9Ú½m?ÒRÑÇvS€@#zÃK®ßZ){¯)Ž(ߺkЇúò…2dÌ£§‡é4ÎúCß‘gÊr8GŠýÀO”]ˆå»@×¼›¼3¤Gd~Ô$^¬£­£(|A¿xú²÷tîLž]ä<ßnâú +ze¯"B_m$ƒž¯§Ü3‘÷– +R;÷Y½†TV‘òE¸þ` ôËàËÎËó¨£r|S«‘Ä Æ Û Âöù¬Ëè©'0µ}ö ÿ#yÔi,m?ŸöÈ^I„×)Ãú‚ž¿WüD÷žBžó˜LžrOœ¼:zGÒ®w—cwrgž¬Ɨ•Øÿ™Hsª‰²¥²ÜÊ3¢·õGɬ^caDÉû~¡ß“Up6ίQo;Ìù™_Õvq +‚ AS…ÎÉŠ‚ôoª‚›ÿ{oÞVuí ;0˜RfÄH+g&ÇqbcY³#Ûr¢D–Œ,ÇqHÈ@È ¦2!ÌÐR +i/o[zi)C[Jéíí½·íÿøÞçù¾?î·Ö:ƒŽ,ÙÖNd9G-±ÎÒÙûìµöÞkØ{Ÿõûû ôw`lÎð¼ø?30XÓ¢ô8\Ó¨´¥<-»?â|.ûÖºøÎ»úNžqÓ¼ª›nT«fN¿ÆecÕ¯Êiۃزë¾3}]+Ç7.JŸŒ””㥽wœ¯o×ÄàCï݈9}0¯ëÂÞÇ.ˆ,ê;­eÑŠÓÃÁö±Í‹úN_xß¡«{>šŽ¹ž07†oõÓßômyñ*ï¡ßßâ?ðÙmÿx¾çÜöòdÌ'è;ôEMø•Ï<þ7þÐèyñ¯5¯þ÷ ß»ó‡?ø"þá^ù—zÏ‹¿¿-ðÀ‘«kw]èÝñÖõM¯ýÇ\zwùÝ4½ùÿAÜñçé}ì\oï®ó¼ÿ~KÓá¿Ýê{âBÓÖ·&ùÖì½È³ùÛW5-úüššU²[¨š}s]âx"Ö—ÇÁöxÆÆRÎ/PŽN¢÷TÌ™Jãôfà±7«ýGþiŽ÷ÐG7‡z7œìZyFhÃÓ—ùv}ojàÑ÷ܾÇáyGÿs–ç…¿Ü\·ûÿ=;&7¾~ bmøVîœXùä7ÑNÖ>}åÔ¹âÁåà‹ßÿü5O_D¹$Wìú†/µòt_êþ3(ßÎÖïN¦¿Ë=×»hÕ©˜kËà{ø˜£Ê³xå)øž4æÛ nýΔжï»}]÷Ÿy§·}ÌOKŽgorýÁ5û.Áùâyé?k=¯ý}Ž÷…á=òﳚ|ysðׯÅÜÀøOµ˜c sùžÖrX{þóœà‘¯æÞücSàݯšýßýcÐóÂßkü|÷Ì;‡v£ééÿÃ{ßøÛ|ïkÿ5·é‰9ïêƒáºZSß“çû¶Î<øåÍèCxŸùTÅ÷Ç1Ÿ?æŽôD`®µvžä½çÑóqm éПnö=þsÞ»èþÓ8hvUݼPU0³õœà‡¯ÂÜ”Áû_²¼ ¸|×D”±'qïiž–ž“Û’'!f‡ï™§!Væ +o;z}pÇ÷9Ì­ƒù>)ÇõºCW`îQÊ¥ ¶Â³çÞsè‹›`>Nó?ù.ØýŠoïGÓCÏ}zGóÑÏ=Áÿšãî7³ü/þÛí¾×ÿ² øÞ?µ„>ùtåÂ?~øÐÂ϶߿þôG}Áïü>Œ:׿úÉ aî +þWþZ‡ïâú^ýçyV½hÖ_Õ-ò­UMé?ð—#™‹ùżë^Ü´åíkš–=uú¢³g fkKæ·¡¼‘›^¼–ðc÷žº{Û9„õpÏã`NyÄUB<<´u ¿ó‹E¡×>ó`^ë" o:s¢û^þÛžþZƒ¹Í¼OÿVÆþÅ\tˆYàO@\y÷æ³üëö_â_vâ‹è +ÿªÇ/®xd¢Õx×A|´ì‘sýË=Ïß³ãÜPrý™¾»7Nð F\\Ä !ÐHrl oçD|¿Õ{øï5Þú óx×ᅵ°Š†8g÷/dÄC|<ÄåEl&Ì1X¶álÌáâõŸêBï|‰¼õ»æà«Ÿ{0FÀœÑ¸vB9„zer`ó~æzò=þ>‡¹gÄq’寧ë}é?æxþq:ÎÌaDü™ôÚ3ƒëŸ¹ ýïóÿ:3°ñµ«w÷Nˆe0&C  À–®Â1Š94¼ÉÕ§/hlF0s¾7-é=¥iéšÓ|÷½t9ÌíÛ‚¼uÝ‚†¶ªY·Ì©ª»3Tåm[6.tÿ³—cqÌäO®;1°0?¡¿kóODzqsæ«æâc@—aî!ÌéꋦOÆ\2ÊŸýÂÕ”Kÿ>pôÚЖÓBÛÞ¸r¥l}ã:ï?b S乞yåsoÛ·þ!ÞñÎ3Ñ·~ þý\ÊG}üöü‘~×Õü§| ú§ŸîÀwå0WIäõOø^>â14=þ}wÄ MÏþRöú·››¶ýàºÆ%O«­i¨ºé¥j.ĘӉìæÝάC<âæÔ؆ÖÌÉóêÛ@o¶UÚúNÁÜSí»rGËžŸÎ¤ÜiKï?sE!n æÐôí˜è[²ìT´ÛÍßúõÂÖoÿripç» æ¥ÃœJÞÝïóþ7ÿ½ÑÿÖÿxžÿŸiþo^9ìýÛÀ§|ìûL`ÙŽóïŒÄÆ ¯ØôêÕhg1®ö´&OÆÜþÞî&`Ž@oÏÃçx’k@g®?#Ð º®wëy!Ì7¹b÷…M‹zÇÍŸ6°)X…y’ c ÆâXáÚ£s Ò0N÷\Š8ÁÞõg‡îÙr>æeD¾sq‡¶¼ræ«V£åÈzþ*Ìu‡¸E”3jÙö‰˜Çs}4úÝ-ˆ/@X°ˆ§ºëÇ<ú]Á·þHýàKßwfÓ]ñ“¼w%4ÜF̱ ¶²éÙ•@ïSëÃcï €nôÇÆ:VœŠ6$°z÷E¾e[Înhé$ iO{'É1Ïî¼kÉXʳ±þàeh#ÐGYЪòµÞ=ñ‹ N¹ ´vçEˆ‰…öqX}«NÇu²†ÐÒ±à#Œij_yŠ¿gû¹þE+Oõ—Rž¢ æÊ_ýØ7ƒ[ž¿âö[1obà¹Ïo÷øõmÁÇÞa)çÝ#ߪFÌNÄüYSë~Òûá÷ûZ^ýx!å†Üõ>s´i÷O´å¡|ÙúùSøžÆð˜ÇÕWtÙ’“ü½}Ü©?½ýl\«ò­|úŒêšÚÆÜvS]•zR5ëÖùUíËÇyš»Nš ±kíí àKƒŽþvCSt æäÆüÓ˜¿sÿûÚ2ã<¾Ec}­ÝãB}Oô?ôÚu¨1o“ï‰ÅæW?5¿ü¥?´ý[7Rî Ï\á{ùŸç…ÞýªÅ÷½ÿ'xçÿ;Û÷À·'‘ÝA|²•»/ô.ÎŒ«kh¬BÜY|¯1à­a¬ÛwYdók“)Ÿ®sîúÎÔСgG^ø¬!¼ÿÓÙÇ¿ÇḠÁ¸gŽöÜÿôO•Àþ¬Áx0|ä«ÞC_ܼwÈ鱉ˆ)Ó´÷÷ª÷Åÿž9'<û¾T}½2´æ™K°msgΆù¨ò/Ýx†wɺÓï 'Çz;úNñ&P½ãæÖ!æ©­’¯«Ôj©jV æålÓMœäëÝyžÿÁW¯ñ/Û~.æ‰Ç\ª„#Ü»å¼È½;»ï\Ä3¯_®Â¼O„φù©@¿ây´y˜[(xà“ZÌÅLº)}ï™Mû~5òÿüð¯Qÿ»ÿö>ó§iˆ9æïzè,˜cçAì5ÿN_ŽAßá?Ö6íú±õäœ9MU·ß^_…xWÔ½ODÜ)ÂqBLæ…ѱ˜ïøNo¤Êj‹¹¼)GtjÕ™Á®å§{£=ã(§<èÃà3ÜÔ¼÷ý¡G¿;ǵ¿#3óƒžú¹Ø÷á­˜÷+¸úá È×zúÅwà—7!Cóº—D6ì¿qšzóFÌuèÛóyñÓFß‘¿Ìñwo>«©5q2áœozöªð#Go@ÜÁÀ‘¿Þá?ú×ydëÿ¡†r1mzùš@|ÓøÀÒ5ã½0ÿ¡?0¯tpû{Õ¾g~ShçG2æŠC5ì3\KÃÜDþ<‡0OAßîÝ{q`ÍKÈ_øîà³¼-tàOsšü¡®ùÀoëüû} b!†û¶O Þð +Ìeˆyôð<æ7ö¯;|ù[¿s}à‰¥Ð¾?Ï úÓ͇>­¿ëðoÃÏ}2ó'Â\v‡×ï¹¼y펋Ã;ßæ>œÚûQ-ŒM™|2ðmü›ž¿lÝʧ—ÜrbbúöýþæÀ‘¿Ï ýë|\·ÀuRÌíßtð +²ûiÐÓ¼< ×gük^º¼)ùÀ¾eçíÚ6Á»xÅ)õ蘚›gVÝ4ýÖ*ÜZà]4±Ü1˜ÿ·a_’ĵ *_¬sbTDvþH& ´žmç6-Ìs”EäðÇu'¦„Ö>y1æ‘f6œEë÷? ~׺³Â©ãáû唯ï¿Õû¿ýW_ãËÿ]ë_ùèDÌÉX^¶MÃ9ô÷l;ó¤xó:Ô ˆˆyéƒÉq-«Ÿ¸táÚ}®…kŸ¼ c0_+êñ–1óêæW5ïƒùÑnb¾-ÌÅù†}±»ÇQþÉŽN +?õ“éÁÝÞ„¸¬˜s”0à1÷+øƒÁ-®Æ\šž½ï‹Á7¾ðFŽ|ÖÂ\Ü —žD˜6Ð/wýÇ@øðoî½:Íø·3ƒ¯|Þxä;7ø–Ý?sø2÷Ÿ…XÇø7Zsúæ¸ö¼ÿ9æ|F{‚yÆü^º2pÏ¡‹›:î91öÀfœƒyù|ÿ­&ðäg*Œ!Æ~¡•û.¡Üu‡[Û´ÿ7Ó0æEÌ,\£u¸G®Ä1ß¼÷óÙ˜ë-pðËg~} b„¯: qýkÆ¿ÿW·6þüfÌŠk"¤QΛ_¾Ú¿÷Ë[š÷ÿn®ÿàŸgBùZÌû°ðžíß ¶uÃykN‘Gßfý?®‰ù¤¡åȧþð¾ßÌòíù¥Š˜­ÁoUc®»à†W®&Ü«Íßš>ü—y¡£nð?÷_³¼ÿtKpÓ“hýxóÑ«)¿ÝK_Õ/|ûױȷ¾hñ=úS7íc¤wœãízàLŒuï„q×냋Ç`Ä`Ïã燠~Ê#‰˜10î‹ÆÖÝî¡|Lj­‚ù ›·½Í,ÜøüµÁž‡Î wm='¼j÷E½ŸÝ9ðÉí?"+ý&åBFûŠù®»ï; 1΂:v–÷)ðË^ÿSCäß¶SNµûö_f`g¡å‹tƒ>ì<)Ø…9E÷|ùm^½ïòæå;¿‰9P®~ê2Ì‹¶–07ÀÞb^|ÂÂ[±éÜÐc?“#Ï~6»å™Oîïþè6Âò¾{ÓY W>qqóַ݈ñÕ’AŒå§6´«¹OËÅxôè”àkŸ7„ßÿ8¾ðG¦0÷Üš;ªÔù´\܇>šÝü¯ï ?ÿÙ|ïÁŸO§\ÜSøÃ­Cs˜sã‘H÷º³¼­à[ÿKØ‹gøÀÞ`núæ ‡®A[ùý¾u­¯s뙞¶Þq÷ ~IxýKW†×½|%a\n~ù:ô0gù¼u=ÊÇ–'˜‹¸|8þ#Ï~:káÞ/æF¶|çFô›‚±1wú¢cüh7ó +±À.ûw¾MqO(óÈy˜ãä} +âFö‚¼žýb^dË{nÌ£Ž{HhǼ¡øØ@ôîq‘ÌýgSÎ'¿'6ïûlnË`Î]ÌóŒxGÞàϞøP \„{÷]‚¹ƒ}{¿ºÙ·óg¬Ó·¯õ?ücˆ©ÞœØúÖïó¿¿­ù½:Ú~øÃeÍßûhqã+ÿQëÛñC·ÿ‘¦îÙK:1çpŸ.pß¾Ëp]ñ0ÿbw}5qOæÎº£jÎ,ЫAðCïcàÍ5w­?Ëß‘‡v‘p³îÞv.b¥àú;aÄWŽó.’Ywvh;ØA̱Šy¹ ; ô×ÁOæ„~Öˆ9øGþ|GÓðc;kñýã=mËNFlÙ¦`⤦ÀÒ±˜»9µá¬æøº3ã„rʶöž¤œ¶ëΤœÊ¹&„ù¹¢wÓ9ˆÃ83 ÷>1VÛ¸kÓY„[xÿ ×´,Ûö»’kÎBL•ðƒ‡®1rq‡·¼p­÷èWs¾û‹Ew}øþêà·¿ò㘹cfC•†Óôô…ˆ D¹¸·¾váa£xîË9¡—¾hhyþwžàÁ?Ï +€&ì,°Ù„3´j÷ňÕÔÜNØY vVÓKÿY‹ñ!îo-¨ó’¯¤agm$¬Â¶É¬™€Ø„ Oyi_ŽùŸqìØY‘g~73´ÿË™4ŽaŽ7:Ç6ÁØB¬y,A¬†{þúÓáõ®À6­9=[u*âË7ïùlfèÀW³÷À·Ë'Æzíc¿1÷¼x-êʃ¸ý¥‚»¾'„÷}2 óê}5s<ú÷~q+Ø<Ê;ïÝ™“wþ3ïüá¿Ìn~û˶¶~¼6òÂoëÛ_›B놈ó°á…+|ËvžGëŠÛß¾Ñÿäû"®…7ÆzNÆ\Ç!ðËÑ®7úm=ö9ž·BŸ“ðŠ1#c=‘vòõ(7÷â»OA\$«A<èöÌ)áN7Ëžˆ¹ÏÃ/|9Ÿ°³6‚l 쬇; ü»®u"÷=u)æŒm^ vOÇÎ +$6žÑ~ðü™MU¾`ûØ@3<«¥õ¤`[ç8̵Xcs Ž×mç>Ø1ZÉl:Û_r2â3aNoÊ{ýäDÊÅ8[`§ñ¿–Ôæs¯®eÕŽ‹#ÚõS%ˆ¹¸·½ñ¯"/|Z>2îeùWÏ”ÜpF(®åâ&ü¡=O£<³ˆùŒy®±Ý¿Q9kñ<á÷vÞsº¶¼‚0>.]{&bGER«Îа³»,ðâoçáú`°±³V5Ô#žI煮Ӆûnˆ†v(Ò¹|¼Žu!bgQ¾R;+¶ê´…÷î¿<¼ã‡ÂÂõ/]{Fyø—Ü7žp»V0Wnˆ8–Íë¿ sé7¯]ýŽßï?’°<ØÃ³µòë´ò÷¼ sVãø¤`¬.ß|n󃇯mÙ÷ÑÑg?Y@qÓ¡O̼ó>#ïüËhÌÏ;ÿ»˜w~á»xöâ«0Ú4ÄÐŒÜûì¥áu‡¯hZ´ü\“hZrÏ©Áž‡ÏC¸Y ¼­cê}wiBµû_¾:´óW +ú¹¡•.Fû‡Ø~¾ö{NñøïÓØ®‚qr2á°vo8›°Ø{7žYûôeͽ;4¼6œó¾u½ÿÐ3—×=à÷ ¶ âœ×Ïkªª›u;agy‚‘1M~;ëJ\#B›X¿`aÕ‚Y`_:Æ¢}jŽ­8­yÑÊÓ›ã}§‡c=§†:Vœ†:±¸ ŸzÍ®‹#ëž¾ õg µât´÷„w² >õc1~(?}ÏÖóÐo€¯zàúÈãïÉáG^¯?ôÚõ„Ù¶qÏþç?™gop­sq—=|žêD|³àÞOjÐ'Å5Àp|íøHbÍxn„°±6º×[ûwÍ¡Ëü=žímKLXN`3ÉFØYû?™:ôéí¸–b`g¡½ ÷ŽçÐÊm¯ ±³/c³,vÖz ;k!Äûw%NFû²pÙÃßµ/;ç.æðto?} Ô¹Í럾œðÌîyü¢…÷>zèÀ Ñv„ÚVœJØ[P¾¥÷‘ °<æ[·–Ç8>²qÿU˜s›0ûÐ×xü'jó¾ŸÔ¶l~ùúðªí`ÞgÄ{&,Ø^¿Öÿüßf‡Žü[=æ‘EìXÄÆ£ò`;q À¿ûûBøÁç¯Õp×Ó'#V"âàz îyÍ÷†ªêC±±ó=᪆`ÇŒq={'R…˜ØAÐ?eÑ— ¥6O¸³!Z5¿Î_U· ±Ê¿pÑIÍ+º`á†g¯DtŒË ÛíÎæ×&ãÚaÁn~uæ°Ç3³z_ù·¹ÁÇ~Ì#ÞúT˜››ð Ü{•ÿÀÇ5h[#a3øëž½4¸xD\ŽC¿ë£ W?~ióÒµgÜշ뢖U×o=2¹ùȯ›¾üY8üÂ|˜;yÏodÂÎ"üö—¯õîùÂÎ +ìþÇi„µz7bg4çb$56¸öùË0W7aS?ø"ag5#~2bg­×°³š­ØY);kÙ©þ–øIÞÄ–ðÛÑçEìøµÏ^†ù½}ÄkîÝ ós×%ˆ­@å!î-‚òw-9Éëkƒ¸Tè3î–ßöö ôbj€_¢å9~ášÈ2ܹö Â'‹÷œŠ˜ßáUO_ä{âøÀKÿ2¯iÿÓÿÐ{×¢“ð|¹þÃXâ„ΞÓ|Ѷ“êæ†«}“Çî=ïYÐà­ò,lºgûD\GDûƒñÖ‹kˆ;ímÿçÞ§. +nÿÖõˆWØÜóf7UÍ›ÛT…þv Þ úxçE‘­/NF,_ò+Án‡PŸ<:b™PßÂüÃóVÞçþPzþË:ÂÎÂ鉾Ó=&vÖr;«çô…„õª;¼ã{B$³ùOSt ¶ñ¶q¯´yåcF~ùÆ– ®iɬ'|kŠÇW>q!åcßóói„Wvqi(—=â6ù® C÷< +¾×K×  ìùÅM¡ýÏòïýÅ-¾ÝïKˆOkax>‡b™ý.ä+øØ÷9Ì%ç#[¾}#â’FžÿlAèñï‹-½Ï´%N^¸dåxˆ×. >ýáMèƒ!–Õð%5ì,?ag}vK蹞>úåxãÂÂèZw¦¯cõ©‹–óÆ×Ÿf`gáúb¾Ò&E¶¿V¹ïÑKȾ߷Ç|ô•Âý@hÞòæˆ]îZ}&žÃ9Žë&Íëö¹O¼Ãiø?7fÓ3.¼mGñ¸¶¿Í4?øÆõ‘5^„º8Œå[ã'#þâÜwOìûü6\_£=wÄ\·tïãF2;&†sâ>º_xß^WhËÁ«qÿ±Ëë¿ó¢L›ºKWžî ÄÆ6µ´EÛIþ/æô_±}â¼Ùª;[ÇÚî9¥¹sóYß6¯|ôBÄŸOyq¯bñ½§¡Î¦7Ÿ…¶ÐÛœ:©ÁÓ:¦Ïü€íA_ +íXóê½—“»F8»¸æ qžOÃõR ¿äÈÕþGßÅÜú2Æ\þ]ï2ˆCм≠lÍžËÐî´lÚCú!²íÛSë"®oj˜ÂÛÏÓp¨À†¢Ÿºó=±ßÐ LÄà_õúšxî±€q|á;ˆŒòFŒ:ôC¿Í„žø@E_÷U;qQç'°ó©46[fÙ¢kCÏüê6ŸÁCÿr;î×E}6/zä7¡ èOÄ¥«Ÿø‰c zÃþ+BÝ›ÏÆ=}ìêÞñ¸/åì¬ïé%ÄÎj~é÷þ¦ç¾º ±³¼:ßùn|ñªàšƒ—b.k?­9ÿp +ag!V®g=ãsó!à øEì¬û5ì¬Ðß»¢  õV°ùÍkv_F¾&è}ÄlAØÿÔ÷„Ðà{ó+C^IXóLŠìzO >õ¾B¸¶¸ç’ÙtîÂ5 †ß–£“ƒû>ª øÍ,ßnö= u=üö ˆg‡8ˆ÷ÙúŽ»yÅÓù;:Ç…~õ\Óˆ¼ò©ý"ZÛ8ü‡Û¼ÏüƒDøNcQ¬±õÛ7†öüâ–ГLC?©¾1Zå[¸ìä`tù)¸æ¹û¾³5²´o|sïÖ‰ÁýÿXÛrð× „%sÏŽ ÐðA˜ÇW ì¬ û®Dl£ Ω§Hë‘ûŸ¿Z«÷àå8(Dêm/^ÜñVu`÷ecjp×Èg¡5«mG§`„ · Æ=<}Òmˆ;s4°bùƒŸÜ~íŸïµ?Ïóîûhž±Ã=÷ÈCï¸éÜdßÚ³C¯}ꉾóó%ßy¯«íõŸu,|áã;ý‡=â¡l3ê¢Èê½—A_ ûM³nÁEkN ozíZŠ™wÿxZxÅcx.럚0¬ï;ìBÜ­ŒãMøØ¦¦ð =UžÆ…Uþާ¢Œ|ùŸú?"®K@°ýÕÉðÏ!náÑŸh ‚~?Ô¿hÕ©Øn<{xáËÛЇëÖÏþú¦Àãïó8Ð~¶¾:°ÿ÷3ð¬gäÕßù;"®^õèè³b½¤c /ñì%â=á¹²{¸v…qÿޟנN¥½éhì$Œ{ÑÆbýþXjžÉÀµpÄ) +ÜÕ=ÎÓØ¢a"®|òBÄTAžpoÌß±ääùwÌŸ6\ê†q{ÌË9_Ã3ÿ®;üÐ+Sp ÷ Ñg §×ŸE˜X`£ÑG¶5o:z]x×%\Ÿ o‚ñí‹l~kJ°ï±oà™ˆ@çêñá>ı„úQÝûÌÅh'ÈeŸº÷ \¿ =ö1?±¶nåSbœMûÈ«¡ƒ ñòv¼QþáV#fûÆç®†…ð9pïu9añìýpbaŠ÷0V…q‹>b@øöýáß³ŸLG~| ÄUB[ûțվƒ_ÔD^üă81¸WOX_˶œGgOp­ÏmyurpøµˆoŒ×¨Ÿwùà'77íý¥â{üÇíé,Ûc昆o¼çÚÄõ<;¼ê‰‹4yÏåxŽÀ»÷gä;…6¹ÆÛÖ7®©¹û$Œ%· +}Ä„ ¬|ìÌãß ÿÂóV[^œ¹ïñKh¯ìñï°}Þ|ü}÷éým÷žR\2Æ»lÙ†ç\Þ=?“±~Ú¯¹ÆÃÚ½—à n<ìò=úêdï¾_Lóîþ@ò>õSßE $VŽø˜Î¾ÓÃ<7‰ðáð É}/^Z6´ó¾3"}O~± +È¥ þhpÛs C_»Ç$Ä\gâÞêÄ› +w­8#нù¬pï¶óCëŽÚ{)­óAÌDñ”C!¾tý¼Æª;=Þ*ô£16ÁxåŽ~î·aÌ“+N§±Ó ³ðú}—ãYžPrÕøÚó]ïŠè¯ žƃxf+²ñðÕxvç¶÷‹ÃËŸºcgÔßèGnzÏÖóèÌbÁ/d"ر‰dçïtJpÅ® Ó™ð„ñ¼âê=„ÙAßqnqöž-çVéàﲄóŠk&à‡â>úަûtá\!V,®³Ã ÷‚ìÖÃ8ƒøý"ƒñþ]?`±Ñ'ôïùzê> O ñC×yp|ùæsi¯|"Äg ?÷Ûùø9øÛx–vÈíÁ—®E,:Â+Ã}º•['bœ„Øu8·I¨ùö txë+×àyWÄMD BÎÇù8çã|œóq>ÎÇù8çã|œóq>ÎÇù8çã|œóq>ÎÇù8çã|œóq>ÎÇù8çã|œÏ1þLš4+Ù>3š‰N¸}ÂøI5sÅ 4F»3±ô„ñ €Ô2µ&™oËÄSÉhºÏ5hùuÞ¹3]Ó\“ë¢}±t Ó¶LqMwM®™Ë2-P~âºïeÜœàšÚ‹&\“µŠ]ð»«>_OÑÓMÄô{§ã?ÆWËŠ*ºYQ\²ÊqnNäXW'ÒUFvó2'Zè ¢kWH×îÐé–z¢[êYÕüŽ¢FA/HµÇè{n/ òôÃòÎD~¬†¦ã­=™X7‰:3íOÛâx¢=KÒœkêÜd&û#þ“éëÒzhrªuI¬-3#Õ“l>f¤–OqMõ&ãmp“”\”[pY4Ñ£—ì žàÞL÷àe’ÑN­´0§Ðeâ™e˜IE³ÙoÏ,.žAýör±fƒ±¾â™ê«¾Z‹/Zœ)ž/ãþ +è­!楕«ååc¨fnKM¢kq´…-š±x;Ü:KxÓÅ5|¤)X®hI${:ëÛ2Ñe1úÔZ¦\žéI·Íd:ÖÝ“°1EûË6EÝŒX4s­ÑîØìtìîžX²Í†zíW¬\¬&SžL<Ó6„±³°ÛM·7ÅvFlN¡rÙžˆ;V4³Záb¹4õux`ã¡°Ò´úg±¦"¹´4|ðùê%žBßæX¼¹\CГêI·Å椣]‹ãm6ø³Ã^ù¸ª–R]±t4“JÏX¶D™'Xmª³+ÕÏØš_Ǩ1XÝŽ©3c®éNpê§#3Üq‚S'8=fÁ©à§:ÅK NGdpZü:‹›VHlÚ‘ŽÂ¤I,HÅ»è4åD§NtêD§%M0':=ÆÞ¿0j#µjnôÅjvz«Òb5[ýU1ÑڌزX³8Úžêu6û™fŠdGa.>íδό-‹G±Yv|k©rqÙšèÂOLZNçcN´§»;MÎ’בíß?"ÛmèÕö2*VÙ°ìíe4í¶æS¥¨ÂTGGw,3ôô©|UQOœV²’H ÷‡DÛR‰TzZïâ!ƒ®KÖ—°±v£ß^®aYüa˜îžtG´-¦Ÿ.š½œRŽFF¦º»bmõ=CL´ +^ />D@Iô$¢éÚT²;MÚà1¿dÙ¸el³;kyW*+…ÝlÉ + š @†OÑ[Q¼ˆV”1êgm1Uë4Õ¢žl¯e”ÓÑiHÅ“™:[+K7»Öxô¹]§;/•쀕¶&R)›1v w¥8$Ço¦"º­B÷’¶™Fš)Þâ,ÂÍ´öÞ[®Ñgƒ£!V„r8*Á¿_jC³/-£b·Áoƒ#¾rt^åáÑ}""šŽgwÆ26X«D“œˆg¢ñ¡"`Ç&—Ò##ͤ—°€^Âl-g/Ï¥ÅP®•ìyÙž’'B'ÓÆŒ€†ŒÆã`'äËJìè=gç¼Xe,­Žî#pbñ¼UÌ ¸ÚT*1#‹­(~;y´cÝÅgÔHGÛã=6tªqycÌÑy´¯=žˆÚ8Q‰ÑeñVi[ë6†c»áX¼:fq*ݵ8•H-*Þ‚Àj4ëDGV &½¯ÜÚxÙÏÑ„åˆÚFßéæQ§[‹ß÷ª8õ`ó=¥ÊÑ•JÛNßTÈL*þ4v¥æïhµáÙV˜®`lxíNöŽbÞŒ8Á²wŒô Yant$$â u’Ù|3§Ì¯äØws¨hº$­ÅÀJ3Ø6X+Aõ•…¥Æâ÷ÌjG“ÉXÂKÄÚl-Gå—,·5Åoè–Ìm~É2›µ™ñî®D´-ÖKfæG»*Ù¶1.㮼¯lÎ×¢;š¾Úp2û+AUŠÅ(~Í®Ò,Fgª+þ PEÅ6³¨VNP‹/ñÏ/¢çF¶²´ÓA¢)l¼á]ÉéŠ_Õ«4}hƒµc¤4FÚ,í°wº«#žHØ:#š(_g?- šmX@|Ëi¿båb9#W»xnÛÛã™ø2;Œš%ÊÅc2•´Á`[[OgÏÐçrX´”)“ÑDo´oˆ° Wg¢i{ŠX+P.Åâ™k·‘ÁM»¹lLïi§løÙ©òq”ˆ'cÑâ_`j‹&Úæ§l¼kb)Q.™âGb+B«ÚØýÒnùÞjG:ÕiêÓÝe ’¢Éx§~ã±jÈèI4Y­8'—F|Ú6zO.Ù`­ÂÖs*ÿä’¾©™d#}]¥]jÍG—TÜ—³KÇReݳ°1#+ÌÆŽ³KÅ»À•uvÉθ«˜³K£Ð)i½g—l°æœ]rÎ.9g—ŽùÙ%ö„;»dGUŠÅpÎ.Ubàœ]ÙÊÒNUˆ¦81Î.µÞ³K6X«0¥q ¶Ð*ñ(–¶¯tÊÙÁ£"Q¨³ƒN÷÷î9¦yz*®wŽicF@CFcך¹-3)5S‹Íµ²Q|<ÙÆ‚h…åÝùüoޱ²ªç’òV9j±µ(9jQç¯xI8jÑQ‹ŽZjqV(޳è8‹®c8Ž¥è(ÅáSŠŽ«è¸ŠŽRt”¢£I)ZwØZl>ź±xI Óžx%î²:3­ä™&;3Mç¯xI83Í™iC'‘q‰ÅTÕDÐh笪¥H¹<ÀÐ4hC|y,шöµØ|#x«Ïx²=ÖO ¨œs¼­+ÍÌ´“;ÅR¤\ýŸŽu¦†JGT¡é¨ŠTBN.ªâurQ9¹¨†AÖF + ÊIFÕÝ…É›ŠfÌIÝ4’R7¹ØéãbEø—qÁÓá;ü?¸ŽÇûYå ŸJHí4Ò¼µÑ £{Üùòœõ2r¯àIl1ç¼JRQ{[•’¼ÁÞ¬Ý8T;‡o¿®<ï'¥:»RÝñL¬¾gm7<ʱœz¤Ö൒•Hñ ¤K‡Xj³öÞ[6‡¿xކØÛËáH(£§_ÿ“wcdû£%EEñðÇíC(äœDËË7úlpT<Ú8Ý[ó©RTaª££;–Á铎µÛÓöª2ê‰ã8Vù]~"-#­»ŽÛþLÅõ”^:áe%„—¬ÀL*šÍÞx»#Žúíåb­š‹g͆ŸWF7åmôÖâ˜­ÓæýÑ_6"2ÙÅ'­ý‰°x#9‹7£$-‹7ʨ[¼±Á‘³xã,Þ8‹7•Ðå'Â’ÀHë.gñÆY¼qo*yñÃËLÔÎaµÑ\¶ÓCN#=‡R²§³¾-]fçmxk™r±ØVüêH¥eÀbÜÅç„jvÇf§cw÷Ä’m6B—~ÅÊÅi2åÉÄ3mC¬ç,àíMñ„ášS¨\¬v¤£0e Rqo]iÅ‹åÓ|ØHŸNÚüU•“¬,ßk*c²2úÕÉUV<£N®2'WÙ008*S•1îâqô2)îAª|<é×lxíéT§ Hwé›åŸR«±¦žtkOÌñ(XH­ ‘ìIJ¤rüò •s黤wggÅyÐÅÈQ{\ÐcrXÐN_UÚaA¬UÌQÁ¬7Ô2D–‹hG§øã>•ºû‘nÅûŒ³2»•»’)2nûúÛåt ètäG§¶”§Ÿ:ñ©Ÿ=¨œø´ƒN|êħN|ªÅ§Åûô£=>->—ˆŸŽÈø´øtÂÓ + Oçù<'@uT'@uT'@uÔb‚qÔ¨Õìè QíôV¥…¨¶ú«b‚T*Õ¾(µa¡F{„:ºAtŠßœ”+#4·—ÿ¢²€HGK' p‘9ydFLR‘JÓƒ©"ÈT®&Öô8åYVL€oYÝ–J¤ÒÓZѶ¥Ó])Õm‹gú¦ÙYLîÎô%l¬7ê·—khÓ£vâÙã®ÂæÝl¢•<í¾VZ©JY&¶9+ÄxrÀñÈ7é¦4¶µ£YQŽ +üÖâóé¨Ñµ©dw&:”cNˆÓ¿`¹Æ¤]ôBO[ÔŽË•S¨\<ö.¶“r$+ÊpCuæÄÊjÿråâ¶øcEÝ=éŽh[Ìf—æ–râôadÊ.}¥@»ü y‘¤â³ÓÅpeoñÝR¤lF†/^)EWÄ;{ììØšÊÅ)þ²'û:VÝÌ8y(u¶öeo<–í!R§[ÛJö3¿ÄñK*Â/éõ$¢éúžâWÖ+Í7)>2¤a?êË/Y6n‹w9ŒFÏZÞ•JÆJa7[ÒqЭLšãŸÿÌ£OúÑà îSõ¥XõJñXFù¦ÉqvÈœ…ãæ\.âVká½åÅ{DK‡8ϑÑPÙÐðK˨àmp4D®¬Žøòqd{¹bŒñè>`MÇ3‹;cvPv*Ñ,'♆h|¨Ù±É#Â&ÛÐŽŽMù~S…ØdUˆM.-Œ¬»l[¥;&Ù1É£À$Wâ2½ƒ[QØñP­×IÇ´1•§ºø€¡Ròç¯ +endstream endobj 67 0 obj <>stream +Õ·²0W_–wÕË©<*?áÌ×è³ÊÙ¥²ïWÊ”å9qÛÇfÓqÂM[T•Óa•2ÙXí•ìþ[;±øw+tÚÿôÚ8ŽŽXzv<}\V·*qoŸs¿G–‰¶&b>›K·9…Ê5¨£ypvO²­±’µ[v1.g$ŽŽ‘8§¢G"ë¨ÄÑ2gŒ„#BŸá{úMéh²»ÃTΜ¥¾OS)+>%ùŒ•⟋>ÚøI¿³ì3H—ÑñÉšDb¤tÖH“O‰CÚ9Ñû53RªÞ¤š¹,Ó2+Ùn¢ëMDRË‚T²j¡¬eÕ:}FlQ‹€9ëáE@Sy|®y“}©pYÖ€WAR¹°*|E©b‚¿Š$ËYIb¿ˆ<—•7°aÒŒŽ©Óh‚J%J¬ÈQA^”ˆÀŠB;I…ö ì´šTFÁǹyF”´šT7 \)‡Æã0ä¡vìhEV]<ëæeD ƒl$IA‚Ñ&žã8j§Iƒ¶« +/è5Á×dG4GUë(¬ˆ ·ò<ô Ê †+«JDxè,¢$k„œ>1P +ÚÆH¼˜¥ñ VÆgÉØÁ¢Ë2  ¯%–׆‰Mã6dRe`òe+ÊJËãp4“¤-·AXVζcÌÊNžåĬªQr'f¥TÍsÙyGl§I4„Ž“ÊJ ÖÍ1£U!A§¡„X%dòl4Ü-в‹S °äÜ’ Àhâ$˜E w ¦ˆ Š.˜ý /pXÂ$# O†FÃ<á­$˜¦ AkMa¡FÔ Ö ˆ·6ÆÐNPuÇ„ñ^Ôj ÀÚáA®ÉS\?hæ–‚º È¥j3(ZHŸ!¹D¦5¦$†EKÒjV¹XõÚ¤–šmR‹}Ý6©¥4íåJÒo“Z +i8j_ÇQ¹<-ÔznRKišÊÐuT[ ÚäV’¾›ÔRªÆƒ!TšÎÓÆ{)ZO›d%é=(ZHó!¹ÝCÁ¶ö›ÔR@ÿA¿åkÀI-%éÀI-It¤'×$SI—ÊIš +ìçfBM*ÌKEbX^b`‚²äj¾!ú‰ô' 'IQI]$èpUà5MJ¦[f­ÓÜZN|AjUÓ1FÑ$©¬ùzC +,©£±óI–Vôç³n#R@&Y¢UÐä’¥Z†œ/ ÕÒül‰qd›U˜S¼€œ²Äœ6•u°ibò"âßLn¼?©EÔc;ˆ’øˆ—céd#ÄJÝ™4Áh2Â<Òa03U—“Jí+ˆ0É©œÀÉ4D§6Æ¢ íø>–È©Uõ$âZòeÍæ¤ãíób}zÍ\~0#l:cy:T>#•Jäޔĥÿ9=ñv=ÀŸÔ‚cË„ñª9<Ì(Rý +…ƒ3z2™T²%µ ÂÔA¢Áë{P¨3ÍÉ:PÈ&ô‹Ø„¢ Š†E{N“V¡oke¿‚ã´[ª5{Ä1 +?¼uÑ¥;…œ‹~Æ*µbèk¨h KXréKùhíoóF¢‹jEÿžžS§}ÁßTAvé°U4¯ŽAið,”02Dp"@ýK"úŒQ¾é-b ¦ox¯ŒMÖ3š ªFB#GU߬Þ2ú†¿‹œì2 ƒ£åÒi<§Z«Þl1£GBÔ.¼4êÁçhµ×ê¬À3Ziúx“¸.ÑîZ”޶Çc0Bù)ÔáÕ*v>kyyŒuÍX„º“Éù “ÈoÍý ² +7Èè±:óË¢ç%UÔËŒ¶ÒŸ;£Ôç‚åÅçÒ˜1f†§XCÑ2%,²ïÌíã[õ_­½šÓßfGU=•3\òÆ’6Ìj­®Ðcˆ&²CD!úx6†¡9 +­ƒÇ:¨,,· <Š8û£î‡v€á°7Å‚£ˆ<ü¡ÊB_4ŠŠyn¡QTÔsaœåŒ¢m”U÷‹ ñå±DC,ÝkËh\3KMsR¼I\HB€cm½Øch½jÓ±öxÆUM·Û°^#hE““H_á2¦þUלJ;§Y@Ö Ð…dØCŒy->Ó.ኇÛôk-Ö¤of…ú¬ÈQ }ÑŒ„ñ«¥V“n#-Èm€Þ2ã›Q“…A‹ù +Štj_dÐ%àìqú_VÅðo­&øF¢Éþ\m)U­UE÷ª9­Ì¿ÔZÙaܪqÐi\JzPè§×m|¡‡JôW[µÖ*ë Ö’z…µz+²•{Ù¡Y‘añSÁEuAÐÆ²•ì”ÎŒfb³ã±Dû ~)Me‘•XUžaÃxTà9ˆÏUèoNQäÂF™…Ì€&†ØêaX5;Û¥¢(Ú\Pìl—5o±ZÒ 8 n²ùWÖÇT* Š,ª ] L‡iç$‰0¸¢Âó²ñÆ>„E††ÂöAÇ»åì%6·€R’\4ïÀ¤kã]Ö­»dþ5& xôÐ)Ò®5¿P´%fÿJƒyâv¦.Êä›Lt;TðWÀܲš™ÇVòfÑ­YØ"kžQ|ÍL®å& tZD‚_]&‚UF¥zÖÅpÀØ‘`G6Œ Ùðj®lÌÉŠ2¡à¯—ÔHJââ2¿°ƒÉIR³‚ + JÁaÈ`{`~ȸj>€gˆîµõNA1$’_ÅN^ÿ*ø~~ät–9cFçÓøË Å.X.q¸8æsïYûóCr,ê‹:ÇFÏÄ1?\üJýøìó+ Á/oŒjÖÕ¬1˜yË—aÕ‚…gTÕ9?b ‹y% +pÄé q:?ŒÎ…ñwxǬPô,š¥BѳtŽõSú˜e]F¿‡sÌÁ/Ÿ{gÁ9:¿üàü2úåôaÉéã”ÉþÆáÊæ W!÷+À›3\û•Èg†ÓxÑ¢mŒ2ÆŸá©ì@3hæ±ͼ¬h;Úhã\zgè†s²EO9v )Ç=å +±Jª±“þ²ºdüÕöDô¿Ã25¿¤@¿énb>wF‰¼~Ó~Èc†† ¨6Q{¼ñgX‡`?V„~¬˜MýX†bEÔXÑ=z½3ô?Ã8uŸx-ñfÞãV9VeŽdERxÑØfÄ]UV”Ìõ—¶íÈj'Ï„¬›;5³î,kÄnø ² Y‹iZPÖüËYbÖUÓ¥µNpe£4 £o²±åFjF7P×ÈC…^…mnyvôem° èvQ˜0hiQ1Ÿ= ¿6ô³9µÈ…×â]xx*Ëÿðnmõ°R—^Ò©®öTïÐ;‚9‹« _{„lvƒ6-DÜ…é Mg>©.Kª–Ü}±Ò:S"ж…(Ó1A¯@¿Ã à!ž-¡“Pj¶*sWÃ$â&¸OÌÖž¥H–Ú ¢¥­ƒÒÌÚŒ'ªúMf» ‚v6¤f+2x4H†ŒzûËN[q-<Ì'£’Y•¦dO3ϘQÓÖÖÓÙ˜Êds˜ãISoFK•l—¡”Q•LR»IvKôƒI°´Ì¤Y»5KÄ¢$)­jø¢÷Ù…J¶'¤ìh0«Â’œÖ‡‚.%Õ¨«VúªZ,“7ø ’ÁŠQ­Á«döA–³þ2*v ÿ#;ÁJ¼Âº%^ÂJ^e$]gk'Îà£ÒGV j¼|îKáÞ“Ñ-*á¢fhý›Ç‡°¬V«R`kZh(ËPœlÖ:£íX´uÆ×n« j±_SM£0\Såú­‹ºr^SqM]Ê4ÆÚRév>º5p´äÙ Úš¹sô!×Ô‘Jwé&µFƒAiOµÆZjæª-ÐfO¦/kÉ>½¿`é4Žh®”UM´y”)o½ÿìÌ’¬Š"o2÷›ìy!Gû[ÔDab¾Ú鯘ò´×*Íj£™J3O­ö×+èšþ*É¢ R¾V˳Eíä­±XÙ­f?xÚ¶¸ùªynRV 9‹%-ÀØÕT+#ÆR¬µ’Æö¶ÎøÚm„µ«ÊªP53Ô’\5“ÒáBžå8EæyFÂ}A‰çxAed^ÐPÆ Pâ`ÆÀw^TQ¢m8ˆEFY7Qqqæ…vÿµðÑЬÞy¸þaè&6«%ŒèÎD¡RuƒzrÆà)Ö<•áЉ[‘e<Á¬ÿaXpô?| ev<ÑYT¬4Pô4hÈ”·L1ËãQ":BÚ) +žÝœ‚'tuZ…†_èð]¶l!š¥l‡Òáyu†4–êæ$NÛÃ6hh2V«‚u+øI’QrXÐg²Px&sŠ[V†—8N–%zÍC€x‡ƒ€‡U8‘Ž6ƒî…©+0œˆ§tE:5ÏE˜¿¬Ê3ÀâAC³ŒÄJ +Q@9ò0qxøŸ,2ªfYäN–•uÇÒË +¢›ç0ž €e–Þ¢)êi²v®eOï˪ʹyQRYNUY˜¨Åñ}Ê(¼ÌHƒ;Én“EIUb¥hÞ@JŠ* + µ@±ÑZ 8<&€‘àÿd‰d·,Á³TQb9¨€*‘墬0ÀtñOã°™¬Àq¸*ƒûèGà5Ô"ÐÆO .$h­ÈÉ<§j‹îP5Ö#€%älCãëçiT‹â/¬ê¦Îv/í§õæ&—ÅÒ™X{ÿå–ÚD¼« ”OúÌx7êãþÀÍÚ¯8½'µôà?ô’.h‰Ø4óŠ4Hc´[{¹·Ú #oŽf‰cË┞£ÏX€”°9ªiSˆþiƃYðÏÿû¿Çç÷îüîü^5Æçà¿5¿¾Þõø>¨H³Ýnª/ f•ׂ´«ÅéR]³{V¬ès¡¾Íõµ&µvκ\-tï/éï½ÕÅ“KMM;*nɯRSoªÔ¡©~oUyó}±¼÷®r”»qq}ÖR\ +Gj½ögQó½5|Ý0ß_³P­ÞY¶†ÂÔœ:´jò6 Õâ£iïkõsܲD‹ë6©7äѶûNúquà Ö8®.¾Dy<8|?ö8ºqÃ)Îb¹I-³µÙ£­mh ©;qfrp¤jæºjz2)—¦žâ+bÙp8ý¡¾µ;–^ko`²E»«_$˜}oUÍ{ou€}0ÆòªÃãò‹ÀâÛ´ Àpø~,0«òŠ( àuöì.O¡q»©TX\íÀÉá t¼~ÊBdð´;üUM‰(‚B¯ú°Ú/¡V^Èë4"Ç +‚µ(LEP,µ[Ô½2ȹY(Fe&‘—i'Ψ¾ˆ‚¬Õ¦µÂ Pm¬ù(¢éûpSÙ¢&ßfõ +µ¢¶ÌŒ ÙÜý¬–ÝÐ’-×Ù¨U ®¬hm‚ìVèýqkãAcª’¢ä¶ׇ%Åʸê-$ó–ê­³õYb¶õ9D½_õêÍn3[aír£¹Ö7™2‹f×k·ÌÏ“™&Öjn$6W–V¢Æ¬¦Oy‹@Ô_‚œ+LÑ-*ªUnuDT˜B–²¢ô½u$X¦(MšE’±jVmJÃlUf[­’4Y2ËfÙÖ«·LIæIL—$N4]9’´õAï3%X¥kÖŠÐoNá\ä6W’f)‘-(2­gë·RLYf‰aZ‰Ä®Y½)³9šÈhoŽ&2ØÊj"“uCYYMÔ_jš49‹” aZiÄ+è"Õ¹)ÖÌv’•$è!0 ýÔƒ™,rÄ‹¯xp¼b™à9C’bV’9Dd5[½!l+,’4›k¤É“AËr­Õm½6¤˜'-Mˆà;¨R?!ZiĦµˆV™£À +R®–ÀÆ2œœ#CXbx‹y·$à{fÕV‚!À,-+?+ Y4k6d`>Þ"<³™ᙼ´,·ZÍÖkCxyRÒ„§€ÎàÄ\#c¥‡ŠE«’ ¨–•”áÉnŽ—ùÙ¯‰ïei’['VÌÖl%²ËÒ²²³ÒC³fCÆÓ-¢3iɉAËòªUl½6D—'#ÝV³Z«è¬4be³Æ_›¼,xÈJ®Aaqj ¹²ÃçóVu‰ ¤$6fÕ‚!»,-+;+ Y4k6d`>Þ:ifZ„gòb4¹Õk¶\ÂË“’aGtˆ’S)rŽÏ¨‚Kªèž¹Wª< %ë2×VÑ YÆl9ÝéËÖ¬ŒÇ[ÝE +l%9Ç[d9#fÖ«†¿‚¬)z¾A°¸ŠÉê)fË0kÎèñµ¤¤ Ïps¬Â3h&‹†e +Aw´¬Â32«ð ·Í,g8vfÍÁ*<“fž…¦±hTm +Áx¾Uxz3­Â3X1Ë™0j¶Láõ—R?_Ð*<ƒf²h¸M¦ çÊ*=à ³JÏðÕÌ‚º3gÖ¬_[eg,¢Ë’4þŒjM ϶JÎh£Ut#fA“}£j Á]õsþr&­NËN-ÝLg'ŸîIYEg¸\VÑŽ™YÐpÝ̪ ‚Ux&Í"= MãѨڔ‚ñüœY«·3gÚêÌd§­!sÚf ÙiÛON¹ÞžEzœ)+CÃ/2D`øNÑ™>–Et¦'fÐL_ͨØ$XD—¥eEg¥fÕ†Ìç[Dg4Ó"9ƒƒÄeIõZ® ±õ—O®{g‘šA2˜3"ƒ{Ãi²HÍð­,B3ü/ƒdøgF­ÆµEb&)+0 ‰ø2j5ø6l‘–Ñ<‹´  ’É´^«åÚV¹äúsi$ƒ/Å4߆Ÿd‘–îMY„e8\ÉpÈŒJk‹°LRVX±eÔj°­?×"+£qY)YUO$“e½R˵!«þRÉuà,²2H[†ËcÎGÝ-²ÈÊðž,Â2<,³”ê×a™¤¬°,$ma^¯ÕàÛx°uêͳHËàÀ,e0mÔš½6¤Õ_.uCç•8>{ߌ¾!2¬{àŒ‹þiÆ<3À¸y’´µ‹ÙWdákoëÛtÆÿÿ7{ýu¬Êý¿ñÍù8óS` U ÏèøÇR?Çv£™Õº&k5¹ W}:sˆ 6q”ìHk›Ðwwú‘‹ßßÑ·ûïðhäRöx´’y»<ýÈvöy°hþNÆqI{=…dH5&5i›‚ŠÑƾÁ ~d{@P²Ð.KÝ¢¢ù;AýÈ6ö‚ˆ¹¼Ý ¢–´TH†ƒŠ¾àFQ?²­"(Zh³ˆÈ¥lQÁ¼ £\ª-#â,ÓˆÈ%m’àà/´ŸÔlgG ógØS"ri»JT4_©ÙÆÎq—¿·Dä’v— +IqP¡ÚvÊ¥¿ñ„Ùœ l=Q’çÒ6Ÿ°hí§~dP˜€< +.aª€ô•u¡Ý©\jñûSøÖCþ¾6^Ê–Ëߥʥ½O…,åïT!µ„½ªRTÆ…6±r©Åocái¨¼,‚(a+ råofåR‹ÝÎB†ò7´Z–V™ î’ØëÊ¥¿Ûå +ìwµ„/*—·ç•K-z׋XÊÛ÷"ªý¯RÂæo‰Y¨v6Å,n¶eYÊâeÛÚ³8Ó–å©\jñ›cYÿÚ²Jeq¯Y;d¤6¸Œ ìœY¨vöÎ,ît®ŒKÚ?³øÌ¹2.i-ëGçʸ¤}´R+·ΕqI[lÿ9WÈ%l³e½ä\ —²Õfqœs%\Òv[™ç4÷Ó¥ìÄYæ\ —´gñŠs…\ÒŽœÅSî§+JÙ•+ ·¢¼ä!—°agñs$\ڦŠΑpiwY×8GÀ%lÞåË«(·8G¸%ìëe]âÙ–°·—u|säZÂþ^ÖÎj {|ùr*ÊÎj Û¦œ#Ó¶³žnŽLíofß‘–°˜/¥¢ß‘–°K˜uzsdZÂNaֵ͑i »…Yo7G¨%ìæËiP¡œÌæø¼~¡ ñ&oIoîßžê·ðK#?‚Ü2Fù qXUƒ1à@¥óˆúG@‡¢v®Ã !$ ÀËBCô6FÒ2RZ UÖßæáyíŒödZðä9–Ó«nXtÑ}:ž§ù1 ºK9Dª‘^8#Šª PAFË~A°Vß_ú¡F+ŠXcšTŒ¬::¥.K‘-mUtôœB´lÉjª^á ‘Ð'd-—‡)7"PYÕ "ô–Yîëר"6îmB ®'¨M‘¦=ëd·,bVá4ÕJÎTØMÆ-µ‰TwL1«/6cá×@5³$-4òüTSr*Üå `~‘ Gú?^$¦…Ò_êØ ”êIûÍ(C÷héÿ\z.'íaú mív¼Ì~§JU‡Áò@˃-M®Í¦*U´Ì¢ +ÜÉRp„Ì?(ÔTü«ñdüR½½ZÑž­åk­Ó¾àœ†½©Ñ~­V4¦ªó7KE2xbSû€d¬Ž¨S8;(%„’b‡*+ œÓ´˜ç%5äs9©0 ™lÌ$p¤"·'«©+³Ýe¿Z—¾å¯Ùß–QÐo€äþÉÞ—-¬½VcÄXZ`i˜1\†L 3ú#°WaibB@p¶Êl«UVâÅ—“ά'>޹®8·B¯¯ƒC?ß8©-p¸nüH&¾«¬KûQR2¾ÂO<ŒíHjnuuC¤À? ,w±)°ªjÇtfŸX¨a…°Ü–WÝà­¥×ÈYUøÚ »X¸DL ÿ#ŒØdÅÃàûT +«Åy;©.o— °ÖR22[²‹ñ”×è´TuZfmÍ]å-ß¹ì÷jëMÕ¼âÆ„ˆç*`Zìj²U»ÔßXÀïÚéúš…}¥â„‹µj¨«Æ×ºlûô+¸Á\á*§½zv¨ÒƒÈñìA d‡*=ˆ¬Õg³öDgn'Y;ÏÒ§–ž¶ K/h sTYFt¿^¶ö¿¥AÃê•¡w3‡£¨¼&ï ¯_CÀdC•—Õ1Š|þý]Üóû¾f•C§eæW›SߢR²­:;Óú+«êЇAmަ±* jë`¨Ùá…êe™¡ú¡P†,/Kƒ÷cϨ‹z~ÿ~<>ž5§Ð#=  7šª¬6!9BoVLº™’DGˆ¤þcM¸JÎZ±…hºÅòU¿£Ã2¤°0k)ÌæŽºüØQŽä³¼[•Amƒø! *9ßlÄ +ÛàHZ¶ÆùæfDQ¢ø/E·Ä²Å¨‡(ýUÝ¿1ÕýLoÄæóUme]_^Ï•MµUrÕV©¶MÐ ¡!iÑQœE7/ ® ö°*ÑéS£VLPNçi%ãk­Á ~m2l‘@ÁëìýÙÊ´Õ{ë“,ȶ®VF»­<-Ëúä pY¤C€àÈó¯½2ÉtS'ÕeIœ¬mtÕ(Y§¿°jÞIœtfIÔ¹z2Ùìm+ÁÚGQŒŠëòŸ¥«l¼Íòøê‚Y‹ÝÙìÃû_çVŠÀÙÉÕÐÑú¥ÑS2–6vo +²ª³µiWnQàUƒT3¸­ ¨Æws á–È K–*ïJ4›”­¢_íÙG×?`¶2YíÙ +_Ñ»"OaÃ`x#Ì ¬0ÌmZ÷Åxúr¡Få  É®í°+´×ˆ«Å*KGC4BmÔI+eïQõCf-ÁxTe»ÐhðAÐÞp¡Z° +ËfŸdÚ(σÖó&£Áf-ý¹jdpj`~wîL×4×ä¶xº-ká[¦¸èM2èo(?ö™ ûÔ¢ÂÒIx mŽqó +«ð’I¬#¢À‘–•Ý#2´£*0\nˆHÑð0ðÄ +þÅ“[mÔ ŠŠ-Þ }«‰‚ç ]`Áé¥c¹’ˆ?183Á—Õ“ŠhDÔÛ²$é¾ÐV¡`O4¹ð¯,ãR¯DV²?7µù j* zŒEP Û  ‹Eë ¢%•Á—‰ú¯f´=à7YâéT¦$ày5jVTŒækDœ–ø”-ñ4¦dãp“fÊážÇÆä6ª6¿C¸½6tGð.l®ŒËÏ,J’V9UUT*YyybÑtÛâFšRKŒjû”‰žnO¯A¥³<ªÈKäkÒ<Mï€Ó °ÚQ–uÆ +ƒ¯‚@˜(Ë„ +"ÃŒÁóS8¥xœ…X|FE‚¶”‰–$“<M9Âw´"á¹Xª*€– >8}nÊ<ƒ›túS±”ŠG ¶„á¯y•Ð\YÅ¥%ÓkM”Š=¤É «%)Ve`’D/Äà[Ž ½¦~RJ3¤Ð°jÎÛ°ÅedÖ/´DÌÇz|àIÕünGj OçÔóº^; n»ó¡Xî§ó½% í‚þC@Ï[m{ÕFÖÒ«õŸÖÙ“Zrºûøu*ðjßo‘…ì»ã±. àT1û¶"TG{ØÚaô:C.Ϩë€ß/ÔÜj&vh« &ë^ë¡8¹`NâëG¢RÝ,‚Âþ†ÑÆk†[ÎBGœ'\5ÑËö’SÉò"¸+Ä ”êkA‹§E< +a%ÏP¬Ì¨xÊ jÃÃk`òE½ 'ÛQ¶ñšŽg™ŽAá m0þ-×µZ¦!ô^ ç†pDÅΕhJ€å—±ë¡åÇ9Áðð¥OÁ™N°sª¨Åz0â9–æ§æïà "â×j®–"Ñú/LQÒvXð_ø¬hòäWKx'´À“ý×Þ Á¬807Õ A F•£W@uàB†[$ZNÉH!O¯"ót(Ðû×_o…$à/0F§s-%Ï‚a!Pd‘-¢R9);N÷„ÓŠWµý<u¢ˆ[û¼^üeI§ó̲ovŠqMN£`Žpƒ„3E’°s0A:‹:F16Ô U±ëôèp+#c xJÀ „çy-ÿ>(GÍù§S|XŠ6çµ·Dí0¯VÉÐ{Ð ,AkGlk _‚=u¿~~{‹4š¤é`T~l¶gòz¯¶@Ö öâñ×¢Õb„/ol¿¶‹ +ú¾Xó*Œ +_×µ5Nd+ÚG]œ¢DH®Úhºˆ5عúʺµ³å¸kb¬41¬†ÌpæZÃZWƒ8Y;ðËâÞ£í»#*’´xÏÄ 3‚o_!E¡UTÚŸ¢™eÒÐ êYÝ€$Ó)xŒNÕ¯ÑBìÏæ©Œ¢Z R•$iø® Qp™‚8m}Pñ\¢eàäŽå#^ÈÞÃy^Éè ~P‘*f ƒŒÞì "k“ä!ÆOIÍhüØn^Áñc¼N ªÌ±Dت@¡ D)*ƒ‹’ (‚·ÀoòŠR†#Oe ò(ˆY€M5¬ŸKbÔÓ•Šš…¶7 + Y +uèâ <Ê(Ù™W7^*ùõ Y +•éŒÄMdØé/.„!8WñÛM±å™št,ÚÒ‘jëé0î¦-îF +·™Ã·Fy…cpgkYpßzBp=ÜÆ#w’5œf%аxÜ3™ujråACæû2žÇ ¥NPæUqUm\¸2.ºµ+YvE‘Wïý †‹’½ª3®ªËWÆEw9*‹§<Àñ¤Ó.—ÊU§0ÇüüÅ0ŽSÊOÛ² •¤#yКêjNÃ×úË„ñ ºè7Eû­!ÑÿÖ·.i§—â]3Ò=Ý‹]ó£Éè¢XÚUŸnGWvˆ]Ú¯µÑD"Ö°kq¼M¿µ ¸œêâ]]·«1Õ“lŸšï´xrn –´HîÍ¢«K«JÌND3ChJõ´-ÎûY«£{±Qc}:gqNÙÚÅÑt[*špU»bɶx¸½ïÒêèW"š¹®¾'õÄŒ›õ>/P]L«è bO,Ú9uŠË­wtun§ƒЮµ&Û&ìa+xYËÑ×þãñÌ1®»àA¹°æí^¬wGÿ·+…R†ªý +Á“éKÄÀ™:/™êMÒz“k}ÝÝÑ–9ž)®© `ð£IžZÎɲ˜yÓÔÚTgöáìxÓºOÓtI<éÒnÑÈZX8U¿çFŒa¦úâÝq0÷TiJ<™hÛR[•̈vÇÛrjH§–ÆìTÁÑO‰ú´^kµzc †T¦1Ö–³ßN¿j7êÒpÙØÿ1vü¦ÎŒu¸¦»&ŒwM¶ÔEÞÏt=Ü>kjC4)Èem*ÙÞÏÇààU!ï¶$>¨lL·ÕÛ›µ,–¬o×ô“ˆ³«7Ú”|’žJõ•0g-^G+‡¶Í ç˜ǼŒÐÁ옗"© æP%™gUUX7ÿy†e$FPe0.2¡40 £ +#ª¼(ãkÁh]²f„¥\ZMYšf¸,'ɱ7޽ùºöFpìcoFè`vìcoFÉ­Ú³7*'ÀæÆÙíqv{ó7ÜæoļÚ\9ÖÎÙ,:NÖN>æÖ®°¡Ó…®ÚT:Kw‹éWcÖ® Þ7¬›Å÷šé@½k2¾.ÕÓ=È\pÎðçᾎĊP³ŽF2‘ +Áÿvæp%ÎarÈ^fdóÀ % g8Aâ\2!‚ó xbGPV5]´¢(#à„¦fmg÷¬XÑçší^:,¦v¶ö¶FñF³Cç«ÙÆ¡Œì‰«üTGù9ÊoT:0#E)˜ÊÎQD*¢‰ž˜kA¬R½MDoÔã1^å%ŽUÁ{@o€•y–rjËŠ$+zßx›^¶l`ˆŠRèM¼÷ëY,½_/‰Þ­g‡Kå•Mœ"xf Ïp¢ÊòåPç0·¸$ñ”UdÚ3b9Ž‘9VYAË›ˆY(sDÇPvKmI }3Ú3ÊÝDXºìh•®$É JEEPIJ¼C•…Ñ*©‚h¬HòVYòôFuÿ5JYÍ¥ ,L8²”QV€i 3Ç¥€‰ñVªÌIÆÄgs³fÐÙLÑJCiJ9 ¼ƒH³IJq*2Ðn"æí9¢˜PÈ¢ˆ± £èÂ1ç½3'gç9ÊAÄ' §ìFÍÉM7ð M1EE"}Éó8¸–‘DPÈún½UõjÊ¢ßØÅd¥YÝc5/S¬ê=¦ƒû»q ‹cçÈÚq'J¼Âä—eК +¥î€Ñ¢b^p3ÄFIèDÊ1R|¡C!3©¢‡':ãÌö8ÀãáÀDpoȇáx¼MpÚU6Æ8óœI¶š,©ˆÖ¿Á Ž\Ùí¸Œ3g½ÅÙ0²³TQ»8ꌹn/Zœ€ÿ2•¹b1ÒÊ ž'gˆU;k1*……ÜÑxWáõ»Év¾Î0ÆHo—\”ˆÍŒuÁpë®O'µô5?X2ÖÝK¦"¾h:žÅßfÆ¡½$ÉþÏhŒ%¢8ΚRÚüŸSߺ¤ë4—5‘k(™Nµ¦ Bl;]P¥šÛB¢åÔ=Õ›Œ·¥Úc6NÀ5{ŽÒAò?28¨¤ì[¿üNËí!£/ŒÊërúÕ,<Àˆ0JçÖ=B,¯¨;E;Ã{¸ Š¼" þ„¢ª* Ú¢¢*†­,‰Ë1”c‡Æ SÁ‘Ã[òý†¦ 6ŠY ´1|— 4-£²Å${òǒS_±û,ˆµƒšúKutg¦è£„æä’d¦‹‚qKg"Þicâ9VJ×SÜh¶Rú\ÔRY6?y‰S$ÇÊ”beH]ªÇÅÊŒ®ƒÝöö`r~®Pr~†"=?¥—ÉǶ¹~Ð Î :þƒˆÓ]ÑcH,ÏÛ*£ ÿyeØ»ÿ„_aš™Nu¹<‹£í©ÞÊ\\ræ ±„6"Á8˜—3Ò‡!jÌ9ž‹£ûÒ­‰¤&'3€\Kk¤‰NÑk¡ŽhºØíÑôÒ}?&Ï×9×ÝÝ–HçòÓÓkðÔÍHô¤s9_œJ¯È]Žl5î!\#ÂîŠþÿì½ÙvòJ²0Ø×µ–ßÁ€™' € fž10x˜AÌh†]µ÷Åÿ$}Ówý&ý0ý™h@¦Nï:ÿ©ZŸ7 TFfdÌ‘9°‹q8جù{_/4Ww{ùתÒ;ÉŽ–köºÅ®7#—äï!ü‹ ãÿçˆõÿüÿ^ “™âëè`uºgý%®iðø(´ +Ñ~ÚC‡ˆÐÿvç«d B»î!ŠFwš¢{Ñðn>¢ƒàá*œò$6:>ÈÑ¥'(?ñïPœó¿­îÐDr³å?ÑUHÿ¡[´ÿ#Lÿ„éßÀЍý2[/¢îôÚД܆þo` ë5}ÿÇÒý™~…ß{»Ù¶óŸ)žÿÃN-ÚŸtΡEÿ…)ŠÄ§c¼ÈYHÿéJ¨z´kù?fæ¿A‚á[Ò2‹aB¸#íôekµÞŒÝnYn…jýK³”íU|›kÇŽQóô’¯ÒWÿ¨ ”ÈÄÖO¶ìþñÅ•4 $­ýÄ%$¶z.y]g‡‡ñ2H…ü~?ƒnwÇWîz`\0"HBÁ ªÖáØCÏì ™/û>ªŠ"C8r‚ºö(DïäÖ,»8¼â'ƒL†ê§HWVxHpùšBgj1t>àñÐEêÏžÐC0H}ATBÞ#ÁpuV~”;D£âÀà~ó›÷€ê`=Êaöà{Ãø\ÈBÎ’AÉà~¿0Q•Þ'»Øö}`Æïgø²Ï`‘'ž ƒ¾|ÔÅý~𤂸ùÜåa þm@÷‰áóü¿¤Ìáâ¨|””ÕÝpCŠ’!ú:…w’QŸ_XU‚ +ÁJøQÑ*ï>SLÃø‰ 7RŠ`Y0|*WyIƒð +Ö-#Œ]Rx‰F!»y¥iI3êùqQ4㢂0.: "O]M¥Ð4ŒAäNø€ ‚4b” +‘† ¢×ÑÑ(Á`q∇,¯q Ñ’ÿaÞ•RÊ2…¨€Æd@ \ 2~BeÓ¸ +ƒ›´žA‚áF<¾@OT–ŠIT 0‰ÉòIÃ"ƒÈ!t(àC—ârc@µÏ )$v8Š®ûe‚'k=þ£Sa˜£e§ÄßÉÃHHB(Ð"=€Q€Ì$ Íã9   ¢ž?± Kúý> â¤HJVI81%£ ~ ~L~AÆÁø1ð£( +ðš4°¦”/! +Çãh˜WÕ +Â0HŽ ý’²LL~²£ yÀxþ>D|øBh!@|û‚„ÄWH h¢I?As„ç‡9ùè a,^)„"Ä$Bá,ZÓ%»eQ<Q„_”Ð Œ6äÈðŒ[”vJP +/¹ŸÈ#Š?Æ»¼t• «»Ç;IŠ# ëCJ—]ÄAO‚¡A0IŠ&¸,YÀ1ˆ)Ð$Er×L‚ÜB¤XB—Mâ±>Ð@@© +ÒÏÚûß{’%Àõqâa¤Š@zŒÄ@^¡}|Q0 t0£?HÓûÌ#¥4ߣ¢`Ñ IÍ0h ø ¥Ñ5Zøš`?̓£p2¦‚ž½ø €0ª} ª`4HOcQOJ+]Ñ/G‡Y˹b‚ŒÌ‡QïÛcU$é)xŸö“8É™òù|`èm„-˜!*Ê(^~¨ö^ +b!ˆTJFDH˜è2Xy?'{ýø@ ˜,Éž½P@ð_ÐËœ,“Ø–Æ:ÉãS°JP®·¬ÚƒÒ€4„ €óÀˆ6§Ë±å–Š?è š™¦ñlHT) rÛè¤qXMFãWQÂGö씃ƒxfööÀ8Œ t2heÔ…”.˜fH”ÆHð1œÉ@0E:² I. +3žøä„} µD1«å¢hmB"Ť ™àà‚0òP™<‰È„£LPƒ@É` üé2ůD"2„%µ§‘Ø( 1`ÿ#ó&Kc¨(ä¨]œÉ®` ÊŒœØ/)°”ˆ4&NŠŒr +ð®À‚·Ü!¨`tà™Æþ|#E8!Èñf@b©â_£9„%R‹BѪ‡@îHtކ³î`$ Žß°š ±Œò#%ÓÀËZH‘ Ø©4„Û‰,ÍÅlìYðèB0¤ ‘­‚€ Á)_Ô% ªÆBÜéGVª¬ÃxÕR`å~hmX 4%µÓ<2èäg‚ì‡Fú‘팘#(:߯„Ð@s¨ƒ †Kú@3± + Ð ¸@¨/6ØQÁPøÈ +ÐêCÔ‘&——ârã +"Œa}ð‹('‹‡ÊHÐÁ˜äÁz‡…C†[ / 0#ødÀOrÂT3X!¨Pl@EËî¸Ý'Ö¸~F +ÄÓ€g,qcZ “ò³1S“ ÍÀd0€ÍÊ@f¸L†ÁC…Þam D{6ޝ“öÉô->°HA QãÂÖp†¶ B€€åä¨L ç ÄÅùèXÀ Ø dîÒ:ðpƒ´( »ŠÖ1}ä¬È W‰uŒc‘Ij:£Ýë‹/|¦¤œA'` Ä™EÀè¢<þ´@.íã°áWà8dË…‚ŠÛHb»L"·ÈœAôù‚AÀ76Dvƒ(‹â\m˜ «cçëãŦ½¹æ ®(7Ch)9 + Üzä:B—!RAl !4ÚÐåØsýs&Ñ•Ü ½‡ÔŠ r'€PGø’»WÈk”XqÃÂFcËk/ÌùœVÿr]sq*QxL9—UÚ\ÒQcú§Ž÷Q+ÉkÕõ`<êx“o(¼¼ %ÇüÝ|¾²jk¨ÚQn9²‹ë:Þ8Ù›¸5×¥zv‰¨œEµäßJÌþÜlzúÞãÛî U[nÝûŸè]ûü·D19Ó";x%†‚àafCYA:ØI!샀,‡O!<6üøì “KçGž$¶Ò$¬¥ë—½‚ˆšB¼&r[!Ž-QMïµ +ÀDÎ +œ`óø ´0´¦ñc#4ŸßO0~ÆIq®üáßÞAGn’i5¿`ÇòûA)Ÿéå/æÌÀ ñCœÅM‡ÙÇøŒ•:m l!øˆõ‚d‚]¿ðÃb° DQ+Fd ]Hä/2 ¨y4 +P¤àƒ7Ià +#´Àtð›˜~†;íy† +|rÑ ßáŸÄO@‘ +thkpâÀDžv‹@u,§tUQþîCã "¤ÓÜñ\òiŸþe?4 +kwÓ„¿‚ð…ˆV ½€s +´92“AOr$2Ü(”õ|lÙp4 +Ë2Øø þI C?-·R+ü(` + +"Èi5ð]¦øù_|kpéBDÀÏ›ÈG=ýË~( g0c7‰ô°<:?ô@ˆàL_y`ò1œ&‰@ÃÂù} ˜©O þí9ða7Y(ðWˆQQV +3!’ž“ظAyÚXƒƒš£‚~@¯|ª §=šÙé_Ž c–HQB ö¿ö€i/Æž™qüdq›í_§–³åú:·^îV‚TFrˆ ùQÈÊ pV(xn@~¡ àËQ¤R)„$?×òô!„D‰¼x?²uÑtIQ‡M$p°€úB$Z*.Ž#·ï™#O„’äÀ{œ›Šm~Fä§ú ìâ( ‰s0rÛC ‚àôÚaz¿_9L¾ÒC`ûÖ^Q&Ž!"KC"IIl +›˜ÒÝ $ +!“O ì[˜ˆ0)yYAƒd£QlœF‘JO‚;,BT\mnJ$Œ SQü{pÒ}4gî1Xh!ÓøÄH˜?ˆÈ @/BòñQù!J˜—•7PÜòÀÙäx-)ìívp…M]ñvïÕ?îWüÞ0~¶ß.O6[Iš‹¬@A!OñJ|î•ÂY3¢ñƒÄ}‘ïMsÐOoO+΄$¸‡?çýå uõ ¡í¶Û墻üÛŽ¶f¯Ÿì­ÝÛ^_ø‰ý×6±f{ÝÑr°Û _jËÕãJö"B @ø¡Ö[°³nj¶Ü°\Óê¾eoËf'ìlxhšÌæè¿õÆ@ƒíQŒQµf‡“íuª·âãåj…ò\àŒ¶< ãl8¼ÎöþX®¹Mož»}?k@•dÎøãW; 3³‹- èÉÜõî@Iè«(©ÿðT)ß/‡¬Êãȵí_óÙ¸{ÛízÒ +áÊñ¡qb Vîe7‚"jÌl¸f|«}Þàþ1ú³ýsÅòm–ŦûGo½‰ˆ—Ämÿè¡ s¾1z°QiˆÊùvüh6Ò¯ÿñ¨Z,¬,Í–ƒ);Ô…¦}S×ßb‚ýÉb&õLh¦ÁnïñltLTÜü’Dñ{¤ÚHчŠI¯?cuq†ž•þÿÎ +á?ô‹ÔöïAðhž F·Ëùß@üý[I4¼éÍW3éPàCý”ú_Á7 ”×û÷Ï/VÞŒþù7 ïÿI¾™Mÿ}Ä8‰’‡UÔª“þçdˆ;½ê|Ë¿…ìv}>Æã?9»?uÍìϿɬЦ}rNc–?õôÄöMÿ³sûPüöäôþ¥OýM&u¨PO ÷¼Ì޶ÕõZ]Ó;~éocL`)ÙXîÖ6‰Š~þÖ(¹¿Å8æì¶73ëƒ ýz0¦!+ÑEs¢ÖÜë¯v8Ùͯëìf9Ûñ凎’¼>cÀjÚ­ð±€[vÁ®¯kk•W‰\>R8Ò#Q]WØÍøºÞÛlÙõä/\B!‚ÿB’Wª»íj·=õéÛ× * °Ü[|îzŸìum¹Ú­öœ#—̞釫‰‡ot¨Ú¬–[ùos|õ7æÀ~È«ÞpïÛï‡4Xò5‘¢w{³‰È–J®»íò0É=öÐ6gð0±Ðuo½í/{ëáõoPן¸¼Bgãõ!ê@ÉLêMII¿'÷â£Dí¶ëÞb³êiþ„'Ãë0³"PËUoij™Ìw³žhMO&$ê–OÒ× ’Þ–…²8Ê¡S¢©ô<],Ó%Ðå'·#$Ç}Êõî sËúöx¯3ÃɶןÌ&Û½aÂ|—{šNõô6 *9ÒKÎXvˆ´G«'?î µ^®P™+U2Õåüp˜ya“à'Ó`gì`{À:y܂ˋ$º‰áÿÁì-'‹-–d¶únÆ®%šN8žWQVö‡XÚ¸&O Ë›=2j‰ú¡SBºÎΚË:•Fm¹™ ‰ãÇäžDHêÚþè~“:’ðû!c$+.Vs¹’­•èaYqâÇÃ77[ö{³:»ÚÍ6»(™A‡8:<òfþµZ®·ÈÛMl@LoJìŸ2¼×ØõfÅb +ÉÃv1Õf½‹ +1m6¶ÀP'^ËΖ˵Æ{ÁC^QN¶œ$ä=ñ8XL6cXiÜðlQCö_ÙÉz³ƒB'\<ƒ$¶ÉÄ™zA• §z9 /ÅÎf™m-«$‡>Ž¢ v°\ Åцö82• €!u.'ŒVOÿ(ó— ‚¬„i¢Pë­¹#y7]h;»\l7u¤L" _âzt0ZV{1ŒvÃVh;j¯™q~ª®•pu´ÔŒ Â$`×X×»ÿ€^@ç?÷ƒ#ÿBöÎ`6YBAQ½öûn߈Áí'ˆÓåÏÆ,zc¦¨ÌÔþ`(HjÈ‘¤ Èpú‹–ì¨T %Øò–ù%XJËE^ìí’~µÖh]Rà¹ì[ª÷‹GP]õ‚&ö‰;oí"Åó°ë!,\—Ù?ØÙ‰¥[a6Y°×\Q¿Q“Ù2n¾·)àÙu!½ëµ¶åå 7C:QÒZÜ¢‰”½×®¤ÏCx‘<•ÝÍf{ýÁµOÌ¢€hš½Åvr XéígH«â­HCÑ"TDÜŒ¤#;‹¤º °Ìq^Le9dO..v®¥k«J2˜â³½+„.Z_‰Ô©¥³è8 `-‰§Eè¸÷œÈÎÞÏJÒqfÞg‡µõr4™±‚(SŸîU:Aå£á‚àÙ'¹2ylçKºl'ƒññXƒš‹!‘•š²G^ì(¶ •fMq4ç´jK)›iœ^–Øiê3ƃ“LÙ§Þ¸5aÿ ÌÆðV¤ô›H:ï­Óƒz+­†a6@¼n¥–bÚVg2ÔRÎc(¿T­gL‰â®OÈqþ^zŇ_ÈÄïÑá²è8à§çög4£ƒˆ¸p†fƒ{«Œ$øø-ìîG0$°ÈëL­q>0î5=ÐÎŽ—ˆäs£÷[/ovÈÞÉÙ$@𫏇Hm.–‚}u=Y`+¹O‡°ÕɸF¤V¬Iª“PL)£RF‚ï/Ö¨MUnô‰í5Ü‚ Êx[œ¡–”jz¢ehE4Cd¢ac€)då¥x+¯.³òdm«¼vlJ´£r›†ºé¡@û{QábÎÞ¯eßÓŸlç=¤:¤u BqûÕç|êé#)¹<\x{/fTÛÏÁëßµ'†#í~·aޱLÞÏÑv+8zæ´E@ÙÕ§Û± d4 O5Ãáž~o½ÑÂË`=ô n˜õVž±Þ†œ1qªÑæpPF£µèŒ›“^/"Ýbª¶¬Cv„¨P¼Ÿ¨Ô'š14\ÎJVi6[ªè,iš=íõç ¥< +t΋XNª]nIpX¾“ ÷Ðý*°W|0IkÒ«ÕڃêšÓE­ÆK±âSo÷Oy;ELÏÓZ¤ØS“XÔb ñDÃ!»™|.ÄKq‚™ÑK ‰2P@oÃI1™¨Ø¶Ïowé•r30hN£]Äz„—°$B›’8-¶žáìÔZIG»­™‘¼]®ôpš¦L“@Ò£"ñ̆>WK¨Ú˜›ÿj=Z +Ú\ÇœD vb)6Û¿«ÕPc!P»!êè£Õ› cD@Ü0´t#4âÇpBÚnÁc=2ŽeØ`±9ÕÓf°š ä1eù +mvýÍ'&ÐS¸FDÂî#‡ë6Û÷¶&Cvé­,Á=g;Ú+™± xDFšžÕãÀKOaz°0“9X×§˜Ih(¢Ð ôƒ!ÙÁIZíE‰0ö‡üT:ÈÐ Mø!µ—ÄR ½CS*R|©ú7Bñ*¡!†È.û"PU¼æ›#ÏK6Âðºÿçuz=AÕ Ú²º9Å,ˆšVi²-µøe–-2†5tÂ`îAK, +B+7ÚG”ó?ûWtŽ\!“Bg…Ü”Ga먱žœ +q³õp½9-  3‘V8AʸËÞb±Mòxq«}n³ÑX®ån18ÕFj`«xVÿ×JL Jë-6»{ýÕ›kªh¼\ w§Z –§Zl´ÈZ iOÙI•µÜ¼Ø;Ñt6ÑšPûŒàˆ¥v+¹Å%ê‚_ ÷åvÌ®Oõ';ª4\°Ÿ=ÑN5­l^CÃ͸7d׬ ¢VìQ«ˆVÉzŵ¨£d¯‚¥6xxJÍÖGŽ2Žó(5ýTò©5È@§U–X´/9$ LbßîZ´ ÍN@a åÈ4΂Ú)ZÄq®7­@ +)o|—9Fœäd`OÓ;˜ÍöÙZT…Ú#[áx?\Þj ë°Þ°¾{ ¦›édvîbªÁÞâê÷öS÷ñS[©àþAcŠ[Jɧ¸ì@Љ‡P%žæñÆM(a8,¤å ˜à1˜KÆÙ7"Ë5ðÇ[o;|°Zñ×ÌÇ PD_#øk’FîÐ×*׸ù2£¯ü5| WðÁfDß&‚µ¯|²GÑ×&€ÉY= |q VÆzÎ<½§á“뽞IM6M/úЇêO{êî |p“øi6Å®¿Ñ×GôÕùˆ}ÛЇü ù“Ô¸¿Æ_¹Ù„`lÿ\hM:Ñ¿/Õ8ÓoÆìmz—ðÐå;ôºk‰æ÷ÆœÍ$àÛÖÉôo¯é‘5oN—vô;ÆÆ' Ýãp&L†1•.Ð*}ó&>Zdý¯¿,«›u<(N>M÷ó •1¸“Þñ<æÜ¯ ¼Žþƒ-áãˆ_BÇô…ûQôôf Ø1®]ü#z~/ÂT­¥wø}:Ù76†ÑU»ð¤PÌ`¢I>4î‚ôÛ½‡Ì%Ÿ_ê‰úðÎ’ÌxM><"›çóûÝ™ŽM£ËòÉ‘K¾>’ÓðÐÿ~ž$E%t[Eô†z¡`h™~'æËÏ]ö6[¨¥A+5‰æÃÎL¥LÆ¿ïŒ3SÎÞè›Ý௿¼ÓbÉàŒm× ¥E1œh¸â‹Ôäsˆv–˜ù[Ì“f7wLæe”MÆÃ÷_Soiäô1óWòQ6žJ¤°ÉW3}µK”žM#XÏ/gÒzxM†+t—œÅgtræ7÷Æ»щõ @:§¡bãC`——‰ÆÎ0v&3Ô(— ×ngÃ#ñôhhí¾Œ†§¥+cxéFÇÌÛÓ#cx˜½>š~—¡ßª7 çÕa4Œ• ãeok˜Zˆ¼a~þ6,«žœá{Ðþ6l]TÞh(ôvFÓ*Y1Z’&‹Ñ6~z4:Sw„ѽ1‰J/b¤ÉÊÀý_á¢1xoµ#áÅ›1fíÝãëçocj\o³ï%Ÿ±Ð)ÌŒå·|ÕXV|Æúìaa|ܶšÆg:zKÌŒÆnÃÐ5öçz)PÆÉ#t07­:ÆU-X@`¶ÖÇ€ÉØXߘ,¾»±É>é·MîF o"éç Éo¡¦à¼·1Ý~DF¦xýëÅ”¾/VMù‘5•ÛÓ¨©ööà35¿¢nÓ³Én5uB+£©Wë­Mìgcnú¢J_Æ´¨§Æ¦%ñyc¬Þn¬®Ôçó=7¾!"¥¯¿áq~zë~ßÄJ+ÃM*MZoòtÂ}Sq¶ý7u×&zÓö„s7oÞVí¦6½ÞŒ*¥ñÍôc³»Yms³!²‹³åé¾lvî¬ofò¾·0¶ §ùöÞ3'‰QÜ?ŒÍ•RÔnn0ž¸ùÙ¸}2¿Ï¦ßæá×$`þê~ÔÌ«Ñ`n1 {>‹u:|°x,ó•ÅÇ#–p|µÄ' €±ä­’¥ò4]XšWÔòòë[zÄÄgùdý¯–Eºí±ìÜö¶Õ²i»­nÖûdõµ:kä!òfM––>k¡ÚZko±;k{b[YßwãŠuxvZçåB׺Æï4´Æ¢›gz²B°-úÜÚ2ÙÈ“­2ÒÖ\4,¶··ÞÀ6,®Ê¶Y’ضɒÑnM²»7å¬Ù™r9f¿{ßxì¹ïôÆ^óL‡ö§bªmÿXJöI¬‰ÀØ¿gA¿Ãœþv:<–W“#ÐI;îò¾©#Oß°Ž˲çx^²ï0ËÞÓIçÕ±]v_vûgÇI—]g$oì;ÓÄÈyïJÏœíÊÓÚÙ3nÌίJÐãÜë €qÙº¦¤‹Êî]·îå«+³ÉN\ÕÁÆäzîÔh×àƒÎ¸æýiÛm\4§n·9æt3aw¸ÿn»K³ÑÒÝò¿Ñî·vÅ=õÔÇîÝç áq&_+ž€¥?óÄÇ+ÆSjÙÚžVùöÆÓ+=æ=³âbæ5é[¯»^ï{ƒC“ß›Úåß½Õð–ö¾<ß½@Ž~ïwí½OØl‰[‚~4M‰;/K·5ÑúL·‰þí'˜4leC’÷v/mØÇd¡GTÈÇ%C‘}2µ$ùZ‹2Oµ:©Ø23£J©÷gêÉáÉQ`ž2ÔwÙd¥í鯂øìtÊÿñHטd‘î„nâôWù3è3¶«€ñy·)§/zËX|Åg§Ñ÷ä¸ÙúØç›oCßlüΩcëµ£?—J™ýÞªÝ?pþo—ƒ 8É»@üȲIo#Ь7ºþÌ6 |‡ž-ŒãÍ`Böai¸Ü{é‰iŨ)3\/Ìfˆ”M¥ÚÞæó«`)•ô_b‘ûà¤ÿ +™ªq*D±¥Z(ii­B™ñm能Î޺ŽÉóC8œ5@|ÝåÂÏìxž4£i¹)Í–_*—¤ÓÖM¤™î”#ÃvÑÙöˆö-a3ùo㩯Émm<(Üö‚oöÛïÑËGÔ}÷œŠÆC{ô¾7D»­›RtUôÓ1W®´ŽEÓýNì¾ä(ĺ/D±Õde¹s»SÓ»ØýºsW]•kw½¬+}·^õBqo5ç'ÚoØÌ†øp>]% ïi‚î½N™áóg¢ýÙ%¾¬½qÒz;ýJ†vódiE¬“ïÉœ)¹Zœ&å¹wЩUŽ¥Ûm15êçZé›§Ý0ÍTï7ébÕãIwÚãDzõQid¼–Ø$“ :ì™Ç7C"3qÌŸ³Öö×&ñŽCÙ{vú˜íW·›œ!læüîà{®`¿G`ró ’ûvÚ×y"TJåÓµõ4ÿ4ÎÄòsÇì³àj–b…„ÝþUx|¤ +_¡ÜºhßQ÷ÅkrÍq§8n±±’­úº)E_Þ[%púC <'Û²-¸~.G»:”¦Ü°&åqëõ«b' ­Jl’LUšªò•ŒîÌçø>ȼ޷ý¦ûûùí[ºê©d#Õô;AU_;Wõ;3µÖ¨qÏT+ܽíjÝíûöÁÐí‚Ù¥ñ¡²™ÌÃȰ×mÞQ¿£¿˜z+轫Ïï‹ /kylä¼õ~ã½j_5 Æ7g3ؼ»mÖ¶jós;ê?:-Ócòµ~|iÄ×ÍÈ´å’­Ê8Vi,™¯¶=Ùð˜vâsôØ~ šíõ(–y +ä;_OU§-òô9­ ž7ÌsºóØî¼RÁCo2z Ëw/MWxù2ÏØË¯ähãx-ÑŸï¯Ã÷~ìÍÞRæÉËÛ[ë: €éDîÃýÎãC£ÜY6gÌ»¯0½W /£÷ ãxìz3Ý‚dºƒ§±óÃî+ì>R rúñþºôn +ý·Þ]¼Õî½ÄkÞ®P{èGêµZ¿5lÕúkG¿>Þo[fÐØ¯ƒe©Ð\Ÿ_DZÎ[¯vÖW$ül-ú’dg©H}Dç¿£jûi7šŽâô'MÑ…ÏjÃÒýœn–†1ý°ˆŒkÞyk<›®×ß›=2yx ¿N÷ed˜~jƒÂWãÍ9ÿZ}¢Óe6œ¶Ò fºùZõf·™‡àìyG²sãÓ<6ß6æów*[\Xm!ë"c%ß/]ºÏvYÌÓí帻]QDÕ´ª5º«¥ÓP0ßÁ˜ÿ»]è×ÚîãžNkÝu0¹Ý< +ý¯˜àm+x¶i\dvñ‹ZNþÅÎjìš»ÛJW0Äö*ºBëZtع›$JÁ +¨¥³Ý}±‹ªxŽS½W÷2a5ƒngäO+‡ãöC©,Ë>*½üç‚;$á8AJ¹ +uÀ•¤¡”ÜÅ–_„…Úr6ü©ãýƶ·¢#•4vöƒ=õh÷ëCm÷é/1¦ýšëÞjuª%έM + -Z‹|ÚéhËMl²ÐÚÑÝ·ÍÂZ·Ù>JˆÜ¼šc §ëÞš½ÞŽÙk~ðzÃnIm®ÿ9f×›Þˆp{‹k1cFêmÐÏÜmsáPØå¹~Üà.᯴³?—»ëÙõrqÍr”‹AsÝ}¢Ûó&@®kvxu³½Þ.Qöz‚sàz׳ޟ¨ˆ ÖH‡+mÜìc4¼Â"S „n8h  ”Œn9ÀO6×»Å]èÑfÛýòC׃õdu*K²Võ;±Áp!þÄZkoaߺÎ~¢2/Í É0’â ÃÓÍ›š›<éÔûd ¡VÓæz2X)ö.F…<'\ uè¼]A&•&‡ªRS  5/¸äe¿æœÕÚ‘fà«Ê à +úmŠ“4Y–ÔMQ¨ ÑÞÛ²ÍñnÞ_ô&3Q‡æTDéì"´© P³`A“L¸-~´ü’üqu¼aé™Â6œ‹-RŠ;ãQŠó²² ¥€þ¹\O˺ÓTö°ù›êþÔŸÆ  ßzúÔ»ü Éuä4*º0R’§’O(gŶ8ÙÁ§¸¿&Öý‡P +B¢¿üCƒ—R™;ý*rH_Áûù[Ý2&C\8­X´XZ Ã¥Ç(ïN*Ë'½6“Î +¶Ÿ‘JaZ{2švÖÎã*ýJMŠ2¾ôk/j)ƒUkG4çÓeªª,—‹;1X/û½m¹÷'»ÖL‹SE’ Cµ'*㣙žµÂGæµ)Ä·.,`…ÉE‘êT.ÒSáˆEjÚê£J¦Ï[”ä©ìxõ(¥\•¼Š3Þ8ÓÑÒ-kdÄt|dhÆÉ½ÔÁÕ³í뻫Z^·í¨5Ò{riKÕŒ¯sóqøsa(f .›55éy67Ç|&` +Çs±Šï.\~³VâëÝ€Éf¨JÐLú|&‚ؤ¿ÒŸ.â&y÷8â·®Õ&¾)Q^” ë}«â6ù™(Ço}l#5‰ÆiÇúy«<|€L:k3/¹mú«“ô½¸]‰ù²¼IÛ±30í²ißM;ù5³¶LzDûнÝ0¡Ózx}K4Sž–:Tq»p'~;ÍvâágîL»Ì»¬-7Œ¯ì0gzÔi3hï)fSìÎkMãÈ`Л¢OgfTs IÂÛcÖ“›ðä½8LÎÌwV÷Úù¶K”–o4{üÅËÞòŸnÛ™×>åÊ|p½QÏT(ø‰pÆb•¾ûŒòµ£·‘á×ý;^ÍÈ¡¿jÒ¿­’ÅÃ:ÂH[´ŽZ±>ü›ßLw1ºÑ®±/ðø$šé/gzä-}gz=ëM2Ð|¸Í§»±Ds<Ø&j7ƒJ¢IшLçÙ/ _2Ow»–8â•PëûTè-8ó¬óûE{^¦GÌ£úíÙ1S¤Í­êÀdº¤³•ô=³ñõzüè WÚwx•‚þÉ:+èp9“Ëл›Ò©‹Q¿G·¸¨+ôwFw¶lzF&‰¢? rÄ„ë(è/ã‘æÖ˜h·»clÊVS„úýê?­ è7”ÑáûöLrTíê!6k³¬ì©q þ’é·Ž4»^»¶FÂa䀎r.Ñ-’˜ænÝYIJ%OºðÅôx)À­j°ñ=/%ªïÉJ65* ²ÔfSÃù3–¤ +ëKÎѶÐy`[޾$óMST6”#à{b«éÜÔ̬‡[œ2@ŒÂíåñxåíðɵͭŒýPÈñÝËp)l–£Ôd3 `Ñé~­QvS!/Ì+†-sàéºYÅ-¾÷P?ß@¦ÑðÔ\vä¶Ýá<Ñø(¦½“¨-Ëu0²æ‰feùo5 ½l&øð`nDæí€‘UƵ¼§²–@ø ~Ê ¦ß–=Ì(³'¦-¯Ö2Èʨ5QŸ­âv½<ˆB«©žD鹤Iô}ƒn¼ÉXª©òw“”¨‡%=JXß%*¡žÍví†1žà ¬åïËžîI5˜J4èu¨ÕÜ2ãj¢€È‡6°øÓ3 Ðø)Ÿ\2y¢ÉP“fºTÊ»³·¿?ųùt,¸öÍJÜœœ Z¯WQ™àÝÄá‹·ú^¦–¯ÔÉþûc‚¶n2”ýæ=EæRå8úJ'£Ûß‘.[êîð +µK_âšâßÐ×$’)ü&þh”©ô4Š_?@H¡ß’\W‰[w–ñ»Óuªû²Ê &·HB£öè—ôVµº:âÀ €Ò>â‡áÇoDp4œš t”àƒfÊÍ !¨‰~‹àÞ0¸9–Р• â¯{¤¡.R„â—"è)žÈ€M®1‡ÈÅgäငFéÌ­x6 +Æ4×W÷bÈVÀȃ{ áKèO£JŠ‘(ž—ðwu6™% S"<Íeá?æÅA¾ò”¦H:h5.æ%ЋœrùÙ¨â+ÊÍsÐ#QaÖ¨qU ¯2–04Fe3= %,íãN:œ”ð.~*ƒº_Et#YÚ˜@¼¸1BFBe"‡!Öb„#U~6YŒKܯ^t‹¡I4ëˆ.Ç”¤!žÜGÏ#F¼&<Ònð(ë i¯âOÜæÊZžˆó/šW„¡Ä"Q}–Àà,­dú#Ñl•Ù8INQ€9×´øm‘Ų{0ßf»Û¦#!jg¦õ”ßë6÷ÈÆY +r7JÜ4ò8£´²S休!phJÉ€lBû«ª»ÅD^ÊÙ=½)b/A:%'vLpY$˜ŒÛ5ò¥Kwß>1˜d—MÔÇDc[˜gœe¯Mút–‡Ì«½ÏQ· î¡ðÚüNTSɶlx«k.Á ¸©È:“ÎUd0‘Ác=Á¼ëéâÚñ¡ÔAŸï¥ö²¡ù±=š§¹M•]ó6a9Uþæ9¸m×BÛ¯À&ÇÞµ@½1Ìc‡-¥G›†wR{“:óâŒqš2¾j{Kª®€{K¡¢ÉqŽøS¢šMµ»©ÉWÀÍÍŸ`ú:H@KìƒaêÃ%[0›x ·1ë]!‚æ{ûïåx‡ÀA,ýé¶ßqèØpUkjì|Ny'±h˜_/)ª$®Ê¨ß“¼e$ÓÄëPËã%¨´ EÊíó4*‰šÏa‰qä.ðA-?CއàH}ÑPCS¶”‚) Ùn,”Î=3#ðÚ3Aå|y¿û›Ì‡á)-³üñ=:s µ³iÊ>Ìp¬ˆÝY¤Bœ{¿µLÕø‹É¾w¦lf±û Ì¡ypO·®ïk”‹É‡Zfó<¿ç»gsâá¾ÑʦíÃýæ—‚™îú5¢\ê¯OZœ ^¦hmRã7CØËu»{úêx`=¥ä´âÿ6˜7Œ¢2ïÉ)5"<œÏ¤SîÂ_„¸r + _4o@Ý‹™xåypÞµzß{M&)=ÁŤWÜð Ö&º¦â†^¼QÛŽbáð$ÓîÆ›^éЈXóÞƒ>š›LwEöã‘G«GT£ü3cd´«}%š½g€žÙ·8 ÃÉ»²Zê@ñ´Yv9R£òд¹gcqo:Ù˜–!µ9™  Kºïc'ÙX4ÄÆŸˆ ³öÚ,’Mû_(gì¹ã8îRG4@ÔoYÄÆÉrwŒQŠÖ&(îÒžúЋ:«0f)>š$è^}/'iïS$¾G©•õŽÙ÷„Ò ?º\:Ê‹ÓvÔ4?•œWcH­IÌ‘{_²º£_ÝõMÆéŒD*L >DPÓw0nO"£|ÿ3~ÊŠ»âä7çâ‡ú(´ø­ë9Ç‹ô9ß”°;¿À¾DÒìªZÆ6FÀTö™ÐoTºÔ¬øLkVn‚æ»»Ét‰E'=j¦Q€8ãZVv <ñšÔfv™ÅG3?ÍS®!#³ñÞ·ÍrñcÈ}<ü[[|ííµº·ž¼G°êmZ‘ÕÃ駨è¦ì³åí1ÛŒ½r¨Tì{+ýi@µ/¬ð­×.ì¯>=d¾åâƒeFvZóæÛµ-CvÙ3²_.PB•‹}ïNÎæÄˆfúˆ…«ÏñÈ*DOŽo‡×š2Á‡¥CµnûßÇM^Üi"ôbͦØÀ4ÑL÷Èä,h +”ë{WfxÑÄÂæˆ–ðîFtðô +Ì“®$êÍø÷1˜6©I´²‰‡³æ^à.ð”KݧZw³1°×7Ìídðš. 굤¯MmVÿÝdeB¨ÅÓF™Éû¯o*T’7eS‰ØŽñŠfÓ®¦ÿfäÆš&2ͪ†|É9L3I¨6Az¡‡|)»{ájÌ6ðÓš­»iü6¶BÛDÉÙ‚°(ôÁ&§Öm1é{6>æ£o>«®¹òöŸ¤›ç ƒ™îÁ=É,Å ˆ/‘~,âJ>àdÚÄKHè#L ÷Yûsm›(=“CÔhé~˜ÎC.ÉŽŒÍB¿:ý¤1'’—c¿ˆe{œøuÞ/¿Ò£Pq–î;&æPùc}›MÌFC• "´!¾OyßÒ¥Ò­—³á¨‡†;›!G¶l8Q7îWµmEÐô¢ÙD,0¯üéBof>E³š°Ó©#ÁêI— +Fè’qÒ­kW{ÎÆ‰m~ÑÏ.üÜGôRˆ¢?€ï‚¢~i‡ÍÎ9 L“yßoÅͲ-<‘¬­0O„Æo÷¦lºVidÍ+È™6û§“/>)yë> vÞL0 S*ÿòñ[·Ç® µ²äPù Zeècf3M>[ò1cÛô;H¦r|× ^à`÷³:˜F9IÙGMÅ>HkqˆëRb9®:Ä®•Ëbê?8…š pˆÛ¿â´^Tº×Ƚå̹Nˆfº5Þ–³ ø ¶OðV'¶¡ñJÚSߊˆ7p-³»+Ö‘Ï žF|†÷,#lhÐâ÷ñÅGñ\űŠ;*q?ÿ˜ÒĪ|5em¥\H¼Ò˜dÞLèÁ,Ñè¯FœCIŒŸÉ¹1ø%2 âùÕ÷=}ƒÁ´éÛy¨ÖÝ#u¬`üëta>Ù€KÎaˆ³@ö£b©[Õð- +t¥*òIyÍ÷†F0´ô2ýeÞ}¢]ÓÒîdzcrî´ˆtöÒD6ÉÝý,÷D” ëMÄ€GsE +fÔ……Ì;¾Á/Ü”4¦_këSÖ²[±Iß. ®8ä"×7™Û‚ N=™Yòë«O†ÛtÑfË¢ýÔ·ó”˜õæØbÊl-Ãtm¯*صe%ã–·pצ!¢>WâÁÑ9˜“bá\Üm‰ÂkîVÆûÙ€Ù2h†ïßû»ìÇ;5G”Föæ_Äe“"m€8žÃ„™˜¾‚®x²¥G–•)°-m£ÙîÌã•‚™¼»>aE6&üîl %§|mhû‚#Á×Kø¬Öeˆl—¼‰`n³Ey`èzOñýɘ.;ßiööÝ(,ç|ø@mV IÞ¼p¿jÑû:z7ÞW>Ÿín;îlÜÊ6¥;zÌ/¼°Ùû 5ÐÖq÷8]¹ÜK°ù–é7íô§ß2‘I²ƒÛ˯ƒâæD¿,¼(ûme¦Æ¯·ßÙD-¾ +W6»¥4š|“¡zzêMÓŽ‰wÀÜÒ6ó2*d!Mܤ¼ßÈ"]ÕÛ—g¿æ°ãV{ašyo6½KàíÍ0C¬îtv‘¨€FmÚ“ÓÈ­›7[d]~‚°kìšC!„“Œ|§ƤߞEy6™a8ý)|ƒ¦‰Ç4¾ÇD}YþľíS±cМ´Þ–3®NÒïRs!¤‹ñÚøm‚ûvÓý'¶lËçž»«,0l¤‚ýÃñ‘Å(ˆswÖX?äïÀ º]úNâ1BªÔƒm‹¨ê6ðXze]Y3iïú¡îJ #B<®ñŠ ´¾G ¬!²æ2–u~hŒ(-kyù\¤GËŽšß¼äOQT¹™ÛyVï‰Ò‹=(J)°f;ã{°š§›!ÚUŒd»®VX>›CGÍÌR¦Ê¥}¤>ÇY+ÚCJ}è`È%–ß/J©¦;“g“dë[áb¯UP q¶À6®d­9s6??øMàAµo<é¢Ó䃞mo2ƒ¾kˆÓÚÔÿóÜhA«ßE†Ü­$FÞaâ‘w÷.ÑL1]ðL‡àˆ{ݽÄ2Áf…Ñq½Ð¶D$é<&™E¡I¦;Ÿ +ų¸w߈ŽÚqr s–X©|þ…êä1XB­£3/ÃÞMè³½†ÁæÑåI251¼¢z·ŒÓ1øN7îVù~CÊA‚Ë07‚3ðØÏ¡p«™¤¥iÅeÿºŠËF6еhGG/‡l2LhŸîwÔ•( Ò&Ôäp¹}è€Þ%×N~´¸ … Q”Ä(;ÙzÕ[NDúÉÈ“Åt¶Ùz¢‹$lÿïÿùÿ?ÿ—vf+ÿÚf°­¿e'êÓëòd³Ubt2HA[Ï_pÞΞù.‹œÖõ:í'\«ûb¼ÚÄ‚ùÛ¶'»|ñµ2ë·"ý’}nf£‰è€t$˜á­²(fKÅZ=Eä?ü^êï’.ë¸%‰ÏUGŸ’ðÚ[‚CZz åo¾dCØ:Ö4eÓ²&ï&˜£îLùwøš›CËszÒòf½ŽlZë·Y°Dx}  \Nð¾ß`ÎüDÇl6x“\ ÁTL¯;)GÜC—ƒ;g,g°˜ÃP}Ëzc¡õ!­Ó7À¨Ñÿ·cE(B}¼ÔÔ æM³¾÷E€Šý/ð­áucj=×”¡>D­±p굨ÕønU ú‘c丹óU”§ë{~"²„£¢Õ˜n˜ºý^ *‘m¶ÓT´6bÀ“¹ÖH$Ô ~9ÓË£2Ôœ;n-ô=OJPÑÚ¼}õ<àšÕ*[Z:² 1T Ì~Fº´ÏëU¼GPíÇëêyõE+)'@õ¡½¿#‚z¿ÍªBõϪƭÔÞúÝbn)A0ðrvXX4,‡ºIth5¨yßòõy© õÖhÛXËCå<}1àõîƒ4Ûmw¯%¨ÎÛH]m®“é{÷Â(AÅÂÆ÷üJdK·5E$³óÙwŸ~P‚Jd—“¢*TK¥Êæ0T”Ò"Ÿ®ï™%r¦好oæ©·Õ¨ÌJucÍu÷~vÛ¨öOunº™·iVõ%F” !AuÍ5?ýf|É;ŸT¢<±*Àj°’yï«A}'ª³jCjÉúRòx–kTnThFiºj9ç+ùT ¾úˆf¡aWºÛ6ʹWt¬‰ât[Äv¢ +µÉÞ{ÇjP DëÝ“AE`8Àåµe3Üß)Bm»[U¨í„-bRƒ:!^\Q¤”§{_`¿ ‡Mj§o¬¨B†gÖ¢ *Ã~»#Þß>e¨U§qåi¯õƒ~²©B5>¿;¼œ’V˜î­Á°^gkSÕyÄõ§÷1z©…4²úލ> [VË®êSƒÅ™òïŸv×ÇH3ÜTbÓ}ƒ¾\("=—>]É|4$qêGÕ²w£b+ûí +dUeÁ ¢^=Éú(Þœ‡|´™ž’©¤·ØN›Øb#}çl4ƒnƒeŸrµ¸wkMeŸÞ²CÁ¿ƒLV‘Z¹É&ï$Ú·ÃZ3 àïêA¸6RÖhÍÍÙdÈÍ5f¢­ÐyqŽå,òƒž%vš·\XÁW~Ú!µ‚ˆlt«|˜T…Šý ¨½D®PG,úü¦ +¬Þ­ùAR‚–F®Ðçjn&†zk°‹¡ú7b ×ü”êÐb1 P‘ã܃`ZÕ?F¾ÁLªÏÞQ‡jÌö ‘]{Öîƒ)JËH°_lë|©Sš »™¶Oõ¦‹æ—d¦³É)¡“Àyôñèà êÅH“b¿»¾ £”ç@Ð?À—L +eÞb©ÊRè (8sEž]k #–à“@ÍcጵcôeÓ]½.NwgQ_qЧ¸—À±ç{†êì’%e9®Èž\Oarn£ÒäŽÙóÄäîÂÉq¼d·`^F"Ï®ÕÙ´æ•+YxP ùÌ[Ú-›’DèžòøÄä~àG ¹[Пú^ßû{†‘Æçóq#CŒ ¸ù(‡Tw'm<ñD+Þýì¹roÉ—PQÅ à»0ê½É°gÌ9¥ ˜•›j܇Hàö©6z'¦° ÿáå!ÞX‘ÐÆž a¨]ãéU5s«*Š›HöH +kƒÄ vûè=[Ÿ¶+ÒmÏX¡T§é/QÁ4!McY8R²,¹SÖ™D +ñ6´¢ ‚öÃéH~e•„ƒ©jJJÕÚ4¸ÕÖT:7†á¿ï”Ô£`WiU9¹Ô>Æ—C¬ˆ÷{kŠÃbjÚ3~Ž®1!CO]{VëQpB™à5Ô6ôN{¢öÓù‡k(ÛôâðÕr_Œ"ZœŸ¿ïÍ«=0å8£7â¢H#/‡4ê¢H£‰4^Sóäæ:ön?óÄÐÚËh;-AŸ²œ©äÓPQˆ(Ùºª2m{gÐm}+³çg^ê°ÿŠ=·w7gºÓxgW™Ò’O[óo„†c‘ GÅNÓFÁöº:‰ºúlº'xZ×H$. 69NFa$'8X6E«#³:4Ëîw +Oø=ã6§ ³ò8æ­ƒ^°ÕÉS¼S!…‰ïòΖ^³¿¦Dãíl>·z)’·l# € ¯‚ª®ì€ïE†C4›Îæ[Uï+yÍêcRB\@§(ΩVj–Mgk³\f†ô]«Yá׿Wˆ¬O+i9ñªXú¼5øÃJR­ð$‰‘õûéŒÈ‡Šë,°"‘Çãçøòé ¬¤õàK³+SpºtoíŽ,ndÌNß„V»Ón܉XL™¥Ìþƒ }¶Ý¨!í Ÿ£(ä* Ž¹ŠŠ`^”Ú÷?›œÏ&LNÊžj±¥‘È5µf D˜ŒìÉâNêvþhJ¡oZnÜ*Çõ4ƒDE¼O¬#HÄ“€nFaÛ‹Žp‰vl[6€ ðŽ’P„$¤f¶÷ØÌ^•0ÒÄ–öI*f6}÷è4â›Ó¤µ*ilkÔ‹Ò ä]øÁª#Ü«d%O.|¾Y•°VÔKî*Jc&õÌK‹ÜK‚"ö£)Éu š(àÂv*aQX*ƒt/î'¢ÅÓ4psÚÌ-i>U‚6é1sÑ~—4)äûM“ûDæà)D"ÙùC²Ç:QñO[êU¨«ðFßèˆÒ¢Þ¢ÛßKè§Æ·8d+‡·‰ÎPƒªÉ÷¥½p¾§¾Žt²¢R/‡¬!®£_ïsà^Ž¡P±r†.ä{Ky^õªUÎШ£c›ÌE¿y´9HÖ³Q‰“¡ÞˆË¨Li_¬ã”j”ïªb³±P¦ÒÚˆmSMéÖZK7øMAº ”v†yxD¾¨-Ý”·¾SG‰?—nÐUy‡“ú.°…z«~o@==þFº‰¤,Þ¤êåXº)RÚɎΖn‚%ëè÷Ò õ²—nB¬S¼uó l)ÛÒEÓò³¹íG!ª®l»¬Ä,óaw›ûO-[¹z3ºrÏ«ß8Û‡´XÕbRïÎêJ¾ïª–/pZè¢Þh½çÚ«ÄØ™·7uÏH'W·ö&Ç%:’FÀŽ{á…ÍéŽÎ̪PŒÙàŽtyÞ'‡£œÓ$Þ,Ö²×å½÷rÊòÓäúñíûX?ÂogûÞ*N!’iÞß:…)(O»SN¡~ýx:AC¬ÖNéÇž±ÿS6é›§ö%¬X9åøµ†:Ò²þu«5èèÖ¿¸—½rÔζÓÑ‘ÔúWSŽªÛDb~lëÐÚÊQ¶Søaw+èÇ'½©NªÊQd@u×úQœå¥Ã>xB‘½¼tCR<61BÎT‹m¤j_ÝÖ˜Àèàsèm¬ƒ3Õ™\~€Þ¦êøs„ø“ŒÓåH;Ëí®u™ÃBœbˆ +1…G#æ}Fòç{°4¬ÙÓF¨\Mõ725Åéo.%Fn§bìroʲãN.K£6¥J2Ï—Lí…Þ~¶ý£8°;²T¾P0¥¿Ñ‡Þ¯&£’ëˆÔ«+Ó÷¦bw B+r+! åÍÙ˜Tɂ˳9Égóì£Ì(;’º=fô:bÒ/ÙVÀĽÛd9³~vSΧ]Ë'Sk?/çÓ®åã7‹_Χ]Ëw…ë=/PΧ]Ëw%-]üy9Ÿv-€¹L9Ÿv-ßÕQéâËù´kùè¼H9Ÿv-ßÕqéâÏÊù´kù¤i ¿(çÓ®å“mHòŸ~PÎwzßó÷å|²èc~ȼw$¢«ÓαØàS¯{vçdc’©µ“ÃÚ)¥]Òd’{f¥––«Y6—I¼U +ŸF•Šœ–[Òå;„ít¡ª¡Ç&G•Ú;*q“*ÿã¬%޾zÀÆB¶Søª:•åÅÍPGÅŠVŸÞò¨ôQ ë ÄËÆ¤”@(ÛXÑø.m¾9§~OͤV$ÚãÔ^è¼ ¯Ò97Nøž‘ÉYAŸ“z C5èÝà;Hµp3LîYG5Ӊɘ³RLÔÊîN$ì.O–ÝŠ4ë £²»_G¶ž]+m@?nÔw+´½E‚N«gòèðy¤ ^޽q+±,zÙS®».A‘•yÆJÁ}Î1“Þ¢W‘„V«{íSßZ¶“®@›Èä|idè ´I7â|¢À¿ ¡§Áõel ˜×“\~‹ãigÖ£)˜cª+|u²¦PzºÂå,^›ièDý ¢`›Ž9i>¥<óþŒRG4&“ꘄ哭¡Zæ½<ê©u~ĉ5DQÏ+ÍŠ|ÝŒ:Ìi×äðVç½iÔ Ò•b>4êMû †s†TÌå¦Y±s6Ò4vR~€4™t;oš²xñ6öÍeKÊw’Oïç™”Êüµ‰ŠÅ÷Z•íUú8U·'ë@iom{§xÚ‰ÿœÕɧïÙöêýÁ¼¶?xØŠÐ +¼æå{¡ê!µÒ4–[µ<íD…^¥ýN¡µl4jØ¥†Ž2§¡J;Rà4Ft9yZÛD²‚½ÓúNmCã3Øó$Ç;tZ˜ +{¦_l^JS{µ-LõZ£SƇˆ O”@(Ô“ + #Ëò`§ÝÙ2ê:þ<;­³5˹Dl§Åû¼/Û¿QEÕÖiý ª„ +¶}‚ÿè@+zçŒèÖyћØ¤b~XgEo4ÆttÌ/P¥+z£æFI£7ôMhê•FoŠgEo®‡j+Öžà˜ÅŽÇ +„Äë@–,:£: +„n¤õ‡“ùžó⯣7¨N1BqH¸Ô_÷“èÍ•¬HÕÃý6zƒ ¥Ñ¥°.ÜøÏªB 0*I4Eí¡³ªƒðlµ­¼4öîÑ|"MG! 6žé’%½¹âŒ.5¯fUúõ±g‚’?Ø~_§–È!ujøÁ +â˜J%‰Êháuçk•ø%è*›'KüÎM˜Wp£nt°œÌï@Øaô´Î\y›Â†lCǹƒúöÛôVæ]8wðB•yün”¼8ïÒ•y? ´ŸTæ)&⚺ËVæý*VeÞÞ†Öèè•yØ)¼D•ºvežLtªõöÛʼ½¦»Näg•yj™÷®ÌSpØO¦ þ 2ïêtá¿®}¡ÔÑiÌ?®[ûEê¥ÜêDUp—J½|œí_IÖR¯q¯™A "ÉùCCÖ 2n{üîH»LØ^=ÝÑ/Ž8ø7¨#‚'ÏWÅu~f¼’v~Šõóê˜á7)3*¦%èãÇs²$ö{Ò +dߺL*4î +ƒ¹?¶”R¡Ï6ÕÎèlKLu¤Ù]¿çGÔ‹ŒäârS—©¦ÖpG¿=’÷¢#f£ÏðçzSÛÀU=0C# mU8ïUš•O˜ÙW²•U‹dß¾/S$KOù¢¿H–4Ê]Ë«_É’FŸ^GõJ«H¶gduTýh›íKɶ/U$Û¾T‘lû"E²m¥ƒ®ÅN¡ŽJ:é¢Éº–¤@(ä/—’ÈøQá kTö¨­Ñt§ö^¶(ŸM^E­]ª(ïê§]ÿ (ïêp¿§bo—*Êãb§½ü_å)ûž/ÊS ?\¾(מR£ñtQž>‹Q8!Y09Äë{Þé÷È^>qú½4ÕêtµÚ„S\èíB÷m 2:t ãe,›”‡Ñ·¥C.£ô©ž,ÚBÕjð<]Æ$" Y’Å9鮣{ô©š_þjdjóip/ºWë=cp'èwƒ»Ê {àSèÓ³Á5þj¢?qƒsà)\éz +ýAwކnKj‘˜ÿÔ]9sp__´!Ík1ÿJª¤|F*R.€»5Z´®Ðó¸eÄ’8ç-õù 5`2=®f¯jew/ZÅ~cöK«ØotßP…j!‹ÝÔá•´ØO^–lˆ ÊÊîLcVò:´Ø÷Íü0×£b?ŸýY* 9ª^ìGdCĽ +TîžÂúœzW+€Ó,öÛøÔ¡æ\-êÕñ=…¬«ÝSèÑ‚Z¶ªBE|³yŒT§kˆwÜMÉÒ²¡=|ü‰_ {êe8WmÇI}Ó÷Ý|q²Ë€éû=óT=ÙÎ?æ©O8ƒ>½%dVê~Èv|:cv§~[”R~ïÕÑipRãVa—é5}ꞃc.ŽÙH +yjÖ¬x”?¿ ›Èçdt©I­ãÓ]—¸^OÉ0ïF]èz½˜ÂÝz?Û¥õgbžÈ³A7Å9T2…ÜÁwá]ìf=ÕlmÁT×]¿9yŸÌñ ó¡ÑvÚ·+è“W¾'ýcÄëÈØÔÍ7‘“·È(dP¶äöæà ûäCDñêßÇlŽ +û”¼„ƒãq¹Â>¥ø˜$žv™Â>¥Põ!ær…}JY%G™¿/ìSªê“ðÍe +ûÎwÿ¦°O¡+R”py©Â>¥ª¾™?)ìSÚçáÃÝ—,ìSò®eÚó…}"|dªâ.îï +û”ªúT+V~^Ø'øÞ’óÓ.]ا´Â¢¸À¥ +û”ªúŽ·"~]اTÕÇ ›‹ö)­!Ç7-ì;e@]¨°O©+õÍâö)uuuúæs û.‡´“ÆâYHûYaŸÒ.\اTÕw¥»ÒKwaŸ’Œä#P—,ìSªê“+é öiT¬\²°O©Mìâ^¨°ïÔqº*ìSZ%Á¸½XaŸ^ßó—…}Zù,ìSbw‘’>UØ']%ÿY«t°¡¥™›TgÓ÷H}Ä™gN©»QÐùÂp†ìQ­¾ÊÈ‹yO™?¸ÅOÉ Ò49~v‹ŸšÉqò?½¨²ªŽI¼¥U§­ E:íxpt0ÖÑ81¦ƒPHà ò”ŽIW‹ c´†uÊ*81¦ƒ°aéfìSc*ûÞô +±ü”ºLÑ­ÜeB¥]'÷=õ…Í~wùßiÚ÷ÿc¯+^þ'CšîHó™—ÿ©D9d÷ÿý°Sàå_äCŸsùŸV>´pÿß/J¥¸Ëÿ~„ÔuùßÕ?te·üöò?!ÛŽIñþ¿_gðæ`I`øE„ÔcfçÖxÐwŒŽ‚\¹9®¼·VRÍ8>grv­ì‡3jú¤fùϲ»aáÙs¯P*è;Ú)üáµ}zªr¯N”Ç•T“ÏJRã<TôxÆ}c§Jšz]«Ì¾ân³kO\ŸæCµŠ*Üw^J|m~ÉT+èíR©Vµ¹ÞT+í“^WÏÍ™§(-ÅÕŒþR餸R»ã×øº§S¢SgG®G~HqlœSi¯š8†ºòè:«}íÇŠð©yÉã ¡7Õ.WÿÐQðÒÔ)ØÄÊLŠMéÚ -”®«‚DΦf Åá¨i ø9¬½I¨/X˜kÉàýaa 軳>™Î#íM×¼:/wÜLÕSfu_Þ$?Öùç…˜gØ飗Ø'ƽ\âÜÑ™%Š)#¸#嫯~PBáHDŽn¾8UEq‚S5PQ`juÊ¿Ñɧîý»ÒWïùÛ{ÿ®äUxº8èì{ÿ~lªŸw©Î_ý÷[6jí«¾/ÑÑ©’¦+½þ®¤éJ¸@P°Ñyë·þ{ÿdé<:«}{ƺŽC:ˆöݨö…^”‚_çftqõ<Žªsý¾ÚzÑ>Ûî¼ê{t‹ ú¦6Ÿ²Ã'À謥ê®ù~;ããЧj©¬ÑWÕ;êõRÉÔZئó€x…TÝõÑÚüøô<ÜÛiïþ` œrð»k]ñmõX§iËøž°š-÷9¾§Š{:«jFsX¿¿7@ìFY©äÓ³[^w+?ÇùGãàåênŸ•ŠnEŽÇ¹u·É§©v‚®hÇg¿6êu·òTªÅGÕQo[›ËæY©èVi7Jß‚z/ÃÔ>bÝÓw‘Ë0E²—¨»¬y”Ë[Þ(g¦ð&ª–28J ¢ÆÁÕ6 Žf"€>Õø:ÃR×OxŸ¦ ¯ˆ¢Ë©xtûX”P¾u…Jo 6õ ñ‚5/!F©ôò?ëÍr%Ö|’«élý›úTâ°KkäÞ´®á{w«B%²É@U *€áîÿ[Б®ZIà»ÔœÁ¯5—[?‹]ò’@Ów`÷¦V#§Q™|ˆ×EP5ri¸è22{T+ ôñ¶c¥V¨^…þ$¤jM^ˆØÉ«•?Læ©·ÕWƒÚS‚z… ÿ1’‰°Òtù²ÖÏ¢IªáÍxTð Cô|º‹liº1|üi_ºêh`6Áª‰ÕÓ¥±5èh·Þu§fQ¨…'è#‹tÏÄðºË&S¦ZþUµ® þä—8È Ùše.ÛQ: +¸þæZ·Õ™ÙHêõGâÃᤢó¼¸SÍròÆœý^¿M¤^_uVâ–ªŒEgÍr"—UoÜ PUSLpSN¸ÔD•õä…úËãÎKÜÒ¨Csž,;ƒª".íêÎBÅv*¹¡:f(q<а<ç#^yL’4’+Ù¡sç!ž¸ß(¥„Ø£r®Ln=»ð —2Ñ…ÂÓˆM?»Žêo~¹Íœ »Ò¾ë=s™Mð+®äרñ=19ÍÃwôÆÓž]«ß„Áöñ4T+§gŸøäEƒÊi±èÔW’ø£ÓueÚps©ó'QW‡0¥˜Þ‹ÌtŸw—•åh+o}ë6=ãÓîRžtö2'Fr{¨üO=1ï¼€AVéàñž0ŸtÏÎyœ‘0Ì) !ß#Ð[gT¿ÑXßI¢dgy„óçmWÇç§ý¢JÕ¨6$%{*µ’Û»¢š–ÓcªK‡%ÿ'ê5‹otœ/ »¶tq¢kU×U[ªR*¤ƒ"®äÅå9§ô&è_L¢®b ý‹Þžµo=?i§ª‰ÎCÚ‰Ðs¦ÉK· !U•qÉþ ×›ºå¨R’¨×ãåøæÇ%‰zëµÙódI¢ÞzÄÃFþÏJÏŒCÿ´$ñðD=â!%þg%‰zëQýÍ/JõÖ#^ýãW%‰zQÊ)é—$ê­G<ò¤Ï+IÔ°"Õ·ð´KùáÏKÇe…Wòkþ=—ÊúDñØ/+”:ÿ¶Ë +•Ãv¿¬PiÿÖË +1Òlé­Ô½øe…êa»‹^V¨\±rñË +Å™÷ÿÆË +¯dçªk Kîæ†súT«__x¨}Ûáï³íø µ 2®ôjuúÂÃ3NµúÍ…‡Âä.qª•ê…‡Ú!¤#ú§jßv¨LùÑ…‡Úá5•öó/<Ô¾íPAëJŒÔ¼íP¼Sø“8ðáÂÃ_”]"'òŠ/(»P1”Úm‡‡Åß^xxN¬óJ^ï•g_xøƒdØŸ\x¨T©#ÛîÜ Oôe.<ÔÖ|‚öË õ”Ç]àÂÃ}™òm‡G{?½ðð”ö“ •Š#/R‘/½ðP»—«Ó÷þöÒßÃ=…—¸ðP»,_Øôúå…‡ÚytWÊÇæœá¡¶/§Ýý³ •Y{Û¡Ø#øÕ…‡ÚØmHþîÂCíoiÌF»äBóÂóÊã.Ur!¿íPÝê<óÂÃ_IýjVm:÷`~Ý‘öy#Â6Ñ//<<ãžÂß—\°G·Êw +yá¡öm‡¼øý…‡Ú1´Gp‘ Õhž»íPš2òs~liï]+Ë´\xxVZÂÏ/<§lßv(óó äâžá¡z/ˆu¨5}j„ËDúFÛð×qáᙇýôÂCm·[6¿¼ððPF¦XÞ"qqõƲ•.<Ô6~¸¼Î \x¨}Ûáü…‡¨ÅÕsá¡®ZÜß_x¸ïE¹4ø¼Œ.… õ•ê+GÕpá¡v©>î¾À…‡*Êœ¿íPU¦{á¡öm‡âü_]x¨íÝ«¬Íùjßvø›X§i:.yá¡Rá•F…äO/`9¿}ªœs|H#‹NYD˜Pˆ¿jE„5òýùX§´Ž2+KJN‰C^æ™D Sî²Ì‰i v1œ·V[ +X•9¬¨ +/t,»L;Ù6Àoߤ˦Öë(•Œ=vžmó‚ñ¬a"kp,*ܨ8#³pÒ‹®qÁcil%2÷+šÈ†2q"Ûé䉜kW'ÊLò•(¿¾ ˆŠcã!«Ÿhtï’ÄãWH´¬‹1Ñ*“ßDkU¼!Úwý4Ñ©þí=YW";·ï½–ÿTd(jHÍ…2ƒ¢"Š‚ÈP‚2|ç;/÷·ß 5¤åô½/§{5T¥vvvvvöax*<ιºÐ*±cá)R Oñ&Ú…7ž³Áé,õ¨Ng“ƒÒt›ßÏöÞÒ¿9©¬/¬­¦ýI%¡ýgµt@ÔBí YÙ»¹»Nì§|þ@”[çÁ§«˜¾{}Òe™ë|%˜¸Œ›*ãlJ„Õ‹æCŽÕÊ/°[˜<Ú€Çú§ƒG>p18«bc`… ÷»†#ÃÏŒäKÏ™å¾^‘‰ÇÙšÖVÑ S¶ù@x: ]~ÞVæ°+Ão…dBÈ_ßæ…ÂÞ¤2é·=¼·ÕÝ$+‡¯™#žÅ·uî’’¹Ü ?=Lѳ½%mžŒw%ŽÞ”;G,mÙðÚ7«ˆyÌ/Ðå¡ur¿hôì¶î±í]´ï÷ý¢;G+~–?h"Ê%Ðe¤è¦QaçÊþgI¼9?Öq—¥^'åYêôö¶Éd£E>T,• ™úúo…ïOáèn(H ÙGÂÚåO{,1­Êà eyK.+Å “ÂWR$ò‹ò¡«…вÎâQ”ZÙ Ç¡,ç|É3¹›z¡ó %oÞÒ™A›ŸCùœx†0> »xbuИ·Ëþ)zÇPmˆ–™®ó‚¥_45ÓyáVøgž~Ê®ð¸„! +T`$ð…£ˆûD2àÐ*_ÈD©íýÌ‘ý¢Ä¡½šH¾Ñ+ Åé˾¨D“U br‰ï[s±ìôD›KB*ÐÝ×b/A‘H$^—=¨÷j‚n²„t ¬/.k.ÚGßCU3hû©m­í‹aVF Ø®)Úˆáäñ!ªæPJ^Ï«éפ*ÝßåìiÉåŠ=gûiÆ«õ>D£Òb¸˜ÿ3 -x—å#Zp©Ì+ûfáñNï§®ûƒÜ]¯‚¦škàtíTQšÇV4š’ÍK×2ÕôlRsøå–Å4³—t¦ñ-OVBb¶¿…À;è„Ç[`óí-ž '(%9)™ÀȾ"áxgluó¨[îœqs'8)àañIllŒî$úEv¸Ÿëß ¾(vkîT2Î…ð¾.ˆ£«@.j„›Ç‡ÂÍ>mF>…^w컾I“ÜKEs.?~äÜZ¥ƒð¢ë#üiÜ¢ðî#pR"]î¬/£g²£uz0ºÌ?Ý42YFçó¹³w­ÀÏ_ÁìÄTĨœ´?!t÷•L¥î^Ó &Çx÷IÓsqR Æ&¢ gê÷›c~É2†"Ça*~rÌÏÞ’ðÅÙIvÑ®\ÀGɼ±_íeOöð}¿elI'v³„[!–޼;y%ú1ÆC Np'a<âì"79Dæ%:a³ÚTà€D'>îþÁHÑ"¸.òJÆÀ‘iõnõ¾rÌâmîh×ä” 7Sì‚?Zœh@¿k±ûUJ8Ž{6–Y½Ñà3¿$j‘œeVˆX–HW,q¢ý#>{ŸP~æ9,a5–l5†£ôhwœì~éÙæêó0f"Î +å]N̲÷ ŽÇ î9PTËÑaaKú2’ŒçÉ÷Ñð´*.\XÊÒ¼PÑ3DHfüµŠH)•K>˜z“ìò|Ãü [t‚ÎØŽµºû»¥èD!n›y UÓU3Û ön²”¤³Å‹c:{YKa€¶¶w±®éÖ¶C½+g“L«­ñBÚàPÍ#nhñ:޶ñqÖ›ã1’zH1”e^¸ km/D¬¹f,n…æØ2¢ëCVl{Qo¿³Ä5ö8{f±#›˜R²¶Ëa¸öB(˜B!1ˆŽ¶ªA‡âOà“vó¡u\ÕwŒ/É>ÎLì> ºÖš¦úŽ'2äz"…^(³=‘±ˆÇ’¦Û8v½Žb0YNØ/,ó›¼hú¥®én…€" TŸö|É …nDZգô‹¾Üs^pØðBBI î(]Ð8Öéä®ÞžElâV2 ²¸¢ðGƒ´¬”XÛ]D¬î®”9\_U³UE¨îx˜­¸RòZÄ©¹Ï…‰„o”¢Vß0´«¶qÁáj¤´.é‡f3ü;ó¬æ/Ò#}O§ïÄ– Þg´åE<ö²¯ÊÛ1é dMp᩵£X&U;8DfTæY;}K]§Æ·8t ¦ï#Mâ¨w뎳ðZr]Ÿ´½Svù¥mñ*fí(:' û¬ði íÝÌ·ˆðW’JßIEä„kˆ‹x §¤}ãj¾‚#–?¬qh €=§ñ <")Ç7ŽY`ØŒ:°†ZÒBuØ—¿¦â´¦‡b-y‚/Ô;6Ë·ã±þ8XËÇsò‹ÇdH¨±P¿$,€V.’ŸÏ‚b±w™Ràç÷<öóT„¤r' IQ^ýy_ÂÏl—㓎'#õîµ8ÊþÌ®ãɺœ:­ {°Ô£ÇÃe3ªt0`dG/Í4-¿ÖxIßüع¸©g÷ÍÏ‹›za5Û87õ,"¢má\ÜÔ³èì¿™üObç—fHŠÿðÕÅÈœ^LýÁØG×áÎ/>U 6îMòSÓ¼6ÿ;ÏNº‹Ws<÷Å||ê*S*éJÖìNz¦ì½Už4Ê»B¤„%Wè%žà! d…aq¯zÔÎþ‰åÐbðíú…ѪT0  …ïýQ1ågQ”m &H{ߟ…L/-ünùÑ‘£Sã'ëVé/c«YLX*ùY>XE1͸?`‚S„ÛÊæm$ÞË«¨ »¡÷xj±N‘P™Eö.oÖ³{½E.óX¨ÖÕóLo×öÿ÷óÆÞ°’»=–š‡wåq¢0º©?¤Šª¿ƒÇ˜>Á ³3Ô‚xœ5š6ׯl¹"˜ITFDÈÚ1¤†5”øyq[kn s… Ú)Âf<7’áèŽ×¾GD€úÓ=ÜÎþ2ÏÛ’³(Ðã)øÜræþ%Ï>‰ NûQ•zñ®bàqjQ½Áá?Du#¨„h(ˆêFP­UB&ˆêFP‘–ùÇ‚¨níOQ=,ð炨nÕ ÿ ª‹’,ˆêFPm“öQ]CÏ6›þHÕÕs–Eç?Duõ/ üÃATWÏÕ|;ˆz†´\ͲN y–,B!Öi¡Ì Jç sÁ’¤j9Oàä"äga—ÖàyÐÐË 13~ØNb›Aøbh¹+†ÉZ9þ…q‚g‚¹«ðž¨¥RDëK;d9e>†=“W€ÒC”óøh°·"QkErNtµ¶"B»GGhïÄ“¥­‹_äV…xÉ +. cáQ<(ºaeDr¨=îÈnç"ºNö~´È ç<ãg°o¢WïH]@“4á[!ÄÝQÔ÷FܾnÃâŒÄ^±¢µcß?à ¿6Ö†_­ãâ¿ër÷zñµ‚Ÿ‡?‹½F("ÜO¥ŽM„ ,`Ñ!œ¹ë5m:pž›&žäw‡?ˆ½âjð!‚?÷Á‘¸T­Ö}›Ç 9f»ôñÂA#üúq‡ôFÁ|‡Ó>Àh¼-1å79’ÜŒg!ÜÛß^T`ßæµùªÜ7Ë0ðfƒmò¼XІÛDÛ¼G*oßgmoD=Qi­›R³bÎV…õ‘íI7$²OÁHfÞ'ÿ×H¬¤¦³Ò>Q™îÚ0¯. ¡xÖèÒu56nP½ï½E$'6lÍiWãí9Íœo³†ù·ç´›ñöœÖ˜l#ˆ!€ÎtÔ1î>kÈóO©IqÚp±]4ZëÇ-V96Ñyß <­5Ì•ݼGÏ+ǾËWÖš§O2Ü’¿ã…»ºî§ ™.‘UÄ’ëðXìn‡ÄÝÞÞ“´8{paøƒ7ÏW4ŒNgã)Á¤—ðè˜ï_ã $ž)¾Z›£3œm-:;ã¯Wœ}:/uÞ—Gújú3öì,üt¶»·ëÉìCm± Š&4c GØ`|C÷9mëþèû[Ù=«_í~D9©±Ë[ÉQC¦T"C p*h–oµ(£°2±Ý%WoÐ`í'ˆqN\šÃ]Š#±!h¥ðÄâ6Û­•z1ñ¦°µ $øŽŒâ"ƒ³xùN,Ä|Iˆªeµ×bsÛj/ ®qLÇpZØ}A·!qĸ/p Å è$2,0¥âP‰OÛàkvˆ¬Ý‚BvÛìÁ‡dͳ•cx ï¡„ÏòØ !ë¬rf ƒ¢¬CýþŽ®ÊO‚¨èÀn˜­5%Á»Ê½ÄŸ] ‘?횡ܜ$<Ø(»„y¢ªÙ<GŸCò!úf@Ç™%x°šm@Ú>& 2|¢_z!4¯³¥žul>àÜñaŠ´ûvÔÚ³˜¬Ñ–©€)Åd µB×oq§.€N¹†©{àœÉwšbÂ(‰°Ë:mÉNõd Ãêßa•%AT´ufë¼åÞ vª ¨h)ïöÐ~êòŸÎÞ¶›óUýA˜Úý±ZCûxæu×EÕµXfÞ@‡`ª ìTÏóv-çÓüEþ€Ž2¿ÉG 4n´v÷,ÿt Ré 5Ó„“£ ·¨jyýH`õlìYC~´ä—~ÛÄÊÄ"d}ÈØáT|Â?‘ZƒÝÊ#µf¶œáÈ͵ֈSä0q.:«=@qÿ ÀbÔõDÂ/n›·ˆ÷Ò¢ýèœTÇ Ñ*4tP\‘_sl@Qp<øÔùx‰úhaá“b‰XnÃL CIèS+â­á5¹§<“ÐnŠ™§aªç‘neÁöÿ-ÇjTÈ ý °êÊǯÂx™Í޵ÅË4ò˜„¤$Ãò Òë…ø)‹l0 ÜÕ8›&QÀõ9 +‹¶rã…ðÑ•9_¼á"J+möãrûosºó øÈ_þE¿šá¢îfô´ Â¥} ì+Ñ7)äænñ©é<;èΓq{ú·/†ŸÕÏʵRÖó‘oZð›C_b&´`qø*Œc²-„/œ_ +ýÔÿÂIsç×ÃCÙ ”8]‚,]T Éðˆ2 +ISTYuMUUÍÐTµ†UúŸ(‚¡ ’!EÕUQóÕÛ¨Ôjþ«ÿr'0õŸýå‚ïÌwÿ(øz;ðeuç—"B\€¤Q’1a p@•DE“UŠïuç+q@“4r†*ê +¬Óa#dAÔEEUÝW†ÅT–(ª>‘%+¸”4šêSh@°¯Ê¡KýÞùU[Ûgô>™WÍîdÚ3{¤«¾z/øøªÙùBíA,_ÍÛãþÈŒÅ2“éØœVÛ½Áb‹IVLJJãÿ´Gƒ^ØÇׯ¤¿šOãþ‡Ï«“Ÿ_\ÿýfþàsR»÷ãÍ0·ÃôÛŸÓ˜ŠßÂl‡é·?§1ßÂTØÓoNcj ||z2YéhÒþ5˜™v‹8(j ("TA—DCkZ˜BÿYßH>¾4ž(RæƒöèrÑîMÛã¹UX×,šƒþ³[Lâ êÏšon½ù³õ‰ À)ëzNæ´á?-X·%5y_üǼzn#‚VÚÓöëÌîÏÇ«;†ú¶Ø÷Fæô¼ýj®oõ»‚´a¥Ó©.œÖª“y $ïTbøBa_ý–PnQhm(¬aÁÄ5¬x½z¸Üx#‰½òÁ¿2ù_™ü¯LþW&ÿ?ËdUÿñdì’ˆpv´|hùœ +UrU“Ý0t èPO— ¨‚lhP½×4 é÷‚`Ȫ š‚õ{W‘—‘bï#ÜgÄtÑ€F&¨XãWtÖ&Y“5Å€"™••3 š¢hPV‹hnøX +Zp†’$! €ÄAÓDUtHU– i72w°ð¡ @l EÎ0›•‚S‡D×àµQ©”(oD¯¯ì ×&lýWI·Zbës£žÉ7ê­UåVõ”7õØŠr«zêõÚªr+{d%~–[Õ+Ñï Uc©ó>ï9j¼ËKã]VDh“ +T³ Ò#{‘t¨+½z +)Tº§{4(!4„®dhœ¢éPyDA–UO)E‘ec¹”?áf Ú=¡øê/Yaß,‚ˆ‰ˆ™€ì)Àòº!y{–*DØJoS,aL¾¦Ç·†Uö“a‚j.¬Ã~ JoÔmžbŸtœ“7ê:o9§ó~½A÷yŠy;üizø¤7¡ÏwÆWöëBj$ŠöH,7úë:¿Ëù%H ()P‡â4Ð1-DÝXJKJ#¡C'I $ò> endobj 27 0 obj <> endobj 36 0 obj [/View/Design] endobj 37 0 obj <>>> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 49 0 obj [48 0 R] endobj 68 0 obj <> endobj xref +0 69 +0000000004 65535 f +0000000016 00000 n +0000000173 00000 n +0000045756 00000 n +0000000006 00000 f +0000387041 00000 n +0000000008 00000 f +0000045807 00000 n +0000000009 00000 f +0000000010 00000 f +0000000011 00000 f +0000000012 00000 f +0000000013 00000 f +0000000014 00000 f +0000000017 00000 f +0000387298 00000 n +0000387329 00000 n +0000000018 00000 f +0000000019 00000 f +0000000020 00000 f +0000000021 00000 f +0000000022 00000 f +0000000023 00000 f +0000000024 00000 f +0000000025 00000 f +0000000026 00000 f +0000000000 00000 f +0000387111 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000387182 00000 n +0000387213 00000 n +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000000000 00000 f +0000047548 00000 n +0000387414 00000 n +0000046187 00000 n +0000050532 00000 n +0000047848 00000 n +0000047735 00000 n +0000046511 00000 n +0000046986 00000 n +0000047034 00000 n +0000047619 00000 n +0000047650 00000 n +0000047883 00000 n +0000050606 00000 n +0000050868 00000 n +0000052242 00000 n +0000083191 00000 n +0000148780 00000 n +0000214369 00000 n +0000279958 00000 n +0000345547 00000 n +0000387439 00000 n +trailer +<]>> +startxref +387647 +%%EOF diff --git a/subprojects/tomlplusplus-3.3.0/docs/images/logo.svg b/subprojects/tomlplusplus-3.3.0/docs/images/logo.svg new file mode 100644 index 00000000..5941d793 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/images/logo.svg @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/docs/pages/main_page.dox b/subprojects/tomlplusplus-3.3.0/docs/pages/main_page.dox new file mode 100644 index 00000000..c0909579 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/pages/main_page.dox @@ -0,0 +1,597 @@ +/*! + +\mainpage toml++ +\image html banner.svg width=1280px +\tableofcontents + + + +\section mainpage-features Features +- Header-only (optional!) +- Supports the latest [TOML](https://toml.io/) release ([v1.0.0](https://toml.io/en/v1.0.0)), plus + optional support for some unreleased TOML features +- Passes all tests in the [toml-test](https://github.com/BurntSushi/toml-test) suite +- Supports serializing to JSON and YAML +- Proper UTF-8 handling (incl. BOM) +- C++17 (plus some C++20 features where available, e.g. experimental support for char8_t strings) +- Doesn't require RTTI +- Works with or without exceptions +- Tested on Clang (6+), GCC (7+) and MSVC (VS2019) +- Tested on x64, x86 and ARM + + + +\section mainpage-api-documentation API documentation +You're looking at it! Browse the docs using the links at the top of the page. +You can search from anywhere by pressing the TAB key. + + + +\section mainpage-example Basic examples + + + +\subsection mainpage-example-parsing-files Parsing files +Call toml::parse_file() and work with the toml::table you get back, or handle any toml::parse_error that gets thrown: + +\cpp +#include +#include + +int main(int argc, char** argv) +{ + toml::table tbl; + try + { + tbl = toml::parse_file(argv[1]); + std::cout << tbl << "\n"; + } + catch (const toml::parse_error& err) + { + std::cerr << "Parsing failed:\n" << err << "\n"; + return 1; + } + + return 0; +} + +\endcpp + +\see +- toml::parse_file() +- toml::table +- toml::parse_error + + + +\subsection mainpage-example-parsing-strings Parsing strings and iostreams + +Call toml::parse() and work with the toml::table you get back, or handle any toml::parse_error that gets thrown: + +\godbolt{NsR-xf} + +\cpp +#include +#include +#include +using namespace std::string_view_literals; + +int main() +{ + static constexpr std::string_view some_toml = R"( + [library] + name = "toml++" + authors = ["Mark Gillard "] + cpp = 17 + )"sv; + + try + { + // parse directly from a string view: + { + toml::table tbl = toml::parse(some_toml); + std::cout << tbl << "\n"; + } + + // parse from a string stream: + { + std::stringstream ss{ std::string{ some_toml } }; + toml::table tbl = toml::parse(ss); + std::cout << tbl << "\n"; + } + } + catch (const toml::parse_error& err) + { + std::cerr << "Parsing failed:\n" << err << "\n"; + return 1; + } + + return 0; +} +\endcpp + +\out +[library] +authors = [ 'Mark Gillard ' ] +cpp = 17 +name = 'toml++' + +[library] +authors = [ 'Mark Gillard ' ] +cpp = 17 +name = 'toml++' +\endout + +\see +- toml::parse_file() +- toml::table +- toml::parse_error + + + +\subsection mainpage-example-parsing-without-exceptions Handling errors without exceptions +Can't (or won't) use exceptions? That's fine too. You can disable exceptions in your compiler flags and/or +explicitly disable the library's use of them by setting the option #TOML_EXCEPTIONS to `0`. In either case, +the parsing functions return a toml::parse_result instead of a toml::table: + +\cpp +#include + +#define TOML_EXCEPTIONS 0 // only necessary if you've left them enabled in your compiler +#include + +int main() +{ + toml::parse_result result = toml::parse_file("configuration.toml"); + if (!result) + { + std::cerr << "Parsing failed:\n" << result.error() << "\n"; + return 1; + } + + do_stuff_with_your_config(std::move(result).table()); // 'steal' the table from the result + return 0; +} +\endcpp + + + +\subsection mainpage-example-custom-error-formatting Custom error formatting +The examples above use an overloaded `operator<<` with ostreams to print basic error messages, and look like this: +\out +Error while parsing key: expected bare key starting character or string delimiter, saw '?' + (error occurred at line 2, column 5) +\endout + +The library doesn't natively support error colouring in TTY environments, but instead provides the requisite information +for you to build that and any other custom error handling yourself if necessary via toml::parse_error's source() +and description() members: + +\cpp +toml::table tbl; +try +{ + tbl = toml::parse_file("configuration.toml"); +} +catch (const toml::parse_error& err) +{ + std::cerr + << "Error parsing file '" << *err.source().path + << "':\n" << err.description() + << "\n (" << err.source().begin << ")\n"; + return 1; +} +\endcpp + +\see +- toml::parse_error +- toml::source_region +- toml::source_position + + + +\subsection mainpage-example-manipulations Working with TOML data +A TOML document is a tree of values, arrays and tables, represented as the toml::value, toml::array +and toml::table, respectively. All three inherit from toml::node, and can be easily accessed via +the toml::node_view: + +\godbolt{TnevafTKd} + +\cpp +#include +#include +using namespace std::string_view_literals; + +int main() +{ + static constexpr auto source = R"( + str = "hello world" + + numbers = [ 1, 2, 3, "four", 5.0 ] + vegetables = [ "tomato", "onion", "mushroom", "lettuce" ] + minerals = [ "quartz", "iron", "copper", "diamond" ] + + [animals] + cats = [ "tiger", "lion", "puma" ] + birds = [ "macaw", "pigeon", "canary" ] + fish = [ "salmon", "trout", "carp" ] + + )"sv; + toml::table tbl = toml::parse(source); + + // different ways of directly querying data + std::optional str1 = tbl["str"].value(); + std::optional str2 = tbl["str"].value(); + std::string_view str3 = tbl["str"].value_or(""sv); + std::string& str4 = tbl["str"].ref(); // ~~dangerous~~ + + std::cout << *str1 << "\n"; + std::cout << *str2 << "\n"; + std::cout << str3 << "\n"; + std::cout << str4 << "\n"; + + // get a toml::node_view of the element 'numbers' using operator[] + auto numbers = tbl["numbers"]; + std::cout << "table has 'numbers': " << !!numbers << "\n"; + std::cout << "numbers is an: " << numbers.type() << "\n"; + std::cout << "numbers: " << numbers << "\n"; + + // get the underlying array object to do some more advanced stuff + if (toml::array* arr = numbers.as_array()) + { + // visitation with for_each() helps deal with heterogeneous data + arr->for_each([](auto&& el) + { + if constexpr (toml::is_number) + (*el)++; + else if constexpr (toml::is_string) + el = "five"sv; + }); + + // arrays are very similar to std::vector + arr->push_back(7); + arr->emplace_back(8, 9); + std::cout << "numbers: " << numbers << "\n"; + } + + // node-views can be chained to quickly query deeper + std::cout << "cats: " << tbl["animals"]["cats"] << "\n"; + std::cout << "fish[1]: " << tbl["animals"]["fish"][1] << "\n"; + + // can also be retrieved via absolute path + std::cout << "cats: " << tbl.at_path("animals.cats") << "\n"; + std::cout << "fish[1]: " << tbl.at_path("animals.fish[1]") << "\n"; + + // ...even if the element doesn't exist + std::cout << "dinosaurs: " << tbl["animals"]["dinosaurs"] << "\n"; //no dinosaurs :( + + return 0; +} +\endcpp + +\out +hello world +hello world +hello world +hello world +table has 'numbers': 1 +numbers is an: array +numbers: [ 1, 2, 3, 'four', 5.0 ] +numbers: [ 2, 3, 4, 'five', 6.0, 7, [ 8, 9 ] ] +cats: [ 'tiger', 'lion', 'puma' ] +fish[1]: 'trout' +dinosaurs: +\endout + +\see +- toml::node +- toml::node_view +- toml::value +- toml::array +- toml::table + + + +\subsection mainpage-example-serialization Serializing as TOML, JSON and YAML +All toml++ data types have overloaded `operator<<` for ostreams, so 'serializing' a set of TOML data to actual +TOML is done just by printing it to an ostream. Converting it to JSON and YAML is done in much the same way, +but via a toml::json_formatter and toml::yaml_formatter. + +\godbolt{srdfoWMq6} + +\cpp +#include +#include + +int main() +{ + auto tbl = toml::table{ + { "lib", "toml++" }, + { "cpp", toml::array{ 17, 20, "and beyond" } }, + { "toml", toml::array{ "1.0.0", "and beyond" } }, + { "repo", "https://github.com/marzer/tomlplusplus/" }, + { "author", toml::table{ + { "name", "Mark Gillard" }, + { "github", "https://github.com/marzer" }, + { "twitter", "https://twitter.com/marzer8789" } + } + }, + }; + + // serializing as TOML + std::cout << "###### TOML ######" << "\n\n"; + std::cout << tbl << "\n\n"; + + // serializing as JSON using toml::json_formatter: + std::cout << "###### JSON ######" << "\n\n"; + std::cout << toml::json_formatter{ tbl } << "\n\n"; + + // serializing as YAML using toml::yaml_formatter: + std::cout << "###### YAML ######" << "\n\n"; + std::cout << toml::yaml_formatter{ tbl } << "\n\n"; + + return 0; +} +\endcpp + +\out +###### TOML ###### + +cpp = [ 17, 20, 'and beyond' ] +lib = 'toml++' +repo = 'https://github.com/marzer/tomlplusplus/' +toml = [ '1.0.0', 'and beyond' ] + +[author] +github = 'https://github.com/marzer' +name = 'Mark Gillard' +twitter = 'https://twitter.com/marzer8789' + +###### JSON ###### + +{ + "author" : { + "github" : "https://github.com/marzer", + "name" : "Mark Gillard", + "twitter" : "https://twitter.com/marzer8789" + }, + "cpp" : [ + 17, + 20, + "and beyond" + ], + "lib" : "toml++", + "repo" : "https://github.com/marzer/tomlplusplus/", + "toml" : [ + "1.0.0", + "and beyond" + ] +} + +###### YAML ###### + +author: + github: 'https://github.com/marzer' + name: 'Mark Gillard' + twitter: 'https://twitter.com/marzer8789' +cpp: + - 17 + - 20 + - 'and beyond' +lib: 'toml++' +repo: 'https://github.com/marzer/tomlplusplus/' +toml: + - '1.0.0' + - 'and beyond' +\endout + +\see +- toml::toml_formatter +- toml::json_formatter +- toml::yaml_formatter + + + +\subsection mainpage-example-speed-up-compilation Speeding up compilation +Because toml++ is a header-only library of nontrivial size you might find that compilation times noticeably +increase after you add it to your project, especially if you add the library's header somewhere that's visible from +a large number of translation units. You can counter this by disabling header-only mode and explicitly controlling +where the library's implementation is compiled. + +Step 1: Set #TOML_HEADER_ONLY to [code]0[/code] before including toml++ + +This must be the same everywhere, so either set it as a global `#define` in your build system, or +do it manually before including toml++ in some global header that's used everywhere in your project: +\cpp +// global_header_that_includes_toml++.h + +#define TOML_HEADER_ONLY 0 +#include +\endcpp + +Step 2: Define #TOML_IMPLEMENTATION before including toml++ in one specific translation unit + +\cpp +// some_code_file.cpp + +#define TOML_IMPLEMENTATION +#include "global_header_that_includes_toml++.h" +\endcpp + +Bonus Step: Disable any library features you don't need + +Some library features can be disabled wholesale so you can avoid paying their the compilation cost if you don't need them. +For example, if all you need to do is serialize some code-generated TOML and don't actually need the parser at all you, can +set #TOML_ENABLE_PARSER to `0` to disable the parser altogether. This can yield fairly significant compilation +speedups since the parser accounts for a good chunk of the library's code. + + +\see \ref configuration + + + +\section mainpage-adding-lib Adding toml++ to your project + +\m_class{m-note m-default} + +The library comes in two flavours, [emoji icecream] Single-header +and [emoji sundae] Regular. The API is the same for both. + + + +\subsection mainpage-adding-lib-old-school "The old fashioned way" + +

[emoji icecream] Single-header flavour

+1. Drop [toml.hpp](https://raw.githubusercontent.com/marzer/tomlplusplus/master/toml.hpp) wherever you like in your source tree +2. There is no step two + +

[emoji sundae] Regular flavour

+1. Clone \github{marzer/tomlplusplus, the repository} from GitHub +2. Add `tomlplusplus/include` to your include paths +3. `#include ` + + + +\subsection mainpage-adding-lib-conan Conan +Add `tomlplusplus/3.3.0` to your conanfile. + + + +\subsection mainpage-adding-lib-dds DDS +Add `tomlpp` to your `package.json5`, e.g.: +\json +depends: [ + 'tomlpp^3.3.0', +] +\endjson + +\see [What is DDS?](https://dds.pizza/) + + + +\subsection mainpage-adding-lib-meson Meson +You can install the wrap with: + +\shell +meson wrap install tomlplusplus +\endshell + +After that, you can use it like a regular dependency: + +\meson +tomlplusplus_dep = dependency('tomlplusplus') +\endmeson + +You can also add it as a subproject directly. + +\subsection mainpage-adding-lib-tipi Tipi.build + +`tomlplusplus` can be easily used in [tipi.build](https://tipi.build) projects by adding the following entry to your `.tipi/deps`: + +\json +{ + "marzer/tomlplusplus": { } +} +\endjson + +\subsection mainpage-adding-lib-vcpkg Vcpkg +\shell +vcpkg install tomlplusplus +\endshell + + + +\subsection mainpage-adding-lib-cmake-fetch-content CMake FetchContent +\cmake +include(FetchContent) +FetchContent_Declare( + tomlplusplus + GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git + GIT_TAG v3.3.0 +) +FetchContent_MakeAvailable(tomlplusplus) +\endcmake + +\see [What is FetchContent?](https://cmake.org/cmake/help/latest/module/FetchContent.html) + + + +\subsection mainpage-adding-lib-git-submodules Git submodules +\shell +git submodule add --depth 1 https://github.com/marzer/tomlplusplus.git tomlplusplus +\endshell + + + +\subsection mainpage-adding-lib-other Other environments and package managers +The C++ tooling ecosystem is a fractal nightmare of unbridled chaos so naturally I'm not up-to-speed with all of the +available packaging and integration options. I'm always happy to see new ones supported, though! If there's some +integration you'd like to see and have the technical know-how to make it happen, feel free to make a pull request. + + + +\subsection mainpage-adding-lib-python Special mention: Python +There exists a python wrapper library built around toml++ called +\github{bobfang1992/pytomlpp, pytomlpp} which is, at the time of writing, one of only two natively-compiled +TOML libraries available for python, and thus one of the fastest options available: + +\out +Parsing data.toml 5000 times: + pytomlpp: 0.694 s + rtoml: 0.871 s ( 1.25x) + tomli: 2.625 s ( 3.78x) + toml: 5.642 s ( 8.12x) + qtoml: 7.760 s (11.17x) + tomlkit: 32.708 s (47.09x) +\endout + +Install it using `pip`: + +\shell +pip install pytomlpp +\endshell + +Note that I'm not the owner of that project, so if you wish to report a bug relating to the python +implementation please do so at their repository, not on the main toml++ one. + + + +\section mainpage-configuration Library configuration options +The library exposes a number of configuration options in the form of compiler `#defines`. Things like +changing the `optional` type, disabling header-only mode, et cetera. The full list of +configurables can be found on the \ref configuration page. + +\see \ref configuration + + + +\section mainpage-contributing Contributing +Contributions are very welcome! Either by \github{marzer/tomlplusplus/issues, reporting issues} +or submitting pull requests. If you wish to submit a pull request, +please see \github{marzer/tomlplusplus/blob/master/CONTRIBUTING.md, CONTRIBUTING} +for all the details you need to get going. + + + +\section mainpage-license License + +toml++ is licensed under the terms of the MIT license - see +[LICENSE](https://github.com/marzer/tomlplusplus/blob/master/LICENSE). + +\m_class{m-note m-default} + +If you're using the single-header version of the library you don't need to explicitly distribute the license file; +it is embedded in the preamble at the top of the header. + + + +\section mainpage-contact Contacting the author +For bug reports and feature requests please use the \github{marzer/tomlplusplus/issues, Github Issues} +system. For anything else you're welcome to reach out via other means. In order of likely response speed: +- Gitter: [marzer/tomlplusplus](https://gitter.im/marzer/tomlplusplus) ("Discord for repos") +- Twitter: [marzer8789](https://twitter.com/marzer8789) +- Email: [mark.gillard@outlook.com.au](mailto:mark.gillard@outlook.com.au) +- Facebook: [marzer](https://www.facebook.com/marzer) +- LinkedIn: [marzer](https://www.linkedin.com/in/marzer/) + +*/ diff --git a/subprojects/tomlplusplus-3.3.0/docs/poxy.toml b/subprojects/tomlplusplus-3.3.0/docs/poxy.toml new file mode 100644 index 00000000..2ca04553 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/docs/poxy.toml @@ -0,0 +1,104 @@ +# this is a config file for Poxy - a Doxygen + m.css front-end written in Python. +# https://github.com/marzer/poxy +# +# config reference: https://github.com/marzer/poxy/wiki/Configuration-options + +name = 'toml++' +author = 'Mark Gillard' +description = 'TOML for C++' +cpp = 17 +github = 'marzer/tomlplusplus' +license = [ 'MIT', 'https://github.com/marzer/tomlplusplus/blob/master/LICENSE' ] +show_includes = false +changelog = true +logo = 'images/logo.svg' +favicon = 'images/favicon.ico' +navbar = [ 'namespaces', 'annotated' ] +theme = 'dark' +extra_files = [ + 'images/badge-awesome.svg', + 'images/badge-TOML.svg', + 'images/badge-gitter.svg', + 'images/badge-sponsor.svg', +] + + + +[warnings] +enabled = true +treat_as_errors = false +undocumented = true + + + +[sources] +paths = [ 'pages' ] +recursive_paths = [ '../include' ] +patterns = [ '*.h', '*.dox' ] +strip_paths = [ '../include' ] + + + +[images] +paths = [ 'images' ] + + + +[macros] +'TOML_ASYMMETRICAL_EQUALITY_OPS(...)' = 'static_assert(true)' +'TOML_ABI_NAMESPACE_START(...)' = 'static_assert(true)' +'TOML_ABI_NAMESPACE_BOOL(...)' = 'static_assert(true)' + + + +[meta_tags] +'google-site-verification' = 'gbtcNgKlNiPSMKkYMw4zWFVWGPH_oU93m9n_-nb4qK8' + + + +[code_blocks] +macros = [ 'TOML_[A-Z0-9_]+?', 'print_value' ] + + + +[badges] +'1. TOML v1.0.0' = [ + 'badge-TOML.svg', + 'https://toml.io/en/v1.0.0' +] +'2. CI' = [ + 'https://github.com/marzer/tomlplusplus/actions/workflows/ci.yaml/badge.svg?branch=master', + 'https://github.com/marzer/tomlplusplus/actions/workflows/ci.yaml' +] +'3. Mentioned in Awesome C++' = [ + 'badge-awesome.svg', + 'https://github.com/fffaraz/awesome-cpp' +] +'4. Sponsor' = [ + 'badge-sponsor.svg', + 'https://github.com/sponsors/marzer' + ] +'5. Gitter' = [ + 'badge-gitter.svg', + 'https://gitter.im/marzer/tomlplusplus' + ] + + + +[autolinks] +'(?:toml::)?date[_-]times?' = 'structtoml_1_1date__time.html' +'(?:toml::)?default[_ ]formatters?' = 'classtoml_1_1default__formatter.html' +'(?:toml::)?json[_ ]formatters?' = 'classtoml_1_1json__formatter.html' +'(?:toml::)?node[_ ]views?' = 'classtoml_1_1node__view.html' +'(?:toml::)?parse[_ ]errors?' = 'classtoml_1_1parse__error.html' +'(?:toml::)?parse[_ ]results?' = 'classtoml_1_1parse__result.html' +'(?:toml::)?path[_ ]components?' = 'classtoml_1_1path__component.html' +'(?:toml::)?source[_ ]positions?' = 'structtoml_1_1source__position.html' +'(?:toml::)?source[_ ]regions?' = 'structtoml_1_1source__region.html' +'(?:toml::)?time[_ ]offsets?' = 'structtoml_1_1time__offset.html' +'(?:toml::)?toml[_ ]formatters?' = 'classtoml_1_1toml__formatter.html' +'(?:toml::)?yaml[_ ]formatters?' = 'classtoml_1_1yaml__formatter.html' +'toml::dates?' = 'structtoml_1_1date.html' +'toml::keys?' = 'classtoml_1_1key.html' +'toml::times?' = 'structtoml_1_1time.html' +'toml::values?' = 'classtoml_1_1value.html' diff --git a/subprojects/tomlplusplus-3.3.0/examples/CMakeLists.txt b/subprojects/tomlplusplus-3.3.0/examples/CMakeLists.txt new file mode 100644 index 00000000..5cc5fe25 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/CMakeLists.txt @@ -0,0 +1,27 @@ +cmake_minimum_required(VERSION 3.14) + +project(Examples LANGUAGES CXX) + +include(../cmake/project-is-top-level.cmake) + +if(PROJECT_IS_TOP_LEVEL) + find_package(tomlplusplus REQUIRED) +endif() + +add_custom_target(run_examples COMMENT "Running all examples") + +function(add_example name) + cmake_parse_arguments(PARSE_ARGV 1 "" "" "" ARGS) + add_executable("${name}" "${name}.cpp") + target_link_libraries("${name}" PRIVATE tomlplusplus::tomlplusplus) + target_compile_features("${name}" PRIVATE cxx_std_17) + add_custom_target("run_${name}" COMMAND "${name}" ${_ARGS} VERBATIM) + add_dependencies(run_examples "run_${name}") +endfunction() + +add_example(error_printer) +add_example(parse_benchmark) +add_example(simple_parser) +add_example(toml_generator) +add_example(toml_merger) +add_example(toml_to_json_transcoder ARGS "${PROJECT_SOURCE_DIR}/example.toml") diff --git a/subprojects/tomlplusplus-3.3.0/examples/benchmark_data.toml b/subprojects/tomlplusplus-3.3.0/examples/benchmark_data.toml new file mode 100644 index 00000000..78a653bb --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/benchmark_data.toml @@ -0,0 +1,578 @@ +boiling-morning = 947 +capable-adhesive = 09:20:44 +cure = 0.4747 # broken +deserted = 0.3939 +finger-surprise = true +flimsy-hook = { wistful-vengeful-complex = [ 2012-06-01T14:49:11+09:41 ] } # experience +naughty = 1928-08-08T22:22:07+06:02 +remarkable-umbrella-flagrant = 1910-09-26 +silky-ski-threatening = 'bore regret' # reject +soap-decisive = '' +want = 0.4848 + +[[babies-lewd-relation.playground-snow-rotten]] +addition-cobweb = 0.8157 +bore = 'acceptable stale adhesive stale curtain deserted' +close-hard-to-find = {} # finicky righteous +contain-train = { ball-license-babies = 22:44:01, string-cross = 0.4102, used-rest = 2014-09-05T17:02:28 } +flat-cheerful = {} +license-gleaming-laughable = 2009-06-03 +rich-title-fuel = 'close tacky stale bake' + + [babies-lewd-relation.playground-snow-rotten.aromatic-overjoyed] + whip-addition = {} # insidious + + [babies-lewd-relation.playground-snow-rotten.morning-adorable-gleaming] # deeply spicy + legal-imperfect-worried = 06:23:39 + modern = 1968-01-21 + skip-sprout-zealous = '' + step-history = {} + +[[babies-lewd-relation.playground-snow-rotten]] +draconian-addition-threatening = 'behave experience impossible' # high-pitched unbecoming +stingy-equable-clean = 1975-03-17 # protective +versed-bake = 505 + +[[babies-lewd-relation.playground-snow-rotten]] +night = 0.778 +prefer-torpid-ski = [ 0.6483, false, 1982-01-23T16:10:13-01:55 ] +soap = { fix = 2019-07-24T07:38:55+01:19, umbrella = 1947-02-13T18:02:46 } +soap-blind = 1964-05-23 # run prefer +used-ancient-delightful = false +worried-string = [ [ 'borrow unbecoming geese' ] ] + +# title tacky dull draconian lewd dreary +# deeply anxious surprise torpid unite relation kindhearted +# skip dull room train experience +# borrow satisfy scintillating neck impossible aromatic high-pitched +# week respect ghost capable +# satisfy deserted capable rabbit string threatening + + [babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train] # best + hard-to-find = 'terrible' + picture = 'ball history' + step-decisive = 02:54:51 + + [babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.crowded-protective] # leather unbecoming + blind = 1905-03-22 + clean-wilderness-leather = 09:45:08 # scatter + impossible-ski = 536 # sprout + license = [ 1952-02-22T17:07:05.000005978+10:25, 1996-07-04T14:01:50 ] # stale stingy + surprise-fuel = { borrow-kindhearted = 1986-03-23T20:44:26+07:51 } # playground + + [babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.playground-bore] # hook flagrant + addition-scatter-tacky = 02:17:38 + close = { crown-respect-prefer = 03:27:27 } + incandescent = 10:04:01 + march-dreary-room = true + mark-influence = true + picture-squirrel-surprise = 901 + scene-rest-capable = [ 'torpid light attempt', 12:09:26.000008459 ] # addition + unbecoming-decisive = { bat = [ 1913-12-15T13:13:49, '' ], march-experience-tank = 1911-12-04T18:29:34-04:06, relation-remarkable = false } + whip-actually = [ [], [ 1996-05-28 ] ] # umbrella imperfect + +# stale voyage run popcorn threatening bore +# fabulous respect chubby ancient wistful creature +# surprise prefer dull curious whip +# used blue-eyed furtive torpid selfish chubby nondescript +# curious complex geese jail + + [[babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.playground-bore.influence-scintillating-vengeful]] + babies-surprise-stingy = { surprise-contain-weary = 14:56:22 } + borrow = 1996-06-04 # ancient + fuel-miss-rich = [ 0.1081, 0.8454 ] + grandfather = false + haircut-versed-innocent = { boiling-innocent-blue-eyed = { blood-capable = 853, overjoyed-kindhearted = 0.2161 }, regret-ignore = 1905-02-06 } + step-insidious-adhesive = [ 1950-01-06, {}, false ] + unbiased = 784 # unite title + uptight-itch-curtain = false + + [[babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.playground-bore.influence-scintillating-vengeful]] # title relation + deadpan = 1958-06-22T18:31:51+10:16 + fix = 0.3198 # heavy sulky + page-stingy-selfish = 1930-06-19T02:38:48.000016194 + picture-lackadaisical = false # ghost + tank-contain = 'memory consist helpless' + versed-leather-ghost = 'influence wistful flat' + wretched-march = 'place enthusiastic decisive' + + [babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.vengeful-worried] + capable-bake-room = 1988-10-22 # actually unite + cycle = false + high-pitched-vengeful = 0.0822 + tank-license = 1953-02-12T14:43:36.00003003-00:35 + threatening = 03:43:23 + +# vessel remarkable pumped step draconian scary +# pear selfish birds regret license stingy playground +# pear babies geese rice ignore +# run reject rapid reject + + [babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.vengeful-worried.ghost-heavy] # respect + advise-bore = true + broken-lewd = true + scatter = 6 # neck + scintillating-regret-unadvised = 1936-07-25T17:22:32-05:14 + versed-miss = 0.9028 + weary = [] + + [babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.vengeful-worried.pumped-wistful] + contain-modern = 1923-09-23T01:22:09-02:20 + curious-silky-borrow = 1959-11-06T04:37:54-02:58 # rotten + hilarious = 1903-12-02 + insidious-tacky = 'harm spiritual laughable cycle influence messy enthusiastic' + wall-sprout-scary = 10:44:31 + week-dull = {} # leather enthusiastic + + [babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.vengeful-worried.unadvised-gold-unadvised] + attempt = 1957-09-11 + flagrant-miss-tent = 0.8814 + legal-versed-sprout = false + + [[babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.vengeful-worried.scene-naughty-spare]] + deserted-hilarious = {} + scatter-attempt = 'blind pear' + + [[babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.blue-eyed]] # blue-eyed run + borrow-run-mark = 0.5925 + complex-profuse = 1907-02-26T23:54:24.000028223+10:35 + crown-ticket = 'babies helpless' + dull = 1942-11-26 + furtive = 816 + respect = 20:07:11 + string-cheerful-satisfy = 10:15:06 + unbecoming-furtive-unite = 2008-09-02T16:34:04+08:40 + + [[babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.blue-eyed.naughty-laughable-actually]] + legal-attempt-light = 1934-09-24T20:24:29-10:18 + remarkable = 2020-10-02T19:53:38 + three-cure-innocent = [ 0.2179 ] + versed-attempt = 1917-11-11 + week-draconian = 797 + + [[babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.blue-eyed.naughty-laughable-actually]] # skip + fabulous-ignore = 2005-08-06 + messy = 242 # gusty worried + + [[babies-lewd-relation.playground-snow-rotten.protective-kindhearted-train.blue-eyed]] + fabulous = 0.8882 + fix = 1928-07-04T15:46:25-06:46 + rabbit-gold = 0.8035 + royal = 1989-09-26T07:06:21-08:43 # complex borrow + terrible-capable-crowded = {} + unbecoming = 201 + view = 12:19:31 # ignore + wilderness-tent-week = [ 384 ] + + [babies-lewd-relation.playground-snow-rotten.whip-enthusiastic-ignore] + afraid = 2010-08-09 + ball = 17:51:13 # vengeful + blind-heavy = 'cheerful profuse innocent dreary' # legal hard-to-find + deserted-itch = 1984-03-02 + skip-protective = 22:27:14 + spare-view-hook = { flimsy-partner-fuel = 727, memory-blue-eyed = 0.9457 } + + [[babies-lewd-relation.playground-snow-rotten.whip-enthusiastic-ignore.skip-bake-incandescent]] + + [babies-lewd-relation.playground-snow-rotten.whip-enthusiastic-ignore.skip-bake-incandescent.influence-bat-actually] + broken-surprise = 21:24:24.000002983 + leather-taboo-dull = { deeply = [ 813, 07:48:43.000014695 ], run-bake = 'march used scatter attempt close chubby innocent', tacky-party = 2005-02-06 } # cross + productive = { page = 361, three-tank-wistful = [ 2016-07-20, 13:18:08, 'light curtain morning rabbit harm sisters high-pitched' ] } + terrible-partner-room = 1915-06-07 + train = 0.4414 + +# innocent string contain regret crime decisive wall +# spiritual naughty tacky stale attempt +# deadpan cure experience royal ancient cure voyage +# remarkable whip ski best haircut + + [babies-lewd-relation.playground-snow-rotten.whip-enthusiastic-ignore.skip-bake-incandescent.rice-skip-used] + bake-pear-train = 813 # vengeful + clean-ancient = 2012-11-13 + complex = { naughty-deadpan-actually = 06:52:59, room-boiling = 0.1027 } + haircut = true # tacky prefer + rejoice-uptight = 0.6769 + spicy = true + surprise = false # deadpan worried + threatening = 1978-02-04 + title-acceptable = 1956-02-22 + + [[babies-lewd-relation.playground-snow-rotten.whip-enthusiastic-ignore.skip-bake-incandescent.selfish]] # license incandescent + acceptable-decisive = 'skip flat gold influence morning unbiased' + deadpan = 0.7201 # finicky + dull-borrow = 1900-12-08 # dreary capable + hilarious-vengeful = {} # furtive + jail-consist-scatter = 0.1787 + scene-vessel-complex = 1971-02-15 + taboo-dull = 0.1922 + taboo-ignore = 2019-04-22 # deadpan + unadvised-scene = 03:16:52 + + [[babies-lewd-relation.playground-snow-rotten.whip-enthusiastic-ignore.skip-bake-incandescent]] + contain = false + legal-hilarious = [] + rejoice = [ 1979-08-21T05:58:09-06:39, 'creature memory' ] + wall-flagrant-self = 0.4976 + + [[babies-lewd-relation.playground-snow-rotten.wall]] # protective + capable = [] # wilderness snow + clean = 1963-02-17 + complex-umbrella = { familiar-innocent-consist = 175, stale = 07:03:20.00002881 } + creature-gleaming-sisters = 1984-05-19 # gleaming + crowded-squirrel = 1974-10-07 + enthusiastic-three-tent = { capable-crowded = 1931-03-05T09:28:53-07:42, flat-broken-clean = {} } + light-snow = false # silky + wilderness-light-curious = 989 # actually + + [babies-lewd-relation.playground-snow-rotten.wall.threatening] + chubby-overjoyed = 0.7252 # cheerful + cream-addition = 0.8832 + familiar-high-pitched = 2013-11-10 + laughable-geese-borrow = {} + overjoyed-bake = 1919-07-25 + respect-umbrella = 1947-09-18 # charming + scene-rapid = false + surprise-delightful-stingy = { creature-pause = 0.9945, room-advise = '', tent-snow = '' } # rabbit + + [[babies-lewd-relation.playground-snow-rotten.wall]] + crown-unbiased = 06:10:11 # jail + impossible-flimsy = 1992-09-13T01:39:28.000005689-05:33 + rejoice = [ false ] + ski-ball-run = 'finicky haircut vessel spicy' + tacky = 9 # ignore + vengeful-rabbit = true # lackadaisical fix + +# jail excuse enthusiastic cream complex +# train satisfy fix broken +# threatening boiling attempt train delightful cheerful vengeful +# rich actually fabulous contain deadpan harm curious +# fabulous scene furtive acceptable blood +# meaty used curious mark surprise curtain hard-to-find + + [babies-lewd-relation.playground-snow-rotten.wall.terrible] + aromatic = 1937-12-11T00:23:12 # addition whip + glorious-wretched = { tank-adorable-gold = false, wilderness-cure-history = [ 1957-11-25T20:10:27.000016213+04:26, 2008-02-17, 20:40:09 ] } + squirrel-flagrant-boiling = { skip-room = { nondescript-morning-excuse = 1904-05-01T16:47:38+10:26 } } + surprise = 0.3398 + worried = 'wretched experience ancient' + +# week hilarious miss sprout + + [babies-lewd-relation.playground-snow-rotten.wall.terrible.anxious] # crown tacky + fabulous-impossible = false # spare + fuel = 1908-09-09 # stale charming + license-ticket = [] # regret rejoice + sprout-mark-selfish = { page = 23:36:46.0000114, weary-deserted-history = [ true ] } + voyage = { meaty-helpless = 1980-04-20 } + +# bore babies influence overjoyed advise light +# righteous remarkable leather stingy partner actually advise +# scary familiar deadpan gleaming adhesive broken experience +# mark unbiased popcorn squirrel close capable +# scintillating ski productive unbecoming haircut +# tank attempt scene rabbit high-pitched sprout +# gusty attempt flimsy ski pear terrible rice + + [babies-lewd-relation.playground-snow-rotten.wall.terrible.boiling] # flimsy glorious + charming-royal = 04:14:31.000005876 + curtain = 2005-08-17T06:45:00 # equable + draconian-clean-enthusiastic = 'history' + fix = 19:53:23 + influence-week-reject = 581 # spiritual bore + self-protective = 2004-01-19T01:00:26.000016471+00:16 + step-overjoyed-history = [ 'curious satisfy', [ 'overjoyed bat advise grandfather', 0.5762 ], 1947-06-28T09:03:40-08:39 ] + + [babies-lewd-relation.playground-snow-rotten.wall.terrible.laughable-crime] # babies + umbrella = 1938-06-10 + +# furtive actually cross creature +# rest ghost mark selfish deadpan wistful torpid + + [[babies-lewd-relation.playground-snow-rotten.wall.terrible.versed-overjoyed]] # hilarious + blind-familiar = 73 # gold respect + clean-train = { borrow-flagrant = 0.6438, unbecoming-fabulous-cheerful = false } # week + flimsy-pumped-umbrella = { string-boiling = { insidious-sisters = 10:33:25 }, weary = { behave-rejoice-threatening = 0.9151, protective-grandfather = 'haircut', view-regret-partner = false } } # unadvised finger + modern = 0.1885 + place-cross = [ {} ] + tank = false + terrible-enthusiastic = 'hook' # train + threatening-best = 1908-09-20 # ticket + unbecoming-high-pitched = 09:47:03 # selfish productive + + [[babies-lewd-relation.playground-snow-rotten.wall.terrible.versed-overjoyed]] + anxious = [] # equable + clean-satisfy = [ 0.8894, 153 ] + scene = 17:37:43 # clean ancient + +# voyage wall deserted furtive rest aromatic +# cross flat cure productive cheerful + + [[babies-lewd-relation.playground-snow-rotten.wall.terrible.versed-overjoyed]] # charming laughable + ball-deserted = 'voyage' # crown + deadpan-prefer-deeply = 104 + fabulous-influence-wall = 0.0613 + ignore = 1982-07-11 + modern = { helpless-imperfect-leather = [ 'unbiased familiar place', 06:33:07.00002173, 0.5918 ], worried-crowded = false } # helpless want + party-complex-laughable = 11:39:52 # rice light + rich-three = 1929-11-07T03:53:23 + royal-behave-babies = { fabulous-mark = [ 659, true ], unbecoming-messy = [] } # rich broken + spare = [ 1935-09-28T14:49:51-02:02 ] + + [[babies-lewd-relation.playground-snow-rotten.wall]] # threatening + contain = [ 1918-09-06 ] + haircut-selfish-gusty = 976 # spicy stale + rotten = [ true, 'afraid overjoyed kindhearted threatening jail deadpan cure' ] + scene-charming-delightful = 'rice crown room' + scintillating-umbrella-crowded = true + selfish = 1986-11-28 + stale = 0.3828 + title-equable-partner = 508 # zealous + +[[terrible]] +boiling-anxious-heavy = 1975-02-23 + + [terrible.capable-tent] + behave-ski-geese = true + borrow = true + capable-blue-eyed = 0.96 + delightful-fabulous = 14:05:34 + glorious = [ # finger spicy + { best = 0.3935, cycle-acceptable = 05:55:20, spiritual-zealous-high-pitched = 'borrow actually taboo unadvised deadpan' }, + false + ] + hilarious = [ 0.0929 ] + spiritual-tank-sprout = 1969-10-20 + week = false + wretched-step = { close-reject-excuse = 'taboo popcorn party', finger-soap-best = 0.5234 } + + [terrible.capable-tent.contain-spiritual-squirrel] + delightful-torpid-three = 'rejoice' + haircut-regret-curious = 0.7427 + morning-babies = 'hilarious voyage royal complex crown complex' + rest-impossible-borrow = '' # deserted behave + scatter-rest-impossible = { rich-close-actually = 878, vengeful = 0.2007 } # tank run + tacky-neck-cheerful = [ {}, [] ] + + [terrible.capable-tent.week-week-zealous] + bat-zealous = 'morning lewd consist familiar morning crowded laughable' # uptight ski + delightful-tank = 1948-04-17 # charming + excuse = 1939-09-20T05:39:20.000019588+07:59 + gold = 1901-05-16T23:53:21-05:25 + royal = '' # remarkable + self = { train-birds-stingy = 'insidious scene gold', vessel = 0.5759 } + soap = { dull-history = false, scary = false } + taboo-ancient-itch = { gusty-snow-pear = { protective-scatter-high-pitched = 1996-11-03 }, rejoice-ignore-finger = 1918-11-22T19:37:38, squirrel-high-pitched-nondescript = 1995-07-17T04:54:13 } + umbrella-partner = [] + + [terrible.capable-tent.wilderness-aromatic] + attempt-night = 23:28:50 # borrow + cross-spare-hook = [ 1919-06-28T19:24:17-04:44, 08:23:11 ] + pear-helpless-profuse = true + productive-whip = 349 + rapid-scary = 23:34:33 + rotten-wistful = 1944-11-27 + threatening = false # chubby + view-afraid = false + +# neck draconian innocent innocent unbecoming advise +# voyage aromatic train gold broken harm memory +# fuel broken string unbecoming +# party party stale ski advise lewd + + [terrible.capable-tent.wilderness-aromatic.tank] + cheerful-zealous-experience = 41 + memory = 890 # deadpan + naughty = 1991-07-27T16:21:58+02:12 + sisters = true # royal + tent-threatening-threatening = 0.1835 + +# attempt rabbit boiling train laughable wistful +# soap excuse spare neck babies unbiased fix +# legal unbecoming flagrant rest excuse uptight royal + + [[terrible.capable-tent.wilderness-aromatic.tank.terrible]] + birds = [ true, 12:01:59, 1993-12-06 ] + scintillating-vengeful = 'snow party train unbiased innocent' + sulky = 'popcorn' + + [[terrible.capable-tent.wilderness-aromatic.tank.terrible]] + wistful-innocent-morning = 482 + + [[terrible.capable-tent.wilderness-aromatic.tank.terrible]] + adorable = [ false, [ 1986-08-22T06:58:04, 211 ] ] + crowded = [ 06:00:22, 15:39:55 ] + dreary-decisive = 1937-08-23 + familiar-taboo-unite = false + glorious = true # room messy + license-anxious-prefer = '' + pumped = 2010-02-06T18:30:43-07:27 + royal = 1949-03-01T15:27:36 + + [[terrible.capable-tent.wilderness-aromatic.birds]] + hook-dull-familiar = 2020-05-09T10:12:18-00:21 + imperfect = false + pear = 'vengeful worried self close worried' + + [[terrible.capable-tent.wilderness-aromatic.birds]] + bore-unite-flimsy = { finicky-legal-view = [ 749 ] } + grandfather-unbiased = 'modern delightful actually cream' # versed + haircut-soap = 2004-05-01T21:12:27+01:34 + innocent-crime-unbiased = 'three flimsy' + lewd-adorable = 05:25:31 # best fuel + neck = 17:07:42 + rabbit-versed = 11:23:17.000021208 + step-overjoyed-anxious = 0.2862 + weary-creature-itch = [ 2012-05-13T05:12:55+10:38, 1983-01-06T06:23:03-04:47 ] # skip ticket + + [[terrible.capable-tent.wilderness-aromatic.birds]] + hook-rest-impossible = [ 21:02:47.000007906, 0.9952, [ 1977-05-22, true, true ] ] + sisters-rotten = 276 + + [terrible.capable-tent.wilderness-aromatic.birds.naughty-blind] + bake-scatter-cross = [ + 234, + { attempt-selfish-ghost = 08:43:45, draconian-ski-scintillating = 1911-03-24T12:01:06-01:20, dreary = 266 }, + 'innocent broken equable adhesive spiritual title respect' + ] # hard-to-find protective + ticket-enthusiastic-delightful = [ 428, 12:49:26, [ 07:10:40, 'neck unadvised finicky stale rest', true ] ] + + [terrible.capable-tent.wilderness-aromatic.birds.popcorn-cross-unbecoming] + capable-best = [ { fabulous = 0.0328 }, 1959-07-11T18:30:11-10:19, [ false, 1943-02-01T14:46:20+04:32 ] ] + contain = { harm-babies-actually = 1927-05-26, lackadaisical-cobweb-ticket = { license-stale = true }, zealous = 14:34:49 } + dreary-rejoice = false + ignore-cobweb = true + jail = false + legal = {} + + [terrible.capable-tent.wilderness-aromatic.birds.rotten] + innocent = 2012-07-13 + stingy = 12:22:46 + wilderness = true + + [[terrible.capable-tent.taboo-snow-fix]] + consist = 0.5019 + deadpan-title-equable = [] + enthusiastic = 'jail step deserted' # neck + high-pitched-ski-jail = {} + lackadaisical-page = 2011-04-21 + leather-grandfather-lackadaisical = 'kindhearted kindhearted rich babies' # umbrella + relation-high-pitched = 1995-11-05 # blue-eyed cream + self-deeply-crown = 0.6038 # pumped relation + spare-behave-royal = 1955-01-15T04:19:40.000024836-03:27 + + [terrible.history-wistful-insidious] + deadpan-run = 1961-12-04T21:19:22 + impossible-itch-hilarious = [] + wall-silky-zealous = false + + [terrible.history-wistful-insidious.broken-bore] + decisive-spicy = 01:43:10 + finger-deeply = 03:52:20 + jail = [ 'week title curtain week snow' ] + jail-borrow = true # flimsy + kindhearted-tent-harm = 1979-06-03 + playground-unbecoming = 0.3341 + used-unbecoming-cobweb = 0.7474 + + [terrible.history-wistful-insidious.broken-bore.draconian.silky] # afraid unbiased + bat-vessel-enthusiastic = 1988-05-20T20:51:44+00:23 + decisive-close-rest = 1979-07-27T21:30:02-07:46 + messy = 0.2638 # excuse + stingy-self-rejoice = 0.0179 + tacky-mark = 'wilderness furtive incandescent delightful close rotten' # best + vessel = 2006-06-28T20:54:53 # umbrella + + [[terrible.history-wistful-insidious.cobweb-finicky]] + attempt-selfish-skip = [] + ball-ball = 0.1378 # aromatic best + blind-curtain = 06:26:13 + fuel-fix-geese = 1918-06-21T14:07:38 + high-pitched-three = 16:58:45 + innocent-rabbit = 'train' + miss = 'glorious chubby cobweb skip dreary scene ball' + morning = 'unbiased ticket deeply anxious skip terrible dreary' + playground = 'sisters run' # scene cycle + + [[terrible.history-wistful-insidious.cobweb-finicky]] + fabulous = [ 'flimsy spare tent rejoice curtain mark', true ] + rabbit = {} + ticket = false + +# unadvised sulky acceptable righteous broken profuse terrible +# ancient crown gleaming wistful ball rest +# picture deadpan mark flimsy scatter decisive +# close memory skip bat tent haircut +# run attempt morning vengeful delightful legal itch + + [terrible.productive] + itch = '' + +[[terrible]] +babies-sisters = 62 +boiling = { deserted = 'adorable', lackadaisical-wilderness = 671 } +decisive-itch = 1943-07-24 # cross rest +ignore-best = [ 1916-02-18T15:56:45+02:04 ] +overjoyed = 17:49:57 +place-familiar = true +sisters = [] +used-rotten = 1985-08-10T07:39:42+05:17 + + [[terrible.regret-sisters-terrible]] + + [[terrible.regret-sisters-terrible]] + bake = 0.8399 + cross = 427 + leather = [ 02:56:44.000030194, 1974-09-24 ] + nondescript-attempt-bore = 1900-07-03T04:56:46.000004029+07:22 + rejoice = true + +# geese snow relation worried + + [terrible.regret-sisters-terrible.ancient] + boiling-messy-stingy = { fabulous-wretched-mark = [], wall-familiar-furtive = 2003-09-16 } + cobweb-fix = 1988-05-07T07:01:15-10:34 + excuse-gleaming = { familiar = [ true, 1929-01-01T13:47:11+02:44, 04:04:47.00000846 ] } # heavy cheerful + fix-acceptable-string = 15:39:49.000006614 # actually imperfect + hard-to-find = false + imperfect = 1960-11-24T22:00:37 # overjoyed + rabbit-terrible-innocent = [] # threatening + rabbit-train-ski = 0.6229 # profuse + wilderness-advise = 1982-08-20 + + [[terrible.regret-sisters-terrible.ancient.umbrella-worried]] + afraid = true # dreary + + [terrible.regret-sisters-terrible.ancient.umbrella-worried.uptight-sisters-leather] + bore-tank-afraid = true # wretched curtain + + [[terrible.regret-sisters-terrible.terrible-scene-surprise]] + prefer-legal = 428 + relation-license-partner = [ true ] # playground + + [[terrible.regret-sisters-terrible]] + glorious-adorable = 206 # curtain + grandfather = 76 + ignore-cycle = 1956-07-22T01:39:24+03:39 + messy = {} # draconian + + [[terrible.regret-sisters-terrible.memory]] # curious memory + kindhearted-anxious-rotten = true + march-cheerful-view = { best-rice-want = 1978-08-26T22:05:21-00:49, spiritual = 1951-01-22T09:45:33-07:27, vessel-insidious = true } # gold + mark-sulky = 0.0597 + pear = 1986-10-18T13:04:43-01:01 # three itch + remarkable-wistful = 1901-10-01 + scatter-furtive-versed = 01:16:52 + tank-reject = [ 12:09:18, {} ] # wall finger + + [[terrible.regret-sisters-terrible.memory]] + babies-memory = [ { decisive = 15:35:50.000020612, stale-spicy = 0.1702 } ] # adhesive + blue-eyed-aromatic = 'curious birds terrible crowded' + close-cobweb-satisfy = [ {} ] + license = 0.9682 # lewd + reject-spiritual-taboo = '' + sulky-afraid = false + train-ghost-week = [ [ 0.6958, true ], 1942-02-15 ] + + [[terrible.regret-sisters-terrible.memory]] + imperfect = [ 0.0689 ] # harm + three-string-tacky = 0.2109 diff --git a/subprojects/tomlplusplus-3.3.0/examples/error_printer.cpp b/subprojects/tomlplusplus-3.3.0/examples/error_printer.cpp new file mode 100644 index 00000000..9c5430fb --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/error_printer.cpp @@ -0,0 +1,159 @@ +// This file is a part of toml++ and is subject to the the terms of the MIT license. +// Copyright (c) Mark Gillard +// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +// SPDX-License-Identifier: MIT + +// This example shows the error messages the library produces by forcing a set of specific parsing +// failures and printing their results. + +#include "examples.h" +#include + +using namespace std::string_view_literals; + +namespace +{ + inline constexpr auto invalid_parses = std::array{ + "########## comments and whitespace"sv, + "# bar\rkek"sv, + "# bar\bkek"sv, + "# \xf1\x63"sv, + "# val1 = 1\fval2 = 2"sv, + "foo = 1\n\u2000\nbar = 2"sv, + + "########## inline tables"sv, + "val = {,}"sv, + "val = {a='b',}"sv, // allowed when TOML_ENABLE_UNRELEASED_FEATURES == 1 + "val = {a='b',,}"sv, + "val = {a='b',"sv, + "val = {a='b',\n c='d'}"sv, // allowed when TOML_ENABLE_UNRELEASED_FEATURES == 1 + "val = {?='b'}"sv, + "foo = {} \n [foo.bar]"sv, + + "########## tables"sv, + "[]"sv, + "[foo"sv, + "[foo] ?"sv, + "[foo] [bar]"sv, + "[foo]\n[foo]"sv, + "? = 'foo' ?"sv, + "[ [foo] ]"sv, + + "########## arrays"sv, + "val = [,]"sv, + "val = ['a',,]"sv, + "val = ['a',"sv, + + "########## key-value pairs"sv, + "val = 'foo' ?"sv, + "val = "sv, + "val "sv, + "val ?"sv, + "val = ]"sv, + "[foo]\nbar = 'kek'\nbar = 'kek2'"sv, + "[foo]\nbar = 'kek'\nbar = 7"sv, + "[foo.bar]\n[foo]\nbar = 'kek'"sv, + "[foo]\nbar = 'kek'\nbar.kek = 7"sv, + "[foo]\nbar.? = 'kek'"sv, + R"('''val''' = 1)"sv, + R"(a."""val""" = 1)"sv, + "1= 0x6cA#+\xf1"sv, + R"(😂 = 3)"sv, // allowed when TOML_ENABLE_UNRELEASED_FEATURES == 1 + + "########## values"sv, + "val = _"sv, + "val = G"sv, + "PATHOLOGICALLY_NESTED"sv, // generated inline + + "########## strings"sv, + "val = \" \r \""sv, + R"(val = ")"sv, + R"(val = "\g")"sv, + R"(val = "\x20")"sv, // allowed when TOML_ENABLE_UNRELEASED_FEATURES == 1 + R"(val = "\uFFF")"sv, + R"(val = "\uFFFG")"sv, + R"(val = "\UFFFFFFF")"sv, + R"(val = "\UFFFFFGF")"sv, + R"(val = "\uD801")"sv, + R"(val = "\U00110000")"sv, + R"(val = """ """""")"sv, + R"(val = ''' '''''')"sv, + "val = '\n'"sv, + + "########## integers"sv, + R"(val = -0b0)"sv, + R"(val = -0o0)"sv, + R"(val = -0x0)"sv, + R"(val = +0b0)"sv, + R"(val = +0o0)"sv, + R"(val = +0x0)"sv, + R"(val = 1-)"sv, + R"(val = -1+)"sv, + R"(val = -+1)"sv, + R"(val = 1_0_)"sv, + R"(val = 1_0_ )"sv, + R"(val = 01 )"sv, + R"(val = 0b10000000_00000000_00000000_00000000_00000000_00000000_00000000_00000000 )"sv, + R"(val = 0o1000000000000000000000 )"sv, + R"(val = 9223372036854775808 )"sv, + R"(val = 0x8000000000000000 )"sv, + + "########## floats"sv, + R"(val = 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0)"sv, + }; + + inline constexpr auto divider = + "################################################################################"sv; +} + +int main() +{ + const auto parse_and_print_if_error = [](std::string_view str) + { +#if TOML_EXCEPTIONS + try + { + auto result = toml::parse(str); + static_cast(result); + } + catch (const toml::parse_error& err) + { + std::cout << err << "\n\n"sv; + } +#else + if (auto result = toml::parse(str); !result) + std::cout << result.error() << "\n\n"sv; +#endif + }; + + for (auto str : invalid_parses) + { + if (str.empty()) + continue; + + // section headings + if (str.substr(0, 10) == "##########"sv) + { + std::cout << divider << '\n'; + std::cout << "# "sv << str.substr(11) << '\n'; + std::cout << divider << "\n\n"sv; + } + + // error messages + else + { + toml::parse_result result; + + if (str == "PATHOLOGICALLY_NESTED"sv) + { + std::string s(1000u, '['); + constexpr auto start = "array = "sv; + memcpy(s.data(), start.data(), start.length()); + parse_and_print_if_error(s); + } + else + parse_and_print_if_error(str); + } + } + return 0; +} diff --git a/subprojects/tomlplusplus-3.3.0/examples/error_printer.vcxproj b/subprojects/tomlplusplus-3.3.0/examples/error_printer.vcxproj new file mode 100644 index 00000000..a7ad5b6f --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/error_printer.vcxproj @@ -0,0 +1,61 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {DAB4634D-8145-4860-AE45-5198E76FF324} + 10.0 + + + + Application + true + v143 + MultiByte + + + Application + false + v143 + true + MultiByte + + + + + + + + + Console + + + + ..\examples + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/examples/example.toml b/subprojects/tomlplusplus-3.3.0/examples/example.toml new file mode 100644 index 00000000..9612b530 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/example.toml @@ -0,0 +1,102 @@ +# This is a TOML document. Boom. + +title = "TOML Example" + +# plain signed integers +int1 = -9223372036854775808 +int2 = 9223372036854775807 + +# floats +flt1 = 0.00000000001 +flt2 = 1e-11 +flt3 = 11.0 +flt4 = +1.0 + +# hexadecimal with prefix `0x` +hex1 = 0xDEADBEEF +hex2 = 0xdeadbeef +hex3 = 0xdead_beef + +# octal with prefix `0o` +oct1 = 0o01234567 +oct2 = 0o755 # useful for Unix file permissions + +# binary with prefix `0b` +bin1 = 0b11010110 # 214 + +# local dates and times +tim1 = 07:32:00 +tim2 = 00:32:00.100000000 +dat1 = 1979-05-27 + +# offset date-times +odt1 = 1979-05-27T07:32:00Z +odt2 = 1979-05-27T00:32:00-07:00 +odt3 = 1979-05-27T00:32:00.999999-07:00 + +# strings +str1 = """ +This is a +multi-line +string. +""" +str2 = "This is also\na multi-line\nstring." +str3 = 'C:\highway\to\the\danger\zone' +kosme = "κόσμε" # unicode! + +arr = [ 'this', 'is', 'a', 'long', 'array', 'with', 16, 'elements.', 'it', 'should', 'be', 'printed', 'as', 'a', 'multiline', 'array.'] + +tab = { this = 'is', an = 'inline', table = 'yay'} + +dotted.keys.are = "supported" +dotted.and = "implemented as tables" + +[owner] +name = "Mark Gillard" +dob = 1987-03-16 10:20:00+09:30 + + [[owner.pets]] + name = "Brian" + species = "cat" + + [[owner.pets]] + name = "Skippy" + species = "kangaroo" + +[database] +server = "192.168.1.1" +ports = [ 8001, 8001, 8002 ] +connection_max = 5000 +enabled = true + +[servers] + + # You can indent as you please. Tabs or spaces. TOML don't care. + [servers.alpha] + ip = "10.0.0.1" + dc = "eqdc10" + + [servers.beta] + ip = "10.0.0.2" + dc = "eqdc10" + country = "中国" # This should be parsed as UTF-8 + +[clients] +data = [ ["gamma", "delta"], [1, 2] ] # just an update to make sure parsers support it + +# Line breaks are OK when inside arrays +hosts = [ + "alpha", + "omega" +] + +# Products + + [[products]] + name = "Hammer" + sku = 738594937 + + [[products]] + name = "Nail" + sku = 284758393 + color = "gray" diff --git a/subprojects/tomlplusplus-3.3.0/examples/examples.h b/subprojects/tomlplusplus-3.3.0/examples/examples.h new file mode 100644 index 00000000..7dc81800 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/examples.h @@ -0,0 +1,62 @@ +//# This file is a part of toml++ and is subject to the the terms of the MIT license. +//# Copyright (c) 2019-2020 Mark Gillard +//# See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +// SPDX-License-Identifier: MIT + +// this file is for boilerplate unrelated to the toml++ example learning outcomes. + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Weverything" +#elif defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wall" +#pragma GCC diagnostic ignored "-Wextra" +#elif defined(_MSC_VER) +#pragma warning(push, 0) +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef _WIN32 +#ifdef _MSC_VER +extern "C" __declspec(dllimport) int __stdcall SetConsoleOutputCP(unsigned int); +#pragma comment(lib, "Kernel32.lib") +#else +#include +#endif +#endif + +namespace +{ + static const auto initialize_environment_automagically = []() noexcept + { +#ifdef _WIN32 + SetConsoleOutputCP(65001); // CP_UTF8 +#endif + + std::ios_base::sync_with_stdio(false); + std::cout << std::boolalpha; + + srand(static_cast(time(nullptr))); + + return true; + }(); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#elif defined(__GNUC__) +#pragma GCC diagnostic pop +#elif defined(_MSC_VER) +#pragma warning(pop) +#endif diff --git a/subprojects/tomlplusplus-3.3.0/examples/merge_base.toml b/subprojects/tomlplusplus-3.3.0/examples/merge_base.toml new file mode 100644 index 00000000..a863b27e --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/merge_base.toml @@ -0,0 +1,5 @@ +[section1] +key1="value1" +key2="value2" + +[section1.child1] diff --git a/subprojects/tomlplusplus-3.3.0/examples/merge_overrides.toml b/subprojects/tomlplusplus-3.3.0/examples/merge_overrides.toml new file mode 100644 index 00000000..792396e3 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/merge_overrides.toml @@ -0,0 +1,8 @@ +[section1] +key2="value3" + +[section1.child1] +foo="bar" + +[section1.child2] +foo2="bar2" diff --git a/subprojects/tomlplusplus-3.3.0/examples/meson.build b/subprojects/tomlplusplus-3.3.0/examples/meson.build new file mode 100644 index 00000000..366f37c7 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/meson.build @@ -0,0 +1,30 @@ +# This file is a part of toml++ and is subject to the the terms of the MIT license. +# Copyright (c) Mark Gillard +# See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +# SPDX-License-Identifier: MIT + +example_args = [] +example_args += global_args + +examples = [ + 'simple_parser', + 'toml_to_json_transcoder', + 'toml_generator', + 'error_printer', + 'parse_benchmark', + 'toml_merger', +] + +example_executables = [] +foreach example : examples + example_executables += [[ + example, + executable( + example, + [ example + '.cpp' ], + cpp_args: example_args, + dependencies: tomlplusplus_dep, + override_options: global_overrides + ) + ]] +endforeach diff --git a/subprojects/tomlplusplus-3.3.0/examples/parse_benchmark.cpp b/subprojects/tomlplusplus-3.3.0/examples/parse_benchmark.cpp new file mode 100644 index 00000000..6d974717 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/parse_benchmark.cpp @@ -0,0 +1,81 @@ +// This file is a part of toml++ and is subject to the the terms of the MIT license. +// Copyright (c) Mark Gillard +// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +// SPDX-License-Identifier: MIT + +// This example is just a short-n-shiny benchmark. + +#include "examples.h" +#include + +using namespace std::string_view_literals; + +static constexpr size_t iterations = 10000; + +int main(int argc, char** argv) +{ + const auto file_path = std::string(argc > 1 ? std::string_view{ argv[1] } : "benchmark_data.toml"sv); + + // read the file into a string first to remove file I/O from the benchmark + std::string file_content; + { + std::ifstream file(file_path, std::ifstream::in | std::ifstream::binary | std::ifstream::ate); + if (!file) + { + std::cerr << "File '"sv << file_path << "'could not be opened for reading\n"sv; + return -1; + } + + const auto file_size = file.tellg(); + if (file_size == -1) + { + std::cerr << "File '"sv << file_path << "' could not be opened for reading\n"sv; + return -1; + } + file.seekg(0, std::ifstream::beg); + + file_content.resize(static_cast(file_size)); + file.read(file_content.data(), static_cast(file_size)); + if (!file.eof() && !file) + { + std::cerr << "Failed to read contents of file '"sv << file_path << "'\n"sv; + return -1; + } + } + + // parse once to make sure it isn't garbage + { +#if TOML_EXCEPTIONS + try + { + const auto result = toml::parse(file_content, file_path); + } + catch (const toml::parse_error& err) + { + std::cerr << err << "\n"; + return 1; + } +#else + const auto result = toml::parse(file_content, file_path); + if (!result) + { + std::cerr << result.error() << "\n"; + return 1; + } +#endif + } + + // run the benchmark + std::cout << "Parsing '"sv << file_path << "' "sv << iterations << " times...\n"sv; + + const auto start = std::chrono::steady_clock::now(); + for (size_t i = 0; i < iterations; i++) + std::ignore = toml::parse(file_content, file_path); + const auto cumulative_sec = + std::chrono::duration_cast>(std::chrono::steady_clock::now() - start).count(); + const auto mean_sec = cumulative_sec / static_cast(iterations); + std::cout << " total: "sv << cumulative_sec << " s\n"sv + << " mean: "sv << mean_sec << " s\n"sv; + + return 0; +} diff --git a/subprojects/tomlplusplus-3.3.0/examples/parse_benchmark.vcxproj b/subprojects/tomlplusplus-3.3.0/examples/parse_benchmark.vcxproj new file mode 100644 index 00000000..927aa4e0 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/parse_benchmark.vcxproj @@ -0,0 +1,62 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {407FCAA8-FC2C-424D-B44B-C6A1AFAD757A} + 10.0 + + + + Application + true + v143 + MultiByte + + + Application + false + v143 + true + MultiByte + + + + + + + + + Console + + + + ..\examples + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/examples/simple_parser.cpp b/subprojects/tomlplusplus-3.3.0/examples/simple_parser.cpp new file mode 100644 index 00000000..ec771110 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/simple_parser.cpp @@ -0,0 +1,36 @@ +// This file is a part of toml++ and is subject to the the terms of the MIT license. +// Copyright (c) Mark Gillard +// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +// SPDX-License-Identifier: MIT + +// This example demonstrates how to parse TOML from a file or stdin and re-serialize it (print it out) to stdout. + +#include "examples.h" +#include + +using namespace std::string_view_literals; + +int main(int argc, char** argv) +{ + const auto path = argc > 1 ? std::string_view{ argv[1] } : "example.toml"sv; + + toml::table tbl; + try + { + // read directly from stdin + if (path == "-"sv || path.empty()) + tbl = toml::parse(std::cin, "stdin"sv); + + // read from a file + else + tbl = toml::parse_file(path); + } + catch (const toml::parse_error& err) + { + std::cerr << err << "\n"; + return 1; + } + + std::cout << tbl << "\n"; + return 0; +} diff --git a/subprojects/tomlplusplus-3.3.0/examples/simple_parser.vcxproj b/subprojects/tomlplusplus-3.3.0/examples/simple_parser.vcxproj new file mode 100644 index 00000000..14d2b0f6 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/simple_parser.vcxproj @@ -0,0 +1,62 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {259FCEE5-3442-4076-9547-2BA793ECA1CB} + 10.0 + + + + Application + true + v143 + MultiByte + + + Application + false + v143 + true + MultiByte + + + + + + + + + Console + + + + ..\examples + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/examples/toml_generator.cpp b/subprojects/tomlplusplus-3.3.0/examples/toml_generator.cpp new file mode 100644 index 00000000..5a51d77b --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/toml_generator.cpp @@ -0,0 +1,322 @@ +// This file is a part of toml++ and is subject to the the terms of the MIT license. +// Copyright (c) Mark Gillard +// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +// SPDX-License-Identifier: MIT + +// This example demonstrates the use of some more advanced features to generate a tree of random TOML data. + +#include "examples.h" +#include + +using namespace std::string_view_literals; + +namespace +{ + namespace random + { + inline constexpr std::string_view words[] = { + "acceptable"sv, "contain"sv, "ghost"sv, "mark"sv, "respect"sv, "taboo"sv, + "actually"sv, "cream"sv, "gleaming"sv, "meaty"sv, "rest"sv, "tacky"sv, + "addition"sv, "creature"sv, "glorious"sv, "memory"sv, "rice"sv, "tank"sv, + "adhesive"sv, "crime"sv, "gold"sv, "messy"sv, "rich"sv, "tent"sv, + "adorable"sv, "cross"sv, "grandfather"sv, "miss"sv, "righteous"sv, "terrible"sv, + "advise"sv, "crowded"sv, "gusty"sv, "modern"sv, "room"sv, "threatening"sv, + "afraid"sv, "crown"sv, "haircut"sv, "morning"sv, "rotten"sv, "three"sv, + "ancient"sv, "cure"sv, "hard-to-find"sv, "naughty"sv, "royal"sv, "ticket"sv, + "anxious"sv, "curious"sv, "harm"sv, "neck"sv, "run"sv, "title"sv, + "aromatic"sv, "curtain"sv, "heavy"sv, "night"sv, "satisfy"sv, "torpid"sv, + "attempt"sv, "cycle"sv, "helpless"sv, "nondescript"sv, "scary"sv, "train"sv, + "babies"sv, "deadpan"sv, "high-pitched"sv, "overjoyed"sv, "scatter"sv, "umbrella"sv, + "bake"sv, "decisive"sv, "hilarious"sv, "page"sv, "scene"sv, "unadvised"sv, + "ball"sv, "deeply"sv, "history"sv, "partner"sv, "scintillating"sv, "unbecoming"sv, + "bat"sv, "delightful"sv, "hook"sv, "party"sv, "self"sv, "unbiased"sv, + "behave"sv, "deserted"sv, "ignore"sv, "pause"sv, "selfish"sv, "unite"sv, + "best"sv, "draconian"sv, "imperfect"sv, "pear"sv, "silky"sv, "uptight"sv, + "birds"sv, "dreary"sv, "impossible"sv, "picture"sv, "sisters"sv, "used"sv, + "blind"sv, "dull"sv, "incandescent"sv, "place"sv, "ski"sv, "vengeful"sv, + "blood"sv, "enthusiastic"sv, "influence"sv, "playground"sv, "skip"sv, "versed"sv, + "blue-eyed"sv, "equable"sv, "innocent"sv, "popcorn"sv, "snow"sv, "vessel"sv, + "boiling"sv, "excuse"sv, "insidious"sv, "prefer"sv, "soap"sv, "view"sv, + "bore"sv, "experience"sv, "itch"sv, "productive"sv, "spare"sv, "voyage"sv, + "borrow"sv, "fabulous"sv, "jail"sv, "profuse"sv, "spicy"sv, "wall"sv, + "broken"sv, "familiar"sv, "kindhearted"sv, "protective"sv, "spiritual"sv, "want"sv, + "capable"sv, "finger"sv, "lackadaisical"sv, "pumped"sv, "sprout"sv, "weary"sv, + "charming"sv, "finicky"sv, "laughable"sv, "rabbit"sv, "squirrel"sv, "week"sv, + "cheerful"sv, "fix"sv, "leather"sv, "rapid"sv, "stale"sv, "whip"sv, + "chubby"sv, "flagrant"sv, "legal"sv, "regret"sv, "step"sv, "wilderness"sv, + "clean"sv, "flat"sv, "lewd"sv, "reject"sv, "stingy"sv, "wistful"sv, + "close"sv, "flimsy"sv, "license"sv, "rejoice"sv, "string"sv, "worried"sv, + "cobweb"sv, "fuel"sv, "light"sv, "relation"sv, "sulky"sv, "wretched"sv, + "complex"sv, "furtive"sv, "march"sv, "remarkable"sv, "surprise"sv, "zealous"sv, + "consist"sv, "geese"sv + }; + + [[nodiscard]] static bool boolean() noexcept + { + return std::rand() % 2 == 0; + } + + template + [[nodiscard]] static T integer(T excl_max) noexcept + { + return static_cast(static_cast(std::rand()) % excl_max); + } + + template + [[nodiscard]] static T integer(T incl_min, T excl_max) noexcept + { + return static_cast(incl_min + integer(excl_max - incl_min)); + } + + [[nodiscard]] static bool chance(float val) noexcept + { + val = (val < 0.0f ? 0.0f : (val > 1.0f ? 1.0f : val)) * 1000.0f; + return static_cast(integer(0, 1000)) <= val; + } + + [[nodiscard]] static toml::date date() noexcept + { + return toml::date{ integer(1900, 2021), // + integer(1, 13), + integer(1, 29) }; + } + + [[nodiscard]] static toml::time time() noexcept + { + return toml::time{ integer(24), // + integer(60), + integer(60), + boolean() ? integer(1000000000u) : 0u }; + } + + [[nodiscard]] static toml::time_offset time_offset() noexcept + { + return toml::time_offset{ integer(-11, 12), integer(-45, +46) }; + } + + [[nodiscard]] static toml::date_time date_time() noexcept + { + return boolean() ? toml::date_time{ date(), time() } // + : toml::date_time{ date(), time(), time_offset() }; + } + + [[nodiscard]] static std::string_view word() noexcept + { + return words[integer(std::size(words))]; + } + + [[nodiscard]] static std::string string(size_t word_count, char sep = ' ') + { + std::string val; + while (word_count-- > 0u) + { + if (!val.empty()) + val += sep; + val.append(word()); + } + return val; + } + + [[nodiscard]] static std::string key() + { + return random::string(random::integer(1u, 4u), '-'); + } + + } + + template + static auto add_to(toml::table& tbl, T&& val) -> toml::inserted_type_of& + { + while (true) + { + auto key = random::key(); + auto it = std::as_const(tbl).lower_bound(key); + if (it == tbl.cend() || it->first != key) + { + return *tbl.emplace_hint(it, std::move(key), static_cast(val)) + ->second.template as>(); + } + } + } + + template + static auto add_to(toml::array& arr, T&& val) -> toml::inserted_type_of& + { + return arr.emplace_back(static_cast(val)); + } + + template + static void add_value_to(Container& container) + { + static_assert(toml::is_container); + + switch (random::integer(7)) + { + case 0: add_to(container, random::string(random::integer(8u))); break; + case 1: add_to(container, random::integer(1000)); break; + case 2: add_to(container, random::integer(10001) / 10000.0); break; + case 3: add_to(container, random::boolean()); break; + case 4: add_to(container, random::date()); break; + case 5: add_to(container, random::time()); break; + case 6: add_to(container, random::date_time()); break; + default: break; + } + } + + static constexpr int max_inline_nesting = 2; + static constexpr int default_max_inline_values = 4; + + template + static void populate_inline_container(Container& container, + int& budget, + int inline_nesting = 0, + int max_values = default_max_inline_values) + { + static_assert(toml::is_container); + + auto values = random::integer(max_values); + while (budget && values) + { + // inline array/table + if (inline_nesting < max_inline_nesting && random::chance(0.25f)) + { + // array + if (random::boolean()) + { + auto& arr = add_to(container, toml::array{}); + populate_inline_container(arr, budget, inline_nesting + 1, default_max_inline_values); + } + + // table + else + { + auto& tbl = add_to(container, toml::table{}); + tbl.is_inline(true); + populate_inline_container(tbl, budget, inline_nesting + 1, default_max_inline_values); + } + } + + // regular value + else + { + add_value_to(container); + budget--; + } + + values--; + } + } + + static constexpr int max_top_level_nesting = 5; + static constexpr int max_array_of_tables_children = 4; + static constexpr int max_table_children = 4; + + static void populate_table(toml::table& tbl, int& budget, int nesting = 0) + { + assert(!tbl.is_inline()); + + // do simple values + inline tables/arrays first + populate_inline_container(tbl, budget, 0, 10); + + // add a nested array-of-tables + if (budget && nesting < max_top_level_nesting && random::chance(0.33f)) + { + auto& arr = add_to(tbl, toml::array{}); + // note we don't subtract from the budget for the outer array; + // it's "invisible" from a topological perspective when reading the output TOML + + auto children = random::integer(1, max_array_of_tables_children); + while (budget && children) + { + auto& sub_tbl = add_to(arr, toml::table{}); + budget--; + children--; + + populate_table(sub_tbl, budget, nesting + 1); + } + } + + // add nested tables + if (budget && nesting < max_top_level_nesting && random::chance(0.33f)) + { + auto children = random::integer(1, max_table_children); + while (budget && children) + { + auto& sub_tbl = add_to(tbl, toml::table{}); + budget--; + children--; + + populate_table(sub_tbl, budget, nesting + 1); + } + } + } +} + +int main(int argc, char** argv) +{ + int budget{}; + bool comments = true; + for (int i = 1; i < argc; i++) + { + const auto arg = std::string_view{ argv[i] }; + if (arg == "--nocomments"sv) + comments = false; + else + { + std::istringstream ss{ std::string(arg) }; + int num; + if ((ss >> num)) + budget += num; + else + { + std::cerr << "Unknown argument '"sv << arg << "'\n"; + return 1; + } + } + } + if (budget <= 0) + budget = 100; + + toml::table root; + while (budget > 0) + populate_table(root, budget); + + if (comments) + { + std::stringstream src; + src << root; + + std::string line; + std::ostringstream dest; + while (std::getline(src, line)) + { + if (line.empty()) + { + // occasionally dump a paragraph comment at the top-level of the document + if (random::chance(0.20f)) + { + auto lines = random::integer(1, 8); + while (lines--) + dest << "\n# "sv << random::string(random::integer(4u, 8u)); + dest << "\n"sv; + } + } + else + { + dest << line; + + // occasionally add short comments at end of non-blank lines + if (random::chance(0.30f)) + dest << " # "sv << random::string(random::integer(1u, 3u)); + } + + dest << "\n"sv; + } + std::cout << dest.str(); + } + else + { + std::cout << root << "\n"; + } + return 0; +} diff --git a/subprojects/tomlplusplus-3.3.0/examples/toml_generator.vcxproj b/subprojects/tomlplusplus-3.3.0/examples/toml_generator.vcxproj new file mode 100644 index 00000000..3b4e0b22 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/toml_generator.vcxproj @@ -0,0 +1,62 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {23CE3B73-FEE7-436C-9B4E-3DFB202EE9A2} + 10.0 + toml_generator + + + + Application + true + v143 + MultiByte + + + Application + false + v143 + true + MultiByte + + + + + + + + + Console + + + + ..\examples + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/examples/toml_merger.cpp b/subprojects/tomlplusplus-3.3.0/examples/toml_merger.cpp new file mode 100644 index 00000000..99bcde2c --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/toml_merger.cpp @@ -0,0 +1,101 @@ +// This file is a part of toml++ and is subject to the the terms of the MIT license. +// Copyright (c) Mark Gillard +// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +// SPDX-License-Identifier: MIT + +// This example demonstrates a method of merging one TOML data tree into another. + +#include "examples.h" +#include + +using namespace std::string_view_literals; + +namespace +{ + // recursively merge 'rhs' into 'lhs'. + // + // note that this implementation always prioritizes 'rhs' over 'lhs' in the event of a conflict; + // extending it to handle conflicts in some other manner is left as an exercise to the reader :) + + static void merge_left(toml::table& lhs, toml::table&& rhs); + + static void merge_left(toml::array& lhs, toml::array&& rhs) + { + rhs.for_each( + [&](std::size_t index, auto&& rhs_val) + { + // rhs index not found in lhs - direct move + if (lhs.size() <= index) + { + lhs.push_back(std::move(rhs_val)); + return; + } + + // both elements were the same container type - recurse into them + if constexpr (toml::is_container) + { + using rhs_type = std::remove_cv_t>; + if (auto lhs_child = lhs[index].as()) + { + merge_left(*lhs_child, std::move(rhs_val)); + return; + } + } + + // replace lhs element with rhs + lhs.replace(lhs.cbegin() + static_cast(index), std::move(rhs_val)); + }); + } + + static void merge_left(toml::table& lhs, toml::table&& rhs) + { + rhs.for_each( + [&](const toml::key& rhs_key, auto&& rhs_val) + { + auto lhs_it = lhs.lower_bound(rhs_key); + + // rhs key not found in lhs - direct move + if (lhs_it == lhs.cend() || lhs_it->first != rhs_key) + { + using rhs_type = std::remove_cv_t>; + lhs.emplace_hint(lhs_it, rhs_key, std::move(rhs_val)); + return; + } + + // both children were the same container type - recurse into them + if constexpr (toml::is_container) + { + using rhs_type = std::remove_cv_t>; + if (auto lhs_child = lhs_it->second.as()) + { + merge_left(*lhs_child, std::move(rhs_val)); + return; + } + } + + // replace lhs value with rhs + lhs.insert_or_assign(rhs_key, std::move(rhs_val)); + }); + } +} + +int main(int argc, char** argv) +{ + const auto base_path = argc > 1 ? std::string_view{ argv[1] } : "merge_base.toml"sv; + const auto overrides_path = argc > 2 ? std::string_view{ argv[2] } : "merge_overrides.toml"sv; + + toml::table tbl; + try + { + tbl = toml::parse_file(base_path); + merge_left(tbl, toml::parse_file(overrides_path)); + } + catch (const toml::parse_error& err) + { + std::cerr << err << "\n"; + return 1; + } + + std::cout << tbl << "\n"; + return 0; +} diff --git a/subprojects/tomlplusplus-3.3.0/examples/toml_merger.vcxproj b/subprojects/tomlplusplus-3.3.0/examples/toml_merger.vcxproj new file mode 100644 index 00000000..cb93dbbc --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/toml_merger.vcxproj @@ -0,0 +1,63 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {E467EB97-B066-4D38-B3DB-60961E3F96A1} + 10.0 + + + + Application + true + v143 + MultiByte + + + Application + false + v143 + true + MultiByte + + + + + + + + + Console + + + + ..\examples + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/examples/toml_to_json_transcoder.cpp b/subprojects/tomlplusplus-3.3.0/examples/toml_to_json_transcoder.cpp new file mode 100644 index 00000000..881bcd55 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/toml_to_json_transcoder.cpp @@ -0,0 +1,36 @@ +// This file is a part of toml++ and is subject to the the terms of the MIT license. +// Copyright (c) Mark Gillard +// See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +// SPDX-License-Identifier: MIT + +// This example demonstrates how to use the toml::json_formatter to re-serialize TOML data as JSON. + +#include "examples.h" +#include + +using namespace std::string_view_literals; + +int main(int argc, char** argv) +{ + const auto path = argc > 1 ? std::string_view{ argv[1] } : ""sv; + + toml::table table; + try + { + // read directly from stdin + if (path == "-"sv || path.empty()) + table = toml::parse(std::cin, "stdin"sv); + + // read from a file + else + table = toml::parse_file(argv[1]); + } + catch (const toml::parse_error& err) + { + std::cerr << err << "\n"; + return 1; + } + + std::cout << toml::json_formatter{ table } << "\n"; + return 0; +} diff --git a/subprojects/tomlplusplus-3.3.0/examples/toml_to_json_transcoder.vcxproj b/subprojects/tomlplusplus-3.3.0/examples/toml_to_json_transcoder.vcxproj new file mode 100644 index 00000000..6ff8538c --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/examples/toml_to_json_transcoder.vcxproj @@ -0,0 +1,62 @@ + + + + + Debug + x64 + + + Release + x64 + + + + 16.0 + {BE34AA99-BEE6-4B50-B237-217E7C88FCB5} + 10.0 + toml_to_json_transcoder + + + + Application + true + v143 + MultiByte + + + Application + false + v143 + true + MultiByte + + + + + + + + + Console + + + + ..\examples + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/subprojects/tomlplusplus-3.3.0/include/meson.build b/subprojects/tomlplusplus-3.3.0/include/meson.build new file mode 100644 index 00000000..206dc6f5 --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/include/meson.build @@ -0,0 +1,52 @@ +# This file is a part of toml++ and is subject to the the terms of the MIT license. +# Copyright (c) Mark Gillard +# See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +# SPDX-License-Identifier: MIT + +include_dir = include_directories('.') + +if not is_subproject + install_subdir('toml++', install_dir: get_option('includedir')) +endif + +if not build_lib # header-only mode + + tomlplusplus_dep = declare_dependency(include_directories: include_dir) + + if not is_subproject + import('pkgconfig').generate( + name: meson.project_name(), + description: 'Header-only TOML config file parser and serializer for C++', + install_dir: get_option('datadir')/'pkgconfig', + url: 'https://marzer.github.io/tomlplusplus' + ) + endif + + # cmake + if get_option('generate_cmake_config') and not is_subproject and not is_devel + cmake = import('cmake') + # Can't use until Meson 0.62.0, see https://github.com/mesonbuild/meson/pull/9916 + # and https://github.com/marzer/tomlplusplus/issues/140 + #cmake.write_basic_package_version_file( + # name: meson.project_name(), + # version: meson.project_version(), + # install_dir: get_option('datadir')/'cmake'/meson.project_name(), + # arch_independent: true + #) + # In the meantime, install a pre-generated Package Version file + configure_file( + configuration: {'version': meson.project_version()}, + input: '..'/'cmake'/'tomlplusplusConfigVersion.cmake.meson.in', + output: 'tomlplusplusConfigVersion.cmake', + install_dir: get_option('datadir')/'cmake'/meson.project_name() + ) + + cmake.configure_package_config_file( + name: meson.project_name(), + input: '..'/'cmake'/'tomlplusplusConfig.cmake.meson.in', + configuration: configuration_data({'includedir': get_option('includedir')}), + install_dir: get_option('datadir')/'cmake'/meson.project_name(), + ) + endif + +endif diff --git a/subprojects/tomlplusplus-3.3.0/include/toml++/impl/array.h b/subprojects/tomlplusplus-3.3.0/include/toml++/impl/array.h new file mode 100644 index 00000000..dd217c7a --- /dev/null +++ b/subprojects/tomlplusplus-3.3.0/include/toml++/impl/array.h @@ -0,0 +1,1727 @@ +//# This file is a part of toml++ and is subject to the the terms of the MIT license. +//# Copyright (c) Mark Gillard +//# See https://github.com/marzer/tomlplusplus/blob/master/LICENSE for the full license text. +// SPDX-License-Identifier: MIT +#pragma once + +#include "std_utility.h" +#include "std_vector.h" +#include "std_initializer_list.h" +#include "value.h" +#include "make_node.h" +#include "header_start.h" + +/// \cond +TOML_IMPL_NAMESPACE_START +{ + template + class TOML_TRIVIAL_ABI array_iterator + { + private: + template + friend class array_iterator; + + using mutable_vector_iterator = std::vector::iterator; + using const_vector_iterator = std::vector::const_iterator; + using vector_iterator = std::conditional_t; + + mutable vector_iterator iter_; + + public: + using value_type = std::conditional_t; + using reference = value_type&; + using pointer = value_type*; + using difference_type = ptrdiff_t; + using iterator_category = typename std::iterator_traits::iterator_category; + + TOML_NODISCARD_CTOR + array_iterator() noexcept = default; + + TOML_NODISCARD_CTOR + explicit array_iterator(mutable_vector_iterator iter) noexcept // + : iter_{ iter } + {} + + TOML_CONSTRAINED_TEMPLATE(C, bool C = IsConst) + TOML_NODISCARD_CTOR + explicit array_iterator(const_vector_iterator iter) noexcept // + : iter_{ iter } + {} + + TOML_CONSTRAINED_TEMPLATE(C, bool C = IsConst) + TOML_NODISCARD_CTOR + array_iterator(const array_iterator& other) noexcept // + : iter_{ other.iter_ } + {} + + TOML_NODISCARD_CTOR + array_iterator(const array_iterator&) noexcept = default; + + array_iterator& operator=(const array_iterator&) noexcept = default; + + array_iterator& operator++() noexcept // ++pre + { + ++iter_; + return *this; + } + + array_iterator operator++(int) noexcept // post++ + { + array_iterator out{ iter_ }; + ++iter_; + return out; + } + + array_iterator& operator--() noexcept // --pre + { + --iter_; + return *this; + } + + array_iterator operator--(int) noexcept // post-- + { + array_iterator out{ iter_ }; + --iter_; + return out; + } + + TOML_PURE_INLINE_GETTER + reference operator*() const noexcept + { + return *iter_->get(); + } + + TOML_PURE_INLINE_GETTER + pointer operator->() const noexcept + { + return iter_->get(); + } + + TOML_PURE_INLINE_GETTER + explicit operator const vector_iterator&() const noexcept + { + return iter_; + } + + TOML_CONSTRAINED_TEMPLATE(!C, bool C = IsConst) + TOML_PURE_INLINE_GETTER + explicit operator const const_vector_iterator() const noexcept + { + return iter_; + } + + array_iterator& operator+=(ptrdiff_t rhs) noexcept + { + iter_ += rhs; + return *this; + } + + array_iterator& operator-=(ptrdiff_t rhs) noexcept + { + iter_ -= rhs; + return *this; + } + + TOML_NODISCARD + friend array_iterator operator+(const array_iterator& lhs, ptrdiff_t rhs) noexcept + { + return array_iterator{ lhs.iter_ + rhs }; + } + + TOML_NODISCARD + friend array_iterator operator+(ptrdiff_t lhs, const array_iterator& rhs) noexcept + { + return array_iterator{ rhs.iter_ + lhs }; + } + + TOML_NODISCARD + friend array_iterator operator-(const array_iterator& lhs, ptrdiff_t rhs) noexcept + { + return array_iterator{ lhs.iter_ - rhs }; + } + + TOML_PURE_INLINE_GETTER + friend ptrdiff_t operator-(const array_iterator& lhs, const array_iterator& rhs) noexcept + { + return lhs.iter_ - rhs.iter_; + } + + TOML_PURE_INLINE_GETTER + friend bool operator==(const array_iterator& lhs, const array_iterator& rhs) noexcept + { + return lhs.iter_ == rhs.iter_; + } + + TOML_PURE_INLINE_GETTER + friend bool operator!=(const array_iterator& lhs, const array_iterator& rhs) noexcept + { + return lhs.iter_ != rhs.iter_; + } + + TOML_PURE_INLINE_GETTER + friend bool operator<(const array_iterator& lhs, const array_iterator& rhs) noexcept + { + return lhs.iter_ < rhs.iter_; + } + + TOML_PURE_INLINE_GETTER + friend bool operator<=(const array_iterator& lhs, const array_iterator& rhs) noexcept + { + return lhs.iter_ <= rhs.iter_; + } + + TOML_PURE_INLINE_GETTER + friend bool operator>(const array_iterator& lhs, const array_iterator& rhs) noexcept + { + return lhs.iter_ > rhs.iter_; + } + + TOML_PURE_INLINE_GETTER + friend bool operator>=(const array_iterator& lhs, const array_iterator& rhs) noexcept + { + return lhs.iter_ >= rhs.iter_; + } + + TOML_PURE_INLINE_GETTER + reference operator[](ptrdiff_t idx) const noexcept + { + return *(iter_ + idx)->get(); + } + }; + + struct array_init_elem + { + mutable node_ptr value; + + template + TOML_NODISCARD_CTOR + array_init_elem(T&& val, value_flags flags = preserve_source_value_flags) // + : value{ make_node(static_cast(val), flags) } + {} + }; +} +TOML_IMPL_NAMESPACE_END; +/// \endcond + +TOML_NAMESPACE_START +{ + /// \brief A RandomAccessIterator for iterating over elements in a toml::array. + using array_iterator = POXY_IMPLEMENTATION_DETAIL(impl::array_iterator); + + /// \brief A RandomAccessIterator for iterating over const elements in a toml::array. + using const_array_iterator = POXY_IMPLEMENTATION_DETAIL(impl::array_iterator); + + /// \brief A TOML array. + /// + /// \detail The interface of this type is modeled after std::vector, with some + /// additional considerations made for the heterogeneous nature of a + /// TOML array. + /// + /// \godbolt{sjK4da} + /// + /// \cpp + /// + /// toml::table tbl = toml::parse(R"( + /// arr = [1, 2, 3, 4, 'five'] + /// )"sv); + /// + /// // get the element as an array + /// toml::array& arr = *tbl.get_as("arr"); + /// std::cout << arr << "\n"; + /// + /// // increment each element with visit() + /// for (auto&& elem : arr) + /// { + /// elem.visit([](auto&& el) noexcept + /// { + /// if constexpr (toml::is_number) + /// (*el)++; + /// else if constexpr (toml::is_string) + /// el = "six"sv; + /// }); + /// } + /// std::cout << arr << "\n"; + /// + /// // add and remove elements + /// arr.push_back(7); + /// arr.push_back(8.0f); + /// arr.push_back("nine"sv); + /// arr.erase(arr.cbegin()); + /// std::cout << arr << "\n"; + /// + /// // emplace elements + /// arr.emplace_back("ten"); + /// arr.emplace_back(11, 12.0); + /// std::cout << arr << "\n"; + /// \ecpp + /// + /// \out + /// [ 1, 2, 3, 4, 'five' ] + /// [ 2, 3, 4, 5, 'six' ] + /// [ 3, 4, 5, 'six', 7, 8.0, 'nine' ] + /// [ 3, 4, 5, 'six', 7, 8.0, 'nine', 'ten', [ 11, 12.0 ] ] + /// \eout + class TOML_EXPORTED_CLASS array : public node + { + private: + /// \cond + + using vector_type = std::vector; + using vector_iterator = typename vector_type::iterator; + using const_vector_iterator = typename vector_type::const_iterator; + vector_type elems_; + + TOML_NODISCARD_CTOR + TOML_EXPORTED_MEMBER_FUNCTION + array(const impl::array_init_elem*, const impl::array_init_elem*); + + TOML_NODISCARD_CTOR + array(std::false_type, std::initializer_list elems) // + : array{ elems.begin(), elems.end() } + {} + + TOML_EXPORTED_MEMBER_FUNCTION + void preinsertion_resize(size_t idx, size_t count); + + TOML_EXPORTED_MEMBER_FUNCTION + void insert_at_back(impl::node_ptr&&); + + TOML_EXPORTED_MEMBER_FUNCTION + vector_iterator insert_at(const_vector_iterator, impl::node_ptr&&); + + template + void emplace_back_if_not_empty_view(T&& val, value_flags flags) + { + if constexpr (is_node_view) + { + if (!val) + return; + } + insert_at_back(impl::make_node(static_cast(val), flags)); + } + + TOML_NODISCARD + TOML_EXPORTED_MEMBER_FUNCTION + size_t total_leaf_count() const noexcept; + + TOML_EXPORTED_MEMBER_FUNCTION + void flatten_child(array&& child, size_t& dest_index) noexcept; + + /// \endcond + + public: + using value_type = node; + using size_type = size_t; + using difference_type = ptrdiff_t; + using reference = node&; + using const_reference = const node&; + + /// \brief Default constructor. + TOML_NODISCARD_CTOR + TOML_EXPORTED_MEMBER_FUNCTION + array() noexcept; + + TOML_EXPORTED_MEMBER_FUNCTION + ~array() noexcept; + + /// \brief Copy constructor. + TOML_NODISCARD_CTOR + TOML_EXPORTED_MEMBER_FUNCTION + array(const array&); + + /// \brief Move constructor. + TOML_NODISCARD_CTOR + TOML_EXPORTED_MEMBER_FUNCTION + array(array&& other) noexcept; + + /// \brief Constructs an array with one or more initial elements. + /// + /// \detail \cpp + /// auto arr = toml::array{ 1, 2.0, "three"sv, toml::array{ 4, 5 } }; + /// std::cout << arr << "\n"; + /// \ecpp + /// + /// \out + /// [ 1, 2.0, 'three', [ 4, 5 ] ] + /// \eout + /// + /// \remark \parblock If you need to construct an array with one child array element, the array's move constructor + /// will take precedence and perform a move-construction instead. You can use toml::inserter to + /// suppress this behaviour: \cpp + /// // desired result: [ [ 42 ] ] + /// auto bad = toml::array{ toml::array{ 42 } } + /// auto good = toml::array{ toml::inserter{ toml::array{ 42 } } } + /// std::cout << "bad: " << bad << "\n"; + /// std::cout << "good:" << good << "\n"; + /// \ecpp + /// + /// \out + /// bad: [ 42 ] + /// good: [ [ 42 ] ] + /// \eout + /// + /// \endparblock + /// + /// \tparam ElemType One of the TOML node or value types (or a type promotable to one). + /// \tparam ElemTypes One of the TOML node or value types (or a type promotable to one). + /// \param val The node or value used to initialize element 0. + /// \param vals The nodes or values used to initialize elements 1...N. + TOML_CONSTRAINED_TEMPLATE((sizeof...(ElemTypes) > 0 || !std::is_same_v, array>), + typename ElemType, + typename... ElemTypes) + TOML_NODISCARD_CTOR + explicit array(ElemType&& val, ElemTypes&&... vals) + : array{ std::false_type{}, + std::initializer_list{ static_cast(val), + static_cast(vals)... } } + {} + + /// \brief Copy-assignment operator. + TOML_EXPORTED_MEMBER_FUNCTION + array& operator=(const array&); + + /// \brief Move-assignment operator. + TOML_EXPORTED_MEMBER_FUNCTION + array& operator=(array&& rhs) noexcept; + + /// \name Type checks + /// @{ + + /// \brief Returns #toml::node_type::array. + TOML_CONST_INLINE_GETTER + node_type type() const noexcept final + { + return node_type::array; + } + + TOML_PURE_GETTER + TOML_EXPORTED_MEMBER_FUNCTION + bool is_homogeneous(node_type ntype) const noexcept final; + + TOML_PURE_GETTER + TOML_EXPORTED_MEMBER_FUNCTION + bool is_homogeneous(node_type ntype, node*& first_nonmatch) noexcept final; + + TOML_PURE_GETTER + TOML_EXPORTED_MEMBER_FUNCTION + bool is_homogeneous(node_type ntype, const node*& first_nonmatch) const noexcept final; + + /// \cond + template + TOML_PURE_GETTER + bool is_homogeneous() const noexcept + { + using type = impl::remove_cvref>; + static_assert(std::is_void_v || toml::is_value || toml::is_container, + "The template type argument of array::is_homogeneous() must be void or one " + "of:" TOML_SA_UNWRAPPED_NODE_TYPE_LIST); + + return is_homogeneous(impl::node_type_of); + } + /// \endcond + + /// \brief Returns `false`. + TOML_CONST_INLINE_GETTER + bool is_table() const noexcept final + { + return false; + } + + /// \brief Returns `true`. + TOML_CONST_INLINE_GETTER + bool is_array() const noexcept final + { + return true; + } + + /// \brief Returns `true` if the array contains only tables. + TOML_PURE_GETTER + bool is_array_of_tables() const noexcept final + { + return is_homogeneous(node_type::table); + } + + /// \brief Returns `false`. + TOML_CONST_INLINE_GETTER + bool is_value() const noexcept final + { + return false; + } + + /// \brief Returns `false`. + TOML_CONST_INLINE_GETTER + bool is_string() const noexcept final + { + return false; + } + + /// \brief Returns `false`. + TOML_CONST_INLINE_GETTER + bool is_integer() const noexcept final + { + return false; + } + + /// \brief Returns `false`. + TOML_CONST_INLINE_GETTER + bool is_floating_point() const noexcept final + { + return false; + } + + /// \brief Returns `false`. + TOML_CONST_INLINE_GETTER + bool is_number() const noexcept final + { + return false; + } + + /// \brief Returns `false`. + TOML_CONST_INLINE_GETTER + bool is_boolean() const noexcept final + { + return false; + } + + /// \brief Returns `false`. + TOML_CONST_INLINE_GETTER + bool is_date() const noexcept final + { + return false; + } + + /// \brief Returns `false`. + TOML_CONST_INLINE_GETTER + bool is_time() const noexcept final + { + return false; + } + + /// \brief Returns `false`. + TOML_CONST_INLINE_GETTER + bool is_date_time() const noexcept final + { + return false; + } + + /// @} + + /// \name Type casts + /// @{ + + /// \brief Returns `nullptr`. + TOML_CONST_INLINE_GETTER + table* as_table() noexcept final + { + return nullptr; + } + + /// \brief Returns a pointer to the array. + TOML_CONST_INLINE_GETTER + array* as_array() noexcept final + { + return this; + } + + /// \brief Returns `nullptr`. + TOML_CONST_INLINE_GETTER + toml::value* as_string() noexcept final + { + return nullptr; + } + + /// \brief Returns `nullptr`. + TOML_CONST_INLINE_GETTER + toml::value* as_integer() noexcept final + { + return nullptr; + } + + /// \brief Returns `nullptr`. + TOML_CONST_INLINE_GETTER + toml::value* as_floating_point() noexcept final + { + return nullptr; + } + + /// \brief Returns `nullptr`. + TOML_CONST_INLINE_GETTER + toml::value* as_boolean() noexcept final + { + return nullptr; + } + + /// \brief Returns `nullptr`. + TOML_CONST_INLINE_GETTER + toml::value* as_date() noexcept final + { + return nullptr; + } + + /// \brief Returns `nullptr`. + TOML_CONST_INLINE_GETTER + toml::value