From 1d08b0100f56574c5900decfd5961130fba569dd Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Tue, 13 May 2014 16:06:05 +0100 Subject: [PATCH 01/11] Initial binlog prototype Supports pulling binlogs from the master, caching to a local file and relaying to a slave. Only tested with a single slave and a single MaxScale thread. --- server/core/dbusers.c | 2 + server/core/dcb.c | 187 ++++- server/core/session.c | 4 +- server/include/dcb.h | 48 +- server/modules/include/blr.h | 325 +++++++++ server/modules/protocol/mysql_backend.c | 24 +- server/modules/routing/Makefile | 6 + server/modules/routing/binlog/Makefile | 65 ++ server/modules/routing/binlog/README | 53 ++ server/modules/routing/binlog/STATUS | 18 + server/modules/routing/binlog/blr.c | 654 ++++++++++++++++++ server/modules/routing/binlog/blr_cache.c | 69 ++ server/modules/routing/binlog/blr_file.c | 282 ++++++++ server/modules/routing/binlog/blr_master.c | 654 ++++++++++++++++++ server/modules/routing/binlog/blr_slave.c | 767 +++++++++++++++++++++ 15 files changed, 3136 insertions(+), 22 deletions(-) create mode 100644 server/modules/include/blr.h create mode 100644 server/modules/routing/binlog/Makefile create mode 100644 server/modules/routing/binlog/README create mode 100644 server/modules/routing/binlog/STATUS create mode 100644 server/modules/routing/binlog/blr.c create mode 100644 server/modules/routing/binlog/blr_cache.c create mode 100644 server/modules/routing/binlog/blr_file.c create mode 100644 server/modules/routing/binlog/blr_master.c create mode 100644 server/modules/routing/binlog/blr_slave.c diff --git a/server/core/dbusers.c b/server/core/dbusers.c index e5289a3a0..da079b3f7 100644 --- a/server/core/dbusers.c +++ b/server/core/dbusers.c @@ -183,6 +183,8 @@ getUsers(SERVICE *service, struct users *users) } serviceGetUser(service, &service_user, &service_passwd); + if (service_user == NULL || service_passwd == NULL) + return -1; /** multi-thread environment requires that thread init succeeds. */ if (mysql_thread_init()) { diff --git a/server/core/dcb.c b/server/core/dcb.c index 7c648ccd6..5ac95e0db 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -47,6 +47,7 @@ * error and 0 bytes to read. * This fixes a bug with many reads from * backend + * 07/05/2014 Mark Riddoch Addition of callback mechanism * * @endverbatim */ @@ -80,6 +81,7 @@ static bool dcb_set_state_nomutex( DCB* dcb, const dcb_state_t new_state, dcb_state_t* old_state); +static void dcb_call_callback(DCB *dcb, DCB_REASON reason); DCB* dcb_get_zombies(void) { @@ -94,8 +96,8 @@ DCB* dcb_get_zombies(void) * * @return A newly allocated DCB or NULL if non could be allocated. */ -DCB * dcb_alloc( - dcb_role_t role) +DCB * +dcb_alloc(dcb_role_t role) { DCB *rval; @@ -118,11 +120,16 @@ DCB *rval; spinlock_init(&rval->writeqlock); spinlock_init(&rval->delayqlock); spinlock_init(&rval->authlock); + spinlock_init(&rval->cb_lock); rval->fd = -1; memset(&rval->stats, 0, sizeof(DCBSTATS)); // Zero the statistics rval->state = DCB_STATE_ALLOC; bitmask_init(&rval->memdata.bitmask); + rval->writeqlen = 0; + rval->high_water = 0; + rval->low_water = 0; rval->next = NULL; + rval->callbacks = NULL; spinlock_acquire(&dcbspin); if (allDCBs == NULL) @@ -676,9 +683,11 @@ return_n: int dcb_write(DCB *dcb, GWBUF *queue) { - int w; - int saved_errno = 0; +int w, qlen; +int saved_errno = 0; +int below_water; + below_water = (dcb->high_water && dcb->writeqlen < dcb->high_water) ? 1 : 0; ss_dassert(queue != NULL); if (queue == NULL || @@ -712,6 +721,8 @@ dcb_write(DCB *dcb, GWBUF *queue) * the routine that drains the queue data, so we should * not have a race condition on the event. */ + qlen = gwbuf_length(queue); + atomic_add(&dcb->writeqlen, qlen); dcb->writeq = gwbuf_append(dcb->writeq, queue); dcb->stats.n_buffered++; LOGIF(LD, (skygw_log_write( @@ -824,6 +835,8 @@ dcb_write(DCB *dcb, GWBUF *queue) * for suspended write. */ dcb->writeq = queue; + qlen = gwbuf_length(queue); + atomic_add(&dcb->writeqlen, qlen); if (queue != NULL) { @@ -847,6 +860,13 @@ dcb_write(DCB *dcb, GWBUF *queue) return 0; } spinlock_release(&dcb->writeqlock); + + if (dcb->high_water && dcb->writeqlen > dcb->high_water && below_water) + { + atomic_add(&dcb->stats.n_high_water, 1); + dcb_call_callback(dcb, DCB_REASON_HIGH_WATER); + } + return 1; } @@ -861,9 +881,12 @@ dcb_write(DCB *dcb, GWBUF *queue) int dcb_drain_writeq(DCB *dcb) { -int n = 0; -int w; -int saved_errno = 0; +int n = 0; +int w; +int saved_errno = 0; +int above_water; + + above_water = (dcb->low_water && dcb->writeqlen > dcb->low_water) ? 1 : 0; spinlock_acquire(&dcb->writeqlock); if (dcb->writeq) @@ -924,6 +947,17 @@ int saved_errno = 0; } } spinlock_release(&dcb->writeqlock); + atomic_add(&dcb->writeqlen, -n); + /* The write queue has drained, potentially need to call a callback function */ + if (dcb->writeq == NULL) + dcb_call_callback(dcb, DCB_REASON_DRAINED); + if (above_water && dcb->writeqlen < dcb->low_water) + { + atomic_add(&dcb->stats.n_low_water, 1); + dcb_call_callback(dcb, DCB_REASON_LOW_WATER); + } + + return n; } @@ -966,6 +1000,8 @@ dcb_close(DCB *dcb) ss_dassert(dcb->state == DCB_STATE_NOPOLLING || dcb->state == DCB_STATE_ZOMBIE); + dcb_call_callback(dcb, DCB_REASON_CLOSE); + if (rc == 0) { LOGIF(LD, (skygw_log_write( LOGFILE_DEBUG, @@ -1008,6 +1044,8 @@ printDCB(DCB *dcb) printf("\t\tNo. of Writes: %d\n", dcb->stats.n_writes); printf("\t\tNo. of Buffered Writes: %d\n", dcb->stats.n_buffered); printf("\t\tNo. of Accepts: %d\n", dcb->stats.n_accepts); + printf("\t\tNo. of High Water Events: %d\n", dcb->stats.n_high_water); + printf("\t\tNo. of Low Water Events: %d\n", dcb->stats.n_low_water); } /** @@ -1054,6 +1092,8 @@ DCB *dcb; dcb_printf(pdcb, "\t\tNo. of Writes: %d\n", dcb->stats.n_writes); dcb_printf(pdcb, "\t\tNo. of Buffered Writes: %d\n", dcb->stats.n_buffered); dcb_printf(pdcb, "\t\tNo. of Accepts: %d\n", dcb->stats.n_accepts); + dcb_printf(pdcb, "\t\tNo. of High Water Events: %d\n", dcb->stats.n_high_water); + dcb_printf(pdcb, "\t\tNo. of Low Water Events: %d\n", dcb->stats.n_low_water); dcb = dcb->next; } spinlock_release(&dcbspin); @@ -1079,6 +1119,8 @@ dprintDCB(DCB *pdcb, DCB *dcb) dcb_printf(pdcb, "\t\tNo. of Writes: %d\n", dcb->stats.n_writes); dcb_printf(pdcb, "\t\tNo. of Buffered Writes: %d\n", dcb->stats.n_buffered); dcb_printf(pdcb, "\t\tNo. of Accepts: %d\n", dcb->stats.n_accepts); + dcb_printf(pdcb, "\t\tNo. of High Water Events: %d\n", dcb->stats.n_high_water); + dcb_printf(pdcb, "\t\tNo. of Low Water Events: %d\n", dcb->stats.n_low_water); } /** @@ -1415,4 +1457,135 @@ int gw_write( return w; } +/** + * Add a callback + * + * Duplicate registrations are not allowed, therefore an error will be returned if + * the specific function, reason and userdata triple are already registered. + * An error will also be returned if the is insufficient memeory available to + * create the registration. + * + * @param dcb The DCB to add the callback to + * @param reason The callback reason + * @param cb The callback function to call + * @param userdata User data to send in the call + * @return Non-zero (true) if the callback was added + */ +int +dcb_add_callback(DCB *dcb, DCB_REASON reason, int (*callback)(struct dcb *, DCB_REASON, void *), void *userdata) +{ +DCB_CALLBACK *cb, *ptr; +int rval = 1; + if ((ptr = (DCB_CALLBACK *)malloc(sizeof(DCB_CALLBACK))) == NULL) + { + return 0; + } + ptr->reason = reason; + ptr->cb = callback; + ptr->userdata = userdata; + ptr->next = NULL; + spinlock_acquire(&dcb->cb_lock); + cb = dcb->callbacks; + if (cb == NULL) + { + dcb->callbacks = ptr; + spinlock_release(&dcb->cb_lock); + } + else + { + while (cb) + { + if (cb->reason == reason && cb->cb == callback && + cb->userdata == userdata) + { + free(ptr); + spinlock_release(&dcb->cb_lock); + return 0; + } + if (cb->next == NULL) + cb->next = ptr; + cb = cb->next; + } + spinlock_release(&dcb->cb_lock); + } + return rval; +} + +/** + * Remove a callback from the callback list for the DCB + * + * Searches down the linked list to find he callback with a matching reason, function + * and userdata. + * + * @param dcb The DCB to add the callback to + * @param reason The callback reason + * @param cb The callback function to call + * @param userdata User data to send in the call + * @return Non-zero (true) if the callback was removed + */ +int +dcb_remove_callback(DCB *dcb, DCB_REASON reason, int (*callback)(struct dcb *, DCB_REASON), void *userdata) +{ +DCB_CALLBACK *cb, *pcb = NULL; +int rval = 0; + + spinlock_acquire(&dcb->cb_lock); + cb = dcb->callbacks; + if (cb == NULL) + { + rval = 0; + } + else + { + while (cb) + { + if (cb->reason == reason && cb->cb == callback + && cb->userdata == userdata) + { + if (pcb == NULL) + pcb->next = cb->next; + else + dcb->callbacks = cb->next; + spinlock_release(&dcb->cb_lock); + free(cb); + rval = 1; + break; + } + pcb = cb; + cb = cb->next; + } + } + if (!rval) + spinlock_release(&dcb->cb_lock); + return rval; +} + +/** + * Call the set of callbacks registered for a particular reason. + * + * @param dcb The DCB to call the callbacks regarding + * @param reason The reason that has triggered the call + */ +static void +dcb_call_callback(DCB *dcb, DCB_REASON reason) +{ +DCB_CALLBACK *cb, *nextcb; + + spinlock_acquire(&dcb->cb_lock); + cb = dcb->callbacks; + while (cb) + { + if (cb->reason == reason) + { + nextcb = cb->next; + spinlock_release(&dcb->cb_lock); + cb->cb(dcb, reason, cb->userdata); + spinlock_acquire(&dcb->cb_lock); + cb = nextcb; + } + else + cb = cb->next; + } + spinlock_release(&dcb->cb_lock); +} diff --git a/server/core/session.c b/server/core/session.c index 062c63f27..1e0d49771 100644 --- a/server/core/session.c +++ b/server/core/session.c @@ -114,7 +114,7 @@ session_alloc(SERVICE *service, DCB *client_dcb) /* * Only create a router session if we are not the listening - * DCB. Creating a router session may create a connection to a + * DCB or an internal DCB. Creating a router session may create a connection to a * backend server, depending upon the router module implementation * and should be avoided for the listener session * @@ -122,7 +122,7 @@ session_alloc(SERVICE *service, DCB *client_dcb) * session, therefore it is important that the session lock is * relinquished beforethe router call. */ - if (client_dcb->state != DCB_STATE_LISTENING) + if (client_dcb->state != DCB_STATE_LISTENING && client_dcb->dcb_role != DCB_ROLE_INTERNAL) { session->router_session = service->router->newSession(service->router_instance, diff --git a/server/include/dcb.h b/server/include/dcb.h index 9ca60e004..625ae6026 100644 --- a/server/include/dcb.h +++ b/server/include/dcb.h @@ -48,6 +48,8 @@ struct service; * 15/07/2013 Massimiliano Pinto Added session entry point * 16/07/2013 Massimiliano Pinto Added command type for dcb * 07/02/2014 Massimiliano Pinto Added ipv4 data struct into for dcb + * 07/05/2014 Mark Riddoch Addition of callback mechanism + * 08/05/2014 Mark Riddoch Addition of writeq high and low watermarks * * @endverbatim */ @@ -99,6 +101,8 @@ typedef struct dcbstats { int n_writes; /*< Number of writes on this descriptor */ int n_accepts; /*< Number of accepts on this descriptor */ int n_buffered; /*< Number of buffered writes */ + int n_high_water; /*< Number of crosses of high water mark */ + int n_low_water; /*< Number of crosses of low water mark */ } DCBSTATS; /** @@ -137,10 +141,35 @@ typedef enum { } dcb_state_t; typedef enum { - DCB_ROLE_SERVICE_LISTENER, /*< Receives initial connect requests from clients */ - DCB_ROLE_REQUEST_HANDLER /*< Serves dedicated client */ + DCB_ROLE_SERVICE_LISTENER, /*< Receives initial connect requests from clients */ + DCB_ROLE_REQUEST_HANDLER, /*< Serves dedicated client */ + DCB_ROLE_INTERNAL /*< Internal DCB not connected to the outside */ } dcb_role_t; +/** + * Callback reasons for the DCB callback mechanism. + */ +typedef enum { + DCB_REASON_CLOSE, /*< The DCB is closing */ + DCB_REASON_DRAINED, /*< The write delay queue has drained */ + DCB_REASON_HIGH_WATER, /*< Cross high water mark */ + DCB_REASON_LOW_WATER, /*< Cross low water mark */ + DCB_REASON_ERROR, /*< An error was flagged on the connection */ + DCB_REASON_HUP /*< A hangup was detected */ +} DCB_REASON; + +/** + * Callback structure - used to track callbacks registered on a DCB + */ +typedef struct dcb_callback { + DCB_REASON reason; /*< The reason for the callback */ + int (*cb)(struct dcb *dcb, DCB_REASON reason, void *userdata); + void *userdata; /*< User data to be sent in the callback */ + struct dcb_callback + *next; /*< Next callback for this DCB */ +} DCB_CALLBACK; + + /** * Descriptor Control Block * @@ -172,6 +201,7 @@ typedef struct dcb { struct session *session; /**< The owning session */ GWPROTOCOL func; /**< The functions for this descriptor */ + unsigned int writeqlen; /**< Current number of byes in the write queue */ SPINLOCK writeqlock; /**< Write Queue spinlock */ GWBUF *writeq; /**< Write Data Queue */ SPINLOCK delayqlock; /**< Delay Backend Write Queue spinlock */ @@ -185,6 +215,11 @@ typedef struct dcb { void *data; /**< Specific client data */ DCBMM memdata; /**< The data related to DCB memory management */ int command; /**< Specific client command type */ + SPINLOCK cb_lock; /**< The lock for the callbacks linked list */ + DCB_CALLBACK *callbacks; /**< The list of callbacks for the DCB */ + + unsigned int high_water; /**< High water mark */ + unsigned int low_water; /**< Low water mark */ #if defined(SS_DEBUG) skygw_chk_t dcb_chk_tail; #endif @@ -203,6 +238,11 @@ int fail_accept_errno; #define DCB_SESSION(x) (x)->session #define DCB_PROTOCOL(x, type) (type *)((x)->protocol) #define DCB_ISZOMBIE(x) ((x)->state == DCB_STATE_ZOMBIE) +#define DCB_WRITEQLEN(x) (x)->writeqlen +#define DCB_SET_LOW_WATER(x, lo) (x)->low_water = (lo); +#define DCB_SET_HIGH_WATER(x, hi) (x)->low_water = (hi); +#define DCB_BELOW_LOW_WATER(x) ((x)->low_water && (x)->writeqlen < (x)->low_water) +#define DCB_ABOVE_HIGH_WATER(x) ((x)->high_water && (x)->writeqlen > (x)->high_water) DCB *dcb_get_zombies(void); int gw_write( @@ -229,6 +269,10 @@ void dcb_printf(DCB *, const char *, ...); /* DCB version of printf */ int dcb_isclient(DCB *); /* the DCB is the client of the session */ void dcb_hashtable_stats(DCB *, void *); /**< Print statisitics */ void dcb_add_to_zombieslist(DCB* dcb); +int dcb_add_callback(DCB *, DCB_REASON, int (*)(struct dcb *, DCB_REASON, void *), + void *); +int dcb_remove_callback(DCB *, DCB_REASON, int (*)(struct dcb *, DCB_REASON), + void *); bool dcb_set_state( DCB* dcb, diff --git a/server/modules/include/blr.h b/server/modules/include/blr.h new file mode 100644 index 000000000..47dc77fad --- /dev/null +++ b/server/modules/include/blr.h @@ -0,0 +1,325 @@ +#ifndef _BLR_H +#define _BLR_H +/* + * This file is distributed as part of MaxScale. It is free + * software: you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation, + * version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Copyright SkySQL Ab 2014 + */ + +/** + * @file blr.h - The binlog router header file + * + * @verbatim + * Revision History + * + * Date Who Description + * 02/04/14 Mark Riddoch Initial implementation + * + * @endverbatim + */ +#include +#include + +#define BINLOG_FNAMELEN 16 +#define BLR_PROTOCOL "MySQLBackend" +#define BINLOG_MAGIC { 0xfe, 0x62, 0x69, 0x6e } +#define BINLOG_NAMEFMT "mysql-bin.%06d" + +/** + * High and Low water marks for the slave dcb. These values can be overriden + * by the router options highwater and lowwater. + */ +#define DEF_LOW_WATER 20000 +#define DEF_HIGH_WATER 100000 + +/** + * Some useful macros for examining the MySQL Response packets + */ +#define MYSQL_RESPONSE_OK(buf) (*((uint8_t *)GWBUF_DATA(buf) + 4) == 0x00) +#define MYSQL_RESPONSE_EOF(buf) (*((uint8_t *)GWBUF_DATA(buf) + 4) == 0xfe) +#define MYSQL_RESPONSE_ERR(buf) (*((uint8_t *)GWBUF_DATA(buf) + 4) == 0xff) +#define MYSQL_ERROR_CODE(buf) (*((uint8_t *)GWBUF_DATA(buf) + 5)) +#define MYSQL_ERROR_MSG(buf) ((uint8_t *)GWBUF_DATA(buf) + 6) +#define MYSQL_COMMAND(buf) (*((uint8_t *)GWBUF_DATA(buf) + 4)) + +/** + * Slave statistics + */ +typedef struct { + unsigned int n_events; /*< Number of events sent */ + unsigned int n_bursts; /*< Number of bursts sent */ + unsigned int n_requests; /*< Number of requests received */ + unsigned int n_flows; /*< Number of flow control restarts */ +} SLAVE_STATS; + +/** + * The client session structure used within this router. This represents + * the slaves that are replicating binlogs from MaxScale. + */ +typedef struct router_slave { +#if defined(SS_DEBUG) + skygw_chk_t rses_chk_top; +#endif + DCB *dcb; /*< The slave server DCB */ + int state; /*< The state of this slave */ + int binlog_pos; /*< Binlog position for this slave */ + char binlogfile[BINLOG_FNAMELEN+1]; + /*< Current binlog file for this slave */ + int serverid; /*< Server-id of the slave */ + char *hostname; /*< Hostname of the slave, if known */ + char *user; /*< Username if given */ + char *passwd; /*< Password if given */ + short port; /*< MySQL port */ + uint32_t rank; /*< Replication rank */ + uint8_t seqno; /*< Replication dump sequence no */ + SPINLOCK catch_lock; /*< Event catchup lock */ + unsigned int cstate; /*< Catch up state */ + SPINLOCK rses_lock; /*< Protects rses_deleted */ + struct router_instance + *router; /*< Pointer to the owning router */ + struct router_slave *next; + SLAVE_STATS stats; /*< Slave statistics */ +#if defined(SS_DEBUG) + skygw_chk_t rses_chk_tail; +#endif +} ROUTER_SLAVE; + + +/** + * The statistics for this router instance + */ +typedef struct { + unsigned int n_slaves; /*< Number slave sessions created */ + unsigned int n_reads; /*< Number of record reads */ + uint64_t n_binlogs; /*< Number of binlog records from master */ + uint64_t n_binlog_errors;/*< Number of binlog records from master */ + uint64_t n_rotates; /*< Number of binlog rotate events */ + uint64_t n_cachehits; /*< Number of hits on the binlog cache */ + uint64_t n_cachemisses; /*< Number of misses on the binlog cache */ + unsigned int n_registered; /*< Number of registered slaves */ + uint64_t n_fakeevents; /*< Fake events not written to disk */ + uint64_t events[0x24]; /*< Per event counters */ +} ROUTER_STATS; + +/** + * Saved responses from the master that will be forwarded to slaves + */ +typedef struct { + GWBUF *server_id; /*< Master server id */ + GWBUF *heartbeat; /*< Heartbeat period */ + GWBUF *chksum1; /*< Binlog checksum 1st response */ + GWBUF *chksum2; /*< Binlog checksum 2nd response */ + GWBUF *gtid_mode; /*< GTID Mode response */ + GWBUF *uuid; /*< Master UUID */ + GWBUF *setslaveuuid; /*< Set Slave UUID */ + GWBUF *setnames; /*< Set NAMES latin1 */ + uint8_t *fde_event; /*< Format Description Event */ + int fde_len; /*< Length of fde_event */ +} MASTER_RESPONSES; + +/** + * The binlog record structure. This contains the actual packet received from the + * master, the binlog position of the data in the packet, a point to the data and + * the length of the binlog record. + * + * This allows requests for binlog records in the cache to be serviced by simply + * sending the exact same packet as was received by MaxScale from the master. + * Items are written to the backing file as soon as they are received. The binlog + * cache is flushed of old records periodically, releasing the GWBUF's back to the + * free memory pool. + */ +typedef struct { + unsigned long position; /*< binlog record position for this cache entry */ + GWBUF *pkt; /*< The packet received from the master */ + unsigned char *data; /*< Pointer to the data within the packet */ + unsigned int record_len; /*< Binlog record length */ +} BLCACHE_RECORD; + +/** + * The binlog cache. A cache exists for each file that hold cached bin log records. + * Typically the router will hold two binlog caches, one for the current file and one + * for the previous file. + */ +typedef struct { + char filename[BINLOG_FNAMELEN+1]; + BLCACHE_RECORD *first; + BLCACHE_RECORD *current; + int cnt; +} BLCACHE; + + +/** + * The per instance data for the router. + */ +typedef struct router_instance { + SERVICE *service; /*< Pointer to the service using this router */ + ROUTER_SLAVE *slaves; /*< Link list of all the slave connections */ + SPINLOCK lock; /*< Spinlock for the instance data */ + char *uuid; /*< UUID for the router to use w/master */ + int masterid; /*< Server ID of the master */ + int serverid; /*< Server ID to use with master */ + char *user; /*< User name to use with master */ + char *password; /*< Password to use with master */ + DCB *master; /*< DCB for master connection */ + SESSION *session; /*< Fake session for master connection */ + unsigned int master_state; /*< State of the master FSM */ + GWBUF *residual; /*< Any residual binlog event */ + MASTER_RESPONSES saved_master; /*< Saved master responses */ + char binlog_name[BINLOG_FNAMELEN+1]; + /*< Name of the current binlog file */ + uint64_t binlog_position; + /*< Current binlog position */ + int binlog_fd; /*< File descriptor of the binlog + * file being written + */ + unsigned int low_water; /*< Low water mark for client DCB */ + unsigned int high_water; /*< High water mark for client DCB */ + BLCACHE *cache[2]; + ROUTER_STATS stats; /*< Statistics for this router */ + int active_logs; + struct router_instance + *next; +} ROUTER_INSTANCE; + +/** + * Packet header for replication messages + */ +typedef struct rep_header { + int payload_len; /*< Payload length (24 bits) */ + uint8_t seqno; /*< Response sequence number */ + uint8_t ok; /*< OK Byte from packet */ + uint32_t timestamp; /*< Timestamp - start of binlog record */ + uint8_t event_type; /*< Binlog event type */ + uint32_t serverid; /*< Server id of master */ + uint32_t event_size; /*< Size of header, post-header and body */ + uint32_t next_pos; /*< Position of next event */ + uint16_t flags; /*< Event flags */ +} REP_HEADER; + +/** + * State machine for the master to MaxScale replication + */ +#define BLRM_UNCONNECTED 0x0000 +#define BLRM_AUTHENTICATED 0x0001 +#define BLRM_TIMESTAMP 0x0002 +#define BLRM_SERVERID 0x0003 +#define BLRM_HBPERIOD 0x0004 +#define BLRM_CHKSUM1 0x0005 +#define BLRM_CHKSUM2 0x0006 +#define BLRM_GTIDMODE 0x0007 +#define BLRM_MUUID 0x0008 +#define BLRM_SUUID 0x0009 +#define BLRM_LATIN1 0x000A +#define BLRM_REGISTER 0x000B +#define BLRM_BINLOGDUMP 0x000C + +#define BLRM_MAXSTATE 0x000C + +static char *blrm_states[] = { "Unconnected", "Authenticated", "Timestamp retrieval", + "Server ID retrieval", "HeartBeat Period setup", "binlog checksum config", + "binlog checksum rerieval", "GTID Mode retrieval", "Master UUID retrieval", + "Set Slave UUID", "Set Names", "Register slave", "Binlog Dump" }; + +#define BLRS_CREATED 0x0000 +#define BLRS_UNREGISTERED 0x0001 +#define BLRS_REGISTERED 0x0002 +#define BLRS_DUMPING 0x0003 + +#define BLRS_MAXSTATE 0x0003 + +static char *blrs_states[] = { "Created", "Unregistered", "Registered", + "Sending binlogs" }; + +/** + * Slave catch-up status + */ +#define CS_READING 0x0001 +#define CS_INNERLOOP 0x0002 + +/** + * MySQL protocol OpCodes needed for replication + */ +#define COM_QUERY 0x03 +#define COM_REGISTER_SLAVE 0x15 +#define COM_BINLOG_DUMP 0x12 + +/** + * Binlog event types + */ +#define START_EVENT_V3 0x01 +#define QUERY_EVENT 0x02 +#define STOP_EVENT 0x03 +#define ROTATE_EVENT 0x04 +#define INTVAR_EVENT 0x05 +#define LOAD_EVENT 0x06 +#define SLAVE_EVENT 0x07 +#define CREATE_FILE_EVENT 0x08 +#define APPEND_BLOCK_EVENT 0x09 +#define EXEC_LOAD_EVENT 0x0A +#define DELETE_FILE_EVENT 0x0B +#define NEW_LOAD_EVENT 0x0C +#define RAND_EVENT 0x0D +#define USER_VAR_EVENT 0x0E +#define FORMAT_DESCRIPTION_EVENT 0x0F +#define XID_EVENT 0x10 +#define BEGIN_LOAD_QUERY_EVENT 0x11 +#define EXECUTE_LOAD_QUERY_EVENT 0x12 +#define TABLE_MAP_EVENT 0x13 +#define WRITE_ROWS_EVENTv0 0x14 +#define UPDATE_ROWS_EVENTv0 0x15 +#define DELETE_ROWS_EVENTv0 0x16 +#define WRITE_ROWS_EVENTv1 0x17 +#define UPDATE_ROWS_EVENTv1 0x18 +#define DELETE_ROWS_EVENTv1 0x19 +#define INCIDENT_EVENT 0x1A +#define HEARTBEAT_EVENT 0x1B +#define IGNORABLE_EVENT 0x1C +#define ROWS_QUERY_EVENT 0x1D +#define WRITE_ROWS_EVENTv2 0x1E +#define UPDATE_ROWS_EVENTv2 0x1F +#define DELETE_ROWS_EVENTv2 0x20 +#define GTID_EVENT 0x21 +#define ANONYMOUS_GTID_EVENT 0x22 +#define PREVIOUS_GTIDS_EVENT 0x23 + +/** + * Binlog event flags + */ +#define LOG_EVENT_BINLOG_IN_USE_F 0x0001 +#define LOG_EVENT_FORCED_ROTATE_F 0x0002 +#define LOG_EVENT_THREAD_SPECIFIC_F 0x0004 +#define LOG_EVENT_SUPPRESS_USE_F 0x0008 +#define LOG_EVENT_UPDATE_TABLE_MAP_VERSION_F 0x0010 +#define LOG_EVENT_ARTIFICIAL_F 0x0020 +#define LOG_EVENT_RELAY_LOG_F 0x0040 +#define LOG_EVENT_IGNORABLE_F 0x0080 +#define LOG_EVENT_NO_FILTER_F 0x0100 +#define LOG_EVENT_MTS_ISOLATE_F 0x0200 + +/* + * Externals within the router + */ +extern void blr_start_master(ROUTER_INSTANCE *); +extern void blr_master_response(ROUTER_INSTANCE *, GWBUF *); + +extern int blr_slave_request(ROUTER_INSTANCE *, ROUTER_SLAVE *, GWBUF *); + +extern void blr_init_cache(ROUTER_INSTANCE *); + +extern void blr_file_init(ROUTER_INSTANCE *); +extern void blr_write_binlog_record(ROUTER_INSTANCE *, REP_HEADER *,uint8_t *); +extern void blr_file_rotate(ROUTER_INSTANCE *, char *, uint64_t); +extern GWBUF *blr_read_binlog(int, unsigned int, REP_HEADER *); +#endif diff --git a/server/modules/protocol/mysql_backend.c b/server/modules/protocol/mysql_backend.c index acc2dacdd..f1774485d 100644 --- a/server/modules/protocol/mysql_backend.c +++ b/server/modules/protocol/mysql_backend.c @@ -414,21 +414,23 @@ static int gw_read_backend_event(DCB *dcb) { if (dcb->session->client != NULL) { client_protocol = SESSION_PROTOCOL(dcb->session, MySQLProtocol); - } - - if (client_protocol != NULL) { - CHK_PROTOCOL(client_protocol); + if (client_protocol != NULL) { + CHK_PROTOCOL(client_protocol); - if (client_protocol->state == MYSQL_IDLE) - { - router->clientReply(router_instance, + if (client_protocol->state == MYSQL_IDLE) + { + router->clientReply(router_instance, rsession, writebuf, dcb); - rc = 1; - } - goto return_rc; - } + rc = 1; + } + goto return_rc; + } else if (dcb->session->client->dcb_role == DCB_ROLE_INTERNAL) { + router->clientReply(router_instance, rsession, writebuf, dcb); + rc = 1; + } + } } return_rc: diff --git a/server/modules/routing/Makefile b/server/modules/routing/Makefile index c07b7b438..8bbc45c3b 100644 --- a/server/modules/routing/Makefile +++ b/server/modules/routing/Makefile @@ -49,6 +49,8 @@ MODULES= libdebugcli.so libreadconnroute.so libtestroute.so all: $(MODULES) + (cd readwritesplit; make ) + (cd binlog; make ) libtestroute.so: $(TESTOBJ) $(CC) $(LDFLAGS) $(TESTOBJ) $(LIBS) -o $@ @@ -68,18 +70,22 @@ libreadwritesplit.so: clean: rm -f $(OBJ) $(MODULES) (cd readwritesplit; touch depend.mk; make clean) + (cd binlog; touch depend.mk; make clean) tags: ctags $(SRCS) $(HDRS) (cd readwritesplit; make tags) + (cd binlog; make tags) depend: @rm -f depend.mk cc -M $(CFLAGS) $(SRCS) > depend.mk (cd readwritesplit; touch depend.mk ; make depend) + (cd binlog; touch depend.mk ; make depend) install: $(MODULES) install -D $(MODULES) $(DEST)/MaxScale/modules (cd readwritesplit; make DEST=$(DEST) install) + (cd binlog; make DEST=$(DEST) install) include depend.mk diff --git a/server/modules/routing/binlog/Makefile b/server/modules/routing/binlog/Makefile new file mode 100644 index 000000000..6e9282ea1 --- /dev/null +++ b/server/modules/routing/binlog/Makefile @@ -0,0 +1,65 @@ +# This file is distributed as part of the SkySQL Gateway. It is free +# software: you can redistribute it and/or modify it under the terms of the +# GNU General Public License as published by the Free Software Foundation, +# version 2. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 51 +# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Copyright SkySQL Ab 2013 +# +# Revision History +# Date Who Description +# 2/04/14 Mark Riddoch Initial framework put in place + +include ../../../../build_gateway.inc + +LOGPATH := $(ROOT_PATH)/log_manager +UTILSPATH := $(ROOT_PATH)/utils +QCLASSPATH := $(ROOT_PATH)/query_classifier + +CC=cc +CFLAGS=-c -fPIC -I/usr/include -I../../include -I../../../include \ + -I$(LOGPATH) -I$(UTILSPATH) -I$(QCLASSPATH) \ + $(MYSQL_HEADERS) -Wall -g + +include ../../../../makefile.inc + +LDFLAGS=-shared -L$(LOGPATH) -L$(QCLASSPATH) -L$(EMBEDDED_LIB) \ + -Wl,-rpath,$(DEST)/lib \ + -Wl,-rpath,$(LOGPATH) -Wl,-rpath,$(UTILSPATH) -Wl,-rpath,$(QCLASSPATH) \ + -Wl,-rpath,$(EMBEDDED_LIB) + +SRCS=blr.c blr_master.c blr_cache.c blr_slave.c blr_file.c +OBJ=$(SRCS:.c=.o) +LIBS=-lssl -pthread -llog_manager -lmysqld +MODULES=libbinlogrouter.so + +all: $(MODULES) + +$(MODULES): $(OBJ) + $(CC) $(LDFLAGS) $(OBJ) $(UTILSPATH)/skygw_utils.o $(LIBS) -o $@ + +.c.o: + $(CC) $(CFLAGS) $< -o $@ + +clean: + rm -f $(OBJ) $(MODULES) + +tags: + ctags $(SRCS) $(HDRS) + +depend: + @rm -f depend.mk + cc -M $(CFLAGS) $(SRCS) > depend.mk + +install: $(MODULES) + install -D $(MODULES) $(DEST)/MaxScale/modules + +include depend.mk diff --git a/server/modules/routing/binlog/README b/server/modules/routing/binlog/README new file mode 100644 index 000000000..514b48341 --- /dev/null +++ b/server/modules/routing/binlog/README @@ -0,0 +1,53 @@ +The binlog router is not a "normal" MaxScale router, it is not +designed to be used to route client requests to a database in the +usual proxy fashion. Rather it is designed to allow MaxScale to be +used as a relay server in a MySQL replication environment. + +In this environment MaxScale sits between a master MySQL server and +a set of slave servers. The slaves servers execute a change master +to the MaxScale server, otehrwise they are configured in exactly +the same way as a normal MySQL slave server. + +The master server configuration is unaltered, it simply sees a +single slave server. + +MaxScale is configured as usual, with a service definition that +references the binlog router. The major configuration option to +consider is the router_options paramter, in the binlog router this +provides the binlog specific configuration parameters. + + uuid= + This is the UUID that MaxScale uses when it connects + to the real master. It will report the master's + UUID to slaves that connect to it. + + server-id= + The server-id that MaxScale uses when it connects + to the real master server. Again it will reports + the master's server-id to the slaves that connect + to it. + user= + The user that MaxScale uses to login to the real + master + password= + The password that MaxScale uses to login to the + real master + master-id= + The server-id of the real master. MaxScale should + get this by sending a query, but at the moment it + is in the configuration file for ease of implementation + + +An example binlog service configuration is shown below: + +[Binlog Service] +type=service +router=binlogrouter +servers=master +router_options=uuid=f12fcb7f-b97b-11e3-bc5e-0401152c4c22,server-id=3,user=repl,password=slavepass,master-id=1 +user=maxscale +passwd=Mhu87p2D + +The servers list for a binlog router service should contain just +the master server. In future a list will be given and the monitor +used to determine which server is the current master server. diff --git a/server/modules/routing/binlog/STATUS b/server/modules/routing/binlog/STATUS new file mode 100644 index 000000000..bd981306b --- /dev/null +++ b/server/modules/routing/binlog/STATUS @@ -0,0 +1,18 @@ +The binlog router contained here is a prototype implementation and +should not be consider as production ready. + +The router has been written and tested with MySQL 5.6 as a reference +for the replication behaviour, more investigation and implementation +is likely to be needed in order to use other versions of MySQL, +MariaDB or Percona Server. + +To Do List: + +1. Thread safety needs to be examine, currently MaxScale has been +run with a single thread when testing this router. + +2. Binlog rotate events have yet to be tested. + +3. The router does not implement the replication heartbeat mechanism. + +4. Performance measurements have yet to be made. diff --git a/server/modules/routing/binlog/blr.c b/server/modules/routing/binlog/blr.c new file mode 100644 index 000000000..005f360dc --- /dev/null +++ b/server/modules/routing/binlog/blr.c @@ -0,0 +1,654 @@ +/* + * This file is distributed as part of MaxScale. It is free + * software: you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation, + * version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Copyright SkySQL Ab 2014 + */ + +/** + * @file blr.c - binlog router, allows MaxScale to act as an intermediatory for replication + * + * The binlog router is designed to be used in replication environments to + * increase the replication fanout of a master server. It provides a transparant + * mechanism to read the binlog entries for multiple slaves while requiring + * only a single connection to the actual master to support the slaves. + * + * The current prototype implement is designed to support MySQL 5.6 and has + * a number of limitations. This prototype is merely a proof of concept and + * should not be considered production ready. + * + * @verbatim + * Revision History + * + * Date Who Description + * 02/04/2014 Mark Riddoch Initial implementation + * + * @endverbatim + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +extern int lm_enabled_logfiles_bitmask; + +static char *version_str = "V1.0.0"; + +/* The router entry points */ +static ROUTER *createInstance(SERVICE *service, char **options); +static void *newSession(ROUTER *instance, SESSION *session); +static void closeSession(ROUTER *instance, void *router_session); +static void freeSession(ROUTER *instance, void *router_session); +static int routeQuery(ROUTER *instance, void *router_session, GWBUF *queue); +static void diagnostics(ROUTER *instance, DCB *dcb); +static void clientReply( + ROUTER *instance, + void *router_session, + GWBUF *queue, + DCB *backend_dcb); +static void errorReply( + ROUTER *instance, + void *router_session, + char *message, + DCB *backend_dcb, + int action); +static uint8_t getCapabilities (ROUTER* inst, void* router_session); + + +/** The module object definition */ +static ROUTER_OBJECT MyObject = { + createInstance, + newSession, + closeSession, + freeSession, + routeQuery, + diagnostics, + clientReply, + errorReply, + getCapabilities +}; + +static bool rses_begin_locked_router_action(ROUTER_SLAVE *); +static void rses_end_locked_router_action(ROUTER_SLAVE *); + +static SPINLOCK instlock; +static ROUTER_INSTANCE *instances; + +/** + * Implementation of the mandatory version entry point + * + * @return version string of the module + */ +char * +version() +{ + return version_str; +} + +/** + * The module initialisation routine, called when the module + * is first loaded. + */ +void +ModuleInit() +{ + LOGIF(LM, (skygw_log_write( + LOGFILE_MESSAGE, + "Initialise binlog router module %s.\n", version_str))); + spinlock_init(&instlock); + instances = NULL; +} + +/** + * The module entry point routine. It is this routine that + * must populate the structure that is referred to as the + * "module object", this is a structure with the set of + * external entry points for this module. + * + * @return The module object + */ +ROUTER_OBJECT * +GetModuleObject() +{ + return &MyObject; +} + +/** + * Create an instance of the router for a particular service + * within MaxScale. + * + * The process of creating the instance causes the router to register + * with the master server and begin replication of the binlogs from + * the master server to MaxScale. + * + * @param service The service this router is being create for + * @param options An array of options for this query router + * + * @return The instance data for this new instance + */ +static ROUTER * +createInstance(SERVICE *service, char **options) +{ +ROUTER_INSTANCE *inst; +char *value; +int i; + + if ((inst = calloc(1, sizeof(ROUTER_INSTANCE))) == NULL) { + return NULL; + } + + memset(&inst->stats, 0, sizeof(ROUTER_STATS)); + memset(&inst->saved_master, 0, sizeof(MASTER_RESPONSES)); + + inst->service = service; + spinlock_init(&inst->lock); + + inst->low_water = DEF_LOW_WATER; + inst->high_water = DEF_HIGH_WATER; + + /* + * We only support one server behind this router, since the server is + * the master from which we replicate binlog records. Therefore check + * that only one server has been defined. + * + * A later improvement will be to define multiple servers and have the + * router use the information that is supplied by the monitor to find + * which of these servers is currently the master and replicate from + * that server. + */ + if (service->databases == NULL || service->databases->nextdb != NULL) + { + LOGIF(LE, (skygw_log_write( + LOGFILE_ERROR, + "Error : Exactly one database server may be " + "for use with the binlog router."))); + } + + + /* + * Process the options. + * We have an array of attrbute values passed to us that we must + * examine. Supported attributes are: + * uuid= + * server-id= + * user= + * password= + * master-id= + */ + if (options) + { + for (i = 0; options[i]; i++) + { + if ((value = strchr(options[i], '=')) == NULL) + { + LOGIF(LE, (skygw_log_write( + LOGFILE_ERROR, "Warning : Unsupported router " + "option %s for binlog router.", + options[i]))); + } + else + { + *value = 0; + value++; + if (strcmp(options[i], "uuid") == 0) + { + inst->uuid = strdup(value); + } + else if (strcmp(options[i], "server-id") == 0) + { + inst->serverid = atoi(value); + } + else if (strcmp(options[i], "user") == 0) + { + inst->user = strdup(value); + } + else if (strcmp(options[i], "password") == 0) + { + inst->password = strdup(value); + } + else if (strcmp(options[i], "master-id") == 0) + { + inst->masterid = atoi(value); + } + else if (strcmp(options[i], "lowwater") == 0) + { + inst->low_water = atoi(value); + } + else if (strcmp(options[i], "highwater") == 0) + { + inst->high_water = atoi(value); + } + else + { + LOGIF(LE, (skygw_log_write( + LOGFILE_ERROR, + "Warning : Unsupported router " + "option %s for binlog router.", + options[i]))); + } + } + } + } + + /* + * We have completed the creation of the instance data, so now + * insert this router instance into the linked list of routers + * that have been created with this module. + */ + spinlock_acquire(&instlock); + inst->next = instances; + instances = inst; + spinlock_release(&instlock); + + inst->active_logs = 0; + + /* + * Initialise the binlog file and position + */ + blr_file_init(inst); + LOGIF(LT, (skygw_log_write( + LOGFILE_TRACE, + "Binlog router: current binlog file is: %s, current position %u\n", + inst->binlog_name, inst->binlog_position))); + + /* + * Initialise the binlog cache for this router instance + */ + blr_init_cache(inst); + + /* + * Now start the replication from the master to MaxScale + */ + blr_start_master(inst); + + return (ROUTER *)inst; +} + +/** + * Associate a new session with this instance of the router. + * + * In the case of the binlog router a new session equates to a new slave + * connecting to MaxScale and requesting binlog records. We need to go + * through the slave registration process for this new slave. + * + * @param instance The router instance data + * @param session The session itself + * @return Session specific data for this session + */ +static void * +newSession(ROUTER *instance, SESSION *session) +{ +ROUTER_INSTANCE *inst = (ROUTER_INSTANCE *)instance; +ROUTER_SLAVE *slave; + + LOGIF(LD, (skygw_log_write_flush( + LOGFILE_DEBUG, + "binlog router: %lu [newSession] new router session with " + "session %p, and inst %p.", + pthread_self(), + session, + inst))); + + + if ((slave = (ROUTER_SLAVE *)calloc(1, sizeof(ROUTER_SLAVE))) == NULL) + { + LOGIF(LD, (skygw_log_write_flush( + LOGFILE_ERROR, + "Insufficient memory to create new slave session for binlog router"))); + return NULL; + } + +#if defined(SS_DEBUG) + slave->rses_chk_top = CHK_NUM_ROUTER_SES; + slave->rses_chk_tail = CHK_NUM_ROUTER_SES; +#endif + + memset(&slave->stats, 0, sizeof(SLAVE_STATS)); + atomic_add(&inst->stats.n_slaves, 1); + slave->state = BLRS_CREATED; /* Set initial state of the slave */ + slave->dcb = session->client; + slave->router = instance; + + /** + * Add this session to the list of active sessions. + */ + spinlock_acquire(&inst->lock); + slave->next = inst->slaves; + inst->slaves = slave; + spinlock_release(&inst->lock); + + CHK_CLIENT_RSES(slave); + + return (void *)slave; +} + +/** + * The session is no longer required. Shutdown all operation and free memory + * associated with this session. In this case a single session is associated + * to a slave of MaxScale. Therefore this is called when that slave is no + * longer active and should remove of reference to that slave, free memory + * and prevent any further forwarding of binlog records to that slave. + * + * Parameters: + * @param router_instance The instance of the router + * @param router_cli_ses The particular session to free + * + */ +static void freeSession( + ROUTER* router_instance, + void* router_client_ses) +{ +ROUTER_INSTANCE *router = (ROUTER_INSTANCE *)router_instance; +ROUTER_SLAVE *slave = (ROUTER_SLAVE *)router_client_ses; +int prev_val; + + prev_val = atomic_add(&router->stats.n_slaves, -1); + ss_dassert(prev_val > 0); + + /* + * Remove the slave session form the list of slaves that are using the + * router currently. + */ + spinlock_acquire(&router->lock); + if (router->slaves == slave) { + router->slaves = slave->next; + } else { + ROUTER_SLAVE *ptr = router->slaves; + + while (ptr != NULL && ptr->next != slave) { + ptr = ptr->next; + } + + if (ptr != NULL) { + ptr->next = slave->next; + } + } + spinlock_release(&router->lock); + + LOGIF(LD, (skygw_log_write_flush( + LOGFILE_DEBUG, + "%lu [freeSession] Unlinked router_client_session %p from " + "router %p. Connections : %d. ", + pthread_self(), + slave, + router, + prev_val-1))); + + free(slave); +} + + +/** + * Close a session with the router, this is the mechanism + * by which a router may cleanup data structure etc. + * + * @param instance The router instance data + * @param router_session The session being closed + */ +static void +closeSession(ROUTER *instance, void *router_session) +{ +ROUTER_INSTANCE *router = (ROUTER_INSTANCE *)instance; +ROUTER_SLAVE *slave = (ROUTER_SLAVE *)router_session; + + if (slave == NULL) + { + /* + * We must be closing the master session. + * + * TODO: Handle closure of master session + */ + LOGIF(LD, (skygw_log_write_flush( + LOGFILE_ERROR, "Binlog router close session with master"))); + return; + } + CHK_CLIENT_RSES(slave); + /** + * Lock router client session for secure read and update. + */ + if (rses_begin_locked_router_action(slave)) + { + /* decrease server registered slaves counter */ + atomic_add(&router->stats.n_registered, -1); + + /* + * Mark the slave as unregistered to prevent the forwarding + * of any more binlog records to this slave. + */ + slave->state = BLRS_UNREGISTERED; + + /* Unlock */ + rses_end_locked_router_action(slave); + } +} + +/** + * We have data from the client, this is likely to be packets related to + * the registration of the slave to receive binlog records. Unlike most + * MaxScale routers there is no forwarding to the backend database, merely + * the return of either predefined server responses that have been cached + * or binlog records. + * + * @param instance The router instance + * @param router_session The router session returned from the newSession call + * @param queue The queue of data buffers to route + * @return The number of bytes sent + */ +static int +routeQuery(ROUTER *instance, void *router_session, GWBUF *queue) +{ +ROUTER_INSTANCE *router = (ROUTER_INSTANCE *)instance; +ROUTER_SLAVE *slave = (ROUTER_SLAVE *)router_session; + + return blr_slave_request(router, slave, queue); +} + +static char *event_names[] = { + "Invalid", "Start Event V3", "Query Event", "Stop Event", "Rotate Event", + "Integer Session Variable", "Load Event", "Slave Event", "Create File Event", + "Append Block Event", "Exec Load Event", "Delete File Event", + "New Load Event", "Rand Event", "User Variable Event", "Format Description Event", + "Transaction ID Event (2 Phase Commit)", "Begin Load Query Event", + "Execute Load Query Event", "Table Map Event", "Write Rows Event (v0)", + "Update Rows Event (v0)", "Delete Rows Event (v0)", "Write Rows Event (v1)", + "Update Rows Event (v1)", "Delete Rows Event (v1)", "Incident Event", + "Heartbeat Event", "Ignorable Event", "Rows Query Event", "Write Rows Event (v2)", + "Update Rows Event (v2)", "Delete Rows Event (v2)", "GTID Event", + "Anonymous GTID Event", "Previous GTIDS Event" +}; +/** + * Display router diagnostics + * + * @param instance Instance of the router + * @param dcb DCB to send diagnostics to + */ +static void +diagnostics(ROUTER *router, DCB *dcb) +{ +ROUTER_INSTANCE *router_inst = (ROUTER_INSTANCE *)router; +ROUTER_SLAVE *session; +int i = 0; + + spinlock_acquire(&router_inst->lock); + session = router_inst->slaves; + while (session) + { + i++; + session = session->next; + } + spinlock_release(&router_inst->lock); + + dcb_printf(dcb, "\tCurrent binlog file: %s\n", + router_inst->binlog_name); + dcb_printf(dcb, "\tCurrent binlog position: %u\n", + router_inst->binlog_position); + dcb_printf(dcb, "\tNumber of slave servers: %u\n", + router_inst->stats.n_slaves); + dcb_printf(dcb, "\tNumber of binlog events received: %u\n", + router_inst->stats.n_binlogs); + dcb_printf(dcb, "\tNumber of fake binlog events: %u\n", + router_inst->stats.n_fakeevents); + dcb_printf(dcb, "\tNumber of binlog events in error: %u\n", + router_inst->stats.n_binlog_errors); + dcb_printf(dcb, "\tNumber of binlog rotate events: %u\n", + router_inst->stats.n_rotates); + dcb_printf(dcb, "\tNumber of binlog cache hits: %u\n", + router_inst->stats.n_cachehits); + dcb_printf(dcb, "\tNumber of binlog cache misses: %u\n", + router_inst->stats.n_cachemisses); + dcb_printf(dcb, "\tNumber of packets received: %u\n", + router_inst->stats.n_reads); + dcb_printf(dcb, "\tAverage events per packet %.1f\n", + (double)router_inst->stats.n_binlogs / router_inst->stats.n_reads); + dcb_printf(dcb, "\tEvents received:\n"); + for (i = 0; i < 0x24; i++) + { + dcb_printf(dcb, "\t\t%-38s: %u\n", event_names[i], router_inst->stats.events[i]); + } + + if (router_inst->slaves) + { + dcb_printf(dcb, "\tSlaves:\n"); + spinlock_acquire(&router_inst->lock); + session = router_inst->slaves; + while (session) + { + dcb_printf(dcb, "\t\tServer-id: %d\n", session->serverid); + if (session->hostname) + dcb_printf(dcb, "\t\tHostname: %s\n", session->hostname); + dcb_printf(dcb, "\t\tSlave DCB: %x\n", session->dcb); + dcb_printf(dcb, "\t\tNext Sequence No: %d\n", session->seqno); + dcb_printf(dcb, "\t\tState: %s\n", blrs_states[session->state]); + dcb_printf(dcb, "\t\tBinlog file: %s\n", session->binlogfile); + dcb_printf(dcb, "\t\tBinlog position: %u\n", session->binlog_pos); + dcb_printf(dcb, "\t\tNo. requests: %u\n", session->stats.n_requests); + dcb_printf(dcb, "\t\tNo. events sent: %u\n", session->stats.n_events); + dcb_printf(dcb, "\t\tNo. bursts sent: %u\n", session->stats.n_bursts); + dcb_printf(dcb, "\t\tNo. flow control: %u\n", session->stats.n_flows); + session = session->next; + } + spinlock_release(&router_inst->lock); + } +} + +/** + * Client Reply routine - in this case this is a message from the + * master server, It should be sent to the state machine that manages + * master packets as it may be binlog records or part of the registration + * handshake that takes part during connection establishment. + * + * + * @param instance The router instance + * @param router_session The router session + * @param master_dcb The DCB for the connection to the master + * @param queue The GWBUF with reply data + */ +static void +clientReply(ROUTER *instance, void *router_session, GWBUF *queue, DCB *backend_dcb) +{ +ROUTER_INSTANCE *router = (ROUTER_INSTANCE *)instance; + + atomic_add(&router->stats.n_reads, 1); + blr_master_response(router, queue); +} + +/** + * Error Reply routine + * + * The routine will reply to client errors and/or closing the session + * or try to open a new backend connection. + * + * @param instance The router instance + * @param router_session The router session + * @param message The error message to reply + * @param backend_dcb The backend DCB + * @param action The action: REPLY, REPLY_AND_CLOSE, NEW_CONNECTION + * + */ +static void +errorReply( + ROUTER *instance, + void *router_session, + char *message, + DCB *backend_dcb, + int action) +{ +} + +/** to be inline'd */ +/** + * @node Acquires lock to router client session if it is not closed. + * + * Parameters: + * @param rses - in, use + * + * + * @return true if router session was not closed. If return value is true + * it means that router is locked, and must be unlocked later. False, if + * router was closed before lock was acquired. + * + * + * @details (write detailed description here) + * + */ +static bool rses_begin_locked_router_action(ROUTER_SLAVE *rses) +{ + bool succp = false; + + CHK_CLIENT_RSES(rses); + + spinlock_acquire(&rses->rses_lock); + succp = true; + + return succp; +} + +/** to be inline'd */ +/** + * @node Releases router client session lock. + * + * Parameters: + * @param rses - + * + * + * @return void + * + * + * @details (write detailed description here) + * + */ +static void rses_end_locked_router_action(ROUTER_SLAVE * rses) +{ + CHK_CLIENT_RSES(rses); + spinlock_release(&rses->rses_lock); +} + + +static uint8_t getCapabilities(ROUTER *inst, void *router_session) +{ + return 0; +} diff --git a/server/modules/routing/binlog/blr_cache.c b/server/modules/routing/binlog/blr_cache.c new file mode 100644 index 000000000..5bc46f036 --- /dev/null +++ b/server/modules/routing/binlog/blr_cache.c @@ -0,0 +1,69 @@ +/* + * This file is distributed as part of MaxScale. It is free + * software: you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation, + * version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Copyright SkySQL Ab 2014 + */ + +/** + * @file blr_cache.c - binlog router cache, manage the binlog cache + * + * The binlog router is designed to be used in replication environments to + * increase the replication fanout of a master server. It provides a transparant + * mechanism to read the binlog entries for multiple slaves while requiring + * only a single connection to the actual master to support the slaves. + * + * The current prototype implement is designed to support MySQL 5.6 and has + * a number of limitations. This prototype is merely a proof of concept and + * should not be considered production ready. + * + * @verbatim + * Revision History + * + * Date Who Description + * 07/04/2014 Mark Riddoch Initial implementation + * + * @endverbatim + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +extern int lm_enabled_logfiles_bitmask; + + +/** + * Initialise the cache for this instanceof the binlog router. As a side + * effect also determine the binlog file to read and the position to read + * from. + * + * @param router The router instance + */ +void +blr_init_cache(ROUTER_INSTANCE *router) +{ +} diff --git a/server/modules/routing/binlog/blr_file.c b/server/modules/routing/binlog/blr_file.c new file mode 100644 index 000000000..c1ca8d2fd --- /dev/null +++ b/server/modules/routing/binlog/blr_file.c @@ -0,0 +1,282 @@ +/* + * This file is distributed as part of MaxScale. It is free + * software: you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation, + * version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Copyright SkySQL Ab 2014 + */ + +/** + * @file blr_file.c - contains code for the router binlog file management + * + * + * @verbatim + * Revision History + * + * Date Who Description + * 14/04/2014 Mark Riddoch Initial implementation + * + * @endverbatim + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +extern int lm_enabled_logfiles_bitmask; + +static void blr_file_create(ROUTER_INSTANCE *router, char *file); +static void blr_file_append(ROUTER_INSTANCE *router, char *file); +static uint32_t extract_field(uint8_t *src, int bits); + +/** + * Initialise the binlog file for this instance. MaxScale will look + * for all the binlogs that it has on local disk, determien the next + * binlog to use and initialise it for writing, determining the + * next record to be fetched from the real master. + * + * @param router The router instance this defines the master for this replication chain + */ +void +blr_file_init(ROUTER_INSTANCE *router) +{ +char *ptr, path[1024], filename[1050]; +int file_found, n = 1; + + strcpy(path, "/usr/local/skysql/MaxScale"); + if ((ptr = getenv("MAXSCALE_HOME")) != NULL) + { + strcpy(path, ptr); + } + strcat(path, "/"); + strcat(path, router->service->name); + + if (access(path, R_OK) == -1) + mkdir(path, 0777); + file_found = 0; + do { + sprintf(filename, "%s/" BINLOG_NAMEFMT, path, n); + if (access(filename, R_OK) != -1) + { + file_found = 1; + n++; + } + else + file_found = 0; + } while (file_found); + n--; + + if (n == 0) // No binlog files found + { + sprintf(filename, BINLOG_NAMEFMT, 1); + blr_file_create(router, filename); + } + else + { + sprintf(filename, BINLOG_NAMEFMT, n); + blr_file_append(router, filename); + } + +} + +void +blr_file_rotate(ROUTER_INSTANCE *router, char *file, uint64_t pos) +{ + blr_file_create(router, file); +} + + +/** + * Create a new binlog file for the router to use. + * + * @param router The router instance + * @param file The binlog file name + */ +static void +blr_file_create(ROUTER_INSTANCE *router, char *file) +{ +char *ptr, path[1024]; +int fd; +unsigned char magic[] = BINLOG_MAGIC; + + strcpy(path, "/usr/local/skysql/MaxScale"); + if ((ptr = getenv("MAXSCALE_HOME")) != NULL) + { + strcpy(path, ptr); + } + strcat(path, "/"); + strcat(path, router->service->name); + strcat(path, "/"); + strcat(path, file); + + if ((fd = open(path, O_RDWR|O_CREAT, 0666)) != -1) + { + write(fd, magic, 4); + } + fsync(fd); + close(router->binlog_fd); + strcpy(router->binlog_name, file); + router->binlog_position = 4; /* Initial position after the magic number */ + router->binlog_fd = fd; +} + + +/** + * Prepare an existing binlog file to be appened to. + * + * @param router The router instance + * @param file The binlog file name + */ +static void +blr_file_append(ROUTER_INSTANCE *router, char *file) +{ +char *ptr, path[1024]; +int fd; + + strcpy(path, "/usr/local/skysql/MaxScale"); + if ((ptr = getenv("MAXSCALE_HOME")) != NULL) + { + strcpy(path, ptr); + } + strcat(path, "/"); + strcat(path, router->service->name); + strcat(path, "/"); + strcat(path, file); + + fd = open(path, O_RDWR|O_APPEND, 0666); + fsync(fd); + close(router->binlog_fd); + strcpy(router->binlog_name, file); + router->binlog_position = lseek(fd, 0L, SEEK_END); + router->binlog_fd = fd; +} + +/** + * Write a binlog entry to disk. + * + * @param router The router instance + * @param buf The binlog record + * @param len The length of the binlog record + */ +void +blr_write_binlog_record(ROUTER_INSTANCE *router, REP_HEADER *hdr, uint8_t *buf) +{ + pwrite(router->binlog_fd, buf, hdr->event_size, hdr->next_pos - hdr->event_size); + router->binlog_position = hdr->next_pos; +} + +/** + * Flush the content of the binlog file to disk. + * + * @param router The binlog router + */ +void +blr_file_flush(ROUTER_INSTANCE *router) +{ + fsync(router->binlog_fd); +} + +int +blr_open_binlog(ROUTER_INSTANCE *router, char *binlog) +{ +char *ptr, path[1024]; + + strcpy(path, "/usr/local/skysql/MaxScale"); + if ((ptr = getenv("MAXSCALE_HOME")) != NULL) + { + strcpy(path, ptr); + } + strcat(path, "/"); + strcat(path, router->service->name); + strcat(path, "/"); + strcat(path, binlog); + + return open(path, O_RDONLY, 0666); +} + +/** + * Read a replication event into a GWBUF structure. + * + * @param fd File descriptor of the binlog file + * @param pos Position of binlog record to read + * @param hdr Binlog header to populate + * @return The binlog record wrapped in a GWBUF structure + */ +GWBUF * +blr_read_binlog(int fd, unsigned int pos, REP_HEADER *hdr) +{ +uint8_t hdbuf[19]; +GWBUF *result; +unsigned char *data; + + if (lseek(fd, pos, SEEK_SET) != pos) + { + return NULL; + } + + /* Read the header information from the file */ + if (read(fd, hdbuf, 19) != 19) + return NULL; + hdr->timestamp = extract_field(hdbuf, 32); + hdr->event_type = hdbuf[4]; + hdr->serverid = extract_field(&hdbuf[5], 32); + hdr->event_size = extract_field(&hdbuf[9], 32); + hdr->next_pos = extract_field(&hdbuf[13], 32); + hdr->flags = extract_field(&hdbuf[17], 16); + if ((result = gwbuf_alloc(hdr->event_size)) == NULL) + { + LOGIF(LE, (skygw_log_write(LOGFILE_ERROR, + "Failed to allocate memory for binlog entry.\n"))); + return NULL; + } + data = GWBUF_DATA(result); + memcpy(data, hdbuf, 19); // Copy the header in + read(fd, &data[19], hdr->event_size - 19); // Read the balance + return result; +} + +/** + * Extract a numeric field from a packet of the specified number of bits + * + * @param src The raw packet source + * @param birs The number of bits to extract (multiple of 8) + */ +static uint32_t +extract_field(uint8_t *src, int bits) +{ +uint32_t rval = 0, shift = 0; + + while (bits > 0) + { + rval |= (*src++) << shift; + shift += 8; + bits -= 8; + } + return rval; +} diff --git a/server/modules/routing/binlog/blr_master.c b/server/modules/routing/binlog/blr_master.c new file mode 100644 index 000000000..46b2ee7b6 --- /dev/null +++ b/server/modules/routing/binlog/blr_master.c @@ -0,0 +1,654 @@ +/* + * This file is distributed as part of MaxScale. It is free + * software: you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation, + * version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Copyright SkySQL Ab 2014 + */ + +/** + * @file blr_master.c - contains code for the router to master communication + * + * The binlog router is designed to be used in replication environments to + * increase the replication fanout of a master server. It provides a transparant + * mechanism to read the binlog entries for multiple slaves while requiring + * only a single connection to the actual master to support the slaves. + * + * The current prototype implement is designed to support MySQL 5.6 and has + * a number of limitations. This prototype is merely a proof of concept and + * should not be considered production ready. + * + * @verbatim + * Revision History + * + * Date Who Description + * 02/04/2014 Mark Riddoch Initial implementation + * + * @endverbatim + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +/* Temporary requirement for auth data */ +#include + +extern int lm_enabled_logfiles_bitmask; + +static GWBUF *blr_make_query(char *statement); +static GWBUF *blr_make_registration(ROUTER_INSTANCE *router); +static GWBUF *blr_make_binlog_dump(ROUTER_INSTANCE *router); +static void encode_value(unsigned char *data, unsigned int value, int len); +static void blr_handle_binlog_record(ROUTER_INSTANCE *router, GWBUF *pkt); +static void blr_rotate_event(ROUTER_INSTANCE *router, uint8_t *pkt, REP_HEADER *hdr); +static void blr_distribute_binlog_record(ROUTER_INSTANCE *router, REP_HEADER *hdr, uint8_t *ptr); +static void *CreateMySQLAuthData(char *username, char *password, char *database); +static void blr_extract_header(uint8_t *pkt, REP_HEADER *hdr); +static uint32_t extract_field(uint8_t *src, int bits); + +/** + * blr_start_master - controls the connection of the binlog router to the + * master MySQL server and triggers the slave registration process for + * the router. + * + * @param router The router instance + */ +void +blr_start_master(ROUTER_INSTANCE *router) +{ +DCB *client; +GWBUF *buf; + + client = dcb_alloc(DCB_ROLE_INTERNAL); + client->data = CreateMySQLAuthData(router->user, router->password, ""); + router->session = session_alloc(router->service, client); + client->session = router->session; + router->master = dcb_connect(router->service->databases, router->session, BLR_PROTOCOL); + router->master_state = BLRM_AUTHENTICATED; + buf = blr_make_query("SELECT UNIX_TIMESTAMP()"); + router->master->func.write(router->master, buf); + router->master_state = BLRM_TIMESTAMP; +} + +/** + * Binlog router master side state machine event handler. + * + * Handles an incoming response from the master server to the binlog + * router. + * + * @param router The router instance + * @param buf The incoming packet + */ +void +blr_master_response(ROUTER_INSTANCE *router, GWBUF *buf) +{ +char query[128]; + + /* + * We need to make sure that incoming packets (gwbufs) are + * strictly processed in order and that we do not have packets + * from the same master being processed on multiple threads. + * to do this we create a queue of the GWBUF structures and have + * a flag that indicates if this routine is processing a packet + * on another thread. Items will be added to the queue if the + * routine is running in another thread. That thread will read + * the queue before returning. + * The action of adding items to the queue is protected by a + * spinlock and a flag that inidicates if the routine running + * in the other thread has reached the point at which it will + * no longer check the queue before returning. In order to + * manipulate the queue or the flag then router spinlock must + * be held. + */ + spinlock_acquire(&router->lock); + if (router->active_logs) + { + /* + * Thread already processing a packet and has not got + * to the point that it will not look at new packets + * added to the queue. + */ + router->queue = gwbuf_append(router->queue, buf); + spinlock_release(&router->lock); + return; + } + else + { + router->active_logs = 1; + } + spinlock_release(&router->lock); + + if (router->master_state < 0 || router->master_state > BLRM_MAXSTATE) + { + LOGIF(LM, (skygw_log_write( + LOGFILE_ERROR, "Invalid master state machine state (%d) for binlog router.\n", + router->master_state))); + gwbuf_consume(buf, gwbuf_length(buf)); + spinlock_acquire(&router->lock); + router->active_logs = 0; + spinlock_release(&router->lock); + return; + } + + if (MYSQL_RESPONSE_ERR(buf)) + { + LOGIF(LM, (skygw_log_write( + LOGFILE_ERROR, + "Received error: %d, %s from master during %s phase of the master state machine.\n", + MYSQL_ERROR_CODE(buf), MYSQL_ERROR_MSG(buf), blrm_states[router->master_state] + ))); + gwbuf_consume(buf, gwbuf_length(buf)); + spinlock_acquire(&router->lock); + router->active_logs = 0; + spinlock_release(&router->lock); + return; + } + do { + switch (router->master_state) + { + case BLRM_TIMESTAMP: + // Response to a timestamp message, no need to save this. + gwbuf_consume(buf, GWBUF_LENGTH(buf)); + buf = blr_make_query("SHOW VARIABLES LIKE 'SERVER_ID'"); + router->master_state = BLRM_SERVERID; + router->master->func.write(router->master, buf); + break; + case BLRM_SERVERID: + // Response to fetch of master's server-id + router->saved_master.server_id = buf; + // TODO: Extract the value of server-id and place in router->master_id + buf = blr_make_query("SET @master_heartbeat_period = 1799999979520"); + router->master_state = BLRM_HBPERIOD; + router->master->func.write(router->master, buf); + break; + case BLRM_HBPERIOD: + // Response to set the heartbeat period + router->saved_master.heartbeat = buf; + gwbuf_consume(buf, GWBUF_LENGTH(buf)); + buf = blr_make_query("SET @master_binlog_checksum = @@global.binlog_checksum"); + router->master_state = BLRM_CHKSUM1; + router->master->func.write(router->master, buf); + break; + case BLRM_CHKSUM1: + // Response to set the master binlog checksum + router->saved_master.chksum1 = buf; + gwbuf_consume(buf, GWBUF_LENGTH(buf)); + buf = blr_make_query("SELECT @master_binlog_checksum"); + router->master_state = BLRM_CHKSUM2; + router->master->func.write(router->master, buf); + break; + case BLRM_CHKSUM2: + // Response to the master_binlog_checksum, should be stored + router->saved_master.chksum2 = buf; + buf = blr_make_query("SELECT @@GLOBAL.GTID_MODE"); + router->master_state = BLRM_GTIDMODE; + router->master->func.write(router->master, buf); + break; + case BLRM_GTIDMODE: + // Response to the GTID_MODE, should be stored + router->saved_master.gtid_mode = buf; + buf = blr_make_query("SHOW VARIABLES LIKE 'SERVER_UUID'"); + router->master_state = BLRM_MUUID; + router->master->func.write(router->master, buf); + break; + case BLRM_MUUID: + // Response to the SERVER_UUID, should be stored + router->saved_master.uuid = buf; + sprintf(query, "SET @slave_uuid='%s'", router->uuid); + buf = blr_make_query(query); + router->master_state = BLRM_SUUID; + router->master->func.write(router->master, buf); + break; + case BLRM_SUUID: + // Response to the SET @server_uuid, should be stored + router->saved_master.setslaveuuid = buf; + gwbuf_consume(buf, GWBUF_LENGTH(buf)); + buf = blr_make_query("SET NAMES latin1"); + router->master_state = BLRM_LATIN1; + router->master->func.write(router->master, buf); + break; + case BLRM_LATIN1: + // Response to the SET NAMES latin1, should be stored + router->saved_master.setnames = buf; + gwbuf_consume(buf, GWBUF_LENGTH(buf)); + buf = blr_make_registration(router); + router->master_state = BLRM_REGISTER; + router->master->func.write(router->master, buf); + break; + case BLRM_REGISTER: + // Request a dump of the binlog file + buf = blr_make_binlog_dump(router); + router->master_state = BLRM_BINLOGDUMP; + router->master->func.write(router->master, buf); + break; + case BLRM_BINLOGDUMP: + // Main body, we have received a binlog record from the master + blr_handle_binlog_record(router, buf); + break; + } + + /* + * Check for messages queued by other threads. + */ + spinlock_acquire(&router->lock); + if ((buf = router->queue) != NULL) + { + router->queue = buf->next; + buf->next = NULL; + } + else + { + router->active_logs = 0; + } + spinlock_release(&router->lock); + } while (buf != NULL); +} + +/** + * Build a MySQL query into a GWBUF that we can send to the master database + * + * @param query The text of the query to send + */ +static GWBUF * +blr_make_query(char *query) +{ +GWBUF *buf; +unsigned char *data; +int len; + + if ((buf = gwbuf_alloc(strlen(query) + 5)) == NULL) + return NULL; + data = GWBUF_DATA(buf); + len = strlen(query) + 1; + encode_value(&data[0], len, 24); // Payload length + data[3] = 0; // Sequence id + // Payload + data[4] = COM_QUERY; // Command + memcpy(&data[5], query, strlen(query)); + + return buf; +} + +/** + * Build a MySQL slave registration into a GWBUF that we can send to the + * master database + * + * @param router The router instance + * @return A MySQL Replication registration message in a GWBUF structure + */ +static GWBUF * +blr_make_registration(ROUTER_INSTANCE *router) +{ +GWBUF *buf; +unsigned char *data; +int len = 18; + + if ((buf = gwbuf_alloc(len + 4)) == NULL) + return NULL; + data = GWBUF_DATA(buf); + encode_value(&data[0], len, 24); // Payload length + data[3] = 0; // Sequence ID + data[4] = COM_REGISTER_SLAVE; // Command + encode_value(&data[5], router->serverid, 32); // Slave Server ID + data[9] = 0; // Slave hostname length + data[10] = 0; // Slave username length + data[11] = 0; // Slave password length + encode_value(&data[12], router->service->ports->port, 16); // Slave master port + encode_value(&data[14], 0, 32); // Replication rank + encode_value(&data[18], router->masterid, 32); // Master server-id + + return buf; +} + + +/** + * Build a Binlog dump command into a GWBUF that we can send to the + * master database + * + * @param router The router instance + * @return A MySQL Replication COM_BINLOG_DUMP message in a GWBUF structure + */ +static GWBUF * +blr_make_binlog_dump(ROUTER_INSTANCE *router) +{ +GWBUF *buf; +unsigned char *data; +int len = 0x1b; + + if ((buf = gwbuf_alloc(len + 4)) == NULL) + return NULL; + data = GWBUF_DATA(buf); + + encode_value(&data[0], len,24); // Payload length + data[3] = 0; // Sequence ID + data[4] = COM_BINLOG_DUMP; // Command + encode_value(&data[5], router->binlog_position, 32); // binlog position + encode_value(&data[9], 0, 16); // Flags + encode_value(&data[11], router->serverid, 32); // Server-id of MaxScale + strncpy((char *)&data[15], router->binlog_name, + BINLOG_FNAMELEN); // binlog filename + return buf; +} + + +/** + * Encode a value into a number of bits in a MySQL packet + * + * @param data Point to location in target packet + * @param value The value to pack + * @param len Number of bits to encode value into + */ +static void +encode_value(unsigned char *data, unsigned int value, int len) +{ + while (len > 0) + { + *data++ = value & 0xff; + value >>= 8; + len -= 8; + } +} + +/** + * blr_handle_binlog_record - we have received binlog records from + * the master and we must now work out what to do with them. + * + * @param router The router instance + * @param pkt The binlog records + */ +static void +blr_handle_binlog_record(ROUTER_INSTANCE *router, GWBUF *pkt) +{ +uint8_t *msg, *ptr, *pdata; +REP_HEADER hdr; +int len, reslen; + + /* Prepend any residual buffer to the buffer chain we have been called with. */ + if (router->residual) + { + pkt = gwbuf_append(router->residual, pkt); + router->residual = NULL; + } + + while (pkt && gwbuf_length(pkt) > 24) + { + reslen = GWBUF_LENGTH(pkt); + pdata = GWBUF_DATA(pkt); + if (reslen < 3) // Payload length straddles buffers + { + /* Get the length of the packet from the residual and new packet */ + if (reslen >= 3) + { + len = extract_field(pdata, 24); + } + else if (reslen == 2) + { + len = extract_field(pdata, 16); + len |= (extract_field(GWBUF_DATA(pkt->next), 8) << 16); + } + else if (reslen == 1) + { + len = extract_field(pdata, 8); + len |= (extract_field(GWBUF_DATA(pkt->next), 16) << 8); + } + len += 4; // Allow space for the header + } + else + { + len = extract_field(pdata, 24) + 4; + } + + if (reslen < len && pkt->next) // Message straddles buffers + { + /* Allocate a contiguous buffer for the binlog message */ + msg = malloc(len); + + memcpy(msg, pdata, reslen); + memcpy(&msg[reslen], GWBUF_DATA(pkt->next), len - reslen); + ptr = msg; + } + else if (reslen < len) // Message straddles buffers + { + break; + } + else + { + ptr = pdata; + msg = NULL; + } + + blr_extract_header(ptr, &hdr); + if (hdr.ok == 0) + { + router->stats.n_binlogs++; + +// #define SHOW_EVENTS +#ifdef SHOW_EVENTS + printf("blr: event type 0x%02x, flags 0x%04x, event size %d\n", hdr.event_type, hdr.flags, hdr.event_size); +#endif + if (hdr.event_type >= 0 && hdr.event_type < 0x24) + router->stats.events[hdr.event_type]++; + if (hdr.event_type == FORMAT_DESCRIPTION_EVENT && hdr.next_pos == 0) + { + // Fake format description message + router->stats.n_fakeevents++; + if (hdr.event_type == FORMAT_DESCRIPTION_EVENT) + { + /* + * We need to save this to replay to new + * slaves that attach later. + */ + if (router->saved_master.fde_event) + free(router->saved_master.fde_event); + router->saved_master.fde_len = hdr.event_size; + router->saved_master.fde_event = malloc(hdr.event_size); + if (router->saved_master.fde_event) + memcpy(router->saved_master.fde_event, + ptr + 5, hdr.event_size); + } + } + else + { + if (hdr.event_type == ROTATE_EVENT) + { + blr_rotate_event(router, ptr, &hdr); + } + if (hdr.event_type == HEARTBEAT_EVENT) + { +#ifdef SHOW_EVENTS + printf("Replication heartbeat\n"); +#endif + ; + } + else if (hdr.flags != LOG_EVENT_ARTIFICIAL_F) + { + ptr = ptr + 5; // We don't put the first byte of the payload + // into the binlog file + blr_write_binlog_record(router, &hdr, ptr); + blr_distribute_binlog_record(router, &hdr, ptr); + } + } + } + else + { + printf("Binlog router error: %s\n", &ptr[7]); + router->stats.n_binlog_errors++; + } + + if (msg) + { + free(msg); + pkt = gwbuf_consume(pkt, reslen); + pkt = gwbuf_consume(pkt, len - reslen); + } + else + { + pkt = gwbuf_consume(pkt, 4 + hdr.payload_len); + } + } + + /* + * Check if we have a residual, part binlog message to deal with. + * Just simply store the GWBUF for next time + */ + if (pkt) + { + router->residual = pkt; + } + blr_file_flush(router); +} + +/** + * Populate a header structure for a replication message from a GWBUF structure. + * + * @param pkt The incoming packet in a GWBUF chain + * @param hdr The packet header to populate + */ +static void +blr_extract_header(uint8_t *ptr, REP_HEADER *hdr) +{ + + hdr->payload_len = extract_field(ptr, 24); + hdr->seqno = ptr[3]; + hdr->ok = ptr[4]; + hdr->timestamp = extract_field(&ptr[5], 32); + hdr->event_type = ptr[9]; + hdr->serverid = extract_field(&ptr[10], 32); + hdr->event_size = extract_field(&ptr[14], 32); + hdr->next_pos = extract_field(&ptr[18], 32); + hdr->flags = extract_field(&ptr[22], 16); +} + +/** + * Extract a numeric field from a packet of the specified number of bits + * + * @param src The raw packet source + * @param birs The number of bits to extract (multiple of 8) + */ +static uint32_t +extract_field(uint8_t *src, int bits) +{ +uint32_t rval = 0, shift = 0; + + while (bits > 0) + { + rval |= (*src++) << shift; + shift += 8; + bits -= 8; + } + return rval; +} + +/** + * Process a binlog rotate event. + * + * @param router The instance of the router + * @param ptr The packet containing the rotate event + * @param hdr The replication message header + */ +static void +blr_rotate_event(ROUTER_INSTANCE *router, uint8_t *ptr, REP_HEADER *hdr) +{ +int len; +uint64_t pos; +char file[BINLOG_FNAMELEN+1]; + + ptr += 4; // Skip packet header + ptr++; // Skip the OK + ptr += 19; // Skip event header + len = hdr->event_size - 19; // Event size minus header + pos = extract_field(ptr, 32) + (extract_field(ptr+4, 32) << 32); + memcpy(file, ptr + 8, BINLOG_FNAMELEN); + file[BINLOG_FNAMELEN] = 0; + +#ifdef VEBOSE_ROTATE + printf("binlog rotate: "); + while (len--) + printf("0x%02x ", *ptr++); + printf("\n"); + printf("New file: %s @ %ld\n", file, pos); +#endif + + if (strncmp(router->binlog_name, file, BINLOG_FNAMELEN) != 0) + { + router->stats.n_rotates++; + blr_file_rotate(router, file, pos); + } +} + +/** + * Create the auth data needed to be able to call dcb_connect. + * + * This doesn't really belong here and should be moved at some stage. + */ +static void * +CreateMySQLAuthData(char *username, char *password, char *database) +{ +MYSQL_session *auth_info; + + if ((auth_info = calloc(1, sizeof(MYSQL_session))) == NULL) + return NULL; + strcpy(auth_info->user, username); + strcpy(auth_info->db, database); + gw_sha1_str((const uint8_t *)password, strlen(password), auth_info->client_sha1); + + return auth_info; +} + +/** + * Distribute the binlog record we have just received to all the registered slaves. + * + * @param router The router instance + * @param hdr The replication event header + * @param ptr The raw replication eent data + */ +static void +blr_distribute_binlog_record(ROUTER_INSTANCE *router, REP_HEADER *hdr, uint8_t *ptr) +{ +GWBUF *pkt; +uint8_t *buf; +ROUTER_SLAVE *slave; + + spinlock_acquire(&router->lock); + slave = router->slaves; + while (slave) + { + if (slave->binlog_pos == hdr->next_pos - hdr->event_size) + { + pkt = gwbuf_alloc(hdr->event_size + 5); + buf = GWBUF_DATA(pkt); + encode_value(buf, hdr->event_size + 1, 24); + buf += 3; + *buf++ = slave->seqno++; + *buf++ = 0; // OK + memcpy(buf, ptr, hdr->event_size); + slave->dcb->func.write(slave->dcb, pkt); + slave->binlog_pos = hdr->next_pos; + } + + slave = slave->next; + } + spinlock_release(&router->lock); +} diff --git a/server/modules/routing/binlog/blr_slave.c b/server/modules/routing/binlog/blr_slave.c new file mode 100644 index 000000000..79a94844b --- /dev/null +++ b/server/modules/routing/binlog/blr_slave.c @@ -0,0 +1,767 @@ +/* + * This file is distributed as part of MaxScale. It is free + * software: you can redistribute it and/or modify it under the terms of the + * GNU General Public License as published by the Free Software Foundation, + * version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Copyright SkySQL Ab 2014 + */ + +/** + * @file blr_slave.c - contains code for the router to slave communication + * + * The binlog router is designed to be used in replication environments to + * increase the replication fanout of a master server. It provides a transparant + * mechanism to read the binlog entries for multiple slaves while requiring + * only a single connection to the actual master to support the slaves. + * + * The current prototype implement is designed to support MySQL 5.6 and has + * a number of limitations. This prototype is merely a proof of concept and + * should not be considered production ready. + * + * @verbatim + * Revision History + * + * Date Who Description + * 14/04/2014 Mark Riddoch Initial implementation + * + * @endverbatim + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +static uint32_t extract_field(uint8_t *src, int bits); +static void encode_value(unsigned char *data, unsigned int value, int len); +static int blr_slave_query(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue); +static int blr_slave_replay(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *master); +static void blr_slave_send_error(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *msg); +static int blr_slave_send_timestamp(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave); +static int blr_slave_register(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue); +static int blr_slave_binlog_dump(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue); +static int blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave); +static uint8_t *blr_build_header(GWBUF *pkt, REP_HEADER *hdr); +static int blr_slave_callback(DCB *dcb, DCB_REASON reason, void *data); + +extern int lm_enabled_logfiles_bitmask; + +/** + * Process a request packet from the slave server. + * + * The router can handle a limited subset of requests from the slave, these + * include a subset of general SQL queries, a slave registeration command and + * the binlog dump command. + * + * The strategy for responding to these commands is to use caches responses + * for the the same commands that have previously been made to the real master + * if this is possible, if it is not then the router itself will synthesize a + * response. + * + * @param router The router instance this defines the master for this replication chain + * @param slave The slave specific data + * @param queue The incoming request packet + */ +int +blr_slave_request(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue) +{ + if (slave->state < 0 || slave->state > BLRS_MAXSTATE) + { + LOGIF(LM, (skygw_log_write( + LOGFILE_ERROR, "Invalid slave state machine state (%d) for binlog router.\n", + slave->state))); + gwbuf_consume(queue, gwbuf_length(queue)); + return 0; + } + + atomic_add(&slave->stats.n_requests, 1); + switch (MYSQL_COMMAND(queue)) + { + case COM_QUERY: + return blr_slave_query(router, slave, queue); + break; + case COM_REGISTER_SLAVE: + return blr_slave_register(router, slave, queue); + break; + case COM_BINLOG_DUMP: + return blr_slave_binlog_dump(router, slave, queue); + break; + default: + break; + } + return 0; +} + +/** + * Handle a query from the slave. This is expected to be one of the "standard" + * queries we expect as part of the registraton process. Most of these can + * be dealt with by replying the stored responses we got from the master + * when MaxScale registered as a slave. The exception to the rule is the + * request to obtain the current timestamp value of the server. + * + * Three select statements are currently supported: + * SELECT UNIX_TIMESTAMP(); + * SELECT @master_binlog_checksum + * SELECT @@GLOBAL.GTID_MODE + * + * Two show commands are supported: + * SHOW VARIABLES LIKE 'SERVER_ID' + * SHOW VARIABLES LIKE 'SERVER_UUID' + * + * Four set commands are supported: + * SET @master_binlog_checksum = @@global.binlog_checksum + * SET @master_heartbeat_period=... + * SET @slave_slave_uuid=... + * SET NAMES latin1 + * + * @param router The router instance this defines the master for this replication chain + * @param slave The slave specific data + * @param queue The incoming request packet + * @return Non-zero if data has been sent + */ +static int +blr_slave_query(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue) +{ +char *qtext, *query_text; +char *sep = " ,="; +char *word, *brkb; +int query_len; + + qtext = GWBUF_DATA(queue); + query_len = extract_field(qtext, 24) - 1; + qtext += 5; // Skip header and first byte of the payload + query_text = strndup(qtext, query_len); + + LOGIF(LT, (skygw_log_write( + LOGFILE_TRACE, "Execute statement from the slave '%s'\n", query_text))); + /* + * Implement a very rudimental "parsing" of the query text by extarcting the + * words from the statement and matchng them against the subset of queries we + * are expecting from the slave. We already have responses to these commands, + * except for the select of UNIX_TIMESTAMP(), that we have saved from MaxScale's + * own interaction with the real master. We simply replay these saved responses + * to the slave. + */ + word = strtok_r(query_text, sep, &brkb); + if (strcasecmp(word, "SELECT") == 0) + { + word = strtok_r(NULL, sep, &brkb); + if (strcasecmp(word, "UNIX_TIMESTAMP()") == 0) + { + free(query_text); + return blr_slave_send_timestamp(router, slave); + } + else if (strcasecmp(word, "@master_binlog_checksum") == 0) + { + free(query_text); + return blr_slave_replay(router, slave, router->saved_master.chksum2); + } + else if (strcasecmp(word, "@@GLOBAL.GTID_MODE") == 0) + { + free(query_text); + return blr_slave_replay(router, slave, router->saved_master.gtid_mode); + } + } + else if (strcasecmp(word, "SHOW") == 0) + { + word = strtok_r(NULL, sep, &brkb); + if (strcasecmp(word, "VARIABLES") == 0) + { + word = strtok_r(NULL, sep, &brkb); + if (strcasecmp(word, "LIKE") == 0) + { + word = strtok_r(NULL, sep, &brkb); + if (strcasecmp(word, "'SERVER_ID'") == 0) + { + free(query_text); + return blr_slave_replay(router, slave, router->saved_master.server_id); + } + else if (strcasecmp(word, "'SERVER_UUID'") == 0) + { + free(query_text); + return blr_slave_replay(router, slave, router->saved_master.uuid); + } + } + } + } + else if (strcasecmp(query_text, "SET") == 0) + { + word = strtok_r(NULL, sep, &brkb); + if (strcasecmp(word, "@master_heartbeat_period") == 0) + { + free(query_text); + return blr_slave_replay(router, slave, router->saved_master.heartbeat); + } + else if (strcasecmp(word, "@master_binlog_checksum") == 0) + { + free(query_text); + return blr_slave_replay(router, slave, router->saved_master.chksum1); + } + else if (strcasecmp(word, "@slave_uuid") == 0) + { + free(query_text); + return blr_slave_replay(router, slave, router->saved_master.setslaveuuid); + } + else if (strcasecmp(word, "NAMES") == 0) + { + word = strtok_r(NULL, sep, &brkb); + if (strcasecmp(word, "latin1") == 0) + { + free(query_text); + return blr_slave_replay(router, slave, router->saved_master.setnames); + } + } + } + free(query_text); + + query_text = strndup(qtext, query_len); + LOGIF(LE, (skygw_log_write( + LOGFILE_ERROR, "Unexpected query from slave server %s\n", query_text))); + free(query_text); + blr_slave_send_error(router, slave, "Unexpected SQL query received from slave."); + return 0; +} + + +/** + * Send a reply to a command we have received from the slave. The reply itself + * is merely a copy of a previous message we received from the master when we + * registered as a slave. Hence we just replay this saved reply. + * + * @param router The binlog router instance + * @param slave The slave server to which we are sending the response + * @param master The saved master response + * @return Non-zero if data was sent + */ +static int +blr_slave_replay(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *master) +{ +GWBUF *clone; + + if (!master) + return 0; + if ((clone = gwbuf_clone(master)) != NULL) + { + return slave->dcb->func.write(slave->dcb, clone); + } + else + { + LOGIF(LE, (skygw_log_write(LOGFILE_ERROR, + "Failed to clone server response to send to slave.\n"))); + return 0; + } +} + +/** + * Construct an error response + * + * @param router The router instance + * @param slave The slave server instance + * @param msg The error message to send + */ +static void +blr_slave_send_error(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *msg) +{ +GWBUF *pkt; +unsigned char *data; +int len; + + if ((pkt = gwbuf_alloc(strlen(msg) + 13)) == NULL) + return NULL; + data = GWBUF_DATA(pkt); + len = strlen(msg) + 1; + encode_value(&data[0], len, 24); // Payload length + data[3] = 0; // Sequence id + // Payload + data[4] = 0xff; // Error indicator + data[5] = 0; // Error Code + data[6] = 0; // Error Code + strncpy(&data[7], "#00000", 6); + memcpy(&data[13], msg, strlen(msg)); // Error Message + slave->dcb->func.write(slave->dcb, pkt); +} + +/* + * Some standard packets that have been captured from a network trace of server + * interactions. These packets are the schema definition sent in response to + * a SELECT UNIX_TIMESTAMP() statement and the EOF packet that marks the end + * of transmission of the result set. + */ +static uint8_t timestamp_def[] = { + 0x01, 0x00, 0x00, 0x01, 0x01, 0x26, 0x00, 0x00, 0x02, 0x03, 0x64, 0x65, 0x66, 0x00, 0x00, 0x00, + 0x10, 0x55, 0x4e, 0x49, 0x58, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x28, + 0x29, 0x00, 0x0c, 0x3f, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x81, 0x00, 0x00, 0x00, 0x00, 0x05, + 0x00, 0x00, 0x03, 0xfe, 0x00, 0x00, 0x02, 0x00 +}; +static uint8_t timestamp_eof[] = { 0x05, 0x00, 0x00, 0x05, 0xfe, 0x00, 0x00, 0x02, 0x00 }; + +/** + * Send a response to a "SELECT UNIX_TIMESTAMP()" request. This differs from the other + * requests since we do not save a copy of the original interaction with the master + * and simply replay it. We want to always send the current time. We have stored a typcial + * response, which gives us the schema information normally returned. This is sent to the + * client and then we add a dynamic part that will insert the current timestamp data. + * Finally we send a preprepaed EOF packet to end the response stream. + * + * @param router The binlog router instance + * @param slave The slave server to which we are sending the response + * @return Non-zero if data was sent + */ +static int +blr_slave_send_timestamp(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave) +{ +GWBUF *pkt; +char timestamp[20]; +uint8_t *ptr; +int len, ts_len; + + sprintf(timestamp, "%ld", time(0)); + ts_len = strlen(timestamp); + len = sizeof(timestamp_def) + sizeof(timestamp_eof) + 5 + ts_len; + if ((pkt = gwbuf_alloc(len)) == NULL) + return 0; + ptr = GWBUF_DATA(pkt); + memcpy(ptr, timestamp_def, sizeof(timestamp_def)); // Fixed preamble + ptr += sizeof(timestamp_def); + encode_value(ptr, ts_len + 1, 24); // Add length of data packet + ptr += 3; + *ptr++ = 0x04; // Sequence number in response + *ptr++ = ts_len; // Length of result string + strncpy(ptr, timestamp, ts_len); // Result string + ptr += ts_len; + memcpy(ptr, timestamp_eof, sizeof(timestamp_eof)); // EOF packet to terminate result + return slave->dcb->func.write(slave->dcb, pkt); +} + +/** + * Process a slave replication registration message. + * + * We store the various bits of information the slave gives us and generate + * a reply message. + * + * @param router The router instance + * @param slave The slave server + * @param queue The BINLOG_DUMP packet + * @return Non-zero if data was sent + */ +static int +blr_slave_register(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue) +{ +GWBUF *resp; +uint8_t *ptr; +int len, slen; + + ptr = GWBUF_DATA(queue); + len = extract_field(ptr, 24); + ptr += 4; // Skip length and sequence number + if (*ptr++ != COM_REGISTER_SLAVE) + return 0; + slave->serverid = extract_field(ptr, 32); + ptr += 4; + slen = *ptr++; + if (slen != 0) + { + slave->hostname = strndup(ptr, slen); + ptr += slen; + } + else + slave->hostname = NULL; + slen = *ptr++; + if (slen != 0) + { + ptr += slen; + slave->user = strndup(ptr, slen); + } + else + slave->user = NULL; + slen = *ptr++; + if (slen != 0) + { + slave->passwd = strndup(ptr, slen); + ptr += slen; + } + else + slave->passwd = NULL; + slave->port = extract_field(ptr, 16); + ptr += 2; + slave->rank = extract_field(ptr, 32); + + /* + * Now construct a response + */ + if ((resp = gwbuf_alloc(11)) == NULL) + return 0; + ptr = GWBUF_DATA(resp); + encode_value(ptr, 7, 24); // Payload length + ptr += 3; + *ptr++ = 1; // Sequence number + encode_value(ptr, 0, 24); + ptr += 3; + encode_value(ptr, slave->serverid, 32); + slave->state = BLRS_REGISTERED; + return slave->dcb->func.write(slave->dcb, resp); +} + +/** + * Process a COM_BINLOG_DUMP message from the slave. This is the + * final step in the process of registration. The new master, MaxScale + * must send a response packet and generate a fake BINLOG_ROTATE event + * with the binlog file requested by the slave. And then send a + * FORMAT_DESCRIPTION_EVENT that has been saved from the real master. + * + * Once send MaxScale must continue to send binlog events to the slave. + * + * @param router The router instance + * @param slave The slave server + * @param queue The BINLOG_DUMP packet + * @return The number of bytes written to the slave + */ +static int +blr_slave_binlog_dump(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, GWBUF *queue) +{ +GWBUF *resp; +uint8_t *ptr; +int len, flags, serverid, rval; +REP_HEADER hdr; +uint32_t chksum; + + ptr = GWBUF_DATA(queue); + len = extract_field(ptr, 24); + ptr += 4; // Skip length and sequence number + if (*ptr++ != COM_BINLOG_DUMP) + return 0; + + slave->binlog_pos = extract_field(ptr, 32); + ptr += 4; + flags = extract_field(ptr, 16); + ptr += 2; + serverid = extract_field(ptr, 32); + ptr += 4; + strncpy(slave->binlogfile, ptr, BINLOG_FNAMELEN); + + slave->state = BLRS_DUMPING; + slave->seqno = 1; + + // Build a fake rotate event + resp = gwbuf_alloc(0x34); + hdr.payload_len = 0x30; + hdr.seqno = slave->seqno++; + hdr.ok = 0; + hdr.timestamp = 0L; + hdr.event_type = ROTATE_EVENT; + hdr.serverid = router->masterid; + hdr.event_size = 0x2f; + hdr.next_pos = slave->binlog_pos; + hdr.flags = 0; + ptr = blr_build_header(resp, &hdr); + encode_value(ptr, slave->binlog_pos, 64); + ptr += 8; + memcpy(ptr, slave->binlogfile, BINLOG_FNAMELEN); + ptr += BINLOG_FNAMELEN; + + /* + * Now add the CRC to the fake binlog rotate event. + * + * The algorithm is first to compute the checksum of an empty buffer + * and then the checksum of the event portion of the message, ie we do not + * include the length, sequence number and ok byte that makes up the first + * 5 bytes of the message. We also do not include the 4 byte checksum itself. + */ + chksum = crc32(0L, NULL, 0); + chksum = crc32(chksum, GWBUF_DATA(resp) + 5, hdr.event_size - 4); + encode_value(ptr, chksum, 32); + + rval = slave->dcb->func.write(slave->dcb, resp); + + /* Send the FORMAT_DESCRIPTION_EVENT */ + if (router->saved_master.fde_event) + { + resp = gwbuf_alloc(router->saved_master.fde_len + 5); + ptr = GWBUF_DATA(resp); + encode_value(ptr, router->saved_master.fde_len + 1, 24); // Payload length + ptr += 3; + *ptr++ = slave->seqno++; + *ptr++ = 0; // OK + memcpy(ptr, router->saved_master.fde_event, router->saved_master.fde_len); + encode_value(ptr, time(0), 32); // Overwrite timestamp + /* + * Since we have changed the timestamp we must recalculate the CRC + * + * Position ptr to the start of the event header, + * calculate a new checksum + * and write it into the header + */ + ptr = GWBUF_DATA(resp) + 5 + router->saved_master.fde_len - 4; + chksum = crc32(0L, NULL, 0); + chksum = crc32(chksum, GWBUF_DATA(resp) + 5, router->saved_master.fde_len - 4); + encode_value(ptr, chksum, 32); + rval = slave->dcb->func.write(slave->dcb, resp); + } + + slave->dcb->low_water = router->low_water; + slave->dcb->high_water = router->high_water; + dcb_add_callback(slave->dcb, DCB_REASON_LOW_WATER, blr_slave_callback, slave); + + rval = blr_slave_catchup(router, slave); + + return rval; +} + +/** + * Extract a numeric field from a packet of the specified number of bits, + * the number of bits must be a multiple of 8. + * + * @param src The raw packet source + * @param bits The number of bits to extract (multiple of 8) + * @return The extracted value + */ +static uint32_t +extract_field(uint8_t *src, int bits) +{ +uint32_t rval = 0, shift = 0; + + while (bits > 0) + { + rval |= (*src++) << shift; + shift += 8; + bits -= 8; + } + return rval; +} + +/** + * Encode a value into a number of bits in a MySQL packet + * + * @param data Pointer to location in target packet + * @param value The value to encode into the buffer + * @param len Number of bits to encode value into + */ +static void +encode_value(unsigned char *data, unsigned int value, int len) +{ + while (len > 0) + { + *data++ = value & 0xff; + value >>= 8; + len -= 8; + } +} + + +/** + * Populate a header structure for a replication message from a GWBUF structure. + * + * @param pkt The incoming packet in a GWBUF chain + * @param hdr The packet header to populate + * @return A pointer to the first byte following the event header + */ +static uint8_t * +blr_build_header(GWBUF *pkt, REP_HEADER *hdr) +{ +uint8_t *ptr; + + ptr = GWBUF_DATA(pkt); + + encode_value(ptr, hdr->payload_len, 24); + ptr += 3; + *ptr++ = hdr->seqno; + *ptr++ = hdr->ok; + encode_value(ptr, hdr->timestamp, 32); + ptr += 4; + *ptr++ = hdr->event_type; + encode_value(ptr, hdr->serverid, 32); + ptr += 4; + encode_value(ptr, hdr->event_size, 32); + ptr += 4; + encode_value(ptr, hdr->next_pos, 32); + ptr += 4; + encode_value(ptr, hdr->flags, 16); + ptr += 2; + + return ptr; +} + +/** + * We have a registered slave that is behind the current leading edge of the + * binlog. We must replay the log entries to bring this node up to speed. + * + * There may be a large numebr of records to send to the slave, the process + * is triggered by the slave COM_BINLOG_DUMP message and all the events must + * be sent without receiving any new event. This measn there is no trigger into + * MaxScale other than this initial message. However, if we simply send all the + * events we end up with an extremely long write queue on the DCB and risk running + * the server out of resources. + * + * To resolve this the concept of high and low water marks within the DCB has been + * added, with the ability for the DCB code to call user defined callbacks when the + * write queue is completely drained, when it crosses above the high water mark and + * when it crosses below the low water mark. + * + * The blr_slave_catchup routine will send binlog events to the slave until the high + * water mark is reached, at which point it will return. Later, when a low water mark + * callback is generated by the code that drains the DCB of data the blr_slave_catchup + * routine will again be called to write more events. The process is repeated until + * the slave has caught up with the master. + * + * Note: an additional check that the DCB is still above the low water mark is done + * prior to the return from this function to allow for any delays due to the call to + * the close system call, since this may cause thread rescheduling. + * + * @param router The binlog router + * @param slave The slave that is behind + * @return The number of bytes written + */ +static int +blr_slave_catchup(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave) +{ +GWBUF *head, *record; +REP_HEADER hdr; +int written, fd, rval = 0, burst = 0; +uint8_t *ptr; +struct timespec req; + + + /* + * We have a slightly complex syncronisation mechansim here, + * we need to make sure that we do not have multiple threads + * running the catchup loop, but we need to be very careful + * that we do not loose a call that is coming via a callback + * call as this will stall the binlog catchup process. + * + * We don't want to simply use a traditional mutex here for + * the loop, since this would block a MaxScale thread for + * an unacceptable length of time. + * + * We have two status bits, the CS_READING that says we are + * in the outer loop and the CS_INNERLOOP, to say we are in + * the inner loop. + * + * If just CS_READING is set the thread other may be about to + * enter the inner loop or may be about to exit the function + * completely. therefore we have to wait to see if CS_READING + * is cleared or CS_INNERLOOP is set. + * + * If CS_READING gets cleared then this thread should proceed + * into the loop. + * + * If CS_INNERLOOP get's set then this thread does not need to + * proceed. + * + * If CS_READING is not set then this thread simply enters the + * loop. + */ + req.tv_sec = 0; + req.tv_nsec = 1000; + spinlock_acquire(&slave->catch_lock); + if (slave->cstate & CS_READING) + { + while ((slave->cstate & (CS_READING|CS_INNERLOOP)) == CS_READING) + { + spinlock_release(&slave->catch_lock); + nanosleep(&req, NULL); + spinlock_acquire(&slave->catch_lock); + } + if (slave->cstate & CS_READING) + { + spinlock_release(&slave->catch_lock); + return 1; // We cheat here and return 1 because otherwise + // an error would be sent and we do not want that + } + } + slave->cstate |= CS_READING; + spinlock_release(&slave->catch_lock); + + + do { + if ((fd = blr_open_binlog(router, slave->binlogfile)) == -1) + { + spinlock_acquire(&slave->catch_lock); + slave->cstate &= ~CS_READING; + spinlock_release(&slave->catch_lock); + LOGIF(LE, (skygw_log_write( + LOGFILE_ERROR, + "blr_slave_catchup failed to open binlog file %s\n", + slave->binlogfile))); + return 0; + } + atomic_add(&slave->stats.n_bursts, 1); + spinlock_acquire(&slave->catch_lock); + slave->cstate |= CS_INNERLOOP; + spinlock_release(&slave->catch_lock); + while ((!DCB_ABOVE_HIGH_WATER(slave->dcb)) && + (record = blr_read_binlog(fd, slave->binlog_pos, &hdr)) != NULL) + { + head = gwbuf_alloc(5); + ptr = GWBUF_DATA(head); + encode_value(ptr, hdr.event_size + 1, 24); + ptr += 3; + *ptr++ = slave->seqno++; + *ptr++ = 0; // OK + head = gwbuf_append(head, record); + written = slave->dcb->func.write(slave->dcb, head); + if (written) + slave->binlog_pos = hdr.next_pos; + rval = written; + atomic_add(&slave->stats.n_events, 1); + burst++; + } + spinlock_acquire(&slave->catch_lock); + slave->cstate &= ~CS_INNERLOOP; + spinlock_release(&slave->catch_lock); + + close(fd); + } while (record && DCB_BELOW_LOW_WATER(slave->dcb)); + spinlock_acquire(&slave->catch_lock); + slave->cstate &= ~CS_READING; + spinlock_release(&slave->catch_lock); + if (record) + atomic_add(&slave->stats.n_flows, 1); + return rval; +} + +/** + * The DCB callback used by the slave to obtain DCB_REASON_LOW_WATER callbacks + * when the server sends all the the queue data for a DCB. This is the mechanism + * that is used to implement the flow control mechanism for the sending of + * large quantities of binlog records during the catchup process. + * + * @param dcb The DCB of the slave connection + * @param reason The reason the callback was called + * @param data The user data, in this case the server structure + */ +static int +blr_slave_callback(DCB *dcb, DCB_REASON reason, void *data) +{ +ROUTER_SLAVE *slave = (ROUTER_SLAVE *)data; +ROUTER_INSTANCE *router = slave->router; + + if (reason != DCB_REASON_LOW_WATER) + return 0; + + if (slave->state == BLRS_DUMPING) + { + atomic_add(&slave->stats.n_events, 1); + blr_slave_catchup(router, slave); + } +} From 29d247319db25a6a1a9a36280bb858493af4783d Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Sat, 17 May 2014 07:25:03 +0100 Subject: [PATCH 02/11] Fixed issue with bin log event straddling buffers --- server/core/.buffer.c.swp | Bin 0 -> 16384 bytes server/modules/include/.blr.h.swp | Bin 0 -> 32768 bytes server/modules/protocol/tags | 62 ++++++++++++++++++ .../modules/routing/binlog/.blr_master.c.swp | Bin 0 -> 36864 bytes server/modules/routing/binlog/blr_master.c | 9 ++- 5 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 server/core/.buffer.c.swp create mode 100644 server/modules/include/.blr.h.swp create mode 100644 server/modules/protocol/tags create mode 100644 server/modules/routing/binlog/.blr_master.c.swp diff --git a/server/core/.buffer.c.swp b/server/core/.buffer.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..5f600ef2ff6dc87493b9452064f6743ab0cc4940 GIT binary patch literal 16384 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 YM}p%gF&8uw35pqTq?Y6>K;6Iq0BzW$Ok( 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�Y#92V|@RG`<9>-ceSrK*k+GTX#WAS2z)_fkgpC59RCl z5Eg;r0DXlcq>mC0YF$9R3r;T}p9X>Qd2xwCq5?=3mX0ABV4WJoqC{9-MPuKcOBxj56~;QyY+b7_cwm z^l=RF^fRP!XhAH&7FOWG26R^ws-rzr6uEP-p)c;Xgq7N?egPgyH11rL!C2s8&! zlP|R>9;BMU%Gcn~P};AB1KEK)$iM*y$s@(k9yC};M?ndc0vx~|2m8fVUA0(U32_zy z$bS%xuq=+UY7iuid%++ig@G0W#)I5PAe?+bYG|Ccz;@scCneCJ0j>puAm_oB3}Ow8 f^peb!_}u&y(9#|}$p^j=n?QJg)PdG(BL@ipZ-R3D literal 0 HcmV?d00001 diff --git a/server/modules/routing/binlog/blr_master.c b/server/modules/routing/binlog/blr_master.c index 46b2ee7b6..a60145f9e 100644 --- a/server/modules/routing/binlog/blr_master.c +++ b/server/modules/routing/binlog/blr_master.c @@ -110,16 +110,17 @@ char query[128]; * We need to make sure that incoming packets (gwbufs) are * strictly processed in order and that we do not have packets * from the same master being processed on multiple threads. - * to do this we create a queue of the GWBUF structures and have + * To do this we create a queue of the GWBUF structures and have * a flag that indicates if this routine is processing a packet * on another thread. Items will be added to the queue if the * routine is running in another thread. That thread will read * the queue before returning. + * * The action of adding items to the queue is protected by a * spinlock and a flag that inidicates if the routine running * in the other thread has reached the point at which it will * no longer check the queue before returning. In order to - * manipulate the queue or the flag then router spinlock must + * manipulate the queue or the flag the router spinlock must * be held. */ spinlock_acquire(&router->lock); @@ -384,12 +385,14 @@ blr_handle_binlog_record(ROUTER_INSTANCE *router, GWBUF *pkt) uint8_t *msg, *ptr, *pdata; REP_HEADER hdr; int len, reslen; +int no_residual = 1; /* Prepend any residual buffer to the buffer chain we have been called with. */ if (router->residual) { pkt = gwbuf_append(router->residual, pkt); router->residual = NULL; + no_residual = 0; } while (pkt && gwbuf_length(pkt) > 24) @@ -420,7 +423,7 @@ int len, reslen; len = extract_field(pdata, 24) + 4; } - if (reslen < len && pkt->next) // Message straddles buffers + if (reslen < len && gwbuf_length(pkt) >= len) // Message straddles buffers { /* Allocate a contiguous buffer for the binlog message */ msg = malloc(len); From 9777e83a5a11c80735a02329df30865b6c9f1acb Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Mon, 19 May 2014 13:46:47 +0100 Subject: [PATCH 03/11] Merge branch 'master' into blr --- Documentation/Max Scale 0.6 Release Notes.pdf | Bin 0 -> 61946 bytes ...cale Configuration And Usage Scenarios.pdf | Bin 386590 -> 148433 bytes .../MaxScale 0.5 Release Notes.pdf | Bin README | 2 +- VERSION | 2 +- build_gateway.inc | 39 +- log_manager/log_manager.cc | 10 +- log_manager/test/makefile | 5 +- maxscale.spec | 8 +- query_classifier/query_classifier.cc | 133 +++- query_classifier/query_classifier.h | 20 +- query_classifier/test/makefile | 4 +- server/MaxScale_template.cnf | 2 + server/core/.buffer.c.swp | Bin 16384 -> 0 bytes server/core/config.c | 60 ++ server/core/dcb.c | 7 + server/core/load_utils.c | 23 +- server/core/service.c | 72 ++- server/core/test/makefile | 4 +- server/include/config.h | 8 +- server/include/gateway_mysql.h | 126 ---- server/include/modules.h | 2 + server/include/service.h | 2 + server/modules/include/readwritesplit.h | 6 + server/modules/protocol/mysql_client.c | 19 +- server/modules/routing/Makefile | 16 + .../modules/routing/readwritesplit/Makefile | 19 +- .../routing/readwritesplit/readwritesplit.c | 570 +++++++++--------- .../routing/readwritesplit/test/makefile | 14 +- .../routing/readwritesplit/test/rwsplit.sh | 78 +++ .../test/set_autocommit_disabled.sql | 7 + .../test/test_after_autocommit_disabled.sql | 2 + .../test/test_autocommit_disabled1.sql | 7 + .../test/test_autocommit_disabled1b.sql | 7 + .../test/test_autocommit_disabled2.sql | 9 + .../test/test_implicit_commit1.sql | 2 +- .../test/test_implicit_commit2.sql | 2 +- .../test/test_implicit_commit3.sql | 2 +- .../test/test_implicit_commit5.sql | 2 +- .../test/test_implicit_commit6.sql | 2 +- .../test/test_implicit_commit7.sql | 2 +- .../test/test_transaction_routing1.sql | 19 - ...ng3.sql => test_transaction_routing2b.sql} | 7 +- .../test/test_transaction_routing3b.sql | 7 + .../test/test_transaction_routing4.sql | 9 + .../test/test_transaction_routing4b.sql | 9 + server/test/makefile | 17 +- test.inc | 8 +- test/README | 3 +- test/makefile | 8 +- 50 files changed, 829 insertions(+), 553 deletions(-) create mode 100644 Documentation/Max Scale 0.6 Release Notes.pdf rename Documentation/{ => history}/MaxScale 0.5 Release Notes.pdf (100%) delete mode 100644 server/core/.buffer.c.swp delete mode 100644 server/include/gateway_mysql.h create mode 100644 server/modules/routing/readwritesplit/test/set_autocommit_disabled.sql create mode 100644 server/modules/routing/readwritesplit/test/test_after_autocommit_disabled.sql create mode 100644 server/modules/routing/readwritesplit/test/test_autocommit_disabled1.sql create mode 100644 server/modules/routing/readwritesplit/test/test_autocommit_disabled1b.sql create mode 100644 server/modules/routing/readwritesplit/test/test_autocommit_disabled2.sql delete mode 100644 server/modules/routing/readwritesplit/test/test_transaction_routing1.sql rename server/modules/routing/readwritesplit/test/{test_transaction_routing3.sql => test_transaction_routing2b.sql} (80%) create mode 100644 server/modules/routing/readwritesplit/test/test_transaction_routing3b.sql create mode 100644 server/modules/routing/readwritesplit/test/test_transaction_routing4.sql create mode 100644 server/modules/routing/readwritesplit/test/test_transaction_routing4b.sql diff --git a/Documentation/Max Scale 0.6 Release Notes.pdf b/Documentation/Max Scale 0.6 Release Notes.pdf new file mode 100644 index 0000000000000000000000000000000000000000..418572497c7fb0e8e62e4a80ba6de37d4b84b471 GIT binary patch literal 61946 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 literal 0 HcmV?d00001 diff --git a/Documentation/MaxScale Configuration And Usage Scenarios.pdf b/Documentation/MaxScale Configuration And Usage Scenarios.pdf index b870677a3c92bd9593fb7ccb8ff57cf1fa382d99..47a24088f6d1529b95fb686ab3b91973ae774c54 100644 GIT binary patch literal 148433 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

LfGn=JwR)4&AGqj7LuX7QK9X_o*qqeNV4H{oZh2 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 f@ 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%0A(|3MU+vv-v5gfkQJBdB^ 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 A4h-O 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%0DV@WJU_a&wgO`C6Ysg-IJ* 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ⅆ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%0AAy@igwA{Zy6Z_cc80 zGT%&kl5$ORkLt;jYaUk=?>M<;c17_H>9gC{eYU^kW7>Di)!+Jb%Cwz(I_9QKW3*lW z?48N0udytO6EX^)Fh75P$z!&BU8K333fC3mbtcR9M&0?>>YZmUC2AG%{-KqOb2|6E zt9NfstdQN)Q`KsHX1&*e)R>2SyXT3m4EOvjy3jsm+Qhl3AO3!O8Nd5z@s`74ild(H2Jn@zd-Ht-KTgbYpNB^#vy4mydl|LEof4S{fO_Qi~ZLgjya-`cr zJZrrxSB3;FCj#CtF7egEj)*Kmc$OD9&I`@~}HW9!noUdo+~@4=aPM#1HW#DCr{ zIN@$8?`qp1;r?{p&yRNlV&+W@6*ciX_u=}z!_%5gYo$%sOg}j1 z^Mv?WLhj45gqtn=&(E8&^I@vs@l{37<}c`s{C2MMy479l39|pRGm`49x*9G9-M=Xo z!_qVDm)!ZcoU?BH`J$eYB+jMWD1H9%&+KTQ!Yvw>%9hov@j0`8vV^_a`Aj&%ko%+b zmGpVXSLJnAs!z$yUc2-)$p3z%pf?POPaW%2CNzPiZJ)6%`Gial0m-TYT#QnYK;w7EM^ z-F?fv9rCpqbj@Y$;#ra^46xk|K~m5Wi#(4tM&7sed@atR_-ch z{H2w#?`y&?FWEPx_4mHq%5eFkb|P5gko4&^OP+b>7CXN3TYQl>qqg(u*|HU@kGC#8 zS;o=7#xKS1&dy^hQZifgeS>xvK6rb(@WKkdtseSq$#e2guuh7%f1)hE-eYRU2G?!* z;fh_Gn1ZEyon#pPH*fIT=3L>yeXOo;anuCEre^{RSFv)fK6}EPaIQv?Ns?2x0vhahy0On|9Rcu)aRdX zZ%sdLJ8k#(w;C5Xcg~x&@ZRv)sj}>}^KzdVM_V?NYYWCi?TM%FYs0 z*)o02!UN&!*M87gs(yS`g?C|TV(xQ`c)6Bk`Df=4TzuH)~c;bE2(^;xJ zYNsEWJSkGF>gB!dhfR6*s=iOjyt8dXee@;ybFj7-+%pc!GpPA_dH+0yz8H>ugBM?8}B>m*D6+Lws`V~YO}?2-_)2d zmNdOEC;8ldkT|xh6cE_y4&mpWdYNde0wz z_xif0FaKxp+y8sKe*d5I`agU>CjNPp|NrOd{r`XD|M?XBxnXbJkI=6R8Sni+Fu(ry zbvlo0h{A)X( z_F4IirT726oF4!G;NK5FkI(=2r+feQN5PBgTjKwHonBw0x2yi&$L0TT{j)mWU;O2| zw2v3hGL|OJ+V+z(4~G0dxZmc(pT2`8?gl$&XK(d0FnwpR&}hazj%8b!+b#;n{Iz(` zXQO8%5zle#db9ohbOS|UAD-j)B>A0vSSFuhJp4^g=;KZC`U4_tlRMAvn^z%G@1$t= zdva@ig2L1rGIuJM%z5IK!*_gLQ@TR$4xeaa%Nw1i73V(r^Q@(_Z-pVvrcTAC$rJAH7D1$GO4)hc`84Tn!xN}ziWX@ zJaYV&&dyd%D$csND@Idzc5wc+r(QE}%&Fa?7p`^Wnarxvok6N*&qdbUo+`D`@;P(= z^Xm6Up2wU&eXeiH7Mp`xk}mp0|Jw10&!+P+=aJ_{S_O4`i&X5ygTGd*u0kuk+vj zxcE-m_FO${`EFZ#t$Gm4ysWxzQCaf#=kB)azy7gNXxz{F`sc-qHs|~It^WGwMNHiJ z{;F5EKQEs5>)W3d%lFyZYuO_6xZB=m+uFZcnSZ{2-}kS7T;4v)Ki^-qSY^yTlPg?^OWA%v-2VFOUDV-|^{o z{XIV0k~<4c559VJYHiF8CMCOL@AxDVbtXpMv^|%6ki%JHhrjZ|jft<8f05yr$a^p` z*3;Zn_RE#@|Mqds5{>&slFu*H%;Wv$!+((R@OI#IK6RN#f}%Nrr+z|`Xh9Cs@>WtS?{!;`xo3*ndxG1ZBqYI3!jzqUwzDz zyuFHb-mykEo5dyBMVx9)mUz^+01#)WjABAFLoAH{jm007MS;SiorLH-sdw8e&~?dTRUIm zPNCSJg&b3V1Us2ldOUx3b6ecKH$_b+)MtmSQk<>sUkh4N zE(zPttup5~nPj!#wVZBa{}R3+-J_5EmONip-}+LBfBT`APy5$ZdsieaoP5GA(n&&l zqxxJc=Lmt47klSgId9k?SYOmRO~5UPqw}F)qwS_=QD2Vl+aWs5BlF9>O{H1F{%@$ep|UN&096) zN9y4@mtUT|SKqY$S?&3K^+k5R(~c+?so2+Acw6xspY->5x##p79ix+OsRl{$6MDlY z?OgAZ{WN2ij^w6`=a0v_=)Bxmz~gqod0$!A*&3GO(=5eO3{7d5q>tV#H<*0yg{Io; zIFV0G&erewu9vp*a8@y&-5qRmGUEKQ#NZPi9Di%rEYGT5+LvUJI`3u6B(1&H2d9Ky z`uIg`&iC%qiHf&3EJ=`xN@<)l&;Q%Kmv?IUmMsh|csF{b74>eMa`jo%zv+S>`@{CDYy~3%6ym@v8HhnKV zqecIG)tZUsVSdk+9(?(ylQk$5zC0bpRj9s zMMcG#i4$dNEE0B9KXBitE^lz>Y(q}ZpUd0y^K#gC_@A@+F3@4WRCThP)%SO?hA$gg z-xL{NS8Bg;RYIqdZ^I->xrZ(XYLhBbj(jfsDJD13wLT^w)XYis-<7gc63ZnmUD=f9 zDwpqW&DK5Vys1cUd%)iKj>>N@&g^wR;lKXst#FmS6PGD3d)3Raz0xY_S5(35;Pq-} z3uadvO!rEe;^&^T@F8DF-5k?U9_7ljb_S-$WW^*7$hfumb)LN%?#=Vi;b+A=@0?l- zce}{zB^K_AVclmhTP9^W9|=D>p>O#u0Y6?z%cYxMA5ETD(6#^I5si-qq0?Vzo>=GV zz4gGy%$s4lo$HFccShOxv}WY7TPnH4KD2+DvuWp{dah;1d_@0Ew(grEK3&DdJ1rwr zw6}%Fea+FPlN{{V^Da$3dF-Ui4%JmFTvp7BlztN`H%r1YG59yV{DUlsh~@+i@A zEz84nh2WqZZ>982=CZrvWc=IYkA-mGw=U}0I_J@6Yre@xqYlkqedO?)^Wig3Mzs0g zS^Sgh(&E3IN4GJY5Kz9aF)LeilSK>jdofk7r{A(-xW%%z~?pYq?zx3Da`5*XB z`B$*>_iXudxV>kS@Okg93hn(kB{;c-3Od+JosX}JrB2N2L{7i?Hy}DjZJ%3s7;`J^Uf19Q4w_kI< zTu`=Q=6*ZH!**p??^Lzb%J^n^+`K+>VP!(a*^(9hZEkxT7TQYA+N$eURBvRGt(&*m zYR0370%?iYt!|063qG?t^RH$@_cx?2qudN1?O+PP3f`ICj|ER(}a(hb&| z?X{n}P-Cw`Xk4^uzWAGe^CtJE-}rklT1bAP?&Asz{)rx`UpV9@CGD)?ncL2*=l}BA zK98SECh^(Wn9Eszin+SW^029fZA7$tC0pmBmF2>FEqf21c=br>+M_PLiAjq5CbP3A zc9^m$ze&C%Wp{jX+B>NWyIs=Oo=lrkdEu+&RGahcqMrRX!fO|{zvte^*#2-G*Ub*y zir`+w{GzAN#OiCFg;C%j>AdArKw?X28&UYFOsezwZQm&q(V_28d*heJBs)y2b@ z7G(-;P*o6n9F{woE@j*u78|zyzSc0V0r0Xnaf|l&UJpBaZA|xdjIOl zjt`5sedzh)EGPNXm9N}6VAj!uCDKgJmnyqk7n@{DEwQo{T-e_`)B*ySpBSi=O51kK2ykzbh{V9%Xk84WD{0 zs(W`ei2GCKZm{U)4}+ zo%@~Uc>QP;?29^AE_$lzpfyU`)28YZY47*Er zCcWSOaZ!>d-@=D+x@w0_XB<22q^z|nK|M5o(ZR}dFE(m5Z}{c>>8gsQ?Zv36Cp9l# zOTY5H@#oqPJRQ$6HC7fGYORuxyLZoW6WiHzZ@q-C-vwrOE@xggH@lEo;CSdc^>*vt zo2R#?sEYJx%In^pd^q^%VlFM6U*{59=Jpz|{dwi%p+)-h3%dC8XGn53Mpi7z*H$iw z(^=b89aX5eWj_8_g6W+!?T=xC*8kQ5nr^Bu?Zek4A ziN1UF1Y1q>!t&S$58ccpznq=_tM$XjgYhdDe2S$!xYC)vrIk z!u+Wsk|M~l0gWyz$pO-Cr42~>5 zqI^rzugJwsjH`1Geh`?UzFODFW>YUyXn=)fbDCA``Gl6_fJf ztGbWhYppk3qxqwk?QDw6@(279GY_AXKPLCm`rz}E&o(OCUhaOa|K_Ll>{U^vUA!A+ ztrF|G7qayr$J(I0+z$sl)=qji``>{R$5yLd6Pg)V^gf;Wx*NZE>88Im&I~z+m5nBr z?>Km%Ipz|FYEH$DYp%}=ElvuaJ$ZspNpR;v!AtFL6nvtX`MuaBr?-~JuUq9g_q2!6 zxm71~H7BOzgl{T}_6||Fcd(zgt@^1yQ{eq7j=!sBUHRTB_xwhi(uJ3vD`x2&zjxH8 ztt8y#)g&t|cF8l@PZgrQ->kmFoA>K&)YaBs8`r;bYMxhSzT@SkJwX$tdsgVV9G%a7 zEw}$&p4jD|HoMkU|7&W$#-&BT>o-U>>Yl$ZAB?>zRb4SG?mBgh%}Q?*|u+zNBe$WvD@_U zPVJ);H(plzzYvo7XgasObIXmM^^(~Wf1J^?h;3HRn<&u}!7X`Ku=%p-j}sYvJ#$$v zukSNzKA#e|wdh`%qw%JxN3U^kK3tV?|C`|dg5|Nwd-9GLuKp}mZ?w1IOT|nxZ#S9E z^RCYopRDlD(AO!{vj4;J46EBG9y)eTykL`9q0uF$S2bgX?V&^uRTjR(FCBMeo$0zX z)#lRFvta>?`wYKj6m3}CwmD?7%$IMfm#;WHNMc)UX0qt$Yre3TPekgs&w06PXUp!V zKKFlVB!c3vD|yMBJgnMIdh`S{)J>^rum;*@4Ro7T!7ClXwm#U(jz&eRWAwca{q zUYtaRd(N(`FT%n#l3fe47qzYMD|;NUtL)F=|57{GvntoFHr)9p~Od zjT+tTud*Gkwe2x~U|=(~`-@h)prABQhUEM5>nxY1AFqBfYl6+n;AY#mdiHmwRY}T- zOZI%Z_-@)F-u@ZUUeWX2{x?0GEIaR{_^&9B^>KZT`@(kIUht(>aqlaMo;457guh(s zXe?vErX0P!E5h4C>!)9!^p`uS^SE8675rNL_*BHIZ`l^dw&}iGyzpGt!4K)>J!?2D zqqZwq@jOZ}Sk&_QTwA`uo$XF#r72fSFFHJ%qI0tOndp)$rJ?=j`L0G>Y`U22D&1q% zkbdw5bA_4BqVr$m4kWMn%Jbl6LIvv&PyY52Nv;lqiSo5X^4 z2ujN>T=mD)`&0sd)?|0(%WduX+>DHD%G+8S7?LE|PR`w7lO*x$+H|YS{z)aP`*yF$ z*Z#5lN!8)QSC23LWLEVfmgnj3sEeIjkDS?4Q6807;bOx%)#yV_&(;TPd+Q8iXECd+ zNy&dFtCe4pBUP>c^wp~?{k9V_?RQ(5OZ>}msBsHlt|xt=``+@bOFh?)h42@O89Ld_ ze0#+%pLtpBm$Q$Gk4(N z(+xsgowHURPKX=c36sSG}~%by15ZK1lwwTIW^5J0-=r^IAR{F80V+ z?9MXxLR!@9qw@oGf^SxKHcZ;zB=PHBppJ2~1l!q{d5Tx(H(hK!y>64tCEx6iul2f8 zm3Y48ePUlKx>)MSf}M9=uOGX2JG3Ns!-mDvG-mdH>hQiA?A&>vdw2J`uUi9L?Yq~N z_I7IhiY&=JaAfz3sC461FVYpaI2JptXqL3Mnbs!In!U_S=5l-1wvP%u6a9SEe+0j{ zarvcmsUQhUiNhTufW;m3*5!0m2dd)p(lF} z_c?QkJf-EkAM9COC!+J;(sKFhcQtL(8)x`mcV_pWR&n_7*^f;ADsxTtix{2RlM{aT z=hgLD7cO70zumlZeOssb3b#Ag9!;G3Z-@4-|2>91%KWoF%t-K5Nm*TAzh4 zt6ngy?KV{FerC9G*|TQ*JJaS&&YE@9$z<`aX_HGulqX$`+1OX&Vzg}Ug2Ph+d5Sg! zESq%krev3=v5@KIvgisIt)20Sjl6Cmb1p~mxa}yGy=)%5^@p(RF8kjH)Bo$YPpX_N z)^Gdb`bR18{mdsj9+>L?JFukI=MlptwPW%QF}-(`ANwA9Kl3B|1T&L=H}2l{QTOS! zZ?ITaowJ9t+o9PZ07IE-v}QcsTX_JlXt@pXB87i(bx?+t17@ zr?BVv@%Ik@=DcF_eE43WQT%PU3 z)r6-{uOD4={hqM@s$HjF@4Vl5uT1jewD%54)00hNJJbd4r#hS!XP#6WUny2H^R%G8 z+uRp?DsmUTxb0YBu~$cQvRcn32gO^AU(8N7G4DOfDt%}!yINd(_~sbDYff=f)7U3e z{7zpv^JL?_<1swlQx6`^OqWS1RzCDQGb2L%d&um_KXs?h`pkM)wK>_c@8ztBM8gE1 zk7)))GDoM@TQ7R!vi9klkjuAV zNsrB1;STn~3(fC-@`|%2Z}5>&yEwm1!>G+T!o+pU!ep!FqfLf4*KO8TU*sl{8-A(N z(?#Us+P+!plhu3_R9dNwIu3CY=NoV9z_U!fiWspg53-(+kI zn8EXbO+TcS<$T!VV4({Ok2Jbua4(Hk4Xd^^+US&b_D+o2^i4$ymgo8ImeiEn>@iIf z-casWGH+qN;jN^ZhI1CwRdOG@Vck<_{8H{Q=Z&*dz9!9`V$3eYnk>;ap}X?9yQRdj z{WDD#%B}hE`gDJv%&KQUzCJC~^V#NoH;(V1rBV9~i;wH{T~eiuD_p;Z>|l$IHVXHc z6ZL>iUtV$Ey^Ke@y`b|pFFX>tnary6+f=F!c6zgRc5Cu(|;dbo61i3JD*`x*)wak^0SD(*Atf%InCC-ziBu5V!`$O zGTg7W2kc6d^VaScUMlaspUZpA(}2$gTHb4(3Y?d8jPGVW{8O;yvxjTNVo#rw6^lKu z#K#^?oV?6XZt0vLg+sd*H@xSbeJb>9(z>v9MPkLp$xdCmzKp4L3sYxLov~3iY2(Xd z6W&hR-I?igAx(udSVnkDY|pc-!xuev&NyVk_HN;hbB`QcGNkV>w=(#+#Oltq)1EOV zh3!1b*Jg%zrL%nIFWwa1oZqcCpSi<2_e1pRvnoEmpAU*H_v6H3RVpj@;>|9l%s^&^#ywE zv`+ugnsKf_(M@ds$GMAqzV)4K5L&1BRn1pJ-f88e(ptm7^@#?PN^4Ks+MbNji_eXG zRa_fS-DO#>` z{eSQY*h%eS-do3UqI%n%+YA$A&ObdOAS#kruwc7ZkG1GTlb6z|5;K0MCmm8ZR<@46 zxc>dSkd{-YE?%x*sx(RMmH)`o*J{8;x>gj;dKj6 z{W`U9#UHuUYdhzi=HzF5Jh%A8w|B3uKFAZ|licxU%~lzG_m^==Ld8sO@pWgPwMzB= ze6#FB$G-i%xuq*#OkcS69gpdy?SZQ=8@~x{^W@ps{ZW0IbnW*X%bOwn>v^tbyysJX zB7Obro$CjrMfU1W-TZxD{mt0DS(nZ}O<1E6|7LRY)%~H-6?0@ zO!%MVuxX9t&-GcaKTPcBoSSJm@87`}KjO{?OIk`dc37u=Ty@OOLrC>fxaGF5UAFOx zo0gQ9JWHQ{_Oom;d+lc4yfo-nQe=<+zN%$9_hME)nq52hf!Ej5j6qLX)?Jya9NfFw zaPA!Dy}N?uW==5=UsYGR;DKjr-u`{(Yl^&I9+;TbcU$bv?IxY2Iq&6@4kbKEk2PGr z;8sd_%73Hp^XjzhLqfz~zPn-Hu%n(~yDvlGYPr1Gv(`J3(eI@ao)dyG`NS@+m3*dw6#*+b)I_QgHyhx4=h=5odJ zrGB#8RDGcQ`m3D3rv0p~pJY7hzHL3P$N1VU@!hWsVT%Tr>er^>XIQwdCm6ntNQwxp ze#OYY{mrVa!I1`+eB&G6`P)R+RPFniB3s~M_L1xV>hj_*%a7%GKPxz$)V1uH{?Vit5(7Y90 z4zE_<2}m!WFVDY0pqDXYpV6cWuV?e}(qcc_xP4omC3mM}yVC~4gLilFSeF(*p1ppi zbmAga(RiH%hc)$qnYvu7mpYzNu8QhzisIg}Rg873UUs%FSC-_BYf)PmI~C>pvnOu6 zlcjrU`t7K0u?ga(Km4;VZkzL4bKfe?({tBng`PTheL?KPx$E6zFFbm^%J)&*^JC$A z-();q9mu}r$Exd$xiz828PTVwZM>6pQ|NT9wW2NO#<>&bCEfJ%V87+(@zv|Q@TJRk zw>ektdtK+`mXWsu zA7ad;%1%7-)Hvq zRsQy0j6#c_Y>VETA+&Vr>o9$vq#ZwYUFGh`o>jV9{O%$5*zHw}g}GbuzCN1tqwC|Y ztFIR3tlcCnkk4AA{QA5>;rxrj`~B7M(DDDW4!8d7m-Uck*ul&iXy5egmY~dC4)MKv7*>7D(kMT7*!boP zv9O>S@pJ4OTBf#iq{ExCgIH#O}$(_c2rWMNH$+22<(^2|REiN^{YH+R~pC!l!N z&YgGGZs~Z=r(DiHmp_-kY}YIKk&rTrRhn(SL5sae^v^|h`_4D<{$=a;H!)ckdT-xF zft$S3TvhxJwlRv#YvP^j|9J7Im9>$4U)}C*JbhATi(qHZ!8)@51^Kl6xq6S4Vs#535TWn{sS^RVN2XFO#Hj?kT zm}+=SeVh+27vA-E!sFuU=V}eBxo2t`ehlw8`_#WZ*;0cZK zJ#xEfk-f!T=V{xXwkZEJF_SjA8-Lci;fIUK7uIuqExa$D-sTIJKgd+|mVaI?i!}EP znZ+{k2|{Ptk~J2+H+!g|%&A$+ST(DI_fX)Kvxc2BKfYj`nY>LPvc3=a;%^eD$Yp zs_>S-`lN9^>rr%##*)q+-#gE{PV{3xe=^?{~@jBnbZr1Od>$>|? zv}7k^OaH>NkNSHH1S6`Ya(ja_{THu2$W&5Z!z{H~#B#!yotLg|T0KACh5y9US$Ya_ zvWu8)Y){ahcX2|@57p-_ z)0d}TO?b9K>EpI9$1e8WTHL!*w>{|jWvzGS(_X8vY!#`t?6G<-Be3|~!v|9{J{6s@ z;$J&MCGke(tfv~%YJo0InICj#PPbVoyLD%l+}#WY0SBFsUQchK$uERnl=CmuD_*>9 z|A*=iLEGeGw!Y8LdUtqzqr;V3u{RPoa31`1Cs*>sjA+>(%DQ{Ze{}g&w0?JE3;MqA z#tf#cYc~%o-C5bO^Vy%Tf}%eqa?Z_TzB&0%PrcDJXF*eTq0@;LeaU;C$Y^{JwXHVV z@j2}BpLKI~O2w=bnY>qK&*u~OcGdq7ep1J>PM>+wY-5fmCFM+=Z{(zEFRf_4)eyIA zR-5*Zy$xY$=?DI%>{1e()g5OWyRo6CuW%+fK8o zw9T+9PBl{qEdP9Fsv(E_lB#Dnd1i413C?@lXD$&QQMB>)>4QP@+xI6vdS>$~%Tled zOjdWt(dWy-SIwv2Nj{n9kW?ff7*}k}DL-?fmZpWGm&JR@`Zq4%a3!PLk8RasHG?waPcQ)93vkcRO9($IfYNljgm`v7%lo z;A^%y*M{n?{!7hw&dRu0;?KNl-_GaN4%e=p;Rr5Ph}+lRXuq!V_t6tyzOfw3H$2^L zvu4(ftW9^PKG`Iy#%!a{z~9Z>8EF^5GB=WU5$Ddh_#ELsm?XN4vt{nR z`EMqiJN+?p!6~`wj~i3uRhC_kIeI4IWlO(4$JH4*3kr4{v)%o0)j~;bkB(sM#+!9U zUWY0o*;J|{Kh`qc4$zg9KXvZg(U`yMcIAdXSatTFVDsI@54W0C=Sx(aZe+Qud*bPi z^ajUeE5o8AMR@jnoqJJb-wav9%d2PSIK}7WADniVYvY{7#k@W#r(%+`SRa;Uv8;7? zFMcy#I6}PTi}8GyqiiZ{a<-jZ+%F_6wg{^1({5z=!?9a3q`z|}kH?Ob&S|s%uH*LD zm2$m&qpy#oyz_^n&o0kcExCK|9W6KGX@@_YH97P}ntO-0*}esD_ntjdS9|#65>7*( z=QlPMq%$AROH;kZ_T^J*=V~GE`*#c8J=-JCEG)BK^5ne+myi4RE8k>W_T-(%H@C?i zJvPkwC25P!y^)eyX>2?t{Xy@>n4NY9v-HB(=Wmdk5m&R_(zK}g;aa`7^XxKpuFaq3 zS-UZ?%Z&LZcLwXBe^dYckvA1x{~F6eJ~QGL@>yCMnV_uWTO0fORNl_qfA--U^P%hb z6i>dN23p6*4Oz$c$tvRY#Yy+(Zplfz@wrwi(tBF!$ts=W@{Rxgs9oCs%g6rTSN;8e zzU%*)EOz z|NC^?{^I}Zb$@=n-+$!wX|>{9<-b2bHal}z{(syb|G)VEEVn;TB09R2_?gzHb$veh(!cvf|NeC+IlL#n zKEKrI-~TOK)f&^eKF;=N-MCae@Tcu6gZeCu&z>e*xZESl z_~kuiSNypyi)Wtkf4A07^5Gx9UptrRUdTRO~RRovD_&C)6PBLa>_hg8PTB^Qz36AGGX$=}enE`IF|$ zecmZ8do(-PZwpUB@8Ub1E~_^0k~*=o-mT-X{MreJr1{#5u75abc&LE4Gs8k9NGjv4 zv){jNpSf+`hQGC5q_8CO#Iq{bvU$GaH@}tc7x82V-=`%HCvdcDH@0arrZD-(D@ihP zer?UD%R01`^VAa6W#yymRaKc#d3LKxpA zxBg+>B~oyH%gVY#lT{v1=T$o>8zp#gx~9^U^hrwWIgfW7(*DWC<-5yTb!v@k?mjtf zS25d%kKTH?C>>15$eYU4J!Sd(!0cri#wPXuv|Z)5iU%7YQuge(}!C)hTL*kGh=w=6<=7_&Ib=MsTL)fr1Ur;kQE4y!V-!8cmT& zFkHAjCvigYx_@;SPjDo?^zU^q5bZUaD$^}*9?0Q;&&XCh#A&9+mVh}0`WYg}w{vB) zD$fj46I8XolR4Gm;dM<>lS@0II94!qNg26W%Vv5o3x~cL zEfw1H^w*P?%+m`3dali0zx?3C`nHD?I+{gKG0%5damLdyg=e3riqZbK%fYN#w>xCE z$nV~IRx{A+Qc(Hw)KmwLFVh$Ux&EiLoMdA)QT_hv)g+@O{?2ao4pLlv69uh`xvtbD zZLzwN(G_@kejA@f;e+U^GF=5;Klg%8<%>%^OpZUyo_%(SJl}~eOMT8QniJWQsWx+) z&8?(eyXO?C)P8@dCvtAWx<3i4rG<_BCZ79qV9sP8zNJ^E)$X+H_mX_l_CRCuT$e9C zTD^-jw0qukA4$7(kUL?@+|0w>wg)!-VHPq}S2(0#)xZ6rfgRtJ2~+=w*!<<}?6}OZ zeDZ;SjNQL4Jo`~1swJbYFYrk`JkTN~)aAiJ?$$N4gqH=*x%-Igcuh~*Qum0GjOj}! z-Vqg>duma}s}pArRvpsGD(IRpX}1wK>*9r?^}#C>+y5`~R$Tn&3sX1WW%*mL4tHD) zO;uI*H#~fK*13kM=kx#Hd;GyK?dv|F7vpS0X&-095~ zoK;tJsCSNx+gamZMiURO_#ALm?U3!Rv`H^J>dYs0IS8e$=d?&XaQWHt?~ii|>t&0S z`VDVaOnsSeSNHz!ETiW?{;GZIyKg?R_)nd1MX}Pv zRnj6}TwY((RYUET@ZU96?~{7{V-Z7_RQjr$TR&WR`S_f|-D%Zte%uaIZS6H~e{yO{ z=6z4w(C?4KTqI5xTZq2h_<7wvk537;{mVK$nAh^gzbnnKTb#{2bD4R)>Z+Hmm)|$6 z2xN##D!y*vUS0g;WmNFH@&`Gqi{2c#dF|5P!%dd*LZPG_WgP*?g>W!BW70dLA_nq3a zz|~%BRj=~bi+8t1NuiTL9J81T|`+jEU*S|;KZ<*tvR#L2Ck((^y^n0W7 z)4usZ`&~497m1vj@b_=I?9=0nS`8daw$7ipa{tMe=YQwOtv>5F_wwZeNttDoBMOoy3C_?pG@k76RlMJ zJ}>_|*YF$no2NX-Ew2~W80xOoI})s|Fv)89avuK95UCT5B^EUs&aO0?!P)WQf`QpO z*(vJ1POcZX&(*xJ<&D<2g2b8IZp`rhI`@vx>7*SR1y6&%Z8y~7>YQ??r|ZzekZA%x z9^VRPwtD#JN^S$^gM*gOpLs0VY$Ww=&Gh#V4g8awXD;4hHbLXUt8}AO{^RXG6MvM= z)M#9Oh3A?0pX^0<_9#!B)LHy_X4~$0LeHNq_MhLe=0T6UuXp5%6`Nmd?%WV^c*Tla z?cOB|7V)vC)ZJ<9@;Vy>!GTk_)bBR8YhY;b<~&@!A&X$RBPT@&_8nC_O+ zD3$*jSgTu0LTKw+!&$Q;VpN)*^ zULE5&>u7k|Q=y=|e~VVbJs=5&&P1u!J49iPS(9grHx*l z@yVU3R(tor3#Q8}1KyvxGUvfD39C6)Q+*3hv6}36m*RSRe$Ek*-KkPJEf0S&&McgH zS=(5z__yl$nsoDT1*PfcX;UsqJy&s9VzIR@`Bu(M4X>RBxyx>6CNuAPGjq1|h1Te~ z^Y8X#9NXXMbep}^OHe7iE9{^0jTKjx)w;#4a}{`4+wO8vLulng4R`y=DyDb7PUN&V zT6Z8dRZ8moE2ExGy%kAZW%?PnYcWf|Oa! z=VOjf=5UVj>UHKh;Cc7>gQ$C2DV$2IN~>J9oJ&4(T~VD&=-jFW%E5}g$3>ZP7qw^x zKb^6}y!@Sz>NLeBJ;R3Ob0+QxpD$SXMtSqLuX8o_aBGTRXA}DUC}deS^UTW!uXJTI zTTa^7&v9a!=H*R_o6oGUu*Er$Ln6k@%`=Ld@J$nxJ zJd`?mOd>~#Jz1e6r{|zrkpbK669*+Yl%&A|jRJR$NpSd?9Xl{FGnt2FVy|Jrmo0{D z=eFeZG%9Q|WOGuJPEI(jV!-yTfGPPw!7f8KCl%@B2PgI#vTaM`>S?sqW=c+&efgM# z1=kG;=G%u@j~$p;oy;Q>n%C2)JNbab4S96~wx-FQh8tXkB$y3n^%@pDxhKJVn~mkz z0mWMq%#JC^Ja0_(4A{1r=Jqr$K2^)`^hHrJPtJW61Ga6O1tgfGA2KB;@T(iJZF|6! zoKPLtXt-gyUjomZhi1nPlxZ?0Kj7JJ$oB1$hy-(W6YH@9f;GuJGQIgdjkzqB`(1nUC?N_Vd_ppwr#UmjvYwcV#wAv%k0+GY9k@36fCR_P zoSw#9jYmgLgB>x`?AU=m2bN<8KqY8OGEa`bz5&~}CLsxC_hr3?8@_@(=);tpP(Sy8 z1c#q}v*CgjXF6(GAf|(YWzNIAp2h_m4cVGbKqBx#!7Yhq-;`t?mfl`NfyFZ=m=(A6 z8Vb0W9Xs%I8#G`Ko;(I|$ODj-Gg*!~@T4d6k$0RsJZ%8n^gG({j1fDrNZ%Z(P903mG+bcPG8V_eC^W?~@8L)lRx-Y>T&CHaX z;2*p4v)`0A{n>y0rufX({=4q5wTsfzTP_ybPhM5GY+aczKS}TP^sSMZ_8y$&MXkI$ z@?CCOKgybAv~2zI#o1hX)>C~8UF(1SW{fm{%f4~bLwY|m8Q$DApo^H9(PoNQCiVJ>l}8rm_uQ)6mm+hu$MgKI|H}$q z{cGxt{VwiOcK5zy-u1t89~z~br|zk}C0=k~&a~Nr4;UO%nweQ9^77qq;j?fk*mRJw z&qrEDp(CfDK_RGCBEO(Pp()q9f!S=L*30~YhP8!^d;%^K2KfaIhhMU>-^dbrz)=0l z%;La2OGds8>3$8&ITKlscr6cBWfe6uv#5&(-+#c+p3%&l<1F}qK{5FMyY(l0^ow?D z>2|zXwME5f^`)j0>%6#?c5CT&o`DEV@|c?wqdVux^~A#M@w#(V)Jy*T&3gDmu=m@c zm*p>-G?sSDM0n0D@Z7L9+)T>-vHSiTGh#$lxNQ5<0{XaqTzQnirfRt|nERcC=(6)K z-?6@qVEnyuvHjZQlGFaZ4BuL+9@Ryp{^;2udyVJj{~dK(mwy#GSKAj>ul4@%vu=-7 z)BdOlJ=-#oKf1x=>A#8R%dB|X^9&1LuM~(iO`UhI^v^@y?Yk0v@5erI+G)Qoe(J{Q zuN98YjQch>xbRS#$6G6pk11K<)*8n-j3T|FbywMlme@_2d2{}QgXt<8f6hs>=ze$Z z*V)PbW*1^tdv(6w zl-NKP>jO&@Qs-GGX)2W(Hfevp`hC^wE>{=+HkTgl)mOi-x>NJ=h2QHplC8hfYE`A) zwobNEekd*bA|&MK%>EPwjQ~xP=u@vAz0L`oS{!wsE$h+Zxp6g}pRT^VHd*8I-3gD@ zpYf{pm($$Mwr|y?6ED|l*-n`JPW!ZMqv5oJ%rmdnNIYIWecvW`_k?uo2f~wjT)dV! z9uEDmD!(?BT_fgxcSrj6`1CEMl}Zi4wR>$CxdPb5-UOumF_Mz6U6Zzd-kq8+f{Wy> z*KO{fbZ~jn%UP$7cr3|2`PJrcVOn14)KHfnr8Q^MWZzhn?aVsKx@S(%!Bwj5zqVEF zeqM?4@3U4vX)!F~x|8%xIOQXqip^pWQS3l{w>lvP&?BUp{$-H8z z-G0Bua7o`=$C^2AD<3bL+Q2$--S$Zjxc9sg{QCMUuVc$!5oPuzug~&mTBPM0&l3%p zo-t1}zSJ{>imNe&d9mD}iT2nqRi-tuxnAnP}Deu)`)a-t&)=*LU{ETv0yp zY>&C3T1!_RiqhM*?1}VKt!>+a?mXOa!%H%uczMd#bXTR?>&?!&SH631EY(m7&3Sra z-wv@2@f!+s6vEj~)de~{-m$Oo_R-CYzcw8GVWb(;AG_86{q1YaV$3??!P4&@TQ}{0 z5O(cTZ--O6xSzz;PrP@GWz2iGZ{VHta7QMy_RSTHYdlj`WcrrBc02I)Hj~9JwxcifJhm?q**O3EPW#)&i+^}Wx>0LMP&z0OE zmH2VhaZL%$yTyf1+3L z(eORJq~zp-Yb@`I%>DN1Nq?KplNi%mwNdf=$DoAO{7RuG9w${=^VPNAw5f1hlVI^T zNWuD?@=v+6_CznX%PdNv9vU%Owuek-3upH1`|z{0;OH;g<%>d|MWvS2rU_eqm2^zG zo^CcVc)sAA0x{vGj3+$fzwCK+uF2zZjAm?*%L=Azd!_td&b#bYch99Ls59I~pQUP! zlz8E($rE=)o{+p#bhA%yXH>zJsYfzaDb$8H%S?RsbwRs|lgRvEBTv?d7&@-j0-#J@QKJhbIZ{pSLk#p4{?D{n5=qDqo+u+T`3^NI&|I5mhHaNt z-<>}}u_uns7u_ek^WK+&GL5>n4?Y*(tdHKhoGbg!SHCA!nU@7?_P>1iB2#q5gv+nz zo>+hQ<6IA!cVGQd+{!_{T(h|%gP$FY;Es~tJ^BE{Sxbt zzOu#OLV3>%?sLz%J(d{mdAO(cxkT*a&#Xr|-=8^Jq7*TAefA#}-~W#|Eq2cF_)?~6 zv`)L~-t~{tU5w3=rJ9qZQ+@BB-)dy1?3A;{tCHu@+Rxn&L^_}6Ywx(&XEDKJ>B=pt zK_}iFf6e{!w!+##fz(@XrGzxKAH*dJr!pP1zCBq<%Hs&Xb<=~2h>Oa}8MEab%IhX? zc9xiS>imVbl#i(vf2``Ze$=?a<+sYz&t89q)f|h(HhMFx=C!X6mlOAyyZ&*{ zCZ&mO#zqS^iUOILE|Yov_MF+B%*cN0dF}ksYM~NyW?ha}s%SEOyFPiv zqmVfUXU~SWtN0h#oqDzQr_t2ay_3{~ci#GR@}a@vN3Z7`Ex#c0CvIy-^(!v(+^Fm6 zwmWxfUeAaxIXT1qC}-)(xx4$4wkQivmoVO?zNX4(ith7Qs~Z|89=vY8e2RL^)wo$x z*Z*Btz2jWQoS=CHp|^!Y^4>4)2-z)Xw}7F)v-(Pw=(c6%yJ3UotIC?mN_}s|Gbu}e(agn=BckI zZ9Kj*ZhFt$y?J-JT$S#os>hqAxIeBrW;J`i$n@zT@l3L!dA93`GixGuMOd6Mo}YD1<ieI?3ZI&(B$rp8NEE-t*}2Klqi`i0kGAk4B%J zmVV4L<7Pjeqk3w#M&iTHekQLq>wH$Hb+}mZuW_$dIO%b>EqB&Luh_D68LNz*if zvL&Xr&1NI_{msz_if^+8JuS1{`O~N{`m$K<#9LQ0uWo#QWxe0(zN5Mh>74(xBK{Vi z+j2%OZ<)2OvAEh}yYsiEoYW{zsSk_y{l7J8{<44?zs&G>b9Eo}od(QFtGBeC7dgjr z!X!VhcGd)s?KftY2c_NOEI+?<(~`f11z$EP%uW4eyglm8k$2W2$7+`~-V@S4{_*Rg zC)FYQ)|lP)+2_IY+eYsKr(gaCf0ZECr3K$gOVg%{eZTqTc;M4h496wb*+1kd(D0k# zUG(}>n|91y=iRgZS#WO_dH0$tkD+^EOs(DnwlA?;ueL1sEr0xK`ccn=?vmZntJfFs z_3|mK%4JTCdE0DraOa;IHI-$N>x|+XEZjmH5Aogdof&37-#Ekk`VXzoiWA@Uonp8o z7t4MB{0|GQ6@Oa1wa(7n-O3v}$3Xq@zB9#Qnon;SNKAd$pTy6WSnI}A5zpV~EKmDOpvp|8x)H_F33r`k8_n+JMK*X z$f7>=zH8npBY77oi>mTl1u3Vj?{2Uxv?+@T7jDw_(b)dD!{2Y!iZBar2c@a3MV^}W z`~8xg*0;@__n`KA#hZt})_uHDB^7?y?T zo4!sua^l^Z0`CD+BA+HH`mRby&z%WYh35qdbgTsDJ$dET3+^CkLp zS=)m}Pix^e_c;2`8lkw~uF8Y6`rp>)7o43#@ zxIA6e{oOyto)G7-zEl0H%eKwhp?os(p26LiXI-Zwrx=JjD1M5)x8bSY?mZhj4XRh~ z-jisxJf>aFZ+V5a{zle#)#;2)t3~=h&NKYA>xof3`}9SQ3-4?+;kkaum^D|jGvuS% zg#zVfpN@`{Y$qjNuC>?K+E%|4(+DXHn$BW*^q^~BrNH!`QfuySH;RwFyG!PO%&Bz+ zGfu@^wN$yJx~KB%go3umO{ZS$+a2-!f8RHOCgCvAoAV}2zEtsi6}Q#A>DyF21s}4U z|6nv{m$%1Z)dDT8>WBMk|8@s2eDka=VOF)seFmNMO(|NNKZ!26=P*-C)W@9V^0dx; zhIuc%E`Kf1s@RkN(8pW%@v+QXRjd9U%e*z`hb3=MMabOsbNFL+^k`_gyUlo3)P18* zvBRnF(^}IHECtzb_fAgr`7Lx!-q3B2RixLV>E);U{H8T|uudvh_jX)z{`-2rX_HR8 zNzv^1^7G%-lR*Lxm+rZHGKi}$@ygwkmjr9dHE*U+{q3tKgN(TBQ%%xxgQa?Ve+#=Mi={5Tcw>cIqKUa+nc!5nWHE=O7jHZ;Of)g8 z@R8`{l@oSLZa&^}amE9~OcOKpM3b74A{zm%Wtid?4p{Fj=Oyyo*;a(-vF#^#F@znyaXTg+|N4Q~~;-O)Iu=Dxg(L2SKqzvr%{;mu=t^ZhuI&C5$N-+T+~Hz=Du*`UmL>V#u?MU#%@x$VDn zqkX4R%f|aIH#Rv+?VhRal`Oxkmn-?c%d4|zZr|8`hs$P9Z>{i3(L(9nYgH59eEZpB zP-bl?dMq#f=b;-HXYG@y<_kNf(i1CibK!jFEg+?-n|osmf};QCzG<4A`^Idd!8hM0 z6=jOT=f0Yi8Op3%3le{O^KGW!v3Dm*q<1fH+;Y^c%>CW%8?vE!$>J{d>9x=1CS=w= zyQ-U6>vy~Z<68a5X9{cc??*fN9r|T9@s-H-wdd7@u5ItEtAF|ReXXGFvnqS` zb?fY=uGT!Nc4_BSvl zX_b?I=hqywc~-dn??&lKIZDeFI~6uT7$?<&_Vsylc`Q+Ex9R=|?Thkx z(^hX$vrwF(A9B{yyfS6Ry<4|(Q@glRwi)ddP6>0dh}kE-;70uMxeER6e`HeEWv99O zUXWaOr+m#D&bZd4i~l`4ab&`V#cCQBD`nTmb=bSl>rQyaE3CFRjG3i> zc<-JAb%zAzJ~ZRGsQ9Q|SY+ZZ2QmAPJ1(ZKUvYJki{MJ`l%CKxH~(90o5C2~z0cv8 ztKYA(pMh$!LOnkSae?FSSZSFnm!JN>k z?f08)@`^2udS8EJy!~>`tV@mETX?shkrvmqQ0&vach@g>=k>?0-PI+d-_3gGXY}pX z)1r$vJ>7Vg@9OxFyY4}L$!f`efhV?vZaC%o&*-7v_jJk2+f?<$QdNSYvdT|hDEqYa zzK5^1*J|as8UEG0Yr=l8rUu!%fVBZMVFawiYrvzg>E1$K%}Q z1p!+hd3;?JV0G9q;_He4t0v=!tqB_KI}TnwvE`?=nz__ZJDJ&Yq~5W{NU*u}am7@K zyS&|cX~*4{M*{fvuUr1v)Z_Sa6EmwB@w~w)3)Ftiou9ckzGv?BJlVN9sL$ERnsMQquXa9jXUYBk-H#8e-MZ1Y|F_15Cl#*WUbzbI zixiyavg>%@uO(L+IQ&C}wl~^|{ZtF`czsTHdaawt^|`&BW)tnWbmm{Yc5&9>m1+CJ zZRgK<_dNgbqTeS!A9C9HyShl_9Jl$z;y8_tH=hsrKA9t)r}T7MWx7=#)6s&6pPJuq zYc)--di+#Q!GczEvu=5@Zu<@|E2sx8tlZ+z~TW3`Oy z$+F~AD&})_C$D1vkQmvP>3Dq3yY0%ksq6L~K7M=RHm;z3a#EHLg{I`sHv*qsyX}+8~3lZy(tC|MJfRJ#Te){J&he?;+22znEL%2Q4imH`ILH zZBV1fJm-p|g8H5K_Q!rf7IS7<*Hyo(5WOUscgNq|s`$7*hpcW%PW7qJ`>thi@8kQ~ z_s(LQeoTAK@tKQqAHKHq{!sMl)H}9*Yo(8^t-p>g)@iAfxwv&FbD~_=>eGkb#yWrc zK9xC9Zqe&Gd@Yq9%;#^C`nKfJt|^BU?p|2!f221sprCZ}tlk935p*zEOU)(7zQaC}H;OX~h? zDjeL=B`mYYe|3$*Y&dRlSExA5+c4E#&3Vq zC?9GmfBue()$YvevPlO$8y~7KO+DaQ?y>8lK$FMa1s(c__a1n0j?c4?YsbBcFHu4+ zuU<~wJ@=j3uX>9a3#R-?X|tWFw7+Zmb=6zGO9a|C#;s6n?|8FLUSX;4l0FNK&_x$y zEi@Z^7p%=V_=H70b;HVKuRrYH#s8(b{@?HX|G%&QKge%yD*X0qyZx3|o%jA9 zTEGAA*Xw@{+yDP}d;g!Se}Db1?@ipJzwb}h- zuVfZf@J@Kq|79!Zq}9aa-`~8{zIf5El{E^-0zWuUF|E`0`qrbd{HZzpwU zP2wp$b1dV>u2vH@Zp&Nu=O0V4HK{gR!Kp5kGhOlRqqt?-4_1a1pKq12o6}Ms{aOCK z^A^jjpTb%B&-%D+>%2Jb-SN5j(_dfnrpvwBMai=}-|u+wS>e;!Kf5H@{Bz9qsTuNd z?zv=Q$R{2ob8Javp8AjFOFzBbI(xO)=O3FMEY^G*acuh3h&MOA{%(1(_w08Ai@oN@ zzRODnau=!W+nucaSSG<{>HdO6|2+3r%wEy|(n;IwaqWqqo+DROdN*gTi8H#Y(z|)3 zN%+~9ljINi^h)a6U9y;6Q@+h?sl~F#E=|i9`suZ0y_+)SxZlccqCS?r$qF~BW)}Sp zxvjT+q0i&?Z#U<(8L{49y;tq=ms6@Uc1>AOU~9PUrsjlW4^4S0Hm6=Wp0oA#Y=zxF zR(8&wbE@;z^50L+-kp8?qv@GFwTqq<);#^U=zgV4{MJ2hrpUC<`Y>^aLGhXSBDDrv zi(Z^q&aI@^6e7RualAQCgx9*++2$@^R_fl0n$UiZcXHI*iLYkp8LK9I%Z_2TJ8SuS z#_8NO`76H(&ig&XS775_Bfs~BViwy09ULTxjOHstfDCRvqr zRG;rWc71Es>6J(RXD6=M1K2i5xZKEEq&3SzniR zzPA3Gq!yO2O|9dHhx5-rtb(QUv?fgZ|Ex2={JvS=9haCHyaFGir>!iW_02$9o?}NJ z|B?6q8cOR{6<#W_<#9c^Q#APALH-4TU2A=rrE6j`PsWHG%9-QgW6rl%YWd0Q%e|9# z-P%_vWKpEy#q}Fbc&m@Cq__?YajeHUAFjtPeUH<+edUd`>2!8yNY zZM}@wqvTEED$96H#V^j^(Q~Xa{D%kA&9npi4=p*X$6q*Oj)mDz^N9^*&P;3f7}&iD zI=S(tQbyfDjk(L;iS=BnlscYNwsUsZ?3f4xFImmr+1sSQ-Hf^4lFno(NThcNMmjmuXHV>CBNGm?QwD4ly)ynE^JUtQJx*wQ&ZoJ(r z@L*k`66d>PC7tqGHM)fbMmv+d531J6Z3D3GUzge9yrpS|8__ z&j>lcf$HH?UbVuRl{xdNhukB5i?whkul_77V^!fuF3w1bF)ZMiRZ4*s@ZV~>`=*r3c!ljmz z8iFKmY&9>wJ$0exK9;oVpB`5qUdor3TH3dM^}M&u_Qi`BCm->cqpq+$@x&Qkp9^bm zmaY53mN3C*+AE9WHJjIFmHsW=^lI^(p5oZUGuD{@j#&A);nd5I3AK)$uD?$(CLY(- zs=rup?~ldm<4W7!H(LCV6u8E{Xn%oH!;zmqHY^v`b82uoXa4=B>w;}7LtJl%+x2GG z`W%$gWOkpLFUYZjbGu*H-6>1Yf4DhSJdsHurrf^PY6nO3&$K!3SAPtjzft+Mx&Iwa z?j0vnPaeI(xGic+BvVhp&A9t7-BOf2#UDmYeYMYBNaG^&?LsBK+_rNkUs|y79VlBj zW3`ZyK;(w2nkqZqKI=Xur&+vcPfhhI19gqHS3`Ub&A$3<#gwPFZ@av);J>PSf8IU~ z2B8`iMOB7QZm(C$2dCaxwLP5AZqfCL3#KQj^hF>0dZE3tJw&qqu+Q>Wt9NP$+AX^A z)|b8Jw%+-ryIv~QxU9T+OXT>%`Mdbd{0qFFg`JIM@3{TbgGrnD5nGxri_!THrwSLT zcW5tr9M9e%y*QVfb8lE)@DGpNn8mf5%VTpICVzCDQM=;QQ^!zs(S5!1^Q;Hc+Shxvs!xfOb1Zp~Fn2jK z`)eWlf(^U){bbf~8S@|Y>AP+4POF(YxaUZs`IVKb#n%OS_Q|ZDo&W5UTW}-u<;pz3i&70W!|L=9?D4bl&AoX~bA^T(g z#~g}1cWZ?^BTVhj9Wn7eulC4KWzPkZ^BrP5MK0eDPdF}i=j?j9Pdhq$CLC|};IF*n z;&$S(n$WscvY#ph3MJo7INscG+JM*N`b*v43RO;St#L?ERoZacxzb=imR=UY|5hxKT`%V?(%G9_^hhH4 z#`{^$+g%&9UzEI(y5Jj?u~YeeYlX#zqGYoN{GGbkus-X$%8Ye zeE8$1@wqE2PkN9M^E4)1DdGJUK|Yb`zWW{rEVp}np=4ijjKgP%&f}6y7tbgJ#ZK$k zvS#gVp^i$QO-6wu`9W?xfWfIUkQ@vpqhbILBkxt%mDf8>TNc zx177f`ta3fZ~DDEw)z^*nx?>N@omvw-V>M27<>N}atiJgz93O^ypCBac~{GUbMK$_ z`W(ExL2TdAd`=H_sRzOT;_jW14g1hvxah=DmIG3;CZ!5nKNdE1e7^FUx3|RGe@8-- zPOScB>C3*y=jolc@tbeuI4v*KSk6K1#3kOewq+q^a~&iKT_?Rdrn#Jbo=R24BhNcO zAKrd)to1^b1?#LH5oFx9~^40A} zo=!1c)~$W$x_~3or|xZbif*5ZPQ5zqWH{;F(`(@$n1YNa{|KJ2q<-V-rAi#rV&}Eo z7s@b6|LqsucIjure0EmBJAa>6Ioet8tFIUOcVkkQ+Jv=Jp3U&wtmppYv6@icT!RDN zGpDau()p-k;+BrEo+pN~?K0MGpA>{DbG6-yge46p9rv)gCa^GH(eRk-r`rj4HosJ< z)8^KDCA6O3#`f7(&UrgHq!iYq#~){`a=#YGwd{!I#@t_TOXg{K6;(0xPi(oKwUe{d zlCkvY%RAN`EzVpYr|HhlX1{XvhMhnMv!Ax%1$oQB-LXaN-Z4H5v2}5aLwp%uyjo}2 z`1yic#ga{@pZyYgk#tLCZy3kPC(MPF+ow)SKT#dAKxFgwQikif;+uXJ9*D7Bn${=s z*Xz_}^U5!$J(p?c^Kk5_x%uQo!|q9+c#d86I(2z!LzBYt?AH>V)=NIkSXWv7|4{Ff zpB_$rJNjc6WcRCdm~jPdRk+sL6!O%TNtJhBIp3Uv=B~k2`Rln#)|p3Fr<@au9oy9Mq?X?*A8am-iaE#dK+YqI>x!4i>-LbY5u)2;f(Cm1^&IUTrCEIb5FYq zos-{l`13@TSq>IYSd)P%0JGE+WFs~HhcWoIPG-0@JWm9 zPd{09xXig-^i$$;?)3hTrMI6J`=~1%F8V2-@g-whkyJyOfNq-?H=9xd-tX?l3f z^u*8i6H^TC?3yQi=*{b@ybo6<8jJ2<&3WBZ`vKM*3hm`*JyPE6=QJ&MO@6BO@mTkeH;3xAyLRaGDQgue%``Jj%U(NkTEm3~ z3C|_Ix)O_x{lsgJpK1N_L*bn6z8cx4Qx+3_W;3ljvCYuuan*$7%_kL3@%M1I1cfb{ zb+97VGUM2$E9}SSH=R0CVsqVUtIqPtj;Vhg{T6Al*(9Gy;;L_t=F^S!lgzAWoo&D; z`9S=U%ccjcG08Xgtw=d_H90Lb?o0ceW!Y~eI@?2XpHJM^cv9a)`O6pG)+X`rHS-Tz z$Z1Q>es{4_WYyjS4$R`$3@fCbX?~dKVj=U0pL_Re&iQf8&Z}>z7rfK%^A~q)vUyXrv!b76{e@QM#oKP4d|3SO zz>1SsjyK+W@%7UT--M+73gK6_8CtfcO_^&bJ;zDa_4nfkB3=Jxt2Zt?729w~z#*1Z zgJ+tSKzPo#TV_jK43#?X-jPiy?>XX_?yfTLf1G9K-G*g*_U@UoBqYgfx$^uAJ$zU8 z_f48&F>y^<#Cs{3UzZpkZk2Rjqc3aOn#QqkAMdi@6?=W!3-(Tlm$*MqIeC}Sw5Lq@ zy9~BJKM^rawln?1l|!*B9?$S=*xnek?C|k~J^Ud?vUXOF1;xL6_@%_o5aciG%hh~o z<#h7+72oQ{3fuQPOCSAUE47GP^{phNL-|IOK;Zjx<oTKAXX>tCdx?@vUEL|^q z_56&h@n6q6eKp>s{fsI2FOQ$fgz~TDOCCC^97x))%*&g&jd!`2VE##w>!*)%BO(a6BR# zV0mwyPV6m>?uT8v$72|_--z{lkZHpb@?XjQNZ47e$-90o3X%6y(T+Q?^~qaneN~pi zz)u#YM>xvmeKiAZ;(NYD_E+qCv}2{f1HKDwk&KP?4^C&_yjK{qvcPT6ORI)UlD50E z`llGkZdaGNwIGIDzVo)lk^`y$@Pwlhh~q^9~AxkPR@w_GJ>8fGDss1?qfwWh%OgSel`veyT% zE$cFxt!Vq|0C&;ZTa!-&uKB1SwC|Sa+6n>Ac->b8XWpN=<>Vh@wcj{9+hfO+{x3W} zHysXr=5SB{`_F>$u93{#zrP>1m~Ux$`tOSG6+wx#s5Bvk!my1IV0X42VzR$4DBcK!_U zb=;6NU;XjC-o<$t!KY8o;}tbaYn$=0aQB%o-lC9AwgI>N3_>S_oJw+g@G{ECJ90}-f6FE&VM$ZVs+K-s~+e-l6Q{j2Fs6aH$0eb9I-k#FYms# z*C+1m72lG=65nhqU8dF37-{fNkC{P&S$x@wDtneVq2E@09~$3U2-eSTtUfPZ$0_cz zT4?_{;i-GSzgea?LFAY6k}nnC_9(1ewep4J%bgu8N;i+%@+mQH4=e0%?qD`I>nM3= zyFod4U)h7qt6~!ZrYH#Y?S4D;%JSPcW7;~7&78je#g$dLlBT}! zRQaAOmkxXIFa5aQOY4{0f=fR(D|D{&53w!~+jph1t1k5T9hW~l<@|Q8em_^wr|6XG z_q~D@7S@(e^+MJ~Iaxf-3t8vSUhCDPK2tJGOy|Cmz`WhEFIMSspDKJZuX(573K{n& zYIF3xT_1|2)v7*Nbvk_2=PQD|(mA1yCC}b!-*r*465i^Y)2Ph7I<6w>?+%xFH}mHE zUrEWCW_Gc>vgvZ^G_#9uSydw}^LSm4+F!YlqI{BNHKR!SzIl0vHQp6{yJ%c-XfwCC z@PCUX9cFnvm5#@^S)G+!eJO0YW$f&r__@zY=3PjC^U7qoHrGHoqF~}nAW^?EFxtufBbve!|YqA6e%m8>iuJ`drNFy z`y#zFn}R;_9DD6`)L7*n+hfHWVK&=k^;gMBHN^A^dz!TJRqUIsw4kU?d|H5N9K#;V zi4I;LKBk=$c4zqTiAyQ)N}Z^~MOOz`6N`xsUYWo$f*#r&~J|8=rGzpCweF^zso`c>L>R1-sjV^KWilTNC1C)4^gEJynQz zQLJWQe7x7X-Rs`{^4NX#i=j|^Q~BylXOGhOJE5%hQNGg33+-xF&rv`RAF z%+XojWBB*=DL2(sS7+|qFyZW5?|mDzKYFF_dH;I7R@3FPOSz19ho(G|@Vw#~<8xc!39}%_t%+K2zag!-k-%XPnq*U5&O@% zE`PH2H~sNbGClGBi6`$TYj>fquIm)+yYo}H_xeto__9s=isun^=bL$-SRxn2Y&e=! zeQ;W{huZwR^Ax%ZRk(LPdF%S}!>%bQ+NZic8ZWzTSjYDG;MLXl+7~jjH2m<`bUp0% z!IIT`I!tA~ZgsqL$#f2}$vioaFJfksFmLEhQ;#+4PnWYSUZ};`xO7T*nZU+R-d(-{ zwco9meOI`YT;;E1y6n5crft9Zld5#*eJlI#==0uFWuE2(=QNj1PXc7!6l+fh<;+gr z|Jo+>%Kir(;r_M7mdzSY+!DstzONrOg7oFShvGLA(aqzG)v)b=1 zi+3k%FMn2Z_QSVT2O51Yo)Ehq!m#4D^<*uEsfVsj-#){^#7y4vLvKco*Jc~{AYn7z zc>%L8mgf7r&y}h%V%;Zf*88&T(6Yos<%gCnEEd@yy<_Kt_exh*HO}T1+;Dq+(}K3j zWv}d}bZ6GezB(P`?T~G?<^7^*4eEmW+c$5rT01eoYTN!BQ(DZ|emivO)$@cIJMW%9 z7$I8KwBc(?S+T)WkHBqD;!JZs&%KbjVb0;Z!RKe`+{uf2y<4ei#p>Ju&G*K|lRsZE zzH2yHSzbPG`NG5}>G#x?C&fM7UDuHZ*aQC;& z>NybV@?wF2M3UtKf2FI8wdYj3IPUVjC|0@3Slf5RQ2N)xcnvT9>#p`+xLsd5Zd>iQ z##HD|*Y(w%azCQqt+-ySa#3K>9Rn|MieaOOtkL z9sJ6=xQFA>u7oLa${afV-7tjaXyP07tPPVsM2 zn{*q6)-Q2)4s`lzZgb)AuG?*F?Jz4y)S%oA%4y65f-eF(qYhW1HUcs`i8^ zo2}L?pH+nR%9&lb@bt?2zH+h0vP*q$dOUjdK0tAcp=IHp=Z6oOR>|lca*96ptZ&xY z1FyOLKjxJr%t_{qbz~8Aw}08U&ZNasy7qgXaooEXUfmxrt$(n)cuBj?Dao4jk5}GR zO`Ue+_FetkH|AWaXtlDtaA~ovSKeM3SpLlpDcW$^p^GCXGd(D}MH@{;f z4fb!8?myEnvt#ML7{kCU_3Anmt`M^{@4MS(JYFK5Hnmr!!f9FRv+1FH(~e7u-t_IQ z>||<}o^nLs&nGR{u$7E{lMKE7sXf}BViRJq>tC+YzWXQtKm1X$sBhVCi>_j;PM1@0 z@-AP(Hg_`l-<0+^Z&@Y&dD-+!mEvdDEAMAj?VcB}erws&)%R|Det8f*$JUfj>E)!3 z3+(@GFF7ZAKhNG+sdeS~hj>sD_vpBFG;8dZ@=`yM%L@_>CnBpi+^pZ(Odkk z&vshicQ?7yE9^MtonEmoaqj6Ay94`E&&+a~b9#mKo4(YLzXs2ZR;_>Z+$c{e@JgBf zVy&j)_tNu@ZT)_Asr7fe`V%$5Qhys?1xWop`6NKwI?w3ys=kUijPM&J_SBN}Sdv;~1iQc|&#p3K;h3zuaThjceYs7zyW|=3v zkTJ05>J;HwKIg1F+vXhG`@Qa?iNt#6M;j|=7n=N8Jk5XFoC`b5DvP&0`6McxduCeA zuBy1XNm}+sj#)9UGn>B5S#g*}a;58SmX(ETmvg?FAj}PnFI&)FU`{?4#3 zbvq=ZT=<7!zl|#6JeSkzuRHke`|p3JU;ph=pXkVs;&JuZ%72 zCK-JEa3zk-;W_8LTc^Hr?JriYnI+6AFKe}WNtV8BY1quXjJq)bg3Duk_pP+K+@ot6 z!KLjLDlV+0f3{Dttx37yTNlSwQ5n~%T%u>UO1K9uy%v|kDX(+&poxw|XxySjJKL-# z@=v>|W++`1EfM4e>Uqq}&J9Ak4 z-NTHl^9z@}JLmWLnuo{TvoZT!jYUcV)_*%b@&DG_yIlT-zbZ=X+_dPN_H9k0En+LT zXx`k^l0EfO7_Z^P{HvcIdzNg9$qSBUk$lU!oH?`78i33uMl ze}2_EruOu!GkO&u#x zye(3xKl90EThZlf-)M-u^R#fb-5q^u!i^g1-mk%ZT&jgi536I3X0Cl1Rv6_xv#c=6 zo26i;)$b-JS)XO+ZwUNY<(r-J;ZnoZ_;aTVJ7wMG&7Z!A?Gk7lUO1pbOTP27%g5z& z=kM8Ld-8(F{TnBLFWz!+G)Hl7HWzcu$kgtlIUcjs=!k#}aKPh4QccJ*{ z$L~x(*L2)yPH(IUGkah-$-z!r`h$e0!u&c@5z9`NPbA_TumdfYBt&%GqXxQGCR$i!} z`nAc#MPS8)720NxLkdg`mWq5_-e7w3w#~y^uj9TsFnFx1IbA6D;MVKc+YKsJ(_d+w z>{M~sReg893zNds)oK$rMn9O|d9Gf+o5$g8IIBYQa*0==j3)%twtkqAxOkUA@~+u; zrC&);=A$vZr1D!7IUR$bX8usjZx%8V%Q^)6!_p5A=1^Puc-n`YM$`EzFaK40ZI+d~xQi~Ue|G@bP?a5qi`?Z~e^_npK63KM*2X*C z?Q>ib14Xu<+-C6bO@^w; zRGo;?U6)5iZw~+UsP9p+dc1Z~>v0dJOGj5{y)c}xLZ@o_*V`tWGLE{jS8r-xvU2sB z`3D0d%|H4cUg&@G!Ga92#y|Wy3ODWZL%$kZWUXE`|6^`#=vU(g-Ue`j+SiGIc{5eNAB?VQ=CtneNU}g ztKK+kN@?_i_GHKKDGhpIH7b%Jrt7x6O%)IL{Nc#9IcrRI?BQ=S*#6y7oH5{R?b6`N zuDTf4<;f2vJhz;WzSrJd_>S+!J@#0?_V14O_qTs{j2FvVr{MNTaX-hU*-!QP=DEC> zy1P5wNCo?X0E!c*kZi}H(H&X1lfDmZzCDa*C) zZuphdg`e85*Se<8`DM~E(WN77f=%aa+j+}lf0&i*Nl#wn-TV35^@aap*W6eBsP3GV zWtXh=rFQzIyYCJp+1!82r!()u(N}LXe0N+aQ0i>BkZF?|{E}gE+QanbrQ2)_cAZ%wNmS4AQaEQ|8~fO3 z)y0n!Rc1KtXV32{x+7`Fy!&=H(+rbpCyD6>s~Tp+nm+A)R+;K{R93lgo`CQ%UWxNv zc3KKjm)~-A{My;{s4cwLA$dv6`>f_&rvm@8`l&41Qda038_X4&`fyo*h`9^vl$7~w zt*bU&IX?R#w_ldluA4{i@+%7x5DqqDtmYAK6u$J*!Q-ed*OFqmDk&L z?|!u4W8n_3^B!v-KbAYRb6taabH?)(GA@h!o%dKBkL-CbBij6N?&3wKg{IzK-y%>O zs=@KPYEyV6SDpP$^RpTUJWXD!zfR)vu-y^&`0LGvUDXv2rROfxx7oT}cmcQQN#|{q zP7A`k&OYN@zss)1Uwy923XgLgOa8M@W!jn4Rn#P{^|I&i_RH~M?;O0eyw!t(?B8`< zzO>wW;-p<_-+io7MVx%CFMgRV2x=0)7ZA>; zsh@W()m)4MPY3i|(m+!jMeW!=QLUZQhi_ z!+9mN{NDr5D|2EZ&Di``*Z;7bbYfFuc(1UnXyyEXKykI5JJmw2l=fLY_En$vuT*he z5!-Q(JHjnYLUTNx9b5Cjwt2a1(el?aS)0!vd){_rrP=QzJ9gQfov>TXSJ&Z8>?38) zc?{=*jlVNq<(pCG>g-dy)3EgI(p!vkJj|{{)gCXIx2XO>^cB0^)srPBAH6#J%nY4% zWtqpeFMS$ub*aebRq_kh=e2AVxZElA-r0Xe`ySKS$gj#JcU@cNi!`2?*ZA9X!_>#E zcN28E?0H=};&)Z=kW^amEvH81;S;Ux+ryu8{#$+e_Ui0|JfFC?wFOUzfApM--K&EC zk&97my3h5uhuJ??Z~ds;-0ZhPSiP#}KKGv!6AnI^C}PC9yO`=d3csb+Ie1WR}ycb~+0boKGRgO~M| zEm>WWp?&A>1YyzOB7N`cVFxDdJN?qBMAk;@aYnW9x@PyMowx4Aq<8H){nF{k_GK9c zRr}XV%P9V_*!1>yiQ=w)kvfVEY%`;ND8K&=F zTdEwAaIEF^YVY-@jn!iQTU5o)(=Ge*G9dI@SJ)-V+09uPm*cZb{@R^E_Bs;-MxYAdU+GSZm60nbvadKr}(iQ9KxFokuYcBfzpSV; zTXuV{SMSS!7Yho7)lV6%4UdVP;y$PE;N`x{7vCmmzL|M_(AwUOi8w1^3MK3Q_NZeF|dv`TkR=vL|16YUBG zUcMBb?XhR(uc^(sJtAh?Zo0_i90^swCZU-tv$0ZWLC#Vmd1cOkZHKaZCZ4LBALC;4 zZQ8wQ`Yu7Hxy!ddm8{&=+0?=9RitwBa!TUtv)eP$O&V_VJiExgXw{Z^ckUeb@L%g_ zT)CmN)TyXtzGX4{#Eia6*O{l;$y6|oF*I))U$K8SHqDHK~ZK;TaJ7<<~}KOI)jkZ?fr{>y6xoFlC)XMEA(Z( zbKs?!O)It4?)9!e;#nIx!LF{Er8e?b?1QTl7?x%lEn0r&gZ8uk5}qxeuk3#M)NqnV zScIU)uB4#cWpi?(J+{tF`|Q)KekEw{*a~{3gkojRs*qc3i%cs0o;B9{2)Z}$E z>|V$_w%Nbr{7X%5T)A5G=WP0onfNK%O1Y}jZA4l>AXIx9qfYh^XB;Z3KaG*w0cj~6y|^0`83hWQ0M}iyr;^{aLc(z zg81XrpRkmkx@u>rX{c13@?na^#UCXxEFAKWU6PjE5}OuOF3ZZQT4(c-_1$XWwRH}` zo_Bu~#R+JwK5Dk->f*ZajlB6^S3EeaU*p5_SfyshJN2WL?I*+5v8nHSeJiLsq-NKn zZn23DU5EYd2Rg=1miT#j*^93?1tN=%ek$=zcyXu5o%QWRmjyxlwW}nBJie}bk?PaF zDPX#_?{tQ$@R)Zdu}m*w3wK^FIrcE`W61Ms5}bD1xiwxLS`t%z{@VA2?JFO6F4%O~ z@cPVevI+&(&q9th=WF}8PyO+5M(|MQtB^+bU}}*Z*cap04_vx%+VEzQ8^{_2Vgb^f{N`$%$L! zFMfAb$kO`TFLwruoBxsxUC5=Nv@YdZjZwv+(=I7#4r-6rZ}QkR=fd%gv33Sm!xUX?!)K6z!~#8*s)N*4t;<+;z)YuY87YV|mGX`)2W_o;1(ItBM7BJQ$rmNqH{ z$Io=?@A-QseSpCQka( zJ#WFX0$(2%o29Z+$2*s-F4!-!LdyMYWZJh5z2$Ghy?#3$S*RUjzIn|iL!muJ;z1$T z^_EYSUZ>Ap8aMN$^6`?IB|Iz6bh12iseF_ZFV(kAi_O3E_ndDf{R=kV`mV+_clvqH z`RnrMPu^AA?JW3M+&SRRvAo$HDUX@eH=f@7=7Q0Jq?9hrm|_QM{p~k}8qI#Nx~M#6 z&fO!^p}O1uTTZ^$nNB&illx9Dbo4$wZ>|1!O|dTql{eWNCMWCP(CS;1de!jlR7_cusA zv2u;k;o~L#p*PhI7%y|~y(w^W6NioEw58Sg^|D$;M`z@8mjB=`-dedx=+MX6g_18i zg%0V?Dq7UHe{+77ri zu4CDnY!xV4zqQfI?NOWH!-Jb=UvfOM+fQ-Ao@x1sUA+BAwCye>-!3$qyP~T}pfmGx zPe!qe{e{KT6hHC_pYBLWIlOIN)gSXXCA9_D_xEwlD^QwQw>>I2)pQc)L;gpvQ+~-d z1z9}4^Xwo;;UabAlKH$<53G_B)@^naS39@*b#w!8tjup|kdUyOv_|3OdZ}4# z-ct;oF4ARG@rg}~;Jw_%w?2N^G1q$AEieDL?C(1C;+NZ1KRxSQfvvkgEZ1|_>J-|% zcUy?X{;=xB0k5_0=Z1DwE)9_k($Ze)6`rqEE;M7J@XdmXzdG|GWhaI|e-|M2`1P$U zi#6{Hs@6YpG3vV$`|#T@u>-TOg*L`sH(&L`;`H3tUJYAzeM>9RSew^&TVA=7>G$e0 zFAiGNJ01G`T!(Mf=}E61oey_uUcRMk=4)^Fz}Lo;+~P%7bsp+`l6+-Va306zb!I2n z9tSMXxt+GE`@ZBvou2(nFTbw!yy};>qxamU9<%4q9<99Pnf&|v&O4m<1NfhQeyuIY zHIG~A->RwM5Bm1;7e%`2e_eW-we-}@5~mq2?%QPBNgZ-&+3@}79UTtUa^rh3_jNYU zQ8s6Nq`Rs%D{*(sp3ogvXZ!3o4VY8$V0TPQ!}=96vBv2fJCc_*uo74`-USzN{jL~f6?Fg8co z9XU1fZCA>1-oN(#7xf>!zLXy7XmI4%xBS_SHVz%UjODR`!{cWPbe0do;fG)6@C&HGjS<+ZR6i+id^;>&O1n^`8!}z1_FB_Vd{-%Q}~P z*ZuwV`RT8-^Y_=+{4U=8=U?~?#c$`PJJu~so42j*cJFg_o1P#4E@mqfe&1Mcwb!<8 z*V4_e%^$w`eZD`xo@-64UH$I`zcZIT_vhbP^Y7!w?P6y8ch~&;{qg>ll+Dae>x3cTgP{f*|16Y?H?Q7e$0 z{m~}s(tE~~eZ78hlV5H#Jh>+M)6SC$340hbSXl4&?=)t+kn=Eak7Dt$mw!$yb-Z(@ zX14E=HL7ZNMI28s80W|GuDT>}h51UAr?9)=8M6g*L>vNHa?X0OS$wws=`qcv~GdCy|c%wr~lMj?_9QjU!-^R zfY$T27iVWID9Jc@D92r3n|fEY-QtaM4&4Sk8_jO{g|faXjP&VSAa2#;`c)$Mf6~KG z^&B?^Yaf&qUCAgcDza-5>vhxA`(9Mdw9xIb$e!wd@(WxS7jnd1T5MfY=HV1GtJ(UD z+mzYoD@(QuE6TIDPK3Rik^ zSMgMtzUbt%cPdrUXKt20QaS25yP)!6!6f63P1A0Qo}6((Xv?yU3A5weZz-vH-(2(c z=#(|WI;UHkM0Q_0{l<%b);guV23Pi{HGMv-7^-2znEYiIa5*M zM5Ef3sfHgX^v2Ee(_Hd3bjkeZ;l(<;`1qc$ygZ}&c<2)QNT-jQ@m~81#MgJ3uB=|= z<(2&=zB|h=Q@7MV)cYz=dGW-J7t4=D2VA+F#d%L%cIA_Wb0iEGu3q9<$y>JZblDQl z`^#hBRjuz2!w?fl~@A|_wW^Ow0ko_Ox-Rg--yzkFu8FKT!z@~B=sd()w*PdY9s zDt{1~(f7NfC{8u)@49d2=Q9=WUHw;SnSjRJ1xp`AC)nPJZT<6e>gI__KYa5xPl;J; z7xQJZz}3BP)aCxR+@EuH@m!bo%|zE$U3grj9r z&TS6XQLu?E>3U%u7Pj=b&y%%vRd<{7W&gZ-b?ivMS@ypn-P;9bUN`;5yv5IL;nDV{ zrQ(wX_p*N#pBB*VKH2P53ClvU>jE>)zH&Gj=Is>NKdq4c*t{k6e1g}P|KfJp!TT+y zDugnEQfeYm;b)DXTi$fwb^kyqz^8AC0%aJ^65qXowGCQeO@1$A|~Q9f2sA! z+LbI$cn@WvL;sqwGej>m}KyX{{9o_a5HTRqkAN?b;>|mG(hj(hJ74MP{Z-8N-(8V+?fs^2U#>k>NPO=g^{HTMOP8r!@4{=RU)`Pl z%;EB)h|O&4yx)9Q+qe4v>@~Li(aL!&Ypp*Ql;16}-+6fIM%S=CnY9+x8b>}~uGG8s zdqr~B^!go)4=udDwrANcPk53f>u@^2ELiEhxuNUsgjYdvVsm$%m{(eU>-)3Gud6q_ zKg)ZSC#$+^hQu$KeaXKS9tL}H6?x5Yi90@JfAh=FFZ`xiDsI1f>gnAxmWlU7K0Gdw z*l~NhkKI)9Ys^PjYV*nRubJwap{C5 zo^{(}UNBEF3-DO@^0%|;8%x{0ZPT{$N$a)OZdLV-oTeH%>94=K{r=CN=HEJe{{N5P z{r~?q-WQQSrvLBbeEWZYpZ|X_ef=!agR$ItEi|IPXTf6JASJNHjqdgvP-@D`adfAS%^&A`R|9yM> zy}r=C`Tx(`^?yHnf6kHp>H5yUf8M^g|95hy#Q&eq^Z)<-lmGtJ>R;v)=5QW)9=^J< zfr+v8*Qb-h0jdjT#IL-Pk?i#}G`W)9tF>X%gzk+uXLwbsir;Iz6wk3@S@=8EJ&cyq zf{NG6In|3VRbHT1#C7kPX2+h`@*~10JtyqRD*q`Pti0ew+`=VEb+H{!ry2z&yR6)| z>-+nTPa;3&*U!#k?W_-2EtVJg!E5)QPpW&Em)dViIvQTKazC?an9l#Km2KtXDK&*$vQ}IA=2Pj`(&!n!(^?HvpRKI+?F+q9u6RAlbULf`BDeg*6+d@KHET8s zT+;qI=j_+1zB&%;W_XJ)@>pP&ua)Kzm(!%&XuPb)S8A2!hY778U)PtI2ADDojG%;#o^;9d^gq`ADcQ@OUM%mtm{GnOcG7 znz>9~JXhjWm*l)_mPmbDWP06PZQ-?QlT^vcCpJw<+dSp)>YeX=kM@ZL2nRvqZhwwr6+Eob<;o^3&%`IGv;0v0TMH z`Q*l%GoDzy*gN5XEn}y#lAMc?ZsQwa%SD@NT~sakqLPXa&e&8Ft6qH2d-@X#0oNDH ztW*oLS1A`C{APKwP(Z?CqVRULX<6@^uiSd7D7U@hmD8EoO=tW(u4ZLBlqpXS8_^Ymv=O_q4u6j6I#9=IIlZPakQIILCW0-?&t> z+xdZ(w1`-mXu9_+${UzK*C$yN2V>`j&9ZP{LvSm(;DH( zDRd+3Piv!qx}e&%ok1?aSwB7%7A2XSKWBA%6RY9Ft9D1c%GY11{?~G{&wQ7);5WaT z-y)Bs1*+ZeDNjjI*d!A-hv&Y~L~oueah5#+Nr#VoT%fa6`rfIwj!3T#&oHkKV^-Twpe4<3s*3q|is z-n99y>xRH;uV;sP6P#<}KZkh6CC&BGbY5#Ged zv*gb&l_y7}4Zj+lTv^l_&E_xp@x1u72fac((mz{fgnYR!wp~Vi=`;PHCgWGP#TiR} zZkx9Gtgubku_a8LmU>Zz+cM92ylV4um#}_Y6!T-=;+-!y$%qU2+=x~^U3f8T`&)-T zAx70r8d?)PHtA%g|Lbf#a*^lBi4`k!6ia?5>29i6EaW3>$*0n#!_BOjsKmy1b#}GQ z>64GSqPf#zV#2~t?A*0yuKvA@h)w2uF0w9J$Gzu=M4{dVCazN#bxx<&8WhUePP2C1 z$GA~g(`@0{Bj4QK9p37-bIyHZe^!UX_4gY>mPPWFSjygSw6O09wx3pB)G2)X@M>wx z*Sx~Jwf*?m-rsMPy!o~Hh~(r?3z&kQoP1(^WL@MZAKkSkznG7thn_fb>vwsi*7VS_ zmK{lNV}0KAKAOP$w6^x@+=()q)@>=Dw`I2K^9xTi+AfFj+3Ku+cayzmWjD9sy(_f)$F`lblDu~K?TR^~y!AkcasrQbORVjxe9&j#{ zW?s2P?_ARTS(+cFe42XOetk?+v3>DxHq(mly(>P>ova|Z{%rN-7zNo_z4Xs}v@E*P zUbzpF9X;YQ~+m!g9Ahn{RM{Snou!#IDf zWv9Aj@ozT&9a>rsYa@T;oZVF4s%mvA^w;(MFSb0N96CeLzk8d-{53ldyZXGB`FOHx z%GzX~JsPfyR?gWcvsP8*?BsLD)>SusHq-dX>@Tx>$`41DE*Y5wwc~0_Q+`Zz@l}nQ zJ7Uite|4Q6v9CrOdO&MWqJ|oSnr_Dm?g6lyPRx7XNS8Q>QQpPEZOD zU~&nIaji%Su36~p{87bBwJj`1(B$HWSG!hfDr=v0uqxeqYLc0c)GNJYv2% zT^R^XgZQNI-aZydZOkL#G zKC24vq-XkMQ+IVWOu1Cc*?j6`qTsvuBQtX3z&ELe&dxkfpV`ss!U0-(;xfCw0>b*vhLia+P%A(SI*w0rp6+c&HO9m zov54Y5xyhw;j=O{t`)F9TB~|*Q$Nd+t}RdQOtSrT?#KF+av`I`(~tD^x=3HxIWdDh zXm!QyeY_q^1*g5e-B7YU@HcDGjg6G_oD`h<*FYfj| z^=RdSP5P?QETZ3L7-%xzymYl-E3=_xVOiSYtA2f3_uij&_s6b=oQDRt*!&+a+F@WB zx`n-($3E@&ku=?VoO;P`nb!TUQ7p>&C;X;R+e~eXbgy?pawOBapjOYjmiMo=UAw;a zm%VeS+wO}yc5OXjYN=ebVC!q1kad09-7->_qqdfx&WMqkDU!V1r93@|N4F#HiOBA~ z(FJpD*5{RbALryW(c9_p>&VGA4j+~!lRRGvTV9<~vOL;M!LG|q?Pz#)<8jpj@2htX zD&H02Xv?20=)!KsS~I)nNQ~m?#g|efqY3gj5cPh#M4q15Zj@iQBa`E1g z8Fo{J>(tvj=A2x4$!CjsZxv&AjPvKPZRM6yb8I3DL%r2sOx{5@R7OATO@Ub>YQ-bCJ|1Q6d7LTVlM^4j<9=^c35%apRNdmpxbfRxdM{ zm_4&Lvu)Lsra%5`o-v7k4D8x$x^zM4x=pRghMnC)5*~rCUuJn5e{*ydkJCGYaKE0c8u>eH{^mY&dMR!|+kTsp{q zcUsJuc){nV)b<6bexw(xYd-_{i-@lJvZoU1(RW9XBz4jJ4PCkY9I}d5LR( z)0Z#jCi}5HTkT%PzUX$r{Y?_zex2J9C4cirxL<;>8hdEcUuiv+GMD|Egac1~GwuAu zAn7@U_k~4oDzlY;^3BSmyweGMCOT@o&t6`9I71=lWXywx zt=cnB7z*gsxU(MRI}+?`bcyF<>Bep|6wEx;GwJ+_5BV(vS94Un4i=*4))l zI=N-3o!G=LDX%YUC`lf@Z><(8FSKskzPW{dwGN^CCN-}zu#C-YYH?K$eJC1^HdK5KDgQR_oEbtx?Xm`(L-Ot>D+p(X&V>Ej*KR^X9XHs|Pz*ZHwv?nlvS+GQIz${=s{i%87-QQSP!1 zvbC?TrfFVV9e+OHgHG7 zXy^$!%)CU&=}bqWf~{cb(SOnc@iUK${+4$5u<*_n$FC~a0u_yK`RX1!ZM*fN&@-*~ z+n;PX^;_3x^`85aE^EEteqw9s@5~9WUw^@f-IkNK;jiAW*u7$6{>hum8QXSST)%hnBgfko zH)r|gozIVz=A643v+LsB*(cwukj{)bZZx6GoU5(3CGYgggc}}w+m5^zR-g0q$~=pQ zJ4}V&?Gu{2zlvqa?)Q(+6`kTJlAga`=0Sys$7j!VZYv-3P2kT|6F*fuu|n*ijGAZ9 zYU@Wg-gO_@e8l}{weEW}pX=MWA9vO=UG?3w?$$YVkv7k`@LV=Ek?rA8qM_UL{3^HZ z6}eMiCBL|Lg))nRLY|ElN8#=1f4f&Ki5EP+c)Hf32^WqEtBKxUkY(%s%W7Ty@u}6P zpI*LRTbTQsQ{64&c;JW62UbW~@tE;^m7Tb1Ve{pvXKPP7_ZmM~Azx-Z?fr6BnWep% z$3CUcGw9Sicen1?l*6Y^eV;s2%J22msqdHnWmtZ-+&}(!WaW>=hOE-U&#qd=pABui z{7OXa=}o25_)ULHXM~w$d&?=<_J3G+!>nSKaRJBVS6jb46hE=>-^7zETXxSl7paiv zQR8#@=c0#-ZL68D1)K@&i`%1_&tva%J@pXt5x&Y-ubUpPn9g{#@Z`nqn(xJpxfko6 ztSaw#*Rf+=VTgy>@7nU2>>G)~kj72h^%hKjP zoVmQPc;bmSFPJ>H%(|ANbw^@p@X0qTrro)C)5}3?(utpX*>_H?{LR*5mZI>CGxJG+ z@87-)jdwQddZ$dByWRZ#oF$jvp6%8;W%=*Ig`I|Z%Wr8p;GS9T&YdH2t`q+}aFE*_b?CUmqc7IBe z@}VEn+pJbei$4CgUf^MeW-?P+y7huv&aOT@OXg-2zFBYaNaOTF7i%N2Q>$BrV`XPn zmPHuu*e_uD*5&x_UmtTSK5MA_WNO~2*C}HV`mdsVmeew)=`21zoSfT(x@LSj`q^~i z@dE8O$AxoNyO~rRIx#I`mM(*#=uE?vl_u-z)Xmv;8(Uso-?{GTt=#g2GdcYC zzDXaSvfx^dvU#4+zTCn)Do^fp^>QW~asM>D^WUaz+ircmQxdo4opcQ>S~WvZKG$W& zO}Wi)Bd3&|pSWG+!h6e4zZPshEMI8hA9#A!yUon9%YVOdcqM6E;?aBCwOJ-B4FJ3jYwHnx{<@cJlUwBw#`<}+u*x6|wIH-wxKdVgqXugr0sk8*#L z5}j;@BDHmQ2e2 zH>+d=<4ftplqK$h6CCv{In_B{1bY|s7Js*$QMYuG#MQOxiEF$bv7cC>a8 z0zLmQybO0WbVz!4&3NYyscGg4p%MF}rkNM*ahMT)v3kSFg&*qAlx~x7|8!vDj1V)S z^!q!~&5wkHKg(bI?PcWgPkO3Pl^3r1YLzLkV5+cw&#lr+a{GBDz02oraraq~yYKvQ zcP6dmov%80eUeRPoqqO-EhNPxdWy2-$&M-4C%rQ)7W39PF{Agy^QW@8*ETy<96r*1 zzv}A6Ulw~_9B2Ar@Naj#``bvSim&-STDJ{1rf-(L#eaWK(cT*McIW7c!Cz0jllqer zAZ_W=6v(-yV849Qnv)uJ^Ex$}-|l#K%-qK&!}@OVd|unmpYwj_4fSeGj7vbsJc3uKMuwwcEB+m9szY=_=$cdU1FjZ^-Sy z^Pab>p075GT$Q6@Rdti6K)q`Be72h_S3YW}el~Lyl&l*1o&Bd8hCKSgJ~*W=Bn&YG)mPCi$AZTG_OYkZ>p18?&N6Y*mm(?wr=sP*@^5QqfSq~Y#iZK`{m3_$wzJ*Yt@QYWyxlqoq5^1 zyIM@rBHAb8`o5y7bn)CR+2`ln`>7-2%C^RP&bsD9rbaDYQC#JI@Aqi2x_&ZVUViP= z#kFT0tP&#&T1uraSEXK>q-wIXRllcOT9|pa;a~AZ^I!OXJD#j`M!KbF!F7>+vS-^9 zK4vlBZLm8lIsfIUUKw}x9dYv=ue5pkF5)VGRD5_zR?qt5TIDYF2{Y={?c^2au5;;a zU2o=H$s1u5p_P4Ll44_#?e*l7yVw2nI(F(|Q|%sw6kV@)Q~tJTYZxD~-B zWGK38mdsuKP^l)F%=0rZ-Tg2@u*1+mE;Qy3&q}NOh8ZHKSM6iD+*z~X?b!_Oxm#t} zHh!J9)HQE!YUTWp9!BF-F(*E?bnuk_3aGLcCqcrYF=BXFWK??;RRXY>CVm%_f^Vr z^oUsA71^cr;rzF18`;pV+GmS2mVBM(b5++Mj%P`?(=YuA&4+4L+j$;@7yUeZedP^- z-V^KCXUDjnYHA4CVkR}w_NK*G9TBOCi)$ssSZ+P-ULNhHY?OHFy?A+hhHhQ&HL;dm zCqI0z`6SzMctXK>_4}EBxtZ^NK3VQF|JAe4G0%;6Zdqm0PWEtu_ZYu|M zoZVFD%=EPGbshVo*{e3O-IGW)1=%M1Htxi3!PyMVA-!o_XGmS3)lh@Slq*wYs zb7JMt=sKUGccql?-R7X}t_HV4o`1OedDEFwm4}urV_#SlS9`ZzdhM-Md&_oQ{50=- zXkNuRenYz2?m_x|>>+L+dH=8b)H$5-x+-BX7gV+B4n$XJm&f>PL?aJqMi%tZb z`FJNdJ$gmlsw$qP`KQ$}Bqqfx`W{L8-O3vgrhnSa~s;$|*`B3_d3)c>QVEDMR ze`jBw-j~Cd)?ZOleec&YKWYj4i50H58qWDU+c+G%EWkhEqsfsrPtL`6mikKzJYRhM zwxzXzb=vE#Ts zR_*=;Q%!n;*OJ4LJ=?6#G9{&Fzn}5* z;EXBmojJe5i#~i5v7G7|ukS2TR2A1|vHC~B{bl=e7`F2FygsD1$90w`=Z-e1ryk11 z)%UbdY}-9^lKuMk1s^3QemcEJ>D$WJfr7!6zc=V{@@zA7NQ*O{^Oc45^!@$1uktS& ztWLW7W5*KK1*dj>(u%Oxk3O?H;qRVG_sGj%3eHD0ZCYkvduQ`L*B8;;2me`|Sv@mu z`@!Jj9@7&xnLL~6vTeoO#sba*+h!Un3ap4f^R8mWq0-+P9*LIgpBwYoJ$SljUT(3I z!i8CTwHBW=nzZ%GVy}RB*~L4#gN|17_nFCdGdz}(m6ZLvhsDj~S=zhh4>gU{?q23R zwmFyMf#0cLZqbiAG^5Tf`)0@AEXDoDh9^to?q`D)icJ$ApTBu;_KA) zINf{4r%&mQcITVkEwS@;omrg0jc-wa6bF+TiJj+~h>GO=`u6lQ_#;31mdhcz~6d3CJ=*5m(x%;z3bXd2= z{mJ!McAm?SS$NXRi?`Js57s8Cw@*l38@S=fj4Kke)Mw@~e7)Mai}7fD=i)~fSMUGy zgui8?`u&D;l||euV)?V*@vO9|j68U7=IbqTMYm6^6q}(gR%x(OWXJUuE zzCJbd=Vr#03Rz1J$ScVHN|^HS%8bv~AHLjkZPi(eJriE!X8F4xXI_%_B~hTZU&VVW zll%FLHt*!7Sv>61s$qLn)jIQT+0~FH!Cx8*&p2Pc{kCq8R*LhJ$Hit}i&C~1=PuK6 zUl@48#qVqQuibM$?ema+uRv!*ZrlJ9TfUi z5WGon;qh%#GqMg`YpcArbS>{^orc^Uk0P1f3=TQSH&49TUYTaI@Xnfg!xm0qv+nJ^ z#ZHYU&eTgkdGw0c^u*HLD^oZ7^l)rz5@em)|L?%0RVQyHO=S0Q70}MFH`7==L1PkY z_{z8YK7C8~o)PfLZh7Rqqg&b~`#D0C-C`I|e=g0^@!6BlVCJKBX2tg}HO=ZJk6V1K zz4n&3uV`zuP@mtVwmg2%;U6+dG37}MiZm~5d%S9nsl>CIEBVcd=c0|B=SsZTsrDoM z=g;~rPY?5QrD7~%G$C#|g`ugDIqG_fskN_H=~+&?`@gE|Gt*}E(&+~zmd$?m@9n~a z{0TO^ZH7Dk{!7r+48F8oNqJu~U+A1$)?Qq#OHM>|&Hi2b)&BpZU;Dj2@Beqa{@=&? ze+T?GeSXaT|IhsTKi}j3OWXg^%)D@~{-^l!bx|Mfcf|kr{J#FT>HkmX>;HUQU%$KV z@8kd93S)Fk|E<#dUle{y;*I^W7e6}JpZxjU{e6qxHLK3(ec%4qCT{vU-R|c6fB%l} z|M&IR)4S{U|35DOF4FI{^3i9H*6;uST>k&lT~5E&@BjC2|F`wl@9ppX{^U5tMsVl1 z%k{o4Q#%fQyDq&SR_40VTguQBk zVBp@m7>{jYl9A7T0S50ls3u$uoO=^ZygE!_Pf*&fKXy^^W`T z()ky)>x}B&KPq(l>z}yjhq&G1=`x-M_a6Cc^tn9vsqp>fuh749))@xI$Ce(PbI$tv z<^E&KIexHxbN(|~$zS~EmhYcKK0mMYs!v+^1GhA4HnoHwlnI}vwN)fm;d$>`E=T2i|*gsABCMg=dVsa7M#9k zLY+|2tLH0^Cf%Pl;cowHu>oKh zSn==4lSP(6Z+

9CD^v^7nN^BfGB8wuwsjc3iQSym#4smc8A{Qbvvvwo_%XVK3`Skdy^`>b^aa2Ud=OhC;Yj$>1=*2bmHp1lAW_P zT?H;aDl$LC$l)9L?BCmuOW9^G&pVxBC^Yw;%xQn`gEN26E}SE^l4;*;%kNhW1>fht zJHGO%{{0ts`h$18IIUIjN`0xZfAsO9L!K+w-muyF>9NrLq9E3#(OdL>CU9-uQFlc8 zaPujbt@Sk=av#{H*M%s|*uMKG>nv4K-xBZBPc=8Xsw}v54&+bI zHj#ZS6cOd4vZ45ffkx)@gGYIrOBS&#n6P;7E}jJe-DfM<0u+=KKVDkyE$plEcGj** zPfMIwL>(TUeiSu-ZOi$aEf4D$nFJ;p+_CQX{&7>}Cx(x~tg3IX{iwSZyz-ml$GcM1 z^Rhz%fAM{pt<3r1;n#(q=T6$YS2m~Q@jj8+%h!o{Z}-TJTxK^{A?euf@NI`@pTFuU zb7Q&oXGa(Ll_ka2zw}qXj=$OWAmg=!{&rrAD-)gUHP2Q5K2v)7-}3v*GmPYZd7f;1 zzy3f>t(BV4k7MPX_cyr6udH|E7WPcIw!B;K_UhLT_SX{fy8J*a2(c;)QC?Un2A zt(Z_8exXmruPyt9m8$W?h*w_g!(BW= z;AtMC`mO^>rK}1E{y808$LX}$K0xqUS>KjorpKa&Gg~TZGaL2Q4!5j69~Ns=ZvK$N z0Azs7x4kSCuf^|}>9SRLU%h6vQhxHY;tk8WWoI1<+pNbZ5XW=#&h0B-JvF~1it3cs zUQ)WRc5KJa^T%A6d`fGBwBjw<4lV6o$##2!r|1dQo9wDv_i3Lo_g+xS{c~52?tJ}* zmeXRvZI1JPzWe0CH=|`M!^bJR{|d^)7YGIaKcV|z(K|1`h}cc3Gn1#MYJB58|M&A0 zRzc&w$)B_u^eq-;d@72ayxgCwk^jN2nF*P~oHZM2HQ6qHTPpI_$G65{zC`yn^S{aW zJC!~jVXHo4A3lR$(sl9*?+*<}{G}f5Y-CocKc`mfu;I`0Q#X_i?-#uP;nSVW!}y&~ zxbvl!jnKp32Zv_fG+U=R>)eNM^Kj;kN4D*V?nw1N#%6M6=L8Q1AC_W20Yi7e4a@5M z)MYd)ddkDi%C9ef>l)#5u6DoSN@>0GR-wyZI4-ev^;f#8StZc9_+IJNJ$2VSWVO$} zE*I!jW-hGMCy+piC=74(yOXtvk1N%6$XsI?c~w$o zrKsq}yq&Ag2EPorxRHg$;(bs5ch1Kz_^z+|Ucz?6^Y*;yeZ?w_=jMZ`T`UXhS4U@@ zof7P=@b8Gr*X7bN_iP>(tlj2v%E^bF<$Z3fV8N59KTl@cR~~q_ zbP|`i4&&_p=be*P<6FZ2_7am!y?D{-suk>%p z0?m-%X@YXb{!*?DeidP?g4RXM_e3Jz8t}2b**B?HFZsw~Ck5T(E}Z>bnzxls$m*&K zsbx3au(wrY4Ss*5=XsO%%v(xgd;BV*m-F3UmC(tTpEGG`_j!lvL{9~;J?F1vz0m|Q?$2{h`<}s%F7Ej+KieeMEHswOnBl>2>bPvxr49Gj&R%)hK2t~U_w&j_ zJ6J4BI9)b%v}1tB+rp|C;1qjFK+ty_UzqF zGy1uv&9Gv4^Xt&Pdw1-$u5Qixd}ZwwKIc2Puhll1RV6&E;jz$U`SJ3D!gPP7M#Y46 zag*z7RrW|s$+VV8T-@*eQKmCc@4=$(n{u4nGETiMR(Tl6@+0$JnvC30>0SxJg%#Bu zTdY1xHEeJH<2s{)cgNQ)`wBU}r6?&jwOw%j?y1}~O|a5p|G_ee=ef?S?Y=ce7AZCE zPncG5`|GOy+JtE(H`y;AK2@T^ux)el^hpvY3ytey($0sY-Ej(zr^KI$eT!}?}@8+_?$rtq7`*3VO-H%R7x&=8tfU|m)l=(J7rS;tqMvom}6^AjKTt4Y6= z-Fd9rZvUb8HzsBayBt~`QI~8rV~x$E29>`yCtuFc*k_=(*zI?vkj=)Q{Q474e=FB1 zr#_wpqD^z5k*^<^gZP2+eaY@8W$?#lVgJV_=`rmR;_yL7|af=AwGQU4RU z=c_mFdT6kxv0Ls4$J!vz-(4>cJ+9f>Az-c3;Uc46(>Q%?=mYMOrjCccZRf9;SC{@Q zOo|eEAHOneU(MNKR<d`-)ukfgcPE*lT>zpeQv4#Km zq^D~A;-2-ZSKw^32meKz&MN|Ei>=xm_bJc0J$p;XiR)MEBjcuBF#V(Qok`%?y3J|{ z@h(R4TcUr}NyW|XSSVWb``vc2xfv-B&*=YAn&hFUYn&i#_?RjlT!Y{T2xs~uWCYvu}iUKhTXcX#<7TV-vQ!_!{}-#fJa$*#RGo?lP< zd}LYO_1d3xC1FqB{!TZt658$%zchR6q_anVzPSGTy3!+_Cl5E~D$Zp3zO(;{lC0W9 zm*@3)d)LV^T2xu-Z0lzzdQoF&eqFi$lh=Hg@5~d|+Qr1Ls{5WL@u5)o`(N(RTdcB#wLUHl-*P{&ZXS#P#w= z&39Zs%8Xuhe^w6vq%`lxH%IUOD?ZK-?2gQT!Tq+2}@_? zP5Y(AKktU=u6fB{K9|`Xe<5z8P!likk^4|x-$n6qo8vEjOYd5hp?iC`kdVx*tM{f( zcz7X2NlbW?rfnwU$4fzOygd1+K({bw9FGwdq&O(r6pS8NWU)Ie350F2%~vd5?IPPD{#e`q(CvY~0T^&;5wU zqo>R>uFuR-pVR1})}_ETqvzcA1qZojZr4BPv0Jsx!lP=>P0`=KO_MgoF7D^r@A|dh zt1u;kv#;QuR()l~?NgI=bLLEHdGlt@?879W-7mA^|AFaK)Y`|e4}rMUL> zMeq9dSxxcW>HBfX+@x>;4O{y|v(?jNQiF;-w#~`DhG2 z59w#Z!V2yh&Ng^6|AAHWGQIWp9gi@qRAkb355A{-(hmZdpixfmV`tL9#~iYRw?pR$zm@qS&@Sl zt3-X|A0M>f7S6kN``Crbrn}+ETPs(cKDbQ&!$Zfp`;21+4>U{7J-y68+0QF+t=1=v z>CL|PcXuf0o?kWnZu>*et=63u21YvKQw(Ec^fZ#KYTAQ0eD(9u@9};uFKXGewtPa) z%ZSfiE?zAwL-RMcOcGUgd^e}pP_oBR&hvn-MZjy<`=Z+>w1?}o=(}ih_@~<}^y!lD z47tKNNquJi&B~-`w~)JUL*7Tc~KCOFsyL-d=+q=^|GDRE~ z`nPSlwVOdnvv8xP@{@j(87fhF7R}3d#T4vPlCYfF)ZxnDz9wPL-KGuywQJujRo?bK zKWCfdtcRQP=kYPl{w7zqOX$tSU5?TWcTOj6+rzq6bBoyp)3X$HyE;|;KGl{#o7`X*dp+pqx2+<%$r~I?6f9zdvKWAK)_uv2GxqB;OihtLeO+4UvTXFH{klTkQ@0t^E z|Jkw0ueKey9C_O1cePbt&71q154c>CjS>sdnZ@>r@q`I`adb_??v-_3F>Die?T%Yv zD)eb)&53Uw8bv0DGx{gC6elk|{!+;P(&I0CKR?xckU2*^ejd}jYxfo^oP4W#sWQu- z(cjxI_xJ1&%huN)%~xhi8?N5I-!s)(;c{ijWkZvL6J^p1woHEfrMOb%xU5Tx3`<3< z^xW98+ygIfy%9E$(X^SlCc0T@exC_f`_gN48FyB+R_?t!j|CID4IciOx-Tri{Ag zn%X6G0ebG{F=E?2PrENN=F6zF571TOYhu?pZGIxWJT=5}?#aU08XYFqKJHQO26iz< zOE^*@UUx-bd)gwhE2;jlUwcm#i(9Gm@nx+Z3#$)J?YSA28RQ&(=w?xBb#btZNA{BQ zGRiCSn(4Es&onJ-M%{yk`m{i==8rN0A5T16s-Y1z|BvC{B|VEwl2pVT ztFjWJR(t#N`XomO1bo?*w58H%gKYm7Yt}rsz8k;)7Kd;DpWnRa;*9kLhZVB)l{ZS> zEjPTsZ}zgcj{?^{R!I77pR+nPKK4#n_2qNU|L>kJ-Q6{->`%{^`oomMYoJBCU3pG?rK1zBOCj@yfg@ zrnS2m&C{0MG@Qh-t;#D^s_52Iqu#|v4cz@I-tVVOf9Y~VjOhTEtY~1>^6mri7sVL4 z4DZOv#j!#?nUjt!=AKqy0J#in`P%F8XD3DSOhK z|97kzh3~A&T6lkVUWQ(9)YQu-ChhjktX;xqAqV1RloZUq^y(zfM!n!Dc}?3?&ECD- z9<^QJTiu;3`@F;*7bq~Ws#P&_^((IA7Is+pGwt4PWpBUfmmP#{CVlz1L^OYkyO3a9 zWS`0&&UdM$O7~8z&k_*}jQeLf_u~ey+!xnv+Lo_t-KV|ym%Fl3W5FeE?@Rn5(@zJ8 z3oE$$-P#SUj(Sy1wF~Tu+Tp|>?~LE zu8HpM&ssaqH2r?|t!QPt`PSuWt%lNjy4L92bK3Lk`Sc%RJIgc{AFO(CwmMiZKkj1> z)7qKq^}|oMbhmfL#oCD1o;+Go_~hLU`6Dv-CB#)t19J|me|B5Q(BXaYp90^PN1XB= z9nDY7r94emI;@LT4gK(n{nshsKMqaH&FuryEIvv9ymdx z#Vr&5So9&^;9~sD7pbM2m}M_SoBecCKYE}&XvwCvd*(EIJlRw#V$uA$gt6xt%j0*F zG5z;g#AOSP=@$MB>bV&v8T>e+Z%6CWeL~VYIG25!nltS}@R}bf?>XBcSw4wA-tHmY)8Ic#H_ z#Puh9Hk`TLyk+<0*@d$O%ER~Fonr9Fxbww!q1M`6c}3@@AJC4@JM4AK#i_8Yw|+lM zzS74aX6K~3-#rs|h3u7Q`)YWp`&jY zPqcsC*Jcl`>kRLc{wO?BN%(Qz+O2e%&c&U^$G&M6%xu5$%XeQ+WYvOGCtMz_>}-!X-6M@X5o>)_UT=EnYMEB8(tqn*u>HGvtu!y6R@sp*7l7 zj~{r>a4-f~oA0tXE70G({JNQ+xM$1~o;B&un>|F*qD#BK z<~j=Bv)Fs&_$wEUp871!*UJwa?lsg_kXJ6$IP>Ddm07y#7E9AvQ<~LntUr4=RrcM= zxxY+1)K5KkY3S6OH^f>F9SJ*AZ9Z>q@|tH0rO%(+dV#IjGII}u)g^zUi{cv<*3I0W zs={(+d*zoj_f7D>{I&AXbyd50b62nBaXgKFg)w1)ha(8 zpIv@>)v`6K4_)Nfx+pq*{q+v5#Muqf_ZB_sN#1&R{YnehP87Wvxy zapqTVJ~X>-PJsU|*I9mhPA_^A<-4uc^iblZ>9?&fHA>gNJsSP-^0I4EoDU5a-e5bQ zF<08=ZlNGwb5@p%O4#%}cbA>A@K=^`6X@LjC^Rt2p4HtoGkHmD;H?Rl*J-Sszx>Xp z;61+bFEw^9o39=coZYMQ|Nbe-14jeS{Eqd_6_&hug->bktXpcAr0>mBUdfy9uT=L? zrgdtDmE@bvN=-b+7*{;A{;sGVc(}^eM*5IT-oYd1+BnQ!S-Ai#O#YZ#?#ld|qYKbB05#Sye^s z%%k#S9v%ngwJt9$JU`1*b%r~`dG*3YEXgWIp8HHG=uv5^xF-DE@yJfmudV8lnYl-w zOE9^6%NEXed2#lu%hea`stZ0#3UB;r9renmV)6UC87m)4`yQY8Rin)AVedYxFT3Yf z9G;=86R=1=uH^L2$CrC2K4Ma3_s)Ntm)@{T@xvabD_%Y;*E2csvdsR?~3U98~D zBF!p$xijUR`LUaO_J{43s4dOd`THS=y{Ll;=4KxIafK0 zm>qVV=48**)ZvtoUcx85*X{WP$Ny4uC*M>Ou;7fm^=G5Fp{aIpjJ<|rriPD-M80^9 z?w8cm&hPo>H6(sJy8MpTOY!?~&rqjW`+oHNbtT%WM`G@UeP^A<>N|De;Ws)#yE9u- z>(?H6>8o<#7$3Wpn^4}mtC24fIvo{^_T@7hW-v)h-rszF<-yAxl11|`bF!EuwRL#x z+WDu+)A9EF#eXk29{KrZck-%z+LzCon$}&&d+CtcW=GY~hO%?9*Q=3&o_UkphP)*4&OWr2oUidkmS@H7q@LhgN z>oP1q^xV9}RcfR%A$-MU!?_%iQAbbpOgyC(woKkavF^;(1U#@J|UUV)0*MCrAqM^k!oAKWhp z-)QNz;+5D7Vcn=@ivmM8i2A!^Hq4r|cL$Tdg5ch?c$HbcU*hgoM5V9HwOK2->>vESkwV>0f4{(A~8x)y*GY%&)0y{x~B}dp;{Kg{Zr>3%`?S%-f-^^#b4}M{I--0(Q~9{ZqP>DyJWmo%y=1AVwwjo*pK+cR z6Tf`kx^J)CxNl8Zbv8I+Z}Hc?&MCzyN|LwsXfeyUya{yHI{tR<71g+3m8%ZkiT|Rt z^Obm|@~u)a6ALxrwO-rUgT+&wV;fG-;}f0o{!!wul7n~GCiWCgcw;!Z_^Ynuf!@xR z&wK}Rud!ZMm2~6HRTG-QW4gt&(NID1K<=|?604;o(u52=P~ zC`*{nxKi0PfBQr&pFPE;&7NPAnC{vp1U-GZ;?UCUDHkQ5vQ3`t@#Jj&k(KN89<2zu zB$FF0P zHLi-zt21rmh>F}1k}AVGMZf$elYibq&#T)QG^#H=5&IFHe^c6b)$U1$UKy-;&$X(Q z^QnrH#QaZ8yC$?9*WJW=?19?)PtV&JK55nGaV%K#>G`pFArE%vyw6)D?YD|6N90Ra zj!-9u+y5!rmn)?b`#RVEh)$1mJW{}XaNWGzDcjF&nwcvScp*F4ytb6REI9vJLu&k& zKMtvVz9J8coloYO1>R$rzWuy|n?~{OH;1hqA~)?%WS$(G5^*Bym`3>9+-;|~KGG}Q zcY5pH=~@w**R}qr@m&`82{T#!O(UaBpi|;FZ*B3siyC%B) zQ&-}eyZI^09#N+)Pg_py-2C#L;UtZWY4e=+TKOLiH=BIAf1=Cx6S>)|Z5B$Nja~75 zMqlyznrX^=uW9Xm```D7=&`;CkLHZ4ti}@k?=m&l%x?1(g4aa2aevvc7iy`Ho)Z1JaZ|F2%I`M~69j$Gq}aCx`b z)ottMTym{?uDk40lG4l?w(owMwz_7lj$EvGYMT_N?B$Ki-#E3J-uIce$oZp5ke`ur zuBp%^SAq7M=UjNqANbC^+x8{5GjXe%iCb5BZ(?$;!R^WFfkyYFGE?Bv(qU%GVuDq;5uIh`oOx}|p_pT^Ekm!^5u zGvA%%wYYuu)oSi{ndYnSH$4d79a;N2KH}_ z>%)q-J!JD)!{PELt!CD(7n@|BZq7fDc}1hp|6@k;@`p@b&vZL1G+dOur|ei>v1MK0 zqZgUyT^6};CM5k)Iu#?Pb+yt-DZTq-h}h!Q{@eD8|Gi;1H~))w!Lko8b$XZW`64Rr zcYxVzRg%cV@ zZG2vPcib7(T#sd+Tb#trcU;zKAAP~_~Lip&bjWPAhp8g87}wD0FO#-xzq0RH;qkYEG;`p0TQik-LbSM;bH zh_6tH4*6`-ujd`;TW&LJmz!y!(7$8ZH76F$`us{MA(rRcqYIa}^5*0TmU8;Arg|{6 z*$aD$L_R4|D%z|NKB1GviO1jbOmpG0l}uSyLOVJbU1PNRRb-|gnAO+vQ;gZ_b=s># zEssCV+Sa^pzeY^8c-6&L%Yr9s4pjCW*}yil;d1%v_-PZLm}?ijVlV!olFl^$pm5D3 z2mM%0D!f)tTfR?Mc~(i-1Dg()g)t77g3dUbAM%{}!gO9q+RvBm=akon_^6*c zxW;JiuM&ny<%MUHRo0bpx?A+CZ2l8=X6d;ffs%g|gbprx$NAA@S+wi^-lK|M1!4Tx z-#>fDpY6jYBN=hNQ)d5U%H3XNT54cawYIvgFsz-j9=%Pl|bW z#OPcVc^3F4=>G1-HOEQZ(X~RetI}5^Q{d}jq4ZGE+Gc)+jGirw3pVbWkf&MFqBrxuXFj!(=%ztRJ+psSGOvZ$y%S>`+|4Y?mfpQe^V1;6}M`bt@_-oHz!J9 z{*Rx{9ueEtMt>;gHlMgcOk)10^~XwLA8(J8c&;FHRprp+#c4j~3{gv8y8LFYY47wX zTX0bM?17!LJ6``;{@XO!_JQf0{UkktO@=!e#_&;V2$7`v&?U^2{cQe^Luj)$^ zcKsJ*zi=kYx$|#oU*Gw%>Qz$H;)U^R{5e_t-Zly+PE)#cv?XBk6sfs8r(a{6=-)LV zb^DEXQ{4Y9>AA-C{dttFropjy4_+qky5Cvu`t!~2N&CLo?~t7`+oNH|zV5tVqWnsB zwHaztpR-B2yeuotlZv!icKhIE$4Z_f6C@_CnJA`S+b=Ej{^gHJO!Zw8T@J6*Sw4Bi z#l1eqZ!KN@*!t0RiIr=jmazLTntr8dmYmBSHKxeq%L~FHow{4BwIakP?>D<;+VP6% z`m09)Ka4+ntZ%i?-?Dn1cgVk*3+uEP9~_MOamFyi<;>@j!WZn9m7iH!e{SI4|A=>X zDd!X31K&N?GzK`lXgfPwwe2iN;NHZ|cCuQB&rEopY&9{iW6g;NzKzT;V~w9gieJ|F zWyCzS)Ux-^!Q1b`^6#FIO<80<|DmaLqvYjQ@ncJqKlT>J$u5X9yz1wn{q*95pg7Hb zw%e7WH!pr=xYO0znR561)97oWj2|AnePddYrQdVfA*`ZhuW@D9^;gT6eio6n3bL3a z{CnqvhBPHZp*g2jCsn0!H23WeSDUxvRVs&n+fqYWqrmhQ#q%+urFuZ{-lj1)6%LI)*X4wQK=Tlbz%qCEr}fEIf>I2Ui7cXS-qgw zE=cO&nWeM3opS@sFLQsL>#aOvXUbcuWA zb|ux<{}2il`rDGnZ}A%GdCpeaAO(%Sqdg8*Ofr z?yZ?qA<&s{;witigwT6_29?7y_8l#kc`O?zO4MghKFz$h^rR^B-jb7h-~MWTvDW+D zmSg4@v!~ygX_1ouX@Ci;fzWrXp^T*+7$332NUU+uy+hx~=={?rB-_PjN z&6Qa5?o@oo1H)D4?%bbwqWofElFY`(TD?~vT3k)&%ADdd)3E24=SPFA;FaGVm3>(1 zx}`~L* zZqr+Je_!;S-YKE7^Z55AuVool?q*$QC}5?b679u!^z(kcmd)PGoDB_8Yt~MDBpPb5 z(M0Li`b*dS|9t%eT25Q~@45Z|jrZ1kJ}s`CwKnkX)OpteW_v8FKR(~=_AFVKM;ERB z95Fi|e5Gnv-vePUgiDSpvnt9gRc9}j z5^RjN>vXwM{pMPrVxLR-IquY7pKdREAi-lL)9~^6&8njjC;H2qC+BYXs`uMpY2u0o zxdoeJ-#C7m^fNxcS}{9s=H(S9W-ZRx;_%B#_LXw|T)i##XXx!)+sALVrpw~$Y&#)4 z=FO7p4hr8p#WHb)V!*ttNii7DV=fh zKIwbTIUZT|g0~Mw3|IiQDYx!ES+&gp21G)hrLwfAnR$b2Jk*El($g1B?Ep@@+X8J!o4kal4TyX12iP39&8~-`SUd^hXXVJShd-aOu zecFq=zMa{4as3aE7xOL6tR8o)U+JRE<|Mi9r_suK_MnLOox610CExy>x1u|9+Qnt( zH?O&|?VfP&%d(BR$)%N{?w9@b?^(Q`#Ku0cf+M!J;Op+Dq}%1UWB&>)iJJG^J63p! zp#Om`cbk@D%iXr+2`GmD&sxLz!%@&NtWmUo#l*c#6Tj@0mYtBstr45t$LHara{0qY zlapdy9!EduU+$cg`)=iyG@t47`+|R&Ki0Upto~I|umAPf=6so^IWN9!nh}-mDR8mm z#NqXu&ou4Zu}^z1#wey!_Czc*8AA@`q* zh9&YJ1-X?w?j4HBJM3<|m-+u$AD+LHl#l;gwRC3r^L+8!$s}vT@_xW;pZ?o4IXK?}c z!pA|O@e5YnZuY)9S@KlZCj$xn6GuDZmpM;pJ{|v!&yjDX*zD!sN>naIc8Pn1UA`-F zlS{9wG3DaBZ(C9>oqy_aWd6g`zc}RsO_Nk6uHFACO1j%QaQn@GA2a-1t}cjkTzYk{ z=##wgEtRLV8xBtpe)a!uhxc^hN8+EhzZBSCP#Jx`mxW7BsK_aDdr|F8>l@#atO9@Y zPJO#*?Q^$jt)I8;l86-R)Z6)HS<42Y_r8KE{4MS-M(fx(`pg z8bh<@l1In&yBKt*znizaP3K~fW^0;0pT-Ba;9WWs*Ux9x?Mv-!sa2b#A#hOPo1^1` z)6ESfO4}Q|ckOs%UJ&@xP1o$WixA7Rb%)m{#5D`PRC0TCVe*c~?tQyj!kqqGO*vLv zv1(VYlGox&cD=v5%O5E5 zBGp8~{Thofr?ph$h0RB<7*5i-9{RK-Kk;jM!M2UNcAW`Kj@GK$KPBOF%Z4gB&m)#G z*T27Hy2D~Kx5RsG+v;E2c+xLzIq@}@v+ihSuj`G9eU zOsw@o&8GLq_C4WP{k}qLraRx#`N<2J&&jE8N&2XFBS-m9MwyvugwxaK4{|~!q&{uk zTzi1Or$C@{(Ye*}-Fl4={bsQq`EvE(+$n#i`W$ngw$*zZhg(Q3@3uoS^OWQ~cTE=a zu;_3Jv5j$6Ve;IPl`Gw|JT&|Egy6WmnaQOxM)6^_CV!319=$SNZK)U4yV%IEQ&HVz zmFY9j29}VwX{vfLt}C{DdwSdI(JS>k7x-g8J#3Wzwbwc3FRwYzJOShTU1x>*F0%;j zs**cf%QEqU`q~S{wXfaI{Nb@RcXK*ZlM?OL(4zk3PDD)X!sokod6ZtYvrbDs9umFs z{jrj@HkFrmvA8iWNV|bP_A!k!-^ZR>*i~iu=TX$MBH76$ehTr|2hc%bVpL!&=P55$cV{YJXqjyb?7u1R{uP~H zJ1lKFT>1{FTW<>cENz|7I(MdQq};;AD{jUdc~HsDDd+NL>rKZdw#O&@SJ=$;NOCYc zvgOwoSF0R_tmX06_VzQ{PFcs*)7<*-1CZ~O4YV?Jp#=icNjVGSTg3_ONg@F z*D$->?Zif_WA&-2Ei%fTulT>d{GalnWnPH6-!)afXkzE}kSoC7vs|#%YgZR{pmp1?O;_eCSjy&|-HN&H7(gn9E@49qu%$XOrc$bj;JQcM`l~=VTBj)QJTr)pT zI+kVe|J4aGSCYz#R0NsZ-P@)AuavH-nDm9$&c>7NapBioE4N?T!nqnNxrG;|TvlIN zzsT*E>Fw%8tHSsG4QpdKbt=*9+P20etIC4jdavHL&4)L!Gsl#}UPvbBOY1ZjhUn?F zTJFEEyJWflm?%(q!bRvmV{YuWeKL0&k9ZvFXUUlSrvD&A`9hK6^2T>E!Y31)L{9kK z6LVxMP*yUNc6&Yl!~=%~yG3`V3+^@0`^NVIG>YGFIPzB1{hf_(v$UUW)yXT>v2y$M z`F(=5?c^5+%Boh~XngzSi0bx(Q|x536nB2Joa-an{CZst-w_4FH8EPvOLr8lfbZ(|Jdb71w@-b0|H@MnqjT#r zx)~BX^;AD!;x&JGrrGq{_lAa7ulzVxs9VSi1c)*!EJ#-3WL&@e_r-%2?W(`7ZV8LO z+hg%X#YeDk$KTm*S+~CBzbcA~Oh5Lh?ApwO<#BcawMJW{&z-%!SyZIs+|hfM692_l zd%IoMxGA%_wtnL5vh*o0Z5Y*eN$+|k>7KzqWlpWB;M9urDY7nyX5L`*^!T<`+M;mU z#B1T^1&`LGB^bz=AGqpjP;@zKL-=&F19x4Rm=^uGB0g8>Guw`;eKGg?tmiJ@BwJn; z7JIkP+V*FGi;R%q_PsKd>D$Zw{Z}wC6qM9k3fDh4qJQn`3uWuzQzeF~@8_So_Un<` zXL+@%+<%8Ja|+0WEm=}$;9eA!^i;*BPx}6<>8cB-hbaGUcFbhcQ@2Fya5+TT?(fM!x)P1Z>UdQ^D&Gbmw!RQX zbIV?m$$n1fs&7&rlgs|lvWL)-$%Pz7K+*!%e^=f6b`+^noyjy1}oA0<9UcN*4D#zVCyYKqx zD#u(O&bs>Rs)E+->C4vhg_h=<&pcOgcb`dZwA;CxEl+=KQ<&`0bL0Zs&u(+I;Ba=0 zn|VIV)PohjH+Sv`dU5ej==}#5x2VT$vD#(6+hgX&9kEN^C_IX|Ib~jy&{+xTd~(%@dc4 z6MwM8tO`%vl5_T?9TW4!yNaDvkD`kFAI(}9;CA-O?c2vDZMn#{>!Fs|>sY4bV2P&_ z_>}^8KB~&8?_Oc&nZ)kQFk$W%TH%ZEK5rYj$f42dHU4FP^IC=eooWAn=B3yejJJY)@AaQ|LtA?rC#*KSyrN{E`@{~3v%S)`W;5Mp{Ck_3Q!21` z%lSRryf3PavN+AGrY?FA_pL}}=GLn}=jp2P9&^9C?Ln^Q!I;^-iXe`e)vl!Hx3a=k zzQ5z~HmgSGW@Eurbz6^k*`VEjbl#TrsBGF6c9N;Kbn)r5htUVpawAl^OTNlDPrH0l zZ}#ex#yYN~C_mn0l_|N!YiFnz-}w47c$)S6-}}GX|K~SbzIqy0D#o5)Ga~o=8kw4y za@pA_Ku=(=m@~EZ^{G_LzNi0dx+)s&w$^T6D7j+I%2oG`RlYEr+-2ppHL!ipzc}@M z_xVc`&s}Gk=u)?E!`9TuYq1ZnEAIcNd7}PS$Nqm`?dyN<-~UkE^vKWV|G&21|M&Fz z|AYMTYkh8f=Kn9^^q&2niz0^3|W01N)!H%iqZP>uC1-Z~y&&U(65u`}O#KJ@@tJJze#& zht}Kw`@Fs0uJ6jfR16BC=(#D-ZD7JMzY zn(E;2x8kV8Bk=|Qv`j_k`#BeA-94@;_t3Ou)_Vt+GZHMz=Wr}P=J0ds;lR7eorb5j zb{u}%q!DBAXyV=V-G^9}r#z~U6+7bn`rq}Z|5hCr{Ig!WsUkOi-@3MNi(?-I*M~NA z`8TRnY>$YU*S&V{EG8wf{@5~MyYicwe3rW|)l6v%&`i74yH8iPsA%i2aO2ibUdK7! zm1*{b=f&s6GA%X``0U`dX>N?fbSBN^;cFX@98Fm8?bSrRkbm5aq7NCjUYakN(Q(A* z=F`(5sn&L4&z4pH?R1QUcDT$KPGecLsP|#$bKV#9d&NcEUpDx#W ze|}-Zzhe%e`N#i+Y>ruZ%t}`|Zr6*Oe+q=`LjyyC5=*CcYR>ZNG~MkJK0D{QLziEy zMX|~+E1`X*G8Z=2t_*SwwUp?v+$`(#(PdJf*v>*(rb>w}L)vfA^= zs|#*?XmW1e)EmbH@BZDiJ142@%bqvu(hPkCUd|M`5TDC^?%%GnP1)C;-qPKXuDa}p zz~8VhPSgE1Ja|%*X}wL9?`B`)l%GoZFH(a{U*9`1o%6y+zmG-|8F#iV*c+R*T{k0t z`q6hu$DZ_S8~E=JSb4zeX@0QVynvOzdH6o(9+?!=*S&VnqfFgfyF1rSJsR`j2~h|c8xg|);pN1xZj0(emccw z7`UI|U>whT3(ea;Ggivq+&}Yj!|ACS{|+{s-Ya~5;tSuq>E{(6Usdh=zK;}V}4U5J-lQ5(^@ z-_PW`#NzW07fm>Qd-C7y?B8x%WPN^VlJM+PYtrP$4Kru|-M*Y<#?Gtt)m{S8nk@g{ zY6kl7v0ZYDo3vg1XTE>q()sQG3l~j3{wCYV_1^L|`+9p_Etspy)_XPTD}?=jt7-5# z`}_TQO8g;y|9JIzk6EtP*dtxTxbugSfwFYQTC=f;~!StODi>$19Db6eD|!Cjq%da!h_*^f!I6}szx#soFE#;HL zt-gHpQ%hAj+@rH)w$Y@g`>q%+>Ms}HQ>ulxuJDUVKnibI`i;M&k^huN&)q{X9YBJa1o(g0}SBIW56#%$in;Yvvf;jW?U* zepNg3^ZQP=+40kvbzV-m`}ynyP352Lb6l6jJdB*|XKDLv+sR@}+h^aHk8~)f%<*hl zd0@_plH&)J-stnFlmuxTay}@uVBUM)t3+o}%gJc>N1hi~9%M>8dAOt7Yx+5d^}gzr zi*8B2*t%WXU^4&ziy9jQ&N-~#8N_IBDx_7@oapiGnYInx@11vr0G@~ zrIK8I8a}4;)!LQ01oN|$)BnGgdQ{XSEFF77%V**5j`AC-Ggb6E5A~=#v0CK4d?vR< zlYZqy?g;N!dg2|fe_t7@e1DUm(Ife=xWiJItx{EVTGOxZrPdoY_vfp>@4DCL88G40 ztX2Ex+SnzjvwXjnnxeJ+%hT7ha*jJ#B?nyDAF%HM%j`{)Yr@jit&+6b|F27VqUHbi z=t0iR)W#_t@Jcl6~)uIOZ7`8 zoxU*BJ0y43jS0yw<<)e|9!gp~wd9{NlacbT+nu(v`l9YS3r1E(=cs*F%jjR2_WeoPgH;nkuKw)b zkon5`(f-Z0QHj?|=RXy4665OV?5v4mJ#s{b;{?lhySpoU`55P2acd8pcjeezhMd%c zhh?e?Jbym1w+flHQJ3|I#lo~rKi&tsoqVFPPi4+W{Xn-`Bhe{LlOz(ZKRGqA=U?)K z<(i+^4vD_q5U!tmHsyWh`gzy7dcRey5uJT!MQe&eZkN(IqnekY5B^IW*%9N(>TR;I z>k#+R)e#pgcTCFjJ|g0yYCEl?_fn7Zl6P@CB(Jaf)3KS8lewvJi=ou{TQ2RT>0K$> zDuFj0+_Z8(>sP#toX5TE0hg-8nz>sU|LtfDab^k%JKOln^?%{4ll@cQzhh4h3Ay)9 zE`O@H&g!ZE&N%$N+VAFnirqW7ByRq_4JOWd?+*GpZ#H-86xTYjMVU1u^5P-&MK-^W zTX)~?dy^f%_2j}W4)VuY+zX|dHJiRK+J0HI!1LaeSN5wmGwG$=H)vWZnWio1F0`%T z*S;@-LUo3MZ;y!_|0tDwvU+zUTat6;%G$Kf8jckW(M}h20&A@La~!NRKYG3UEHFL& zW0$F&w&5cWjVbe4C*)a3 zc;uSP37@o^`f-LwUGXGik*{lxyv)#uemr%`M%DA_zuSZ_@wP{G`YwscOFn&%?`PZc zn`!3io*b^M^I42F4L8gDm@>t}=}Wj)e`ku^hrHW2Yu#VvDqHgUJgIS4Rp`rUnk(UP zans>RZ?5j0ZSZy%Q&8FLni%VQnJamORAw!GH{Z+c#{-S`+M1JD98cfsKJB-;(bJ-) zDZgxXuMm^R#}DzlB5#+my?G<1SHLvIt=yGWP|(qOQT0NjISgBCe_BN3*%?1=^N=~| zUAN%kK9@BG{|(PP_F7ad_o9fyP4mYgrov-(ZTe+ta{|{cS+l!v**?odOxNy;rf-t2 zQ8?$ZW_7UiaV?L}`*aug=>6CeVw4mZ&!Tu}qI+_yN2!J5oK6v^EQFOF5-y?)&;3kNZuBhkg7rYnn8YCao{@PrbIS_tE_K zKJIG@cYGIm+3{CnN#n|rBW2feELqks5?wywulbs3h1>E!?#ugjsPm=pqxdt^cE5X7 z9u{f7`Kji)M{D*?cw!m-=vIJ<3s+|!wd zRwODcy(q`wp;vuniLz4I>PhDoUiRsIl6*PMceilL*;SV$d#v6DZoVaba7D?j#b$ml zv$j2&b9c=muZ26)+qG6XGZvZ(?JCqz__wPoCB#Zpw7aSE&(kMq&$4~(rXCZXu%*A; zChZHa$h(qE!4>=0-Oo6`>+k!kOH6A-e3VS|{!UCi7Z`8qAAgN`$!l}h#nB)4vwNJL z^EmWa&(wT}Q}cu3Q?nFr=bf56DL!}RyW37)uVgyZ_OBP2V!d>K(TrD@-58JU7BO7B zY;xt{&eX;Zxt}v$Op2aPAX&4)43;>+-6YS;eWsI(#|WJ?!M{YR)4oWp^`gz z?e^{6i)=ggd3Ah#I_0|Nv?;MxzAHCv(lS%nH|L|-2Xlpe6%~i7JoJuUWYf4N5j(Fr zL~vq6%^a8GC-&|Oj#+0Q@<_|X{?^p(t7kZ*oc}3aX!a%6Ht*l>yNg!uIn$>2yQKSG!<5+{--+#IeA$-r z;NXn=;X#+U_%#_bJzFmI`&ek2a`C^Mw19uYr6nIGq#f!M)UWVZUVZQ9uAiH91%C-l zURt&La__eF$%R(~90gyzw%C~|mLo7hXyJ(yk*+GY%U1Q?h|NrTEb`E4w(BG72|`9+ zbmTg<480mHMKA(@l z>9ex)X5T&L^xdAX$LRD~+n{ro`k#GPWeJp2{bj?T+R=FB_}NSSZY=5hpXt1nyUXrW z<+5b;N||1Nx!zujS5|Dyn%Cc*S*+Nl?Vl`FWgRNlc%}X6|I&TyuAI)!KE3m%drza? zH^FF0%X8OFLnN0xRPNJxGj-zQoc1ur%{OjYi&;bmFMR7U^Hh?tD%&Nwn|kjZ`}GVr z+ejV%lyj>|{rKaOiFw?Gb6rKEgnG&rALE~`X|Bb!B>DS(-TQvtzn_H38`eeb+$5dF zy?)8v6(5W0tsIPn>wlcF*52)}dve+3Ge_jN++BX^oy@H2B7b>9@fCA(Ps_}?kn`rj z)G7JGQ}=VJzdIp%eqAh|Zo2c!n_EviXR19`eN9VrPf}be|CZEb*ruT2h+-ZCP ze;c;{+OhlgjKdn6Cr4QPNndl~@#U!hPRn-RouRDH9c6DgAxR|V@#nHr*DZ|S^8d1$ z>eIYNhAGG|D5PHBf7Rbo(YN!{c=-9w$iKF;b1m8be3AaV?_Hkivt0G2 zp<=n0T7Q;of1I;&_tY8N@2;309ksFRy$|1ArDM;0 z>KaO>{+Y|XdF_{rA+zj`=c<0IRoI?*bz8o}DzAU*rrc-@$}M_+X1hxIj%RE`JqnZmL>1*9G3YE9+LwdPQADJQg&*A%hJ+_ zTM^s!TpTX#VhZYAB=6pR(pT_RnU7ukyJNFG)g|)xUVriFfX`IRT)k@5ijE(vR+P-D zS|)6Hf7{H|Z`*UzZZaPURnTZmPBXPCsa|(YGnrNsw4c9zHMjifg_U<- zdY`+w@J-sD&2wHAn%ON_QteRh)M@;n|9EiDC848#10SxP<#7LGkhH*UhmTn;&+arw zPLkjByKuGA{Dvuw;R)L6|I@m(eyy6yaUf0e(`PnMZ`X#hIkpFEm=@?B);dvcw@!TT zq%89bze8`mmwCV9{&wx->PK$go52|x|0LB>eTUnpO)IX&_UGp9+ox)~ZKo&Gm+w~H zF)~MlZ}H09be9oc7^LDC=)2(Jo;R}Z)k`cy&z|T?n^C7x@-pf}XL^`O&$OAAR?-*R ztu8&DG3giMuL$?53uRU_>h|P1#)G8sCv0QOsK3--gI&CGPU8U=LC(*m5M}s=G{;n?jVF{iF7r zS6$NfHV#^ee;&58dralA|1-gN+07ph*}7z2-}s>zJt^%ud-3kM@|!BJNZY4;USVE$ z;#pw+p9yCd-}})h_`j@Yndx5n#j@GA`!4on=N`{+Kd~)&OLFdQ!&@Es$0KyxZuDQ| z+njU!#gPf~lD9aA-8KyK&Ukw~!`*#bcCNeoyzJa6wF%wz`x50YMC7iv)hgw=?{)Jy zN3%@W-uY)WF8sVMq2C^8aJTsE^$YEvdT-|DpFH+vn|wlY+3jcdX52MfZl1P%uCesy z+a395{;gS(_QCE-RPyUv7s-^wr z+g7tQ^U}9-Z~A^edhX4#%?ascX;bvi^zExSX8qmZH}eu{=X+=Ntvzz*yTNa^BPV_M zH(TGfJ@YQ-yTR_irP7=29bT=FPb&|rnsL{yCb>-dWADvetK2j1a>|W&Z@zu_4Szs@ z@DaVV`UH#XWyxjjUi_PHXXKyBd%V|hx38+pBmeX@n_~~XIlB1w?S-F1l!RE=W_2!E zxwE9H`stf5X_q;-dZix@VlU*`+qO0`tc&tId$rcx-SYIM*zm`1TD1B@{`49IXQtMx z-~OgKdEQa?l~as4=J@DF|9cneS93=Vk_U-<)?^X>{YJ7@cN#QKn>*2~a(&`Z`g{mKJ zvG_AyZi+5idhSi(bXjfa39Y`xD=^T=l(ISMll1%D`st_gC}x{@!lx z|8(OI{_{Cg4`{FaVK!@1c^#LXX=?mU$#1GBG^~>p=02Xij$wr^dz$*5tGb8mrrqRx zZ&CAh@q#Ia?(x58to`5-Qj^sZuEgn-x2s{Al(P8urs*}yy>GM3xVd}j&qOOHo!uAJewx`;!u4Hj$;|Crb~iRR2WLNjqSQa*uaxSOi=4HaxbIrI7M5I-xvQS$ z`nuO^yPv5ON8r4SeWh7Z2FGOTFRq<1bGI9pb=MhV&KrtpzSmij-@i7{vnYv=TlXb) zSLv>3rcaqa-v-KFo#%-^%OBarIRHgQu1q&&{4b&sY408LRi&FGn9wte<2# z35*}zJ!OAV<|GtXHYm-O?LV%3d!&m%e;M zJJ;uMrQ!W^xAYF&J9o>E>n4=YalLu|md@`R=Wm_4bmRQ3b21=_kelaztz5e;`1G8& z+cs|#4uuifwepOK*IM2)9a^gsH__{N#deRSwR@tMT(Y~T8gu=LC)%k-s|iYqUd zd1X!4eiHoVfx1Lx>4|NHx0>9|<|^&^l4X5NGxl=U+y2>#^G(-YW7L|#bGxRjDaHQz z2CItX8Xo4CW?CP$o)?{HDcUP~zA)@n`I{q(!cBInzwcN#+f7_2d-_%6`t5)2ek;?w zv$)=D0l#EiddPu)yCly??yHgh*b-=>t@VLnamAR_!x1yZ2RZUQtHpwri^|Eq6r^ufIMjpJP7j zp5OJ?jVvX{L#N8#S+8A|aDS@g>d1}E>>Ote`<_f@aILlcX)gS&p4}HadV_6G zT}?e4#`C(+{Og9N=VZ*Mc)opF_iJ-@>4|*@rkt-o8GAyHGp%FkW$%B6M}l6chO0Pq zq?*L@uVr1_vTwy+j*U|mU%I?%k@|*R`z{1c>7KH=K3r?Yg7Eki=RBSMd|Scb?J$|| zyU(l-oio_>&B%AO>uvmTTPk9~vUhc}_h`)M{`Jvk-;LBV&O5>#n%lO2<~$;D`>({i zXXlRU+!neUAkuL(?CK24gyO=YR*4*q(O>v5O`uFbHxpUXweq(f8 z+h$$dCB8=i){TwxX1W~x$fex4u0*`>$!lJ= zptM72(`SnGU)XllOY1X#+066Bmvy3Z&E5nHa(@u@UOe^2JeN=E>z90}J9akD;oFW# zc8-0!@3r+;xW1BKyM!a|IQtw6!Cx~yUmF}Wo_uYg#iiw+g3NM{OtjlN>EpJycBavh znz3enyFaFF&%M)QemQ!7>E$hzdP^&|Zr}3smD!XNcGIS?e!RN#($8J#8W-7)XkX3F zTkYJa<-Wb`t%b(c-Reu78_T{gDcL4`bno*^f2JDj-SPW-`MKG?HLvY>=fuV;+KAzykgC1kgA?4(e)=|RopBCrgr_OMULg~ zy}pEPlUDmAFyY;;Nngvd0`i)VioRH8V0iITUt`I!c>J+^0c~rFfrhzWbo~;*?tq88~<_Ur)oXB{lX-0)rrHa z)|juDVkFNJE!y#Cr+qd~)vtHtl&s$SQ)$gI>y@YXvF*0ZjBB2C*|g-^!IgJ{ z6Xy0eFWr&0-73Y&C@#J5V8``pt~JdTQhC!}&6dpAQR&xMdQSZC1oqP+Q?E^5*A(lz zT>si_;k%)GOZPHI~E<&v#WeJ zUgk5Ke0q%mhs4yw4yO(s=D5%t7*r%jr#sy5*g1S` zj-6IjWgj2AM$7%U!>+=m4@9yHJPmyH*e+StYuxsFe`oa@X%m$Y?Uf-NE4E+07Jc=0 z=Igi2k4|x{+R##67MVIL__$$>)!Bd3c#hmIZ85yAon3$TO@3vF{Bp&TM^i%*`Hykc z-_|>L?)lp*UK>7(`ej)#_Pnx)(Q`PkX3jl}>ZK*+&$ejVRfii**tYYXC;z#!q!;~H z`_4^k+g$#16=QKn=e?<`+0HyWbEPZJbGpO9xW1F>Y5Ut{s~v9i6b4l-bW}Lzx24hkXLm%@yaxXPDm=T@)v4DjQ{2YcMz1k@w2XO9@5?wepiH7wTx8 zd9JFEJ6mzjo#x%KjvMc2{o4?~sY!Ca`8xT`ML(LxZ!+q$X2~vkCS!Zx&FYZ6 z86gwDN`~DtG~2Q1-GW8=<&BeT&6lf|xP|*JTm5qfoA!@M|hx_}f?WO0wVa zUHd8bF!HU-Y4uZ^*QU5v$_QPFE-v54r+eYL&Y3K6i>=iO&zP4KKU*;6eE5lqk{%(loqf3dTPezi+wXn&C|Zl{rmUD zNrSNb&$-s;j-D?sW=^*jIbr_YB~2n@<%DzFuU4F8EWVIe{&D|VuZ?$){y(>~GqLK~ zY0LX;)Bmh`eSceW@7I%iHt)|ny=U`&KHm@L1>?V6U&vXPppdKl1T;RLXXdF<5;#SX zQ7%D2^x;HiJ@&a>S(nPfPgpyAWxluTzZ6^7(nnl#O{5o0e`l07t1JG~d*Lnrh4|uY z9Dm!32)v%jUhwMTRM8ic0>W6EHVa8D`2KE^=HmZ9yF_owvvWIsF^KZq8ogt&pBd`~ z-~YeMI9NZG+1OY;x4wGuCf`B_wxEfU856WOUsAL%IdSX73kxIWdC3a0GX-7W%sp7C zXCigsX!8?2({gi@smnJ^{5w@cAaZla>Y0nS`U>sesWM;0l-{i_q zVKP={+d^x9SlE7L;WIS+sd|3PO5PXFqBmaty3-)Byzuwm9HAqR%OY;Yw?8~+IQ5;9 z+(ju3*6BLQu`RSh%Lu753Na z9e6Tdj4k*0zF~gJe!>I!fpG1zFF>zut&R zS`;1JyRR$g=q$O`R;&7$sdtYlNPc@hUqU)f?A0`t{frx3g%;iU?xVfY)yRAG^rZat zEtyM}C*?2CSzeK9wO0cY>bc_|tDlI!Z3vyLY}TK?EH>!cAQ=jrA4m(|kt zvc+3zD4tE?-MS|28m~@^@zomUB<0LsHkqn#&$mc_`cT+)e6Dlud@r7IzOBA$6}IOm z_L&JEVG&Q3)3ZMKwsM=>*9HT}A|82l3(X4ET#qUI790JA{ko=Je=D&0-dZc!ITJR> z+~4W>+jc$M;&W*UQ>OmftGh&MtIfVZWA8$>ZN?L>{d@nXpn7*p&C{uy^Xl(RyO9^1 z>7BEEy`xuqoM-t=*Ox`#@?*W^1+FtYy}r5n%1z$8&eD@RZD+lZ+a+{FmaAcA7{|SX z(r30<&9bUkeD=-D^;^%2cfMWCzp^=afA+fEk2c=ZMJK#+z5S)ktI)mgXjXOB=F3G3 zj3#{AbgFFUZUb=Dn?7%Zi zFWu-kA70;@F?Z?%r+0t3A60yv?Eit|`G-~WiUXW(Jt>mQ(_YCJRQ`H$+A-k|^H#qt zxfs2-#E`vk%BrX35_hBRVvRS-207Wr9IfJG{q=Uuov=r90t$rJFA3Iu&*aqZ^Eiw@ zS78NP`px;hKg<&Dq)oZmP^US|to?kPiucOf9v=$JEEr$jc(p_8m&}pRYkyi=OpX3r z9Huq>S-SVm+%flDd0!&eqlGL>ZXZ+rb8A(9 zx$BRq4I-MY?B`xAu08s&E9AB&m&3>GEuH3e3+3nkBy|x~CzeCGO*lO#m gtU(I^=pyfj4dX?EbnmM|peotTBIpw5r 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 z z;JMu0cMY9)wwM;mpJ8(Dn!Jl8=;f4M$3I!;EE32l{b(WcqPk@7VWw3dcD;L>+s4l& zl*ZU|n5k%Dv6#F1-wdsfSxa}y%#XFXnEvC8(3ej~mbqI#k@cLBvnb+KpURtQl2X3{ zTR*&t;3`u|4106Q*sxqBG3@vyW5e%9*XB7zpc*6`!c?_&gmbr-ps<~ z5t@H-@4MRTGtS*f;AYdAdzHV}7CIgsJPrgKl!4N)>a97reb>($1Vaec8=f zmhLX=Bzbu}_A=~QZfo&^E!NEY>(uT0)7_TrwLT@p!ns8K&wT63-L~p)tt)q1x4&X- zXPJ~3w5)wn^w*6C^;Q+XVC#xrk{fhc?$X_$q|-82VnfpF-!$%tKbUv*fb+uMA5O2$ zJIiOz&wZTm=BMzvmwmQA_r;b)vQK02{dMo(oo%z*jp7+KnpjV5_RlYcO$8e_a zDAVbSd~jt6DvaCkgcN#3-JTjcF#?H4)iSLY?4PR%U%{=uT< zd&&0?G7BcFIsE_m{O|eu|9(yW|NQ;`2)W!}Z!Y##Z&Zrl_qiRpN4I~<%)Gn^ez)Q=aI&Vo;37)u8vTf4-buW(H zld7vR*dZ9Q`q#{^c|JAo;{DaUO{RW4`ObfRvLmzI>MOVbEv1xUw`BYS>=p#~YrS!p z&sba0`-AI?r0=S4eR2i@4)V>ff(~45o?4T0R`mYV8kxiDHE#-g%($Obb8>c_KJzo~ zkO23|72SF9U0YbR*6v`gjh>TX_vmWNvk5NO^;gH8nRf4{@YYvH=S+R^E7iAt%T(3r zwLcSX@3fRJe9D|FIRCTY!R?xxHNA9IHut|RQ|9-Xl5$>K%5xjbqVjXsM0?MAdD-=; zMXYRExYDJkzsA)&IN zJl|e<9jFmlf9%CPy#Tf9v;R{ZvJSZIZEvwszg{N2s90l46^~@itg2nR<#I*YchzRb zcFcKoK&m`-VQq4EzTGv6$C%~|l%u9@YMu*mDblQ@|t+1iviZ+0uYrDZpJOVgjERqRq_Qn%BdwmE%W6}0xhbR%# zp2C`|5l1$jsGRawZt+TwPnRbzo$>F-%<77UIXl~VJYs*o0Z~s4R@xcbCSGwlY~6bD z#I%LHrB-X_C^1iR47#~KzuMvNIZdk=tLA62v(7E3WLu(__`>pyUPh3ir0vDnzs3tQ zUULa_saBb!|Le=?N;SJS=jXf6MSQdNJMjwNt>I?ewcFgRXWqmwFK6!l+OpZ%yw@f& zwU1{mPfpR^Y(?2!nrAgHzEr<>`|p}9&cU5hbL+U@AAWa5R`~4hi0L`o&YjI$@zr5# z^SZa{Ph}3>u6uQB+J~RFeroM4QAxeCbUM46?@{jEUoP2AmHGC?fj`6Ey1e1j@<|sb z#!Q?ox;QdIWbU&TS%n)aPh}NnvZ-EveI;_zl2wk6`2>6fXH3=!o7|sUmVQC)#6OG6 zaR*lX*#7>=YF&n$Sqphhx*fw+mz-5y@E~qhn&~2@ZRI&y!dIK(B<-U8pLK8*_^0?S z++P#*`OnMBPq&3lcl!GGvvV%_=BBT>?)z&Qzo31Z-j$Oba{05$%dYpYPZPdZ{&wDB zuT}T=$XH!|!eF^COZBDG<(z||tQqguxy&k^*j=r&`NU?|@CRPELL2xzGyRLVtF8-p zdv8{0;^t1H$=BC#{|@02{c-idZDF&8haMi77mz5Qzw-O(E89+L=I-}-JIC|Bez3L3 zL<7^8wWs#-t~xdO-tsR;4%f}R<>r3*@$N~D{LEVGmaoiBUvMe8L+Hijl!`xJelFX& zNPTwqf7LY(`kP(vXRc{j{(F&c2!~YBm$%pF*jrQ;^S7$`i+tES*|K6$x}uNKl{ZuF zPS#r$lc})nQmu1@yL)$mhtcz0cpQd-sx+@8K10^~REY*7pw!-SFCU^JCAi;)o6I ze=TP(wz{A#n>wG%JIBzxXmaZi-yj;i*h!XYXF~ z`Np&3ESNYW`S;2%6F;p9I_g=QXL>3I38eXjsh?3guYEmj{T07;XP*h5oXixYe1GNl zcSjS>sqa12eQ=KBB&MLxN*c1lleK3S-?}gLIpOr>nc|6?JI{6}$V}KeDa5Ge=`0^< zGwEkh0!Hf1(pv0&H~&j9Z2jTlZ6rg*Uzb z7^0;!&B1EBtL5wqv5fOGwRcXc`o@*JZRu#W2)vK@F4~IIHa4tXi;d(&5^xZd7G0uNwOVSG#)an?AinZ&{ zEZ%iWbj~cJbBkRsw|&gG$hIh?)4*ocqX||_*Ez)6eXj`q*e1~19L#+(M$+^0tJzz0 zYv27Y%x<6hW!8^Zvr8`Y{@r1!9J5udZ|;8Mi;S@WYmRyTeiCtg!RAXZrM7%6XPdJ6 z?!|j|W%OpW>(W?lB0m3~K=k{t+d_8k8@7n=IxTnUc|pUfOPj9vT#edM{Y7Fz zmuPwayv;lJRe#BOIafI1iq|S0qr3h=w=a1MM<`r*wrN3ta2E6Y4^HoYHI+DCsW@16 zR->$qGp*|dI^ar5-Q{m*1B1?{$o3+3<(cHWh*w^AS|>9VKYB8^|{;jiYs z%+Ka36}xve?c2;PwwLc;6X_CNZzy-}8Jq1}9XqX6JfG?$Pv4Vv?YbTu`fcaKeeX7Y z;0w6*_}tsQp;f61mc6)S+w8!(q`0_4Z|{qzJWN-;w3@?LeC7OeH`ImQNk25?no^xX z+?45A;@&lZ_ab-SSe*YPqpZfG^2ZB}AeoEzWqDgQEq`xY6u2t5d}c5&d9C@~M`GI~sd>P}^4;?#nyJk_z15tK)1xx#qbFJ~h zW^Xqy_KA;|*FL5mc_{LM+~JcKR&F!iaX7DiW=QzzhAS4Q|4uPs4w|`d?upXA)?M-8 zjjIlyDO4}Y-KBXkT&0Jn;Zfb@vtm2ve4CwX=4$!Y{Pvr@7oB6mE1oZC{+l*?ZNO($ zJ=P^$66H}B%@Sw+688T5a@mL4o;Sq}OzWl^q}&L}zBTXp;R`1idId$F&aM+0z{+ZF0-GwVdh8zU?fR&Sp+|_WEBtYtgRaMn0=7u}Kb9 zEZi~04|C(r?b~dccwBL1&4OtAqoMCJE-7a6eR+8?lv%-3@*%72Qm-(RlVOt%8*9E- zYy849t(s%^*+$DVn^^yU_C7k{`UjcYW^3meF)lg0M0WbEoLPr;!cAT>OypUUap@sL ztAqBe5{~uOPqu7bcSW|y>V?$OL#q~eK0U25N5pI0=hP`&!d~l)^R1tiSlGRrarv0p z{6}0)FGCLAsoApjM@g`DL~qdRkR?;zv0uvB^*s1=_MHu9PfKbxZecNcX0<-YvPIlW z!}H*j7pL^3x9Zle-JNqKG3|7`qKbU`58M2_A4I;LIH|aH z@69)i7bW~E)-9RuF7f^K`5e{I#gY3P`_!g*l*p@3i7A|U^WuqS^J*Cm?t5ppxy$Xj zIoa;j-DA%;tTbB{DdxWXp2-hB&%eT+M!Obn@R_j0z4YD0WoFwXr>;HcG@H?6`--(& zUNH*sSFmWlUfsL@-Ja5E8*3D!x0qa9)7ujgEc7h5(zN*H=d)WCF1)l{`LJ7NmimN8 ze|Hq$x_ai+@r!~PwVrc-MU*U0s#v$Ac-~jN)#)`smgkGYi*B|Ae|-J*ONXz8t*GFm zPb<$hX?UeS3bYRoiacn=y?wrc)(zLT^(UG5?&jVps!2Gso#pho_r?c})^FOGFmooC zUPRefCgC-ccZAKVXF0v+_>-omOP=;8+?<)B7ID}nQ!S$G-*nDtmBnXRy@mc2^_<-& zU~~M&ne&#`Zfq+4FJzL9_y2q&G5h7^jmae(_Qxw4mN;xk-V&a4Jmd0_zKt{cty*i$(G+1&U`1enP2WguDp!i+TRr)G#5G6XZI}D)i7z&T=I&W>*}iZ zuNJecrkE#gkL6K&^G(D=?aemkqb+x3rXvk zRby_Py<3>L-MzsuaeHRcp}c+u>qB||s>z4u`OYqAxf|EPx!ZPnFXwJgGx4&^8=oJ_ zu<~yA}(YnJp7c-_`W0>XuaDESpfRCmAhgRhJ2Vo5HkA@Y^2dWrAwc zceq(7OH8r>?>g}Mv_F75uD&z)86>;AFK_TSlOefPP*y%pcLxzGPlIp1d0 zd37&4$C8Z~t)s42&owifHCNzTg!D1B%9HaaJPbIHDtzW-Qt6JIMV)UwR@CncsVe1l zE8x(7T*q-CP56r6UAeRF?*4^h9(Gn$p&O?>_xf19?ADu|kC)xjnfrX%t-k#;S8jWp zpSJ4!(MH*Vjo|fL_dB25^fGckIthJvAyfq@yy zicQer*J<8)_x{(4)-wN#dCuI@@V4i9`56a2g$gzvzLcW>0=A`5U%l3Exn;8V<-cva zyu6nNz0~=C`r`Wf4`1frI=ue>-}&`_?%RKu{OItHgZKac?f?Jv_5TO$_NM$dzP8tY zFr3;_|DgWi_5FW;UjK9W{{L^s?f>2U`|I}q#iccGE&pWg`}0XpT<6>MjaGF+QQs2( zzp!4AuebH%<+wYa*UOsCu3vEW-%tJeKackd<^20PegD6Q-=F`O^5MMqpRd#Z|9QOM za{BA~|6iy7-|?@$&;Hy+`(F&d#Mwfa7+e2wibw{0WjV6VyO+__-Qj2P(gzj+>IDPJ|eG}!-z)$3zr|EjL>2V6hDD^tB>{#WKBg8R=!x&E#P+H3q5>|dt;&6)mXbDq@Xd+BSH>*j9t`WVphXy0v(P^F53`OjY~u`4yTpU?09 z<7TqRymmovnR-=wim_LT%lm*Fx6XMlWV4JVRoNDmzc5>T#N$ifJMG1LVx$ZDly1z+ zE@u2F{V`@Xx5kR=&zK$w{oHAG%Ayx9)8CvEBCiGp4LpTX(K_ zay46d$IITEhu<4i2kd;G^libtj&3mTg2d~zZ_H14)506`(ylk^rPVk5%D?z^&()9q zRZ~-L)_3`6M9jxZ%VQ5hvTTk^d6xXQ?8nymMe__1M+vWWUj|Y|kYE{Q0e65Z;vGiNcDCuhDkn679 zvr*`1@@KP0y&7`W8(&`Od~|a5ZdG>{f5q9mRsC7~KYp&+*))eq(B^5%Bu!VP3az^; z!Co#OuDto|JCkGHuG)Q?!Us3^tIZ5jY_N|tn&GLl&>m3g)>(@Q0KmASV;{w}L z(^vROoy-fIyCr{zYw4wZ55=ysp9pxm?(L4dMV+tMJ+=$#Dcrrdp#HAzs;ldFyKe2f zth#Fc)E}PSK{_Bo;^6qzpDH9Gj`b*kJ{Ng!YCRt&3I0KE-4P4 zE^+$rlK9`|O^(;&%RM-BJ{>Iktot%E`az7&1?#}qSD5)G2pD|v`(ot(gYnTC&-X5` zguk9TOUPk%f$!2k1HPTDZ8-AK-DAf>6^YxfbKE}6 zcbJnM{8!WVsK3I)QqAc7y9$}+_m08gbZ+|Ra>r%KYf4(;7;raXg)~NWb z{}mj2a=tcaeAYisrjFg8Wn>GodLG5RnxuK*+1qRT^(wv#*SvXlopqAM#Puq%J#V@F z4hcU|^}8hVX8*?6KWFKkE1A`%-FZn3mM#+&9xjvA$lC)99v_>F49^%6xNg z{1g`w*(4sc<$bVTXUgQ{+ogOi>@m?Ms$T1+9_icsb*GQe(cdw-b37Kc9J?o~H{0X) zKh4Jd+Hc-;Eq-eupsrSH*Xi`_N5LGfmzu6I)@27;`eQmbbKO-FTBSEjY3YT>myde+ z#E1krE=q55&za8g@yM2{XNLlGT5EJz-`Oht^a{UP&%oI_TQ9u(^P%*&4KL;@{XEsU zgUv_ewwe1izl+CHSdAc!9ZqAOv>7KWrSa|yL zORBAX?ti5659>50_DOCGnv)8>R;@8K(rLZ)n|p4R#j#1dVhjFBc%Sz=G)F<`$~9jr zR{vGgzR!{6ZcnZ&HNq$R8GMc>JrHfgUU*E|1GV>Lq=`(v?8s!|EvU;!3n>}ftW8@sO#dG&~ za(~>riM`Qwj^wt4lLu`?h0ZMzV^QO3k#!JRq5nnAQ=q0-%{(a=*>G%$Ae4KBDJab-c$CmVFa0+_hc!Md`37*S`rbzitxH zIe(&6tJ*YCGv{>heLcIjcb^MutT%}id8<_mub+4?Am^IyOulu;)7FQa2z%tz{xN7} z%1qb%{j5uC9X(}ad`|r-(&zT^dj59%f=Qk?r-!b+v|C8O^1O=h@s+=h+toK%u~)q* zuC@MuR_o z|L(HKEX)g2@;?bNdD*rl<+C#%w9FUYBQ)15^?Il0e1|N@!num)ay?tF#%??5a^^~K zuUbG!OVI0Y$9b!bH=jP@YwaRr!DF6%K>c)5V5f+)y`!Y;+X(-FXN*Zw{w?2T)EY%5 zM9j7gn|#Oca8jbVYsg2(YMy_s_a016by~5A>Ez^A=AZUA`2{>{4}52RUtQHWzbpLu zKFOrL`v23e+Z~@Qxi5BltaX{ko2kr2jGY|yaXTIOdj$GZ67ty-uJeiP+xwQ`&8#_& zVh)cpy4OspGh&_B+G3!m{@mfHv?oK2dE`ppDNhU*1z2Bbe!AK7tw82xGg1Fq)lHYf zy;j!kI3dwpyXoQPNhcIkytakCo$B?A^WtoGA+6dwT%gqwGwgo;m%1$fV|`|4;jd%* z3W2L0o!lcEb&*x2DDvRye1{bEuBj=KJDvUJ{bv#4T%W6+9P7}unDe7u&Pr~NiY<4q zt(Q|ccu_C+@2g){6CccY>h(yKJ8${H*D4L}*3%vy-4!OZy;*NxglCB5gGaxU>SLKW zcbT8(lY6Vv;Bu_%{-cM7JX6*vaPHY#BfD;bzJ7eWwaMm;byI)z=2lvN?Val8B^T|n zW8urk%hcl@{4GmtUdtDi9`J@rl}m=v}@jy-0ybZ+;0=8Mv*VUvF5lzhz2ny+13 zz2w^5u*DA^PmC&$I=}8vDevK5yTXJ*om`fD-0@1|q0+jPy{{i1k+sfWx<{KL209xgxp^$LRS`ppyBzVxoz)zeRt zZ=IXAWS4U-*X^5=LY7M@{W*OzDaU-(u}jarHu+e~r#k%KRn&CJ^Q(4W%R@=8ecOId zD?it`?-`T-^p=mMvM*O3{bw;{{?r*~`aDn!*UjCQ-TQQhZV8|KJdwhZ zL!M0;#Yq~S7i#Y`rZDHbJTlrnD~RK;_ot%z#f#rsOs(jUu-w-gAOFzXao&pUfnCaJ zuj2!{w#06YWYFAK_{*%PHRx8{q-@oRkEF|<1lx-|Vbs^})H@KcM(U^+6URGQHTEUJ zZ3VLoL*~v-ay?;o`?~nW+IZ>RT7TBQ>fB;j#(PBi_U*2PuUP!~1aHqdyI5M1!MJVJ z>Bc9S=6ou_HJQ5)J!$Z;;Bd`5zCM3Zcu%MP#K{i%5!nZyS*UQX`4rjA;34$l;B0f& z&I4~nIXVw8b<|4>H70wR?G@}2c9=7T_v6K+`)96bXO`X-J9ksjE-L5Y9Ko*7YiD0K zS3VV1W6-avd`j%r^RheE4JwQqCvnst7j`w>r&n23^~3A`nMNyH+lykYmco8lr}EanT!sfa&Ie5pXzUuZ}c04E6s!qx@=JCXQ>$xvIdyiB++9x{IBkRd)vpZi-2H))G8*~M+7^FpZeN9(mG0|v5i9>bNxi$0aZ}(+%j8SP$}|qe zUz;nKU(aJ+tNJ8g|NRm{@9)Q3SF%5?o^<=_~azQ_T#hFKX&Mv&`&;jq&t3vGWu=G21>4!9J zejvNz)YO*HHlDs&_V4HDNUB~wYySJ((lViSz0NNU?lCNW;=pgP;WBuX4Y2~<2E0eGF zPZue;l)NYRlE?>#v|XQ#;^NONS$A>KVFszxSkLo~PKQ2ng_QTk-Fq&4_L}k11;5T6 zi@aW@^iX2!N}2qNhMZ>;)XZOareDaKesj_Du7wW@SeJg0+1}$2nfa|OqkQY5({6pY zU#?85iCwF%wMO}#pa0Y)Y26D$BSjpPN=mC%z35onQ0m_LwZyQzYSoJpC-K>`qSr1T z?cn~^HRYwYpg7C1;`>nv`Ez5BThE=QWu-e&O2A@*kGk62yl=6F+njrf#q#6ikH6)( zVYa#Avc=T0s8tfT4{q~($y%7gr9XdOpK#9XrGHmj@ZL^a`Iz4?>7J{F)$Xc&8opmQ z-WHcQdFbL)@i_sRX0zwKSR*ts#BTN+iQBy?505=zb+?f(4Y|M8=G6)K+G zr<^#jGrVM;B3H?=8Jj-ybiLKuJ?qY+mNEnHCtrTgz9T*-<)WsD?sOlkgSR;JZalZ% zb?VHg?c5#Ow>{YAKh6Io-CDNh;P zX3nc-bJ7gNIV+ZG*xD^LneAt}D|GVm&8la5L$jCNUw-jOT3M8d#sq(T3Ff6WRR>?_ zn7`rWQ`xq9xp+^VvAfO6Jtt%(R9B1lG*&pz7S{`E33bwmll^Tar(M)>+MqYgZEnZW z+%4`2TA^izJOACRxy&D@FTe0vWIA)$Q;QqAhM&Zv z7(Dl+#=a6}4!X%AxLlU`*V~rA3;(B^O5d^G-tD((*6fP)`*S4Hyt z*=5tMYQio*oG86lC};DmP`=Hnsa#Sl4L6OFJtKYB?C(-2HR|1GZTw(~@u?TPjg=j& zPRE`#msfaqanG#$S0z#h=gwU8pP}<&+=~?wH5>Nx)y|39yi@bQMY+9u1+t3M(_@=` zK5SMGKl^#FRhpExt*mkBJnk0_LNS{J-CNdQ%`5VH(V=RnAeqa#+q{3D>@lk~VGh@? zckZ#7l3(;t<6`u(`N!Wm-OQ?#)fU z%O}pAxw|sb?fTrAdMmkKxKy#dl+sVXe!tmm=y)K zw-y`vZoU6o&}XJ{c*zm>Yj?Ly?VUPdUgTVJeu;}yL<(xLGv5chgtzaw zBw>-1ow&I1{FeK?b3So4NvNE7%k5_)ykU+;N8y35EW$i<9xPbt^L%1%onLrJ^6t7t zoWEQ(_&8_z*cGzNSp6vBQ`ucRZ$k6N*c*WYe;;2s9=s>nCalG5-k;k`mb!!_RdsQQ zF4Ynj3S97qHGAT$@2$5Eap){(U)yNLWYf5^CTX`+nb7KuvA6TsAK$oDXf2`f_41=* z7STHjCT+g@{8is=$L9^N`fopEdZgX@xa`7F2iM0Dec$tEPX2X+VV7auw=0zmE~!FQ zOV7-+id@?*-5ZlW-645*qTjdkZ&SPy@3}3AbN*%W{AAWe`B{7Sz5h02PL_At{9Af+ z&SiFnulia>^|o!?swwuXG?_Q}25Jw|@KS^W>A7QVR2ueyvH{ z6?^ncq;J6PEF+x-df`G@VjF+;3BLHs|DsXiM&6>l$34qWWgU~K;$C|!B=W3;^j+R` zYkuaXU61-+#;v;b_Ve2>lg%|Q_}TyD?kMMaF(dKowjlejeQE@vCwJzAGI){T7SRKPJbKLKWqKP*q`((a{EH#XJ2j=FVN5XebxWKg3ATB&8rtO zm71h~zQ%j~pHIUjN#lmOY0DXsRbSlN9Nge|`rnGWs(1FUp2V7Yc3M@QPk5rSW{>op z*Z0l7EWbJZBa=|B2iMzcyL*GI&Pw;@JBQu!d1oYW{=>h`kEe1?xxH2F*FvB28vk!) zU!Ua0cGPP&uD89h``~e@nHnOhnsY<$Tk5@z@(l5qBiH{+bbsx)RX1iX-e56d#boul zdtHCO$eX`6(EVb$w`Z(P|B|Io<*$GKby4N+(G+FA?=QI;UM%Iku)yNN^~{Lk8*3by ze8RH(YGuRw7dW?yXBw8QIJA`2{z2WY-O?T3FW-$_E?o1iw^MfJ){yTCh0GjX(`ui$ z&6+y%nu5^mfPV)XTfD93?J@oPyZ!LK!l@o>uJp6V+FDq=k-qKwOlRuij8__oAFdTG zcs<31?ars()lK4--nZYbu8*<(mt3ouazHnIZ5)I1AGhsy_C4IWnA>R!KWp*!UpaTy z<(uF6Dzkk3yI(W6FT4LC&_l7|hnL}-d2e<-kZl#|^pv%nv-x#SI-!5lOTetLn(H8s6xI3*qkvld&P+2`QecqEa?ytqF ziS7#?Eb*yth`Z_V$h2#!%Rx@5SN^d+>$f@FyLL+Tax~ZB&V6r=uzOV8y8UWn#sU`g zUz>zWjTUnM%lTcgRwe7De{*%S&-A$~g!jyIl5A$0K6izTiPvjU;RzKzgJi$7%=+xn^YfH5Evaq@S>^0;v z&%d~@@!*M~-^L|xqCB3IExf0;S^J!!Q*ztXoTZb0d)>aYvPJNY_NIl(eAG8(MW$#VtMiFp{b`k*9mWadRNzPf5~>?SbZVKd1pUGyq?OdkrT)1 zRHe%KDaYn9)>qGuFh+^qJVI{nJJIO16QTcJ;dGj>fDKjW=gSB11MXR&QGW-s4u+(S7?i zFovI*P-rnM}N|b#PTb!-f^vJwNRhtW?R)%TYAJZ^D zxI*XKEpFixiw!!NJ2Nv~&YU_j$3T^7S%T^B*KST>kCXf&8Z$m0i_eVP-PcxmFpY`F z^7Ur%IeLe^HNQ9+rp7+=5ImT@?P==D<%x3&wPvidO}Bl$ecgdm`7c-7W#4vil|T4l zi<)+p-&FOo2x0lIS=?ryI?@DQFg+4uP>KoOsh{O1subhBbALlc4f|EL8r7K|C2X?x z4wnL~n)`a+3b1=8yRFzL+azr~dBuv((!)WsmP)f3CTgBt^m|bnZ=9v4t8b~as-BF; zwD-^TZ`aOdRcmnhze#EP=%{L z^Pm1zzwzNytBMAf&mGHokFp-oS9o^MxA{I(Q~kqY^P8*n-_?n^<~CX!U$MD=^3|Bs z^Ld(C-%k~0AMyILpm^f#lU};|+b3^Vdw)%^`XAV1rrDQ)_ z854Y^lq)9q3itaJl{;De9DXwi)inxVxF%V=C24-<#ADZOTN966zq&iY)^}ExU;ai?(I6(;AJjn0_Us~lr21Sct+~>Un_g&i63I{#khbz9MOwwG~U?4tw_PR|5e;>D1H=dTA zx#W4dvputV%BQmyUs@*@=wFdtV-}{BUbo|%UwGt&2Gu~*+_TYB$|o3~5bC?`Rr++BDst6uee2hGK-($iZO znOm(|cEf8^pzDv`w+|A9ZWm5x?{V8V>A*_4>Fwv3D!)Abem8FA+{&lNUVgiL-Y~7Os3Q^uax$+RAWhP8Eb zXVf=0c6i5!by~73fm&PAru&T@N`=lec3e&|pCtBpO{9Zy{GhUZNzcPEq3tzKr&-b-)yl^*-~&GxKMyW@$huWK*w=Z)-M zeSJ%xxfQPp-PTvC)yK=ce|_eQccjoQ~^TPG)(bv|-lmmun_9 z-9GzPPhsM=jy}ttqf2*5gcn=SeZD}qC{Jjq#^JewGZ#GP(s?F)WLjLqz6H9bUM9aP zcg|dSi2w4Q%J86K>yBmKJ6V1QuThyKw)ak-y5)io&N=GF(w!`pvnrJ1w*E4VulO9m zGbw+X+M4HE5AJ`y$=qL6Ik7JD&@ZoqWlK3x73+^`XgnPcCe=)L(kb z$L!5!{{?mPxhfJQS5|c?d|Hq`-(l_y)oFKq0_??no<^Q!DZSaU(k7DOqk>ddaJsSM z`D-=qm3XsFVd93J zf4=^cDm!!|^6U{u^`~p^zV^&MI`_eJspD?mo8BHayLA7MTzTA;1Ilk&Wd8&)pWYzc z#2_^9`KIpKdJ2K^^ZN87{IiSxzS#fjx?*N7-~DSJ)oyOO8gJ^$e0kP(?r8tI?p%He zy{spqq26CbHQaYjTEn-#n(NipOVeK!d@PKw>Rs!kHFu`d=i^J)JYT$Z&+BdLrXHCS zU}dp!l1J3)YNozE;XmhA_cxp?oFTYb=w(Tin|!&_+&ZljIjdzn9=P05**5v?G-gSe zcasmM&a6~tJl&A;EBbb5B-^7D#t^D zGU3M^nkXg9Zbf;hI^RJ6I5`IaQ zOlwYvuH0*NQ1ONp`=mH-_N5p0_^)^qlew2o_vDw@%)M+gJ>H#>yujvmMBPqwn?U*P zk{>z}6W&xg?mp{y(aI}h%Z|4Amlg|UYk6WK3e1_J7^f#KZV_sjS&;um?5^D3CEQb9 zx+Q9NP7pqGOH%vt`coe!s+1YF+ACd`)i&OjS0Y+)^BCvD?=uy1*R)LY-g&D?ZeH(G zMT2wV^LlSycD}E-`>Em%2N#RC6&!L3hS}nMy^`9O`^9th!$g;^6L>Q5%*D6Pj`csz z6be05Q4!dhvY+)uuf(D5YYp4lcYevZB%Qcjl-=0Fz{u{>b1x%t^S2vj>y;V(VpS=7 z{p5ny{@{9Dg)iI>^7nSExOz7y-hEF`8pEG!og1R>uiXFZ=2XLqiR+KNt@6?P{3r3L z9MhK6R3+DGfs5u&sV!QuC`R|&y4DJI*DcKz6XOs6yf|}>fa;>f%N@2P8oW?5u2i}p zm)mgDY0nzr*alX&MHe=`?Yw+!yP|%^Gi~V#=c>K7ZLB_;VM(_SUJm-{_2>14)W8QS zUG^7WHPz3ZvAySw(D5(&>yCvinSSO=M&azZJ@%n*pS5We&dU8QukiA(=k6<;R{8d{ zCA%|p?mFh=|K`f|FZ1ej-G3Ss@LO8)w(ItEKk3^So43s=vf`XDS3^MDEz-+6U|lienI#c6izlzhIb$7A z$5^;p=lfjMd>L-rjG4@y#wSm{ZK)0a-FI60xYMh^XAYaZ{cb6iKaTJ?U{b~}_q_eL z=l*Z+>wkY<|9gG?|J!?xe9V?Jo3-xDQKkKdRoXoae()>YWczxh#MWWc_i4XR*0RLt zD_qnT)w}v(=j;=Q{X8cBckzr#+;qCAZ@zYA;0%VzRlh>zxN1Ironql6DDHR2_N~Al zO|zL7k`?^g9WPcK?GJHxQ`0=EbZ@5roD?UXXIGb;5AIYtD)mzG^W4Dg(spm+BpxmL zAeDD~hL2UNVg1rg%wo2Ff9F}3GjjTWmt4CdSZ3e604IY=zDymJrp>*!2lf`~N*W#w6hW__~4kr(pRIL(S>@f) z2L~^9ev9(-(4I2QV8MD(MLWYeM?M7kJe3ss!t_Y{;3xjhhbpV)U)Yi8Qrx?~`Kr14 zI|+-a!3<@!b2YwM? z@FhRaqI1peEq7O1J(}RMy6fRBzmVz!=gytA5!;gTE=e`;ZQ(7W7jLYijJOpPQ~aXa zvaJK(I;zYluIyQ_UAmpoWFOx&`FKyQ*r(inhs{YB2X;fK?r8_eGd`@bz;dYReZUbrMTPWStl zXn~7f=L&ZoE_9l{bCLt7iQ`7rkO!|Q>6<(c=m4#>D~LLisNy} zua_T|2g~f88{TeTYyIShuKNbPXA>TaTUwv&6V50Qyt%PJUjJB*&+{!CWlzqXF;}-- zD8iMY_T}w8pB{YKEUl{8>d9@%(%~`T^K-^x-T$vF5*7M99c4Vyex~l6o1@lvare}X z>tASee3QLe_r_@1t6PtZlFzlR=25;lbHh5ZcB^a29IMuUQ=WGG&fR-HN(;4JvlVAG zF~q%_%APKunV84VJZW9QnYWsEp9oj%yxTpAN&S1)>D)JLakF+7{Ss}TT>bQvqAxs^NT z*E!~^g7UVEGR}W)KbSX_t90#`wf~Rm6dG+i{9#!tv%SNez&|~WS3M2bzJHk7 zGM$sT`DX5~XP2XDnb)=cIG(!SXkkz5yn9U7o$kn0S8+>ZTsPJ@X)z^Hd6)Q{totv6 ztlIk*ZeD-8x4`7KpVhO|e$y{iKFE|V&^=PzI&T}J_=F70imWfCTs+yvY59+2AMS|= z+tg>SWu$fA@5_4kRNLuAho-os+6w#Kd2PhT@Nw$Cb93fyo?Y@x*7w~}FPqlYa;IaD zOY`zg4_)`ZP0il+#_WSuGkQOiRxPfro!|SRbc$R3;VEY>%Q`nHIeShyqr7#Y;YZa| z+nL-B6fIQVb^Uj2X8mGW10}(zPa^o3{AqUmZ>3f~sBDUmvQJn7vtl z@wsWqI=btM*Eox%(;CkQX zmzlu}Ub|!@+_#+Y#-TybzxARg&zxNAi>Dp-EZ*<5{r+JlV-@UAFRbS`|NW!Xsrf7Kv&`LsO`8veYyL}8S39fI{BM8H zfhDzSFa5W?SMS--AaMGL!J^kSzc$T$Vbwn~DR_!%@7Fd%%WTJti3CI&mDZC9<`zDBs&{|~ys`Yf*T;`#lzjdCJ(Z~i;GQ0K#j zGmU9%j~?vI^8UDb?tj)JnLoFDu5Y;E{AAyA(eLV_FZ^S8+_y-dobPa`vQyyIhK+Ix zisBO=J-ShL=(x3%_tW!JpPV@3=kU0w^y*aqRRWLJyk+*d)}(CpYSGWq#o;UE&z)XZ z_0s+9lb*k2rbP@pcig+l?eXM;(9ypWepzu&D0X^v`ni`REq%E}!`CYWlCQ`TxJ({{QEg zeWu}B`9E*(*Z;mA|NpFg&DUKS@AvtgGF-md@i?R!1v{(q0_ zGv`=1OYC>c*`K74B=u%}cF8|aDbr=o-RE;Y?pe5I{yDL8`Rw!F{NncgcKm+*@89;q zxqrX@j<4@N|NKbMkL!>BeEnVj_Zz?Bm4E&F>;C(H{GVOd>ahQd+ZTU_D?)-xfBH>n zT;ZUNlQhE6io{JW)+d1(-@#m|vtvzk}Ul`kYJgPK{_nWK| zx5zr0Q>Eb3#XC2>R2rxMS$Cg9K3s@%&y`1AD^r9jGB1k;YpQ%Os`)$3i%I|T_5778 zAEY*GFT3RNz_he}mmkx5)t{Gng(}v*S3WvF_v+me%OhcTbtj%&yDR#>!uD5rwas@{ znNNJ)Ja6IzkDROR>UWxtgw?wJTD&)Ow$g;?uQT~NkA&rZR@wH-xkY;Mja7k+Kx10SjLn-<8jeJwN}&t$BVgZq4y~RTbr?Ra(33^tN@riC(e(m$O>d zfMe*+WwPqsN6m*Wd` z(3PvUaN)dub0hm~^+f)Y-){HY-ss`3_Av9Y_@?02HO5gy5H~6&2NQIgDhDd~&o^_O%_I3-`VWX!iysy>&?U&#LiP%mu z(D`Dt@8zv;ye;c;?>oEzGx#U=emzohPAy69TF`a1$3fSZ?N=(@+gTt#b=SLTJH2CX z?`yoURg-Du>%3d{Z@QTE-f}ytmQ;V|rb|ws+?w>;4F{^W@p7z5=XOZ2z0JmQEx4yX zT5#EKh43RLy|HULoLi>1CAr=>H!(u+n@5uCnfYrtidA+hEz4Y#t})wwQl^&DH4 z=^vZ-_QYYsGRKtox^!a^g&y16ij$My{8TsWac&XkI&>pfDe(>8MZ+>jllxDk0@uAR zQhgt6@wmM0m(t3;!kP`DpI5h~O5H5$3##e8bXi(3?~~!y^r@W_1CnMg3wC+o_;lIw z;OE7h`b}H!rtj$q_kGX2(DS(0=B<(i;d zdoDlNe)h|&jj8cdUN^nnbiujBy<)-5w4QgzmpUw3^EkG+V&S9{0U4FQy*xAb8QoZC zb@(&;v?~s+DieweRVQ$HF1T9G96sCrt%GRi6qc<22C{l7n;KhOUj2D(61)EH*3%}B zvX4EyeCC6fZc4n*7VoVa^a67CRetaHXj!e`KI>dOv*on#lYehpoCz#Voswxib7^}0 zHko)sF@YsYv(`5qI(C!mW!bqmQmM->?>`^(Cx7wVlx;6&2Q7Q6vh1gw&^*o>@p!8@ zB3&!KU+;)#lUj0{%i1+0{Ns`xmaER2&ko97r@=kHJTc{Z0ryYAoo&y~g*{qwILRga zUd_t;Zmh4{g7acu#piYJ_2ZhWv6H=CT4(8=jOOOa;@ccInep8^V8)S`v~aGIuE>+! z%day?eepb*ehUY(6V5RT{k%_&+H$$qZ+4#Szv~nI9XA|~pQg)lt0cSl?2?K8j(Rc~ ztYX2+^Ob!6cVs^a+7eUSxZOwo`hFST-W-Ldz(pF-3vYJitM%G+34XL;jo+|!5u4NF zycEXb1C|~85|rZ=m%rS7wRg@bw@W3w>(1^GobtD@MV&M2U>?)*RP`T@**3L7cf>s| z>%LQ}UbW@%eqlwU1JH+PqByM(T57~XuYx^4gZK4a-|0|h$=a9kQn^wxRzS&La z`)0UA^6>OaDw=DnrP>#J##KnY->kX8sq9iPTleA9b1EJ*3*WH)aB!c7FT33h@i{ED zhkJS6aQkhWEZ3&p6e7{l^JZ1~!+C|}Qrk-rynScgUgb+}Q!O?0mplLFW49Zd<&BLy zx{WsX_Po&d`jir{{Pg=xB_%1dNs^OS-#er+d(Im3MJ*j|+hj~9F==<&={mb<+)pNRI_I85XET9d$O>VEENv%+}?jZmdGTA zrEX3k-pl#!SN`ttpY_gbD@^erJ^IrTK`I3D%c16nF@+& z%T8lVGW?Wy%z>YGqWoN6&EqdWyQBxtyKKJP>)**4NAGiK|5PtYJG8C&Li@HU>pDa( zDU}Eu*ccRVp0TUx8F%+mzqZ8}@4v{jubukg=`Jd-2cu)h2V5oPKO} zu&kK=>b1la_B*_VOIS}`R1ewFs~}mq*Y5G;_YB9x1$6@AX765NHTx99al!q4eOJR- zI!f54;SSrDlEctyOpKJS*i% zFZhpe9=5IjX~E|_g+YG#12OmPb-PuqjTMZxNM5|^)%9e{(tsGlr7oARepzSLd-BB9 zLlZ^(XR_QAs+oHzMWyLhyY})BF2lIZ`pbU_&%4DwFC?Zv_T`5><{iws3Z?Clb5xpl zF}BYYv;NE`vyDX}pZA8|hbW!)h3=PjTK0G)?7q;b_G$Z7j|bNanEZDpcG}7={(f^= z_KcYqs`qT{)@(YH*v25u?OvRBbJNV_y$*LFQ>10;pPMDldX3;r!0Fr&Fx*_t9?fcdr$6gPFYsh`8<3V zW1n+~S%^{brc*xtCod@m9hhw^KgX|mo$zhzpJD%7T-3LvpX!`=Q#fz)a%Fj~I~Auw z3Z5Qt(>Z*1j+XO}TYvWkC>d{dS@3CJvy0Tssr;7{IVR`|yI(Tgu&r@{F4I2KU5yKz zk2D^7W}PUbF`IE)T>3!|$}>|fYopIzU2!ePVD z9&@8zGd~rydOp{3Tsk9marVrHgmY(~cPg(kKd`a#(S)p%N5vT}FR*rADVe&_J9k}^ zc+GCczL%-n{a*8RUMZ=a#6RipO_r+7ss?r+dd)3)KBl>b%S_zfP_gW6>8-<2uQo&+ zIQXhY`hxSXC8F|=r%n#-tjsM*=-eN#9%nW^c?zt+;_!5dySAE9I*+Idos&0_*r zxiwepdRKC!B;xlCPZse7MJ*=Ud-2H$ z9*Hu2(_>b6`?R~fao1FOvhoN!$IaWpX-n#lPR&Wwn^4ZE7(GLK{)eWJZ*>!I^X;{` z{IS%bJ+)8UV)OT6SD!bsR>fwK+#gCi9$C(Q^Xc^4_1cQI4Ts`%dsv10mKbwcwgfKQ zEg-@3O*<*+bZ6ncxewLcoP4(4V(}4ByY@Dn@4^ADuo+o9?^H}m{3mz6KwBwg&YqV- zA9grD*t+NC%lBG$3Lf;$u*h2Ito6XdOSd_h>tna5fy5i*Ux#F@&m~5uJ@lGxSfjn7 z#B1s4+1uP#CAM?tXh&G~81skgYPTEy7E*ZPyPR#_Wr_ETomVMN1bUbDPAHZ*u$X=T~rV^%Lh! zjHW`X${mfLcrs3&`nscfq0*z5llH$i`INRv%Cm9L&nJerPA@3zpT%I;aV+iS$>c4* zOD`stKR3MPy}3|TLMSuGEolb|7!h9egoMZisb*ahbdmhhPTrjiwZsWU<4WgSTI`_;GuF`ebt;#Ze zXX*^Ury4?Y6wb)s?=)~LKXs?;=G(-j)k+hS_Jr8pUCwlB7FW$&rg>jVbC+JSK9m!~ zBi?Q=`}WGqtlLjsS3|n!pqJj_n9XDyvX+T_0RU-nO*;Dc4b}K zlq26$+?GB$H1k-^l4S4*z#eJ#64_91__U#Z&PJqNP=&S$2D&zDnL{wqY_=GEoxCsx{t zDzE&#;E?o(=`TGll*esR2>NUFc(QnHM@hVn*`2M--4g@W_imnWolmDDVEvv)B7(2B zzUT6FTyiUFg2DPjUhXqid*8S|@mcU9O_v2?6~FCd?@PUW86vH>Zwc3B`Odd1*9y!% zds!^@)Cu<)5f>r111O)X2@gUneA)lF_ItpJhd{9t=ZTUtbVA{iaYv=Z&YQs~)+$vHtPqLu~nnn}Wf&HFtayT5oG(?#1_bZvIXO zmQ{LXu`H|;RPXr~Zu@rPq_|poc6{l^zA!cS=8Mt+6KnQWaP2!HJ^ON~O?LMJ!!0|y z()UiB$FX(ouF|DfR{bx0y-lN}-qG~d9Iy5Jwr`)bRaEd(?9M}Cjf`=-K7@YL__r$h z>1I*a1$s>wMpONhzA!_+w$A}%1rC#?kQZP>$9(9XW=8opcj36?ytVvuk5pKQ>gOFISpF` zm!G|Cqi|A8ZTihP&AZ<`Gz%Ub=+Jw-T5S83^5Bbq4Kl48<_a`^9OPnm)>3Ge=7Mn9VA&641%sUyhGW)vx;$+&Gs(JhG+DYK<{ zY$Z;_Jkefk-TQ3au9#z!lXCQn&T%|wYud+Rk@+bre^;e3pFXnb z+8*J8xf4(M9oU+?XWHC`*9LLrOzU)g{0{4REGdwzz8$WuAM50N2{br!R#MSoCKKnJ7TXJd0~~9Z7*_tiUE@8cR^U(WzEma# z#nNzwaDU~J6uYk`r}qB7yw+p?>x5#C`ab{Q+D5^^R%a!;&;NL0aH%vh`_q;#%k@ejhI3zO-+-Ptw|iQ!&v(tFV)l-l$aNjQAI`q)y1{aP zj*$6+y^NDG{W1&eN<8)%-2AwIW54d1tBK3ar!T*n`23jNG7gvSpxbl8{$C8LVNGAh zE4QJc^u{t<)@9$mP1$Kyap+da%T1}t40)PO{?{MaduMY|EBq@8-BXv+tv$ z>_4q|2F0yUx)TcSq%}ktJUX_wqG;~Fl9-Uv#q!0~QCAn6|1uQav&x-a;$XY_VYv%Q zrzY+Fe^Gc&lE5MTO7TxO<-?2azS~hLx6aPmV+pglNvzZ1BWX4^n~3q9#IJyTr#b&KYX*cIm%eAJv}?ZUBZx_#W{dbu@ni_0sX zcQC}}>UGIHSh-?_&rQiwe2+`hHLPu}-u-?hF0gm=`iUOxo))v$Hm9y?a_3`GH4yb_ zeJZ!fV+q6cp7k9+l55SUlG<_OQ=n>1#_~NIg4MxO<+2fQy!o)4uAw1@WTl55;C4 z5SsSlRK%ymhZQu92&qtX&OSKqv6;nsQRp|x~f-482SpM@`@ z^43{;ZYb#xc=YA&?aM!{%$7^fzIjMy_mj(sF-s2JEV5cz@T_Ul%7SNp3c(M3{&szr zI^rS0n%FMgX%f*TzwGeszk95&-C&CEc(pIf)LbratMC;MkC2_r8DGzK&M&UJ^x3C4 zN_9qg)jVA$y@Nc8KWz*h^6%P5hhLsItu3Fm=B}L93%-w!{v4Q`xAk+U`qleW6gO92 zSvzN!bxS$R2hHX0+IB7r3Olh>HQYmc`8&6r-ExuL*Du>=gT|V?4qTy`E`>lP~NTZnyAX|J?4yty?xL`mS$0Y~*jY#8x)?^407siF1rijOY1hsWdez)+Nqa zY;GQ7CVJ=AJHzDshim6M%s6Yo{xi=fH_Adh!EU0%?B$hB#px=cOHX=8m|IG$Y@a+o zLn^kvaJloW9$_BEMPCZ^Lw>_taFKa?`Jc6;^-!Stq{g-8}gz z%S5f#M~k#1JQaiaT4HXTm0VdgeJ)E;P^0Owy!&oe6_?^>b#{MQXTD74n55RRc`>t- zS4d2J@jvwAEc^GiPbGcA_qo{{;o)+$#1EN9inxg7GBo`%F)bvv-E(kZhE4`_OExcT$<*@k@nYbS5s$j9Ek zT)0}W=+_6njI5`zx>l>^$3309*grh-;j1=o45Xqp+)-lJ|B7K=5=}N>8E*Hex+LZ z?c`fveRb1>;F41{+r76g-gvr`twMP(RvfL>f1Z@ z);pJ*Zr5A?+vDA~;@G(MSD!<^on5=ux==q?Uh+{~l)&GIZ}%xJ*k80)*Wul}#~T!u ztp5}CV$&?=B@-cL z<-fRmlF6m7zddGr+BC1dCwu;;{d!BiT)0!YkJ<03sNbF3Lr@AzhFL7)$>eX&yRvbX)Pn)2FE%5bjN zgPU&367ITkiv?Y{)N>baY}M>>>uC|6emi4MW8cM&#tS!o?}^_j#{Bn1faJ+La^TsZ z06~{;3ypHhT_wUceG|xxI2o08X~P@lScxzr&)OR6wdf7%$_vkU)PndibW;4{^}*Q9anCbxnFnp>sxo; zqrzscZ_4Et+LJbS<|sWapYMC*pIOr)#ix&MF-%u)4Oy1W98)P0q`i)};C!QX=ZS5M z`>rc&J~Ln9|2CyrJJUNw6Mx$#x!&NL9U*A{@#vh1N4gAT1$Qc)nfRn@!(GvhN;&KO z)^L1&{iJKdUaO5tIrENmSzNw(d=+TY(d>S@>w@FI&Tcs7&vSZTuUK1Z+%u2Eo8CWe zP2~0NytKhA@K3mOWa6LrF=Uc+ zi5B~^x0gP&{`z|0qKQ855p9plACHzjJzx?m_0Dn4vdhzsx-zbQ+4Q+|?)@{d)2lC+ z^d-$dzu3FoqkQjK|AkEwo=dBa{JyA~Zk89pYcjuS?RRefZ`(UhbW3oazam_@asS&_ zT_Uqq?_Av^m3G*|f7w@q>x(w_W z%3036&+EPP_vH^co1fhYrhdCV{gCA>_*>GQa9=*|%-&`h;o6Lc3kn`DnR)l=7Ay6s zFK!>WYRMV4UaHet{c6OWvrWUHvvKd+Ouq z>sRmQxjA#)Tk+)FyM+-?%Pi)+wD|b#)uAUEGn|{gp8gg4^>TRD-oroc{LSJQoL9B_ z_@$?(ty~Jfum0Nct=qfF!*>7f_?S(S@uAnkizA|EXs@|+>i6}RCG~#VZKcbrb-pfN zbaUE|s%bC19&g)z=5^$$uSPFVtkXGa?YZq$nC3T$ ze|3T3f_V(yfx6RnaENzqc+wcJwzq4W%(0z8-(S7dayxYE`&C;`w@ZHu?G4tkob#W& z?TP$4?Wgr&^`~Pr|65Et#le4GJ78PgPQl9@51Lo3O0WCpCb;rd!6XMpch{>kpMOc| zy}jyj&;JhPmnn61_cVU2D^z~&`Ef~?+>W)^ugYJa`Oao%%KBZ`JRXGC$D}X${AAMM z%auhZFW!A{Z~NN%P51OGUfr3#;>gaq7WQwY4^FnQKRa75@UrdM*?N9)XUz{7=I^qo z+#0|1;^jTB9zD5gefO`x%O_WtxCfnFUDI2TJl%PT-huK*dkzQRUjNqTH{Z7R=luGP zlt0^Je8H!jZJ+Pt9cp43CUb7R{FkJ#$MeybCEBWS0*WjiF{}UjHUCu-N>`7S{J2d) zIQ(mW`Qjtx4}ZAc+#R{rSYU2Q`L#KF*@WypjCZe}sI6GH&wsfPd$?0g`^%8XlA2A= z-n4GI$2Rl*vt^fWWNZs@DCF|}x?6vZ^3u>a+tsH9r-$F4S-Nd+r+a#CV3FAE(poh( zr{%VVtD_!7fAx!fdiA1s`MJN94$eI-{)GjH&#!(x@v!;xd3QNZOnG|BcDK|mE1SZf ze|j6*=CLb2b(%ZS8t_rFhdHgIr&|$F0^pt#Pr+51O8TncA`1 zUv%OtzN7q?cS%pq_?;4cnMp+v>+q7=t+{zy7wzKmejA*#b%0B3Cyf^(^&&2efOCIQNILbGX>qb$B!QTg8_RlSQ6#dBD zliTO}%6r@6-J5-nte<_)kiqA-kV{PSl}7cesa=xnf*OlL-xuFKax?z;SG%9P7|kEA zc+K0pFX$ov#C6}FhD#g!EO(l!9(G0N^rNJCjV`-pJZ~^EXN#NYk*e8pSMKyQ;ls0k zuXS~7>9amOyC(N=nU3Y#ZxP!>*JMnT@+_T@<*%(}DCD-mB1WWL+xw%#BIDbY3Ks>1 z7bgg8*Lr$$ZklZ0yy^V1iN%I4M~<%Us{MYu-Rz>)e#b@rjPrIUuT==zn}7K7#%p3K zbIbjYN8R=^+Mixfx@POrEmF>3ncO;mnm%<|_GbNKu_R`(^-VEb?;O?R^Irbvm|*a2 z-nA@(S*f;lKT;#t9p^XJ@s_>+()!5O&JVX5<2`DeV!mD9XlXjbZ!fRl4pXsrJ`&qI z?ntfPDZf4LIEV6XovAK5U%8Tk?#?;I7kBgW+&sT+rk#0y-!AFgk$J-xH`A@a^rEkU z?6vzJUP~xo2XAblObyur%)Cc@Z-+XP6dzkN=XgA^C0A z@$Tb0xZW2C$KK%l@>)V>*6e+|4=lJr&5r~o9a+a7 zl%f3g!Q7oeQAs83%!)Tos8^(KKC3u$#^%*iuExKt%DO1I(#BtxYo9$!v>Zpq`D=Uy z#=L#EwR_jQDA!4FPBr?u()G@h2Qjff(hpo)@=Lb$uH21ncfY12&e<1Mm2%`}t$&(r zaF^?l0Z;4u-y)TbrJn!UAGL0J z8>RV!;St**mgm2lUp~7M%DLs?lhdA2OiwgA_~SJ#_#f#_dgS4Is6tSEhiYJz^~Uu} z6uQ-xur-Ms7kifS#`UJs7yfU79p@Yr*juitZq6(6@8X(vMd>fQ=%m>XyWW?ZFH0;w zbhs>V3NKS+$J_-^EvI_l-IFPEgzaWA_s3tF!daQ&Eh~+iGTv@D|5~y5$IOMBWPQS} zyJao@Qq`;0zNciK{V!>ySqrSXn2!q|6pd8C5*X%028N*}T5$B%zFw8OJMY>5zan3m zW~TqhbG|%b^Le|UcN3lE7QB?*Z=$WzwYt;D+15?|GobI=Ue{%fBOGFTs_sY_y0%#gyT0E3|L5)h3u9mYn!o?wpZ?FU z1=fYj*Y07Q%Hd$R&*|-Z1IC1)s;fS;y%+qkX6g<14X=w|$rzBgJ}~QJpw?s2+=76 zQ~vikxHQ__J2|CrsZUJR((l2VrA&W6K2MTVd&WL3^X8(XSL3(jS1<={;rMzr`1E^+ z6UH0&I7z?d_4w%XMt_&W$6D1VGezP>!-FiIe%Mu@m@+daK0M>S{PKupG3zgUww}o~ zY2`nbrON`H`V_hL2AzFbyReVv){6z#ms)E7m6e=Q=Kc8Z;|ZxVx`X*Q#Io+&^`b(M zjf=+$Cjuwz%<&OJ%5;xz&?%vpjo zLKivgUsb(tV_*2P+ixEG2CeGh-sWud^@Eh=q3eJ99Ja_Zt$fSo`S~^1It7m-EY~$I z+TIs2%DsNif9W651|?-a2TqN7LX1y;=ml+JTC_gcp+k7D!P@7~;--Zh(r$V7Ic8D1 z#`K4uV^+DG;b>Z*$g|L-sBEcg)>l!EOZV5t>sKW)zP~Tn5pZZ~fX(HtHN9pvd)OCF z34F&e^^>d31xJAgvggGoZd(3u(G=(EuN_Scedfncz3S5EHnyG5DiL#Vg3C)y(eHMt zRY}534;Ma}b2aZr!jqu*?xyz z?!IH9f5O)ooWDBp&wAx~i_>@gW$+X^i}KwRlpK$J7wB6z(RZ={ zhyT)vtD+ib*QFKkdIxQGnwM1B9JuVt)f2ZOijpJJB|Nmg?a{Dbb6f6_VIH5rEYCwl z(qiTtycg&^PK$VwG<(hcW4(K&B~$nIys3{#3|`gueX77xrwaZ%e3}lwqCB_$y1nsG z+0zgEgbI8zQalwVC^2rVI%)d5V{@(er4NNlt#3D;dNb7{xq8i}X5o%-r>f{wwMSp9 ztHdYO>rB);yJOwMOPz0b_c+ME-92Z~X)VL8xzl77DpoIPOwSL05s`QM?7cph^vtC{ zRaVFg9RF?{wkWva?UeJ&W7n?;bL!qD=(l%|y!XHKElioaZ_KLKS+Y5m<o9xr zl;3L_E*wd%KbZUAX2)jEfWse79#K1x``{)^`f?}ke-~A^348o4e(I_;w|AZ6*Zu1@ zOWxS8aPEzXQ%R*>d`gMZ1S5^Z8+V>re>(AY%(uLWQ}&-0FSfjxX8F@U#P7JC@l(HZ zIsQx&ZmpARR|C z+<5Z6d)}Yrt<9L%b0qP-4Drz2rF2SUOFq-w*j@*pEvhZD8TY0Naelmg#CU&SNOw5T zf>oMFJoUTwP0^nD_9Pn%!*VB0d4o%A_t<*^W^4DZ3(h>aJV>2Se!3MM@0Ty z-?w4^g4Fm3pWD2RTN>SOrwX*5x|hKGo++^7j5V*#BQf#9s;6<+Jqq?@Oq;ml#L4Rh z+U%$G1d2R9oI1GakE=k)r7B}4%{`t`Tkh4)TRk4*E6c+#p%Xdo%go>(297Q zGvko;I=j9vH(MOOd+j?qwdrfsq&CO4r(fK;6?&G%EK%6!-0)4|jV>e0tQi}&^Gz^P z=~$`7r1{nUVwpF;ptk1X9_Eqz949$=e64DFV(`DcJE6{-Mh2n_yIM~ z0?vI-skXZ{j-GIfEVyay#@BSv$tuY0TZ!(!g-4ELs5@}>o}446d{U8NrR`(xbE1n#gU02)$dzLM%{n_~7pu(eXwhCMDCquYgX}FG@n{d;6TOYv zecP58#xSXDyZgK3+zl0vMvn_oMf|D9-W9doZcz(*vO$JHv%4qv`@N?A;D0R^QTDAo z4lI{8S{pGW>-{TRkV?Tx|@w7qifD|>k?JttP+|L^6u+&rtA zL(Aqyah^S!c`H`Iz)@A}jE^$kbf4B*hObO+2M@>`?-ul!X)iNrr$dMGqt+cOpV-tW zq)oY3vop9OFo}iNN73)lO2r9A=GxKGXKklu-d@={fhp&badE+KPTTo>~ej zjM0-MPps`d@?lB7mBqx?30J(dj3;+kPPHjCtYp@>{d7|8_dXkP^I!#Uftx zUh-?RP)vFxd!1q4&Y2_kev8oOt1)?9z1y-icd5Hy`Yu|i+A3`9 zRlj`FCNK8emuz>)98Y`H>Ts$n!S3YJUDNdpxxbjj%n7njAvD|jER_w%9yRs!G8E1a|`nr3?iQcyx zr_}DTZvX$`$poJ{Pr6wGB4@S)?V5C2O?AS?PKR3?l3%ZH6bUeso}Ij|E=WmIApGf$PfmdbZ29fB9cr*__Bxb?34l*^>qaZXnP z45iG=xK^B1yDSl{xxh@crjpa;@Tn2c|P@Umc^>p1-hb%To2?%LhAk)>;=|wiK(< zdw0h7w_B*$JLx-Oyi+`z#HY`_Atn8nyW5=aq|yc7M*U|IhNc;UH*Py<#O^$>HpcjS z2t(qMPVPJJ5~4SH$S2)6xGkx3dS*`RpS~TN>MZ;>oq6N-v9!ZtZwO~&z@CDqPlRu4 zi@klxsN~JuD6o9;U5$ndd!FWOndt6TVuxUqpNKV zH*FTsx+SB~DQd^ZoOy<2``Ms1vt^WzpYZy=U3s&Ol2^u!C;l3VDczS7ve~s3CLT`p z-v0mO6UK=XUrd-(x!}n6$-CE{)t`RFM@30>=H*@Y8?UIQo_-Sb&(V6TSrJ3s&*Zmj zZk`bQ_-EhTRqK5!<8`g?hQ|a+tLw?hKIZmoW&U7%)n;a8UPqi?fifpyB%DK~#J7=y*joHRqfUeEmB$aG%b$8S5V2KRffy zovg1j8y>&6+`VMZx~XxKcSk?F@^jLINsFBo-l*jMUU<4tJ@a;Wu*fkhi=}1H!@8Ht zWyjszZsc%A^ZVg1YfBV_ce(f_uDQW?H)P4$J1g%bS+hKn31eLnqcmq}Y}aYuMbEB2 zTNZh)>iCX1De32u^9uG!n28_E`@Cwx$xX?x{p5;oZY&LE){a?H(Ku__U+p>dHMNS4 z>u&2N$!#dvaHHdVNqP-m!EQ;R{)>BcE^#N{Yd)m6jp@}Jb^SAs#Wof%Vi({0Oh3lp zl=fq<70U~K{`hejqBZJzUc8?-#SP;p~(A{sp$Pe{v}?ThF%C zZv31j=rMbeHM8|>PhKVF+Xpq{{du#@iUpYrtv*(MZ1j^?O1IVvj49oC^UT}GfAbhS zl9yH8o|xM1m!mdq<_xuM!6&coX1f~ad1b+^j&7+dIcc{$q(WwMyYQ~6J#d=k&CS2N zPFV7r9=y3y&3Vbsn5Dlh3O@ugYHrrCVa#AJ^xGKEnBiDB_0ybp4(p1w)+nxbShqQP zy}!bBMPc>x>mAme-FqiFV~xW)hM;X%`exng@HftM_02sJoa0}%F@ke*ce?T-Mx8#f zfI1(c-~ZIsImcP<;`2JA@$|H+f9q}b+MQ2wyjo3a+!BMe))x7)fhzut1| zjCJnHfZCZxXO~=>?S00l-!WEgf-lpy$?xQ>%?yk8$OStwtQ1MnTlYsvujtOS?!Ton zEB0~Q$sXC+c;VH?WMSjUkAjc0-cFpA_i)$AeC@(TM(dVX$rt9?Fuk1decjWNZP~l0 zUEUWsQ#$(Uv-k&hEO}xd+*{acZo$Lra7%CZyiZ=zA0@xWMIJQsYn{3xb*F`P>yHRM zCiN|iNfkQc?1k@gwkj3y`Q_|cE9EoWZ!qW22tUYRk~X1SR#ol-wz{2=P8)F1XlHQVFwil6yZ#ZAok{U(j0)^$;C(m8=& zT`sqGeOwb7>JZWD`AO5|zwY`>_tm*ZXQQsN@bBy5c`m!QY};w;sN7<%_M6U3sxGxL zcQ0nOKiFzt+a@#T7GL;n8*}X_!57J{*({sgBzMlaAmbQ(P-uBsYq*nwZ2I!#mH&3% zbW)Sp5LtI+qsHydRqAKz8s->On|&5?nQ`~#yOx`qXR;Yai>_eWS%~k$JTmY|4n&j!f7rKSN95=`|4?*Q4b4B+^60${p=a(zH`0Wdxifb z_urUmoBjFemXBdNXVfZEuGStsG^hXZnS;@po42pdDUCh(f7i76-`2BpFnyc&nZc$|~ z;9*&wc8G%`ukxiO#XA4UnA_0)t_Cj z?cRJo`{qE80#`}y5xqYJ1zEd4IIsD#vLQ*d&LZ91!jiFJ%i&Jju9L?*g&C{%F{n@F zxbW4>O0a?Zf8d3cE)BoFlx#Mg8Y#8EYL{h4@#5Bb_dFM9>F#KEdRiF zpndLgrO!vSSeGbjDYm-rU(>?*{Pi)vM;rF9n^ZTE%ftEYoy6r@rwp#TSlOr=eY<&e z<`G6CA4`=qA$RR}xhq%N&y-`=Sn;E_#>nTS9^EbGAAAJTEXOh{n(cuTneU2?cB4B z*DT@Me>22kf&a#r|M(U^H!jrr@cNT>1L;$z64g#=+rv zo17W8sfkQ5vTVEe?(v4XPj3o1?6~`JqQw@Q!(};nLXqdp;?Ft!(7I&puVf1 zsurGeVG~@Y!+K36{JlP7%P(8;9BqZE1~PVQS{8oTB^`hBdd!xuMFP(YtrdSe>3ppT zcfW0vBgMtcGIyKWtI1V4i%oP}uXdky%j7#5$-5|bjtjSLbl2wzbMDmeoiF|%ud^iJ z)WgDCHm(*NlUSss(*VU*T$|DZ+9ChU%o#>VY6JP zh(pvSsmkmQvzdO}y1(tFuFQ_x_d@r2#iz-+QC(}2ey4S{B&J*Q`K(t-OJBOhcy2DI zn%1V=dBU8BnK*ox?qdG&?c&Fr*}KMEl?&mp~dmQ2s?2S8Di*ERFT;`tWqiyfgo-(>?AIYtc z-MwQ=b&327m&V*9(&trU7nfY|ihr{*DeHiGh)%V@RB2-{k@^(Hi8GpI2viYJ1X0R@N?W=#y^SsWzt1ezOGLOzOIKn%Jz0o6l2S@2QpT-YU*Y=yXR*g+M|>G zBIEa`(%keHRwD1Mov$zaaYJ$!pLoyQh1v4l?Q!pTVx>RcWbj_QWR=tIW1cs?9=@zA zNl;iaFFsivzw}sWtNfURn5S^M`Z#&tO#p}BNjAgU*;t!f!{W70>nV`e`D5jVVbJu;n z;ZxkOsOxaY_AY-U;k(sOZt>%DHperp-HsaGs>?6zIhn*!*`vn!#Bi3|IvcmkS`&|FSoJo*D^yI@po2tU!n|2h*>dn0I-@D`2^Vuf__8s2J_bAn-GRJIYk!sWQ8-LzTJFNHX zcA;vr=6mhd`8#Z0UCe&_q(>V;zH{Z(KeGW zURIx^%6Pj(=4?8)UH>*%N&=kZCf66C$e+$$8dvN``G>nn6v!)A+WwJqxBBP3E#Tj z6zut1nz`%IgGsBy_1`vCrSIOt{c7&pPkNukOM;GGsgB#cKsbv%^|_$Mku|#ocRQci zbvbwL`fTg|13#_SosECFjnDA+xs#>aq^;Gj-_wh?W^@t=)|8sFBf2K(+_eYVjEB_H z_-?0W3Qs~)WjwN5E^1ia^FOqxlJCFVPLxIW!0~(-K`-^El{+P^dv*4Y>j~$IofJf+pPsoU`ggl$ zhu|<&teXrUUc|HHN%e0Li_^zY_*q39b;|@{`V=P;NaK03l1LC ze9y+qH#Z6m*2!r9^n(1&f$CA!#MV_VxRi%>ya;x zY(46gq5DiW!_MJW-D9O4T(?)cB+6~Rz1!b=okg@9Z@Tq5((>r;2D^j@Zo1*O^{UkQgn0JCb<5hK7yO#F`P+BCMOrH(ujU-J zon)y{aW(2@jOFB(aPQdXpP#RpH{-6i!Q__eymw`*FMs@CnNVgGm$k%q=}eU#2Q4c* z>HLFbtIS1LC$GNalk@%H5pIqz7mq}nW}dtLaq)Dg^7R!-duv~AGdp_o2)Fn4QjK%3 zB37L}-g$N7)QPWaVsB@yc0RLDIFnUiUhMs>)eMJpK5XQ^o^#~+oBJ1QKhB9PK0n?6 zqs+GxO6j{-x=ei+cg|9w;_LIR`}^Eo?*6UJ?Yf-(QDuphg|F(WAKO#YRFx-eW6s=t zrKaxGoC&i6>=X@`*ReRrZ=U4Xmihgg-;z?hyf>%TF@ISs$^SNG;Z3^_%ujwCnEmpY zxUK--gv(4188pp5W;QA`1c;y9t=P-p^ta>6)7?jxJIG9JzC0s%%@Ve#PZC}cp1ao_ z7H-K(Q%QdM_w0ie&dc|;2X{;j37LL%qhw}Y+L83FKUfy@>)M4sXR2QMa+;fh?dqcK z<{LUs?t8r>Ye~*BYuzN7J^tMi?5bt4_ixRZd$By~h=s_EeaF7As)uEV$xF`WwCIot zpSJMq-pw-)oiY-+U7NAYAc*r_uaK#?*`t@Y4h!cdb!bNs z1X+Hq=$rEFQjnI^x8qZ7OAj2}{pMrmxw6uJ|B`LV!Znq*-t0caEAF;>UxVMDBP+OD zQ(oN`eEi@@{+S}an{SRxd|UluuP#q&(<8wkNf>?Ksi;`s3vK*F|@ix-og2_1-bBtF)aZce`3?$IV&y{K|ja znJhndv-I~T?(JU5{&ic-XDf>u?fdrPHt%iYl>Fn&+V4NInoZ?0pPH+2Af(>k$z~Bl zuwSNA&DZZG1y*aVbKNxWXvjBSDZ8Vw|LKd%ou5x>ajBQ=4A1l7a>&|!bE@%=@}(v7 zOd|j8Hd-F9bz~yT8DFj!mlIA0)W)WjJ=M|Rwl94e;*hnB>HHd&SU1zlJzo!(WvMRO z5ye@UROh7dR`uV9(o@Q_D@B|>OqG<|BOu_h{pk}!_LJdhS+|p|Wsi7Tg^KJwb=PP4 zr3CY*h3aKoj88V}olx4-{XgZ(!N~$${bjp_Uh@89c2#<(X%_tCU($3_?^dog6W2#_ zFmdRL`>ADa=KIaClI5aZg`T*g5RFlJ!i9PrlGE;n378 zWotIYo(|ZwUHhTr427_ump@8xr=ESZ`s#y4{PX>6I{$q$yKS-cuAlFNC0w>;)~4y! zdJ+B~3bk^#+jc6M37?r(#j!+3-0XAsqK>_>b8e~_vmaUJ&?EmL?B|2?OMKZE-(=L? zJ2`sltil@R#*)1!zMhHQaMP$rXm->~=fIP5?<9VHx9NS<_mxNP>R#huXD>`-xn;qr zeBoZ7^R93mJ44H;ZiiEf)o=ZT%s7|%@2VHnJgv^#0c&jQ1q)|hum88 zZLQlIFC4X6?s(^1$>%pa-rw6A<#6MZ=JmVkXYHn$zF=&y+jjZD+Y;}+uQSyi=3Fn2 z=6W8%wq2 z6*zm{(aZAKOU58$nZClTdt!#s=k2B)l54)*v{f+wxW(3&M;=RxOvqYMn6syO@~np! z=5vagT`*zMpYZt9i(NYw9-E%teEZMKw*^ZJbRs6txbsZ^{;`!m@0~TP-~Kc0ldyD? z^0g;&+}nTde*Ua;s=$hv?{{q2^V61Jn_O+4?R(qEcztZH&Em!3^QXPNu}sa{SNgs7 zg%ee(TV>0ic{ni54LWkx^MUV?#k1#HGVPJF-~8##E~dn%H@EWL@lW=ho}Kn;%8c_D z&XnjG&R;lFGS~QH#?}{kX>QW$a(9(^WajLU|Mu#kdRWl5n_s^y%}CpHi|69neInU0*FMbhP2 zeZed1?^c?BOPdo|a(vC%$+IP0%P)2Q&Hedg@{Nr1KeG$MOI{zG?4Kl_S>PY_!$OoN zTRz~@U6W77Z_n z-n1wbd7t+n$Jm1Z)oU(}wc=(E@(v%_<8QO#y`j&Wsh|89%l56C!_oJ*^r=h1nbk(0 zTi<1HKAXk0VB=%GZ)Lg58E)UPKK`@xj-O<~Zo}CTo~^f)en|mxzJtv+;Pj6>% z1FL`(Xo+w>vu1_(-_#6a5H$-+ux_3-L_qN>sjNOSz-S^{n_+$8ney*`9l4lWDjoiJUREn z2cIiFU%#E1w(Vou>$mfCbGt?QzVfnM+PF_xXCt@vBhG0vSf1x~^h;%a(wkkOtUkZ| z<`M3PznUzHFR#s;?SIAOqg38o zef+UHyy^C8U-LsN>IB86-rLaUFu$oH%X*JrZ%KO9(%Ra6the|YORA5#srmj~vGUin zr0u6=`j*}}s}mHs@Y30m5D=LXJ@HIsgHYb|MRA&s$||GRC#i}aO_~HQ7S5!ERgJk*QN^w>P&j6<)P{aJj5Q*nE0?@QNc|8B+^u-@TI5YzSF; zd|rC${MeqahrP6ZZR>8z>2jZEutCcER>`c*tHN&f+~9lMUwZxM?KMW~J_l`oSR`b% z%D+8rbU1M}OKgnT)u$8G+4mh@(fI7L(f&!@m(I+N*=YBB-5I5t7*5U!kLH!7+!vk4 zReIiclfT~6*po@0RgZ6YSC#R5T|sPX9B1zKZQUVnb{|p|uChLoX}03X)C)S&*8ei@ zPqn!mIlI2Bn9p)ui%P<5m$fY-^BtEm-06-t=e`&2bLAP6+%u7OeU3EE>N7`GE7r-E z{SMsg@ZWRq0mh)bv%&fo&Yqd|l~4DWQSqWQ_5_xo^KrM*wt2J+Svx;tWf5+n>8X=Is0Zb;C!ynVM$byUvKP zFP}8uPJv0iX3dT5wfhat{A_|!pHA+08}ih#@>ZtBbL;fay#JYw*RiaL4L5ux)~$B_ zqj9vL$8Q}=OZz>Km&oOOi(JQKFa6O{H+5;(jhF-ZALnW%aqqGWTH5|5|G3@<({lec zOO9C-9d!6sK0En)R*|LZ*^Sk*87r4rEL$#eV4=h9S|yn|7NIp;qc^BJ&N{17!)aza zZT0CH&6ghRneyONqmBA!)%b>w0>^jjTy*Pfw^;V5`}CQA`7MEyBOhHhyd=ha=b75o z8-J(X_&ax<{(ZCb-LCWR7~emVZXPBd)W2cos}JV$e&(M`>y6#0p&9a%DR9&Cck+7A zC69>JFcr*mY)$`~oa?k|gKX7#3xhQc8@NxIeknT@DPCr^_pDFqG697NMOl~1a(}4I z_;*U8W^d=;spVFC7YNtMhVLqgKlE|OiHN59a_@)z%!VuGY@CxG;QYmYovV?`r20zk z-6tjn8eCuU{z&O>sSkHfUR$qkV{qeZx05?#p^>eISXCHL;DU02v!_1Jj5m$jHzED} za}CZgr{!wtj=fA#7J2Scfxc^ZvOIq{<*(L0Hxt|W97{Y7%sbEXYmb*%;`?$pXP49^ zJiR-L{!Nl&X7UN_+%iKXP-N9lJ)2#s^?M%0pV2k8)!e}Rh}Y?M)SH#jD`w6NZ=CIV z&u>TC#^oy*1spQ|%#muyd#2VY#jsH*D)&uH)Xd*^ef+pKN2dJPBrAEie7;0GOAgQa zGk^1ziFAIcV_&{+w}Ms4tKHm>7=PW==_=%@+AaUrU~c@Ptv?uxqPn}MhFqU>H|oyK zcU#2l9RhcHmS-0-E_rkGZdA>UfBP>-#a!T&&Y5@ZQ4`AywxXzRZiQ;GR)${}E`G_= z)oZx2VEXc{I~J(^iuMQTx)cslI7Q1ab-P%(M`cuZ_uVO(+oHQ~-%$ZsG^MzByV&-f zo?FDkZ?9CD0JU_xr$SVB_uGP{m!s}HW4su3=itjNV&xq>qq}ccbYFYK#Bu!e{A-WC z=?bhp`Zic_?a`xND`w5V_Q-6eOLpPx=PucW?8`4l-PsqgXzPwztwmdRIICZ}+ac&E zup;Q$pAua$hZ`|Q0!Lqq-q}3c`JuMQuMVwuS;t@NyQDphU6NBTBU#`dw8XdIoac_L z(|W=MeuqLGFT9?^Qr6wLAbeT4{`mw~cJ)nP^4MpeWmyv#uWLS?(_-p_EYYw-8%&>{ zHxv1?Vz1hwADhnS2wgFmw=ZwooYgZm?mb@q`R_8P8=nufawYn&7Sw97O?F!$@a;;$ zLZ=&tx3_X7D(i)GFfTbJ)6bQ-P9>D1T4YOrqK}oQ=%JabYeP7SbE-8%JB;7R>^{gL`iNnnd(aAjZwGP~I>{{9e^aZavM8vv z;CPI^R*R?iN~byNe?NBL{>9~H$iCk@mzG($-wCqjQ_Wi`>ma;+OT-=Z{FSopLfgO8 z%(b}?)UkhgO0q#aAkZoIw|bosDi{>qn61h-%LB5^7@ zYq4(L%9pGYw_holaWXoKxidP;z4(Z(>0Z}Q({33u7J9#Zdqj6@v%Ay9?Tn@HOOgLl^rFMZj=c5P1-EW z*4#Sz$Pmucm#mSx{s>b=NnW z1$=(b8K*k@IQE7;glVQ8Q#+XZ>_ZY~%lWHy4s$o(=3mj^xcy{oto``b|U z=DEXS(H(%!pGKxP?p5EtKNZ5`HjUKN)1lhcC=RDxMJ4<`QF zv-H7+?ZQom%Tl=xCJF^}^)aVZ>B>wKZhCxRMjUtg!o`)<4$+^>?A~SE<2x^V_O{}W zi+kpNww<;8$V>G&ZXw0{d&QVee2d~xxSg#SZnRhIUYS!_9*EQEv%ZyK(_XPje#@>q zO*#;`i*LfqtrHxUU3X%NjN|t7zMQStsI$IRW$DYUA3QWup5HwCCCcKCO6u~H8bM{Z z*2=ZMDUmXfyO~+8F0$#fLD$Qz6ONed6)RG8FPk^jXMHQnrafXp$G${)C|u4~{AjjU zjL$0wDr2-)?A%4qo0*dns&!?W=Jz{)E`>!8TJoqu{M0LZu z-s9O1V^%!g`l0N095-hRUneNAPi@_}SL~kG?d*pSx9k<`Q?XbnJIm+Gsek&vKL2N| zn0x6jmSysm#4VFIw=^<9*)%XU_BEG|W!}H~d5`uS_%`jmS&KtjSy{b0&l5(cGQ|yz zIrrq1cCN~~x_sKM!v_rJT-+GC=}+W$K70OO&-okwU3L5OQ@;NHM|=Ap{#hNL`Tu>K zZ~yP_^ZL*7`=VxUxnBQA@ye`c@f`L)=hy!}eg3okzmMDH>;Iho_&NW-_v<4PQGahb z|CQ_us@%B$+|{4{N&1TS>c7l0ICkUFpUZ*$f4B4Bd-I3?)|=_~>;HT_fBbwv-M@d= z=h-#7G{E7p$zR2D`y-~?5HzsOcs_s$-?)sw8GQ8AZO8!*_<*-)-Ka| zWz77UEX)EO7V*lQ^OCm6Nz8j7V4~5;E7Np>h0ihA_d&spdj}LnSo1%z@j06KJSgZe zE4Wdm+2AbjQ1$KsMVE%@CCu%c@3QeZwrJ-**w6}+QS{4wupu;$xqU(7axHn44>H}m z1Nc-v%xUu%@qDoJ$E-=hoHo}VzKS`g^5M?k&u3d%=C#-F+d1KYH-pE|ui9_UaK~Pl zCv;<`ZtnCOGuO`6*;u@ONkU=r^1X8poO2a%{Hs!yr{p5uIQQnB4@}nE=LjUQmgNcF zaGS2cB#KUk8 zvGsktb=&Dnd+Nm3%xtszyFc7q`Zb`Ub=LMVRY+ar2ge7B3=C3+0EE%iV z%70sQ(hrG~duMg#G{j_=PgJ=2?bY!Qrp6OjwFv$3p63zT@t*(o#L(Dmj(u}(tg;I# zyJ{{!^B%KGmWRu2#T6Qtb&iDl7c_pfRq+1kI<2&Dp@Q&=D{bP8E(hG=0$ffBy{S^o zeG6T6ThPE!2OVlS;$-GomD&A+?>98iJZ-V9g`7RlKOFne5 zc1$@qhvTC2-vhyUEE_l4hgS)U@Y=Si3(5%Ge*U-P{Ce&C5tTVyG5UH@Tu%xvKJ!;f zospyMFQCcXm%BOhK(111@sXC`L_3q0@ta&4z-+ob;znt;)hPx-sa(^~6oM4i$Y%*GT!EU4Phc};Hs)9Z~p3>^x zCUjwe)<)48C(qRjF`n{ge$R3D=wzQPA%Q0snUZv0HZ=eETOzmKZ~D=xD$*x|NYapI)Z^vRd&gKqfk zVG2qzx42v6vQ=Oe=ge&>U#2{YQ%jmTuOQ-u_!7n4H8lylT^_ACwtQdWj^>_}TWb&Q zRJ=cPKW~S@l)zKF-!eSn-p$ClL7ORL(npW=#a}|Vn|wMq?>o!cRZekn)&kQeD1ZC( z>BGU@n}jbU7lp2zH2u2LjH(J&t;lJ*Jf*_# zH^^G?O`VV=^L4G{?}L&rm#LmR_Db^JU6)m_l-EdX*c@cT5oMIK{L!U1=?oLQyqAmK z6Lopv`c(8@X~ik+J-a)nG#^nsY3%(hC;Ubn|A$hI<+~2;=JU^Gjgg(l5gp~TLDnia zr{fya?S;)IH^knbe>>%}*^L?-d9BGGPu%R}o7FU}p5wHcS!7pZ?ipdL?_OHEN0$Bg z8B`ij_ON$?eOTJ22!VyoM--Pl=2&+iJ!aRoSD%kOua3+%^Do)=Rm0BvP5PX`AVsw= zd^hU$oCyuqPnIv=b2YKEe><~~#^LV|7Ublun_C)+RD^1#UM@!8~trgD{}W>u4Lzt%rz7eD;!n%^9vz`kSOt;q_? ztJ1%haIZYjadkTf*Gh*qceitJ-JbR1$D*r#1{b7k+F#waI40BoN_eAau z5q2Guc#cfC%^uk2uwruU>s36H9QtpDPN`Bk)WxswW_uz-)^OMD(4Z*+ZpBl#Pg*pg z|8-aA9{WupoAYBf`WIbYm!nkTee=FT{!RAhUS1bIH~em?5f)HUak{_NOv&j+pvjj) zk7k*TTs(VNUgYymN;%TLy#Arbl*3!zcuJmXc4ED;U0ktagGWlWVAA?VmnU21gmow! znl(`PwT`~7~Bk6XR1wN7xx_ExDY&FN3}4$)mQ zDZE6bQf{+yfsyPlj`RJ&?>MTZmeyN{URovbx;^;ejvY~+JC#E}FS#qIx6Q-f((%~k z6>qdFV-Mf|&=8h-UoGh5rr4X?JLi;fIkw2}(*DgNxa$78H@989{+6ZAKRbEFo7*ma zsq-fYS2^w8w36_&J?rOuDwj9nOd^ZAA?+P`xm-<`5Mc=6-Z zq?wNDD|1ZZe+g zv~iBl(=eT$2enpi#!L$R7q@gjF`Tt+mW`XWkXqkGzIz?XTNe90lGwde;FHAJ6_ah; ztdA)7T}+9QTP#~DbUdSdE{oj_o7|cW$~H{$b2!c)V*e6puMu|lyumF0=#8s>KH)sN zYMbIFQE!2V(R)Qt-^|mVw)t+D&hOVPNx4c(Yoj;LnYu0MW)Jt#O_JhWsi!?Prft3( zq?5jVZNzMi1#NmqZ<(x;&)ojlBIwpz3$xpcWRE|K-tzcHkkDI;b7i|_kKfGO{+PpX zCC8nt;~Sr<+$zkm>@1UM|9H3WvBAFEg))|F%Ves}FZLzBSG!f%GQ&V=%k9D(!_G39 zXrD#0#}jL|Kep(358~~dbih03U)h{mUCUp$efKZ53Fmst?Y=$l@^!uYw_W^x#+j~- z(wqAxv#M&gM|shN&z&y2j;(+F*5I1Nr3>0G{rY~aDrI=Q>RA8pkfeVOM{bMG&(GsL z*jlnMt+MyxJf`dW^txYOvAcYo!}eZiUmwe_RnyljTYqq0-hrtlu8MO{Me0Z9rZ+!U zOZ-vv==QjZ=Gw{#AOa!_|$w)pCs0CrOdeGQ{wi0PLk)2^9IGKaNY1Zeyc@( z`R8JlWyWmD`R2dfCV1?vN}QU0EB?6Wp4H#3OiT4zz3$3Qy|r5I>AUy5@@k!9ka%p? zB!BM0)0}IYH)-k1CSIF*rmV#>y5|>rV$t3QGe4H?TerSvyRy%@?@AN(v~t#$Ej#-5 zt}cnlr&;@1M@kk2d~@KR%UFRGv39 z{KmT_`!~y)PnY?iwCb(J{b~k@N5`*DT~&VM$jf^Z7%MhRZ8crW(3E&-%Hoab=~E&& zyiGWRv-tj*&M0j?{$c&WHIgn$Q;$4abkJBkuX|HLqQkm>rW%@eEbG&)k4?GvH#;CL z(V;23;iZA!k7K{Ccd{pGd40i^sVnch2(FfWed@~X_qB7x zpfgpfp_aG8P1omsF3bz8ovZfft=-AYHUBK4UuuPKUiH>MRU)i@j_w($u=+V?g~eUt z{uZ9|+PL;aS7ux2y2`Wia=o)&zB%?V`k(3c-3Het21lxH<9i$)0{zHBax1ho5g=s<&kP=5*&xsU>6D`U77+>Zu=ir>i{wzn62E zv4H%Ji_eRg=A`ML3!P_>lYg97M$sm9<)sOCHkFr!aVlNCRDWk~XrICFGNw0m=4KzN zTc?J6nJc~XSFqm?34i|$vUf!f%J5A%7tnL}*pZ1>HeWt|tx4kZ-ItF)9Epq5-6vL1 zeADCO&e(s#Rh2mt9;OCbO6y&1IlX9d-#gC$IYGz3@r@-K)%$$8qZBUY$2w*Gv|j4w{t~&8m8!%YEJRoS&6itHNyy<|duh zyT5tf=8^`3l4&<`oEMd^dvJ5{T_TdQ+d9LW3T&(Jhr*p!Y4ztXYxplYkanA9* zs_E=~XDzCm!dEWSU4G`3iNK*LyDi?i)oh%U<$SxX?Q-I=(iuOz_J3qqpXBS#lJj8x zT^qi~x_9r|m{~nN*K2jP-rSN$PPnP-6YI{Isyy-B$6f_*l+>T|_H~2!sRR6*Z~xyp z_tpHam`k1fc40}M?lk;*I8(1P@57G|KE=~-dUR-=O3ZPYvg*9>YA@}78%3%X7x|rE z-(Bydbc?UE;Ev+WZ|kKFlmx`3#*3~_QY}e3X?awmVf8tHHJzH*1!Iz9D4YI zwx)hV%&G+)1=iP^<}Iq$`I2#|IlgPZ&|ckKh98Sqyq0|5_k-iCT&U}!4`)AgY?~D7 z_bpS{^5*h1wF^f+bof5u>A&H!D_;A)viz)>&U1>7Oz=40`rylvicd>oSU;t$Kd0aR z@zB#5m#+zFuk`Ysbb03XvKGs~oeVRN^YdS*5*}=^F{D88Xi)UJnaZd49n-N$dK9#r!(jOl zlY1Y(91FZ)v+|6Pr-R_iiK36^y-F~)GxlEYpLu_U5%;2)RISRhNdhv7ZC$orDnWeg zyEz35p3j}_aIWsd(j$$Pu1jW}m?ocLuf0^?{(`bn`6?xgy`GZ1TZN3y%}wj#2v6D` zY`AWZ(7e|Hv#Vb&3m4jzzhYx}kRSUsyJ=pxu5it&S#`B%%gYk$x6$Uu<9i-(Z=Q7N z>5N^gOXl!Oc`OOjdQ%yGgD?6>#Vo(~`*y}@|33ZjXK6-rVY;-Wt^B!ly7m{YeY|*MBidZ~l?$k$8OLaOXD6ZS> zsPuI51j*X3w{w-APA+)*;AX!1w!?e8<63i)tgosbe=MD7J=b8>>CihatF%7w`d9TF zvz`~Cek?Xd-OlgtJKw$9bLIv=G+K8$cuSK%S-TF#x_SbOg5_E*bq+AXitGR&EO zS)`)p<2)+4%pOd{#VqxO^Q*sL*ZrI|Uk)!m5p;&GAgELax zi^@M6W>v;{_e7qrJi~cKsJ>h2^M^GoTz&Sl4cv9pFL)mnUVhqY-|DO{tdjhK^L$Lx z`i#XjZCo1)qvmBzWXsSu@{>Dln|V00^K&>uq32J*{IcMh>*l*N)0=s#YpO$E-ZVSz z`*iN(k9x&-_RLzEUwp@;^O?wAp_<28eix-rhJQTuJeqlrc*cfLYY$JIB6zm$h-J=^ zX_vn!U-8OX!}@&kpYl94^K&az%>>RoIW}`wp~{4Cp%V{h-|dL8`*3z&_Itag(4ghB z`u^nY=5N~;xkbzEn(5{M-Ifaf`i!)Nw{i~b%<-sRy5lnM%}b9D2p67rGfH2&M{Dw| z$WLas(*tI8eL+9+(Za@o?|=Z{TGeIl=J`TEhE zyFZS5o>LQUf4`;9_}I03Gp^?!v#{AXwfb9@Nsfs4JBB z#y*x?tDcruy!tBlDP8$sNyn=G1mnz-vL-8?-rX%m&-0?&G3VdC)IObfh+(_ZT~40rrF)JAS>NCGoX_fh*t(5ZzFqA4WV~_at3%H$ zI}Woii(D)wp!wl;#9h7Xr|n|a1@4Z~k7h_-E}JtiZPS87Wv|>zEkv7KUQ`sERnA*J zNh{@Tk3fx#&cwemDnWM2x!2qDnW}W&PqO$Obr|N1hG&<_AvdFp~*_xLS zu}6CP4ZZeEVa?~0WtJ5uE#dt%HFTXy1m|5xx$|~h5f697CjDPy8vej^?aj>34kA zs;UGjDRi$$+wlD3!6$NyCtMVCRPvKheEhymk*PsbbE4>EB_~CVipN#QXWfr0ynpvq z+P%+y;-zQoInA?{cJG>bN%XVO?wMzVUn)5+F>-u8-F)}VSmDn?N4>O8Zhod(X8hQE z`MUXgZO)aY{`H!q+_bAsb>-}xhYx(LRk_66AGUm#^74IFSIsY$7qkDC(@Huo`nv2- zLVx`&mvcYVH%|K7edt_S^`FaXMRkD@0yp<-+&ODzXZX+a#L0iIiHc0W#ame?{_Q?= zm*-f=NB^c1bF|e`GXF2ypkP!V7|{{r+ZX?MzD(e|kN!#KPiL+D=)cXZ^P~UW9=A>y zljlU|M}LqFlXaO4|9R#tuM^1Xt>0AY&{JPjaqIDXnZ$J;{mt$t{h6!~wEyvzWA-<< zJM`3V@^|g27t-GQbK$w{Ka+LU4F8?HW@-5Etz&?~?fc|7 zGeh9pmFPsL8$H~@hu+NIMj?9mzX$s9=|Y;v2D|M5j0RRCU<=A~RVunB(_f8YVGm|H) zwcM7hnJutPXDR2#{qMG~&wF`p(@M?{zo*@LDO2eE)@I6%rDaUMcP`~+&fl}NOwQ}h zrN5=$WM24+Tx=8Heuc;HWb~^gS>JSHT@LPC`pxUnv|E|$YrW^*Jn(zkEJwLQ@3S2X z_bfHL{b<^(K!Hl{vkf!%EH#_BV`-V0`<)=;D3$z`bA<)AU%BUZC&;=|g{RiqUyH{^Ir{Cehe>B4=NRohdgf0YHqNc<{0X+)Bsp6OV zx<$orX3->z)VjGxG=padE#KDPugy7U)Be22A=^Si9$is$($9VzvQ4k$i00=26~DJr zbENZy7oJos%v#^lplzTugwcCP>9jI?*%J zQ^`0@t#i$cnNyZZ8c%i!JLA*!sXNcm$?^17PM!&y1$_iGUssiOSGpMPiS(Rm*%vS}&4;%VdfuOZ`9@6ESt+Lfj+t3WboN8F(>J+v zw+GLSd?>~F@Z%BRX~ilnDu-4d6>z;inrinp~ap1$#3Zu+^{&b4(L zWzR1<^7hO7ppQR}T)G>5eDjI(_sxpld08F$dfQD-@VwScV+|QWmA3Am$ptNUY15cMnWK-<=CB1uAgsTQ3y?>Vl`c5}%);Hcq za;4^_6qgjGCgy@z`AJz^riR2#oLiWfpiZ3k#%6P=c;@}Pzx)MvPVOENegn4mn>O#y zWvgL$Y$|c>!PmbBgVI9VJ_UPS<>7JO?iQr^g|F4| zzr^&}|2SU%@5lG~|CQ^1NR=Ge_x~|}<(5lN>QC4|onQa^HF)AY-u~Z@>t8KjX&yy8j=K-|4m8 z_HjKk=O69^I!RgOHk>!o824Ud>eFI+`b&!QW*$Sxt?Vm|Ifoa1xWCtHt|?pAOhexT zEcWXzR9y8d&|q!&^<;9k@s&oSU)gK+z1z>{x9-f(tkvJukNyAjd*$mzEMeE9U-d;4 zztUf}CC@?Q+ML^~w*}@oXl#u6lwHRj#Xln;J*w*I#$&Q86fV>RGP-0$hQv>C-}m1l zng5LWTCvY}XXdjw*@`V*cqzOm^I5o&!->fe*Ro8f9Y`wL`aOcB`)J7L*lD?o7{6VY z(G>|k`9*8z^#CT-%`?*GmiyGZDeJCpoN;0Mlv7EIZYCE^t<1x0pDs)?TD3e59pjv$sOS$`_|xSf4QnvoFx9 zJHWu`KJ~A|>X&&XZ_Qbf0>24m$LRh&dhie1WJlJlRL?#q!}~He>`V)dt{%H$(R9yH zmtoNt&cpv+h9z-s`N}I?{fEboZ|#Cjwm~^yG=4B-7O~XMQAD>K062FtxOk z#3=??80-VNktFl1WxPyZ0aQJE}JoTy!)ul=~PW0ArHOVKb9Z@xud zvwiZe$-GL9?metn8^{#6JT$DM(?ZdIs+UH=BZi|<_ngWPN;11!F&vuV+3ITG#oy`~ zdO}g)k5$&3EziuHkE-<9PX4MX#&}%rT%O~6f#CGc@(mhOEDG(cvY0I!xs~|>w4dHE z>tqhe)IEMECG??yjJE8?=MVSyK33egiswv-BU7wN>QgD^jmx%lNiuTm5x3jr7=PmG zp~lo>hKs|e9cbxcxO_-&R+B@Ux>iuZ(TRID2fyTS>FDe}U>Y>Xt~{{GPvMNcvcUgc ztxp2{CZ88KTqhvVB3^GRO+e6qWi8wc(7WifK~JXh`%k>zpfp5Oam8}Ia`)n9ME)0thy z@cQTSO`7w#o*!G95^wn|GHZ8v>Sn{4kNmo(RjQ}oQhOt)%_Ld$MsVfVGWGUDX}10x zDXVlnZ$>YRU?~>&l;-e$cl772-CH#0MS4C?+2<`CKH2M*>!j)fmtr3txNwMBFXo|s z*sg#XKCiSU)f7!io5~^-&#~pT*nFAiNzE%-59!S5URo-(;{WR#`P+8woA7#$)6$EF znDvsEf3w@Ec{880v~Ti9|4Z*y$vl2=z_2KT?G4ZRGj+^~ofFE^-mi)|`}FdPPoe9c z&HcCADuDa-ffF02++g2#@8ynaHJOv^-_&pZBCf+&p7dT$X8DZpr1z&MasTOZXjA`Y zo%>YCyW#QcHB*x~H+Y|HPV>ntGP;%3>!14Rr;?g;-(SB|8T%GY*Daiv*|6cBQ0Xj} zg{fwIb64_wXpOidGOfZrKe6FesK<{d5p(TYTh8xzlD+as+*DiEc8wz`Tt^E-rPm#q zo${^n=&vg-FQ5Hz@-zCq$>Gt1(AgSy&9h>dm)(2Uv7!Cw(l6Z{mnB3jR$pG;ccaF6 zlIx^SMS-%7OZNPp!m;k~luvn*3Tu>CP0`i9qV|a4=u=;r6P?NDwFFKWCQg0zE_mV& zCUw4m)@QQ9ao&OH3;OPHo-950PtiqM^W(=PiS4P<&u?lTPi$Q#;H(gQdn4BtsrIS! zmQ3(6-m+7#D#@Tx@XH=<&2X>1Z=6oqPKjHx>EIQnM_%iF&M_ozy?QECVaK62y{(xI zK85BwYKJYfy?kHHK2Y;}!YQ?@7eaPrI5LN4yf#adY0U9F_N1sOie*Y(hnT<>rToM? z%_XyDZ&yE;lP{o_>0h+g?Pnj`k?+l(z^2js0C2n)%=ru3XElV%`^bp|S-_EmBMa$NN$?vB{k;(?kDMHKl zolZDp<)x>4FZWs}lF?xdJ#f(%RC({&|V#k}@-9g6zB_-oyq zSjY76rKWSEa?S<`oOMw)S%0ge(T&g4eckS~SqnZ!M16gG>u&Ojl(>{@yDbqguiIxhw(Hl_sG%Z_6EqKEQ7wVa>+qTo~ouT&}QN=UCr7o<=tZ9$lOtVmD+V{}M!(?6a$;C~J}&JF zpFZQqT~g^1&!xId&9A8?xkhq+a#Z&D=KFLui$&emJyAa%FKJtJGdyE@kh5;{OLLZ} zHr3$E8`6`md9PreEBq+*pq}rc2l>EC$vXw^;2 zWu{F$SEtOHBhVlE_`+rO?grLhB3D8eqg zggj#>#yY&W>z}>ysq$at@*8ex!jjx~8+>?=lty~F2L~rIos=z&WGZqKnH*cT$a>lG z*(;~G?VaqLxk2CSr9pVn`pw;U4nHqBo^o1KPyN$GZ%u_YB3&%Eqw*Zm=JmyToI3vZ z37b|0_mzl8KX-5h&+u7$MCknEzLP#zN~cxqJH1KaOhV&y7entD-Q`99b6HPcKl#b- z@qVU5i@a}rOAii~)xT%HJZe`%4?$$AUtV>j1HaJWpE zIOop&t5!}=r&iA_&yRnpIxT+=!=7phF5z<`MTN6ooiX$ePMdU1cCuvR6gjuk3s)9& zo;PScB(HwdDXX-#=CtSuYu(@{1ts3=9HRPV9kYx2ZL>8_yG>$U=k6|0os%{1>WYbM zMb50#C$6tCvpsQEt7vE1{*!0@i}t4N7hTp~_+^rx`O{~iJ5L&Xo5;udB%=TM3z5l_ z86Vla-+!)8$HZ@)^#tR|ZzoTFZIzT*bkz7^NKVWG|J_;%oz2I0$BHIQ+Q?>MdHJGe z_;gQ2r|(+K+#D(Ij&1f4xbU~aSKp6KjORkI{<Os z2(RN43Omm)Dfnk_tjW0Xii1+9p~JG(>W3Lsk1v|CF@VL$MmG4^ib9Lu2VDafM|imJ z&s!V8nl(wV>zdOvt@Os#^BMm#89iJRG0i7Q)!kpgnH36(CEj80*vgd61aE;}CtL&0pT}M-niCUBuO|nVeC;r*Cnzu1( z(!Iyx{aVVePbXAmya_#$qW2{=WpBEH=$^Le>;fDq$3<^-2jzZTzq&?eYS@{I$(dg` zy&4$z>hjIh4Ev~N<-XwIvddxX?p%MrhuT7NfHgfy*Nw{ZQfE+2ycJQJqT%dd0A#FG6{ z6$eyi74gmb-KDvAZ>GURjz*qs3KL`_^ZB2AxGt;wTKn9AzKNx$MCQwe$1pec91)lI zer@}w)b`{GPNu|mjg1D+V-_Ci-^k|lJtghh&3D({ES&m%R@~a9qFymoMYg^lY%G2& zB=fSJ`0`|iOk=QNQPT2FJOXAXts;HOz9kk$nRxejvL*0L$lU(){EdC{n`JihvobB8 zx%hd?vc>xi?rzJzcF%s-#MBMRUjmq%*_N_7rWh)}4$k{87yE4bt+mxmr!@dGe5q`+hUe-<&+=uU3p^(m(AVN|4L6(Ocp=D z&=Pt3Bg6cw@BPm0QGFJl-f(6E>-3oS*AB8Bdf8rh_9XkEIoIddBz_ONn)=iDuAITX zb(WQ?%iCY|e%@bryya!>wCj7*f4-9Y@bS@(EB{z0^E9MPxO}-gxta5KP7u42|1zFc zMvO+cCmYz81^UL-u$n&|B}c&bMdo~#$q=Hr?ZcwmacvL zvR|ovTg=l%Z%#ZAQM>#(A#u)I@79xFY$R6n{a(M>mjC2~Pjd@ze}15_v2RlZr?9I* z%5K-QhWHnEFsXgcTU2w*@lUd*k+qrI3YJgz z{?@!+lOVuvy}4wc-`A(HKb{oL{r=cA+w#dX+shoG>w12jQf_8Alg#cX5~ds9a4h|n zGh<@q$;j|^%m#_y6;7|4wfOv7dHw5EF(;k`Ogrvz&g*aIdy6TX=2b=Q*}Wf)^0!4a;`P@{%@7F$Oy~mGYrI>EIM_$i1il6aGEK9`tGtqs-O zq`L6z4Asnn)I}E}Qn=4MDIC63^WgRd6<4&s$)-<#iXhqXer+klrh)%x1E6M&Qoj;lS&?F&1$?5;y$O`w`$tOsi!2gJ=SQkI>s8u)0F(Q$*lQTxswUN`aSTgMz9lNs+P z$sOI+nDT7V@pY5Jc6zCNpI~*Jz2ijR6VHW>fycl6ztk;oalSyB*M^>()AovGPLT}O z-o$7)bwLo1bER+@AZfH&o>MB@WnIHNO$+^m%#^iY?12|jCJKrbqSIw>H0Y>`wPnzp8G~^ z<$W($k|u47J6Ar>r*_Nz09NXf?H<#DVT^ar=UA9%}yNP6n z!#1(RqUYzj8s_LswkZ!|IbO79LR9>TlOb+S)&^ToY`vjpVeRR1`{fyPwac}V^IJvs zWv=2CRSQCt6P}dmIk%Zty{YP-*j?;(VEWUYe-s;+J*a3F zk>W^MuDNcl=)QBZr{%SFG2N+Am}N9kJtam|Y~8uJ#sUxYePWf_YxI_IocNmE+p@m+ zxWEyQjn!7|3U2+Xbs_S~-x6~!RDtCaR)9xw)weHNk6opt;2(b zuj502%76X6&u8Qs?h>3GoIX2SbgxWMa&gr2J_q}*(wUl8d`Ub|AeWYN^!91WE>_MUg2o1A4Nf5E{m?NWnWL{-)K! zIAtl{@zz;NX$?=N2{+E$rZcDbHP?&G(@yV|Ll`SR6_@eWdY;<*znUSAlR^ITiHChW zTA6v4sht(E3-5`|++ymm%xQx6+?eEJsmh77%deWQmQPWBXxS~$;W_F5XUQUmb@AJE zxP-+#AMXg;mt3_YBIIcY)ug?adbwXYJ*E zT)Ix^h#?vciZ zmk)AxtNgS&;#OJ7zQ@9Mdak=-`{1E( zro!Ti%7Bb1MqPV(1mavy$V#of;gce=d%6D2Ia>uj%U)4XbNDsW{=F$uyQJLf&(XZ+1CslSn>xyQPFff1AbRr@t(oWp1cV zpY_ypcgWnUmJtq3pR&CfExL<*qIFqsI2;UOXgwLvwV>h5(skxo~;5X2YYC@mw1k=Y3ngcREv!!e+|^ebx`I3#Kvs5W4TpC}LW#*{~?B z!OokJsqb4518a-$*=o%Orb8*Y`m6ypv)LzI4`TTLqjqmv+k4W+ z?%uYiUY@t7o!-7pcmAABAj7AvX3l!pcIb)zoe!aYx_1I*Y!JJ{ZO%0B+o4{D7g0MN zS~G1eaAtgHaW`(q!iF>D%h$C^yD=56FMW4yUZtz6{x_#`h24yci#`=*+%LH-VfxGV zZi&C!{`+lv8gtaQ*50%8HUDqrw*S2A=F4aI_g#Fyd9uabE@!v>-oKoD)%L%9af|gz z%BSBl2YFNsQrs3zk6`*7#lM=RPcW_S+F`aU&rH|Je$ZXJZE@@S)eSYjAKT_UT+QJ9 z(fDglL=p4LjZw)>DZc$-WoJz%uv=Z4mHL-WX35V_Ns~5qiDk9y39q!D$a~_g=r*p& zk{2dyEv-D}&|LgGlu=l1)#Mb$d$CjZUtM67=D7N}nP&0B$1z{l8Q9ls*r+g}_Q|Dt zw;%jnJmtIgd*Anr6KdWu{M@FUdOSPSK&vQU7Lo=o@{%nlw*J`smEWU#qlhkEJyD7;idV8^w7wC~VicE}MtzCttsJ-2JGj zz_y&52ZQrACT>!Qmo>b}`9A67%(68Zj?oDv%g)bO%MswGvdZWePj4UdQ|tP$jt$F? zy>xmj5csid+762apHvr}%BYC9?K^wqCm#y5*@ zCZ3e^F-pp*a60z%pu=H>UmyM+*>%A-S$?Ls3*Tq$D{(K|m-*?MBt*Jhyd<%ZBgI~a zmuc?dyvOeveywvTbzm-62z#{o^%^bN#+=z9ZX2U{b2k@n z+W4yLvqk3QXICDZ{LPqbc4GF~nXD$ufaQ1ju z)*&95kUtqqw@J;u`@kX0kg+mj`?f~T9XAzkTl6L7ef0hsvGbK-&dGP{n{yN{E8mT0 zzv-|{HM(#5hjInun;YYAY87!@S(iDxL4DV;Z=wQzWf!)p1~Sf!dVOosj>a==oprT; z4HIJ8W(l6ycP_o?xw?|5T5$GP|M*1an;*Y_iCiR@5OsY=CzFwP{(AEx`waRg@l;l6 zoxFGWuiayJ&a!=O-zq2N-E;BzHoNyrrL)Wg?d#bottYo!KE7PztE$4~Z|`4S3-!@_ zcCTBh);Ey9o;fm(zrOkYHu-<6?zi=?c>4Oqb0dcMz`n%aPNr(+>nDo1p6j`^A?_Q? zw`{AP>mFVDjgN~}-ga~JT|X#!r&U+<=|R06+?)9q#;j)%@sHRe>n-5DVz<%O`R6az z#h3SM&Me+?|N64WvwJ!Bv_7oX_X=@%cDV0L8P}x?W zcJYFQv=aAgdGmrT_pLl(?wPh+XqJWN=a(}7zZ*9tvnm~!(dF&7PRhd4xKF?N@ACx{ z^b1yfsl4?dd-9dZ!i{Gv_Ek)|`RGT<8(kBJG_7Y+BAgEN?CQFEH^d8!Jl7zf_m`ui6uK0HXPXGBbFdq@@3haDf>S3 z2tU?)6;iFEnpviL=4rvP^pm?;eJ+34u3I^!(N2cPOU{9xrK*ZC@nqvw&y^9+&iFss z7t;7oz~@$K598;mt{{`*r`jz^n*H-)NxSEg5Fd_|IL9~F zuW+5%GexY3Bc)9DWJCS#!!x3HKJJ^A#K|-Blzp_oJBfgKo35{a9`Rt)|AMP>pZBI{ z%}-mwvgu9lx$Q@|CRei5+FJBAJY!bdlb{u}Qzb!0TYTlIbFR++e!lB>`L$_Esn7eh zzxU~M-#N4IwMx9t-nxBnUuf&QyKZ}ODQVu5YhV8;B_FsvW$&AefM=D(Ki4#d+ssVz z`gZKAU{=2GZm$CWrCz_P-^GMGJbUDO>`C#Pid8ig3D-nFhdfW0pLnQ6w4tVg!Ek1@ z>&mmd6Et_O+kS-WgoxLsn;Cuj4!--AMK~P~b`2FcF)ikA zzesb=!S%PS4}ZKV_WpSD=UgU+nNki$OPF4^?tOXNb7wZY%Jf6;LvCGdN`7B+xT62b zlWeC2d!Hq3G~8N#>s43hEFQOnJ?7@M){JGM!Kb#j%$R4V8EIuDcjQWI;TO$kt>0_x zWBL5v-7t^a@A2S<`MgIOzMp4>7Th&1Wc?qf`tHA(<~_U3TzYDeR$t>(-_2g1Gk2Ec zo0E3!37i+C7K+MvKNozFxiG}5(BMUGzt)c{9V-ta;@e1WsCpDFJHD;eczmL&!48UYb!o2Uo0vRr~c+;Mm$TFRTSgS z`N}*$?p?mfrSZ4xl1{x}p>{9Rq2N1SiyLZ|M!xgi88nMGU$uieb?-*WaQj{UAnbq?jP)$A@P zX3iC~vrGl!{h#>qnI$&|iaksY5_@R0PFE=-Ft@wl=@Q*T>f3b>EnlX?BtOG8^2j-p zzx|)tf`Y_8YQO(bvu~^Gj-X3o4=3NwZ)Ga_y>^1op+*D`e{M(qUb@sOyZrS6yX>6T9&^949r71nx%u1lud6nHTkTeQ?f3P>S zy}0(8-37kWv!f=g$WsVD8JBpoJuvYmdr;y{(FVTL(i$A6-!Zw%PBT|y0SQg!JN-_} z1H}D&E~`CNelpi->B%=kb|3z9Or#|>-p^WRcg^b!Z-OpEj0k0top$%?WGkKBR?826 zI@Tf>-kLgJU36Nlg6OnZ_XUSPu^nRE>^eXHxR%1_)R<{Me$G@>W-9yj|J46K_B!tb zo^fF=pfDzG0fniBkul221HG|tPw86o{@cI)(O$;mb*j0JEd4wFuFd(t__br_WQd&*>7FGe*eGMx9j)4jJH_!vHkzQx3}Z> z{aagaqs4pcb9|j>bk~~y?LU_O|MRmy{&W1l-~IXf|0VzUb^L$I+>oH`c;6RE3fGSQ zvkSYve~Fvn-hW@_8BD!%>PPnTg8%!Q^UVIcn*Dxye0zMo_^lsbAHTo<=yma~oB*$! zc>8}}-?|Ltr<~c5VpS+gXc6jOvnYoht_*@iL%j^(1 zWpuTw;Qh&|sX~qHH$UwZ`gHeo;H%G1GPHik*PZ#jVAiK+b{+HPEjnP#Q{v+1zvvTp zTu03Wjqj5=rs}_xy!J)m(Bn=|J7cjMeD5=+y`6C4Mb*T&9rJA@WA$}hG=I5#X)F9( zD${qv$~N3-_JO3BqBZ_XQ!0F?TfKQ2(pvcJxtHYw)wk}?Zp`a>>?<~R<-!Jzx`WNovut^hRne!UzV6@krzhM^v>T5UYqkHm{>aNF{pPx7lPvY=z@iJ3LQ0Y{b==bj8*K55mB^eMs|dpZI;)0TF){8iXk z`mR@qRp9dMS=wiuUJ6vtxw~2Wk#UjlzGWhvH>HGTzCDtDK-OJW!`CcZ^LP8DSrR@a z`%eT;KfB^r`JNI^0sHkTpUkumE({Q0{1SJ^S#hJ-N|*nAr!UH>mc-BY@Zk#mutws; zgc(!x-d&w);mI;dL~o~!XMw%|`!?qH&Wn6yJ1>ZFWm#TQkL+?y4bw`eOF(rTRZOtj2(w4VWd7_N0=>L!irg?c`zxrHqDxIEAUCXjV#l9pd%ia6I z(K8!67`si&;{Aj^bVPfuD}6N0bcw#5f6^hRQ+Ka3876LQmOktqCpt5&B$>CCU+&HY__& zgx0NV>EznjrMQ&6*U>ylBtGGllF=_|DV;CcM9n^bek^d;#jv8qr6X^V#(nPH zZ&PnReath_F^1{1!xXlAEJr>6OlfE|Pdfdi|LoMK4ylF9G%L#GgWibGy0t21lEv%R zW#4Xh9;{xta&4R%=eFqVtN(WyeG2&Jq%wmg(ujNFvM*7E{I0^Lwrm&FL?$0H^13_S zVd{#%E-}@OtIf7@P3H^To)Ijb{u+9&J)KCn?Eg@q0*A2zU$_y$xhqLp5<(xH7W9-NQ^IY z;cA!L8-K{Fr?sDT(s-}de(6D&7j)04`dy&W^?pX|K5v0(XPoX&?9lOM zo9xnB{xfs7Qq!gtAM}2Nt@AJtbE;m~vhz$QWApk4%*oU0aD^GmTJEKe6XA*OrXxg?zDnb#{E+idbj2Al8qPFp;OW%^bQ1LmupM^|i- zShQL*)I>Gt)A{hG=iE>7_WRW|CS=8Ms>B`rf1>qKxzK-xkGIY{?Ai8MkF8U1zR3NF zPLE#9Y2eTfE|N`}+u6J=I6yb^xsmF{vZnr*ZZW^7iZIOS{L+1*VdYYbazWML?_qDk zPE9^>W$)GssrlM7mDI9luD5wQCBQE#Xz{;0ddiFP-fv^RzC!h_#l^E>K1>3AJvtLt zu5dlQU6c9c&qI03xTc6a{Pz6gtW#6w#q_>;on#6|9?c=+CSB_m!S4s$cRl zZSD`_cXKXXo7?GeUgVW;%I;%F9-TLv)XFh=mgkvcUk;m3{P-eLx32P2%HItYUtYFP zpV}k8?^nE-l21REMdw}yf3=INUIx~EN)b8|YU@*d>ZD4?>}Ow+KDk~nSw8*c&bcR# zo!Y1{vGmA8A7j1UGv&7aNi*N_Bg^72$Njl?+a8`dX*>1d+KDGpk~iPV{B5HrK|yH z-niw?->F_!QAzQ}nEWy2SzonW z6jrcL((Dk5&_DAh>(=I}&xA9>bPlaGS*yRqhj}7ry2aj`eEWSbe{6dpu5#&__!Ob8 z1-)Xg-pH?Qd82x4xv|Mv!ABul2V0F-8eeR<@bJ(=zrKCb?$p>Xuho^g@ps3?Ye7*( z_IX>jet8ftJSkyL@h5$mK)Wao1@AKktAtASXlSUtHJsr6A%=7Rx~$o)uV;H$^9Z%Y z-}t4ZCBPYO#H;s{eR+Ebw z=gidY605VP@0cKw&t^E2Pe`!hV7i6=IzKOEV|xSHv$OXXkh@S}?Y z4mNE6$K!G9o44!Pin$lkZa>|!W$T4)N7dcl8qf5|y8maM$y>|AXKFwHw)Na#(D%dL zI&8uT2M6DfqZc=A%1Q5d@|x%3>}gZYc7MyfeOUD9!o3DJ>(m^DL)F!Gw{~i0b|r25 zW-W9*=b8_%UXjy-GJl~9+g566hRoY(b!*$kr3++@gw@}vGi>R$IriL3ZQ*iDF6R~j z$Jw(BtgS6dR3*P#?K9bCaeJlR**^=F)e9F?KI8w+KF4HsC{s@Qf-9y|ADr+Mp6`)j z9nGTDGACA7B7iG=Q^o77lZAW{x8u|NE-UZaw3zR4d09!lPGv*Q6V8v<=E}x){A+O8 zG*{8dWzpS`&C@f^SAi7Pqp~!v5HOUc)W8Ea0b~_#4UR*+&j1?uk>D z>pQY~S*hl(Rf|^W%$z#mA2T`?lBI-k@`3 zT=%`%_Zgm_WqN+rpZwFa(pc*gc86_Y=d$Hyl5u^{I_0E~c?W}3`h1VV%B(kW_k&Es z1!_e#vdW*?bSg7`On&R5@#eYoFH_bcVaHGAo%d^mub)u#{gl$Rp=tl`jF=srKDy>! zOU@g=+SQTsX?kCP_HXS@vm=%VcCBe)J^!%1p-?!(qoMAbw1xJ>BT;Xey-S|6y>B)6 zBU~z=&RsK`rBL*=rE|yZ7wKvdmfvDi%G96dD@Cj9pY+*$V(#*NT~D|L-8Pi7)!%$~ zSMl7eKTavfVpg~8^hh}tQ<_kwqANDf=g!JRJ%O1L@82zt3p1MfW%aK8A5wm;T>qd% z(dq5(=HT?*))u7_`;?jy;%BNaSeDR7eUe`D0on?5tdMK01CPCHPZ+#9f zh!@RlUw$uc?ak_=XQDDywcgoYNHF{|aq2DZVwP^>88<#pDdjV|^5_;fub8sXOpAc# zqmqR>E^24v&tH3!YW_y#T97uc&Tf0rv!B#sIBsvZ-0w8KReAFM>sIVh+{WD6A5(g- zUTxI*ky4gsz5KSxK1QX_xkANCy_`&@PgKsW+v09v`FrJeDTAn`AAcLN?3%qmTq(w* z+fn4k-aX25-mKg`>55DJi77FGeJ=GL`y4M;O!E5p-r?f6>o+Iu-rnLGqR{H~ugq6l z|L*sF$)~Og%)FK=nC4!dF>Ar>8K;9{R0Y24eCuAly67~+>w7n|g-gs`6x1)ZT?wes zcZ+(r^5XQ#=a#WKw=~;QC zFYf5{IkE2MSxbf;Yf?5O)NK8x=hCrKOrlVDruniwiH*-Q8wJfL9&Ea``PTfNXo-t) zho_wOIwAa8+WhjLH?1eRJbtkYp3s~pJiX80w)8xn$A5YKw{87C%O`dp-{CVAy@AX*^SSu*L?eywB_x&WufWTS1tSgrAqGIyJON#KjFU3o3AGB*>4pz{qBdW zlC`X=N8g;<^kTN>oLc#%mg$C<{{5Bpb=`b1dp)zNwp!-DzgL$OcQC3nNZwoIJpCcF ze~B&I7W1~`5TQ;UoyV`|%C~>4+WYyjz{@|;KOTJOKDS@A;D=h@wLni5qlYWlCJNSC zE@GLx+(bL^%j)2*yoV)w7GE~KyInx>@lPr5JM-uM=)NBD=$?GQPPvbT+k|yjc%-;E zbS?Axw7+kwclXJ?<&O>LSQfshnY+SkzHs}wo2I!>PZgALXzborv~jiHW8FEw4!ZUh zo@&zLQhry_tNL!cbV0J8%)4GL^;%<&IkIkxeo6Q_DKU#~a#-MTb+1mB*CItD{~IT+ zA3XjyWU>8qZMnl@?1D3LqUBw_nVvCw_DziIv&gep$FyAw7V0?aSD+dWbam(^-5 zW$^D1s`|Glmha=|vdS+)56aRe`EBbq-FZkR_Fs#*M5WiSC>4R36JmD%S@|Pa1RQ`e4nfv^{E?Hdf z*4VEpy617kJ&9ngyX7P8)S7sjR6F&HLrIc3QYWzS3`DwzpqjJlix$(&oYSd@dcEnJ?e$*38{Mx9v@_ z)j`2aFCKY+DD7ad+;=a!(B;6d*-XX@EA!hQ?W>=AATj1(tls(c#M@3$sQDfctj`8;#aw3{{4w(KfSI{Efz-}aCRC$4lJ%a;h5pt|T% z9kXBiiBGxmSFT*QKNj+6lfbe!qT5iv|?RQ8! zZ-VUpWtYD@MOp9O#^&SBTEq}2#rR@{effp_&%qpDuTFi};qZL>#C)5{VR5l9`wo=W z&HmJWH^kSfS?6P=`&q_0N2k3lJ8e9p+Hfsz!tLsvHqATjML9$IZhUHgJB@FH?c>P8 z?B821eSNazaK+AfbMCyp^J6c|p1o|_SDiCdjc2*#Dqy7SpY?)$ur2bGv6_v{loTN=$CDRlN+S^1*MdL7T%?GsOYoB7)0 z1VaY5pj&d3#|+!M+!HgEc3N!|pJyPo`g+G4PCn=Lx9Z~Qho1NU zJ8&+z%`N3Pp<3hdL9;t&cD(+5eag3->^Xwz%t!wP6m8SFX?f_i<=j?|>cj8vdlp6P zs#nicG!i`WHKzKkup@#%}6 zrOofh)7KkcWZeJj@pmD4U)f@H`i8MPW>1Wz+#>zmvi}elTnP7Pk-O>rkc~% zw+^Sr|Gp>RSDuho^JLAE$8E-TQDKK{HmB7+_t&*bx}NQ^b zvvfskehzoX_4A&(yJxoKR(*Z^-q%94)?K>ujJ3h9*}(!!Z^Y!xdC&S*)Gxl#@;>*j z&UXf{{Xd=m&)Bpz*d5C_xH)m-;D)BgW@ab@;cIK(o-*B;_w@h1u6>O*n)SC0czpOQ zpMP&*-q|pLg-yt#=)XZ++0?gtLoU@BUp6s0n`gVt>tD>YEl=w9|FW-t{A<70=l%aL z@BjNve*eSiZ~pvvX#fA`_WD16?|*#k@9F&QU;qBXx4X3d9r)W<|L>vx{`3EToUi}; zHvfOo-+$}>U%mZN^T?0t(x2t!OM8y}OWo2JU*mhu-hMClFOkP0c|UK}*Dl=rQ-1H} z{l8!5*Z+R5_qy)?>-~S8%{!kdSs(l8ef{6<_x~L){rSVb{{QR$H~-&`{i=Q?#;zqu zRq=XV);sy1iXk2+uFHqpOLx_~8!i0%Hhz(=kRQJdO9WJs~G?EIXoLxzbj6;k)Ze2M2suPz~6S`TBny~Gj8cC{!bU``uTiU z)L(&JOy{S)K0fu4eW_URs(&ii?RI;wDSmf%w4w07?f{jTfx=H?#^ z+w=8Z*XgwKf3NOt6wrQm_v_=|zkcUvZVdSKQT(KZ<;S3+`Bk5zJ}g{)h3Td5<+I2C z6_(~n?z(sK|CA4wx7XQk_IbDWEbHQ1x6{8DKXs8;Z@J~aXVrH5byN0zjsKSOYWJ`H z|5{i6czgeU9jp;^_rcU>oNw6@1&tIJ%R+hCs6SbUob(>PAEi@JQt)^i0c(Q8T%K6D>XJ)xyUpqI(q+R9L zy;$y}TT;HBn%@>Tv_^cai+fUa zbF$_)ZI9loH^q+kJf7BK_etQrP=?dbf2sGx9f?Q{oyyQH+{bpyWZ12!NhraC4cwb=of77&(4ev z?y9Yk&KJvRtc(1r7#{s`%CD7&cC-3^oU(hSl77OwbtS@guE&*HEv@={Z`oF!V{N5+L zE@{4Pt^423*7v{Hl<$9QqUf?(@B3oCFS|G1jeULh>WzDBN85BxW(FVontRGup^(Ec zWvAFJi~rq?nXw>x&-X8v z&!0~!7yrH1v@iE!z@GPxE0^itRXx!1>1J$>e#R=*{B>gUANxO<#xn1XyHxoxsn9(f zADbTKua@1l^haty)c)I5@6RliESNg)dv5L8FWF!GQxpq#9uKwJk#+8L!|IaGbMMZ5 ze;47w(04&UP|v+MlPxBDj`y}lf)}0^D|7TT8u({rlsVVV+rg>E)687zZ?N$FmxV3Q z-(GmJPCl%(sdKS)*q(gNye7_CZ_eC@EVUtzp2{Cts4cgim9gaL;@8)&ajNlk8_#&L zeb$6GzNS?Po!T?m-v4&FA5v>7p7v(@ta}rT!()5irrS8ovMT)(7qjGD#^U$gp4(JD z_}s^w+=ia$!c&tM5`+b?oe@kUGw`$i*?z(0e-nm88h~w1>Yb&dTN8ZYL zXkO&}+BRj@`7M%@41a6>du+U(dEeddwyN=47768kS@~YGueIgT#`@SL$vy{!&NR(> z!)x`GyTJS4y#>Mhn|@4t<2k)x=h=B-I|U9cozrjlZr!7xbJyJ)n;!Z9Q=6jy|B_H| zY+3E4&|=9abtx?V?28U?*4;h%RdSxS(7Ba2jcvYXXM8Q;6@9RFzV_OWrc*@UU%w!* zsW$Bi-}K9_?%MI2irY_%b9cV`Wx7Q^^&6|o^nE;8n^UunhMLY;t*|}sgV3av7aPj=Kf3LiI9GO8emXa2z$L=~-r`d_3y=8isXN3XCd9YEZoS+B5tHa0 zb%#O}k60Z%SbTW4?h%KT?{)bDxNiN}Q768#c5WR9X8@D_h2F+(oN;>{-frGqt{?Dw zQE+qgG1uKo>kf&C35DN&$hzw6o4ks~KNYJlvfubFyllgSf~GHbpPnj~Th08&Szb&` z$nIi59)G{xK0B+M(ue;v=0$kS$ox5(r+1tE%Ye?cQ>;09K1VITz1wD=wDaP(ewUUX zc<5(zY{}x;SDtOn+wLOm_~QD-)ne82SgudJ{pIe9uJVM-yS3+w2^1XO|5ByFyWOGD ze7XH*0h?ge+g-=|gw|d2NoI4A*f8P8E|&8l8_kzbcsO&>+VGNahImg8rRn!#m&*2- zf4q>dw6rQ;uess4fY_tIlJgX9${uF1;1SN<`(|l>fyA~PY2#nL)3!hAVffH;P?ys` zpym16%3`r2jJ}oOsWq3y3+B%~8dl>Fe9vH~^@4K;b_+-ES^waGlT+ay{}PS_y_Gkn z8T*9Wd|jQ!yQlr*QqdKYTU*?Z>ZZ@gJM+YvW0szd^NRHkCQP<1)6^@UxX|K`p3awN zWt>Ot_=1?~zQ#*6Wgolg)|9MPS$)`N>0`0$U3Vi}nO9d7i?}9`o7!gh+wXnxvf?-XI$Lb=e+8YqYQN5))?1QKRPo3To&#SV z^)|c-`IUF^(sa{%>lfJXyBYq=?rz@vS$U@}edj9QpPU=~?`QY}-%CBWqVAt~W)x@C zm(2E%;YW@ui&dV(BJ*O4u1RLXbK(;-cU|HuSI+Z17CLR;?O^Xk)<>d`3Mv+FIkHZ~ zqHEtPk@$Un2iESmo3Jausr+O2+@NV<;ueO-r@xb!Htj9jW%eC;<}>ca-p$*f`{jGj z$xS()Nt^7rqj;V%{LXF_c@^J2<3f===Zg626Yu)}pOx{t<@YTf7Mm!ckJTKXPMd_b zn4i?0v4neR_Q55&Ol8dv*U1KL-M?=Bp_Nzsg*oP2DSz;KcfeF#PV29-JC3+~?!248 z@v-RO&G_q9yJkAJwhR20{uNTma8K;f@BP&mJr8X%pKGx~pwInd=^G7BX{}Y#ZZFzP z=LEL?nk4m4MNvh@OZ&@(AG_)jt0%17wS?icT*|8Qa0aVrWA)e<+c&cNytKO7H!WFv z8>azxi$L-n=G`yFj{m)XF-?EMk*V(sP8{~>X?Sov@9e#Ki1yh{#;!y=(_a7 zhTdo)1I;7xFZ8ZVf45_)-E$dk&i0^Jch7F{JnYx;rFiQtCx@Tg>x1N{UdrDVzCrvn z$D?FLL!A!ky^ag=3M~v>y?ahIh$#DtJ`8weuDq?`i%;pEtN-^`Zc;fjB`ha;S%ZiD z=NL~xgU)v>PK!C_Kbp=R*2R&eW8#0K-aKZ8-K@p8`Ook%RVHp?^a`J|jd5Yn&2yfA zAOF$}%QIhoFUVCOd9(SwE6;=M&vaW(fAGL-`|RM@y#)oaIx33k|L(=^yX9TpGwA{M z-o2};$`359@lGrex0DciN}opmi2Wn0r@8k6U?vg|qf z+jVg_Py9Nrnr9^v_p0h0m%6&fbg1o4%)B_o*=g$T!k~-CF8t(O)|Ixw_``;bW{wp< z81^jURTBE@G^;RZ*Q1Tfm!T-lKpl%YNJp>3R(`ieu?Zzz8}7GAy8=S|tgti&xnjA@GVSogi% zaO&<{j?c_5QWU>2DgN$SwqwW5-ER+QZ`mueBFFl4NHpJzY3mdGmN%S8%=2XE+_C8x z&(Vnsr=FU=zWMdmiGD)66mR!NJ?fYvXiyP*Zq6g+1cP50uT7Y|lYc8+aXb{dXsv~V z!gdvd=M0T&gp>VL{#=bX6WI`=_q==Mr4RQ_Z#{RJai7Ef?9nYxPdw53w!PP7orm>| zGZ$a6t=M|&e%p)74>Bqwy$;$(H`Q)%sVIMxdj7-26GwG9_q59BDjwN(Wa^!zIj>t} z)=JG;8|->PWBZXETNJNMZf|{i<=4@7yY^THv+X(Ex=iLUi_P2H%WI3?o}77!m!Tv) zkAM0-p$oD97L~r3zVY_KtgZMUVUB}&Gsv+4@_s-nSe&UXjb?wMY^%UByu#_W%|siipSrx%tbYLl;XN(t;d=5*+A`w7#0|E9*ecYjP`^Osy*s{i|(gMIIJ zS+`D)HM^T%mP9KRygl`;glWS{9TmN;3}zF})%RVAvwq|!US$2qPkj?Z*3RaaAxD#M z2$oyPvk1LT;&`?}A>OM*-BRmU>Y32=`dIsjS3XwPzwZ>>cfx57Ti=JHPr7SwxTaj& znxg+e@NvcRo|h)Ff4@`)9s81)X?@ZAI_HIBuGQu~e=pq<-Fm+H$$_sQd^zlx6pw7r z4e-9RPo$JpevM%Jgbu5iHG;d2@?Ybqy`*|%UFS530)?`*Ce@dgGU+^glj!*&K5U<* z!IN8S1b^vx{JrvFvcRDqyV`h6s~68+B3Q!o+0ER+bN8g5g_BJV$xXR)zUNJ_(e#5V zy$=riS#%X_-~VQ@jq=8IQ}nBtcV6hJX4TtzA*Jf08te5};)*Ff7q3RFnDW~H>9i%* zC-=Wlx#Q_ks=VWqcizl3YRS8@k4{cCeSLnXsQ3qc^t-7+US*;XNv7cuKePWA4YL*86fEH>MrqdL?YEl$UKJ_i8gkWn6jFEIS>A zX&pCj9u~4S$m@P4#s2#UuW#@AZthu9R*803_1$G}s2BYyx^i^Sf|ZG9=JJ$nabaM1 zBfPfG@@QN2@ynWOh5_3v7GHKy5T9^$!vvLS5tVVjHt;McQLS!pH;Q_WxueElu zn~|(|G4`+M(bwIN4xPMyVB-mE+1)bhrY>G~-`RMX*SBXSr}CDrcscuh$Jx{0#LSXD ztMOg?eoy95bMseAgFg;BU%dBlRl2rR9@O2=@nVydg*k)!k12xYpH|#}mX}dE#l9#h&hqK?d_ls4JMbAEQ`$eAnWJ$LC6D+6VqnhH=itfHFld793>AS4l z{Ety9kKPUivpYe$1~>P;e!il^!f?s^cx5r$;ulZUm1eS({`yhHBHb!=hSN?{CgMfw z;f1j)XH8BhvIx1&G(+R^-o%In?{2T37&zs6YPA2Ctkaqc&o>t6EUAp#AgC(d?(KHSc!*dim1i!%E*x47D}v?am9{rMO*8I(u2&@kF=j z`4@bB+da$DHTpi+Ou8$1IB0W@=dsSl*$TIluP^-Vf9~qNLyMfZTnzO&%Fdwib+a|! zd71Lxzh5nv5}r5d`K#q@myYj9TG{vRUdJx=iFYr~-Lb9t)T~yQ7h(JV`dvS&cx2wB zw=9M_eHYdSyh*LIaQw2_w2xbQt4eW=L#u=CUPgwSa}{32nbhv$44SXC)nwMpn%wf* zhMlT~zrS**Kkl7stNJi4^nyFzxhb`kY-4;7G&@i7@RWj;8z=0!x&8UO z)qbZ#P8F{W{r(|jdbNA}-j%vR1+f__cYT)k8-aVjVmtZE$4ROO}C9zNV|0M zF_Y%4BUZ5ryB@W3yYRZ$#wtXgC}@0fS5{A8@9x8_i|X#aWZHN+{K)lAiS=)p0+p@! z#XEi#9uNxWyceda^Uk!kt9--93eGP%leQQse35*2xlDM4vCKK%o0AqaM~kHW;&D&8 z=9{?e{0G6ArovlzjJN(>xB47o%8nGVNsi$Qj+C99Q>1L9En3{vKSO)cL=Pr~g{-@c zQ!LN2aNK1$tf_eA8Mmbwcb;bjXVAW4BR)_hp{2B*2%MC#mUFv<&ydgH_LFzqWFnAksBWLa{=9w{T$O zZnla0^!lY-+AgefTq0ewWZfB;O6S4}d>bY>a8zDg_p-SBf&9fu3D@rNU;A}kQB!f& z~6Zcgwl%bN9Nnv>vxuRdM8flZH$$T!$cQb{^1?z=3rkrT< z{KhI0Q*kcz_KXMjzD=&b`(oYvM1F;fZ(CLtF$aE%XwspiW~KCGC4_EF`BLGWw`qBYl8TmgL7x;KPl|qC#zQ# z*XI7uYwL31EN;{Cix)ao#FsSuKL3t|si&L$%mvOA#_~Bc?g=q91SutR{mNwto|?or zSKqqN?K-FV{O;+pvl-TZn>hWh^u_2o=jT=N1xN3>)PBMH>~;1jFDn(AADy-?ZeV|Z zpf~TzOvyi9BG<*eCBDR-oqbG(F?EsZL2dT!KE}NF%9qW5C95mu_=MM-lbh2&u=>*_ z-o1`b=4Rx6@=dPjQcK=q$0<-!Hn~+YK3qKVhT@Tv4sTu6InUfHNlMFA3F};+yq@Pl z_3D#ziWjp4DjZdPrsY3r|Hasd$nU?dHwyjn`*fYXV#nln5&nC3vsk!F&t*ufJbvqi z)!QS|hgoK@I(htAO#-&RsA6bY%mV zj`i(Fsj1JUt*%a;n;%gV;MT6s%yTNkeYIafQ@jH6;;%;*M)SoaOg$F<mI9?oYeBAtbw&EPsBVRm}W7R}{YuQ~&&1>20 z`{B^OvUJgxx9{j2sj`gzxGkvSOR|0f$`zU#HgPGDtt>vAO6Kbwj zOjQ?q^?Bvd>%Mo|(p-CkZJ2&+oAAI{`e5bbg)3JqoZS32;ok8sDT!AHKAS#1*EdZ< zk7?G~9h(;&b8UM2U|EY^R)^*dzC8j-?_)mc>+TKl-*s|nx0J-IqUt*iuD#B(^EP}q z>Qh?iEp9q*bMpc9-uoA%k4|2;e#HvMZOSY1mYtSyQaYRd^va97mD_hL?R_T@YCbpS z*LB%>26z41)z4&b28QdXFoaeKrS-K*u;%*TP*kbdHE~XmUHIG+t2DJgy3E(ur!!0c zFw^bWW%?@)$1dZ)`#@txfaiO?7;Rps_|o>>KIUl$o<8ro7Zbqf7(Ti3^$S0h7Ys!g zj08;Xb{~2zkaR;*ymh+Wz7NyyZm+IwQ|?@Tj=}8k1BH9D7;}E9a5PtRtF7B+6`g%R^L zm0R+SL|$uWwS4HD#?pT~N#ojnJ;morA2$g%WQn$4J^oIEZ*{(S^P2^&S$Yp13e5JC z`TP38>s^cY@F^bb_^@d5n!{g~O?HU=S@`J1bBRmEdFp+3p#kew9{qB3#scfIhrxwy zjwkl)JpKAbwPTj{iZ?&3_U+cJVEiSM$QW{FN%$hv!J->ylgZ(iBm zvYPwiw93uK^^Iv&Gq1`niMXN^!7dmZ=a{N6$}7S*rRWa`Oa_xlTS$Y%X6(O5{6v z;k&EXbTK7nI~RBPHFx9%t%-D!E%E6xt+nG_)b?`GB~kesJ*_II zWfZ37FPrP8@%W6R)vn|UsngCO3(kL>Xgzg>b)t{MU(b*N4$f`w#OE%_f9tCLQ2cIX z;IR#F_N;LBs5l~~-LOvhPMW#-oP8GVjCZ6BR+Vwpx$?dG9n2vex@xmRORv^+0ee+G zxwe@x`89XXZMfxB(=8#8*TyQRR>564=WFqoM9G+v&2@eI1l&GN5vW?ZMPy&DL~}~D z+h@sRYrb+io3QP8s-7Qrom1y_`Mo{+may5(=G^Y)t(canE>?%~#Le*TnyP*1{iYTQ8SSb&Lql2%oq!N_*jH zgJ}}T)&<|15p-QM-zRfJRF2Qe z?OU={WOWN)uG(d|^qfFYpz_Mf>NinQ0%7Ux2U5D;72EB7xIL=bw#>NU(#0E{J|+SU z?KypO`EP5km>ih1Xs@%!5jVX>dz}jdCuN438STp}j+eNb`;PlCOZRUl`S|`x(UVo~ zY&ft?+Wd(-Nm~}Qy zQ2DmnUsZFlwZbXSNsIbrl62P3dULj5+Ed-5*E08LtGx1SIQmy=f$^lCO?!^U?eCbc z(^}^9@C-{tkLr!&b{DUUlM-&dP&o1V-tS3&$|m=|kp9BZZG7GDel>f<9>=YIFB!@{ zpP8+g%(?yH&a6U}ZI;(&7fNm9gnNG+QL4YbV92KdyTJE&PP`S45kp9v1>ij7tiH$M3xb1H*d&+jaFqrE4L zW#jQKKGQFH+EyX=Ie-1Uvi;XL*NdV!ne`wB`vE-TeybEU+ z{JU|%SN#o#M!t38rFVV~+o#H;Y0L{Nn(^`Pho&0wRrz zhfYf0mt;|l{djU>U5R>4;y=Y8^Qc2d%hXOtb~R5kVwVzYoE*SBz2(UDr=s6h882b* zzH2yt*TIJ@g_<*ki(PEE6b~wWGT8Jw>-;I-a3l3o9bF|?x1{XYmK^$b+rgZ=-#%A$ zQ+Hg6P@UQNZPBETav%NsY91`%f%lwW9E~iyykEwtXUPK{VW&H?CtBWpi2VDQE8@sx zWA}2EnX&&)UvFftf2Q+Fo7FRIsaU#RQ{bd&tw*kkPfobD?$TQmql+y9@yBh2q>bPD zHf?6^>^*ziiuc*6Kd#GntV(#f`TGJX^Ae`g+Q)wojf`dKorq0u`r-xn%Tf-{m@RuVz-E1o zxbw#*Z|SXHzTJp<{2@(BZ2gWcqPrDUs+Td)ki5sn?bz9r7M#}H}D0i0kr2Fen+y)e`~c!!u} zlik6CM{Df2yjskp_pG}$CH3@|EA1DjJ093rezTb2PDWo!O5pS#dtSZzCif?^^*h(T z%(sW89ov3THSlFbVuSdH1?HXed8?cItA*^P#a497-V!);dA)$p&#$l97Rr}4r&PxA zeUVMw|LWD{PZd{1x7F}vpKt&A@zm;K*$anOFFRq<)dxY}Mu#-}qEze}0MF4Xjb<+)4aYgg5u^L{UybfVzHYsIMW z%#^e7)Av4BamnUT?5km9Km0_@K!ly$dBI+9o6O~3kL7G>c`*OS(=M|av$W$cvhd$j zio7fyEcMgj-PdzV^p>^!Ss=;3R9`LS;{AnwzuFsi@2rfQru6c0RR@dCLZ#@UlW{)B zo7dYZvHQ>5H^Xh&i4^$@;=%1neik(Wxkk)QE1+YW zUuofTN#y{+jYpjR%(*Kzv2mfrB!@q)V*ib%eZF&LGE3RK>d@wOeKy}$vBk<(z6_d^9!sW6SMV6%w|)gb!Mrn2}%RT=9Okq1v(I z5BKJ?naJ<`_`0GtxO4aF9S-MH7e7DvK-Zt6b9rKcWqXd+yNP9&?>zs})sxlkFlA>> zk4b0fk9#lp%y0eHTKAkILFi6+p{+Z^_34tI6H3IxMcte~ZqeUYRbCliQ`+5py1dQ! zMe(`mQ@0mzaDLdl>0$5s+c!TPzrOeAg^qVFhg_?&Zb{!&yx^9@%H*bNWL(QAulf1c z1{uxIyZoAycI`;gTRGQg{rVLR-Tj->D>}L(z2)QfC_I1iW}>v@=cL^U!OxDStyw=c zKy3ELeRb)_Y~B~^i|X!P6z^kjk8i(DQOFjbK5@%xK>_i?__tqMTCxM>UW?5S&0l3) zD%Fs)%+>a;0BwMktsUAr&+*_=0$cAs7~|KB3KU*qVOO=3OM zKArk{y`5F%^51oH-zGXP`K$9YsYZ5PU<$)JqbqSHlNe3%r8xDB?N6@y>YIM$=o-5j zkIjB8uHC|Gc_>|~cJ>L;`&TafdS$y}VSj$|(ejKl7w2|VIqp2{p(fz;_jQZF>y|1r z;{~qwb^0zy9GBWna8`UsdCrIRZkV`Bmku%T&`(_b)QP z`ftaZg+bd)x%juwvQx9v%QO9ZjzMnoF{k?%-g>Mm*s{=g*I9+_-dDpmuDKxkIQsWI zfqmSeH!p3UzNm4L(p#bZ&#pw-8Ju3Z^jC=g@@cOO?LNtEo1jt@chETWYy3PvU0XI) zlbe%196Rc&SIfaE()xw*|IflVonE&i7av>6v+4P5{>Ak&Mp9{S&Mcg?VlA`FEjxR^ z2D2;IcK$Wkb+EjlH?L9ofSdV2hd^WReXHui`S+aFJ=xP1de&pUpYq$r=t);?!nO8Z zoEty2xul!lMl9QOx$uXGy^Tw(4Bg!h^Ll>Gn6{^IwP3>L!qs`|3yLnzUGcMX!Tc|& z5e#?pS=R7>c-V7kaUEa!6uIU?i^V+&bKmv^Er0*ACrG!>YH`WjKV84BFF(a`g!7)< z?uobUEE!6Y`|f;`lq!C4vs}Dv^HJ3Z+_e?Iy(p%$R&waP_9Zvp6`L)|E z?ndM+ty}gu(4zJJdcDivm#v;JQ=0)=WVip{zxn@v-L`ov$XI^Wj=lc>`TBovc0V6)-#z`jn67orpRdvSpM&kBubf?=aX9u2>xWOJkK8>zsn`E2 z)7vtAy|8`Vzpv5y$E&8zKfXWn)SLVN%KtyNKPJU~!R6+*f1tYx-tSk8P*r?XxQqMO zqR#XGUw!&fpKL$l|3~w6v9+gvEU*6!TTo~^(LLeG!)NW~H_Dy)AC`5>8uS#L(^X+~ zu24F+Z9>nsa{H6K2Gv`>Owy>0f5@*G*lT=xTFRE%n!M-k-fuWge&swR)b+hLR+jTl z*#8d;XH0239?+qlwx^r#$kKYVMN{6d$*bLSY;XE9Z3!ojX|p`p+9zlvN6e3TJhoS zcJZ$!2G^&utExCUgRw_*<@qd8KF&S zXYx+YFx+*)FnQVqKAvAz$^Q~w-w{r$|55Jyjx$&)mJru{9OE3VD3jEnlDyqcj{X3^%nHrIAlhc1mJ3XIg!LMICB0N4h$8ItY ztYlrPz$WB^p@0=UG8`2;iY%sC5Qb!G?<7@63q19aP#J*g1iT*``MxkZL;|%Ep_%-@>QWR zsiJ7@v`4{4&#rjx@SK(7DfE5X?7P>E(khuA_*r-U(&4YYps6xP`oZUo`*|}@G=Agy zDAm8>$fY+oMFI{Nq)d>w%ev!~*4y|`bB-wQTD{HhpC_N;8k0pQ-0rn6wGhe$Q;+Im z`kr0ld2oH@!kNVh;c**xNn5Tsc<-PS+gyIm&UX_s1%+N7(R5N~-&z%&5%4_bq)FPI zfbfgq!5?D{jvA=N2xU%*Gkjx`QSB}$zFO5n&q!C};a!KFt*dW5_i||vIQbz~{aE|; zYcn1xM9y;AyxglPMe~n{*rVNimvXzb51Rexc%7tpjgx0p=XEvfu3N(HsXk4Pi>;HU z@kFalxx7P0mfa_VW!>E~>;}dE5|%xgapt2dL&R<)-D%Sq3>Hofu-WrMMd|tkm4|a` zWqPVKJHK-m`mOu-v3PH zH}&^k(0X8}cDOks_g=$KU7x3G7KQKic7E@;?Y3UE`UyGFZmy8f?z%4;*!TUx-ktl+a%;*wr#gFl zviiyTe|Flh*r1~#TAP;U7gjSj{j?PM-QV*3<*v`&e2SfyAI*&~;o!9Be*L|7{j6=9 z*#95uUH|1BTk@47;kydmJAK@hKZGe2yJ$u_eeDdgYGrYKAFTZOk5%5v#{Dm%y_wGy zdN1NT9o&D(;Ms$)72huKhOIOyKdE}8d?DkNq*KcdT2Fetck226$Gb0_;7U^5$IYv^ z;+g&O$t!+MlHaA^t*-K?#l_e)!C=WR@n2SM#o7;#8$DylYF%cb?2{5-;QeS9zulcD z_M+1n)BN{L{#g3pu&fQ+F&_SX-_33W_4YH%zU%3d=G}E? z_h#Rg&Q^`%7kqVd?un-dlS@o>892)BCiuxtwYcHEH@8tD;Lg2wI*Y!wZGX<05M{sS z?cSsxVG$k*$M+~s+_m)BCdG-0SMuV5Ucb)TIay!lXyMW%MNh5PDEXN^C&j;jrgmv%FsbnA4FTAudV*?yIKeonMrtxuU#PVCpLQJG-4;wAPsa zym01i62rbZ_TQ(-K251OHYfPuxg}?8RlZEpNH@;%oD%Gz+nH3ly`psOyD(3Y*O$en z-c?ljc+EMre4EOrb}==RUCiFH+Tk9pX}*z_P>78I_1liq^KH$3#{oM9T~UB%wC`AUd}UV!WZMck?!7$cvOqhSFJ5~)jKVkkhP+-Hfg|qLQc>$i?dFvD5nG zir*r4Euw|`bp9_0t6kpl^`X_~ee3LE(vMjR6fTvWYS~lFV8b@~^_dHteQQoiCA`?u z?KW?>`0n`)lhp5AQGdANqv6A6A4_?Z9A=(zQu5(?uUYb4ATa3VI=jrwDf3@VUM|4y zxmHMinr3(>|LG}DH3KtyVpj3rp0!b*_lVJrt39a(bNrn;^#5tFTfR8Qb2O0eQtY1N z8>G4QwDLS(u%th`{*Gvyf0g;jdKIFE_Je6IOl-o&!3 z8^sT4XifULNbgRp?43_jFZ}1~;<|OqswSj;!n?({oP?Bh<*!~8dMwz&>Q{bQY|>Wu zs`ATsOG?xq@c*&5yxnzt`Lbg-g$~bunD$ z(4ImKpNE^)3QuCrcUYEpZiUUGOVj_RB&bt&Zs{>QkT|VIX)Vn;P`tz2RCmQTk%BCf~p7NRh zthZo&`>d{u^@gfRcG+vT-Fm?1b8q%%p`)IAvcG+jH5JXAw`Xd|oHd!t@9~(etJ%Cv za&K?O{zKh;wZ1zPtm8^_Sj;ayXfw&NT=Z9JZmma-tRs9_&=~Z(Zw$FS0|6N~g z^vb(?P96*LWVqYg<|?t-ruCd)b@1`?@NA zdG>eaKHb>Dgq0_s=BzpM@bAg^cPxj03%~GFNDO-4*UEB>p=Y`dpq&vQw?e$^f4J%U@zDvhGFONT{>$x{8{->X- zeXGmC#c$njIx$UZd3qzlY11^pPm4U%3+4G2Jd_hW9_`U2y~&J6Jz6a1cLjdQ+vXwU;w{6*eZH0N;bdLUA>o4wB4XiZO zpWdovVzIGx0)u&B?AxoEOnQ^7jN89(iraMTi7`q);KA$nuvGBHJ^l?+_w|IY?r2uE zZqJbt@ANKTF*|Yl9{m@)F7VB|?R4KOQO2?4mycD`i!V>bUIo8Adc*IbY0=xRwDOO; z#Owmp8Jb?CEfr5@;<+B=eQ*wgao4((;-hCZc3pe(E=+0i$HGKs-qOV#9Sb&zGyL)3 zzi`3YTRP*7zwpg)}!y3U?kHtQVXCHPpDb6a{d%4xiSViUK zhS#yGcMODI@!RI{?p0+sIpiJp#QClF-g|TJPyeN=vL{S%>gk`m6uh`&{Vnb-oSbl0 zkGuEHySS{Q_7YCpD{kiT#xCDw*izNqtbFpW9CxYMl0e@%=G=Ll{Qvje2;ciKH>*Z8 z!KA7Ezr*uAD?Ys2ee`YTq}rJ8b+O9v*Z0QfYyK#GAFj{y*CzIR-PI|U+n(QBzs|>^ zW8LbT-mIq2fB)S)tJr*cUZd0X{D;b~KR+qDIJ?+<`|9~NDo2X9%QGif7%bN-nz2q_ zig&r+GSPF!+ZFC@yBPOT+w}S7;NY!(97~_M&K2-FTV$^|WmayLlZNTS*DV27TMscV zEb;4Mc6u3K?w~PuN#d2eB^R%~{J_7m@||${SqHUhsmmCx0KJnD2sT(!>W97MaboQ8Yw2HtEH9AonEBv>$`Y2!PzfGEpUG6Qg+F^ z3uj&Rd3AC59Cqymk3-eDB%kj7)|Yzb(*~~Su5gyRi4&e2ar5+zV#_}wm>2SHTU3^R zVBTRr;jGZ=zikIg<}AK>cST@GW+oRq=ZaZ*+uP1@GKwF1yYWIP)9xcn!Y+uPPMAL9 z3fHeq+=p8WREyuR{S$H$ski+wT|j8gjqW9m^Gh@?zS585P?G1ASa@LrM^KJSplG$R zi`}I){>e8q`!uwyOkD0rt=q4oQtP5|LFi@5!v|&+vt7!Wrr17BU-RzJDZxwp*Bh7a zSQ>6J)mYZP$Lmw@tD`p-vd`+;a)$MZ%pAt}Hoi)=ld9D(*is! z#FOuKC2Xs^YVV4*IkSu`TTDZvm$IB<5Suh_$=eKr6RHpXtoSyCIXKFvQ|&!>a8%|| zI}Yo3bqPFNQ1jm~+>z z4e9=ve|4V;k9^Rx&EZELe_hY}@brpB7lZCA)dkg0WhAI2zhKT(#eX=Yqf9(}@Q{HzzwU;Wz`Z{c#Gu+>-^h`*YxT1Vp z-@2~~9SVw!+Z+T6+rPei!*TNDyB1Eq8_Vir*J(@mt6y_CAjTb-yZXk`CjyU{3iitx z{CLM)@^j&WPVIKWW>9k0Qk!oI(=+pNPvj<^1|6VqDhl+%erPBC;{s z<6PT^H+=5iF?kO(lgiA#JXBMaZW(7yo_aX#;qtXC3stU}7A>T2$f&wB^D1X}Y0UYk_D6qs1jQHj z?t9Pj!GH6FC&i9a7<2s&EwrP9^;GSDXK`R)u}Chc-U{ zJU{Pa$AYQP_N*0d3JcPGwxqkFAXV{WL}SXdPk-|{*zCq@daG)?DBnW; zgby1!rm^fhrXs<*tM{Yp-X~|A)_N&sGo)hmRp2T-}Y0mGe z_Pbte?t1BCt`m!)rs_;Khm;&uNx_x3zB8WZ<#e%k3ffmFD~hy?9^d< zq9U*V;>^=a7`B}`5*NF?>89D`!qRB5Guvl}?7dlI;EbKY-pVeS$I}euq#Fj+v zCpI#*G)37@+#CCP)mm%+fBV-b-EBBLk6)qbe&X-wn-5q!xSE=({wK_nyH}>7EIFCA z`)JI}+T}u|NoBX*Z=N+cfJ0Pe6O&V(yV8v_1_mAO!#l-cHH0T zwA~x|TD2wfzZuot>bBnh*5KwJcHeKy?dyKuzJFJLe*NE%@Av=wYx$*mVaogZzaQiG z|D9XB^Y7pF_WwTr*Ju2_Y3Yk(UDX! zb>5AVxx!P!wfF5cmXioPwf@1Rdi7I18p4m~PP_3$bMhRomG6~5u0Q>yROM{>vHwRp zxD4aGx3xxg7T%wAHu&xO8>gnfjH(R{GK}`yyCcLo$Ackbz{-V3WeHN zOS-;!$l195e(mJ3{>f(DGY-E(ic>FFx=s0W+WL9!v4#Fijb#0MG>(TC?!A3kRLGIf z$N2x5&R^PvN(Y0NzO=dh%*n5JnX*Av`Sl|?Xm_lt~OuU4O|D0%u+ z`F8o7#m3+&(o{B`IoIaG9!NCKO_F086JKMMSs5*GW1j0F6n=y zqVwCWqcQPcR^JWT712>BG-YLp;Hpcpnjl{3h;OvplC*M0xI>H@A261TA{$ z)o=E=#98%y_fA9Mm7d}*Id_8=zRdcsl)q~s)8DUtM$oBIJ;txZ`RTWP1@qo6 za}f{We;Uj5PhLVWHelff-RCo_(%qAiW}kHTbAA~H@e0+CbxUr_NWXGEgDT~fnb~Osk?fhE%`;?-HIF zLK^d)%$@O3@WvvMpdBw(?LEjXvM#N<`EvWkTFI`J%&JX=WzzD%C+?^pXvU$@-b6+1ZcMGjrw z5p!|{=c6*!#mlPfu7p2yiCJCqMgRG8*_w_Wx5ZBOp9)^q-cg;hWd7B&zxA@X9vjEaMVVj{__i(nz+-a{)d!&5M zJs$decFw+-J(}+wzQvRq&eAzJ@lM@q$(QARF4HXJJ%8Axe7ia&_bXq@H&(|ZckOqr zD4xB2=Q-iZ*|s}Ux-=);6!%(T_IPFt$Mmyng-$H^Jg05oo9r*i7XZe7(M zvzj{UrN1okHIBZ{cxkdwklAwSyd?_1w7&~1mhr5xE8)KW@0`%~c_-fgJ|JXWn$%Jp z@5|e;TvE#3pH(o8`(E1YHT$&O9@%Aody?}z?bK{O$6axkr@uV0MEm6C!;uyfRT{;1 z+r~D_$Idul`M6i+_5nZHe-aYXhWBo)RGugFp-6DA`Eu!f%N}&jR6JS#sIyi!wx~aU zeVlD)&ziTlR|~1nfA&<{`ap}fms{AkH#tJ@L0(e|`4efz~%4=gryM z_>j5kdXB0FqujdH&$caI{XDdW`&&tg`_*qxH6-4}_I+bpR{T$Nn)BLqv7S$Sk45Fq zE2^nUEoBzp6s+|3$K1kq8eu(0I)2<+;{5J#$sx_=^=IC!{_xx1X2F^&)!WRcX6?x1 zf5CHDmeVTwmeJeI+cv+5P&Drs?0hNUv$}Zu>&vd6mcIJZws~92mX#`xYxV@YoE0mXNF_ia|O+3T>WWA9$UkF#@Id@Tj<+u8{R&ia0FW}mR4l2(U> zf2+%V3Ep_QTVKzWt9c0uxc<3n9z9L;;?tkoR&Kr`Q2+J)CJ}uB*^k#V_s^T?vS#uX z3;*cAr9k0)(NhtDg!Mab*(fT^O4_i$Z`=*SpB#3#yeZ~Y84h2<@*6|=FIZbx*TU1Wb1eNp{K>l4^om7zu2F=tE)Lvxi>;x z{g=$^FJ_OGukF0E-dOf~yN&0bF9}9+%#juMZmXaF5cGO?7x(rEbR1ada%hn)$-4IsjkYHB@Zi?q^*1Z!M=EFxT>pB3+u!J-G`M+lKM^dbfsi_ zo%&Kb_kH}s`ljXoTv<4DEbr%bhPznrf3xdK$Hx=-Vs=5!TRxv&=RNnylwB+RQuz18 zJm0NXtaRx^*qhf1lb0>I@aDBbwT0CiIpIX(6~Z%rzIU8mT$kW;|G2 zb$nX5i>BcFROZeDi3fB3{Cm1taYpRsTCq!xAAiLCT4iF9@u%R?CYL#zEPtDwkTs0> z{Y1BK+V&dD@~-B3v7F1D6?J>Gu0EM9=;3#y_L%mL6?HP2msXo^<2`bHqNEhFb-7UR zPN%etNJhg_=?iaNwl}VS_AuncjuUe{PISJx5cKn_cFdJ;iM!@o$UJos*x6myFiU*m z2i?PcouZ~WZ!<;j9!U^0O|YEPY1E+9?y)0-x%p&=3rC+%hXHfCEAR13wqH+a?)$8= zVHL+5-#y8J$=eE~qd&hd66#}$=`*?4-7Tf?)xa$M$(aNhJ@>q$^VUt=E6X)m`1^7J z!G|tFD>_fytnk#zlBsMt_v~S%U?H=_F*Wr^+2R6%Gy4v?9y$9vVB6va*=Y-ACt7m- zx^C`KUMIJ@%ybPq^BM0za-<|To0BiWzNO>{nhVn@DP?(7qaq|`&2bg^VRO4 zg1!#7DeskpCdNfAIK!e>a%;M5q)#qByZzI{2U9rv2qL}#DJG_Be>dzU`=b1k#|b&s;!?O=~@ zB_*Y*=O!o2S+_3gCZE{EHju;=&b%RZ~lw3_!J<<<{AF}tGsf*G+aoc)iNrp{Kk z>2u%Kypxw*MqiR=Tc5hhM3(8kp^PrqIhEL|98yC2ROW>3k5?@TbxbMU>lLG1*m>B@ z({yH0Q}*sS)h`o`5^QJQ)jeddwBGbvUN+;NYcV_ex<6=N3Y^jRdFyF|~njkE5ERb3T3 zA^v^Gw$R^fyF}u0)qEtCFK&F1UiHxR$XyRBv0|O0ax1@vul~Gk)h(u!Irr!G$RqxvN9(YEJaKp1U>dEkoB6e^y5ooyQxjbuoPd1w~Xt#>@FEGKW@-*@M;opPqQ;PxfncOPzZ zK2mJcP^PmnB$_2<^7BS;<(_ly;A9a&Fv?v<_P^Me!uE$MW6Pb<@2X^zMFR} z(K-xlamIDSB|z z^?Yu|r;|~SpL1@nalUWp6no2KX0)Nx--2_RCnu`38QRD-`MGdyux0t0a%#(t+s+r3 zx*T)=bSLFOeE4ha^B3l=W8QGHI^kMF!k)*T2XE_q-F7%**F1$wS6DB;pR=O-rb`Zs z+`iuxvw4%A@S=uLm0FkSKHM|~TZD-`kwY}}extY0Y@3LHr{<8>{Z#}_NxYwvu z*wi(nusXxce`e2{r<3F&KdoOpdF76T)eNUv3;KR+cbvLPH+ROWnpOUZZS#KY`groe zUoNGGmoDgKUbXX^?A>pjKyAy(tsZfBd08sAn0=ChNXseHqQ?);{RxlmDE#{MXCyV7|oVzh25u zUwk{YMn}nL;dI4ihu;YKiZ|o=3Mp4{A;65o2@_1a5TY~Cq+ zYcE+HE8%E5cInO6+$V}VMb18EdN^_F+-2{rb_A~5n)k`%&Wf3H%Q{-#`m2@1-do1F zx!8Zj%Np73e_uX0ImbgKWa+NS55Fj{Nn!bADfqlo%tAHKw9tQ(LY&;&&D%phxz}vl zE?cu?Lz1smnxI|KgKzBml9wJbUQ3(jx8mVMmW%C5a@Kuc1Zvw=9HqWaX@98aRLAq% zSw+#aba_vxsFc}VF+Y`t{Qj@;r4OQO*Zg1g_|2{4zu~f5Zpgjf|LVi>e-Zz!{14h* z`+rpUdv47XWzP~B$=RFT+Vws@+;%2Q{%XU8gA*n6(nA@W7>_Me5aP7VRF+=dx4C(v z<;7`i{sB`vx0$qf9!op7an@<3me`L-m|;>oN&YvBu1A}w6vMR%xf z*61*lmbnut^5ju;NUwv2X6R=h#%(8yl@1EM*&pM()#YNxt?Dg5?Gi=)vg|&j@oP~` zqDbv7?Vd&2`ZavJq;EPZ)bwrh_I{P*)yNXJUqjzZWZQ|aK~v^C*c=KCt`uJP@4%O! zXODlxMqQHVyu&HJGp=Yth~tKXc25PAS6-fUC6v$3;em^hhftZ^L`ClzWtZ<}0z z*JI=kUwyFBuI=?v;pr8%JlC_W&Q(m zk7I%T`L|Zy9{=O>A6)miqtHItz?nf@aC_ZDl{334e_iKQPrP>4xMR_M*H>Rc8C9~y zRvNQ;ncOzocHY58kNI-GSc~zImKM$LsquX3iuE_AANG6^|Ltjqk4V0}MuF-rqit7( zJT!ElPv5vUe3P=T;$^)VHoW0UlDA)(NlfJQQ#lh~uT!+wL-yXkv{tjZA4P7jyO3tk z$NnH-w&rpZxrVuW4`l9PXiw>8$ggke_$}?xxjJX_iB*Lu*Ut8^IM49tj6N@HxU}E7z5TKYM99cV1;x?~?R+uX^HVF1LCd{%ob5 z`kn`qwnm?2b-TOttH>Jf1s0!fyqzk2a;2^6?A#*h%Q?m=9h;`{wwOm`WqwyOTIL*6 zwoTH?Ws#Q7T$bOuH$42_o{#?U(9`DJwBv2ImpOZ^8)oM`WVxdJu=2n&4Mz9Kd;0vG z?24u{OZ!V(y&0CCTNJfRV`Ay7s?%ooE!bHmR?K!?D3m^bI_G=C%>o+_3g1gkQ%p)$ zQ3$Vo@l5T+iYwwjEfoS}O2w6~RXSz8GAsUS5)kt0bItdz@O!^z?6eYG)xy1q-?hH@ z+4F`IR$q4?+u(ZTiHFd_#w@izSx*nK)a~3jJ7&ht7e(Sf3l)8gx6J)rB=lhFcC|7g z4rB4yceD1sJt1DT^uV^cYgT+&@>5FrV&=u0Z%?m{Daq!1Z5t}DaqRiZ5PxRZe_HCl zLROZSZoTN*>9tpNSGnQGQ}$1y_uHsXI=|i1Z~MM?x0#oBRk{l*-1_{l*F&vaj-|P) z(mnFViB1>IE8m_h3lsfpcYw30EZ)~d#uQb}nmoWXSMfQ_!GoyyT zzdei+x8y9?tXTM@Y2EQi<-{%T+op>9D0&a&gZoak9SDI)r%j`;I z`280jzntpaakXvwJI>O5`}|aTnE2mrIveaG{b~)j@LYYT!izD}X2|{7xUNK5yu_)y zG}KXV#rGWc?)8U1FL}JY>wwE++a0%N3-4TTn?2yWtmc7pkFSQRZc|z=ti*6j^=noZ z#dU#zcx=e z=P;{hzWSX_tS1_UIWw37&ip&Q&E@Jvg$|d;&U+qh=smPM{XuT-H=V1de75>xGEvi? zGC28IY^l2_I{%4>k)%jX`R_&2Cl_q)TJPHOa#HP^MNvLN%7wFK_zO16ZO~h8^uXZh z=@MqX!)ImlJSXp*+qC`tRi^hfwl7xgPDof*oZR(OF*W4Fmz6O+PhL9joxv*|)c>Jz zX5Sr_-+@BuSA!*l9nO5dbv;<(<%&36-Bnx>%ag0hSFg}Yn0w~qakcA}O5BC}V^$j! z?`iyfv*S?0p5J#}_N_7~J|Htk;n#)v3Adlfq}2&tJx8uS>Sy-+Aw8FON^c+-CFZ zecSG=t|(j8Azo*(ymhYDrN<3>?@rcLcX+OCZIH4`E$elSqSUz-g2a`uj3CmUk3H%s!xpR+>p8DtMuL* z-pRK;mDE0IB_;E;Y&m(Z)51Y|pUacoo?8qoe(;n&OpBG=_mt(#LYwnvtEA#Be(;1& zJM7z$v$!MYct@2%=gCQng&Ag^tFij1Ghcpp=v|E$$L3i~ENJ>XslRUV z9$&KAI!bK5&5AT3$UXU#IMxH>IU zYsud$(=xO84u(cQQxaOL_uK86iRt=>TGE$8WOgn0jZ&+5{>!2-_0p1xGNaplG``P9ufJq~&2|7E}YRb%<&+x#|5zki)tV74V$ z^L^2z-D>M+xw7%DN;^Nxbr;KpZ^=LJAM-e%@6-N6%G2e~Bfo`LkBS7TRx59Q$uetg z4*%5$oQW@AE|j`Fap9Ec)FPpbZ5xu4u3zUgnSK9heaTUm2m{|Y`wt3dp6dGg!m7Q7 z<$Pz$Vt2C(U0-9AL24R}=YEt3e80PDa-qwgOKVOpKApK`fB?(v5!;t{_0%V+ZSuo_-=ZFuC$ zEwSu#%adnMSH>%Is?T|1@;AHIdtpUj(H}Ko(}c@xZIa3hZ$2>E5h`&lqs(4e{g}rR zt)rFsdBrBXzt4G*y!p4t+sz4O(k0)%cI~+DHR0-1zIC6yCS0A)x?}rPh1JG=x7OY< z647PKe45jo{$+#znHN)g-$~#5@@BEX)b2lL7ML#co_EfB*{(y3=N_JbOe)-qXiDoPRFMw%CXh zA)+?AravF4zr3;Y@}CVWClBj-gcT^V3F5lg;W9QpHeV1ch?vyj$nJ;{Df%+Yx{8g7T zCRn^)Yi7z}C#B-IBraHxb+O|kmWMB`#4i7pv zx;?F_#uZN5vn9=UR|wrWq2NC0tjVdz_g~yNae8i0VTZ^2b;eVp>_Zlvw!R;AUuT8S z?oVq=Mf>-?jhJ^%n6vu$r;YA7N$m+hwySU6p zyEG*uIezKGYNBi=8Fnn z{wgHp*uY1=b4m$|Dz6Uo>NYBef_YDnWg9CKRjvnDrvI?v!`lja2 zz9%&MM8cfD?o*v9vjk-nmOZ*ORq1h^S)RGust20l(S9%9$*tNO=~n*zoL*+&KGC@H z@|$-Kgg-C4`@nIBe9^qI)K82D)~q$AoAg^nwzt>pHFR4-d?{rui2@*EkC|2wv_Mdi7QXOU*rAk;ZEU*u56{yj#bC)!S2In}$Vo5z-no4WlomD&$1m?CYVHtUwi8PQb{8vTR-0G|1KxJlR59Mhs@#q{`9s=<#A&x}%(3!QO!X4buVe1V-) zx^3@1EqqyV_4H$-fMx1Ok{9@#oUC#4wvfL1k;Qr+N|se^-QV}l*k1aNq_QbX+OOTK zK71Bsxb&>X*j*}d`4k^t$K*qkasn4M9$z(SRkzSY&H2g3rZVfUFnx}7QL340HpBn^ ztPUStgZYjvCqhzBX~%FLQAy+WPF8VQmUip6sgVAz(7%4w=1*EqTv_vONxsICnQuLs z&IPx7&fDkH-u_I~^Fm@r$xGcc^Y^`epz+qDiBW#7zskV_wZD3QUKSPZ3wr9ZNng=- z`yt+R6~URW`e!FJIKN)^KFfeleZ?nhuat>9=dM_&U$83I`OueU^@kH@yq>dS>TGk5 z*8+bz7%$JC<;BMIOrUdj;ezP4t2eKDh0FCGS94mqT6D3ERKM?(6Rt-Vs=TlBA9$J<-+Cf2a{ZcJW(&7pH=4ihrOW5XySU%R zyU1r1u5M8Lp@;p-U{ou{`*$`8EVs> zJ>I_V@ruyUpB_ve&E`*L@-KY-Z`2~${8L`L96!tUZ{1u5VXmWTHjhnb z#a?2X%yOqsK`3_SM>*M?vpTFRRGxKk2!`x&FaGYhWaR_fU#E|H{&x-Mw&r%pZD`(p z@hj(EwrkZ}^p?L8j+xc(6930qG`!?@xz@Fp-`;;wVF-zj**C@R?$i4(JAO|HXX`o` zR1@%%&HLngo+;~;9@$8yOcXv@o+6_0Cf-i(`dx-I2{M%en;9d*8*7yL7ggtfZn5e3 z>5@}(m*Jg(Qsgh4x9X3wRr2mBS2t!(KEr)#x52b?=AW9v)LXO7F78;k&X3FLcEL$8 zH#hME9&tasN-mg*3%2hU*UEY4Bc$Ys%#Y#oFXZzWhZr{wHU@#q!**t4-na*eWu6d008O ziSvxR_I(TbwjF0Kd~m$)M1I8tlU=J~Jf!}s{Kc{wC z-R=dBJH?Cro9xzmxsot2f(J>`k*jO2xB> zcjo$D)ZZm9?*D&BT={Z~*ynA_MRJ968ggaqId*6>x_b(A-eKMUD_TOPb>Hu331(M^ z1#@ywGfq%m7vE>bbmQ3Pxt|oL??0cha9^Hs>A}{l&%G?uUp49GH{?DNf6TO#`;Nko ziO!1_wXO?kTGuq$O(&DJJY>dY57il^2X}RSoVjtyPRGy(oBJ!Tv%c0k)~;7?D@3QUr#R1W*cNhZ`-+WiNiSO0c6~4n;F&92`2RUW zG|xW9zwOJDhRzKCyM@wjW*3uVO_8y0E4Vso>|oI2gqO)2!| zMs88r8pi07M7e}+y9Qa*n`depfHEhZ#ytd%#{(6_mVHM8vc^9^% zroXCD-(PJfaanQ7gcuL`fuOIw!9Yjxqr{y z`Tvq<&VF^}-`JNO64w{+PfNT0_L)>(@?N=6U3P(k_)Lx?j;-bUC1x(F zd9m+_+rIy2cUXx3KJ{i#=a1KdKkw_A<@dAvw=OfAr17aEJSE?YA@+UxtaG}Ia!Ibz zT^Bzc6cC>I*k#K7>(iBw2C=YgEGd3DVTDV2stIe~0dvWsvm(M;&S!c;oS$Dfj|gYAw7nS;B({aR$R zGkcrS!-omeLboru;&E@W$z)UMosH|he)06W?=yeJ%QLyZTzn^S{pF%y{q&cM5C7D=?B4qE&a!?k^&P(QqM8LW z?X;|(n$_}HJWl@g!esi(!?#b?nbh{}`M+qk9b3r98FuX*(t*=oE@raIzkIwwQSP!k zJ6qhc{;t>^zVnsU^ESsW>;G3e{bljD^#>&6F1yRWoMC5G@W!Y%q<6Qkyl6=AY&$Ei z_eQlP^YkvevtGTktpD7P)L$#S3TE4Bt$1cu8`5}xSwElr9-sM}_c5(1_mTf9u-|vS zv&x3z<6i>#&z$~ZY0~y`@#or^cI_R^_w+y(7}b91-|ZtG>ofi3;>C~jErG012wiBK2rMGq1T}thK@ncSM_Y8;mx!o@&EKKfxabxjmv5PnNRQo9Kq11 zAPeTkZ0oSPklX#jWx8&XLPVeLB4;nXXczWhG21$J?c1(fRPpQc?VFM>ID{1+bmbg7 z&$nB>b7IP8>4|F?pU0&6&5EieCS1GIA0Ozv zchuq0rqbOv+7(Y3RPE;vc8Z@e(d<|0lEC=6{a;od_+`_#e&Ua(eNP@<CCLnjHxcIr1z0cT%_d4D-v{JKTg8uGkmVaJQ#>`?O-em+{yCWHF}I z#+I*Uo$@k zD^?_bzUBdz5W`6)3|Y7BxM9^7CBAt6x`mp|C+FPARD5+|@fFuk-!Ab^D0*z|C6ajm z>s4M~%db~?8|VLe)yCpiTk8CP^TOqe4_?c8?h#@0x>4?~I)`Mmxc~gE1D}Qv?Oz6ICZYdg)mEPX9roGYY?VEs!OD`W@RZ$^WIOQ;l zf_e3AMbj<3N1mJ&KL7o5o@nCE<-(!A9Hum{+{YZP)8S&1xBTBd7n>ATU5{sNPFCsJ zinA86{Hd7v;kw5nH~HG==j>|jF5*)XJmV`?S({(Gq0Jn5rqk})3-6P&Z<#DOYAm(X z*lxj5<;H6_*baz2|Myf&Ut@m!k5Iiy27kT6OxK-d)GK?>uGYV1L0Ogj(HI@2ClmX% zTBorv=*h8i@M^DFP*u0$TV~^}mz#?gsj5w>(aHJ!sr*9Ir2dKdR)Ht^UCtDA?6Ei2 z`l9(l1 zJswt$$ICAsy;A;PrCDRgUHg~MJX2iXJ*r}R%sA^%XNu+QJr~Zj9dWmmHWaGgC-XEX zX5)T6#uYO6L_Z5}SX-p@^G(;R=Y1c)JiNJ8fBItq&gsoQFP|342y*n?@%y!98f)Fj z74!0HV{fZo(^rzzbX&FT^EQr#%y_wT&ME=f1#yeGp9MCk-wALw+nO-Nxcugy9f3{# z7f-Nwe{Vj?kp9n1vg>ipY@OO)MvQ50>#|lYV{_4nS#>dubM7&gi5d5Oe%-y%t2lqk z!;)L-imMi}+fC4!yKi#b+MB=psRn-}dpYO%?(c=flEpB2k~l{~Fj zw#(r4N1xJpuikA+jnQ72yJuhFvPJw?yHZ~+FK*gu8&xRjvRHyYJtnPqlGu}sS24#v zUbVc)&XA&g@Se_xQ!y#!jOI&>Yd)WP&lKpGUe0dZ*F7g-;>k2=&xKQ?`wl&Hx~-pf z>ZH`089leF7oFfUU_WT16JV$QEoJ_>!^O$Wg_kRTq|D@g(CjZ(oz6CqA$rp0i8FjP zY&9>L=S3E-Np)DcGU@$}iKi^Hq$IzyMuoEasr-&S_)urtGqEd*Z_n%y5iJX7H`$at zUD=4cvSDlOOx{$F;D3k8eYGE7jS?w3S@o=)A^u+9t)Ex-aa~xgHC2DPL+Ql4d0GD9 zwl)Xu*>^tZX1}pzYFz2%e6ER2yIwE5@3Lsp*>$t?gtn?ryRxORjJw+4=p_Uj;gEZFs>ObLzJTlM46$^}osm3)Jhb>|Xga_EDV6(tvX%@Af%= znX>(_`mfLbKXNe5!`ysfW=P!T3nOzwW7NGDv)*>)Zs%?Le?IgKZ_3e4b~(^v z$+Nt`t>LRM!RhkvcCYI9GfS_n-uTTxpslk{<@BaC=_kM3`tzLq)Bm2U@&CUbKV2XH zNZ;-6w|4vge?OhS{{M)4|3dSd$Mx;MEc;&Xu>Rxc{`k1}`~UpBeY$`Dmh1QbJ+JyD zu=Tp2(6zd5Yad^kEpsF} zrj?B&(Ef-5%O_*5v(8t(|6bJTuws33>EqSQ=I1%p|1R^F`W{n!Nn-2v4Q4)4=6j~- zIVsIBDf5vl61=28!{pI!4yPQ;%m}OavkNCoNEhQ;=zojv{>j&`o@jGbDqU{4ns})q z%{MmucyQk=*|oQKW&M(DwV4<=`O&Mk+Cz7i@SouoDJtGJZ%tlrvcOfl%DdK9TuWuX zh6E;lc&YA_5`T9~o#}L;n`gg9FTG`b&$26Eb}GlN<)@UE8O?~Td7rj>nU~eFdH!*> z>y2bnZJ1UU=APYkUyb?Cu~UXG7F>I^_I0wX(%y4Z?0#<87PdCCa>l!-sr3!Nqw-BN z)_4A$BW*$;%KVx}1VbhtzS6-bu zoOL{E!rqESH}1%AsTMzbb|x!3`NveV*K?Bf#h*-fdV8rPTVqPn%cqMfzwXRxdNcJ} zY{$b1`XW(r)s7t5T|b^$xVq2uyEHpqO2Z`ZM0opc?(2;kqJ!6(yWUWK5S}}8`lHhJ zu;%0stgSXo^A2vk|4PzsOW*eCQ!M9&aDSZiXfNB2mf1#M9xz^IIz6YtQ*!V3Tk7YR zJ^UN?HaKOn6L%Bi^=EzMdzP@a+DzMaK<3SQ^ZUoMw#?(Wc`@?Us#WufCYkt(d=jWo zn^G9G{}@~Il7h!r|Ve+%(*`5~N z{IFM7eZOmRto?HG{l>nplINFIy?%E$IhNg50^zo$7 zp4+mY>YlFM`TTC>j)|L3mX^+(a!mSt-Ez)IC50D!`M;0O++OM_$aY6C=4qYGH^%RE zsd~Hg^o%F8YdU;?6nsef{pP6X(iwX;r+O^ykC=CHDGNj0L7udgrW23 z!24JJ4EDd~{`!AFC0RH4L7S&<`rGZvmktG}O$zuP{m#Ai{p5Aq`+e@ubPkfy&GxdZ z-2W(a*6BTOlJ`x1WOnd(&st{R$P-0#jC@{7Yvu{hS!`hIQ7FAk+S}Hn@U>7iV|47! zGv42ruH{~tc_{8c%hasmi*DQbUb6J&GE9FQE35YYM!%hV?Xk!v%Y|`|%(cGV+OlV= zPVgM%xne28zigS})*Jn3?Mgr4Q0UhntvR9PfO00|js(8^tV}tt_lr*lbbU6NJY}ND zCl5b?Qxl$SxL7$Q{hgaM9fPPGlwEDmvV+3wo9SE+Q;rS$I091J_AIIU!Sf4*i@ zLwN^7+y!&5q}Z+ghokSal{-FK`@_n3!!jk7^A0svT2@Ev{+?2)El?j9+_%6i(|Tt0 zZmZsF(-&AhJ{Zy^kWlJY)IBG756^=Xt?DCz9R16@I95(`H)hCCQ~Yw0>Aw41|EznP zjjw!QaZtXn=lWE0h82!+PN!bVMDnYh;;oko`S9c$*Y<~cC!8Mt?LKtvZNidoK9jfp zSajjlzLO^yAAZbDs(!^(Kg&7qZE(3yP0j2ZaY+X~Y&Jf0o}YKd_p2hm+pKKQnZ9u) zdlVO__f>OFZW9+dH1{Yw&mN-*w;wt82i-k?yTkH+&8A%%iI-n>WzL&y3hYWv*kWll30h6=8SWvw!LEyC|7@E#w~K`R-ygU zy5@uT5;>Y;0yK&@O!gMOAy#r{JzM;yn3fOw-Z`qisBjNkBH-j}q1`3Uf8AMX30G2`PyF-JLR;U{NuO3+ zk1#5VWRVe3-Ssi}`mrUKa^Fp}Q8IaUbZK_;;!mQjo7_9qp1Pb17QAz9je60%$j)nD zT+ZdzZJu{xr|k@x+1$IQy*M}9>Q&4%E;;prceY*Y_Bt#21a`3)?3^e3hfg7H&d!63 z=Xolc9&HQZ`1vY8!+Aknf}Z1o*^{fY3uYa@DZ1NI#H-mdf8nHMDSCF=x=mMWSt`zy z@^!G~#gwaV4Cy&FNvY*PVW0Q+Xz{axXRXTfYs|lP-oJP|yY|_UYUTZ*JGU&G=zA?a z)Ax3#?(NM&lQ)^)xpC~1nPzrD)kgE6^UE5YD(9HlCHB1(ezqvPKFiN;v(?Xp(i^?2 z!Y$o=E9X2DoL&`da;NUnl9jA#cA1w<_W7<+_nqbT?$xT(ediKptB1a8o5K^z_ns;C zxk$n5$*$-1E*x7@IQe<%>QEU!a!Sj(+`++gj;4@12joWt+X_ z`@+X&Gvc)GA1|sto;)KhLf??ZaE|Ljk-~0AjV)oCGtBG_+7%_faTae*EzabUIM3!b zw|Lu}B^~xWKZL!ccE8v5ORLkrGrMOa_ut%z8^=R~4~d<(`&9RI73b~3A_lKn1qR}W zop#$FvuG7!sC@4JH%o7Caf-S6cYpQd>2FjTgTf_qZg@P_T@rJ6N`p&s-Obk;nKrE~ zu9-X;j?vqn?`k#Ozvg-Jv7Ptt-Q2v4<={b&8u^v)WaIm!niHO1sy;bm+9ClVrpk7o zJ*Tdga{W#}dp7d(-<@S;vtz5MF1~oz{y}cE{*sfwS@NY%-)=s6oF)JDiz%$sq!V%oJ`Q@ew$+Rbkp+~s(0 zxaX$Z0p~Avdu}e9QJ0VY=l^Fu`tFztW((H>(ZCIk|!RGOTTTH+fFb`bH-F#*|)>Ks#$5VCX3NDUe1{L-S#)FQvs@_=Ac!Ukj!TG*JQ zImQ&E1{6p(Hu}Vc4J4X8OA>Q3lSy$5C_SJ#2DAY^2q|R1k%`4IptuIbd{JgWNq&)n zxdGS{IFk-Mi8*_^fV6`AWyGcL?CBDc@9yd1n^=HIRAAxY%HopLT+h6;d<7dD{h-wJ z%;J)wN(Bwal>DSrO)h=^qLkDkP+HW0rA19pLM|xCNzF~oD^V~2`9VKiA=*G8+T0Z6 zIs*kGb8|flW20CFV+#cnV+C^~BRxYi3k6d{g=jM~Gd)X7BT&i(sWme+(6cbMw1BHI zP_Q&H*0V4%H;+{?vjBP5)YMGR(A3CS!5pL=rXDV8pa3@m&Vbsl0I~tbwy?0&Gc+?W zidC>MRIo5X=&~?Xh&F~wD!`33Ha6BXFfa#2oPmNl)IYHxzozD;fT9T;5g-Oi;z7g| z7dX$mW#*(Bfn08&5CjqNOUzA0&+l$IiRr}(W?cG?pd4PJU}<2gXJl?{0?YFy3c5yy zhI*EUCWc)4!6m7=VG4%E=6Xg3=3M&Di3J|1nduoN3g(8UdKN|o#$5W41nQWVo|CFz z0I}A|DZfG?TG!0TT+hdP#<%g0Y2>sS%gHTV_s4YLSAzTTWt0s!J-U0OHbzs8KMqFtxNq>Ab()%ULnS z^^--+-TeKRr26 z?cTL&*RJ1ZConKJC`7OcrI?!Sl$PImM}*Vh1arc=wd+?D?~i?K%Ty4n<8bH6uCCWo zy^af)Gj#ASopP(~6jy}tBY6hb%Zy5LtJh`kT$guqYW=Zq4vl?b9M2 zo&!l&qqCda6!-Ec-q>^NXz~7+^FFH_SYv$Sf5Xn+&#&Yr{u5-J5XGwyAGULY>(Arv z-}f+2Xn&mD9)2y<>FZZ)3MCSPU zxLb7(-rRgASG+Kf@6#*6j)Vit%eIsY^_U*Mx%r;vGpDWlzI*#UH2v{Myr;=)LSvJp zk)phV@x_?#ZHuHrTlxYLrAxf>ot3lO3|f?OWu}~3e^}>}X-seKXTf7$g#xGNHA$Yh z-}N-@Ncm;KeR5CccYfeFB+$~y;mHxM7_;(_NlVR?O5sH5Z-%qKD}R_?u=ZQ*4w2(b zExa6}9N$kEC)#eiyIPX5xWcxt)cV`RjxV(l{}-f5-|76~mZSf44^#2anFW^HmMhn8 zx4HcM@;%0=HOxz@H{5G_eE(>v+nkoi=9|;*b1q>|y8n1%t>q)hj^(R=-D3HxI$f~% zX>rWS%q{1I*6bHf)H;;avigEuj2-vWHxc`oUn*Sj?!VC?aE3u>Lb}La5t|OUtS-`opoP4K;3TrV~+PqGH({&ZY^-P&uC-H?D!x*e>3MppAl#=h{ti9a0Aw~9Nag&IV#@5^10K5q}VS(2r6;*^Fog&biMkL4HGcR#2) z%T^)rx{=S#g4gettxNWt3Ekhc5B^*4Qjk1fzq?|^BdZ_#+;h_79ZkN4_7&*%{Y^XI zcgHM3uDwpz@m}7(qzmh|D_mK?Yo=sU__yGXPhRnt-~K7fzI#5g?RxCw`Og z>srI6#5dFm8us1iuj^@edwr4be8&pLhpy|K8C>S9RQPp^P3Z2k-{y}BS~6P71>ZgS z*cQ-t;aFus4f7{ympw^mKHPZn@nEuZUF?xpChK|x``!I`o%Z)ZIn2`82#lDbAkOg z%iv=5V=v1MI%}CGFDXx$v`6A&ti}Gj5$&H7+YQ>69!!Z9U$RJFees)G@dv#!TiQ=- zwYV0wO*XfXLr$d3)HEhF+xO-Ezx?aJ@B;Z$ zw-fa)-9Ob{V>jn~Y>jWme&t9GFNWk=>qAB@jk`=X1)9$<$x3gCY_67eVlF=Dag%lD z8tzXKDmyOt`K_71aHr3cyQMe&zkXu9gZXdiY%?LDrH^Mw7wY^{e8`G(q==yKXmc5Pv8v`mgN+>#^j$5&L(TfB2*Gjs46;j`AOm zua++|x4Yls+i{)c(dQ-$*$T&+Ed8F-+=lm~E9%6nxz`0>dE9s4Pi5T`%f9Cx^Pc~> zC;ni+!1syq{W~A8SK{B#z4=P%+^z|&6FO_(1b;pexAJm1*Yy|Xv%c3>Z>`+7_fqt} zy|aGTL~r?Ao1ank)9m4%;Og&J^y>8K3LQ=SIlXVbrP$H~OMS#0bo z$8a_&rvCaNnK$2M_pSd_s*!uBwEf$We|bsK3#ZjGz7F^LYtC}!Xb&mXV z#|K8Anis72c0(cOqH4~TxFZI)n!d06=`hFK;UC9O^TWJW%y-s%AN%t~*(KX>ddJ4H zLsPA$Z?G2r{nfs(wx-?Cj5+Lt;J*2;f9#)r_DnD2t!;nZ&3tg1N5`c7&FlrbYX!c2 ze0;U$ug85ym43lF_e%=r{oqUfQ6c@@&i?mwep`OrG;`YY=bSm=`E<5gbkMBDeYPt`e9n@#BH3Zeb6-|>eeN_o_d`eKM$!qfqFRR+ zQVi=pE7z99^>5oN__*<&A;5gH~59@ z2HAzZbxqGd=tVf0JxELy7MZwSz-;9QlOEv;^+O^WN!};8T9R0fO*`P+VJuMJUBHnj ze8{e)e#627?QegT9`V)bKXCZpvXk3zn|}OQxzY~ zcbF6ZLVlfiHS5p5hchd!T;e;bA4i`R|C?0TWq+^ww9WLIQpWQ?O$+OCA4L6JYxn;@ z%Z{>pP8G5bxBlOL{841va}MM4!tWnf9&S#*>i)6sr`a9G3!9l9-05bxyV;Qc;o4ol zGuO;+ED?HCuXJO>IyS?1ZqE%)?J|_wE3dGp`@*rL2UcHWBwL?4?aw(cw$*-l{Jhh1 zk6u2vGqLVx@o7OhhhOJ8BvPNpxz+GLlAn0LxoBy}^n|;<9mN}BdIDOWe&1jt)u?1E z^w5Io)y>}HGv4`3spm*kwD13O%J$2Dy??#GkJoqqeb2DKXO3myeeU-H|4sRRe71kU z{a%Xk|9^Fv9o~PKR+k+xz8@{~>rQRm_dekRFV4>owP^jo9R2e3LF1)ia~6Np(LQ(Q z&z}`Zh4<`K&P{fyU9MqZZ~ghRHkf$i+mSz&e}UcE0@nS{i}xCQQ58)(+QjfTL`N}I zgK?SsvHKT4U0+}z^L^ve6y2TOHa<2_I6hts`eju+xlT*abJCZfMO$2=RPXB9>inH4 zc{8QVboSYIY2P=o-(0+=`E9EF=EtA%ey0A6{yF8?iq4BSOqET8O+TBK&SIUVI_tKH zv}u3lyen@m>{)ENTWBk~(41Ql3CJt;JI=dNp2Jpc5(=JTG8g z(TTo-_M;OYcogvz`IN^zj(C4#mV>Yfry^$}=S0qnoZnimv}|c9kRzHr}Ln+Jbx z{QSNo&~x1qL(iw4Q$33(KdV=+PyU_u#IvgCgJqSUrTLpXD~cDNe>z{=!u)5<%bn8a z*4l0VH)nmdpMTu>{d?~2%bVZ7pRwI6ai`g)<~`o$7Cnt~K3%Kgxc+IL#^4HU2&&d7d>4h^eFW7RP_+f)0+DecRq?cy|#Fp z<@T>p?{v4^anIN}aqqNZ_1NFMg42}MZ(24@ldj0Kh&orA_h#p!V&n6%^?6r!nm*sP zd;Lqv-f7Xtbe})|zVhonj$dMT^;3WKT_`VbZAoys=PEYw=aQAXc~6_#r0vbT*LW`^ zpKDTm%j-nND^8{{jEi^MzqPwmyW#iScZ=`VzqC7Gx%>U=dpG`ud_Vl7w*330chS4@ zU#)v7$Mhjp@_@MepZu@=_qsOx%MX{``}D>6`rB0{g45=?N3?Hv^@6uP`|qDy=f&mk zeop;$(R6A&Wm=YLr8UHz@t+vZ!ox7fFQ&whV7@5;WFwNbw}lo`K^ zKW@7CsddT(t)I745C8fkZS_qGj<&IOr7 z`|SkYHErwl)PzqQ>S@rFSTB>_0ru-RWI#cI^MCApFVHOHgA7#>m_q9ZN8M3x&Oh~qimyTare(C;_^-CUK;(W>ea{ib3U*f;q|042t;=E<{7mdH9S52F@ z`0gY}u1P&Rb_>k8lKiG{TdVECZJX3@nr)kFdvxBh*i`n<8|JQ&Eq@mKCi0t1wcPia zcXRmPUH*Ne?wk5Irq@aOo2K75{YLbgR(0>*bN3SRH*LRh`;F{3z2C;x2lzI9zY%}q z_Z#N2j@lFdx^`bV{zkZLhHT>eP3Lbsf1~kR`gc?9$-a&2Z`{9m{f%_loZ8d-lJ9R8 zek1>ey=>Co$$z{5&YqiOKS}?jVcD#|N6u}Se>1X-ugu9h*0tzCWCdT`vD<;{Z<@j% zs8vkdzkQOLckt4r%q|n>S(>q$Q#~#(dHF&4=d7}i-*pP)=Ny>&)8dZnrv%-T>f9&i z?uftRE9R*FQ`yq--$AhrYGumV)4Y~OUJAW*HAr%I>())KZ^E`sxO+@&^V1yG=#ya^ zuf8cOlil5Z_u#b+TX!hm*ZlT`{f3&&Wt$fD*}ZS<%9wATxpm|4j$nH&-l=V#|EK-% z-)qXyC@&&xGm&|(!rO$!M^bvjmYcIk`W{q#c45PZ4v+4uVxqFb(&G8yGMt^vb39LK zu4KM^$(SuQjrW|~B;%5ZcOL|m^(9MRzOV`ZH)A7ftLyY$>H427+G>8YVr)`hZFy;& z78e<0^?KFn)9Yr&#xWLat-e$IJoI{u_5N+^_AM-Q3@-M5eaQ8??!JHg^?MReUP?8; zSMphR`@L;7M^A;W&flMW_Eu^6z0&Wtug&l5{eo!!d2`>&?w(is?&rC?)!*LT{=Zy&S6t1@r{Qt6Z@-$~t9kvl{NCTsjm;nK z#ozn?;6i)--xrVl`Q(3o*?eAqo-8i(fA{9ar=OmZu6?<}+pSMxp0!E3$F~P-&NxcG z%w!G@o-}z5vyiY%m#v+inVQw9w5={~E$ywdoSS@)DKy6|zk0%F5z8fR;qFtS{y{t2 zRaN_>ryo4sDH;)YarvS*e}`^lnV~H%ITuoNC79r_aB9^;9J-Rix*XM>v7Cq1D=r8ic%5nCDGK&BQ%`Ktg8gfDFM5?;P!q#i)=pT4j z#wK}8t*=zt=u+ZxMUImSOKh$kIX3r*)hv#tC~o(6OBNU}44U`iNRyL)ND|}q1Im`% z+N*4i277UFC&~0(>M7xujGk$6oVhdEMlrLA^;lP;&8&@bYbD%PKHS`R_0+j9>q57e z&r0;GoV8JFts`SSLw2j?#ZyOXv!D?BCP`IVNHd#9NPIrY5@+ukzXnmp~9q{W2xjxwEJBBe6Ar<{#1iI-hU?Cecr6`aN2b#a^M zQf1?dfB4wTKfLl2KXb4t{pJ**`p8C0!?zDk`DlN=P;~E-Xh!FpgVEDiqpFUc7B-wz z-sv5`#C`ge-}*;#IQ7@ay;PibKeO!jZFL{-IR>d=ok2TR#cX}s^760Ozi$us=4w6V zl#fmwfK_LQ5PbBNfKd+xACDV6*%F8RS zesPrk@+;D8JlDN4s>*HISN-@)>+kqmKi1;>n(A3{=u714Fv(wAMH88#wyx3$)Qk$< zw`$Sl?KysnlKf(}&bD)$A8|DzLarcVdH(rV68;z8F16^)GBRTR=KbB7Lowldsi(B{ z8Nr+D{9f+soA4ngd|zY~|4|MRn@cV)oEBVAxXbA+sIkdEuwc8N4`2)sVDql)UTV`yY{;;C*#5{FZCoQw*k3FrW3mZjv4V%_(wY_2QmtB48 zz?+(8ldw&k(*#bkSay_7+Gcxu-J7W~D^_|(U0lfj=-1i|bN96O#}7A)DNV?hEQ)-q z_*<1ZMd`y#pZ6DLZ@T_ex-dA$dBKU${@5Hb|LGz3`(z(hv9=h=|h3-nijjY z9w+bVx_X*zX{pq|)t8W4(rz~+J1v`^TRdkQUvfd&y}Ff>YRUm2`<5QgI-Pezn^z>* z^ZkaS1&znb_6qu@fBntGs(Xk1_tFT>xCkY`hy#=Jj~g`#oaAHCpU1wl^u_Nl0^jv* z8&do3hke|w^>4HM?_Dnr^2r>%>iPfB$BTa=euxq6zU?!AGk42oX2Dng9Cn{Pr0yM`=YKkcb9b=n8bd9?w3Fw` zFHL{ZEzlkNNAx4Z5&cVg9u9w)lB6H$-DrR-fDtg2x5iBrK?uQF`{b&&qKF_AA95;@^jR?>~OrYMPZAQ&Y>?CJA`^QK!npG zK~E|y+X7Q5`6pyA$GGzCN`9{j57-dUs=*dugQ14KA2l2Gjm z1QD$+hF&6zT{ccASlGg?8l&-0NJwuAgza>w6~yN3)R}U^2}B49MQTiJ1re$$n*x-$ zRX4S?GzoEeX=p6u;AB-5nGz7-Bnaahd(8+u)FYIpnCQj{X6vY&Ib^?UTpa{Ssw$q_z5SydZY)XbRh!7Ua z)wtLOBGgoFxjfjWRM7dqGT>i-taHAKs@0vCmqwGcJ_P-Ud!YJZ;sNsmevSV*qFMei z-%B@ZEq-@-ds-&kGBJI{M^dji*t9s}uxjETmF_*%pTwlrBae6Vcl=POm+ zAn-QjZQ5JDx7<;c?cY{RYs*l}Hp?!{h`VsY+Qi*7 zlIkOs`=3M6T(i<7ZJFu$+Wf8C)p<9UPpYk(^2*EkkL@A97F`Z=#V1NB$|(vKf^Qb( zDSVo~L+Fa$cSRLt3jq;3mWUtO+cyNv%{Diks4KgEmc#kuo_>xy_r5(D*(pYP2*;&kgq;bxTSzcZbB$AeEnI5nYO4|Kb z$c6LmH^Dj4>?iMhbYYfsvXyL1Udb%_E74pt@rY=Oed7Mx|7^SJ+uM$Q_!03krGwAH z`lQeFgZuO!E2f;=zWuqhh5b8z>(Dn3e?b|?0!Ee>wKTE5_( z_ECYi-)4V^+i+JjFFx)3rtK**o6T?QZx6q*{MP9?5%=@<-`dx|nse!rmc06NaXqqq z$0IFnznyMr-P+~)?P%F_+naVyH;=#NKK%FZv$Qvl#Ts({zj&E(zww-(++*V+YtI$g z3%)HWoBK`ct;Ac^TQ0dxW^vNXdoQ%UJhLldZeaR_mnBlNmjh*AC|T9I$7cR%cN3H{ zc9%Lf-{(Twsri4NdspmS;Nt$U=tGOQ@QaqrncShC z!{jr=?wGMnuG8{s=2s`rHaoajci*ZMb;WG2jn|yRON3^`UGl8i^Xi&J-Tu3t53X4! zl`$&@Zod~8#btK-kWF;ljTaXLU0L^k(g>fQ`Fwv)?MaLCZJd|AY;HgDvb{Oy!_ldJ zAMTvU-@iMP!&Fr4&9Z|sQ>VR2>or+YptU}|mv!lhGM^2JChW@6D#a~1y9^f;n4M8i zwvhgH;{5cMM<<>?;P}a-<{?z$$u{{xa?9tpe>^mGZmiU3I?nlF;)9c_O!JS>cl*%Zv4 z?DdgJyMUe7D1m4CaSN~G5odZAS311kcO)@dXmdN`O)kfZx#ntpA7=OCC~D7g7&IPoK6e^VXIr@uE>yiym*1{`Qz} zp9tgo!ji!1WjpjQyUKF<)zxRdJR$Syc!mAb9k#b7_9~Y=S)_5?&%UfRO=07?oqEZ! zd9yd`F4hfi-g-Xwpx1A)eN(rk=S^Ioy4Es*LnYel;*Awz^6wvhyJ2BiAgzAslGo)~ zog1#}_xduqy*JI-d@FnNi+!pO1nO&zf6V;bo4J;8VOXe($u=%Qm8Z4>+7CE8Qavjg zneK07sK~B4ULk$_OSI4B!n%O{w;pQ#(Dqd1Dw(i3q19NWi>K|QM3w!+ojL4Z4pi+~ z(vL&y8dqRIKv+t#;Uf54OVK{Bs-rvc~B z^aklZ?|8?R@9QocEaEuCeLEznk?V)R{(2YLcWu=V{GasiGq%WLxzqBux2fjD_q{J( zw>1`6N2}K_sTX_Kve)JD>MvIxd{k!)yJ&L1ecyRSPOpc76Flb!FSc*0 z*?Lx-PuOxoMJAo^4v+q!*&qCWh{wK)=6akU)%QoMQ<=-tsk`1|@e83{E>-eu4|7fj z+zz|JBlqQm+zsyE7tPuqYSg$YdGPF4W(es-Bc-kMtf5^A+J(FUwQf&S-3$K04t7bWG_v9tkOT}*n zn6;fvf4|B9$?YdsZ*i^NUfumY@BQU_-)qkQzIXTr=dpj27jWoSDZ3qg{DEmt|K56@ z`G>@9>NfoMKA}^@+jq$)Y(n*k%TGc-$^8^d=X_+{80W-YaE0wwOWCf@d%o`vUgZC9 zUE+)IFU`Mw|1?epHJSKCDcI^%F7bQ0;7fU0nrDuH^cl6yk!RZHot&mWdHKocr*A)b zfAT!5;X8F%;OE|NYHxLSl~=KSt9iznzxDd#w+C)qO;m~PpH{&kcW}r3R=Wyr-CyZf zerU{b(svPN_jKFqK0(Q-(MKhG((2CHcU-1T-hIOD6GLT-O|$U<%K+V1^V~kaG>LM& z`$cTmoO_Pt55LR(Qu{lh&c%PhvoOs-ugPrQkB^=&d{xM&`)IOA`J?Y`?B>* zZwb@hwA7DlrpBIsm+ZeG_KodNuAO}Qp2E%)%^C;Y zOD09!J)dlyBri_>_(Wv^TY>WGrtG@^>90~)WEvmeYoF2iSMYPNdX7WC9qatb>JN1$ z*4|Gpn`|H*nlNpr?Bl;-4R+FZW{v%z zyHQa6>PH`IRCvQKw`-%O@_gQR~*Y7~cA(eh$^JIf1Hu z>krqdEts3G{9WwJgR@JRvsW2p^S8V&xOXtc;@-B)2U~4(53IS`Y9-safAQ8@r}ZUg zxLH%wzI_#r;S9AnWT5fvKljP+GHI(k0~Gc)f0J`KW6-8D;dsD0neYsQBL_KtdOIoJ zwLWP+=bFdw!v2qmwbJk63=1?P8=_hs*i>S|Es_KpWRT*yla`gM{%8e z#5dLtYz=#^^4~K3FZ*Ks_vVL|HpzL623vnCF5x`TBOrB=eHvrSa|V|q%r0!q5ja{`A$Q3fuPwHLiEtOO+tlIB;E%Wf!uw6T6>re`jA>?HFZr^-MkUHO~bH z>fcFaoff>2;N+9GbImrMW!z<~?N3?!XUICKwNDTTU!tqNWb%?7LWhiaf==)sG=9i_ zKu@#tT$k#`i6?WTgcfbh-n>O9>fyJ(8LF3aGA&MTViorHF`7PCZ+69_E1V}@TTTtz z_8>y)_#BBjtf@=Ztm!!+HEo5%3Q3u+t4UKQPZAO~S(tWu!ka{${u{?D?*F}4ePnl2 zjDJx_W_IYd?*(5TbIaHM?%mdUJL62KdjI6DDPk+tUz^82*38=VH2Qty`|bDhAN=3{ zOYTcx>mK$q3GGYQDQXsVJv3T9duQ(_hu0jhExcDQy`|K@fv-DKu6X_)MUQRmR-6|; z7^HVZicj6+?7iiV-me8RcADWojMxKZBKcl%@CG{=rq5itbMm@(0c@)$Ked~ip%-0X z#k*X0&TRD>?o@7%$Q{bJvo^N4x@DODvA*c&)SmLZZ<%xPq)C$|3%y@hcz*i*87MB$&t~|YBd{ZHC@4=IY%0B$}=9P+E){<4aOX0#vE7#(N^F8az zRCo9sT~;*tN=8)LqAtzTSJGY?84B|TbudL|(}NHI=#ZRX)D{Zf~&pt+@CNrnBZo9gdh zRyIDHue-?n+lT(@&-b5Kuss)HGTd6H_^mCJ4~Ih|tU|1V%!;zGaR0)rzn=2~nO zxDZ+QP`}$&PkWusI>WrkIWp;dAJ2DoNgn-H9=ZPbj{OB%&-b>?O7e(OQZ~7h-We#8 zTqLoJ$9CI18MTAK({pAQzh9DlzvkmaS?=R;#(5dD_Z)xpqvZIfbF(g-n74n^^gU0T zpFI%|pUv|^`JeTpvd1-BE^MFTbAE;WO7~QPhQ(Yp-Q&3sEal zKUpAY64jc*XwI(R=5_GsmWg_cUu!H5+%<3cpUpE2mZqqe^6JZ)3Z`E%=8|uH*OdIK zX2(HK$yrq^lrIT-*?sp*DX&o9IQ`rl%j5Rd_2$o}F|G&|SyRM&{neJLwKrF7exZLk zcG>l~mGd+2CG0aVNq)jSP5sRI=zmf_r#{=Fb|S^(k>VK@+RVh7h;-y`C?-|d} z(O6rNaBR}$n$!%&EvpOb+&-<)*75batl{X~B$44ULAxrYZ`tMTYnV4)Vc+h~d$s)6 zzOt8#9~bci{xD$kI^b>e|H)m`X**<=J#b!qUE1VWM#q)qO~LDJ^M2g=G5KHmVSl%u zr9XWSzdq*wfcfw7HvZoGhr+A=mVH~X=kA9ch5D~2e3zPMy6@nZ=7^>_nE^fg8+Jcs z=Xu?`YkJd+H6_0`S(&ieKFYa%RY*c~f<`EZivSZ_%-NfcZ5;~~n&TE<)v~H>@mrqm z=$5?gh>}VtYo^M{4r>u(uT6>`tFLF4M6J~^b}L*e!OON+uH>LZ%1o<8uT>)Tnit)a z-*SIy=gKDWUatQum{bFoWo!MN*VQ-cMzC1!>zAEp4)r@Db<2Yl5erb~ay{cK^evPmbH-m3%nwT>P=s;jf8sy^cn)fV)NEgn}b20^7d} zPWq{7IH}0#pBr11d1d_J-Uq>7%2#}GHh(uIz5B+F;<-C4j{V-3*nA_yqb0}aWa!%7 zYe!ENPJ3}W`Pk9EayhelxmEIFp(3TJm+q{n^xUp`SG2VJ%d{7F4cEKx7fimA;WJUp zcZzD{WT{B0tsVE=wr9+{x@Vc;z6qZ<&OF9@LQZB@p40;`=_$qsrcP+;U$J9O8{=K( z7Y&On{uM4=^I*ap@5dZRWJg8S@T{CLe3pwK{&$ zGkRWX)Z&v9&TSUm#@Tb0N!i`1Xh)2o?%rq%6R2~*buI%j>l`gc2L`8`(kQ$N(^JkysI&gNa) z`*I=s#g&`3B-_;LdsqjyxqewJlJhOSmo?RfQ;lEROhvkQfk@&;s{%o_Y?B>Q?az3m zr&;TW7c1snYgvB$1V_w<2-6&m!rzzv6(z(!XVE>P>@vH?FtXyh~B4cw;!#je!2J9 z^)u^l{>%Dzp)962rrhRF#S=;2A0IwEoH)HbHcxZYRH^KqTN4v^PK%kn#UoB+Q_Mcy zl+-KNHmK|DK0I&pi{@7Tq#}ztGaV)MijL0fE=Qkp$Oz3!zU3?-altupq2mLmumVMS zp2+rjH=18hPMn-{RVdC|W;mkidA!Rye z>rJeViL-D2!(=1Xd3b`s+YK=@qvy?^d_g{E!}r|}PMtJ0*O?n{V?N1c$=s^%JHA^d zS$@0}{^j?Z%**fZY^%Q<$~&{Zs#8VKZOf6LEcSxF?zclbY)!?k?KC>%WxBNO(uSGS zW^TK5qxaVDFX>-?9s7~`v1G}VWEshs!lgSy686|^Qg~&z*RH8P#h=pE#yCt`P;cCwBr2J_jA7P`9A0S(r>dp zLi{7r4t^EY&YKy&wdQi@Qk9u6JPbN_wa?luy*)PY|BvMJ_Io6s&+h;1dn}@}A>z}E zJcHloc62ql-C4f>{+5G#LhBA~2;YDGisahMt`iEs82L_2Ecz36xp>y|Me*i)68~KI zF!5v0H}%PyW-4ZvM1`jdzvSXO%h_3@_{m|3h~^?iJO2j>+DTRIrzM1B!enCPe429; zTk10mwba^qIE9zLwm4dU%FpBL<1IY)+m3R*;X2rI@tFPkT(_<1?X4gAy*4c{kT(C` zprC8vk+#IX!{~APaq}bjed!++`R1M$nbgb{e!V(s|Ko3*{~XV9%+^*_I{&PT{~)`X zr1W_=o14>~eeDpAme6XHNsN(9;R>ECc>FEnwcxB-VoVLZiOM@Jy$$QLk*zwM5qPHj zNvBI(RnPK?Mus&TxYvrDVds5z`0?IDv(zWmYRYZCbZOS5O9k&Gl*(!~yp?T^h~9Zo z+0*<)AiberAKMlwZCmf0!+q~R)RkxRc2@jn;k^81$CBAv$If_7TQ|G%>x#e@pR;@Z zKTLoBMv0Dosw=eMn#dD5cXnv*XVFIu$tI-go|A!FGt z9)pwyWgV^6sz z!@l0T?Diz`DeCXp)sx|F{x0_Q-|OOc&8MG_-n{5mZE@hI4<{1u0>#f*K#Up-h1?e-7PcU3K zf8zYkIPK^sj9XN;ScRyyw7IvmwR#IqX(_mT)H7=DK>@+c4Gb)jlS-&-?Mk zrT>`A;biG+i!~zMIPbBUMx`x?x+Cs# z#FFjF293E^>py=!u-o}&lihT)GdF!RAI4<1?Dm}UJzMDLJmoXDYu^=3D|sheH~q!c zf?IhLHogy8H$O(_a_T1cca!)}*`L@Ht2cf6soaRh=|L%`0h*l-4#FKt`!Bf2R(I6L zRGz=7B$LhAkfyxuSxV8#JP+5GMl#%++YN(~4WD^f?vjc2OJdZ$B6^EUsJCm%Oe^2` zdAoEHHXpBVUuUncm)QbK=QEy(3)e+DpLX_SmRdepY^T$ruX&qs($QxN&p*Cl%JbFF?OIB>-64$@#*>yO*G-)MEJaP;{+;~RVT;_^sWihZsl{xU%`(HbV=UGS?r$tQnEB7@ zaQzLgl#<%sO1*hovvPVql=z)GRD7r)NQOQ}TmRI&+{D5< z)46FaUu=o;JXPo5=4R(fXVMA}@MN{5S_Fl}%&VWrtu{}hwa-MJ+vocJgRGx)?;n1a z_3WE%yptqM!nev9`&sUjVuyWc?(*qt=Jx1qTQk%8`Lf$u&(}I! z7Ynbn|NO1OzuI1J*2UtOTX#49J=mu%ce96ar;NiX(c=5Bymp4G{Yo(Mou|G1R8U%k zXF+K}vV`#q=bkd<*z7Nonez%aO_Z{JsT95{tox&GV6P(Um$cex`vT8@x#)e^to`E6 zMDN38EwVhxiD@2>z8B50UwYa@djE{}XK&RuJ}`HhUtkw2X8KX$#-HaoJ?{i>)&=V{ zaLT;C1&Pu8bP!{f?css-WLYZqQS(wiu){LVMdK45*XM%RMGYTw<>@#QsB zD~^>|IZn=+l~^?U8v9-8Z!U-O7Ms~$G+m&O8Rryw>C=X%g4&msv z;V$=#KKwiJmAPE?jhBh8a`xKox8F(sc;eu{OKsuh?`HO~mLWY)7t4NRuK1bJUfZx= zMpXCIIti6$vrlYjS=7?ItXe3}^M``tV-JH_65VWH|FAj#@LYFz)l)FkXz4BNfqg7NE~4Dn~XCu9W4yzO3g(e+`}>cfwURGvk| zZ2Ts(yR{}yahjr)`^Mt6ldWR6?T|?~sh|B|)1zlWbNn`4@=UYx>@QE5*;&bP&+97h ziU0rZPk4U6?yK6Jy36ZcKbd&7cXn4r=>j#ce@#=CpEvm@C0{->IJGfZMgP_gb%Uj2wy)H$%;=>P49jQh-Ee=XRsXM#x00``6N=S&VsB+48-S@xLY%h~PL&2A09 z>Nk5CmbY5#KDuBjvVCa^&xD1RNy{hw4R7+;qiFO`d;JgTP8}iHu=vR7uX{RV-q*fb zr8>Xn>q&Oad-I*rr<MwgeJ^XNPqqNMDk-ZQWA{;JySFn&4P zV|kuE{XKK5f41Cy_p6)z$NG++ZTB?oJAVF-4PV7nVQa9Yt%qly%?=Y6X;DtIlR})= zHhkbn;$19wMD68PwzU_J$;vWaGh2OJYpU|AO9>|a7Lmv<{3x_&hNU)k^be`oo-el#g?`cuLg+5d2wyp;;e{t7#ViJc1t4=oGp z{S{hS0+-NwTN5*Jr!H24% z2QPm2SB5kFuU@f0^4z2Y9{Y-T+Z2)*cug}>Yk49vY`CW`-YWR3!g<9-jksNEY`qiQ zGLCsZHj!T1EA?^O(bCvosg`UUNj_=66qt>VIhbrdA^1zfdCA2Y9GW_j=PoRlnAF>> z7%sO~zv=Xg)K3;~EB-3&=+m9F{&IYJL`n>w_Kl*-*1Fcjogb5b%#fYL|I*$}#;A__ z{-)$lhJUxWB_EsrFug3wZn5p!|2GS6%}^}=b+7zovfHx_Dm5>xYv*@NYMkEFX!bz0 zx8kevJ+AVdJ{~MPKP=q0aPEqI3-=zHdiMT>fA^xpd;hOpt!QkaKjTyQ`du})oNTPV zVeF0^dJ{Z8=(W1cjJxT(=P5#5-?S8wt;$=pHWY=t~`>sD`-z@moZ=upTrOH<2 z%h%_gC(dp6TvERKd;IzLNuIWkGt}FQ=U;gH=l!e$Ic2s#{&%r7gxgs5R?A7Qy(Cid zDP7=4wy^4-{HL6=99#Z~Pn~v9t$y((sSTMqT5DUwO(M0{HmkffntJW9*5$CNW*ep- zIWdQ?$@1V$t=yKK2fwe_;?M(j?4ec?Y?1e#*UxSCToJwD>XJ)5i`Kea_@gf%z2>CW*#k+vf?L>L zn_lw{o#i;Abi;zJcl58F)au>0p-*%R-|OCMUQ^Q&HpgjZ?0pq)|MvU(`QLtD_y7I( z_42>}zFw~T|0{EU{ogJ3_t)Kek4xGzS76((X0PICQw}SR*N4}<4xQz=r*!Fp-a~4# zT4!@VwJd1?fdqL1ie!f?6?LXZY z9&7qHxUMu|KKktY`qt04-By@NQN5t^UGd;rW!Q z&wl-=%@zNn9XjjteT5f{Hf%YwL#2`rlx<(YUiACMyztB|{kgjr7`xc#uQqxAoYn93 zuN(2#kN?|c_xaM-nbSA&?+2m&_#VdnKJ7;@aOBP477gf(XjB(m=Dc-*x)bvi zxO$ET319jX+4$A8$@$={s44O-A&o26|A_xK<>u;{OqVw-4f`V(XYX%(t=IjHe7-@? zf%iHm0#@b(&h8i5+Od4m8JjB$T|In{{+lH@D?!n2bqn9u8_(Ky#re)Eh+*BSb!Fn8 zKc*Rqtg1U~-fxt$wYuMQ&lY57Lu4ei6`o5N1@DYyMt*Zq8 zZcnJ*tD!Gc8@_t+?$CQ|7pK?1aj0GUVz=v757lXZrtO@tp7nPL_v$MO-@eDLytakQ zyEuMs|0K4D)726$Mk$^*eR?r)xfiS33XxCTR|B)J%=~1w-}HQRqF&Lbdw;e*e;c(p zYP;iH&)x_5qDw!=<%$VLYj64ebq2?pInVCx{IJdH;{Bg?vkK^Who$L6VL{r%LvVX50!#pf$s@BdC-!Z`o)hTMf&x%K?duNSp`m}+k&l6csw^q=XW z?5$191J@YWn_T1e{O|M2t=u<1Me|18+*dQL7V`G{?!Q0l>eQIqtKH{n%j(SF7uH z_uu;&<@G++_iWabx#!*gU9);Pk!wfXiQikF{SE87_Ictn`Mq8ds{_|eI=Xi=N6*=( z;+@~P5oY-XJ z&3Ak`ljaTf?RAqQIRA-GxwU+H&%HRcq@4Nd>)no2P2TnGwacF~@4tTjpLy^5@3eWd zc<*NQSEf~V0pA(*34fUlP2IQXx&6C#&rrMi^NRarYn{H;{3~9q z-IBiYv*qpi+F4ir+*$LizjBdydH%nr+jK+SAJ0r#IBWa!FYjvp8AjI~H)_;~zA~Hh z?yFa2-`CAoo47ja${oY--oNpi!xN4ccklfDrN}P%PthJN(|r{>=LI8gtp6%=)%a`H z`TfrprWmgNH|t-dc+J)z_8FFVWHkNPza z!~9KZ!~5!&uMm(jS1+vJ?|SI}=T`IIX_FoF?9Sh8*z?ckvX;)d-|OGa?T=r- z?_%uowEX>l|E^vY*xUa(a$h~q-+Mjhjvucu{2pJWS8(p}@7d9|yuZ>P+ee3St-luk zpm`bho7#QpcKg{1f2|Dq{K~12FPf#+zv%zX-;MwNWM5i4&-~Z>Q;q-XUb^q!dTxH7 zw(I=;F~=GELt_$N@BFWvdp`Q-bmcGh(O<5gSUYba7;jO&(Ru z{IS=ghF|D+^?%WLO{4qyZ-wV*39K#-%#Zm|eo)HvcG28rT|95^JFBluU(5DY|5T#>Qz2fxqEJ;td~&biv_GsBKuUwr3*pz&tyNG+Fvp^qtZ@lb0R!DrV(MtUVjE^wixLDN-T?s%1E$GX<~7Iz0l#$F5wyxGKbR@ZduSugKW*S$@--Ba6kdhzyMy76RPQTVRe zv!!Rvn%ebCYbn$3{IzSsvaYPldNp<0wW{r#RxDd8b@Xn;?SP|8En}k_lNZ#mY6-8% zj(oB%e`TR^xvJ1w-)?rzLn^%7cYQ@I_D)kPclDMvD{MR!HYdqge$CEAy;YhaGj2yk zcQ3gh+P*&ffMeFH)lsvfkA%#Q7Q4RdcT|)0@|pdQ@>Z>0DK6v7`+4JSt}FXDiL$Q} zpA~vFhv&-HFwy?&+3x2|Ju=Cd~L zyVTqK<818V-laR%A3k|yXSTSu#rCw4BHj0k*DVX1vE8+Ic3SBkuPHMghegf48(NpW zOMFXFYP9ywzf*VeTBN=aRKI#DDA>N=fA7iOy8KMP=XqIflRGUACB+`y)Ac(0)yC{{ z@6=uQGc@8tFW-rX-Z+E*;L_K3yJtyjO9h&ytaK8M&YD$ue9qpDD;KVF{9>jduv+=dmCBa72VUN+rZ<&*F9{(7j%+2_Uo_TD&t z^UPs`lH?srd{AnoAP%G3uo=#c609vshe!RvutW>F8;{PT)wWAHJo-O)%{`FDW`v&KABU}=` zoLcB?`0V+XZ3)*`q%p5MY$xoM$EVTy@P2kzT%z3KQ-`{4UF))xm@ax&BD{7fyQc9g z*CqOVXPBNZv0@i@ZM}5o#kw^!ql15*o~fO2v`TPs%(g|VR<-?>NM7!_WL-(zU6mZ| zqC>1+SFc^U`hoMILQ{UA^W{Hj^%>n7VpDm$4bq~XU%6%y{<(02{{Ee>4fX`qmxMk} zIx7EZRqHQ)l{bcU?|z>AIA{BUt9NzU4(3F@%v%+neqqTg-5Il2OGjm|HV6~HwnO~q zsxe@us3po4)*#6y9Kz{o%nJnVM&OCqs+cd1VbtT22Psy>!XK z$hi38BG=|uOnvKfR=nP=cE`&x_^47IcTCd?k#8nj6ZzI%@SL$#%HZho&#t#Zf+K?$ z`m7enUM%^2&BL4fFP5j3ddKFb#d_De&b8jWuCk2vyl`{H(|XMfCt|y|zWc9p$b050 zS=RFX*HtGUS>3Ky$h!K)^-D}^kF?zW^RaGg@zISN^L;1&+O^Vu?iQz8`g@i3Hk_Zk z-zw^?zT0jl&Hq~$IBwbYEqkwz%y*`6*E+>l>kk$l`TWqtOaAz;eYwW1F85~@GUZ8Eb`>#q}nZEo#|C01cJ)mRLic5-86LUc<(D6>-6V*Tr8yma_ z9vK^0aM{@@Ks8s)iJjz|*K8or`rYoR&Sh5?My6PWB~!G7y8o@%!mjXbLX_4qqjOES zub&anx+>%$pMUSnR?U>KU0?n#L*^n<+$_85`>v8yHw9m|B|Z85x>bD3}=<>RA|? znJAc<80ndsTNo;snpx<94ntEgP%tw$)HAj)GgmOPFxE4*G`0XAZ)TuiYHFlsZfs(r zU~XcnXJ`lx3av zX&9?uW~LBrYGJBpX>1NU#n05(NY5PPNK*?#JyR271&}f3h87kIrWOWzre^4D~EcjSUq{EsgZd&5cbIj4Unmj6nyz87P>VKu#G`FtRk!votcaRIo6$ z)C1XKYH6TnY;2@pYG$fuX$UgeNYB*J(p16J!WiNS6C-myBNH=21ruWfJu@>CLj_|? zGd&ZK|3I2S$Db*f8ky@En;2Utm|H*(HZxE#g`RO18;g8|8z|jCvo`3QJO%KPZHR=$ z1?EGKaDyDI2o`}H;f9&UAji0wAdYb}w$QUQGqFHE#tm{59{dzHBQtO~aUmV!W`OVf zHbVmgJyQ!)O9fpcGfO>FV?$#FLqj7=JqrsX3k6FH13eQn3kwuKg4_-DBjji{Lj^-i z0|OHR$F~`pSsI~~XK$-3W2UCw`cQiJe3cmA^8<~{i;5m}ELfqjV!=+CsmwF1^%hhz zg|G-sb!ExDxXm&5e9&^K+siJV;acmKvutJN#c9{KX>L7}d&*?;%Csz_NzZGp*Uo2G zSzdMj{`cSie%9^(ZWHr--@NL*@3QyjGYBx`Y!FkChzSml`+RcI$=i%c|9Bemb+n_S z{+<6)na$`X&V0jPPd9tjM7&t zZ|!*oUbRLho;ed3H)m$-E1Fi(Y9w&}g>q`}eyyhU50k%%J~^pt(D$G&Ra8Z*zCp@{ z!}rQJ4fd6cHCMh>AIevX@cJ-i3WwjS*(%!;RHkkhxZ`Nh_`tAfHb6tVT}27JtW@u z>wmWGK`u|74Px*4KK0YGUuwobb@__kUnlGv7P(&BlP^3+afj5h%XQ`(4=?<@M@8zN z&i0mb!m_0%-z_SoubeInv18l(^!_1>Z?bR0+kAfNUpOOn>38_T{HLrf=iBeT;>?)# zUC1Q(|MAQ_elv7+8`D$kJt?=1Fjs`I;io^kod?e?sT^!+dFFxb+&U{Cip@5akld6&#}C^{_NIZe1oO=p^1 zTaH%0@R}*!3%n}D)Hpp_L$AEodv*Mw=G&|UmFa;k#dCkwirZmJ=7c3e z?95NfJ?)L0)0aLi;CGyA#Lu>BdFOf;{^|DD_kQ?s;d_vi#^ev`PnJ8`2ko5jdP)(K zSfT9OC!){$*B#V&>-FK{jg43Arv2J`wzTWseYFa=Gvy7>IA(0hZ;WBG-+I^W!<;*O zc8ks)|DONqsqvQQufKLK`5q$|BbIiu@wL3PWR&xUIUhU}mDg3LxX=Cciban->UCmM zKF7WXRel>LFX&0IzPi`(>FGuOrbi~&EiK;rbl2h1DX%%V&R4g7p_p>)Wjv>^)A@|} zOUwmR7EDXo8n~A;P56wu#Oa^sDzz)b1*-q8-4J{!TFYLw`qk;Tov%&aCdOW$74!Yk zuBkEqPwHiy(QIOF;$Ko8t9o;Jkf8Us>_qXI3{ui|&2g zJMnDMZo|`0?`9NnTQ3UYJ0y_EzhwQ~RPp({ez5Lz(SB)Y=knvL7uS*Eom%E?+g6-* zj$Tq1vP?Kd@CzRPFTmeur5yrhVKi*jqnseM`w*KF?cXuO>U$ z_${$}esJNA%=I4^oX)@SyN*d}bqz;njow?*C(Avf@fEX9nz^P*V=mJIA?fvNS1ZR-9!VQr?vJ#`+AbZ%?)|C{FAMg|72V9qWz1{Ewi|(_o$`&%|B&9ea$q^ zxm>rOaeSLc90e*>Ze_U-h0VeEPbTdqfT2`&c~N=>Kq^U)+Zo2mkKt zklx~!e&74_xs8eY<*fQ=CkPlPOsHvkr1O7%XGmQ?Rt*#&CLbM?1#z&BM;Zw`cFEu=H%JWil=(21XdIno}A<|e}3JHz)7N^ zmvzHt+a3~pS>o!tJ2}a=@T09z)wfr3U-)```|9~}_N;5`>wh&gHXE_=pFAUFl~Yl6 zu4Cf#UMbtOHT8FXaPDl}^QWnEy8kT5*%w^t=VsY1Us3UHkM=Y6^*Wlm&8*zwQ}x%a zShFk3^XsM5)7e?CUxk~j$;pY@`s-Epy1jX4Z@tdn@p0Mg`pbLr{r`rV$_ z?|Q%A*`4`$+WmXw|C#sS{`J6_-~Q8!_wv6FZ+qMSz9Q-QWPjVco3g(fpSSyd+;(mC z{QsBd$NxCpt^fDy)9|?3-24Bo->>+*_P^DKZ`SYkvDg28aJadhul~!&iT-_Z)^(3m zey+{VSibt8f8}G39emdx+?7cBeN+0)ijuio9Cw9QMN~y^JAL`d&!Wzn@b|N;|DS&S z$9nRVB`=oTSn_1aKF{V!>wMBqW)-Cr zg%tS|^*_0H^5sd^lS@xN)#P7pGx1Z}DQnI7^=J28t4moZaQ?zW#i-qL-!9(DfBBaA z#ar9G`%h_DKau=2_0!zF*T4N!Un~3eYsKEAw?6MX)@_yl+rM?a!S%9>w?4*Z>o3|` zJ|p|^^;7*4T&;Gj96J>`4-_z#ym@)!?#Ax!{mG&3!S2b&PxbBbm;YCCgELsu?@mq9 z<&*M$cWOS(o*X|v!|EneLD6B(>n9u4_o`RR?|=1UxB6CL_r6@KZ)Z0~GxX&uM-;C4 z7IAW8Pja*U&$sI3wSTUvpSII{_E|%p>uI)-WKEg`i`|?x-zM=_xBP9i{Vl)sw*K0e zSv#$H>@RPcc2{M>+z%ReSj-;>++az6U|wK-hiQNF@rU0p@JR=>OD8JV@ZLX=`$2Y% zv$jn0`ULGa4fO}@U)Fr#u;I)92&stouC^t)2HyXT@ei;6;Qc53zxDp3a+O)m zKl1;`oqx=KqtE^kYmX~`*@DJGiGEuH#(#YCllhcoA$qkb8kkn6mRf&mZB$ibWtG#-x0?d2k+># z9W~ z|J)6C6HUFVvNija9#Ae{B_%x`aTF|(fcl{FZgBB6c^<^jXO@oUM(+n!TasXM@c!%hvQu}>lGq#O*b|IKRCowle=^Q|r_{I@-oj!N>-4^fsjF=L@m%QlvtM1OpBHKVoTK~K??RDhlB;3Yw=&Q7=g!qU zkLr4-o5p!5Mo)Luhi4b3=l{{jDwwq6i1zdsKLYP16{XI-n<2WH{dk=b|6UJGVXlhF zN80@~JUnL27Wwyw%ac>h*UPK>Uap>cXvsy9xaZ=Y+~1$EeErOJs(82HkI9~*lO2k; z&0jvbFm49-WsbSsn-^^M^in*%)XMF0hnC(^i+paM?_$4C)fU$-asK!6Xiff{>rVS7 zr~OhpJ0o0YN$#yDYNh zYvCHxEoF`8Uw_HHVVZfVZI**({I(epH>9fmO>3F9C;Is|3vca0mHGG03oo+WKl3P% z(@FA1OXN{CQOjjvT`y1O_S}DZxYW4pXW`v5l}D@RPDxrjJ9N)%rmHQNJ{FgMUAXPh z-ndVP7ELR?`pI0szS+}bUxN8j{d-e3T<6~qw&m0!r#<>Pt^%c1>9U6og^8^z?y~yD zvn14M^Rl-GdSsK!_iT3FwJ5>kkxkP~mR1&H4mBYk^%bXNCq?)KxEQo2XdN_Z(qyS* zVQe~4xViyxw!qvFfw3*H26gSC6Yb zesxm4s$cTuC7GX0T=jBSWoBhgQYscMHZFR9qSoO1%NWs1moz%NieCPEb7Euu@kQqa zJ+`q=TEnwO?Go+5G;rf1BrjypbK`edx@iX})`(`DL9{VX1oC)%x+- z=?8JemnX(tshDH3w_>{ASK(*vrz6tO&WOEvvr#Mm#?Pte&fYbZ$eMSu<)A>kaCq?l z$>+NY3SYkZs(q>Qo!8G@o5UY+-YH_6yHcTK)&m*#=1t*G1)g3~e(}X+xz5x4DW#Vb zo|bO-7qstJ{qKc)&NuR%GWWkM{BKL}Tp!bi&y(a0e&;N&`JQ>hd*>^~Q%n9`;(h*g zeZW31i`gCLH+;=F7?QE<&Qm=bug`Oq?#W?z+VTC7&aCIGr&`$#yne&Nwp99wxMuRE zi@#&1IM*I!JKe5%xss>)7CCslfi!FalxqyYx{U% z*?4Z9xBoAGX7@SXAE_1XasGJFo}WEagO3#Nt?|+f=v&QKDrb9KuX11L{;OtL|1X5U zYS+!y$zIdEw)EQawf?scgeBZg{k^<)-rt!V*)9{CEz_*u71oGXGTYw&|Nis-^Z)Js z@3;Rmi{aX%sh6UDdQEU>-uEx!spCt-;5UCvvVXdIr>U=*zxE;VKL)at3nMY^Y?>2EW>E0^xS+5Bc|+Qg78S`(IgRvH}* z-syHR%K5$B>ylNIIV?Y~xvMv!eE!y(hdS&JCMm9QI~y(_vNvp_h{3WGQm#p@2XAal zjtx{cx-}=s-2HaNisEgqy%KW;pD*#c-XVC!Mkyj%h=)%yM(D_-gh?*^X^KHNw;kD_ zXV$m5$;xbLvZ+1uS7Sa+_FJ2uboBXm#?EGVQk5$2;-I5)kojL%+r01JQZ9+Haw`dx z${#u_(G zMavI$yWUHCpShkTE}v)e<0>B)_cJb%r8DzS-<;-YzfR{m$F1<(u;^zUKX`hI<#@{W zNIkLst#G4kfl7o@nJCMxut}@^!ue*2uzY(5Uy64lK;HRp`7GB>!<-7#{X??qUALm^R zj^6q2menbq0J8wB_-0{O1 zQ|q>g>Gki@e|1*FGb`xYM3&c!4b^@<%UJeOVsVmXQZw(;km!BAONA~=WR&&WUY(bF ze!KWh?Kiz;ci#mv|J1vcI7_xWcj`8^+g7*5W+!bHPh>SqGR{+Tdw=lnkvEq!p3Y>* zY0KTvK85{J!^fW<8}F92n_SGD`C`Kk)g<%6E0qU4Wq8?)o7b&L5a_&`%ksO)G0rlj zAYjAKN6xEQ9Isd;C*KK-oOx5u^dz^Qx=QLPa~;iJujg%+xBc#Scolmu^OrYALT`L; z+Vmt~V&Q|+`n|>9_x!iG*X+pip!m+Q9rJ1z>|wHUIT-T)!-`lVOX)|lVhQxNv=gVUU@y@DSV_Paly(z`6@B3tFZe}yGXC$~pg7OtGN z#MNQlq}4B1S~1`4W8JjIq0v?ILMbP%w^I()dOq)u}%(MmmH)uGe-Z)BioNRKmPn!#A?Fi zTwtYCWP2_oecR@nJ8$khyYu+Y`;{juZ)KKdHP-k~Tz=^Cn~Aoz!Hml4Vip05=UnQt z+JES6;@lV0)V~!(S9vs*$FO=e&2-7y;Co`e#f`!PJN1niWye_9*(K=1wrmFZf) zt(N|Kcgazom2Z3f_wCWo_O`xf=~XV5TrXMv;I74M>C`{ff72w~|J7czFqYhV+$u}$ z{IUBFeX6#V7yW$Sbb9jNnO0AZ1+F`$v#sKj!p~V#R-cr!3_UmP^V7ed6eF2$uH%&F zc*3l!^M>_sUO>U_zbU)W$V>1cZ2O_#}eLErvayf8WYly7eE zxr;Gndk*j47I;WaQd;*$%3-Fxp6NeR_V@hMc(`pr$*hNxts&BvL(UY6Snye^+!cI& zqA-FXV3jk>rux3lvE7$1ZP~Cr_iEgAzU*`p?apsXYh6=b{C=rX zAhkxs_T2C6wP9UyU#+g(UK{3_b|x=aWbeVG{0%R+SwzqBy`&@Oy~;IfOX6f!-LIS0 z#%+q4z4YuQxy=0~9#*<5gPbFnT#wAWyy?`%nySnx+Y1X%`0~uwFk@Y#F?Zvlt)?YT zE{1(S*grl#-|;h5;8=_1c|+_3!ctM5yKZmICwty{MqD(?Joz`o1hN#4s&?$@R% z#p2r}}n=lV-L+Y1lJ~H)+AC`O*slroTV( zCxa(qf-7s#SEapy`Pa6;?2>ETnb?@Rxn|pZ*(9kA5uO`&E9>-ihGmNs`-enW#7&NV zFl*M)api``ET^SG)?-X&nGH=Q@AH4d3$;pOL6_4MPK>#-x`O#zmvNs{pKFO z!(wwZ&JE@C)U?u# z^JG4=KY7d7wf9qs66fz_lNgLVne?`=Qj9wzzofi3bb4&+A7ioK=aQS>WgmzY-zNU0 zw&b(2|JQWK5No-BZ*EeT^DQhEERM2E30e6$f89LcZ%;1OeR>jCak;*HG572_9IF|Z zs&N?}j`6T`;;Ss5r>LQGb?Vzw<+;Ug3*VNn^iy5%^~;wt?=-*mwBB&o_I5(=)7ytU z-8biM&Yhjh9~znCX`&fYHOq!){iZeBHmrUWcHFR&y`^UP6gJBMhnX>6{BQCPTKG<1 zk};iGc(HoW5C1I|yN=d{Pf2evko*{|q~wr$+b${K_Ug1V?1JAqeQ(}W+W+eI^8EXW z&h6=`RTXjzj_sIwPeeK;{?nIBzu(!0=Gxpf_|_iYb1d`q_A}8P^LovnNG(4vJL9A4 zSLeysZ1G`HF8zNB({_6Ei!Y?65!PME*wiIkH1dfDpoNzVOW)|l2Tt2jCTpy9LU_iyqX zUg*-bd0Axf8li}M_OkYMclDZGw_TXH)ObUiakJSzORJa(%6YGCVm}<$i3wb$FQ#cZ zX}jyEZJsCg=1!Wl^+?6Zisa6T9TO#b|GwH_@0PeEy6V9prKbm4qnC=xFgQQ&z58k2 zh2ACWFV?4Uo%+M?FqfTwLGk?J`x6cdafVKhH!0iyU5+y$=EWQtRsV*#3*z@am}lqp z&vtC)4_ANqN+ieQ;MFoCqf@6vd?pt^VTwHDCD$xj-m;3f%D>a|@+8}nI+a(_P8uKE=;0xaS-_=aoLWcy4ib@$Su6fA0Fc;d76%(44?~ zPTi`D{1=J@N=!|doD(QDs`B1uSJgEyJ0BO5VoZSlgRVCnt!-#uO*Oj;JT-Ri04IZc}mQNxwSi$o{B&0Y4Hvpado&yPRN zPPsl^afriz;jtV+GvCRKR$q@yRh4n)>_41)F8_AMe9c+?cck7jC(XG~s`R+B!tY$} z+wQQs&bY@nepa`q$N#*O_W0}5>Au1D(Rf=B< zoU~#4_iF#rMbQeu*8X-zPcC1yQMD4Voy`~e-A!94wL+)2+TCLzi|XxJ`Kb<`(=7ro zygc=6W9sDKyFTn1rCFP^H@~dq-x;z%cpC4{pT=9n;{28y-J5w+CPITRh#_cUw0_Br zJ5e_}xeDb~6^o)@^33_Yi_gdD(T%4rhHs4Kdj5Iha)|YMfY+j><Lk4rTv;IiGE_XV**>S2;!Pzm5Eh{auY$ zUb_2aS-^rdVG#$6ZaZ0~oZm8!XO3X7Omy>T=Q&oH{K8N8q`97a_uLfp+^#L%+p_b!k9A^;!PgtFT;IOE z+-+vt^!Rs(<#E;YME}DFHqQL!0yY=|wd9zh#wVG$@g>e7Q zR^EEr)bo?TX00u5zSndL-WSr=2Cv@)U6xz+Uny}7JioOx$;G(9Mi5` zYhA2yy*r9)@z!N}F(&m*OK#lw@GB$#$Hz2v#z?wJrStP@{hYL8X6BjccGK6lA2i_l_A7kp&Egju z^h+#MYa^^)9-6Vk&^K9S{^s;4R;IZQ=Ng(AeVLyye!LkRT%8o`|HhInXqg+&%v&O@ zfr~Fk@M)(B&9$AoZ(*jbO=qE@GxueoVj*s!ZeeZVsYe$5yHUR^Zc5h#tI2N`8ziSB z`m`NR>wWp9S@w6ugC7f&Pv{GObDg<8FfsfG<5RIeD|Yq^@dV1639L)Gc=O?!ZjsZ^ zm$E3|K4Y}WHY%rQ_7;89sp-;J+Lvce$#>bk`;v)i_3K{#@cUKu|Lwn+_gE@_i^$BMuzHiZzeQ5`KW@UYHJUeA!%H*@Ij_c|h-nq>XT6%lg zi{L}YSLAq4Tza$U)~CI$?A}|hs)<`IS|hgFd2^{$*!DA%tB1SkiOtp7c z+Qk{Kg?JX{9G5*Ui7{+4eJg`MJvy(oBjZb9#>Ezxte{3r2!@;>z8?1_CJZq1N^HaoRetfho{_c2dZ}0q$675%lg@T!aLP3{UF6aC*>Glm;?h&jv z@5axWfs@~^jM{e0A#iJE&!5dI(IFGoCTv~t?B-qLMcQQ?*JOB}i^OO)c}hIvE3df} z@ObO8Z)G~i8;_~gi21KIe5ZUZW(WU!^L4LQC~%dxpWB$SD4>1yA4^8gpZz^Si$(um z4vsi9^Pp8__nz3W)ES#tPi_$0U|MqS{e$+1B`)6ALZpj62KJq4oqlfaqK*fNxl7-_ z$PsVNi2tB)h4x!jZq;p ziqp!+|}ePwj4*R-b(+e~cMWO|+Cww!ACmit+nPJjOWnV~;#v|p9H zoo>5%zU`0gA76^srTkvT`uSJ9!IK{C*I_);)emO&T}*i8p!QaSOYH|c7xxME{DuCO zDF^2pGhJp`v&z}ncfsenb>D=T1-2A2pIDi7X5Y2z|K2P(`a9m{)U-AG^Uf^bep_^G z(XwE6t7)?hmHRawsDIA>`}u^U=#hX;&mA*1t>2u#(K~2y_wk}mQD(7~8ZYOW@E7}j z4Ujn*uB~z8O5l+M6K*+kv|@_COv<6g6H|cjE5Uy zZ8kQFEceLCFn(fvXV=Txss%}!A{6W(;e-3clNwIS;=|K;%PqX zXX}5be;oYbBXze>;rGV7^*iHJ-ESmAWfAgQiVeXH!B$s?<)3u22=Fi z;LTT+x>gIV__(ok(&`J33Ou%PTrJ|9nR|a*@2-l4@-EX)bk4CkdE(rz87V2=$}SW6OVmjO19fKr*rQFAKA@mKX0?2lJEQZ`tY%L3zr@9`pmku z`_J^xYvyJ4<+$&2_7ZiSxcJb;7a3)53g47R$gE23vRWE?_=9P_*;23NTi=`dc8es6 z95}`GcGs%Nw`mis3l!dL+j0MvyWqS(s}!!Klq_riTYTutqG#W}ty+HVnO7zAwriz1 zQ;o&e_`E%n(Jqj>_u-!U_0Jq*pMP)NaLZZF`*;oiCZ@It^4+Xca#=KfbE@n7QS$2V z>GtV9)2Y)Da?Lfb^N!q2sY;7aK2Lsn=myO^mER$`U(2ueeBb(x{GR;2`!f4=>-_ha z-s63@a&1_SSm)=u*NU$*Uw{9jrg2fKI`qw}8@wBfte3{N=Xz+?uW|32WU~DDNwedv+?hjXR4dT z_czTg=UiE<7pHn;M{=sM8SAracgo5?Nx!&(AEw-SU6i`B!f%T2Qj??`pM!g&Z+$>GD+MgQ6S(^OD6>8QlCLv4mD+fUW+*Yw;aw>+vxGiMP;hA&DX0f_kU__r=_v}rNtjetKJG#7>Gt1d}!(sJ*+9pQAvH_DX?$JG2 zXkvNIa+@`u^*M`k)@uS*nyu`)Ki4p1x#qUaZ?7G8`aPSj5w^OreA6+d^@8QwVUqQa*p{%>C28@;{T1mXSWcKQ{2sZMlVhUXNe0GOfP4cI%3(r!pq5T)a-} zm1?=hqyC9Ua?8F)PZ9hmuD{WG=Y`5gM(cwX8FDY){KS2|ft^|38S_sCI0cw{C=#VLEsX!m6iNjjQhC#5bbFRE`*S?VZk;I=$E zr^n@;bA+&Gy6oQDIb|6^fm7dJE>hZH$fT^a_Hxiux0xr!x(^@ApZudNwQly4tsi^a z--iX|&PdkYAbMM6gX@XbNzF1f5ogv3KAf$rGW(`_-BOKxd>^2}|}&|Usgw=YhvRr~iWqv^{2*YgvPIXt&N z_Tj&?T=Juyp6Z32-XiOl&D`NL?fOmkh5tm=)-?&gI$AI9ZE}rqzj0xaV8P-8KkK!k zADRkJU&wExSTOZf=#N83Qa>EBW?C-5YZc`a)0XnX>w(qP+lF_Kq`v6ZYmDyb$~L%t zMDWoEN#W&{GmainmFQ9To%1YZZn9`ca-`b2rs=*$g|bzfRn_toYx+B*pBCrr?Yy0^ z;ab9@G7W=5?dQ#9CysRT-{NN49#}g?%&1V3En_)L-t&@IFV+0EyiB|$^T&SAS0&-; z3-{YaJ@B*Zzj^=UbHm^6#dWW)&$jp&yk20(?8}Soa~`?$-_!XZv8wzrqww^^2`9Hl zT>Q@~{QU2Hu?m~_>+6#rU5V#^Z`gSH`lO6UD)HS)AL8c71^4Z>u$@-N#s`-7|sw4Wt;o^T!;pczNi(=j%OW!L!|7+ft*LPoRFMpl?{@VR}z5mN5 z{}-Niea))Xt5(E3^o_o8-a6$-$HRM?q1>;hUDuD_bI3ZeGWP7JU7JKhPfzFl)VF%w zx2}0#@9p~Z>(j2OPrKR9uF{Ubuwlcdn%44DKJR}#z1pqUxA(@8*UzV1zj|5co?^3+ z@$RT)XJk&?P7u4|XsOe{W^~-^P}qbt*)QyJlFOaN7k#eqCe``9o20ATTbeizG3?A`i_sqyQLi7b{~0X zX+N#=ZuQFJTEFHwm!4jcZdqG?ZgbB(Bg5|SEpbzhFa#dn8R-__nXRLmGjqk`#jlS> z?>%se^}qQ4H@CW3x5iazFP;{<=)cp(q@5A#{kG^RJ@~U;Ey8gx+h3;RJN@(pvnyQB zS51Cb^~n9I|CZ+UXMS!A=~*RW{l{|F&)Y?g)#>`@8g(ReqNG-?^ICJhGC-{?MAsrr z@t0ZWuTS$cwAcHpW-eI37jFw)~W@@2e*%x@SZ5zAOz^>viJZ^QgKrVrIYZvY!^~R~^+_&GJrk(t4xU zr|KN#FS&R}9G_O^S+sKJ_M%PyjULL2aosw7z!pw6rURVoB#GJ{Y=5_ z%^TM0h{QZCzE*zr`pxWx67l+Pmc>Lke80!M>!qja*PND(M_Rju{_NbVCuUss>W1s= zzm~dDAA~In^d+u6ezoqGQSrG|dc8cK_nvzazjwnluFY%Lct84j_u1Txb#dxzYFjTH zOquaVxbNSkH8J9=j`-}?xhu6f-{@?NrjjpjPYX|#)KTM(XL~}#**VYYFSSe5=BO^$ z`{`A6{)fEFxmEwwiu{(z&8gSUe5aLodH)^r_%*Tmf6j6#&W`V17C)h8+JXI<&-7PZ z*Z)38`Ci@5y$%_Fy&jgi17mKdD@odM)yQ^BJZ0 z`xoX2-Dl)m7+JTLKYyiS-(RV4^ugVdH8iIzf0}eD8BF4s#zVgR~Oq~Xy&y^O+9H^68Lg!X?`xhjpMCd z*EZ%K+R`^?f9K^V4ctd0cLp}MUEIo5ldXTC%Vgdp@#7UmpN^zcDn1DSbll;|2Pk!nj`&ZCTM$v%dGJD^r%C_e`Ul( z=1-G_Yn`{LWO`}kc?Q4Bx6#p?7T@8%_if@wuXoQZo^8FmIV}8r@|hjcXUhGqMeJCA zpEobH$zhu!R-^E6d1&Xw0#2Ie{MO6>BS1B@XZqz#*n=qT>7958L4?C3cAJy26{%8 z#)!=m26|=&rlv%1o-i_m>=e;8Gq=<;voJSRFf%sSGqW@`RxmU$GSIWMG&4lmI{|Vu z)Pu0S6J`d+1{PfScY+z47#N`Bqc?lmD?+Y*v)J{`F8!C!vb3svP2Ra!|=#M$AXc3EJ^ngUi4QSPp;2#>UTx6;)X#=NiH z|G)bG|L=R>SI;?o>+hS*=U-*dH)iBu$Vgx;2rz!$rCIE^t#%C~$8;u*`MYZ#tY}I-eg&X|$W^PvZU()M8m0`*`7K63(%(Cy9${#pp^=AFi z*ZT9!a!^cIBN}p|=9>%wCyF|hUnFq_R>(4bV4ZD5N z{@J4|>I^D>)#FXi@6Nk>WIp4kKE@MyGi|aT&AC->C(FH{N=#vI`TTq0p*xjiA2aOB zJMhu9wko{8qUx_}#DAvihv%|<%lWcb{@pLH9W_nc-k9%X%5OfNyf9HXa^KdP%}N{p zuYW4E+oma$wNL#KgU?d`avO#N?|t9+?>Rr;Z|i(Zi)%`p!uC83+73)2B@?)(-uSrT zljWPGf8u7GVoN%w_Gg|(BD;)h$7JO#^Nu{=j_^~u;P&m%^$()o*0fK5sC>hj=L2Jn zb5Dx?qY5FP#_CQ%J2u;%wx1sit{jqDay7N$Xw{0tlSGRWq;lL=w7%WI)ArcPDS&zM zL+2>I_(?`{Bv1H7@EPuTq_*c#@(w|_L);r!%N}N3N>sbkTg$!Sd+ZMOV^01WM|a<2 zKYp@yOV6F|GoKx}{-nC*oOOcmx>O6hn>Bm-)@DjI zF~0Nr({sMQp=5%jxD!&D*7k`*{ThLhkP+`=x7Y(xuzy1DDXSgIzYG+rE%H&{~gD;Ad z&z*ETfBbn$LGUB(UF`37#i|MJjtCKiVpC$8n5HF4Kl zPy2Bw?l+!Qr*rRqgG@Mcae!82wR(d6r*O$TeXGMCTZme$kolR+KCyX1hP&QspE*r$ zj@12dopMF9;yAyn=33_*1IgINEqhshrtz;!G`e??HT6a{r;pPrT}A5zlZOlSC0V@_ zjISy!4>`mk;qmLit@}qx``x6zHEMgRO?&6IBk0MKpA~uHKPzlmK3IM&Fm);P+s3p^ zm(3~nkxABaADi{Z1jAwii$p&ciUtpvJ( zWGdNkWv<&ZrM24*QEts|kDD>r|yCIeziDY5eKC+Ea~% zGL=(o{H{%oe3FzC?W;DC?aAH=7A~wog-iIZAMAVDQK=UFCg9P@zVv|Lc@6ana}EUZ zFV=a`shwD5b@Ly8k@io4@P8te!pC<{;G4K^&*ne-A0F7cUQAbJ7mLPIuL^F%FZ@sb z+)Yvc=^V3sh0caKRd%1OcCLLLX?;8B{IC3_`dt2%NL`TSM&;V` zr>qOR@BE%PBfl|dV?1AP(mkiBBi}5FOjrN!%1&js>;Iv1{y=C_t=6d*x*s^!xcN3Y zj;hw=EuIR?6ke@MuSmwisCU=*CZyKk04pIJ={@{bQW`;`<-?-l!U%u!(sXccU{~$2o2v zvt2vk7@Fp*PAHc@a6DkvAWjtC*(c! zzp%JUw^j*X|G?n&R_>G7&EBdHqEGI;RcV@(sQTE`v|M?QUflk+Jr362)sj;g zmxMz_8P>b(pLOP77thX5YD@kZ74cWLm?(>@Wysd{?sNQqRIu-{NKC`-&g@6iiuw!Q zf5@uSu-xvS(^oQGzW53^hwtc$1Ze{#y^B`iXs~9n{LwgVNK0Nu*`|xzx$ugJajpa7Wy{>GU7cl39wXc7*|MWR})^}f*Jbn4< z@?pR0bLW-*I(FIH?|!+}#dR6}+2&isw}fx!&t0EA|BBt>TEE{@-=4npK5zf_zn$Nf z-TlX_ni{%e(}7d8CH zx$31~&;2%u{oU0)>NQgKJ@V)EpND_q|J48K{KvI_)c+WIZcb@Wng7Iv>#^NRgIao^KeiR;S8a_h>u9`pY5 zcIm19&wMO8Wp$cz?0=qvk`&;~gCzza+D&pWyu0^3BAtCw;!2 zYY+GG)qdY?ZC`!qxqN+Yo>lGjm*2{Ec6|Kvt?QfO+pTXO3qIa_>-o0(s!27a;>Yeg z^whUW=nEU}Q|SD7WV!~2wvgJ9kA8a7EIckQJGxbav3zm3L9@xW^+$h|1QxnKy7_TU zg__uUXU*B{#t(wN^q#u)|7zWa+W6nmZ`*I*&##}}n^V8wZ=Fy07W<~>UEhAb-M;ny zCA+JiN{Kzw*h-!{PFEa?#V2O=S0dJTbLBO=j1( zg4@$49xj)ydUfH{`S7}bFP?id*wr`1mY?`k`S`i;hH2k-eyDu-{9tn}|2NBsvJJlv zPHJvt|IC*r`$fJ)#zacfUHYn!QZ6;v>Vorw6pzugTu1Sa81a z9=jGl3;z%PAACFB?tc6B+vRWj-?*3PZ@M^1Jk|e%+@!VB)=sk3ILs0Dtu1GFPV*bV zn^HQ@PbqEknHeNC{hykx-rulatzR~LDSo;7Quq>m?{cqlkK0RbFTK5l-#gqp+>_m- z+SAYT-4q7-=jleW&U*IOHx#{7nG<~eNn6R)@c(OV-@S=FvbF1{dj0L+T1>Z+>jdu~ zxnEzWzu$!O|H}vKlMcjBUUl|&{%ec(r@DWv`}&#rf4;l>&q<%7(&p^$`Y+DjzVBu3 zh6(ezv>#?iv}~*8v}yTx=dr{>6Gh9sqca|{{NX8IbabEWKTh_C>RaxdU$FKctKXvc zzjUG=geNjbO+J~?uXoTQiK~h+e*tejckQjcA9%eER=-&M{%}OD)-TTT!*vz%b`IX3 zb!+-Be&dJ7T>gRi*E{WtuNSu{+e|!=nc*J)knxLUm?Qg?SgFkN9RugJAX zMQf3p{trV7*8Pk1_w?B~&U1PHAoCMXmH7EdyiY8ztUW6+cl(61AJ}U=W}Oh)#A>@V z_eJcMMd@?f>^!6|3dvU8VC(tWFQ9C=uzb_xCBnv4@AMZu-^~4Y>hu%#ovjgx$|l0n zRZaSf#UCm7JyOd1k`mWyfARW%rhO`Mk5ug*xyQdQ{lr$4oj-AV;P(B_OfR0dc+A-2 z{cYj&?{+^M-n5&2d2Q?|cCu~p2hpDbdrvxl(5zu&H!%7s@z1qRN&Uq6jP80z{!c2F zu66GHulzrW|FT%_Y3(+>P{`G~_o2a33H}cuPD?}Fo`yJ1RdEXq@ijH+&05*_YGtF; z%FZVjO0wMYmHMMrOue;YuGI?R}rBO%td5 z<>eliRHA+fmm8OBZ=Vo-=I+6}Cv_i(6?`w`FW_I8zM-#rR`mJY2WCaHcdWfr_Kx+P z>O0YQym|Vz2lpPYJyCn=Z@2ZK+M~6nWuMnQs#|7%IsV1^FDid~=PlZQ+1^6)`J(zu z`(I?Il%tzvG|kvPu4riZlAG#?tW&|yF&l6z8s$Rsr*y<$I}<= zcl6gY*tUfJ$@+38Y*BrgeLeGkgZ*vsr|q5Wm$$!2tZJ!q+`q*AW%!ruU%byB-H9;_ zKlJz1T$fti)^)kwPK~WG&*g5M{3x{2XI;RmE3-`2`sEwUx^z}-_1Sj?yY9%XKQGVG zc1Ut&7`xk6jv13Ve=65;U)2FIKIi~Jiz3TUux7X_r9B>rpl{4CscH`(_ z_Z}J3UEA``+$j9|Slz^@#dEU$%%Yc9GB2mcm=#}py7{?DoMHLBso}A;XSZIDtv}pr zem1@Ud>whg#YeZ_XGCrKa&GrD-TlAkiGIJg{geE6`wtIRUFEmkllE4*-|pLwUF!2{ zUcF4eR(w9MA}{&#vT0|dx8+suE3LlWH&=hpj_mK=|7$AGYp>t;?U!`^zOUczmEXI| z{(kTOga7#LfBl&3Z*N`jA%4F6t_Py=AG-7_j*9Pj#2xpMb^VW~@S20#`yPn?|9@9o zjAh}X@XE;Za(BIVi;9biJ$e50*^xyP->f;)Q=lR7;rAZ7?WbRExV=WKc-P5{3$M3i zN^SL8IpOpYp?Qm07S%GAh!{I>n&ON#+e_!WxlJvx@DOi?^TPtYEw691(>=@b{|q(%GIr5mL-UU9@- zt>FwxsoK0~)k4qf&09CWo~^1_k~F){dFed?i+_iA>Iw(zUYhXEJi+ytdhD9EzjL2H z^H^eOJ$qxv8m`Q)>^G{{x|1)ij(Yj!fXrNRV;A`=3VG_+zMgRX^1G(zfOiz@jFzd- zSPy4SF4gxb+R`vVdS&)9-Zkmv>Hfbwu5DhhdHL&4Z45=9#0=;7=1*(i{V%gLEqQ*X z?X1q9`%C;izwt}SNtopLtljP(?98>j*=<9oMW)+s|QEoQce}d zHb*WEyL+bn!~BqxSKd*nMNhmowpRQ$doA@#{j$~4^WW|FtS~KXid9WZ*Ynohywm;3 zovQQ2ub%7p-#zlM>8F9LNs>?S zo9$~=UmT3iznQ}=_9rCsxtTLlV^Mjr_ks4}e*dS!K|hVoY&MLack2C0Mxr4<@+caiDxs0{%tpS;=;7|;-WW!a~TcUDYeI=}7|Tb_#F z-aw!0Mal-TYRiO=l&qL>PQ3bg_tTq6mD?iL37i&PY2;me-pe*=RjOvWp}EYa4XG05 z0cWyz*a;k}(YO|A*CMU(ta)c$Qk~$oXhZpy$2>FmpZx0j${4Z!*dF_9k@xyv-wt|v za`l|%ubemBKh~|;D|J1fH+z+v%EoD_9NB_=ow~vXbNfH&F{$^d#F)+ttq3ccTG852 z%yC1R;W%eS*n^whuUl=OT5OXEZqyc@zmdm%>chFG1j17-iX|s4=Q$b7X0(ncSU;Sn zl7q>K*NM4_<$33$(!iK-k@o^mlLU_JtSQl)Veoxf5q~UG-kG~4p53>VL$qFqt#Hh6 zn9;nUAun^H#FnXQGRKcSQ{r)*(O@8-$a~0*#WF;tnniT&0?|7GR#P5N+`ZXs`c%=5 z%0y42@?Dd5-ilkWc2Co3CzI5JQY?Ja=d^mCJLLX$O{IXwCO@_}P8H%01(=*G*p!r+ zCr)hSpV4?dy<_o`M?2;V2yw_51+ty1e<#sdv6Wr%`j2tSH>v(lqCqHTkqW7E7}WqRD_d2Eb7etG=z@a1mxAOTw!^Vq)U zMmFycefG1N{%9x5%EVg|H$@i;ccqJ;*N+R^v#cWdVL&^NcvfWlb}pSbkfay;wNw`teLTiRC-<=PWCmlXk+w_kQ85JB72t zj665En6N9&dMbE!MaMFgMVfsXT*|Z7bSw+dHKn!MN4D!rk|>`oZ5Wn$}9^V zmmBvsd7dhZb3Cn~oekyL6)C*{)d|x6bC+xtcHg?3Zt0Ov+i&o=v8@ zB?kG0)&fGY70Z>UUcb6AJInmzlXKRu57dOVZas9t`~KeiulH4WSDF+(+u(L?-2<vQXlgffnwd})29~t&IGrm2~dy6mU<-~NPo-E8Oob!85;p|hjwX4j3*33;lb=2_b^S+r? z?`EugG-KsT!e*S~sJ+%1`Fuyj}I0)q|y2}z}QpVbL(HlI_x+uACByJq#H`#xq9 zeW#s$cQya;{gV8IyMJ%&HQP{~oACXW`WNB%sztV&mdaFJU#P9|Z1zg8PM$jtK3x53 z_WIcup`AOIpRby{xR?Et$chWbVaZdLIwr(!JQbn(+DS7xHdBYeyEHQY)yv{76PE|Y zTIF10uWH_U{!7*$^YXk^AMF2_m%qDH`S^L?{L@7r@878mS28d<7&F6~{{yGi)kU?R z7nr5(s^mNr6zE=D{QTNk=84OS*Rz=2wwX3(=AP9hs^@&3%{$9t@cmD7p&QGjhRbL7 zPI{nW_TiMs?K7$JvmTlp5SuxN!SJ zT$7G-*t{3MESOSY)b5>Nf2L{oL-`wF9`_oTJ2L2Qd(YmtA>MwB_q8<_5G_1XFn-?eNtE8aHQJ-uMG!w zTO^k`b$&g2#r5=uRe~SH%pK)?pQzR;?*3^mH2FbbkemIZ`OVuOT73L0u-|l}%0{h? zQkNd6JbzVTIdT4s*6`jIwjDxw2Sjxm+7tCxE`C}P{)q46?jM>re%b7CRXX9v`{I0T z&*J>%--*_HINl#p{~)U9;%#)2Y1?M?#y;DRww;Wfo}D)@u(vtz>Kup@=bY$e)h2y7 z_krEJA4YW+50CA1KM-2L8^eG4$bFs~p81Cu4+W~qI=UB0A7Fg?==z&-<#TdwKKmHk zJLZT?lygz&KC$_W*1Xp@n!n9$FFBG>FZjFsu-1{6RyR1R6Xf@_7ys+Ac-q11X+Nn) z*?dy#6TKq+NcVZF=O?~j*;03?@XpyktN(oe*e`VINOR}%kNfxvn#67IYFv7twB&i* z55D>Ovt2w{E9bjqOi|vmOIc3e=Zp6l|2>m_NH9%kOg?>a^;_oVM3Z&DqIQUu9avrQ zHm-twU)y~_Z<#T8M@X&6dWb~{f$&E{J1%^^>Uv()0d zZpYc<4%3E0d!u^W|`<;TG1gV{`cZ%K-%abqfx&ATGu3!F)`G@PDu6tfk zoILAk{`Tlw>7_oeDmFZRTH&|HsxGp|^Uu;B?jQAqRvlS)B>Y9kvxicz6SUTSbgQY` zc6&eD&&QH6j|G3Q?Q@^?ziG#Vj;0%hN988wh3MFAQS4o|_mkf85`&MqM{$ z`Hs_n*($sD`14JguW|6|^9MJDmnNv}6`B9gao0Sv%l;q#^#1EKESRGGfXi@M#)0LL zXYTf$|IGhR;k&5+&l0=&^5@P!kDpvH$y-HRb+t;h%6jj8lV2@K4z@}+o&E&go`(6HbA~U?O`el?=WAxGchrcVyCzpH_;tz55 zb5sqP6z8#|JDAfh$vz2O;;nh=vFMVv zHP1dhRJ+u1;{~7bi@gt)7q5{2S*h~JD^KyI#?Ivv%^a&VKg?Z^>SNWwqE7JBv!T z_bd3XKeT%fmz`cuOfZ+wseRMdy7N{DzId7cgw0BL+2r3l^G{kuaXKe*nNR@0j1EEYf?}?LT43QT{`v z9drM!xI1lu&e!(y9W#5>5C341J)$nOIKlSr33;E0j#)n*>}BzasL|F`KG-tdL@gvm zqUcA(x825docky2pR}Jb_j2ZyS=|rhDg^#@UVBowC0erMc(=gp#{u7c+@&Y7vj+6| zU+1n`946IJYihvtHIq5(r1!(3441RN1#GxyUvT1es_8lYTCY{|hMlFeadmQ(e#fa+JvB}^9{4Txp7BLn z_KS&Z7m5WPEUQ;Hd=A;idqMj5Dt-1B)&dC(Rife#ceUBfX<2wr#AZg*`AG(Elp7va z{1=R8=s8r{=eFy59h1ScvWCKlb@HqRa-}DaL^G&8l+rtxzFTB|?b|eFV7bU{_$yR zG+ksJDgSffzly!@ET;L*`@{J8N$1;&KMG?0^K#zj*v+z0G!MUikga6OMrZY9Nw;tE z{;XUwub`FnS;=G*fd@-2Ik@fEapOkht2CY;hmX3dwzj5osj9Y$74Pb?UOi>c9q|WT zmg^r1Zom7k?vlH1)!wt;7fp{UWt0Axm$EjRceQQV?&pE=t3I+8PMQ0|Z1cSz>-8n# zm$*N!kLYppwt2PfQ`GKhdy1DGxz!ot^L=;Do^z|Z#ph^thW|ZiH_>v|iYI-ZZ3j7w zoHaiDzPhWcv9a-BHq&*s@`H@KOP2gM`yclInnJv`|KFhCX%AOQTBUq&ZDu>g787&P z>wcD|?WOHgdvY~3POJ;LJX?|d(o5+HZYB!HrE5BUUaBN-KT-bhY@EpIFe5RZ1&6%9 zR5@#3%sHnqW7b`-`!}x@J5;vSh6FAZVh>ULa>Vk+eN8FuqN?KV<$oTDzsQl`>=)2H zS9tPJ$Gec@o=cv8e5@hT-2d8YL(H)gTszfYpOz@}mph-TtKR>bciKCiPoGz<6Fv2- zw;;9Esrk@4K{>`6(-|=$G71ywB4_Mqw`MhB+H?5Nji>7+tqg1;6b>G6ZT_A9O;kZU zI$Z4H)VZEYDnBg`oHd{9cy`sp=2^~%k6p=o`CKmL)#s!~20w)C8@Lb7{jo5_=GB6Y za!M_Q>_$$zZsuruPMe_q=OK>`b6w`HlS$8X(~fCuN^vhNv^cEdJMG3&G2=3Eu_+?r zo!3(g$`;#7hOW*&-4U9D=+xon8GToLQ)S2p4BDUFZ@AN>Uh=m60e7Tuk1bnf7dT`TOBeGYHg z_hu$f>8yilyKDaZIGt+dJj?3K6oxV_@+xy_>5JVD)&>JuMjP4$W~Sr^VN7qkBE*9vLLJ3H?M=j?Sa zJou>SeB|2BpqVE)UGIAF9CZy*u}kJ`o_X&7?W_N6%;$CFe^{Nny)q zwN|UXCOYPikKZxDnA{!_&h4}2>}q)M=j=cCfS}aqoS1}1Hhlgc7AZ`Z&AAYhG)J`N z_NUbkmppa}kURUWc*07Pr6+yuoK38qS5Nt%*m1OJ;Q~z&F1EmEmL|XUlP^mw-taBA z%`lnKfW^Otf0*yWaHl>%K@6w%M<5=f|2gA1lh~v58&1eWU#S z$sRTKwf#>P1c-87t3UL+K*Ddqw7bV9$G`OcurKV{#K4<=MfMtrVuf=j?z;0>$@-^9 zR%eR&#pCv6ExC++PfBWn1U6`1&H1;tQ{RHgzL{-K)1)mYLjS01Mc-QU_6YByaHAhP zG!88EJFIcb&dMkv%6N^mcb#0+tz-`7CtKDFFW&iHWpjW-I;X7&m+?l;9YHVFz3^t! zIHsi+9OJq!@Q&hs=Z%wW7DTwu3(INFePa5l?UC{))1P65U4IsCSRvwa)hq7)sg+d+ zBV4sJ54!eF-9O>9;Jf5n?VB4jm%m^uS#ZtYHaWT0_GQ(HCA&-u+pUki49wJgnXDB& z>z*3tzfkE-nO9#0LKjtSB zcsh^CdwiZMz38b>v&*85)19?ztE1~S*qojA-D7sf!$sVaUtFE*#1n3CSj{M|y!QJN zJ%?bkwr4L6h0Q*iwr%NcAG6LYFAFU1@bx!OPirwg9Qp8#fqv-9sadU2>!z(#4bppa zot^cA)LW)b4`-$$KVlkLw%9dV(AQG%S{cfJd=a_JDuA*eY-nV*D4*D#4|avS=GlvxbN{D zwoq4}&d!-rW7KB%`+jOpIM{S8<>Q9cHliUbFMr>(q2vM8$ma4?6d(R3^lk6^C zROH^AX?VIT$ZXo8qo&5%Q4t9m&-(7#JU!UB{n?IR8M+ZtCEk6zqtfL9r{tJSBOw>kXz@a}E+{@{1p zSv&K$zldHqyT0c?^V$Q;#G3D1ob|)`!mFhU;TA0Jy$g>W)ZUW&B{N`hXp__Oul*{vLh& zwWG5?aGKJG>t!O-&$q5nj<^zE9eZn0kL%3tP4iCFC}p=-d2e${4w%(_b?METFooN) zhN(M@nX@K$88$w%K3w=YzKzd#zUF(EO9!6^TTI&H(6{Jc@WTBb7p{kBOv$R&{#o3; z@{WF^>1ceEETwesfbkl})Og*s+Go)QtQ752hazocDa){y&nlLl$0pse5_5f6a^T z4>wjnn!ly@gW;F>%EQ;~&&@M4DSjqwelorpXpE8AIDE~SvN0s`_(7zyIw|5Z1B@bIk|O}$Fg~+kG4iQ3KcY+eS4P2Jy(J+ z=UWx;#jv91&k8CPquyC>mpZky@sm)=ch=M@%jYF!&)?V<-JZbYSM~X`R`hqL&XCW} z(vcIEFl*TynsWc*V&{^02zH%0bEYUr)~dU!S#fda^p-9r zCPS}F7fbc|xQ`r>W?`79WB#}?GP5>WbBdYJ=AD;6`&kBhF1MP~^*|@dcS(@?clFLA zlFwtmN54LkY#G(>85k3W^L%?-8w{?oE~8h?6_)2w5C@o`}(K@lZ0pDLH%HA_;Bn%h5P$pZanO!9lw zGa8unOMk2A^2mOoBJIJPReC4W-zjgtH02Yta`dvz4vX*l~wg&(ugx!eCDbE81y@mXK*s=n}AxVz<0Q_<(! z|2CbAnLYoyN6pbC0ry{OmWTyuEelxBFVOe;M?=kqjrzrPzq&I2luok~>Frk&Rx6Tx zn{RyQX#MLe#wkp;R~|as-9P+8#!$TVJnQ~b3k!aUMsAY}^VE60XborN^z^&)zqY+? z_*%XC&aoLc&dj*c!P;)FVE%HCt78a~A|%Wn|y4@ZY4*ZClj8 z*v@WViT&>G8l9r`S6@xhm?O01Oc<*g-%4)AR?B{MyQ7bP*1UdQ zFVep2=NY!y56_v;+mr1qKliFnvJd~lZzc+5Z&$c7O>mzlc*U|Vc*BYJeLHI36+}N0 z`F$YPL;G3vsntImKTZ52vD2i5<6h5?ugi+|&tUIrTHE=zX;LQt9xILOTOLjQTsd$0 z?25@YXWF0MJSKO{@z};=lE<=pw@Zt&l}l`Avk$IK`w^EMBG?)8Y-(HXtp(;!Ws~MtXIBCs?9rX6=*WgKsp=J&jI@O1&1$v`l%uY46R-n>F9K zOY}t?Ca^gA&ab!^Kd)V}Q@5U7Q`NlOGW%=u%$F}#h&M-Vk?*b4 zi=5V8^zmg6uCiLPc=m#AD=u9<@RDQhs-Ra}tyI?suf7!^#95ow?V4!(zhGK&P05BA zmqI$a*uVCG5aPjGRgz>~>Gowh#o{6G7H@}CvY-tN)16_S>n>7=^K zJ`zHE&lUDL)&5vH#m|4hn zXKiQw)+ek*w}k#5GI-RlTUD8sHeqXO`mftU_6`~!W4+t%AK#7$Kw$NXYFgxw*qjeGA z@2q!qORdq`loqFR|KY{upNqC1)NZ)kQl;VEcF|!T%h?s~{Zc0<_Idiu({`|H<4Zrp zk{0pb)~%r`=srhp=o|O6iAOe`eewKpv&`+DclM`SZNB_d4O`>6CPHbA%bKLwp0N}2 zjy`<3MtAPkrJJ`E&-u4Y?{}}&hUn#5BHs&liK>=glE{}nuT^~P<#gG&-QPZ>8Xrsj z{-fZj{kQKYF4+`4-Q#{Oru3`S>CN0?HoFu5{oyU~d^nl+d+oQIwZijswBFg}1YO?! z-pqH^%a3o*gsx8aiQ1^7H~a68$J66KUI|_y-n&9v_k_5jhKi|^kJ|Iise&ge)ozGQ zX`4BT$HmZdbJ8NuVsVj`e`koy;9e|wvE*52=J99ssXvTAWPdv;b5c*?r;qoh)lrfc z&wBiSzkuPR$l=vXmaY9+{mK5s^W&#Y9XXb-G!B{BmDBTj!xGNq=Cn@>#@T6Uf# zRZq)g>H0fsIJYl6cj; z*V>yogQdhS=RTKVX5RF7R^FA4wJn-!+%7FWyg`R6vul;u#C40d*GxOx{Af|n2gy%m z+7HV@^W^M*ZETCpUVkGp%~&r=VHHJ ztS){Y`{_~-yY;)MJr7q;Tb&j5EbK>V*k0FEmDc+y^`EYF>6YKy7%8CSkzOd?GMh!J z=h-LL)@?`EOxoUXWkd6fK=ltt_Jl6obaPJnHrG>ZuO~US?ATp-?peo2``oE>Ja>4S z-mT(Gys&Xi_Wzbimt4%)A8D-#(0)Ej zSIqox;di~$_D!9^+Pg~QZSC5bGwe4vnr!u2q3|eMXiLP4GqT5%irPQUd0MznFVxe$ z#jE{V$>Ee67E1l~Q}ZrI@4d8n+OIO3^Z5nKSNEQ@=Zfr{_a>nyAYb&(>?JPi0$6VT zzqmMnDR9#!xzj}#P9GQAmJ`r-HC*e2@d6d=i-*=7@hG=Faq^tl%d$&e*Ol!b&oN`> z*?aSr7t@Qln?;?WCOh5x<&W1VSZCViT~6E-G4Iyt$GF5BXdS$*}2VUH*d5F(@zpJj9KY)#%PVvn`H*wX{CD? zw7uOKq~v9-zRd$rt;!RMBYC*=a131Q=VV`1T=375LJD>;>DB>#R=9s zn$~@ni@lxt>q*&6%UJzeVVc!@XI@%+Cn9>=!(Z)jbrhr^(jFic{3`0@ z!+y%HNw?=EAiUzdNzcIWdq zZU2|9s@TdCTg-OyI?tWTgLa;UOZw+rKUm1vw|n2?$!;H?R{RN_7B*>TeMfb#|0H(p zqtCA2Sa#r+=y4nO6OVq}J9n1ho%J#`|Non_ixUjz-uWo-`&N?4rvTYc6NHTxG{k7_ z*Hccji)Y%; zUp#y9T;iETD)ZjvTIQx^rS3~AtheUfliMe^uTzhNrxzO+x?W@#Rq_0kW6;`x*f+#m5m;BXN(_fdr z{{E8xwf~EyRn>uR%Vu}1cknl8jqT#Ly(0^jIi;K#P*0Ocju^9GM{DkJ{EOM z?ED5F?YI{;3gMA6)_=A7!(vf6>*l4k2c!$KO%F(hH0laEub7?1`JT^pSD{U>#-&4_ z*y1g6-aq8X{%rem=TFg}HT%~7ezdv6AmUHV!o|%C_b>X)Jax+IxmEhPFVF4CD>pL6N^ z8Rk>TMFLus9(&TxpSY}{5%79y?fTRZ+`rH{9YsC z$Js}NrhO?r7c-4LN6EX42+qJ62ZoJhihD-C#ceq$fPiGpe zaTSkveKlyUt@^7nVf~=lO}g8fOVmFZSDU7{H12$*Kvw+~If4 zwwevo1AFo|8P5us!X+l5NpMxuZuEZm3tJc|Z5I z+^eOVWUwQoZuxQxfdWg*)+s-uqRLrMx30JrrYP%rQES$lX&o0|Y!ZKJz_$G7#79Zt zer`Q)CtrNyVezJ`GU}wy!ZUuJ5uzMzZ;uM_?PLroTQ%wT;VAW=CubG}rK^gwv91hU z6Z$4tCTvcChse=~1$;+J45hMNyEFJ&FH9`e)-!u1RcACO;a%y;12?aUJnh@ezd3?) zYIv=3n_jPG?zM?`+S2|9RLip8&HwuQ^e!&VUbQggiRb#(m3{lv{lYr_@{8TymRhe| z^8SvUm9g4YC$~$kJa69$OS($A${stLsw?X+P{=R3GGXb_!v2iokD|{-tp1^RZIiiO zM$?VY%HHYtp(~WF=6XLY-qHQHZu(+_WoJJ>xwyw8aH4iw z+LD%;g3Y?Ni>~j^d8m={a#Kc_ib#>`-^LAVIh+m}H1Mumv>~u{kA?_$tKzEeYc4xA z4wsuq@Gx+`{*zcxA-m<+#%mk>zc{P(b$^YMWxUIDx9BdX?E1~3^KYGdvf}g-g-@lL zRU5<^bAs0`e#4`C?zr6?-_~FI6`5Ar|9_j@#d7zbHE)=Dy!SELxh5A@-MQn;^HJ7( zo_9;}AJ*Pa?>!q#A{wS8D@OGh35j`4uaf_ADJHfxZ$+Q3yYp*0=C{2%BH(f*{mgCas$+Xf{A+hBJ18Y{inHtw|~a`(|2?3O+Bsd%sN$VQkTG+xQm~!@9fZiRJ?PK-E`Y11v5vz zlV`QgoYmDRaXnqNS#9pNL&1*PN}-~ndsoM#p0sdM?Ok%HBSm1LQTo!P4iAqx?z26O zln9Q<}ES}m0tZ~(<r)WD+CN7g4xE2lon6PmQDR zZ@MEAJ}zJ3n32(_dhnt%la2@&$Bb{ zsI8lP{yBU6zWLuL?I|czm@{{3>gn&l_j-7$ES);7jQjhl6%$UECORs%hgIDbn}2?l zMuzIv^VQYg&$Zus*ktxeCf5}w^H0p5eBN>2g!swlWzX3+-iu1zF1ti*Pk^Hr zOYPS4r!AODp0Ff$t!m6oIU@Nzf=BH1shnMtzwv2@Nxyv~%(IN|jai_!%=WMw{oP!P z7yFdVEloXXoLV6E+~vmgL^FXqsiF!NyAzYN4;&FXd}K=G#5-G7MeFP|{8_m4>l@jY zJO9^tpSxGRBLC0&S1!}0-D(j~Uh;p5Va?oMjdPY8aQrSfb18E1Lms27sXt;5-7;P$ zmzkiuI^(OwN9N3HPx{4u_U=`>VG#SL>;E?0?vt}WE~|h3x$knwrKJvP>Gw_6e`@)W zd*Vy^=9&K+g#x;T9yHH%(%kjp=o!~^K81$Uje5Ttr?|(Ru_=-Yvz#$`ZKy!2Y^~+? ziwU3C@BX%CeqT*&|GvmiM~_JIzq$X%$VGJ3+5bO9jCCgQ9 zlehh{sM;F43olEilr4^_y5U${WbAcl=T5Duv&`GBekyRwTzUF!S*dnmI>!gSk10MU zX3X7am>k}w;(X$S)+qs=qqlleC4U?7rO!FAEv(ALqrCD2i_`Rp<(#T5HP_sgdc*EsFZ*~} z_S&gC-}{!xY+kcS`R8x(Z>))tmoyV*w{_?H>|>d5XT@#djsMaQ-}~|ZjCF>{+Eb!0 z0?j5d{QUmD#Y%O`g#SM@0~_q_2-G`n_u6tRf76zDL+|^Fdp*9FyL8X{v+ITKc4pP< z2kexs?(>zpy!=<(Yx!Mvv$w>V&*sYF?k95&>MVD8xW)2i_LLPJR~{;)v9G_>?K5p! zs)zUG#YftdJky+}>ub-NDcQNp$tzAqN&88P(LCq&%PQ9lw{45?(KzF1zWR41~;1244GwyPGDhnBt{WZh4o*nfV~2fT+{a zTQ4rWXnFDG#ikbvSD0j-UpVLXgM`DqZJft$9!otY>=u`;;ugK;cxtSot8(||(v!B6 zII?=zPhRH~c`8(3|1Y8K-d3i2r=18~Ej;;NXXiP^eXIZP&-yKNK%=YV;i`8#&(E7T zZ*jVsv2D81PPOAt=FBi*Y3h(+n&_<5CL_S(>A@uURkyHI)aDv<-f#? zW0C##3*)7)I%(9@EoWL_xj^v4hcyM+$n-sI=Y+kw6y@dV7^|?#sujQH8xY;hP@%laEVfd=}OcV2Utq{>!LAkvPXKAK-zrE_`t2Z^h!!Xe-r{7X|$}iW?jA`n-FYmg%?Qq?J zo&DEslJA|%N&J8K*NV4>zc-&-yC-elSEK65p9Rwvmp1=Ze6AK}eADWt+0DAn&p~wy zD;14rUv-&#^;uDN>)KP6hif>EXI^~~YSkP4^qR}ro7ZxrXHESWuyEt7UakdY3pkgn zu37AxnByVlAb5jkNYuUeer2a_uYYr?ZTj}kgOhUFBRv0Ycq;zBJHyFj`LXT^{aqC;VY7Ntx-${QTK1qxytN8o; zwX}Wx%bmsnd!H^nzp_nza{WynaR*_O!#`(Fmbd*XePcq+=fnP!_qR_r%zf)L=?RyL zXVU_PIYM)}rXO1SjcNYXv%e0#Gy0zL{hm#%-fUZwPdiVnDZ2Y)(I(TKvv}9_+GXuI zSM_hFLtzx_S#{$^g%53!#Vhn&TAln%6g%3^dYmjh$~8gi#D~`S{#h%7j|JvPAKf-b z&B4M(WzjbNg_e?BU(#&2qZQse|9v=_^$lO|+4uyAXCI<;|u{5y&KyN*)F z7rqb32;K2#MdHR9<{>?Z@Ar%#O}KQ)%;kqZ9A$Jv$apxs-aj@?DNzzjjB1ch{@O zU!MlAUKVQJD%PfdK2K{_@GXh?;f1bO7rnZ+=h~yCA6IK_6StMRAM-Kj;^(E-kFB-7 zh3%jBy()0QiGaoxe}87hPE>0-c-gw!bm@!;@h6g-OfNQNghu+s=9M~@UcGW*${uT{ z?Wy-?lm|cbb$xwWp2v2^Ud8w84)wauKDE8!_~(1)en(#|ca1;3U+@3ATfuRGp=&#) zi(ULVk->$_!{7kx#VLzqKWYg5ng0ID_SNkVsxEr9%T5(spv&nl8)&t{bnEkG#T#3M z=ZSpy@Ia@#b)#Uw3H?*|=d3>?ufgs9gXPhOg62T(rkfrLVb2 z|B&`^Y3D~48esCoV}bg^g+4nO%rviV;t!|_Y}QHk)|UIUZ8b+|+f7m9wWiI9EAP#- zeEL~B`_I*28@6i;H^&A=&Z~a^QbmM8xgj#r3t`!lEJb$@2wxAR*$`XpX& znDy1KQQtg5$4mXV;dYmYs`W?z%&jr{`Ta@wN%a-i3S;`-zSURO(`OL>Fn`(LX$B8F)@7vzGcw#yC zzK)0sBKs;ftv^`r`_I2-`?LFRfAinp_Q(0q?0>?QZtwq1%x@5zab8>Sn4g#MVxfcT zPoDh@ZEX6pV7YoWZg}DQ=m` z8%9A1$0u9T*FN{-zhs}#*I_SepuNHJL)e252f+is*56bzGB`FTNuzE3o+ZU^vQjRe zdhC0A_6fheQk%|qz7S8DD#dy4$`PaD+)wRYGrbIQ*|nn$%75`3+Bfm?il_eX&lyj- zS({;VOH#b+;*Ck4f~WA#sCa+u`+0$@-wY=oEXa&igT!*=nzraq$Xk_z3y?Runzj-6!0)UM9(&7eLU}NWFV?m36WHf1^&HBGy7uhVtc4vybFPMdm*?%Z1X=K} zlvDl$6Z30~Q~U3g+)i$t9(Q$L?x8)b>UBSlOBZhT^8fb#&vShfAH7}w%e%$){yoFz zx|aR>x$3w*b1Fa2J*&FeyH?CU?AzM#d!-e%f^}cQ_gvcfV&D97znE8BcQ%Q~|Cu~H z?%3xBYr**I6E6Nbt1t! z@8pv?tW%0TEVkwtaRrpuI_MM~iTLRF$@3BOU!J^u8`*X~nQst!xbaC<5$~d^^NwFC zY*&>F^1NY}Q>m&^zW?Tnq1>L27kf>1A87c!<5kP^;QQOJgs)nE=l+j#98tDQ101*C z`!4*wSxfZwl(bi7$J}muRn9(pGJWHu&a*6B363HnA|j1zV!Hh{opRsmw%BiW>clr0 z!AeUv{awT1xhz3Ns?;qawqeJ$5(Cq`x;P z%hWgZrRIz09}lmLj9hwdjn2K9Ps^=xL|WoP9FLqnXR~C3#hf{ZAC}xGR%Wz&^jwL} zY7zgBziiF(m;##j?-9@}I#=|rU|x~doQlSv_Y0H^ZztVml+JbjzS~Xa!bbjk9B-~f z@BY;JT-Z+N(U;C;mwk`y-`n}Y>r__b|D#Eow~toJ%sXanB6$1gcefLFd!8-XG}-8- z)5+ti9Ny=}y>la{#uywtDA_xQIm~jc+vKYs-+xFG-IKU^va`8ggl4R(>)LB+1~;|@ zRb2C{pHKGqLhziWzZ{v@yqpW?39vf(WQ4t#dLddd^~Jh50UFlor{^>CXf-V| z&903)wZ?XV?W(^{)=d@f^p=LL4oZ`p!ga7UaL1aXkp`=K&Yvp!7|HaWWy)Pe9@YKA zkIh(h3%ptnWk0qsk$Iw!RrqPn<&(h^7A?H~(qTjMB2AC#+_IL$-yui6LmG+!=R)qSv{@9Q5%1)` zIKjwp-*&Hi)#`#VNKAfue-1DUAzLyqNuTt#TGXquiA13_% zZD4q5;$`kBE0cK)3|_r%zr_4_?c4j$|CZ;qxcs|Z<}#sgYIn&R@fD7zo)+AU-DGB( z+phg~r%P|mw#k<)+T8qX)6;`)iJ2WUSA2KyU)^IJ^RVodSFQB={{8ix|Nrf>*R?Jj zVUISxNcjGL=fiyMxXDYD`aWDNO|M_L!gu{a))zN!-oIFXZbJKJf%80%uEwtlxpQLL z!L0h!4Qt{|&TKiaGbf;OX5z-ZD?e;HmF7Hs@9GUZKRs_P5497NNNWG%{Bhwg=QoP~ z7yelI%f8|KqxdUx*ZgPyVg1KixL{F=w?cG&;_GG~g%dv>FIBxD-+z6x&g-woE%)2U z38h3FI(hnm|f<&PebDuFVZogB_rOc$|d-m&WSp1h!F zrT!xWxs~hJuU@l;n~j@$^XrY1&R+8kFcRdL%GPY8eL7)#x}!|4p?2~qE0?hDsa{L7 zi#%02lD?;GPhU9aL-AdoBSm*3OT_Fm?Rx~mHD;SIeY)&#J@LYkdG{)0o-CIy-=t}6 z*k3JUuTp5U%hTQLq?TOZZ@)CQ8UH@KIe+?rsyv(iPlJk+?VKC#SshE+viQJ(rD>(y zDKmYp)!dv|Ube9OhGL29`ia_AlaGc;e=*wW{{Hdna~nNpT$C3)sWSJ{#Qoi2lNX;$ z+E(#O$4i<|B3gDES7(^W)AB{_Uo8^mr1^Qt$9iA*%388@#)UUL%bw3p*;%<~^{X8n zMIwfEA2VuLwsPLnylJ@a$iuTIbx$tOQ~SPrqqno>9@CwD7k(U{v1onEF|l2u*R`ey34qmkTyxqA1T7UU;*JACB-Z|>;z^g3H^o!ttL znR8D)@m%&qJ<-S7^9OU~QH?b5U=Hr~72&S6o{5Qto?&sE9=`6UpS;w_zw2(>#+KhQ zxoq7zUcva8Z}udVm1)eFD$T>9AiRNL*7a#DYmZLc6QH6W-tlDDA06)+#R*ojJ!iBU zRh_Ri+Ip;T*Wqb$*=)~rW9FN=H!|0l1Ye$AH|fnW+q)$}VM~@i_1g3)HhA)^*(oP> zu0Q6nw>ZS%Y=rEGLo-@*4tklWKYi-FsEl#>QBCW-bu7)!#kF-T~TNkG&7Ph+M13^7@3Ig68|pEB73KzDDNjt;x|Mm)ec@^3MzPJMb>y z{=}VpUWLCt2rku@WN}NlvvwcTE76TJO6tzs_-iFUw{nWeo|DHvA9lag>)yEg!kQOF zRRT{Migvi{$yxo&@cuO?t3`ajg}UlqH)Lt0uIMxKxT zPos?4=~o@oemho*Tw2POTlZ7IMoq8fby35*EB>#y*5zD#eRBEd#hlHG?bRJ0(^r0E zRu*8{-|=MmP5$J6R{wqeC;eCcm;RUikNaP#{i`n(rcaD-onO9ME>Jc=HdHgD#`WF5 zK(VIE%kBPWCTtV+@ST6_g-o_pXS!cXd}h_O_|%nB$2pAn6V5(h2w1F{T=PUk!`Z&> z$rrt_;1!;8r(D|-ROa+p;8ooNSB+~E!x_Og8&N{%_a@A|8o zEqCKe?c2|3X?LG|)0#VZ>x(n%?zBg@-B-}|*SXO4X?i$3r;^m2f{3y<$F#T%Q{A6@6FGpXC&v2zPM zL)6-<=|9h|c&a&7+uTB2fn-ThY({ui}&zZZPk@J#k- z`>e;O{7uDnFOrz1p?~T6;hDcy-aDPRc$4SdCHbvyPx<}TdS!LD^q%RyulH*AO=qe; zRAzE(-mR7CMQv_&wdb;@_c>)YX^T5>zfw+k%&_eh%W=tD3CHSUXH@@x-@ZWWXTPm{ zUWM-A?cbiu-zh%N{$u%%lpk-ePmbSPWl;I*tL~ErGov2OD0nf^{_jh{FNc?(UvO_` zn}xCXoLi5tzdT#9@kO?wJY)V1JD&aXYtNLQ`5*t#fAdwv=xw!=3~X&|cL!#0>7R+q zi#u1|a{V)#b)43#%|+a6rr%!2w>`c7ZP2P1o8)5GnHth%cTd@z_;Y6G#jQuTu|8x| zUUT$Jao(o*hVK?C*3uE_AKkD1ishR6++OD2f_qag=-hbIT>dleW1wBQ-Shqje)nV= zZ+N~~$07UhGhf;l<40zX9^Twi^egjahSZn$JKkKk+?DEJv@-EFvsC^DL*vwt;8dxr zZ)RFEHZcZ>u`gBqk{u!Aw29l{>zlp5<7@L@PddCgx98}^Z!Z=eK4~0K|3iGs#paz) zQsaV4dNX^`7GJ9)Y`cs8tk^4P&B18@oR!UX`7!z8(jQw6 zDf}~2Xj%7XL%qOR@Ae08cYi8k53ZgUcIs`j?@7~?VpggCzQzBS8_LJrC<%@+$!(8K zYl>ClU42j~ZHoT4rWli2!5uj{_qr7RYOdh?m?=3`Zd-HesxK}3k4#j0dS>l&E-xX& z?|+tlFVDXAXWje5^C$kEXP@)uru@GTn|td6YKqcWr|J63L>1>en6>!2T$8-Vls!KW z^P4AoE$gr^;t4e3XZbMg#=_0{n*vp@xMZ1Kb=vEiN+IMC9iMq?u_Wehi?Ox#Yq*;1^fB2>29a{hFwN&ZJ;9F{d{FT9^8zunb!kGQYL z|G6@C|J(#qL%(G&R!jezV8eB`y^g!|^N(`#oQmVD@^xQ&Zv`3WZ!}Q-yx{j)@d;0U zyqC_q{qKux#O|NAms-S?PW3b&PKq!&6U3*LZ*nJK&&>^&H(0;Fx~Ke8314qyw#5+x z#@syuBF;-rY0YC-25bahkww3w1@c-Kn>Hi)-H2!y4@#@u!qO7_br(MeKz3v`9?Vg;hPOU{%`O9rD zo?WVq6JC1oQUa%-K-AKp#k>IrW{1BKk!WxDb?M37fH&eLm312w7r9+d5)C;xM~9Ki zN_O$xHFp;-JsXvCuQsgOW%ZR^r?~z$AKcwEyV<&_i}|4P!Q_L%j;<5>pPTh7hAHW8 zFqe77v&P|?>~W>7dRwK}WzCszV!@-o2W*R^cDVVyKXY}#&qwCgd!-t}%RZaB{tz;q z^5_Ipbxuj6X6-NSR~t5Mxh}NaEb!pP&C9e-o!%g_@YJK6%#$;Mweuz%+c#lz`o)q> zwh!M==SjJpU-^Bear(T<@6!&K-}$&Y{%+y%#8(%XU6S6+wKn{JO6Jk`x|dh(aHfBE z+L6xBax(M#zhCCk@BW_67tl9Rii>EhSSWN(nA>dUIgTkzw-Q!oO?{6J^{e#(@}(k$SE&B5(B2eMf z3zf?JmSe6*O5_t%{)WoOsk~l4RrQBmgqXITwzei;h|`{r-hyXOI^K=t6v=X1ev#`> zpt{TBBa0X9llsy6h}qS>YsDhPAMv|aEi+kOzROE^*Q|$APN=iRpJrwK$Nx1hf0B8% zq2BhOwOqTW?&05cMXvMxheV&nr@N~gvz~mBJNV$SifDS{mU*hOmrYi6Ec+RJueo+% zshdUhwKnZ(YvM~(XC?la6faGiMK4^?+OI_zhZy8DUto2ARQ?D=2!Y18KTv=hop zHa?j3*6&}(Iu+B?O#K~|Ja!xtlU`__;kNN;|NLb(`#}YnC2TKy(=PLzojc3jWG`VwJXrnAhxi_xj<*y{SK9WK7OHoV7fA&d!JakwI~8vU~rv zEfMs8u~PH%^LP{UpQ4!zZ?Bp^yv09X_0Qd+ud%Flhwg3HcimIN@bxv@k<+PH_EtNV zJee9>mK-bc{@!DrCtBxHzLt8g?T=pBTsY(O(>CtKJ3r3Zv??I>$D)kb8q4iAEAqD= zTCnww*V97d#qZni_t%U4)2UOdQCqi?FZ}rQ_G!~|A8%s~UAQShz~fNV{ApL@&fMDF z$p5RxBA7Y&xpMTCiFI$IMZWxGI@qAj!R6KIqoI}6Auc-g7&GffqwaYsDP1pp)b{En z9Nf1fW1foTBP(-3|2qw{H$QVP_%kJ=B+x>tw}tuV!vG5rp;M1yA|q{1L`JS=Xp&)Y zOwi>nJf*;+Vj~xQXl<9uCvRa^)}KG8*d2^&P-E1TZC5{a>zx9RodBQdw71Q(9VL!R zR6lAi^y&~ly1wgjp-%B8tu+}f?#Vv=WdYuXQI63q3^un`Y^nKK_rpM9%A2o?&wb*V z=A!-d^VAKgab_nbzZKoIeaYfiVy+8QUT*2zv-xy%bL`D~H=nMYu&$=Fq*P?W>vMtT zl^uVdoXkApRkY{c_qDOHH~dWH#7}N2z7Wj!d8So?z{>-3)Oz^0^!C@x-T9b1QDIG_ z(KYkkhiYOx-g_KlyRs$u*^0DD+j4(i-nO>bXSIHs&-b|I+{zaIo(K&S_4WtKXOG-` zB+}=r^1gZXhq6)-Ki#i$V>k)~GMuuyW|`6(q&9IkSE@8I^@zWey8ZTcH? zyfy#N6q06=w)@GH8Ol4wYmH&}3~k@gXIaI)Kb1CTtTXq&wn@-=XX5ti^nFUw)0|gb z-0ZUV$mR9#zH6MmsygrFtCREGwr=tWE);yYck$H?yB2QS^=r{Bht{(_i}x^br*F*P zc>G528m0|A+M7&nCnQB~)=c33eIkIL$)|zKq=K1ozPW&&{v;*unL(?zD27EviEvLb z@37ePHp6yJ{)*M>#a}bA8csD2ikL9@X`o|iUh517-c>R7Z$D*k-Lh-Z9vhi$FMHGu zCW_alx_)!CPPLal`HAbMV2!+FPr$^@TNTucM)e zD@*iWp3VN0wrq;&^tDX?n`1M4pXX^QzG|2tT>8nX*=Z%eyXZ~36(Jw3+WDVp6xUwJ zEcm%(vcQLpVNV>kEK^&ezQf%-=#`rtJJ*-s{+fmcj9laB2>$;&%gc)FgDs(s zj^D*ZOXuc`-|@XDcfUxUbwSgjJyKztL}ujLNvCEjoKs>f+jC5lS5>XXr>5CvmWPx& z^C6!ZQp?MvPD`n5-K-M0vg!8&Lxlrk7iT>UUonyG)F!dHVd^{jK212z%;-Gj{O&F@ z<)@R6&w9RMmGbMkLJxW8yE*-fzyG%)&gk(SxutGv12Z+Ix_7QPwf5vBlk+i)DtBG( z%au`@U~m8YnTk}D=ec_sSx&D)ciMcnZf7|*>6GQE=X-wI#}-^Yb4uG|`Ty1*Xa83m zos%7&_G+Gy>sR$gf4&!nI5h5d@6*Z>5Pi|e9H$eusjPKw z@r{?}4`=@>Uum!Pe@R{V`dv|X6BpiEVdmPt%z68r8=0A#w^^H*+2?-C&fFW8`+>Pg zi80=Nof`YjF1P5Ld<>ESEbE+J-4`hBev$H5OK^U;g3_G4tBh9#uNq#}oEl`xVt?zY zi;{|Iu|xCalMk0ojhOF0cY|Hpk~I&$KwcZ({$234br@Ex!IpcJ4*f ziLJ7GuC3hu*q2|1Pv^#g4Abh@Uu3vUtVC86CLC3V zu<7xI6OI#I8~oZuG`quO_LAC$|`1Rq@|fW$@E7g?}H{+TQw` zdw%NwV4q*BTFDi~_aOP7|KCT?>+ODha6aCbblY^+&Sbu$&!faTN{?CN7}qU$#r9Cpxb#lDdQzR97mp9WRY5ISbXT2r-GB|(LYtOSNP2}t{j-ov0ABa zGh0^7(w_%ZD$Yh;y0ulQTmPgPXAZ5dyBxexrtZm ze!Tr{zW4LFWxww&oSw5QDe(Wqd$uPhiciuySuFUHm2=UBk~_6e*6w~+_nKoH`=Wif zyMF0$Bz*{~IrQwh_1VxspPH%9R=s_|`Td)Lt+Y$Kxd9}d1SON^c}t)x15nWEdI{Z+RWBfoepDl-$?s(Dm)$0qJM zoMPHHmoe>kUw+hVR*wA*fq-^}^-o(JWldi9z4UvTF?Y4a_5S{Ix8B@-7%cNq_Ve6N z7wz_Gq#irFz#Q{Eqe=C^dadDLRoptyr@4|V# zeXk===G7gXn>s1d$mE>E=P%hurg`h^Iw_YFvit2~@yUlL)cw4X`~FV-f9oIadv|hv ze=zfUkS*8#YQ{sh=lfNb->rRe;%@o=uhUAx_9ZFWHk>~tzVo%OLA-VF_BpYK*QM7l ztGco3n@5|-eZ|VOr`z5x-nO{2LnG@cr?6c@!fp%WbT-Rag$c{e3)yU62`|0Hv9`h3 za94l@o%zE4%~^A;!XtNi7c-0mh%+@0P()%a$lznAEw$m}ya1;sZN2VF_-_nTM7oPTxZ znu8YcA0IH@@c;5!v_h(O#+z@8rtc}vPo91H)atd4*Z<_6w0OyQ?a_ibpO?4X-TE$h z9`T<1;QrCln7QdpN8`A}8u~o_x&6ccR6kw6Hs9~h=C8KDtGCwA`4NBZ@yGpsHrcka z|I?IKZ(sH1RMcCS`B&4nU)`mCPwa-o{rqd^H|wo=vm$2Rj%}aZJHJkSEgZdL?woha zJ8kV=8TrPUNN9@buj<@ACvEbrv=vMrCoNjAXv3WxqYG9J(Lav3ivQI8S9MoF=e95R zjhRgUe7?Ax`dc?4z&z|{dez2cv$v(DBIkM47MbnuIPPRE_4Nqr-9U+_>ep9ihPphz z9(qGAE4`XFA?Q`!;_Fe3ED^xP?)~B6{YfAoQryg|)`_QsB(S7Y%cAI@zC_E3av+{u2}hH>Td?~gHBT(U0k2G)PCmFi+^_u$HY9Z zEPNvTz`@3f(=c5(ys@Gr{6O4e$*uE+(m7A=T`ttSB+A6nqd;TDk;khhZ(L|C;&X`k zr3xSK+{qSucb;p$?5Nv3G48-C=Jw{EMv>l!&#le4<$LEoteN-oukP;`8*kp6IHAT# zw|1||^CPd*r*6*Qne4V`;frVK>Zbbt-b&}Mxq4&C`n->Q50#5JPH)*f_bSkUJCT+EG#owdh_7}w-_~^Yi?x@Rc-M460w))wQqb)x+ z%{sSrM%;Txt5Bx*POSM|3yt$KN_OA5lDx}yS9odu>%P}hR{NUIHk&19zIR={|N5eg z4>P~sZe;q_W!CGo@EVK4;mlkyk0~df zKF{9bbmYI)2Lri-mmga`2wYV7?{O?^g;m>rHJ53|e#`sj9-Q5}l=Wosxl5C-8OG$z zjeCFTSHrp74~&_z%{tuX2SvK0cYO4AoVaP@YpF8npgSk`eNK70YHIKL@B+7EnIiu- z79B2or14kb9ZwbKvv&{g`^E-oNqoHS@#k`Wtn1MN70Y(c?TK{RH>4n{_qu4g4+n0#1ti1x~b;8LR&gR)~IH zpjH#NK60_IL7M3EiR3*XX67Bq3c641+g)ABLzO;giL3lDC}pR{HBJ9hpm z&Do~eN0%E#i;Br7gwDBgOz3cAYFjnu4S~fsCl(#jU^zIDn!bewKwrMk)=Y5$TVp6iy7 z(qpKcJI9glHRlVRH6|L1Zv9GVJ1IE-$Y$C3FLrjw92LG06kud{%~DnRanF{{i%yOj z9`UM=n;1C4`Zh;dYI8UGnW^oX+0y6tV#}(8Ch4Zru6w6?9nmSBmae-cRX&DqO@OwP ztC-lvyKmCI>4qKL$1>mbieOva&9&m1X6haJzdR>w+`nMmv+BE-j#odMcbxaTP2SEM zM(RJ8_8V@R+Sk9Z?2pOMBTtX;xSsp6oA=n^4HM?<;K=^)$yqtqN7mWK#&y=YrN>U6 znkaa5?+W$e7d3_6eYUp?jrU&Nchu13?bi2Y84O1Qvfq~9n!j~_j(wK@Ez{X6Wv>W! zUDGfzTYf0>^uk45GSS->2L)#CjwsxiJ1uToyzVI*nNBD8`E0Vv>`MRG>O-{O$XF19GcbVaSbrwetj!wm2B5h{v z_qZN$Fd@N6yddJwLG|wq2dvG7)W1*kJ~C;_io}iP+-c=eFLx{}vS;XD__El3(X!+l zCLH~pj;u4d6>Y;8p7#3@%Xx5?!73rP{R$GjY@yqQt?ExY?=g^Nl&;vgqDQ>=)1y5S z=iD5piL>tEW=->+Nm-l%|^c3Emi$qR{?)6`%VOS#?xm$UiNN#HO)N(D& zH$48D@lEoL8EnUE?p~Q9x70tW{kz)qKXbz#@!p^EsqMUVEt5UVxsAVVU->;2o+|L}gc{Z0Pg{e1s+J-Pa0_184sf~Mch zUw+QH-RZnr!E%eRd%0s#$#NlsL_Y<`Oy3Qh^-dl;x`b6b1C(Z*m^)*I{}k0noh>tp z($4GYoLLvWpojn9p}S6hnM--%W)vnbFWY}V&p@M5HtF~`_A{sQT%^{WRDJPt-2>*E zItM@7PuP24j_BmGOs90}Ciy+T^mLWbD&gM?to{nFoN}t#rnaN9t-e~gEakZ0yCXAY z-*2;cnbNm>&+VtHxh;$mepSv{?R4G#eaZDJ z^B#ZDW1Cs@Mrr>1vWeFhUYF4S=KVd%{-?vQwHy83WgM9H_l~{L);0UiJ-WKNbm@;` ztLX{{7Hzi9(#^o3;xcbm5V`U=|C6K4kJ3n|+&eu@LVe}e zjUp!N9b9F+YtyH#bs0|{=(QaVd)d55kny0D$dAH;gNubXRPipA4Y>c@Lcjj`L#A`* zRw-N&`-Q4T{5?I z)H~0oobsLYd5#!UO$?7zl#DCii;juP$xM3LoZsf(*IReuT%REOFNZvX1YJ$RC7T&_ zI($D)XN=HpP<_Fe-RST*bW_xtM?3Du9D3?B$2(C}eaZ=4zb8+h&T1&1HvQE{xzF(k= zF~j;5k0$R*J(j%M)Teiu+pR_H!SOeCD^&JI*MA9~dosIn{ppO&!u-Fc7Rb%n8+32_ z!GhMq^Y40O^ykR7WvMhrF81|q`QY=)va>~?us5pe!}O5$mDVrZMdvf{9>{fk~*B3iXo3o*5nMYWq6IZ)pwYh9b z>zywDw*7`L<{lJ!blCqcqx|&Z!Y9qIFHTq&X2ZXA|AGU4KklcUau3Xqd4FqZ^Mj3h zpEPfdljd4aji^u#M6ZoNF07aaKDE*X~cK%?Z%o?e|@1k5?s$Hki@Z$xvhaWOb-=a3-UdEYC+w6lKR0V$^aehF*uxC`lgoyg){t8y?% z-gAQzv->M$&S}3qnwHv4N?6&i5`m4&ad=nHuUDS2_mnp%D&KQ?Ak1=X{vWfA@xnK{ z5=@xY45l~cE5G#EV5>au`1`20EM>wnnrGMW$i%bBDE&}mdM>o1}-lWK$H3#*1l;gf&wE79~0(3`3u z;=t#%lzHk>aod;9`^%<8O?k3KWa*X8SJ$}p_8+*NTs-;Htkzf7vRCWQ7}qy!QO#Q! zRJO8N_uP(JA@doR zo&K!6FT(qyWDgq$>ezkX$Jjc3(vOoGX?$FT`+Xd9jV1ri_Dg!sq_t?CUV{L)pft9{G*k(S4XcC&)c}I zCxq>Z$@%H=t9@)|s7({lo9eaK<=sp@%cq~e2AHk9dSlw87q4PgS(vA5%5DFeC6dH> zv8U+ml<3|4ORm))+*A14e9;WQNy+hU=lj34Uhz-<$+W$1O18Y`a@M2UCQJR9U?-ju z^+svWjn;Q=pO5aj>lGFC=u(=}!75{wh&rj==FNFae|`ObdD@|+(TA|gpx@pxSCucjcX=JZeBt}m zj45`@CheMkyLd-y;V6f5@$iVRq*2 zVwVohIDPw^=EM+rAIGaNMWiPFnctAa%^+u}eNiK}(an>w_2`Rr488XYzi2Z>v}dzi zPC29WWs8Ju=jj4g4Oja=VU`-s$+rIc zwV;~o%Kfzw|GxE3be-`{Wv-?wY3PUYCiAZy?W;!=u}&t z?_Zu@T<=~!{lev&K^i_;@AChtdl=4{VX%C6v1s2*;bmnDzjv)()x{Mcpf93UQpUB} zdYazr_rhu0zi$1yE-%|xH8l4A-c{QduMMAZ(JWx^uC?3w)gyx z=B{;epMK%ewcGc5*56&d>sMefGv(h-7!&th-d-*m0d4}nm3=&Vh zIXQW`|2)I%D~w+~(|i3w_*bxQXX2Dp|NL@(uRLBoC#&i!PItYlXID>KD>!R+z_b;b zVPCg$dSBzn-WC4PJbG97eeoSs?V41ZQCZA8~eBQ z5Yv}io1R_Gb^0z8Q}iY6|BOQq+N3kywTN!6vH8z+V!HQ{`tozh5psZ3_0^|-L^Aaso$4!wcgUYEAn!>;2oVcdGBJb?pY!% zx_kZlwf3LiIxXC|dh^=#{UP(NFkSV0*ZnW=OIEypw6}Y;`{|vg;sM%aU&~8$Ro|O! z-&XcOFZZ2D6=&nq$1mb8ZPVEQ?_=w$HxU;bwOfo7E12)@4gdbtJLF>DttOW;eg&b( ztxGm9&X+vLzEsupd)G5lCN29{tLB;Rc<2_Lk>j?+cGsxFbymO*!d)liutz|ZxcqLgvKh`}&XNqHevG@NB z`Nv(Rr^-|;vOuI?#@n|J zOLJeiE=t#|^R9B7ars*3iM`^10+Y;V%x6tx^4q(Zb)r}GaZ`=M^ZNcxOLfvdX&t~$pHuHcfyBO)XqKY?IHBm#pl7k*N%78O}=@CT-nCtspiA5nDu?!)%%-Q&7ZPl zJMT#upDBOOdT(G+{^EA&ZGLv-HCL|7x9)D@DrZzYbclOPWKQJ&u5&lK{;hi^n!8c7 zwmW*svlm&?8b|!=9z-+e&ehoVcK-gR_en+*1#%3Ud(LT}(75CJC1r`Qqq0=sw8g*o zPyDFywT4e}`bP=BEf&8Re_8%g{l)O>?b7cT{nM9R^>JH%T&AJtlqh;APtEvDSfx)4Tls%h_PE!!ULzwuE2yqv=J*UXQ?Ugm$^Q@;P#_M@Ng*)9!tSo=!vQ+fd7+E<@+ zPcQxdB=25$_R{~wE7hkay;IoPaID9EV`0U;@b3Gu-g@gLt~#ur$310p1Fu7g=vkGd z>|^&8I#130{`OJ-^*o(ZqJX~l_!r)G%+}lwJ=b8M#;y! zIT@F#yx9~sWvDH_y{qtHaPM=L%_lY=+ZumX+EU%(Xy(Gm@_9;%4o^xBtjUhq_w>`+ z=iEz{Klc@7eVv!Z5i#ern(oKwW6ftOvu6LAJ+=D5n`;yGxA*>eb#vm!2P^-}XWlBA zV0cG4%lW~d#=8s>&W{hRz5hS{P?XK5zyGf2JEu zcae$tIq9D}3ZLBmd|&3UP5-}$BR@}n5bSq|d%ketmj=0m1|I(p+U@XK*r3rScjicV zz@?^XN}Ufk{_s*gxZhql-cxgl>Oz&a+ zOUQNSn+g9h{F@!}YRQ-L2^BhahXp{~X&=v~8`y~5Pg4Am{OkIfEAayJQ#t?5_-DFO zrRH)uNZZz=nn@nJYcCegbYc_AwWV;n?pN}tdeP~r>VQcXEe2wk8e^*w2 zGQK<`UBy;vdAn}-+~oTU>w6w_9OlqD_TI1gKli8EQ7ZHEa=bQC~Erqw3u9_wV-3yJi-lw(W}Q;(66v^E7rWy(Z*&&ap@# zy?n~)6DhOq>K1Q0>R~WFp3sML5E!Z0%Z`;`DgB%F)EyAA=f4gPoq#7xhgA!>F zM8q#KHx<*%ZaInR#R_H?T>6g1$si|L8kp)CnH!sM>4S^}iRc;`8tPdZniz8F2bZMg zhA9{so9mfd8guD8Cl+|5W~OJ9D3}|X>RA{W7<1`ELenuXJttK`*U$)Jx06$Tg+jEh zsiC=^frX`og08WViJrNExq_jAg`u9QiLrvAfsu)xrGb$#idR9-hk6x~oeUL>OfAez zxbS8>+Sbm-Fd%OxCiJr1iKyc6n{zqiOwfrpCNBMT=!Je>rxVmg-)u&N%7IpgghtTidH+vwq3F4Yy+S`LRwi zG5W>C_WvnW!U~T~Yvw1c-fmVm)8e}#gR|Bl@dKsH-`D;>n%w_xmh{yBoA+6-YO{YG zqi=Wq_T2Cs>!NR$Kb!ti|H|Cx#BoX3vBCdtM<1s_R6WCS@2~z%oFxKZ4u30_+9og0 zY9MT4ahu_$fzZ*fm*cv(EsB~ddX~FkcAd{574tK$1uv=&I-cdJ=vkv6beH4&h2DLk zYs72xbKA<6$Trj#Z;bW$T=QM|@7+nWQ<8UcEEG&MJ2aPLwm_Y81;awom$QGwoKt4V zQ+nC^;L4c~wLPCsnX)J9A2RJYKWSgf&098C9xI%AP^{XZ^kzR>rSHYOmYFx=TOa@4 zu%73({ljY3N4XZ~+kdR?D1Y%zp<&N__dg=vo-54fXwhBq-Rm3ErCqh&FWe@z*`zCp zEaWlYR?6{tLf`sigZJv}54nmiEIU| zzE*@V-LE{ts5mvR?WYOfx65buW$yU*_0%pwzC(5Uo*kGKP#?Oy+wo#yoWX)KubUSJ zZ|_dH$+}@Wugb+6b{zp722FBJRhcrs-h1!x`Yh`6biwgCj@D<7n9iHB>VcK*k9m%^ z+cU}@*wpYhNP8_c6*zb9K!8m2npj@@B>M}D9QzMU{!+ceJG-$~B0gOCKf8dL^7&RJ zu~i9D=gte&>}ygvBJccQQ}Ca%N81kSM6Tb>JZC@&6;(GB2VsC_P@WBk9}7^k-b!^eX~{cjHSnN8Fuj12^21C z+VI!SqNRZ0VQI_ZjLp`9#}w@34t6(~xb$xlHtY*>*^_i;fozaVO+wCxAJ6v*8LnQl z(C5gE6OxM#{^UIIysl;W*4YoET6{VDmCtg{)3-_6Ij`=X&GL#fKcWTie@;}t>yiA^ zs?vuwYF;%%Z==kS8=tn@ysvokd79XvfSmLVjT4S1Pdh$)|I;$TU&(f#=5TD8oBefR zUD(Asj;~p3^gnO6@!zS-lq(&h`(`h1nL?cI&IOb1vK+lMe_>ZyL%6X>t>yjgE$e&h z*w6lAKA`>5rKbKt)3-XlUHm6)&NBXRyz$w&LgF^-rFN6ZUlTG+X4l-$XxOvvrpt7W zKa0LODX>p5yjR2__j~@g|M?AdOK!4U?WkY<^TPAPU+)|)cKR;+vR~nM^qc!_8+a6b z=li|8eqR0Uu9pcH9^G5^bY}p^VUtz^7b^zVAoDfM3}SEQue0RxeZwcASIb_uiRXJ0 zzvql~((f2oFSMTSYTqPnS@7?M8Qamo=`(g4O#8FeK2ATU@@#mr*OshzvGtv1{K=C( z>}|ZBzR^CRS4`p2)$0Ns=dUjmy1nt=k2g}w_cc3y{Av5icaMRde$LT*O<(WMUv6Xm z=k@ci6R%suDOb*2T&Z%^zdrG{<$RtaHkA%n9y%KYpMCq^DWWyu@J5j+SE$~Y3`}w!jAM7!cD|vM%*oNPgPp=_qpSjo74N<#}f9GBISa6&0 z+upyIt`;;)FrP?YUfaIJ>ptf`^-ZCR*g`$O|LWWPSfaY-olN}RXSETFW%)uG>*laU z-#h;Gx*dD{S0#U~BI;H_vC^J8UQ|bM0)~ z>e8ti<&1xPr#IBbT$6qAUnj?QpZSrxy*%Hy`>aT^Pt3X688K&heKyqf702bKf=x#ovL&*KlZ)zTcG0lh!+RWYv%2kH@9u| z%RG$(QAUyb1(Q>!-B_M~_{VRahwQ8mTw9n#k7+p^E_`F#bMfepe;URUv<2dQ*$>?= zSuE0D8(4FG>a=F(S&WuB4A&-R*aYuk@1K1Cp`sY8-AmpIkF56olka!CVFlYe*y2+h}VVlp85T7yv%NN@g4uh z`5p6^e+unOHGUBNR`-Lz^y4oDzA69r;=3eqLgaIk!;4q#+$GDFZs>?*HDA0hUiqJc zcx~YIhI!f#vll*A{UTgdu+O6ZvIqacUWR?j9AZn~&XBos?7wt@%8IF#-FC6(zq7s- zT2m>X_*VP4u{Y1X*$bH8n?3)SR#0btX=>tc+i$$?Hr$Nw9c2}7Y!|rw_J*5MNV5H< zA92U_DXnCG))lmT-O+uO7Wex8<|lNQ%f+j0V`n@!*QF!mL5<9|a^;xz0)8h>CXKf@ z{Y7hQCU1yssy*@k&R&b>;WhFdKbSf8E6;JN5P4`erv4GddT0tk>{FZ^t4&MI$kd-{3TnQZ0t#}~=1Tx-FuQTj1@UwguCrq>T7K z4YS14=NITJoORkC_a|tLlmF9KtF7DfJ6Z!KlpJ^18S^>%i_oSicU<2o_6zD;I@N5M zBe!JzWq--Uo>l|n=tEIA-@Y;YwoOFOcS@RP@zT&swU-WGvdY}O#s63Lm)^AgXR2qn z&obVd|L*T@8P)R1)u&GubI6&Bfc_ zTi&}Zb%N^sp!CSJohLV4D%zbo^{L_Mw9{s%<4)I|K0VD`_kF~_q@Px*_Dc;?L%dwO zbeCGC{^LBGSygo)vMS7OcD336HyxXm&x_5S`@;J9=a2br32QeTi29^s>GH2ptU^@x z17~vsYn~JLos-u*UAm^Ic^5A+%iQ{9!IvFdT(hRzP4vsyGplx1x#{w1{nvZL_@*a6 zWr=j-Ub2w2=!wl$rq36cUSD96-W`#!>ZMe0^Z}-e8IA8w?hWM*Q3>bdK2e|0=*h^v zCGuL78Jo@rwx|cfTMle!V11+c*>A$-CtFIUEnvNLj?a}_WS(s8wwCAv-&Oz5J0kA> zY{JPWs`mwh8n3Ezy`99Am?8gm=hh$Z9vEJkcyHphi|ds|wWl2vf64vT@%YZZWZC!g ze}B0%vH1PG>d&WdGQ`US?wf2`W_)Px{P^NG%aZrk|GTm=t>$o7^%~xVUvGS!Z(eKm ze)F{CYJ2;FH|NgJ`<3(c;#GHf`>v~RU$EJI-`uj8yYJl5?f=}l`}u5cJ@+^{@saXR z_fLIK>A{=NDjUUThXIKO@UkDZ4#o_^47pKtN! z&BI5B7xVSo+<9K`De>~dd!Fn(=M&}Zm)~Ac9kJc*`-FFncbRwnp7}{On7!oZ!f25f zpYHkfv+c`2)nNZ4(UT*8!*K_ucVC_HP z_QU!QOZtPt8$9a|uKvIi(!_gf!?!(*WfmOk58wWvwuiO-L4E-5`-9dW^l}=delWgk z<9|^5!}!V}^AECjxIQ0X{Jc=^)dI$AO~PUh$~zA5`aWoEy}+ZMAgI$OcBgQC`|AXA z8#eDm&TChme$cJquRf7gB)_mluruR<&K%|Mli5!+KT)*cmv!+jVbNDl;jNru<0N-f zroN|TLV%Flp_7kOWdAVjpY-(!=cYy*&v{DzlY3KyZ~DwrjNTwtaWZUEZ%+ID2hNwg z@|3Ml_-*QbqxM#%$z_slihidOn~-nP1Bn{HBu|-}?%yWosm#0M_s?aX^7+ZkPgp-G zc`9^%(5dh&pX3s!q(511iTX>|s>$IeR)4Vm!@RFSzjNY=BQBFZ`hAhAoV&;Io=SeA zZq@7=p7KeGnondu=~edc@&D&z*RXeqzNhM64=I`U^(Wdt2-dLGH|{@_Xu&0ac=;2N zWxx6(PS-2dtEZpPe-i#ldYuJkY(G0g?-hSJ@`x? z_pamLdO_sY^ktXoOnR4Hp86$h+dSKYZJTV&dU(@+zTq-!65ZfrHmNshaipMjn(7-b zv$o#U@Qp!ceZA?zH(bm*eba((gqZdErW@b5x~6C9=9zD#%(~B}72k*nJGf@eq?-|< zn>S~L9nPBBd^Y)Wr0nW+-ZLkqZZbVf%6pdRo1>VW)*ZneeP&(i^^LDLF49jueWR$1 zdADHp@3U{jwl%Fy**;1CWZ|8+d55#=*{}WHouGa1Q}juN8=SizsD2X7X_x(AbcaFz z0M{>DTTlPX@-H-hl~=X>^Qm8Ge`)@M^iSqh4Mz{uRWSG^t+QeLK7naRcaIA9$-6s_ zuTeUC!Ec?i`bmDD!&}x!U%nXsGXG2YFaD}&s*mb~kL}tVFztv^1pl?kUz7IEoOn`a z&Qc>`?_+mY@NeE=GVSQ5$a=GeryEM99W;tGkv_q;@u1Fh-h+E%xnF(1dn2gk0=Ln; z`e?n(EmpN284(pODN_`!)XdgJ*El78Um|B){nhN$vXo+ZZ?F4T>M~zS&WybIm;DKk zjEP10i3@uY4}V@S5g1@mbmhgON0YRV_v~F&a_0x9u)6O&qtaVnB*UjqJ-;XI+8fJa z?KJ_Jt2c#Tzhd?5?E2OD1!j5$J8gZrXNzyu+4pVN>*+eN+y1mk=kNMCO;kHSckkP8 z*6;SLe*3OE?C_4$Kx|GL^YA4^})zwzNouz&uYBWCuSpGLmFmV3MW z&7G~gYtP@S{r&&TozLuX6(5&QkFWgtAbb7(kI$mp@6|nzt$6>}zW&2Qclr8H)A!5S zeR_HEyx#mGII`NU599s&Z~0V2OiZk2hf@8I4SNhqRN!J;SBe$0(k7vTjPNM`SHy>O!YTi3KWbmhzvBjh`fKeq$SwGVS)s zGbd9!?gysmP2a1|Y8Uq)sH>v$fcRw2^bT$BJlWX-?vvS5;qS{XWo7?+L&+4y?c2Lr@Fp; z&?=r<8a8u!D#)wF=94Z zkIsK8deT_Da_N#qTUlK1pIbX)MsHWa*PlUCTyLH|x@URPyf?gt{YKZfom=hDuClc% z(W^T%IwC_C`{+QJJ~OH-@AJMFB#KJiS?+O~|Nv!az3 zhp5;nNo-_4#-et@GR#Uf!S9f%QU6hc52wr|O*M@lJGFgkuhrOct4&Gr-xT3FPuDt` zTkKI>tR2OBxWaz^`>PQj3aW>b{EUzIws; zQdhj$$ji0)^69->n)+ov^q0&&=RWPHJJV(DGZOo(k7zEL9X?;^hj3~~zwSEOXR06n zr`%ZAGu_X0y5GD=HSz6XE4Jy*z4p{sQeH|T*f9Ui3!`hzt0dkYJfh+DXbpp5y(af} zFR?$1MJL8wU3WQIqf1U{dIhg&@|5(-6(_&s`(=Hf`)sqzWlP`C%ho!3U;qA~_dfOt zcYf-M4O5)Fm!Hka<$Y@u)>OKD>((PW)3=0eiMm~TTI=klgLihd+d0n9$kkc*p?b^R z?ccY_-J5j#bfMtZlnAv0CnO@g%nxklIIld%X~F_~J9VWqt_cAi<~h5w6B4b>id{F? z9(pn-b&ssMo%TlD)W}u z{`xbe!tJ54^g@P2&8C(^*Yn?B^PVXtbbR^R+w-m{tG}w;#ix1g;hs{bqou72Eo6)X ztpnZtdu5#VIp_6vJrDXgM|&RYqnWz%0$;t@9lC4@*Pfz@zBTHuVtkXYa&P_Y2eectYWx2;T&wQJ5%%z{qNRd2-x!HKP6&*$R@~jwdMvt^+4$%c8N1Ty zg$)-|&lqtPN_Oq2>&jcX=Vt1g?n9GWrzAc8(lMc9f?}?FNv{9PTV^kAO?z?6?bWTe z*SCsFbDK+Z|CZ+7+_kMFcDC#FYu@6^`!7m=nfR-qc17I!>#tO8uQuDQyIa1-VD9~Y zkGHVh%TWC{g(YvnpOgCq9g71OEiVwQNRHIhoom%KrHcQ?f-OPc{uy1pzP=If=YZ&{X2-8%W*p4ZRhYUbZ= zj(c18S=P4V_3od2pNcx-BPK)$7%N$=U-CkzpX=+)dp{@7xc78Xo z-RF1oy4k;5$Kr*nE5oPz>3+_86Z-D#!;bagl`G4yhE#^#l(Tu6ucvpb*}X33)ah>< zcs4Dq;Ci1f>H75P(ic*W?TPzaFXukwz4X$)iOG+h^;bX3To)0m%?l212!8P>)qvZo zc+Z{Ib>@|AmzREIdnwfCnD2Pq`eB5?-D`WFJzBIjZS(x=agLkAA3i-RuHvRVX+}>I zOYl(*kDeB;Nt660`Ak*Oc9^89VtC0jIV3|V#om`?`jmh9e{Z-iT`q22vBpR1_Nw;4 zr#rYi% z;760>s#O*IIbRjL=?iE#a!>1f;w-VZMq`rv$tw$ws2=vU{WfX&6-DMU_r*O5wzl)s z{xlv*au0maAN@BoD4Kst)#YW=s<;c7Z>_p4`dD-63Yp)(e*ZpnsOxqu`;>D!Z_YfQ z+r!GiT&t+4r5Kfb{RofIMUS=xTu)!-g|M=+MqhZ$b~f&XUIMd((kv{`;$`|Xc?n;7k*4?3vq>E8Yz_Mh3F^)=jUD}wjWesiGu zYto*Z_I$rj%+F9hbELY2>E8DErhhFz?;YL!=c@|S7J=sP-<=JZ-+jC5nxx3H>u|=N z$?p@_Z|twNpCELpp>z?u$U%`CN9!8=J6zUZP|3Qp&*y>z#~!Zs7Zz8nrFI<@kl+?h z5PS7S<<&1P8MT$OF77*jfTh(yRCW7-xf}TIDU=6V=Pr7EGkey{eeAUwtd=hoS-lQ4 zhU8_mu@}lN|L{((d;6>P5sS7gd%V2we(j&?{(S}X-Jt$3Y(_pT4$n?wjCmlD`9` zlyxWVyVmwIsCMbTsQXIy7w>ysJAbin?*y*L6Q1kLU=E83HP&gDPE@VR=B<-!bN{$+ z2lp*TW0`+F+kc&ZsQzQB%On}2IZq~M1-XkQGT!nmn_Pb4cZu27OUGX-?h!uca`UyJ zbk`EkNzqmNnXTH&?%dnB^>J?elKk247rd{&U%6$OU~Zmccbb#rjlfT53(W5Y&2RAi zbDQ(eo7TexEc+Z!w>~)T@W_MdrSq?eK6`#XpX8ZhG}AMyqkYQ+=@WC8^x8OF6VSie zcgw~-PO)C~kM^-M$eI#usG+2<+rOW(_Ds?n0!OVpR7FD+m4e#w2) z#97v+t4+RV@4Hm9ly$9Rb!*wAZDG~xx5fSzm%Z$JE%f!Y7t>zlU3hya_xzgsJhu(3 zw>|P|u6vWC(gN+X%j1mZ9oxMBF>jq> zNwWWB;{vv_z|K0SOH0*HM&0P2Szg5o*}cR^Z3r$iHv(V`ZJs}q<{U@^H`XiU?6$A*4h7H`3%{MOBkLd z&YPqD+C=V`MC2L23k5SA&s{!$qM(<3RiSpg-?qz~Z+wenjPvb}d26m*TDe5%+~Mm_ z3O||7<$L_HcZ1)mi!}~*sxMQTmWe&)Uy_`ovwGRalKZarx$L;D4TSj)T6~i_qx3!D zoBX1e2Ggt_CVo@@#QR3!x~J(Hv8^#Kszu7r4yD~Vcg!QvfU9hS><5|3u3DE%47Pom1t`8>w7+e9s=f&DUGS zxSD+}>UqO@co(>zY5G~Aek|L3O|IgMr>YS|8JkuWYPyO7Pk zqWSv4&}hw@?wcIAt*la{GnSN1+S=^6qEFeHv*dcVY0Vra<;C0EV?M_u?Rq%<&*z`Q zJn5f~&p+SJbcFZ$2g3#XHE)UJ9%N_aJa_WVft^nOw9Pk_FswhKB7L-WiDkq0Z&O?M zdcXYIGEI1rxK&#Z?_9UjPNoYJ6RR5^?47gV!RFS9Iwqzr!qd1OE?lUXnD~~3%UQ8y z!UWGh@8xf0{yf(qkkrt!_leddwm;neYbNcx@j==1%)H)=ZC%A8T$etxrp%97c+zYC zy$_!n{-v1d%*gG!n$`B?o8%dKFtG;%aWz5)?J}GQck6_UpH?v1t z% zJojw#vbCP+-(&x$mF6ZM&)$9~V^Qui>FsvA@*Ur`Tx$IJ&H7!H%FCtav%iPm-JEo5 z{pYY}`49FBTVF1BIyKeJAzp$p+T;i)-Na`F-p33|+RUQoFW-MFBzY2B>XKH^ zn=3U1b+~l)o?ZD;$4tpYUDMRoR@p>J&%{J&U%z3aichDh+RGrP;vOBHg*saEj%=Si zovS+i^sOm(G&m+Cpc6-wQyj!6iv~FG9leR#<*JpS|&3*N1(_DY94Ng9!Tpeq=V1a*M?Y4&# zmp_|g;+OyCNAAfZb1a)rTn}uUaN>()1)$e%P)0#%$viV*6lIRcJ{g@J5@1hEc*HhQ{9}83BtbMfnh?Bh2FICCpQmN$q8{&!lV`EnVab7$GxofB-1hnS;>yMVC%Kl)%bgX+_&OhN6EVEMJfF*-$)vPN zuQi>4t=8s$Nw;vD|IB@x|9_I~7W=xfq-LJgt`}Qn*Y8!&ojT3*?8>umYX9!uX}pF# ze2ad(-?Mh#42_i%Gv`h#%l%$=&d|H;%})J2iwfQR{JetRopB7Ft$wfmtm*ZR_c71C zx*dN`FZ*|YL+YdV)0}^nKVVueu(o$6LNwdC~rs$iU3TdW8)p zucjTSPj^q=@Z-O;<$~UwaYrSe91B^!gXN)Nc1TR~4_~cyttVzI4~b!)YPdTjhJWM6 z;t(5_uE()ja$alMdb`>WHvG7&CCA77*ndR@%WTQnD;`apF!e(7e{Q$Vg?SS>FNel7 zEos@vbiJc)dDrK<*$1}X`Nz3^mBlTahgFTQUH&I)o%{V>bVuBm{R?=&Bcu`MADG`(J3m(fwTOeuN(s#UUxf&$}r!W5U`)8|?jJt0lgjes$~c z&w5MEhx%H2j^|sPnfi~^)gC&prT6eoK1<$%Kf=x-b3WVae~7r4A6EFr-$$S#X2RLW zO*!{`FT^i=G^eiNz+>0{SGCUl_GY~|_p@irf=4IRFY0}eYx)-^`ut1R`fApbZ$(wE zYy4OfTzKxeUE_Dbnr|yDo_}6*;IhmAcCB;2M9PVr@^9S)IMDZKyTx(hot=IdmgmCq1+6J_4n8mL!gWgnKRlDV*%Fqg*xO(5OY5T6FLTb!O%nvxOm+V7{Xs=@MZVac?9i8GQ?F@O zXm0xZx3p=y`_>NL`y!`fJf1twD@zn*-^P_c`_^R@owK!9B~|?%icjB=F?Ys!)29~$ z*Pr|3y`l3bcj!vK(xo*%8`GAHu9`ThIJnCC?W=&buS3Eg34HN=wD$7qJi(2nPP@I2 zx7ZioY213_==~E#b#rZEG}8C2S{u4`zwePPYmV)`pBCy=*83v#nfc=m=dX&(R|@Zc zd@$YOV`OtOcWAb@j8*YXt(v7S?K(Lb!Pnml#H|)K=~X&EB_l_`cFdo9$*E1wlQ)!vPQS6`Fw>jw(bJA^ z)7@|=OYruljz-r*+wug<I7>od;& zymcfaeTn9!)h%14T&Hbe341vG>~r((!qppEyr&*4_Sm?{{ml35H_z{BB&~?M60kon zQvB-G#MnK@UdQ%!)UUpfvnC>X?gq2}y|S*m_J8_x%2H&$(GsP2zsEv17p8>n*PGL9 zS^6!#?4^AF&I^{?T%WXguND33wD@P^jvx2m33usdUwM@oo}HAQ8@$8sxUEZ@XVN|% zO{aSmHGVEPuPWX88}{tu8!@?6p*vF#vMib1rmgKL(X0LFhs&F%pS?d=`h5{kJ|9x^ zY0pj}-T0pQ9~YHNxj3w7$W*#?clrrt%M0r>)>P~c>}@~yXXg#OQ+6+1q<6TuT;EwgKyR z=AI7C-1A8%Ws4>!t;jb$2g*lyvgnuG89ULgzHC z(b(#@bzAh>{CX8@?;~~27vwG!P1Jw$ic`a)c*@+PS|(W{)1Fq(b$)Vt|F@lMjwLw< z-2Hm`>CJdmowppf9>zE>-_padRa+y^`n>4>J3%qKs}A0m4?m~(XIAU~=iK>h;llNA z-z_OoS{sx;tL3QW|62#DMD{i<-W|90Ti4&IYqCNfFD?#$A?5r($93*U!>~1flg|G< z-&$k8W%Y9RRMS(DSJd|0Drn@75x=o}vT^+U;5TBSS+TJi=W@>q)O`AV{oeP_!9|zW z&GX;&?onNx`0v1tVb3#fsa3?yIbPQvslTE0>wk~ie%kRm3tvYrS?yN#wdL)>+AHT9 z-y11!G#CECXC=aRP~eVfY7O6k?LK=J^EkcW{}X2?>lJ$HpM@2JJKM@10umhu(w`nm z*mJ(%!JX`*mdga6raoRCS+nU#<$~;Ew_Tq8UR>Lh?5bovo4Ih|n)=}Z zW})zv%`<~-zkdD`QWi8_qL72%=V@@)&A|KDdRJzp+RamV^i zNADSjyL1-KJHZw3FJ0B7+ql6g`+vX3$NtoKfquq&m!qWKUJaWaTNgDiEPMKKYw0<1 zZzj20$M*V7zxueq>_l(rHl3X(UTyrxy(s6L&%9S_vLD&zRpv0Clb$gBy1lTxW#p$5 zyR0g^7B9Q@c-rzCcgwCjRbS0WZ$2J(e&&v-lNjS) zZ@(?snVRi9HOKXz@3yF$3pW*+oS3(aZTFowAFezqvHoVY`bSRR^~gZBbK4gg{j>Am zy!YVa4a!@2C#r>ePt);v6q8XNSy(AI{qC!k#}(}kUTg6#DNf8wH(jL}vLbKQYUhv_ zU5{SR)i`o7;Odia9ZPrF>Xv>>@Gf}1W2eaO)%PwcXvCcRdE#2vuiLW%0-7(ZIhDA! z@YBa5FgoHYwAi(XZBoR_f6DT#Ot}-f2w+9Kfg6B)N)6^p-;@BC8;0srf*ogLR4HM^!bYN z53CCX9IwAAIa{u+sJ|$>#A>!-+AOWtGVh}F*ef-ktvkNK{qM!lUfoTTxK_39;u88M z5q)>3MI5)d$<4b?JYj*e?_OQ7?!eMlx*d17o?Es{tLJJfU-jmoKYCGi%bopiZJZZU zDt6|8RG@C)vfO!o@}FBHL)Wg>KO43}X2yar!Ks3$HdeJ2HoXjXKQ*)H)dffAUniZ} zc+S4DUs3;m!i1MgZ``au(BRno!7}B6K&8jK2YU`y3NG9#=l^)an>Wv%JzGaznSxg9oMjf;hR*5OU8B)mXrPV*tfvMRB6u09+lxBJ$1?csZESoKdt zezmhj>X}m}m$c^0o$#Vna-vD74&T{e9lr}J>T6ANkJH}c#6I)_DV@UF|+wvv0ko5$)~pHCkBEus6~INd9A%fZ^G=XO2udd_aq z)c74U6f25S)3^*2EKRr!;6TC5)YRBiAx!}yW@cz%VWI$*Rmg*jnHXE5iJ6+3fwn<_ z6e6j!G&90bX93z2fU3^a$jks;otc5TDXN&Ufr+Upx_M^ihNc*9F*CA6bF;C5iJ2w3 z9p)y+=4k2+OwCM<%uww$u&^*NHAfROH8V$7XKY|%VQh@1&eF)#4Bb3aGfQ+g8yc9I zSQ?_~H8nT1Ko>JJG&Myt&(O%g(gfXarsgIFXnr#^Ha0TARA**{<~KtVV`B@nus1L@ zw=hN1YiMe0Y=IshrWOX~XklPzW?^7}VV;E%x*djQmX?N?>P!tRP{YO0+`_~J(_V99 zw6HR?G&aYGb5jdTQ?zg~Ff%kmPm@LlW+nz0>B`a&L!F_yfd!g>4NNUf4AINnwz7gKVu_P6ZEueY-DPNo(GMMEez1( z2$WMT(9)2xxseHa-ZC~fGBZI-8=x>k4?mEY8G1f40Bw9i&8r3mhDN67<{26r7^1nw zz|hzb-ERg42F4iWm7#%w0eapyG&Zt8OKS#3W@Z>=v5~ofAzGLkn3@`ypo+gR%hxJo diff --git a/Documentation/MaxScale 0.5 Release Notes.pdf b/Documentation/history/MaxScale 0.5 Release Notes.pdf similarity index 100% rename from Documentation/MaxScale 0.5 Release Notes.pdf rename to Documentation/history/MaxScale 0.5 Release Notes.pdf diff --git a/README b/README index 413eb1b26..1e495b1b2 100644 --- a/README +++ b/README @@ -35,7 +35,7 @@ Bugs can be reported in the SkySQL bugs database Edit the file build_gateway.inc in your MaxScale directory and set the ROOT_PATH to the directory in which you have installed the -MaxScale source code. Set the MYSQL_ROOT/MYSQL_HEADERS variables +MaxScale source code. Set the INC_PATH/MYSQL_ROOT/MYSQL_HEADERS variables to the location in which you have installed the developer package for MariaDB or checked out the source code of MariaDB and the location of your MariaDB include files. diff --git a/VERSION b/VERSION index 8f0916f76..a918a2aa1 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.5.0 +0.6.0 diff --git a/build_gateway.inc b/build_gateway.inc index 26fefb0e0..83ffaf762 100644 --- a/build_gateway.inc +++ b/build_gateway.inc @@ -2,67 +2,52 @@ # This file includes all dynamically changing build-related # variables. # +# Current values are to satisfy MaxScale build process. +# # Modify to match with your needs. Do not commit any private # changes to this file! # +# # -# Use debug flags -# Values : | Y +# Set debug flags # DEBUG := # # Set build env -# Values : | Y # UNIX := Y # # Set MaxScale branch directory -# Example := $(HOME)/src/MaxScale # -ROOT_PATH := - -# -# Main directory for headers -# Example := $(HOME)/usr/include -# -INC_PATH := +ROOT_PATH := $(HOME)/src/bazaar/tmp/maxscale +INC_PATH := $(HOME)/usr/include # # Set prefix to MySQL Resources -# Example := $(INC_PATH)/mysql # -MYSQL_ROOT := +MYSQL_ROOT := $(INC_PATH)/mysql # # Set prefix of the path to development headers -# Example := -I$(INC_PATH) -I$(MYSQL_ROOT)/ -I$(MYSQL_ROOT)/private/ -I$(MYSQL_ROOT)/extra/ # -MYSQL_HEADERS := +MYSQL_HEADERS := -I$(INC_PATH) -I$(MYSQL_ROOT)/ -I$(MYSQL_ROOT)/private/ -I$(MYSQL_ROOT)/extra/ # # Set DYNLIB=Y if you want to link MaxScale with dynamic embedded lib -# Values : | Y # DYNLIB := # # Set path to Embedded MySQL Server -# Example -# EMBEDDED_LIB := $(HOME)/usr/lib64 -# ifdef DYNLIB -# EMBEDDED_LIB := $(HOME)/usr/lib64/dynlib -# endif # -EMBEDDED_LIB := +EMBEDDED_LIB := $(HOME)/usr/lib64 ifdef DYNLIB - EMBEDDED_LIB := + EMBEDDED_LIB := $(HOME)/usr/lib64/dynlib endif - # # Set path to MySQL errors file -# Example := $(HOME)/usr/share/mysql -# -ERRMSG := +# +ERRMSG := $(HOME)/usr/share/mysql diff --git a/log_manager/log_manager.cc b/log_manager/log_manager.cc index 022523488..c8f96266e 100644 --- a/log_manager/log_manager.cc +++ b/log_manager/log_manager.cc @@ -253,6 +253,7 @@ static int logmanager_write_log( va_list valist); static blockbuf_t* blockbuf_init(logfile_id_t id); +static void blockbuf_node_done(void* bb_data); static char* blockbuf_get_writepos( #if 0 int** refcount, @@ -996,8 +997,13 @@ static char* blockbuf_get_writepos( simple_mutex_unlock(&bb->bb_mutex); return pos; } - +static void blockbuf_node_done( + void* bb_data) +{ + blockbuf_t* bb = (blockbuf_t *)bb_data; + simple_mutex_done(&bb->bb_mutex); +} static blockbuf_t* blockbuf_init( @@ -2059,7 +2065,7 @@ static bool logfile_init( if (mlist_init(&logfile->lf_blockbuf_list, NULL, strdup("logfile block buffer list"), - NULL, + blockbuf_node_done, MAXNBLOCKBUFS) == NULL) { ss_dfprintf(stderr, diff --git a/log_manager/test/makefile b/log_manager/test/makefile index 6d37c7197..75df90c60 100644 --- a/log_manager/test/makefile +++ b/log_manager/test/makefile @@ -5,6 +5,7 @@ include ../../build_gateway.inc include ../../makefile.inc +include ../../test.inc CC = gcc CPP = g++ @@ -43,7 +44,7 @@ buildtests: runtests: - @echo "" >> $(TESTLOG) + @echo "" > $(TESTLOG) @echo "-------------------------------" >> $(TESTLOG) @echo $(shell date) >> $(TESTLOG) @echo "Test Log Manager" >> $(TESTLOG) @@ -62,3 +63,5 @@ runtests: @-$(LAUNCH_DEBUGGER) $(TESTAPP) "-t 16" 2>>$(TESTLOG) @echo "Log Manager PASSED" >> $(TESTLOG) @echo "" >> $(TESTLOG) + +# @cat $(TESTLOG) >> $(TEST_MAXSCALE_LOG) diff --git a/maxscale.spec b/maxscale.spec index c8d12ba2f..9ab55ef41 100644 --- a/maxscale.spec +++ b/maxscale.spec @@ -25,10 +25,10 @@ MaxScale %build ln -s /lib64/libaio.so.1 /lib64/libaio.so -make ROOT_PATH=`pwd` HOME="" clean -make ROOT_PATH=`pwd` HOME="" depend -make ROOT_PATH=`pwd` HOME="" -make DEST=`pwd`/binaries ROOT_PATH=`pwd` HOME="" ERRMSG="/usr/share/mysql/english" install +make ROOT_PATH=`pwd` HOME="" $DEBUG_FLAG1 $DEBUG_FLAG2 clean +make ROOT_PATH=`pwd` HOME="" $DEBUG_FLAG1 $DEBUG_FLAG2 depend +make ROOT_PATH=`pwd` HOME="" $DEBUG_FLAG1 $DEBUG_FLAG2 +make DEST=`pwd`/binaries ROOT_PATH=`pwd` HOME="" ERRMSG="/usr/share/mysql/english" $DEBUG_FLAG1 $DEBUG_FLAG2 install %post ln -s /lib64/libaio.so.1 /lib64/libaio.so diff --git a/query_classifier/query_classifier.cc b/query_classifier/query_classifier.cc index 1976bd6b2..aafd746ce 100644 --- a/query_classifier/query_classifier.cc +++ b/query_classifier/query_classifier.cc @@ -50,11 +50,13 @@ #include #include #include - +#include +#include #include #include #include +#include #include extern int lm_enabled_logfiles_bitmask; @@ -73,9 +75,13 @@ static bool create_parse_tree( static skygw_query_type_t resolve_query_type( THD* thd); + static bool skygw_stmt_causes_implicit_commit( - LEX* lex, - uint mask); + LEX* lex, + int* autocommit_stmt); + +static int is_autocommit_stmt( + LEX* lex); /** * @node (write brief function description here) @@ -346,9 +352,9 @@ return_here: * restrictive, for example, QUERY_TYPE_READ is smaller than QUERY_TYPE_WRITE. * */ -static u_int8_t set_query_type( - u_int8_t* qtype, - u_int8_t new_type) +static u_int16_t set_query_type( + u_int16_t* qtype, + u_int16_t new_type) { *qtype = MAX(*qtype, new_type); return *qtype; @@ -374,7 +380,8 @@ static skygw_query_type_t resolve_query_type( THD* thd) { skygw_query_type_t qtype = QUERY_TYPE_UNKNOWN; - u_int8_t type = QUERY_TYPE_UNKNOWN; + u_int16_t type = QUERY_TYPE_UNKNOWN; + int set_autocommit_stmt = -1; /*< -1 no, 0 disable, 1 enable */ LEX* lex; Item* item; /** @@ -397,7 +404,9 @@ static skygw_query_type_t resolve_query_type( goto return_qtype; } - if (skygw_stmt_causes_implicit_commit(lex, CF_AUTO_COMMIT_TRANS)) + if (skygw_stmt_causes_implicit_commit( + lex, + &set_autocommit_stmt)) { if (LOG_IS_ENABLED(LOGFILE_TRACE)) { @@ -418,7 +427,25 @@ static skygw_query_type_t resolve_query_type( "next command."); } } + + if (set_autocommit_stmt == 1) + { + type |= QUERY_TYPE_ENABLE_AUTOCOMMIT; + } type |= QUERY_TYPE_COMMIT; + } + + if (set_autocommit_stmt == 0) + { + if (LOG_IS_ENABLED(LOGFILE_TRACE)) + { + skygw_log_write( + LOGFILE_TRACE, + "Disable autocommit : implicit START TRANSACTION" + " before executing the next command."); + } + type |= QUERY_TYPE_DISABLE_AUTOCOMMIT; + type |= QUERY_TYPE_BEGIN_TRX; } /** * REVOKE ALL, ASSIGN_TO_KEYCACHE, @@ -648,11 +675,18 @@ return_qtype: return qtype; } -static bool skygw_stmt_causes_implicit_commit(LEX* lex, uint mask) +/** + * Checks if statement causes implicit COMMIT. + * autocommit_stmt gets values 1, 0 or -1 if stmt is enable, disable or + * something else than autocommit. + */ +static bool skygw_stmt_causes_implicit_commit( + LEX* lex, + int* autocommit_stmt) { bool succp; - - if (!(sql_command_flags[lex->sql_command] & mask)) + + if (!(sql_command_flags[lex->sql_command] & CF_AUTO_COMMIT_TRANS)) { succp = false; goto return_succp; @@ -668,13 +702,86 @@ static bool skygw_stmt_causes_implicit_commit(LEX* lex, uint mask) succp = !(lex->create_info.options & HA_LEX_CREATE_TMP_TABLE); break; case SQLCOM_SET_OPTION: - succp = lex->autocommit ? true : false; + if ((*autocommit_stmt = is_autocommit_stmt(lex)) == 1) + { + succp = true; + } + else + { + succp =false; + } break; default: succp = true; break; } - return_succp: return succp; } + + +/** + * Finds out if stmt is SET autocommit + * and if the new value matches with the enable_cmd argument. + * + * Returns 1, 0, or -1 if command was: + * enable, disable, or not autocommit, respectively. + */ +static int is_autocommit_stmt( + LEX* lex) +{ + struct list_node* node; + set_var* setvar; + int rc = -1; + static char target[8]; /*< for converted string */ + Item* item = NULL; + + node = lex->var_list.first_node(); + setvar=(set_var*)node->info; + + if (setvar == NULL) + { + goto return_rc; + } + + do /*< Search for the last occurrence of 'autocommit' */ + { + if ((sys_var*)setvar->var == Sys_autocommit_ptr) + { + item = setvar->value; + } + node = node->next; + } while ((setvar = (set_var*)node->info) != NULL); + + if (item != NULL) /*< found autocommit command */ + { + if (item->type() == Item::INT_ITEM) /*< '0' or '1' */ + { + rc = item->val_int(); + + if (rc > 1 || rc < 0) + { + rc = -1; + } + } + else if (item->type() == Item::STRING_ITEM) /*< 'on' or 'off' */ + { + String str(target, sizeof(target), system_charset_info); + String* res = item->val_str(&str); + + if ((rc = find_type(&bool_typelib, res->ptr(), res->length(), false))) + { + ss_dassert(rc >= 0 && rc <= 2); + /** + * rc is the position of matchin string in + * typelib's value array. + * 1=OFF, 2=ON. + */ + rc -= 1; + } + } + } + +return_rc: + return rc; +} diff --git a/query_classifier/query_classifier.h b/query_classifier/query_classifier.h index 69a5f92da..64727daa9 100644 --- a/query_classifier/query_classifier.h +++ b/query_classifier/query_classifier.h @@ -29,15 +29,17 @@ EXTERN_C_BLOCK_BEGIN * is modified */ typedef enum { - QUERY_TYPE_UNKNOWN = 0, /*< Couln't find out or parse error */ - QUERY_TYPE_LOCAL_READ = (1<<0), /*< Read non-database data, execute in MaxScale */ - QUERY_TYPE_READ = (1<<1), /*< No updates */ - QUERY_TYPE_WRITE = (1<<2), /*< Master data will be modified */ - QUERY_TYPE_SESSION_WRITE = (1<<3), /*< Session data will be modified */ - QUERY_TYPE_GLOBAL_WRITE = (1<<4), /*< Global system variable modification */ - QUERY_TYPE_BEGIN_TRX = (1<<5), /*< BEGIN or START TRANSACTION */ - QUERY_TYPE_ROLLBACK = (1<<6), /*< ROLLBACK */ - QUERY_TYPE_COMMIT = (1<<7), /*< COMMIT */ + QUERY_TYPE_UNKNOWN = 0x000, /*< Initial value, can't be tested bitwisely */ + QUERY_TYPE_LOCAL_READ = 0x001, /*< Read non-database data, execute in MaxScale */ + QUERY_TYPE_READ = 0x002, /*< No updates */ + QUERY_TYPE_WRITE = 0x004, /*< Master data will be modified */ + QUERY_TYPE_SESSION_WRITE = 0x008, /*< Session data will be modified */ + QUERY_TYPE_GLOBAL_WRITE = 0x010, /*< Global system variable modification */ + QUERY_TYPE_BEGIN_TRX = 0x020, /*< BEGIN or START TRANSACTION */ + QUERY_TYPE_ENABLE_AUTOCOMMIT = 0x040,/*< SET autocommit=1 */ + QUERY_TYPE_DISABLE_AUTOCOMMIT = 0x080,/*< SET autocommit=0 */ + QUERY_TYPE_ROLLBACK = 0x100, /*< ROLLBACK */ + QUERY_TYPE_COMMIT = 0x200 /*< COMMIT */ } skygw_query_type_t; #define QUERY_IS_TYPE(mask,type) ((mask & type) == type) diff --git a/query_classifier/test/makefile b/query_classifier/test/makefile index 4ad30a16c..9e35c8b0e 100644 --- a/query_classifier/test/makefile +++ b/query_classifier/test/makefile @@ -5,6 +5,7 @@ include ../../build_gateway.inc include ../../makefile.inc +include ../../test.inc CC = gcc CPP = g++ @@ -48,7 +49,7 @@ buildtests: $(LDLIBS) $(LDMYSQL) runtests: - @echo "" >> $(TESTLOG) + @echo "" > $(TESTLOG) @echo "-------------------------------" >> $(TESTLOG) @echo $(shell date) >> $(TESTLOG) @echo "Test Query Classifier" >> $(TESTLOG) @@ -59,3 +60,4 @@ ifeq ($?, 0) else @echo "Query Classifier FAILED" >> $(TESTLOG) endif + @cat $(TESTLOG) >> $(TEST_MAXSCALE_LOG) \ No newline at end of file diff --git a/server/MaxScale_template.cnf b/server/MaxScale_template.cnf index e89c2516a..ee7eb6e30 100644 --- a/server/MaxScale_template.cnf +++ b/server/MaxScale_template.cnf @@ -37,6 +37,8 @@ passwd=maxpwd # user= # passwd= # enable_root_user=<0 or 1, default is 0> +# version_string= # # Valid router modules currently are: # readwritesplit, readconnroute and debugcli diff --git a/server/core/.buffer.c.swp b/server/core/.buffer.c.swp deleted file mode 100644 index 5f600ef2ff6dc87493b9452064f6743ab0cc4940..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 YM}p%gF&8uw35pqTq?Y6>K;6Iq0Bz #include #include +#include extern int lm_enabled_logfiles_bitmask; @@ -56,6 +58,7 @@ static void check_config_objects(CONFIG_CONTEXT *context); static char *config_file = NULL; static GATEWAY_CONF gateway; +char *version_string = NULL; /** * Config item handler for the ini file reader @@ -116,6 +119,21 @@ config_load(char *file) CONFIG_CONTEXT config; int rval; + MYSQL *conn; + conn = mysql_init(NULL); + if (conn) { + if (mysql_real_connect(conn, NULL, NULL, NULL, NULL, 0, NULL, 0)) { + char *ptr; + version_string = (char *)mysql_get_server_info(conn); + ptr = strstr(version_string, "-embedded"); + if (ptr) { + *ptr = '\0'; + } + + } + mysql_close(conn); + } + global_defaults(); config.object = ""; @@ -146,6 +164,11 @@ int rval; if (!config_file) return 0; + + + if (gateway.version_string) + free(gateway.version_string); + global_defaults(); config.object = ""; @@ -202,7 +225,29 @@ int error_count = 0; config_get_value(obj->parameters, "passwd"); char *enable_root_user = config_get_value(obj->parameters, "enable_root_user"); + + char *version_string = config_get_value(obj->parameters, "version_string"); + if (version_string) { + ((SERVICE *)(obj->element))->version_string = strdup(version_string); + } else { + if (gateway.version_string) + ((SERVICE *)(obj->element))->version_string = strdup(gateway.version_string); + } + + if (obj->element == NULL) /*< if module load failed */ + { + LOGIF(LE, (skygw_log_write_flush( + LOGFILE_ERROR, + "Error : Reading configuration " + "for router service '%s' failed. " + "Router %s is not loaded.", + obj->object, + obj->object))); + obj = obj->next; + continue; /*< process next obj */ + } + if (enable_root_user) serviceEnableRootUser(obj->element, atoi(enable_root_user)); @@ -580,6 +625,10 @@ static void global_defaults() { gateway.n_threads = 1; + if (version_string != NULL) + gateway.version_string = strdup(version_string); + else + gateway.version_string = NULL; } /** @@ -622,6 +671,7 @@ SERVER *server; char *user; char *auth; char *enable_root_user; + char *version_string; enable_root_user = config_get_value(obj->parameters, "enable_root_user"); @@ -629,6 +679,15 @@ SERVER *server; "user"); auth = config_get_value(obj->parameters, "passwd"); + + version_string = config_get_value(obj->parameters, "version_string"); + + if (version_string) { + if (service->version_string) + free(service->version_string); + service->version_string = strdup(version_string); + } + if (user && auth) { service_update(service, router, user, @@ -861,6 +920,7 @@ static char *service_params[] = "user", "passwd", "enable_root_user", + "version_string", NULL }; diff --git a/server/core/dcb.c b/server/core/dcb.c index 5ac95e0db..b187e9952 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -308,6 +308,13 @@ dcb_final_free(DCB *dcb) free(dcb->data); if (dcb->remote) free(dcb->remote); + + /* Consume dcb->delayq buffer */ + if (dcb->delayq) { + GWBUF *queue = dcb->delayq; + while ((queue = gwbuf_consume(queue, GWBUF_LENGTH(queue))) != NULL); + } + bitmask_free(&dcb->memdata.bitmask); simple_mutex_done(&dcb->dcb_read_lock); simple_mutex_done(&dcb->dcb_write_lock); diff --git a/server/core/load_utils.c b/server/core/load_utils.c index 0a88b5348..28c95a3ae 100644 --- a/server/core/load_utils.c +++ b/server/core/load_utils.c @@ -53,6 +53,17 @@ static void register_module(const char *module, void *modobj); static void unregister_module(const char *module); +char* get_maxscale_home(void) +{ + char* home = getenv("MAXSCALE_HOME"); + if (home == NULL) + { + home = "/usr/local/skysql/MaxScale"; + } + return home; +} + + /** * Load the dynamic library related to a gateway module. The routine * will look for library files in the current directory, @@ -82,10 +93,10 @@ MODULES *mod; sprintf(fname, "./lib%s.so", module); if (access(fname, F_OK) == -1) { - if ((home = getenv("MAXSCALE_HOME")) == NULL) - home = "/usr/local/skysql/MaxScale"; + home = get_maxscale_home (); sprintf(fname, "%s/modules/lib%s.so", home, module); - if (access(fname, F_OK) == -1) + + if (access(fname, F_OK) == -1) { LOGIF(LE, (skygw_log_write_flush( LOGFILE_ERROR, @@ -100,7 +111,7 @@ MODULES *mod; LOGIF(LE, (skygw_log_write_flush( LOGFILE_ERROR, "Error : Unable to load library for module: " - "%s, %s.", + "%s\n\t\t\t %s.", module, dlerror()))); return NULL; @@ -111,7 +122,7 @@ MODULES *mod; LOGIF(LE, (skygw_log_write_flush( LOGFILE_ERROR, "Error : Version interface not supported by " - "module: %s, %s.", + "module: %s\n\t\t\t %s.", module, dlerror()))); dlclose(dlhandle); @@ -134,7 +145,7 @@ MODULES *mod; LOGIF(LE, (skygw_log_write_flush( LOGFILE_ERROR, "Error : Expected entry point interface missing " - "from module: %s, %s.", + "from module: %s\n\t\t\t %s.", module, dlerror()))); dlclose(dlhandle); diff --git a/server/core/service.c b/server/core/service.c index db41f881a..e44b9c697 100644 --- a/server/core/service.c +++ b/server/core/service.c @@ -28,12 +28,15 @@ * 06/02/14 Massimiliano Pinto Added: serviceEnableRootUser routine * 25/02/14 Massimiliano Pinto Added: service refresh limit feature * 28/02/14 Massimiliano Pinto users_alloc moved from service_alloc to serviceStartPort (generic hashable for services) + * 07/05/14 Massimiliano Pinto Added: version_string initialized to NULL * * @endverbatim */ #include #include #include +#include +#include #include #include #include @@ -70,11 +73,26 @@ SERVICE *service; return NULL; if ((service->router = load_module(router, MODULE_ROUTER)) == NULL) { + char* home = get_maxscale_home(); + char* ldpath = getenv("LD_LIBRARY_PATH"); + + LOGIF(LE, (skygw_log_write_flush( + LOGFILE_ERROR, + "Error : Unable to load %s module \"%s\".\n\t\t\t" + " Ensure that lib%s.so exists in one of the " + "following directories :\n\t\t\t " + "- %s/modules\n\t\t\t - %s", + MODULE_ROUTER, + router, + router, + home, + ldpath))); free(service); return NULL; } service->name = strdup(servname); service->routerModule = strdup(router); + service->version_string = NULL; memset(&service->stats, 0, sizeof(SERVICE_STATS)); service->ports = NULL; service->stats.started = time(0); @@ -159,7 +177,7 @@ GWPROTOCOL *funcs; if (port->listener->func.listen(port->listener, config_bind)) { port->listener->session = session_alloc(service, port->listener); - + if (port->listener->session != NULL) { port->listener->session->state = SESSION_STATE_LISTENER; listeners += 1; @@ -625,7 +643,7 @@ SERVICE *ptr; /** * Print all services to a DCB * - * Designed to be called within a debugger session in order + * Designed to be called within a CLI command in order * to display all active services within the gateway */ void @@ -637,30 +655,42 @@ SERVICE *ptr; ptr = allServices; while (ptr) { - SERVER *server = ptr->databases; - dcb_printf(dcb, "Service %p\n", ptr); - dcb_printf(dcb, "\tService: %s\n", ptr->name); - dcb_printf(dcb, "\tRouter: %s (%p)\n", ptr->routerModule, - ptr->router); - if (ptr->router) - ptr->router->diagnostics(ptr->router_instance, dcb); - dcb_printf(dcb, "\tStarted: %s", - asctime(localtime(&ptr->stats.started))); - dcb_printf(dcb, "\tBackend databases\n"); - while (server) - { - dcb_printf(dcb, "\t\t%s:%d Protocol: %s\n", server->name, server->port, - server->protocol); - server = server->nextdb; - } - dcb_printf(dcb, "\tUsers data: %p\n", ptr->users); - dcb_printf(dcb, "\tTotal connections: %d\n", ptr->stats.n_sessions); - dcb_printf(dcb, "\tCurrently connected: %d\n", ptr->stats.n_current); + dprintService(dcb, ptr); ptr = ptr->next; } spinlock_release(&service_spin); } +/** + * Print details of a single service. + * + * @param dcb DCB to print data to + * @param service The service to print + */ +dprintService(DCB *dcb, SERVICE *service) +{ +SERVER *server = service->databases; + + dcb_printf(dcb, "Service %p\n", service); + dcb_printf(dcb, "\tService: %s\n", service->name); + dcb_printf(dcb, "\tRouter: %s (%p)\n", service->routerModule, + service->router); + if (service->router) + service->router->diagnostics(service->router_instance, dcb); + dcb_printf(dcb, "\tStarted: %s", + asctime(localtime(&service->stats.started))); + dcb_printf(dcb, "\tBackend databases\n"); + while (server) + { + dcb_printf(dcb, "\t\t%s:%d Protocol: %s\n", server->name, server->port, + server->protocol); + server = server->nextdb; + } + dcb_printf(dcb, "\tUsers data: %p\n", service->users); + dcb_printf(dcb, "\tTotal connections: %d\n", service->stats.n_sessions); + dcb_printf(dcb, "\tCurrently connected: %d\n", service->stats.n_current); +} + /** * Update the definition of a service * diff --git a/server/core/test/makefile b/server/core/test/makefile index d0008b1ce..d3948575d 100644 --- a/server/core/test/makefile +++ b/server/core/test/makefile @@ -5,6 +5,7 @@ include ../../../build_gateway.inc include ../../../makefile.inc +include ../../../test.inc CC=cc TESTLOG := $(shell pwd)/testhash.log @@ -26,7 +27,7 @@ buildtests : testhash.c ../hashtable.o ../atomic.o ../spinlock.o -o testhash runtests: - @echo "" >> $(TESTLOG) + @echo "" > $(TESTLOG) @echo "-------------------------------" >> $(TESTLOG) @echo $(shell date) >> $(TESTLOG) @echo "Test MaxScale core" >> $(TESTLOG) @@ -38,3 +39,4 @@ else @echo "MaxScale core FAILED" >> $(TESTLOG) endif @echo "" >> $(TESTLOG) + @cat $(TESTLOG) >> $(TEST_MAXSCALE_LOG) \ No newline at end of file diff --git a/server/include/config.h b/server/include/config.h index 88620f015..03da9b029 100644 --- a/server/include/config.h +++ b/server/include/config.h @@ -24,8 +24,9 @@ * @verbatim * Revision History * - * Date Who Description - * 21/06/13 Mark Riddoch Initial implementation + * Date Who Description + * 21/06/13 Mark Riddoch Initial implementation + * 07/05/14 Massimiliano Pinto Added version_string to global configuration * * @endverbatim */ @@ -54,7 +55,8 @@ typedef struct config_context { * The gateway global configuration data */ typedef struct { - int n_threads; /**< Number of polling threads */ + int n_threads; /**< Number of polling threads */ + char *version_string; /**< The version string of embedded database library */ } GATEWAY_CONF; extern int config_load(char *); diff --git a/server/include/gateway_mysql.h b/server/include/gateway_mysql.h deleted file mode 100644 index 01c569bba..000000000 --- a/server/include/gateway_mysql.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * This file is distributed as part of the SkySQL Gateway. It is free - * software: you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation, - * version 2. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 51 - * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Copyright SkySQL Ab 2013 - * - */ - -/* - * MYSQL mysql protocol header file - * Revision History - * - * Date Who Description - * 10/06/13 Massimiliano Pinto Initial implementation - * - */ -#include - -/* Protocol packing macros. */ -#define gw_mysql_set_byte2(__buffer, __int) do { \ - (__buffer)[0]= (uint8_t)((__int) & 0xFF); \ - (__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); } while (0) -#define gw_mysql_set_byte3(__buffer, __int) do { \ - (__buffer)[0]= (uint8_t)((__int) & 0xFF); \ - (__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); \ - (__buffer)[2]= (uint8_t)(((__int) >> 16) & 0xFF); } while (0) -#define gw_mysql_set_byte4(__buffer, __int) do { \ - (__buffer)[0]= (uint8_t)((__int) & 0xFF); \ - (__buffer)[1]= (uint8_t)(((__int) >> 8) & 0xFF); \ - (__buffer)[2]= (uint8_t)(((__int) >> 16) & 0xFF); \ - (__buffer)[3]= (uint8_t)(((__int) >> 24) & 0xFF); } while (0) - - -/* Protocol unpacking macros. */ -#define gw_mysql_get_byte2(__buffer) \ - (uint16_t)((__buffer)[0] | \ - ((__buffer)[1] << 8)) -#define gw_mysql_get_byte3(__buffer) \ - (uint32_t)((__buffer)[0] | \ - ((__buffer)[1] << 8) | \ - ((__buffer)[2] << 16)) -#define gw_mysql_get_byte4(__buffer) \ - (uint32_t)((__buffer)[0] | \ - ((__buffer)[1] << 8) | \ - ((__buffer)[2] << 16) | \ - ((__buffer)[3] << 24)) -#define gw_mysql_get_byte8(__buffer) \ - ((uint64_t)(__buffer)[0] | \ - ((uint64_t)(__buffer)[1] << 8) | \ - ((uint64_t)(__buffer)[2] << 16) | \ - ((uint64_t)(__buffer)[3] << 24) | \ - ((uint64_t)(__buffer)[4] << 32) | \ - ((uint64_t)(__buffer)[5] << 40) | \ - ((uint64_t)(__buffer)[6] << 48) | \ - ((uint64_t)(__buffer)[7] << 56)) - -typedef enum -{ - GW_MYSQL_CAPABILITIES_NONE= 0, - GW_MYSQL_CAPABILITIES_LONG_PASSWORD= (1 << 0), - GW_MYSQL_CAPABILITIES_FOUND_ROWS= (1 << 1), - GW_MYSQL_CAPABILITIES_LONG_FLAG= (1 << 2), - GW_MYSQL_CAPABILITIES_CONNECT_WITH_DB= (1 << 3), - GW_MYSQL_CAPABILITIES_NO_SCHEMA= (1 << 4), - GW_MYSQL_CAPABILITIES_COMPRESS= (1 << 5), - GW_MYSQL_CAPABILITIES_ODBC= (1 << 6), - GW_MYSQL_CAPABILITIES_LOCAL_FILES= (1 << 7), - GW_MYSQL_CAPABILITIES_IGNORE_SPACE= (1 << 8), - GW_MYSQL_CAPABILITIES_PROTOCOL_41= (1 << 9), - GW_MYSQL_CAPABILITIES_INTERACTIVE= (1 << 10), - GW_MYSQL_CAPABILITIES_SSL= (1 << 11), - GW_MYSQL_CAPABILITIES_IGNORE_SIGPIPE= (1 << 12), - GW_MYSQL_CAPABILITIES_TRANSACTIONS= (1 << 13), - GW_MYSQL_CAPABILITIES_RESERVED= (1 << 14), - GW_MYSQL_CAPABILITIES_SECURE_CONNECTION= (1 << 15), - GW_MYSQL_CAPABILITIES_MULTI_STATEMENTS= (1 << 16), - GW_MYSQL_CAPABILITIES_MULTI_RESULTS= (1 << 17), - GW_MYSQL_CAPABILITIES_PS_MULTI_RESULTS= (1 << 18), - GW_MYSQL_CAPABILITIES_PLUGIN_AUTH= (1 << 19), - GW_MYSQL_CAPABILITIES_SSL_VERIFY_SERVER_CERT= (1 << 30), - GW_MYSQL_CAPABILITIES_REMEMBER_OPTIONS= (1 << 31), - GW_MYSQL_CAPABILITIES_CLIENT= (GW_MYSQL_CAPABILITIES_LONG_PASSWORD | - GW_MYSQL_CAPABILITIES_FOUND_ROWS | - GW_MYSQL_CAPABILITIES_LONG_FLAG | - GW_MYSQL_CAPABILITIES_CONNECT_WITH_DB | - GW_MYSQL_CAPABILITIES_LOCAL_FILES | - GW_MYSQL_CAPABILITIES_PLUGIN_AUTH | - GW_MYSQL_CAPABILITIES_TRANSACTIONS | - GW_MYSQL_CAPABILITIES_PROTOCOL_41 | - GW_MYSQL_CAPABILITIES_MULTI_STATEMENTS | - GW_MYSQL_CAPABILITIES_MULTI_RESULTS | - GW_MYSQL_CAPABILITIES_PS_MULTI_RESULTS | - GW_MYSQL_CAPABILITIES_SECURE_CONNECTION), - GW_MYSQL_CAPABILITIES_CLIENT_COMPRESS= (GW_MYSQL_CAPABILITIES_LONG_PASSWORD | - GW_MYSQL_CAPABILITIES_FOUND_ROWS | - GW_MYSQL_CAPABILITIES_LONG_FLAG | - GW_MYSQL_CAPABILITIES_CONNECT_WITH_DB | - GW_MYSQL_CAPABILITIES_LOCAL_FILES | - GW_MYSQL_CAPABILITIES_PLUGIN_AUTH | - GW_MYSQL_CAPABILITIES_TRANSACTIONS | - GW_MYSQL_CAPABILITIES_PROTOCOL_41 | - GW_MYSQL_CAPABILITIES_MULTI_STATEMENTS | - GW_MYSQL_CAPABILITIES_MULTI_RESULTS | - GW_MYSQL_CAPABILITIES_PS_MULTI_RESULTS | - GW_MYSQL_CAPABILITIES_COMPRESS - ), -} gw_mysql_capabilities_t; - - -#define SMALL_CHUNK 1024 -#define MAX_CHUNK SMALL_CHUNK * 8 * 4 -#define ToHex(Y) (Y>='0'&&Y<='9'?Y-'0':Y-'A'+10) - -extern int mysql_send_ok(DCB *, int, int, const char *); -extern int MySQLSendHandshake(DCB *); diff --git a/server/include/modules.h b/server/include/modules.h index f3ec14f07..c90cf45a1 100644 --- a/server/include/modules.h +++ b/server/include/modules.h @@ -55,4 +55,6 @@ extern void *load_module(const char *module, const char *type); extern void unload_module(const char *module); extern void printModules(); extern void dprintAllModules(DCB *); +char* get_maxscale_home(void); + #endif diff --git a/server/include/service.h b/server/include/service.h index d52a7eccf..0a8db9ea2 100644 --- a/server/include/service.h +++ b/server/include/service.h @@ -38,6 +38,7 @@ * 23/06/13 Mark Riddoch Added service user and users * 06/02/14 Massimiliano Pinto Added service flag for root user access * 25/02/14 Massimiliano Pinto Added service refresh limit feature + * 07/05/14 Massimiliano Pinto Added version_string field to service struct * * @endverbatim */ @@ -108,6 +109,7 @@ typedef struct service { *router; /**< The router we are using */ void *router_instance; /**< The router instance for this service */ + char *version_string; /** version string for this service listeners */ struct server *databases; /**< The set of servers in the backend */ SERVICE_USER credentials; /**< The cedentials of the service user */ SPINLOCK spin; /**< The service spinlock */ diff --git a/server/modules/include/readwritesplit.h b/server/modules/include/readwritesplit.h index 024a8bd88..17697f101 100644 --- a/server/modules/include/readwritesplit.h +++ b/server/modules/include/readwritesplit.h @@ -122,6 +122,8 @@ struct router_client_session { /*< cursor is pointer and status variable to current session command */ sescmd_cursor_t rses_cursor[BE_COUNT]; int rses_capabilities; /*< input type, for example */ + bool rses_autocommit_enabled; + bool rses_transaction_active; struct router_client_session* next; #if defined(SS_DEBUG) skygw_chk_t rses_chk_tail; @@ -155,4 +157,8 @@ typedef struct router_instance { struct router_instance* next; /*< Next router on the list */ } ROUTER_INSTANCE; +#define BACKEND_TYPE(b) (SERVER_IS_MASTER((b)->backend_server) ? BE_MASTER : \ + (SERVER_IS_SLAVE((b)->backend_server) ? BE_SLAVE : \ + (SERVER_IS_JOINED((b)->backend_server) ? BE_JOINED : BE_UNDEFINED))); + #endif /*< _RWSPLITROUTER_H */ diff --git a/server/modules/protocol/mysql_client.c b/server/modules/protocol/mysql_client.c index 5bd20f4f9..5e4c9bb21 100644 --- a/server/modules/protocol/mysql_client.c +++ b/server/modules/protocol/mysql_client.c @@ -33,6 +33,7 @@ * If current user is authenticated the new users' table will replace the old one * 28/02/2014 Massimiliano Pinto Added: client IPv4 in dcb->ipv4 and inet_ntop for string representation * 11/03/2014 Massimiliano Pinto Added: Unix socket support + * 07/05/2014 Massimiliano Pinto Added: specific version string in server handshake * */ @@ -225,10 +226,21 @@ MySQLSendHandshake(DCB* dcb) uint8_t mysql_filler_ten[10]; uint8_t mysql_last_byte = 0x00; char server_scramble[GW_MYSQL_SCRAMBLE_SIZE + 1]=""; + char *version_string; + int len_version_string=0; MySQLProtocol *protocol = DCB_PROTOCOL(dcb, MySQLProtocol); GWBUF *buf; + /* get the version string from service property if available*/ + if (dcb->service->version_string != NULL) { + version_string = dcb->service->version_string; + len_version_string = strlen(version_string); + } else { + version_string = GW_MYSQL_VERSION; + len_version_string = strlen(GW_MYSQL_VERSION); + } + gw_generate_random_str(server_scramble, GW_MYSQL_SCRAMBLE_SIZE); // copy back to the caller @@ -245,7 +257,7 @@ MySQLSendHandshake(DCB* dcb) memcpy(mysql_plugin_data, server_scramble + 8, 12); - mysql_payload_size = sizeof(mysql_protocol_version) + (strlen(GW_MYSQL_VERSION) + 1) + sizeof(mysql_thread_id) + 8 + sizeof(mysql_filler) + sizeof(mysql_server_capabilities_one) + sizeof(mysql_server_language) + sizeof(mysql_server_status) + sizeof(mysql_server_capabilities_two) + sizeof(mysql_scramble_len) + sizeof(mysql_filler_ten) + 12 + sizeof(mysql_last_byte) + strlen("mysql_native_password") + sizeof(mysql_last_byte); + mysql_payload_size = sizeof(mysql_protocol_version) + (len_version_string + 1) + sizeof(mysql_thread_id) + 8 + sizeof(mysql_filler) + sizeof(mysql_server_capabilities_one) + sizeof(mysql_server_language) + sizeof(mysql_server_status) + sizeof(mysql_server_capabilities_two) + sizeof(mysql_scramble_len) + sizeof(mysql_filler_ten) + 12 + sizeof(mysql_last_byte) + strlen("mysql_native_password") + sizeof(mysql_last_byte); // allocate memory for packet header + payload if ((buf = gwbuf_alloc(sizeof(mysql_packet_header) + mysql_payload_size)) == NULL) @@ -271,8 +283,9 @@ MySQLSendHandshake(DCB* dcb) mysql_handshake_payload = mysql_handshake_payload + sizeof(mysql_protocol_version); // write server version plus 0 filler - strcpy((char *)mysql_handshake_payload, GW_MYSQL_VERSION); - mysql_handshake_payload = mysql_handshake_payload + strlen(GW_MYSQL_VERSION); + strcpy((char *)mysql_handshake_payload, version_string); + mysql_handshake_payload = mysql_handshake_payload + len_version_string; + *mysql_handshake_payload = 0x00; mysql_handshake_payload++; diff --git a/server/modules/routing/Makefile b/server/modules/routing/Makefile index 8bbc45c3b..1737a0f76 100644 --- a/server/modules/routing/Makefile +++ b/server/modules/routing/Makefile @@ -88,4 +88,20 @@ install: $(MODULES) (cd readwritesplit; make DEST=$(DEST) install) (cd binlog; make DEST=$(DEST) install) +cleantests: + $(MAKE) -C readwritesplit/test cleantests + $(MAKE) -C test cleantests + +buildtests: + $(MAKE) -C readwritesplit/test DEBUG=Y buildtests + $(MAKE) -C test DEBUG=Y buildtests + +runtests: + $(MAKE) -C test runtests + $(MAKE) -C readwritesplit runtests + +testall: + $(MAKE) -C test testall + $(MAKE) -C readwritesplit testall + include depend.mk diff --git a/server/modules/routing/readwritesplit/Makefile b/server/modules/routing/readwritesplit/Makefile index 5bef1abe7..2d4aba7f0 100644 --- a/server/modules/routing/readwritesplit/Makefile +++ b/server/modules/routing/readwritesplit/Makefile @@ -20,9 +20,9 @@ include ../../../../build_gateway.inc -LOGPATH := $(ROOT_PATH)/log_manager -UTILSPATH := $(ROOT_PATH)/utils -QCLASSPATH := $(ROOT_PATH)/query_classifier +LOGPATH := $(ROOT_PATH)/log_manager +UTILSPATH := $(ROOT_PATH)/utils +QCLASSPATH := $(ROOT_PATH)/query_classifier CC=cc CFLAGS=-c -fPIC -I/usr/include -I../../include -I../../../include \ @@ -61,5 +61,18 @@ depend: install: $(MODULES) install -D $(MODULES) $(DEST)/MaxScale/modules + +cleantests: + $(MAKE) -C test cleantest + +testall: + $(MAKE) -C test testall + +buildtests: + $(MAKE) -C test buildtests + +runtests: + $(MAKE) -C runtests + include depend.mk diff --git a/server/modules/routing/readwritesplit/readwritesplit.c b/server/modules/routing/readwritesplit/readwritesplit.c index 5383c1eb6..dcea42d19 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.c +++ b/server/modules/routing/readwritesplit/readwritesplit.c @@ -74,7 +74,7 @@ static uint8_t getCapabilities (ROUTER* inst, void* router_session); static bool search_backend_servers( BACKEND** p_master, BACKEND** p_slave, - ROUTER_INSTANCE* router); + ROUTER_INSTANCE* router); static ROUTER_OBJECT MyObject = { createInstance, @@ -157,6 +157,13 @@ static void tracelog_routed_query( DCB* dcb, GWBUF* buf); +static bool route_session_write( + ROUTER_CLIENT_SES* router_client_ses, + GWBUF* querybuf, + ROUTER_INSTANCE* inst, + unsigned char packet_type, + skygw_query_type_t qtype); + static SPINLOCK instlock; static ROUTER_INSTANCE* instances; @@ -211,10 +218,10 @@ static ROUTER* createInstance( SERVICE* service, char** options) { - ROUTER_INSTANCE* router; - SERVER* server; + ROUTER_INSTANCE* router; + SERVER* server; int n; - int i; + int i; if ((router = calloc(1, sizeof(ROUTER_INSTANCE))) == NULL) { return NULL; @@ -244,7 +251,6 @@ static ROUTER* createInstance( "module but none are supported. The options will be " "ignored."))); } - /** * Create an array of the backend servers in the router structure to * maintain a count of the number of connections to each @@ -266,7 +272,7 @@ static ROUTER* createInstance( router->servers[n]->backend_conn_count = 0; n += 1; server = server->nextdb; - } + } router->servers[n] = NULL; /** @@ -300,7 +306,7 @@ static ROUTER* createInstance( } } } - /** + /** * We have completed the creation of the router data, so now * insert this router into the linked list of routers * that have been created with this module. @@ -329,12 +335,12 @@ static void* newSession( { BACKEND* local_backend[BE_COUNT]; ROUTER_CLIENT_SES* client_rses; - ROUTER_INSTANCE* router = (ROUTER_INSTANCE *)router_inst; + ROUTER_INSTANCE* router = (ROUTER_INSTANCE *)router_inst; bool succp; - + client_rses = (ROUTER_CLIENT_SES *)calloc(1, sizeof(ROUTER_CLIENT_SES)); - + if (client_rses == NULL) { ss_dassert(false); @@ -345,7 +351,7 @@ static void* newSession( #if defined(SS_DEBUG) client_rses->rses_chk_top = CHK_NUM_ROUTER_SES; client_rses->rses_chk_tail = CHK_NUM_ROUTER_SES; -#endif +#endif /** store pointers to sescmd list to both cursors */ client_rses->rses_cursor[BE_MASTER].scmd_cur_rses = client_rses; client_rses->rses_cursor[BE_MASTER].scmd_cur_active = false; @@ -360,8 +366,8 @@ static void* newSession( &client_rses->rses_properties[RSES_PROP_TYPE_SESCMD]; client_rses->rses_cursor[BE_SLAVE].scmd_cur_cmd = NULL; client_rses->rses_cursor[BE_SLAVE].scmd_cur_be_type = BE_SLAVE; - - /** + + /** * Find a backend server to connect to. This is the extent of the * load balancing algorithm we need to implement for this simple * connection router. @@ -369,7 +375,7 @@ static void* newSession( succp = search_backend_servers(&local_backend[BE_MASTER], &local_backend[BE_SLAVE], router); - + /** Both Master and Slave must be found */ if (!succp) { free(client_rses); @@ -385,23 +391,23 @@ static void* newSession( if (client_rses->rses_dcb[BE_SLAVE] == NULL) { ss_dassert(session->refcount == 1); - free(client_rses); + free(client_rses); return NULL; - } - /** + } + /** * Open the master connection. - */ + */ client_rses->rses_dcb[BE_MASTER] = dcb_connect( local_backend[BE_MASTER]->backend_server, session, local_backend[BE_MASTER]->backend_server->protocol); if (client_rses->rses_dcb[BE_MASTER] == NULL) - { + { /** Close slave connection first. */ client_rses->rses_dcb[BE_SLAVE]->func.close(client_rses->rses_dcb[BE_SLAVE]); free(client_rses); return NULL; - } + } /** * We now have a master and a slave server with the least connections. * Bump the connection counts for these servers. @@ -411,7 +417,7 @@ static void* newSession( client_rses->rses_backend[BE_SLAVE] = local_backend[BE_SLAVE]; client_rses->rses_backend[BE_MASTER] = local_backend[BE_MASTER]; - router->stats.n_sessions += 1; + router->stats.n_sessions += 1; client_rses->rses_capabilities = RCAP_TYPE_STMT_INPUT; /** @@ -423,15 +429,17 @@ static void* newSession( * Add this session to end of the list of active sessions in router. */ spinlock_acquire(&router->lock); - client_rses->next = router->connections; + client_rses->next = router->connections; router->connections = client_rses; spinlock_release(&router->lock); - CHK_CLIENT_RSES(client_rses); + CHK_CLIENT_RSES(client_rses); return (void *)client_rses; } + + /** * Close a session with the router, this is the mechanism * by which a router may cleanup data structure etc. @@ -446,7 +454,7 @@ static void closeSession( ROUTER_CLIENT_SES* router_cli_ses; DCB* slave_dcb; DCB* master_dcb; - + router_cli_ses = (ROUTER_CLIENT_SES *)router_session; CHK_CLIENT_RSES(router_cli_ses); /** @@ -457,7 +465,7 @@ static void closeSession( /** decrease server current connection counters */ atomic_add(&router_cli_ses->rses_backend[BE_SLAVE]->backend_server->stats.n_current, -1); atomic_add(&router_cli_ses->rses_backend[BE_MASTER]->backend_server->stats.n_current, -1); - + slave_dcb = router_cli_ses->rses_dcb[BE_SLAVE]; router_cli_ses->rses_dcb[BE_SLAVE] = NULL; master_dcb = router_cli_ses->rses_dcb[BE_MASTER]; @@ -466,14 +474,14 @@ static void closeSession( router_cli_ses->rses_closed = true; /** Unlock */ rses_end_locked_router_action(router_cli_ses); - - /** + + /** * Close the backend server connections */ if (slave_dcb != NULL) { CHK_DCB(slave_dcb); slave_dcb->func.close(slave_dcb); - } + } if (master_dcb != NULL) { master_dcb->func.close(master_dcb); @@ -491,8 +499,8 @@ static void freeSession( int i; router_cli_ses = (ROUTER_CLIENT_SES *)router_client_session; - router = (ROUTER_INSTANCE *)router_instance; - + router = (ROUTER_INSTANCE *)router_instance; + atomic_add(&router_cli_ses->rses_backend[BE_SLAVE]->backend_conn_count, -1); atomic_add(&router_cli_ses->rses_backend[BE_MASTER]->backend_conn_count, -1); @@ -560,24 +568,26 @@ static int routeQuery( void* router_session, GWBUF* querybuf) { - skygw_query_type_t qtype = QUERY_TYPE_UNKNOWN; - GWBUF* plainsqlbuf = NULL; - char* querystr = NULL; + skygw_query_type_t qtype = QUERY_TYPE_UNKNOWN; + GWBUF* plainsqlbuf = NULL; + char* querystr = NULL; char* startpos; unsigned char packet_type; uint8_t* packet; int ret = 0; - DCB* master_dcb = NULL; - DCB* slave_dcb = NULL; + DCB* master_dcb = NULL; + DCB* slave_dcb = NULL; ROUTER_INSTANCE* inst = (ROUTER_INSTANCE *)instance; ROUTER_CLIENT_SES* router_cli_ses = (ROUTER_CLIENT_SES *)router_session; bool rses_is_closed; rses_property_t* prop; size_t len; - static bool transaction_active; + /** if false everything goes to master and session commands to slave too */ + static bool autocommit_enabled = true; + /** if true everything goes to master and session commands to slave too */ + static bool transaction_active = false; CHK_CLIENT_RSES(router_cli_ses); - /** Dirty read for quick check if router is closed. */ if (router_cli_ses->rses_closed) @@ -609,16 +619,16 @@ static int routeQuery( "Error: Failed to route %s:%s:\"%s\" to " "backend server. %s.", STRPACKETTYPE(packet_type), - STRQTYPE(qtype), - (querystr == NULL ? "(empty)" : querystr), - (rses_is_closed ? "Router was closed" : - "Router has no backend servers where to " - "route to")))); + STRQTYPE(qtype), + (querystr == NULL ? "(empty)" : querystr), + (rses_is_closed ? "Router was closed" : + "Router has no backend servers where to " + "route to")))); goto return_ret; } inst->stats.n_queries++; startpos = (char *)&packet[5]; - + switch(packet_type) { case COM_QUIT: /**< 1 QUIT will close all sessions */ case COM_INIT_DB: /**< 2 DDL must go to the master */ @@ -647,7 +657,7 @@ static int routeQuery( querystr = master_dcb->func.getquerystr( (void *) gwbuf_clone(querybuf), &querystr_is_copy); - */ + */ qtype = skygw_query_classifier_get_type(querystr, 0); break; @@ -669,207 +679,102 @@ static int routeQuery( LOGIF(LT, (skygw_log_write(LOGFILE_TRACE, "Packet type\t%s", STRPACKETTYPE(packet_type)))); - - if (QUERY_IS_TYPE(qtype,QUERY_TYPE_COMMIT) && - transaction_active) + /** + * If autocommit is disabled or transaction is explicitly started + * transaction becomes active and master gets all statements until + * transaction is committed and autocommit is enabled again. + */ + if (router_cli_ses->rses_autocommit_enabled && + QUERY_IS_TYPE(qtype, QUERY_TYPE_DISABLE_AUTOCOMMIT)) { - transaction_active = false; + router_cli_ses->rses_autocommit_enabled = false; + + if (!router_cli_ses->rses_transaction_active) + { + router_cli_ses->rses_transaction_active = true; + } + } + else if (!router_cli_ses->rses_transaction_active && + QUERY_IS_TYPE(qtype, QUERY_TYPE_BEGIN_TRX)) + { + router_cli_ses->rses_transaction_active = true; } - - - switch (qtype) { - case QUERY_TYPE_WRITE: - LOGIF(LT, (skygw_log_write( - LOGFILE_TRACE, - "%lu [routeQuery:rwsplit] Query type\t%s, " - "routing to Master.", - pthread_self(), - STRQTYPE(qtype)))); - - LOGIF(LT, tracelog_routed_query(router_cli_ses, - "routeQuery", - master_dcb, - gwbuf_clone(querybuf))); - - ret = master_dcb->func.write(master_dcb, querybuf); - atomic_add(&inst->stats.n_master, 1); - - goto return_ret; - break; - - case QUERY_TYPE_READ: - LOGIF(LT, (skygw_log_write_flush( - LOGFILE_TRACE, - "%lu [routeQuery:rwsplit] Query type\t%s, " - "routing to %s.", - pthread_self(), - STRQTYPE(qtype), - (transaction_active ? "Master" : "Slave")))); - - LOGIF(LT, tracelog_routed_query( + /** + * Explicit COMMIT and ROLLBACK, implicit COMMIT. + */ + if (router_cli_ses->rses_autocommit_enabled && + router_cli_ses->rses_transaction_active && + (QUERY_IS_TYPE(qtype,QUERY_TYPE_COMMIT) || + QUERY_IS_TYPE(qtype,QUERY_TYPE_ROLLBACK))) + { + router_cli_ses->rses_transaction_active = false; + } + else if (!router_cli_ses->rses_autocommit_enabled && + QUERY_IS_TYPE(qtype, QUERY_TYPE_ENABLE_AUTOCOMMIT)) + { + router_cli_ses->rses_autocommit_enabled = true; + router_cli_ses->rses_transaction_active = false; + } + /** + * Session update is always routed in the same way. + */ + if (QUERY_IS_TYPE(qtype, QUERY_TYPE_SESSION_WRITE)) + { + bool succp = route_session_write( router_cli_ses, - "routeQuery", - (transaction_active ? master_dcb : slave_dcb), - gwbuf_clone(querybuf))); - - if (transaction_active) - { - ret = master_dcb->func.write(master_dcb, querybuf); - } - else - { - ret = slave_dcb->func.write(slave_dcb, querybuf); - } - LOGIF(LT, (skygw_log_write_flush( - LOGFILE_TRACE, - "%lu [routeQuery:rwsplit] Routed.", - pthread_self()))); - - - atomic_add(&inst->stats.n_slave, 1); - goto return_ret; - break; + querybuf, + inst, + packet_type, + qtype); - case QUERY_TYPE_SESSION_WRITE: - /** - * Execute in backends used by current router session. - * Save session variable commands to router session property - * struct. Thus, they can be replayed in backends which are - * started and joined later. - * - * Suppress redundant OK packets sent by backends. - * - * DOES THIS ALL APPLY TO COM_QUIT AS WELL?? - * - * The first OK packet is replied to the client. - * - */ - LOGIF(LT, (skygw_log_write( - LOGFILE_TRACE, - "%lu [routeQuery:rwsplit] DCB M:%p s:%p, " - "Query type\t%s, " - "packet type %s, routing to all servers.", - pthread_self(), - master_dcb, - slave_dcb, - STRQTYPE(qtype), - STRPACKETTYPE(packet_type)))); - /** - * COM_QUIT is one-way message. Server doesn't respond to that. - * Therefore reply processing is unnecessary and session - * command property is not needed. It is just routed to both - * backends. - */ - if (packet_type == COM_QUIT) - { - int rc; - int rc2; - - rc = master_dcb->func.write(master_dcb, gwbuf_clone(querybuf)); - rc2 = slave_dcb->func.write(slave_dcb, querybuf); - - if (rc == 1 && rc == rc2) - { - ret = 1; - } - goto return_ret; - } - prop = rses_property_init(RSES_PROP_TYPE_SESCMD); - /** - * Additional reference is created to querybuf to - * prevent it from being released before properties - * are cleaned up as a part of router sessionclean-up. - */ - mysql_sescmd_init(prop, querybuf, packet_type, router_cli_ses); - - /** Lock router session */ - if (!rses_begin_locked_router_action(router_cli_ses)) - { - rses_property_done(prop); - goto return_ret; - } - /** Add sescmd property to router client session */ - rses_property_add(router_cli_ses, prop); - - /** Execute session command in master */ - if (execute_sescmd_in_backend(router_cli_ses, BE_MASTER)) - { - ret = 1; - } - else - { - /** Log error */ - } - /** Execute session command in slave */ - if (execute_sescmd_in_backend(router_cli_ses, BE_SLAVE)) + if (succp) { ret = 1; } - else - { - /** Log error */ - } - - /** Unlock router session */ - rses_end_locked_router_action(router_cli_ses); - - atomic_add(&inst->stats.n_all, 1); + ss_dassert(succp); + ss_dassert(ret == 1); goto return_ret; - break; - - case QUERY_TYPE_BEGIN_TRX: - transaction_active = true; - LOGIF(LT, tracelog_routed_query(router_cli_ses, - "routeQuery", - master_dcb, - gwbuf_clone(querybuf))); - ret = master_dcb->func.write(master_dcb, querybuf); - LOGIF(LT, (skygw_log_write_flush( - LOGFILE_TRACE, - "%lu [routeQuery:rwsplit] Routed.", - pthread_self()))); - atomic_add(&inst->stats.n_master, 1); - goto return_ret; - break; + } + else if (QUERY_IS_TYPE(qtype, QUERY_TYPE_READ) && + !router_cli_ses->rses_transaction_active) + { + bool succp; - case QUERY_TYPE_COMMIT: - case QUERY_TYPE_ROLLBACK: - transaction_active = false; - LOGIF(LT, tracelog_routed_query(router_cli_ses, - "routeQuery", - master_dcb, - gwbuf_clone(querybuf))); - ret = master_dcb->func.write(master_dcb, querybuf); - LOGIF(LT, (skygw_log_write_flush( - LOGFILE_TRACE, - "%lu [routeQuery:rwsplit] Routed.", - pthread_self()))); - atomic_add(&inst->stats.n_master, 1); - goto return_ret; - break; - - default: LOGIF(LT, (skygw_log_write( - LOGFILE_TRACE, - "%lu [routeQuery:rwsplit] Query type\t%s, " - "routing to Master by default.", - pthread_self(), - STRQTYPE(qtype)))); + LOGFILE_TRACE, + "Read-only query, routing to Slave."))); + ss_dassert(QUERY_IS_TYPE(qtype, QUERY_TYPE_READ)); - /** - * Is this really ok? - * What is not known is routed to master. - */ - LOGIF(LT, tracelog_routed_query(router_cli_ses, - "routeQuery", - master_dcb, - gwbuf_clone(querybuf))); + ret = slave_dcb->func.write(slave_dcb, querybuf); + atomic_add(&inst->stats.n_slave, 1); - ret = master_dcb->func.write(master_dcb, querybuf); - atomic_add(&inst->stats.n_master, 1); goto return_ret; - break; - } /*< switch by query type */ + } + else + { + bool succp = true; + + if (LOG_IS_ENABLED(LOGFILE_TRACE)) + { + if (router_cli_ses->rses_transaction_active) /*< all to master */ + { + LOGIF(LT, (skygw_log_write( + LOGFILE_TRACE, + "Transaction is active, routing to Master."))); + } + else + { + LOGIF(LT, (skygw_log_write( + LOGFILE_TRACE, + "Begin transaction, write or unspecified type, " + "routing to Master."))); + } + } + ret = master_dcb->func.write(master_dcb, querybuf); + atomic_add(&inst->stats.n_master, 1); + + goto return_ret; + } return_ret: if (plainsqlbuf != NULL) @@ -1036,8 +941,7 @@ static void clientReply( client_dcb = backend_dcb->session->client; /** Unlock */ - rses_end_locked_router_action(router_cli_ses); - + rses_end_locked_router_action(router_cli_ses); /** * 1. Check if backend received reply to sescmd. * 2. Check sescmd's state whether OK_PACKET has been @@ -1057,14 +961,14 @@ static void clientReply( } if (backend_dcb == master_dcb) - { + { be_type = BE_MASTER; - } + } else if (backend_dcb == slave_dcb) - { + { be_type = BE_SLAVE; - } - LOGIF(LT, tracelog_routed_query(router_cli_ses, + } + LOGIF(LT, tracelog_routed_query(router_cli_ses, "reply_by_statement", backend_dcb, gwbuf_clone(writebuf))); @@ -1085,8 +989,7 @@ static void clientReply( { writebuf = sescmd_cursor_process_replies(client_dcb, writebuf, - scur); - + scur); } /** Unlock router session */ rses_end_locked_router_action(router_cli_ses); @@ -1123,7 +1026,7 @@ lock_failed: * * @param inst - in, use * Pointer to router instance - * + * * @return true, if all what what requested found, false if the request * was not satisfied or was partially satisfied. * @@ -1134,12 +1037,12 @@ lock_failed: static bool search_backend_servers( BACKEND** p_master, BACKEND** p_slave, - ROUTER_INSTANCE* router) -{ + ROUTER_INSTANCE* router) +{ BACKEND* local_backend[BE_COUNT] = {NULL,NULL}; - int i; + int i; bool succp = true; - + /* * Loop over all the servers and find any that have fewer connections * than current candidate server. @@ -1154,32 +1057,32 @@ static bool search_backend_servers( * very low load. * * If master is searched for, the first master found is chosen. - */ + */ for (i = 0; router->servers[i] != NULL; i++) { BACKEND* be = router->servers[i]; if (be != NULL) { - LOGIF(LT, (skygw_log_write( - LOGFILE_TRACE, + LOGIF(LT, (skygw_log_write( + LOGFILE_TRACE, "%lu [search_backend_servers] Examine server " - "%s:%d with %d connections. Status is %d, " - "router->bitvalue is %d", - pthread_self(), + "%s:%d with %d connections. Status is %d, " + "router->bitvalue is %d", + pthread_self(), be->backend_server->name, be->backend_server->port, be->backend_conn_count, be->backend_server->status, - router->bitmask))); + router->bitmask))); } - + if (be != NULL && SERVER_IS_RUNNING(be->backend_server) && (be->backend_server->status & router->bitmask) == router->bitvalue) - { + { if (SERVER_IS_SLAVE(be->backend_server) && p_slave != NULL) - { + { /** * If no candidate set, set first running * server as an initial candidate server. @@ -1187,7 +1090,7 @@ static bool search_backend_servers( if (local_backend[BE_SLAVE] == NULL) { local_backend[BE_SLAVE] = be; - } + } else if (be->backend_conn_count < local_backend[BE_SLAVE]->backend_conn_count) { @@ -1203,74 +1106,74 @@ static bool search_backend_servers( be->backend_server->stats.n_connections < local_backend[BE_SLAVE]->backend_server->stats.n_connections) { - /** + /** * This running server has the same * number of connections currently * as the candidate but has had * fewer connections over time * than candidate, set this server * to candidate. - */ + */ local_backend[BE_SLAVE] = be; - } - } + } + } else if (p_master != NULL && local_backend[BE_MASTER] == NULL && SERVER_IS_MASTER(be->backend_server)) - { + { local_backend[BE_MASTER] = be; - } + } else if (p_master != NULL && local_backend[BE_JOINED] == NULL && SERVER_IS_JOINED(be->backend_server)) - { + { local_backend[BE_JOINED] = be; - } - } - } + } + } + } if (router->bitvalue != 0 && p_master != NULL && local_backend[BE_JOINED] == NULL) - { + { succp = false; LOGIF(LE, (skygw_log_write_flush( - LOGFILE_ERROR, + LOGFILE_ERROR, "Error : Couldn't find a Joined Galera node from %d " - "candidates.", + "candidates.", i))); goto return_succp; } - + if (p_slave != NULL && local_backend[BE_SLAVE] == NULL) { succp = false; LOGIF(LE, (skygw_log_write_flush( LOGFILE_ERROR, "Error : Couldn't find suitable Slave from %d " - "candidates.", + "candidates.", i))); } - + if (p_master != NULL && local_backend[BE_MASTER] == NULL) { succp = false; LOGIF(LE, (skygw_log_write_flush( LOGFILE_ERROR, "Error : Couldn't find suitable Master from %d " - "candidates.", + "candidates.", i))); - } + } if (local_backend[BE_SLAVE] != NULL) { *p_slave = local_backend[BE_SLAVE]; - LOGIF(LT, (skygw_log_write( - LOGFILE_TRACE, + LOGIF(LT, (skygw_log_write( + LOGFILE_TRACE, "%lu [readwritesplit:search_backend_servers] Selected " "Slave %s:%d from %d candidates.", pthread_self(), local_backend[BE_SLAVE]->backend_server->name, local_backend[BE_SLAVE]->backend_server->port, i))); - } + } if (local_backend[BE_MASTER] != NULL) { *p_master = local_backend[BE_MASTER]; LOGIF(LT, (skygw_log_write( @@ -1630,7 +1533,7 @@ static bool execute_sescmd_in_backend( sescmd_cursor_t* scur; dcb = rses->rses_dcb[be_type]; - + CHK_DCB(dcb); CHK_CLIENT_RSES(rses); ss_dassert(SPINLOCK_IS_LOCKED(&rses->rses_lock)); @@ -1665,7 +1568,7 @@ static bool execute_sescmd_in_backend( dcb->session, sescmd_cursor_clone_querybuf(scur)); break; - + case COM_QUIT: case COM_QUERY: case COM_INIT_DB: @@ -1690,6 +1593,7 @@ return_succp: return succp; } + /** * Moves cursor to next property and copied address of its sescmd to cursor. * Current propery must be non-null. @@ -1767,7 +1671,6 @@ static rses_property_t* mysql_sescmd_get_property( return scmd->my_sescmd_prop; } - static void tracelog_routed_query( ROUTER_CLIENT_SES* rses, char* funcname, @@ -1781,7 +1684,7 @@ static void tracelog_routed_query( char* querystr; char* startpos = (char *)&packet[5]; backend_type_t be_type; - + if (rses->rses_dcb[BE_MASTER] == dcb) { be_type = BE_MASTER; @@ -1824,11 +1727,13 @@ static void tracelog_routed_query( -1)), STRBETYPE(be_type), dcb))); + free(querystr); } } gwbuf_free(buf); } + /** * Return rc, rc < 0 if router session is closed. rc == 0 if there are no * capabilities specified, rc > 0 when there are capabilities. @@ -1851,4 +1756,103 @@ static uint8_t getCapabilities ( return_rc: return rc; -} \ No newline at end of file +} + +/** + * Execute in backends used by current router session. + * Save session variable commands to router session property + * struct. Thus, they can be replayed in backends which are + * started and joined later. + * + * Suppress redundant OK packets sent by backends. + * + * The first OK packet is replied to the client. + * Return true if succeed, false is returned if router session was closed or + * if execute_sescmd_in_backend failed. + */ +static bool route_session_write( + ROUTER_CLIENT_SES* router_cli_ses, + GWBUF* querybuf, + ROUTER_INSTANCE* inst, + unsigned char packet_type, + skygw_query_type_t qtype) +{ + bool succp; + DCB* master_dcb; + DCB* slave_dcb; + rses_property_t* prop; + + master_dcb = router_cli_ses->rses_dcb[BE_MASTER]; + slave_dcb = router_cli_ses->rses_dcb[BE_SLAVE]; + CHK_DCB(master_dcb); + CHK_DCB(slave_dcb); + LOGIF(LT, (skygw_log_write( + LOGFILE_TRACE, + "Session write, query type\t%s, packet type %s, " + "routing to all servers.", + STRQTYPE(qtype), + STRPACKETTYPE(packet_type)))); + /** + * COM_QUIT is one-way message. Server doesn't respond to that. + * Therefore reply processing is unnecessary and session + * command property is not needed. It is just routed to both + * backends. + */ + if (packet_type == COM_QUIT) + { + int rc; + int rc2; + + rc = master_dcb->func.write(master_dcb, gwbuf_clone(querybuf)); + rc2 = slave_dcb->func.write(slave_dcb, querybuf); + + if (rc == 1 && rc == rc2) + { + succp = true; + } + goto return_succp; + } + prop = rses_property_init(RSES_PROP_TYPE_SESCMD); + /** + * Additional reference is created to querybuf to + * prevent it from being released before properties + * are cleaned up as a part of router sessionclean-up. + */ + mysql_sescmd_init(prop, querybuf, packet_type, router_cli_ses); + + /** Lock router session */ + if (!rses_begin_locked_router_action(router_cli_ses)) + { + rses_property_done(prop); + succp = false; + goto return_succp; + } + /** Add sescmd property to router client session */ + rses_property_add(router_cli_ses, prop); + + /** Execute session command in master */ + succp = execute_sescmd_in_backend(router_cli_ses, BE_MASTER); + + if (!succp) + { + /** Unlock router session */ + rses_end_locked_router_action(router_cli_ses); + goto return_succp; + } + /** Execute session command in slave */ + succp = execute_sescmd_in_backend(router_cli_ses, BE_SLAVE); + if (!succp) + { + /** Unlock router session */ + rses_end_locked_router_action(router_cli_ses); + goto return_succp; + } + /** Unlock router session */ + rses_end_locked_router_action(router_cli_ses); + + atomic_add(&inst->stats.n_all, 1); + +return_succp: + return succp; +} + diff --git a/server/modules/routing/readwritesplit/test/makefile b/server/modules/routing/readwritesplit/test/makefile index 096e28fe7..87d22363d 100644 --- a/server/modules/routing/readwritesplit/test/makefile +++ b/server/modules/routing/readwritesplit/test/makefile @@ -8,7 +8,7 @@ include $(ROOT_PATH)/makefile.inc include $(ROOT_PATH)/test.inc CC=cc -TESTLOG := $(shell pwd)/testrouters.log +TESTLOG := $(shell pwd)/testrwsplit.log RET := -1 cleantests: @@ -25,17 +25,11 @@ buildtests: runtests: - @echo "" >> $(TESTLOG) + @echo "" > $(TESTLOG) @echo "-------------------------------" >> $(TESTLOG) @echo $(shell date) >> $(TESTLOG) - @echo "Test MaxScale R/W Split" >> $(TESTLOG) + @echo "Test Read/Write split router" >> $(TESTLOG) @echo "-------------------------------" >> $(TESTLOG) ./rwsplit.sh $(TESTLOG) $(THOST) $(TPORT_RW) $(TMASTER_ID) $(TUSER) $(TPWD) @echo "" >> $(TESTLOG) - - -pesce: - @echo "fine" - - - \ No newline at end of file + @cat $(TESTLOG) >> $(TEST_MAXSCALE_LOG) \ No newline at end of file diff --git a/server/modules/routing/readwritesplit/test/rwsplit.sh b/server/modules/routing/readwritesplit/test/rwsplit.sh index 4755e4526..d64fcf495 100755 --- a/server/modules/routing/readwritesplit/test/rwsplit.sh +++ b/server/modules/routing/readwritesplit/test/rwsplit.sh @@ -30,9 +30,46 @@ else echo "$TINPUT PASSED">>$TLOG ; fi +TINPUT=test_transaction_routing2b.sql +TRETVAL=0 +a=`$RUNCMD < ./$TINPUT` +if [ "$a" != "$TRETVAL" ]; then + echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG; +else + echo "$TINPUT PASSED">>$TLOG ; +fi + TINPUT=test_transaction_routing3.sql TRETVAL=2 a=`$RUNCMD < ./$TINPUT` +if [ "$a" == "$TMASTER_ID" ]; then + echo "$TINPUT FAILED, return value $a when one of the slave IDs was expected">>$TLOG; +else + echo "$TINPUT PASSED">>$TLOG ; +fi + +TINPUT=test_transaction_routing3b.sql +TRETVAL=2 +a=`$RUNCMD < ./$TINPUT` +if [ "$a" == "$TMASTER_ID" ]; then + echo "$TINPUT FAILED, return value $a when one of the slave IDs was expected">>$TLOG; +else + echo "$TINPUT PASSED">>$TLOG ; +fi + +# test implicit transaction, that is, not started explicitly, autocommit=0 +TINPUT=test_transaction_routing4.sql +TRETVAL=0 +a=`$RUNCMD < ./$TINPUT` +if [ "$a" != "$TRETVAL" ]; then + echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG; +else + echo "$TINPUT PASSED">>$TLOG ; +fi + +TINPUT=test_transaction_routing4b.sql +TRETVAL=0 +a=`$RUNCMD < ./$TINPUT` if [ "$a" != "$TRETVAL" ]; then echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG; else @@ -113,3 +150,44 @@ if [ "$a" == "$TRETVAL" ]; then else echo "$TINPUT PASSED">>$TLOG ; fi + +TINPUT=test_autocommit_disabled1.sql +TRETVAL=1 +a=`$RUNCMD < ./$TINPUT` +if [ "$a" != "$TRETVAL" ]; then + echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG; +else + echo "$TINPUT PASSED">>$TLOG ; +fi + +TINPUT=test_autocommit_disabled1b.sql +TRETVAL=1 +a=`$RUNCMD < ./$TINPUT` +if [ "$a" != "$TRETVAL" ]; then + echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG; +else + echo "$TINPUT PASSED">>$TLOG ; +fi + +# Disable autocommit in the first session and then test in new session that +# it is again enabled. +TINPUT=test_autocommit_disabled2.sql +TRETVAL=1 +a=`$RUNCMD < ./$TINPUT` +if [ "$a" != "$TRETVAL" ]; then + echo "$TINPUT FAILED, return value $a when $TRETVAL was expected">>$TLOG; +else + echo "$TINPUT PASSED">>$TLOG ; +fi + +TINPUT=set_autocommit_disabled.sql +`$RUNCMD < ./$TINPUT` +TINPUT=test_after_autocommit_disabled.sql +TRETVAL=$TMASTER_ID +a=`$RUNCMD < ./$TINPUT` +if [ "$a" == "$TRETVAL" ]; then + echo "$TINPUT FAILED, return value $a when it was not accetable">>$TLOG; +else + echo "$TINPUT PASSED">>$TLOG ; +fi + diff --git a/server/modules/routing/readwritesplit/test/set_autocommit_disabled.sql b/server/modules/routing/readwritesplit/test/set_autocommit_disabled.sql new file mode 100644 index 000000000..a182b4922 --- /dev/null +++ b/server/modules/routing/readwritesplit/test/set_autocommit_disabled.sql @@ -0,0 +1,7 @@ +use test; +drop table if exists t1; +create table t1 (id integer); +set autocommit=0; -- open transaction +begin; +insert into t1 values(1); -- write to master +commit; diff --git a/server/modules/routing/readwritesplit/test/test_after_autocommit_disabled.sql b/server/modules/routing/readwritesplit/test/test_after_autocommit_disabled.sql new file mode 100644 index 000000000..f10c5eb8c --- /dev/null +++ b/server/modules/routing/readwritesplit/test/test_after_autocommit_disabled.sql @@ -0,0 +1,2 @@ +use test; +select @@server_id; \ No newline at end of file diff --git a/server/modules/routing/readwritesplit/test/test_autocommit_disabled1.sql b/server/modules/routing/readwritesplit/test/test_autocommit_disabled1.sql new file mode 100644 index 000000000..1f3eb28fa --- /dev/null +++ b/server/modules/routing/readwritesplit/test/test_autocommit_disabled1.sql @@ -0,0 +1,7 @@ +use test; +drop table if exists t1; +create table t1 (id integer); +set autocommit=0; -- open transaction +insert into t1 values(1); -- write to master +select count(*) from t1; -- read from master +drop table t1; diff --git a/server/modules/routing/readwritesplit/test/test_autocommit_disabled1b.sql b/server/modules/routing/readwritesplit/test/test_autocommit_disabled1b.sql new file mode 100644 index 000000000..fb3ff8d59 --- /dev/null +++ b/server/modules/routing/readwritesplit/test/test_autocommit_disabled1b.sql @@ -0,0 +1,7 @@ +use test; +drop table if exists t1; +create table t1 (id integer); +set autocommit=OFF; -- open transaction +insert into t1 values(1); -- write to master +select count(*) from t1; -- read from master +drop table t1; diff --git a/server/modules/routing/readwritesplit/test/test_autocommit_disabled2.sql b/server/modules/routing/readwritesplit/test/test_autocommit_disabled2.sql new file mode 100644 index 000000000..04be4024e --- /dev/null +++ b/server/modules/routing/readwritesplit/test/test_autocommit_disabled2.sql @@ -0,0 +1,9 @@ +use test; +drop table if exists t1; +create table t1 (id integer); +set autocommit=0; -- open transaction +begin; +insert into t1 values(1); -- write to master +commit; +select count(*) from t1; -- read from master since autocommit is disabled +drop table t1; diff --git a/server/modules/routing/readwritesplit/test/test_implicit_commit1.sql b/server/modules/routing/readwritesplit/test/test_implicit_commit1.sql index 663c32efa..2b10bdcbb 100644 --- a/server/modules/routing/readwritesplit/test/test_implicit_commit1.sql +++ b/server/modules/routing/readwritesplit/test/test_implicit_commit1.sql @@ -1,5 +1,5 @@ DROP DATABASE If EXISTS FOO; -SET autocommit=0; +SET autocommit=1; BEGIN; CREATE DATABASE FOO; -- implicit commit SELECT (@@server_id) INTO @a; diff --git a/server/modules/routing/readwritesplit/test/test_implicit_commit2.sql b/server/modules/routing/readwritesplit/test/test_implicit_commit2.sql index 80f0ebad1..fbca8b34e 100644 --- a/server/modules/routing/readwritesplit/test/test_implicit_commit2.sql +++ b/server/modules/routing/readwritesplit/test/test_implicit_commit2.sql @@ -1,7 +1,7 @@ USE test; DROP TABLE IF EXISTS T1; DROP EVENT IF EXISTS myevent; -SET autocommit=0; +SET autocommit=1; BEGIN; CREATE TABLE T1 (id integer); CREATE EVENT myevent diff --git a/server/modules/routing/readwritesplit/test/test_implicit_commit3.sql b/server/modules/routing/readwritesplit/test/test_implicit_commit3.sql index 4db36fdd5..c8c433c21 100644 --- a/server/modules/routing/readwritesplit/test/test_implicit_commit3.sql +++ b/server/modules/routing/readwritesplit/test/test_implicit_commit3.sql @@ -1,6 +1,6 @@ USE test; DROP TABLE IF EXISTS T1; -SET autocommit=0; +SET autocommit=1; BEGIN; CREATE TABLE T1 (id integer); -- implicit commit SELECT (@@server_id) INTO @a; diff --git a/server/modules/routing/readwritesplit/test/test_implicit_commit5.sql b/server/modules/routing/readwritesplit/test/test_implicit_commit5.sql index 3656f1af8..50b175b37 100644 --- a/server/modules/routing/readwritesplit/test/test_implicit_commit5.sql +++ b/server/modules/routing/readwritesplit/test/test_implicit_commit5.sql @@ -1,6 +1,6 @@ USE test; DROP PROCEDURE IF EXISTS simpleproc; -SET autocommit=0; +SET autocommit=1; BEGIN; DELIMITER // CREATE PROCEDURE simpleproc (OUT param1 INT) diff --git a/server/modules/routing/readwritesplit/test/test_implicit_commit6.sql b/server/modules/routing/readwritesplit/test/test_implicit_commit6.sql index ba896966d..18f1c39ef 100644 --- a/server/modules/routing/readwritesplit/test/test_implicit_commit6.sql +++ b/server/modules/routing/readwritesplit/test/test_implicit_commit6.sql @@ -1,6 +1,6 @@ USE test; DROP FUNCTION IF EXISTS hello; -SET autocommit=0; +SET autocommit=1; BEGIN; CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) DETERMINISTIC diff --git a/server/modules/routing/readwritesplit/test/test_implicit_commit7.sql b/server/modules/routing/readwritesplit/test/test_implicit_commit7.sql index 9b3c5bac7..f45b8c516 100644 --- a/server/modules/routing/readwritesplit/test/test_implicit_commit7.sql +++ b/server/modules/routing/readwritesplit/test/test_implicit_commit7.sql @@ -1,7 +1,7 @@ USE test; DROP TABLE IF EXISTS T1; CREATE TABLE T1 (id integer); -- implicit commit -SET autocommit=0; +SET autocommit=1; BEGIN; CREATE INDEX foo_t1 on T1 (id); -- implicit commit SELECT (@@server_id) INTO @a; diff --git a/server/modules/routing/readwritesplit/test/test_transaction_routing1.sql b/server/modules/routing/readwritesplit/test/test_transaction_routing1.sql deleted file mode 100644 index af17eb3d5..000000000 --- a/server/modules/routing/readwritesplit/test/test_transaction_routing1.sql +++ /dev/null @@ -1,19 +0,0 @@ -USE test; -SET autocommit = 0; -SET @a= -1; -SET @b= -2; -START TRANSACTION; -CREATE TABLE IF NOT EXISTS myCity (a int, b char(20)); -INSERT INTO myCity VALUES (1, 'Milan'); -INSERT INTO myCity VALUES (2, 'London'); -COMMIT; -START TRANSACTION; -DELETE FROM myCity; -SET @a = (SELECT COUNT(*) FROM myCity); -ROLLBACK; -START TRANSACTION; -SET @b = (SELECT COUNT(*) FROM myCity); -START TRANSACTION; -DROP TABLE myCity; -SELECT (@a+@b) AS res; -COMMIT; diff --git a/server/modules/routing/readwritesplit/test/test_transaction_routing3.sql b/server/modules/routing/readwritesplit/test/test_transaction_routing2b.sql similarity index 80% rename from server/modules/routing/readwritesplit/test/test_transaction_routing3.sql rename to server/modules/routing/readwritesplit/test/test_transaction_routing2b.sql index 895a88d80..4e8c65d35 100644 --- a/server/modules/routing/readwritesplit/test/test_transaction_routing3.sql +++ b/server/modules/routing/readwritesplit/test/test_transaction_routing2b.sql @@ -1,10 +1,11 @@ USE test; -SET autocommit = 0; +SET autocommit = Off; START TRANSACTION; CREATE TABLE IF NOT EXISTS myCity (a int, b char(20)); INSERT INTO myCity VALUES (1, 'Milan'); INSERT INTO myCity VALUES (2, 'London'); -COMMIT; +COMMIT; +START TRANSACTION; DELETE FROM myCity; -SELECT COUNT(*) FROM myCity; -- read transaction's modifications from slave +SELECT COUNT(*) FROM myCity; -- read transaction's modifications from master COMMIT; \ No newline at end of file diff --git a/server/modules/routing/readwritesplit/test/test_transaction_routing3b.sql b/server/modules/routing/readwritesplit/test/test_transaction_routing3b.sql new file mode 100644 index 000000000..aa59f17ef --- /dev/null +++ b/server/modules/routing/readwritesplit/test/test_transaction_routing3b.sql @@ -0,0 +1,7 @@ +-- Read from slave after implicit COMMIT +USE test; +START TRANSACTION; +CREATE TABLE IF NOT EXISTS T2 (id integer); +INSERT INTO T2 VALUES (@@server_id); +SET AUTOCOMMIT=oN; +SELECT id from T2; -- read transaction's modifications from slave diff --git a/server/modules/routing/readwritesplit/test/test_transaction_routing4.sql b/server/modules/routing/readwritesplit/test/test_transaction_routing4.sql new file mode 100644 index 000000000..6ba4ccc04 --- /dev/null +++ b/server/modules/routing/readwritesplit/test/test_transaction_routing4.sql @@ -0,0 +1,9 @@ +USE test; +SET autocommit = 0; +CREATE TABLE IF NOT EXISTS myCity (a int, b char(20)); +INSERT INTO myCity VALUES (1, 'Milan'); +INSERT INTO myCity VALUES (2, 'London'); +COMMIT; +DELETE FROM myCity; -- implicit transaction started +SELECT COUNT(*) FROM myCity; -- read transaction's modifications from master +COMMIT; diff --git a/server/modules/routing/readwritesplit/test/test_transaction_routing4b.sql b/server/modules/routing/readwritesplit/test/test_transaction_routing4b.sql new file mode 100644 index 000000000..6190ff224 --- /dev/null +++ b/server/modules/routing/readwritesplit/test/test_transaction_routing4b.sql @@ -0,0 +1,9 @@ +USE test; +SET autocommit = oFf; +CREATE TABLE IF NOT EXISTS myCity (a int, b char(20)); +INSERT INTO myCity VALUES (1, 'Milan'); +INSERT INTO myCity VALUES (2, 'London'); +COMMIT; +DELETE FROM myCity; -- implicit transaction started +SELECT COUNT(*) FROM myCity; -- read transaction's modifications from master +COMMIT; diff --git a/server/test/makefile b/server/test/makefile index e05e1a975..d812494fc 100644 --- a/server/test/makefile +++ b/server/test/makefile @@ -5,6 +5,7 @@ include ../../build_gateway.inc include ../../makefile.inc +include ../../test.inc TEST_ROOT := $(ROOT_PATH)/test PARENT_DIR := $(ROOT_PATH)/server @@ -39,8 +40,15 @@ testall: @echo "-------------------------------" >> $(TESTLOG) @echo $(shell date) >> $(TESTLOG) @echo "Test Server Core" >> $(TESTLOG) - $(MAKE) -C $(ROOT_PATH)/server/core testall - @echo "Query Classifier PASSED" >> $(TESTLOG) + $(MAKE) -C $(ROOT_PATH)/server/core testall + @echo "Core PASSED" >> $(TESTLOG) + @echo "" >> $(TESTLOG) + @echo "-------------------------------" >> $(TESTLOG) + @echo $(shell date) >> $(TESTLOG) + @echo "Test Modules" >> $(TESTLOG) + $(MAKE) -C $(ROOT_PATH)/server/modules/routing testall + @killall maxscale + @echo "Routing modules PASSED" >> $(TESTLOG) buildtests: @@ -51,7 +59,7 @@ else endif runtests: - @echo "" >> $(TESTLOG) + @echo "" > $(TESTLOG) @echo "-------------------------------" >> $(TESTLOG) @echo $(shell date) >> $(TESTLOG) @echo "Test MaxScale server" >> $(TESTLOG) @@ -63,5 +71,4 @@ runtests: @sleep 5 @echo "MaxScale server PASSED" >> $(TESTLOG) @echo "" >> $(TESTLOG) - @killall maxscale - + @cat $(TESTLOG) >> $(TEST_MAXSCALE_LOG) diff --git a/test.inc b/test.inc index 241772b0b..b020368d8 100644 --- a/test.inc +++ b/test.inc @@ -32,4 +32,10 @@ TPWD := # master's server_id, for example: # TMASTER_ID := 2 # -TMASTER_ID := \ No newline at end of file +TMASTER_ID := + +# +# Global test log where all log is gathered +# TEST_MAXSCALE_LOG := $(ROOT_PATH)/test/test_maxscale.log +# +TEST_MAXSCALE_LOG := diff --git a/test/README b/test/README index cb0fbbda5..c13504058 100644 --- a/test/README +++ b/test/README @@ -57,7 +57,8 @@ MAXSCALE_HOME log_manager, query_classifier, server, - utils + utils, + modules | |- utils cleantests, buildtests, runtests, testall | | diff --git a/test/makefile b/test/makefile index 0919d698a..15e57f8bf 100644 --- a/test/makefile +++ b/test/makefile @@ -5,11 +5,12 @@ include ../build_gateway.inc include ../makefile.inc +include ../test.inc export MAXSCALE_HOME=$(shell pwd)/MaxScale CC=cc -TESTLOG := $(shell pwd)/testmaxscale.log +TESTLOG := $(TEST_MAXSCALE_LOG) testall: $(MAKE) cleantests @@ -39,7 +40,7 @@ testall: @echo "Test utils" >> $(TESTLOG) $(MAKE) -C $(ROOT_PATH)/utils testall @echo "Utils PASSED" >> $(TESTLOG) - + cleantests: $(DEL) *~ $(MAKE) -C $(ROOT_PATH)/log_manager cleantests @@ -55,9 +56,10 @@ buildtests: $(MAKE) -C $(ROOT_PATH)/utils buildtests runtests: - @echo "" >> $(TESTLOG) + @echo "" > $(TESTLOG) @echo "-------------------------------" >> $(TESTLOG) @echo $(shell date) >> $(TESTLOG) @echo "Test MaxScale root" >> $(TESTLOG) @echo "-------------------------------" >> $(TESTLOG) @echo "Nothing to run here so far" >> $(TESTLOG) + \ No newline at end of file From 6d83e48b878a0080c57dac5ad528af91f814fb28 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Mon, 19 May 2014 13:47:15 +0100 Subject: [PATCH 04/11] Merge --- .../readwritesplit/test/test_transaction_routing1.sql | 6 ++++++ .../readwritesplit/test/test_transaction_routing3.sql | 7 +++++++ 2 files changed, 13 insertions(+) create mode 100644 server/modules/routing/readwritesplit/test/test_transaction_routing1.sql create mode 100644 server/modules/routing/readwritesplit/test/test_transaction_routing3.sql diff --git a/server/modules/routing/readwritesplit/test/test_transaction_routing1.sql b/server/modules/routing/readwritesplit/test/test_transaction_routing1.sql new file mode 100644 index 000000000..7b2769f72 --- /dev/null +++ b/server/modules/routing/readwritesplit/test/test_transaction_routing1.sql @@ -0,0 +1,6 @@ +use test; -- in both +drop table if exists t1; +create table t1 (id integer); +insert into t1 values(1); -- in master +commit; +select count(*) from t1; -- in slave diff --git a/server/modules/routing/readwritesplit/test/test_transaction_routing3.sql b/server/modules/routing/readwritesplit/test/test_transaction_routing3.sql new file mode 100644 index 000000000..29952fdd8 --- /dev/null +++ b/server/modules/routing/readwritesplit/test/test_transaction_routing3.sql @@ -0,0 +1,7 @@ +-- Read from slave after implicit COMMIT +USE test; +START TRANSACTION; +CREATE TABLE IF NOT EXISTS T2 (id integer); +INSERT INTO T2 VALUES (@@server_id); +SET AUTOCOMMIT=1; +SELECT id from T2; -- read transaction's modifications from slave From d52f761b2d037fdce2b2032b78c7d27532300f40 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Mon, 19 May 2014 15:18:09 +0100 Subject: [PATCH 05/11] Fix missing GWBUF queue --- server/modules/include/blr.h | 1 + 1 file changed, 1 insertion(+) diff --git a/server/modules/include/blr.h b/server/modules/include/blr.h index 47dc77fad..722775478 100644 --- a/server/modules/include/blr.h +++ b/server/modules/include/blr.h @@ -189,6 +189,7 @@ typedef struct router_instance { BLCACHE *cache[2]; ROUTER_STATS stats; /*< Statistics for this router */ int active_logs; + GWBUF *queue; struct router_instance *next; } ROUTER_INSTANCE; From 8b3ea0c4d98533fae6d13adeaab73db30fd6131e Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Mon, 19 May 2014 18:20:03 +0100 Subject: [PATCH 06/11] Added ability to use the service name in a show service command --- server/modules/routing/debugcmd.c | 58 +++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/server/modules/routing/debugcmd.c b/server/modules/routing/debugcmd.c index 422113d6c..e34b14e94 100644 --- a/server/modules/routing/debugcmd.c +++ b/server/modules/routing/debugcmd.c @@ -68,6 +68,7 @@ #define ARG_TYPE_ADDRESS 1 #define ARG_TYPE_STRING 2 +#define ARG_TYPE_SERVICE 3 /** * The subcommand structure * @@ -104,6 +105,8 @@ struct subcommand showoptions[] = { {0, 0, 0} }, { "services", 0, dprintAllServices, "Show all configured services in MaxScale", {0, 0, 0} }, + { "service", 1, dprintService, "Show a single service in MaxScale, may be passed a service name or address of a service object", + {ARG_TYPE_SERVICE, 0, 0} }, { "session", 1, dprintSession, "Show a single session in MaxScale, e.g. show session 0x284830", {ARG_TYPE_ADDRESS, 0, 0} }, { "sessions", 0, dprintAllSessions, "Show all active sessions in MaxScale", @@ -141,7 +144,7 @@ struct subcommand shutdownoptions[] = { 1, shutdown_service, "Shutdown a service, e.g. shutdown service 0x4838320", - {ARG_TYPE_ADDRESS, 0, 0} + {ARG_TYPE_SERVICE, 0, 0} }, { NULL, @@ -162,7 +165,7 @@ struct subcommand restartoptions[] = { { "monitor", 1, restart_monitor, "Restart a monitor, e.g. restart monitor 0x48181e0", {ARG_TYPE_ADDRESS, 0, 0} }, { "service", 1, restart_service, "Restart a service, e.g. restart service 0x4838320", - {ARG_TYPE_ADDRESS, 0, 0} }, + {ARG_TYPE_SERVICE, 0, 0} }, { NULL, 0, NULL, NULL, {0, 0, 0} } }; @@ -355,12 +358,18 @@ static struct { static unsigned long convert_arg(char *arg, int arg_type) { +unsigned long rval; + switch (arg_type) { case ARG_TYPE_ADDRESS: return (unsigned long)strtol(arg, NULL, 0); case ARG_TYPE_STRING: return (unsigned long)arg; + case ARG_TYPE_SERVICE: + if ((rval = (unsigned long)strtol(arg, NULL, 0)) == 0) + rval = (unsigned long)service_find(arg); + return rval; } return 0; } @@ -387,23 +396,50 @@ int argc, i, j, found = 0; char *args[MAXARGS]; char *saveptr, *delim = " \t\r\n"; unsigned long arg1, arg2, arg3; +int in_quotes = 0; +char *ptr; - /* Tokenize the input string */ - args[0] = strtok_r(cli->cmdbuf, delim, &saveptr); + args[0] = cli->cmdbuf; + ptr = args[0]; + in_quotes = 0; i = 0; - do { - i++; - args[i] = strtok_r(NULL, delim, &saveptr); - } while (args[i] != NULL && i < MAXARGS); + while (*ptr) + { + if (in_quotes == 0 && (*ptr == ' ' || *ptr == '\t' || *ptr == '\r' || *ptr == '\n')) + { + *ptr = 0; + if (args[i] == ptr) + args[i] = ptr + 1; + else + { + i++; + if (i >= MAXARGS) + break; + args[i] = ptr + 1; + } + } + else if (*ptr == '\"' && in_quotes == 0 && args[i] == ptr) + { + args[i]++; + in_quotes = 1; + } + else if (*ptr == '\"' && in_quotes == 1) + { + *ptr = 0; + in_quotes = 0; + } + ptr++; + } + args[i+1] = NULL; - if (args[0] == NULL) + if (args[0] == NULL || *args[0] == 0) return 1; argc = i - 2; /* The number of extra arguments to commands */ if (!strcasecmp(args[0], "help")) { - if (args[1] == NULL) + if (args[1] == NULL || *args[1] == 0) { found = 1; dcb_printf(dcb, "Available commands:\n"); @@ -449,9 +485,9 @@ unsigned long arg1, arg2, arg3; { for (j = 0; cmds[i].options[j].arg1; j++) { - found = 1; /**< command and sub-command match */ if (strcasecmp(args[1], cmds[i].options[j].arg1) == 0) { + found = 1; /**< command and sub-command match */ if (argc != cmds[i].options[j].n_args) { dcb_printf(dcb, "Incorrect number of arguments: %s %s expects %d arguments\n", From c1d39999ff647828bd6f262d21e992ff2cf83ce6 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Wed, 21 May 2014 17:25:21 +0100 Subject: [PATCH 07/11] Improvements to debug interface & blr updates --- server/core/config.c | 4 +- server/core/server.c | 44 +++++++++++++++- server/include/server.h | 2 + server/include/service.h | 1 + .../modules/routing/binlog/.blr_master.c.swp | Bin 36864 -> 0 bytes server/modules/routing/binlog/blr.c | 2 +- server/modules/routing/binlog/blr_master.c | 48 ++++++++++++++---- server/modules/routing/binlog/blr_slave.c | 41 +++++++++++++++ server/modules/routing/debugcmd.c | 41 +++++++++++---- 9 files changed, 158 insertions(+), 25 deletions(-) delete mode 100644 server/modules/routing/binlog/.blr_master.c.swp diff --git a/server/core/config.c b/server/core/config.c index 4da5135e7..dad4c4022 100644 --- a/server/core/config.c +++ b/server/core/config.c @@ -29,7 +29,8 @@ * 06/02/14 Massimiliano Pinto Added support for enable/disable root user in services * 14/02/14 Massimiliano Pinto Added enable_root_user in the service_params list * 11/03/14 Massimiliano Pinto Added Unix socket support - * 11/05/14 Massimiliano Pinto Added version_string support to service + * 11/05/14 Massimiliano Pinto Added version_string support to service + * 19/05/14 Mark Riddoch Added unique names from section headers * * @endverbatim */ @@ -299,6 +300,7 @@ int error_count = 0; obj->element = server_alloc(address, protocol, atoi(port)); + server_set_unique_name(obj->element, obj->object); } else { diff --git a/server/core/server.c b/server/core/server.c index bf5b3174f..fd3e1c876 100644 --- a/server/core/server.c +++ b/server/core/server.c @@ -67,6 +67,7 @@ SERVER *server; server->nextdb = NULL; server->monuser = NULL; server->monpw = NULL; + server->unique_name = NULL; spinlock_acquire(&server_spin); server->next = allServers; @@ -109,10 +110,49 @@ SERVER *ptr; /* Clean up session and free the memory */ free(server->name); free(server->protocol); + if (server->unique_name) + free(server->unique_name); free(server); return 1; } +/** + * Set a unique name for the server + * + * @param server The server to ste the name on + * @param name The unique name for the server + */ +void +server_set_unique_name(SERVER *server, char *name) +{ + server->unique_name = strdup(name); +} + +/** + * Find an existing server using the unique section name in + * configuration file + * + * @param servname The Server name or address + * @param port The server port + * @return The server or NULL if not found + */ +SERVER * +server_find_by_unique_name(char *name) +{ +SERVER *server; + + spinlock_acquire(&server_spin); + server = allServers; + while (server) + { + if (strcmp(server->unique_name, name) == 0) + break; + server = server->next; + } + spinlock_release(&server_spin); + return server; +} + /** * Find an existing server * @@ -190,7 +230,7 @@ char *stat; ptr = allServers; while (ptr) { - dcb_printf(dcb, "Server %p\n", ptr); + dcb_printf(dcb, "Server %p (%s)\n", ptr, ptr->unique_name); dcb_printf(dcb, "\tServer: %s\n", ptr->name); stat = server_status(ptr); dcb_printf(dcb, "\tStatus: %s\n", stat); @@ -215,7 +255,7 @@ dprintServer(DCB *dcb, SERVER *server) { char *stat; - dcb_printf(dcb, "Server %p\n", server); + dcb_printf(dcb, "Server %p (%s)\n", server, server->unique_name); dcb_printf(dcb, "\tServer: %s\n", server->name); stat = server_status(server); dcb_printf(dcb, "\tStatus: %s\n", stat); diff --git a/server/include/server.h b/server/include/server.h index e355e8c49..6b4598c36 100644 --- a/server/include/server.h +++ b/server/include/server.h @@ -51,6 +51,7 @@ typedef struct { * between the gateway and the server. */ typedef struct server { + char *unique_name; /**< Unique name for the server */ char *name; /**< Server name/IP address*/ unsigned short port; /**< Port to listen on */ char *protocol; /**< Protocol module to use */ @@ -103,6 +104,7 @@ typedef struct server { extern SERVER *server_alloc(char *, char *, unsigned short); extern int server_free(SERVER *); +extern SERVER *server_find_by_unique_name(char *); extern SERVER *server_find(char *, unsigned short); extern void printServer(SERVER *); extern void printAllServers(); diff --git a/server/include/service.h b/server/include/service.h index 0a8db9ea2..85fe3972d 100644 --- a/server/include/service.h +++ b/server/include/service.h @@ -148,4 +148,5 @@ extern int service_refresh_users(SERVICE *); extern void printService(SERVICE *); extern void printAllServices(); extern void dprintAllServices(DCB *); +extern void dprintService(DCB *, SERVICE *); #endif diff --git a/server/modules/routing/binlog/.blr_master.c.swp b/server/modules/routing/binlog/.blr_master.c.swp deleted file mode 100644 index 586b89f6a0835bd303ebe0e0c8744ba14c19a6e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36864 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�Y#92V|@RG`<9>-ceSrK*k+GTX#WAS2z)_fkgpC59RCl z5Eg;r0DXlcq>mC0YF$9R3r;T}p9X>Qd2xwCq5?=3mX0ABV4WJoqC{9-MPuKcOBxj56~;QyY+b7_cwm z^l=RF^fRP!XhAH&7FOWG26R^ws-rzr6uEP-p)c;Xgq7N?egPgyH11rL!C2s8&! zlP|R>9;BMU%Gcn~P};AB1KEK)$iM*y$s@(k9yC};M?ndc0vx~|2m8fVUA0(U32_zy z$bS%xuq=+UY7iuid%++ig@G0W#)I5PAe?+bYG|Ccz;@scCneCJ0j>puAm_oB3}Ow8 f^peb!_}u&y(9#|}$p^j=n?QJg)PdG(BL@ipZ-R3D diff --git a/server/modules/routing/binlog/blr.c b/server/modules/routing/binlog/blr.c index 005f360dc..143722a25 100644 --- a/server/modules/routing/binlog/blr.c +++ b/server/modules/routing/binlog/blr.c @@ -540,7 +540,7 @@ int i = 0; dcb_printf(dcb, "\t\tServer-id: %d\n", session->serverid); if (session->hostname) dcb_printf(dcb, "\t\tHostname: %s\n", session->hostname); - dcb_printf(dcb, "\t\tSlave DCB: %x\n", session->dcb); + dcb_printf(dcb, "\t\tSlave DCB: %p\n", session->dcb); dcb_printf(dcb, "\t\tNext Sequence No: %d\n", session->seqno); dcb_printf(dcb, "\t\tState: %s\n", blrs_states[session->state]); dcb_printf(dcb, "\t\tBinlog file: %s\n", session->binlogfile); diff --git a/server/modules/routing/binlog/blr_master.c b/server/modules/routing/binlog/blr_master.c index a60145f9e..515745704 100644 --- a/server/modules/routing/binlog/blr_master.c +++ b/server/modules/routing/binlog/blr_master.c @@ -423,21 +423,39 @@ int no_residual = 1; len = extract_field(pdata, 24) + 4; } - if (reslen < len && gwbuf_length(pkt) >= len) // Message straddles buffers + if (reslen < len && gwbuf_length(pkt) >= len) { - /* Allocate a contiguous buffer for the binlog message */ + /* + * The message is contianed in more than the current + * buffer, however we have the complete messasge in + * this buffer and the chain of remaining buffers. + * + * Allocate a contiguous buffer for the binlog message + * and copy the complete message into this buffer. + */ msg = malloc(len); + if (GWBUF_LENGTH(pkt->next) < len - reslen) + printf("Packet (length %d) spans more than 2 buffers\n", len); memcpy(msg, pdata, reslen); memcpy(&msg[reslen], GWBUF_DATA(pkt->next), len - reslen); ptr = msg; } - else if (reslen < len) // Message straddles buffers + else if (reslen < len) { + /* + * The message is not fully contained in the current + * and we do not have the complete message in the + * buffer chain. Therefore we must stop processing until + * we receive the next buffer. + */ break; } else { + /* + * The message is fully contained in the current buffer + */ ptr = pdata; msg = NULL; } @@ -474,10 +492,6 @@ int no_residual = 1; } else { - if (hdr.event_type == ROTATE_EVENT) - { - blr_rotate_event(router, ptr, &hdr); - } if (hdr.event_type == HEARTBEAT_EVENT) { #ifdef SHOW_EVENTS @@ -490,8 +504,20 @@ int no_residual = 1; ptr = ptr + 5; // We don't put the first byte of the payload // into the binlog file blr_write_binlog_record(router, &hdr, ptr); + if (hdr.event_type == ROTATE_EVENT) + { + blr_rotate_event(router, ptr, &hdr); + } blr_distribute_binlog_record(router, &hdr, ptr); } + else + { + ptr += 5; + if (hdr.event_type == ROTATE_EVENT) + { + blr_rotate_event(router, ptr, &hdr); + } + } } } else @@ -508,7 +534,7 @@ int no_residual = 1; } else { - pkt = gwbuf_consume(pkt, 4 + hdr.payload_len); + pkt = gwbuf_consume(pkt, len); } } @@ -578,8 +604,6 @@ int len; uint64_t pos; char file[BINLOG_FNAMELEN+1]; - ptr += 4; // Skip packet header - ptr++; // Skip the OK ptr += 19; // Skip event header len = hdr->event_size - 19; // Event size minus header pos = extract_field(ptr, 32) + (extract_field(ptr+4, 32) << 32); @@ -649,6 +673,10 @@ ROUTER_SLAVE *slave; memcpy(buf, ptr, hdr->event_size); slave->dcb->func.write(slave->dcb, pkt); slave->binlog_pos = hdr->next_pos; + if (hdr->event_type == ROTATE_EVENT) + { + blr_slave_rotate(slave, ptr); + } } slave = slave->next; diff --git a/server/modules/routing/binlog/blr_slave.c b/server/modules/routing/binlog/blr_slave.c index 79a94844b..0a52fe2c0 100644 --- a/server/modules/routing/binlog/blr_slave.c +++ b/server/modules/routing/binlog/blr_slave.c @@ -719,10 +719,36 @@ struct timespec req; *ptr++ = slave->seqno++; *ptr++ = 0; // OK head = gwbuf_append(head, record); + if (hdr.event_type == ROTATE_EVENT) + { + close(fd); + blr_slave_rotate(slave, GWBUF_DATA(record)); + if ((fd = blr_open_binlog(router, slave->binlogfile)) == -1) + { + LOGIF(LE, (skygw_log_write( + LOGFILE_ERROR, + "blr_slave_catchup failed to open binlog file %s\n", + slave->binlogfile))); + break; + } + } written = slave->dcb->func.write(slave->dcb, head); if (written) slave->binlog_pos = hdr.next_pos; rval = written; + if (hdr.event_type == ROTATE_EVENT) + { + close(fd); + blr_slave_rotate(slave, GWBUF_DATA(record)); + if ((fd = blr_open_binlog(router, slave->binlogfile)) == -1) + { + LOGIF(LE, (skygw_log_write( + LOGFILE_ERROR, + "blr_slave_catchup failed to open binlog file %s\n", + slave->binlogfile))); + break; + } + } atomic_add(&slave->stats.n_events, 1); burst++; } @@ -765,3 +791,18 @@ ROUTER_INSTANCE *router = slave->router; blr_slave_catchup(router, slave); } } + +/** + * Rotate the slave to the new binlog file + * + * @param slave The slave instance + * @param ptr The rotate event (minux header and OK byte) + */ +void +blr_slave_rotate(ROUTER_SLAVE *slave, uint8_t *ptr) +{ + ptr += 19; // Skip header + slave->binlog_pos = extract_field(ptr, 32) + (extract_field(ptr+4, 32) << 32); + memcpy(slave->binlogfile, ptr + 8, BINLOG_FNAMELEN); + slave->binlogfile[BINLOG_FNAMELEN] = 0; +} diff --git a/server/modules/routing/debugcmd.c b/server/modules/routing/debugcmd.c index e34b14e94..fe4397d64 100644 --- a/server/modules/routing/debugcmd.c +++ b/server/modules/routing/debugcmd.c @@ -36,7 +36,9 @@ * Date Who Description * 20/06/13 Mark Riddoch Initial implementation * 17/07/13 Mark Riddoch Additional commands - * 09/08/2013 Massimiliano Pinto Addes enable/disable commands (now only for log) + * 09/08/2013 Massimiliano Pinto Added enable/disable commands (now only for log) + * 20/05/14 Mark Riddoch Added ability to give server and service names rather + * than simply addresses * * @endverbatim */ @@ -69,6 +71,8 @@ #define ARG_TYPE_ADDRESS 1 #define ARG_TYPE_STRING 2 #define ARG_TYPE_SERVICE 3 +#define ARG_TYPE_SERVER 4 +#define ARG_TYPE_DBUSERS 5 /** * The subcommand structure * @@ -91,16 +95,16 @@ struct subcommand showoptions[] = { {0, 0, 0} }, { "dcb", 1, dprintDCB, "Show a single descriptor control block e.g. show dcb 0x493340", {ARG_TYPE_ADDRESS, 0, 0} }, - { "dbusers", 1, dcb_usersPrint, "Show statistics and user names for a service's user table.\n\t\tExample : show dbusers ", - {ARG_TYPE_ADDRESS, 0, 0} }, + { "dbusers", 1, dcb_usersPrint, "Show statistics and user names for a service's user table.\n\t\tExample : show dbusers |", + {ARG_TYPE_DBUSERS, 0, 0} }, { "epoll", 0, dprintPollStats, "Show the poll statistics", {0, 0, 0} }, { "modules", 0, dprintAllModules, "Show all currently loaded modules", {0, 0, 0} }, { "monitors", 0, monitorShowAll, "Show the monitors that are configured", {0, 0, 0} }, - { "server", 1, dprintServer, "Show details for a server, e.g. show server 0x485390", - {ARG_TYPE_ADDRESS, 0, 0} }, + { "server", 1, dprintServer, "Show details for a server, e.g. show server 0x485390. The address may also be repalced with the server name form the configuration file", + {ARG_TYPE_SERVER, 0, 0} }, { "servers", 0, dprintAllServers, "Show all configured servers", {0, 0, 0} }, { "services", 0, dprintAllServices, "Show all configured services in MaxScale", @@ -143,7 +147,7 @@ struct subcommand shutdownoptions[] = { "service", 1, shutdown_service, - "Shutdown a service, e.g. shutdown service 0x4838320", + "Shutdown a service, e.g. shutdown service 0x4838320 or shutdown service \"Sales Database\"", {ARG_TYPE_SERVICE, 0, 0} }, { @@ -176,7 +180,7 @@ static void set_server(DCB *dcb, SERVER *server, char *bit); */ struct subcommand setoptions[] = { { "server", 2, set_server, "Set the status of a server. E.g. set server 0x4838320 master", - {ARG_TYPE_ADDRESS, ARG_TYPE_STRING, 0} }, + {ARG_TYPE_SERVER, ARG_TYPE_STRING, 0} }, { NULL, 0, NULL, NULL, {0, 0, 0} } }; @@ -187,7 +191,7 @@ static void clear_server(DCB *dcb, SERVER *server, char *bit); */ struct subcommand clearoptions[] = { { "server", 2, clear_server, "Clear the status of a server. E.g. clear server 0x4838320 master", - {ARG_TYPE_ADDRESS, ARG_TYPE_STRING, 0} }, + {ARG_TYPE_SERVER, ARG_TYPE_STRING, 0} }, { NULL, 0, NULL, NULL, {0, 0, 0} } }; @@ -200,9 +204,9 @@ static void reload_config(DCB *dcb); */ struct subcommand reloadoptions[] = { { "config", 0, reload_config, "Reload the configuration data for MaxScale.", - {ARG_TYPE_ADDRESS, 0, 0} }, + {0, 0, 0} }, { "dbusers", 1, reload_dbusers, "Reload the dbuser data for a service. E.g. reload dbusers 0x849420", - {ARG_TYPE_ADDRESS, 0, 0} }, + {ARG_TYPE_DBUSERS, 0, 0} }, { NULL, 0, NULL, NULL, {0, 0, 0} } }; @@ -358,7 +362,8 @@ static struct { static unsigned long convert_arg(char *arg, int arg_type) { -unsigned long rval; +unsigned long rval; +SERVICE *service; switch (arg_type) { @@ -370,6 +375,20 @@ unsigned long rval; if ((rval = (unsigned long)strtol(arg, NULL, 0)) == 0) rval = (unsigned long)service_find(arg); return rval; + case ARG_TYPE_SERVER: + if ((rval = (unsigned long)strtol(arg, NULL, 0)) == 0) + rval = (unsigned long)server_find_by_unique_name(arg); + return rval; + case ARG_TYPE_DBUSERS: + if ((rval = (unsigned long)strtol(arg, NULL, 0)) == 0) + { + service = service_find(arg); + if (service) + return (unsigned long)(service->users); + else + return 0; + } + return rval; } return 0; } From 837d15dc338f473f74dac699efb2cabbbe5bd5a4 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Thu, 22 May 2014 15:07:46 +0100 Subject: [PATCH 08/11] Fix valgrind issue with saved master responses --- server/modules/routing/binlog/blr_master.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/server/modules/routing/binlog/blr_master.c b/server/modules/routing/binlog/blr_master.c index 515745704..fee0be5db 100644 --- a/server/modules/routing/binlog/blr_master.c +++ b/server/modules/routing/binlog/blr_master.c @@ -187,7 +187,6 @@ char query[128]; case BLRM_HBPERIOD: // Response to set the heartbeat period router->saved_master.heartbeat = buf; - gwbuf_consume(buf, GWBUF_LENGTH(buf)); buf = blr_make_query("SET @master_binlog_checksum = @@global.binlog_checksum"); router->master_state = BLRM_CHKSUM1; router->master->func.write(router->master, buf); @@ -195,7 +194,6 @@ char query[128]; case BLRM_CHKSUM1: // Response to set the master binlog checksum router->saved_master.chksum1 = buf; - gwbuf_consume(buf, GWBUF_LENGTH(buf)); buf = blr_make_query("SELECT @master_binlog_checksum"); router->master_state = BLRM_CHKSUM2; router->master->func.write(router->master, buf); @@ -225,7 +223,6 @@ char query[128]; case BLRM_SUUID: // Response to the SET @server_uuid, should be stored router->saved_master.setslaveuuid = buf; - gwbuf_consume(buf, GWBUF_LENGTH(buf)); buf = blr_make_query("SET NAMES latin1"); router->master_state = BLRM_LATIN1; router->master->func.write(router->master, buf); @@ -233,7 +230,6 @@ char query[128]; case BLRM_LATIN1: // Response to the SET NAMES latin1, should be stored router->saved_master.setnames = buf; - gwbuf_consume(buf, GWBUF_LENGTH(buf)); buf = blr_make_registration(router); router->master_state = BLRM_REGISTER; router->master->func.write(router->master, buf); @@ -382,7 +378,7 @@ encode_value(unsigned char *data, unsigned int value, int len) static void blr_handle_binlog_record(ROUTER_INSTANCE *router, GWBUF *pkt) { -uint8_t *msg, *ptr, *pdata; +uint8_t *msg = NULL, *ptr, *pdata; REP_HEADER hdr; int len, reslen; int no_residual = 1; @@ -457,7 +453,6 @@ int no_residual = 1; * The message is fully contained in the current buffer */ ptr = pdata; - msg = NULL; } blr_extract_header(ptr, &hdr); @@ -529,6 +524,7 @@ int no_residual = 1; if (msg) { free(msg); + msg = NULL; pkt = gwbuf_consume(pkt, reslen); pkt = gwbuf_consume(pkt, len - reslen); } From 3b984d2773c536922e9f8e410ea15d3307459a6e Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Thu, 22 May 2014 15:24:07 +0100 Subject: [PATCH 09/11] Improve quoting mechanism is debug interface Introduce the use of \ and allow the quotes to appear at any point within the string, not just the beginning and end of words. --- server/modules/routing/debugcmd.c | 40 ++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/server/modules/routing/debugcmd.c b/server/modules/routing/debugcmd.c index fe4397d64..a4fda3bb5 100644 --- a/server/modules/routing/debugcmd.c +++ b/server/modules/routing/debugcmd.c @@ -415,18 +415,34 @@ int argc, i, j, found = 0; char *args[MAXARGS]; char *saveptr, *delim = " \t\r\n"; unsigned long arg1, arg2, arg3; -int in_quotes = 0; -char *ptr; +int in_quotes = 0, escape_next = 0; +char *ptr, *lptr; args[0] = cli->cmdbuf; ptr = args[0]; - in_quotes = 0; + lptr = ptr; i = 0; + /* + * Break the command line into a number of words. Whitespace is used + * to delimit words and may be escaped by use of the \ character or + * the use of double quotes. + * The array args contains the broken down words, one per index. + */ while (*ptr) { - if (in_quotes == 0 && (*ptr == ' ' || *ptr == '\t' || *ptr == '\r' || *ptr == '\n')) + if (escape_next) { - *ptr = 0; + *lptr++ = *ptr++; + escape_next = 0; + } + else if (*ptr == '\\') + { + escape_next = 1; + ptr++; + } + else if (in_quotes == 0 && (*ptr == ' ' || *ptr == '\t' || *ptr == '\r' || *ptr == '\n')) + { + *lptr = 0; if (args[i] == ptr) args[i] = ptr + 1; else @@ -436,19 +452,25 @@ char *ptr; break; args[i] = ptr + 1; } + ptr++; + lptr++; } - else if (*ptr == '\"' && in_quotes == 0 && args[i] == ptr) + else if (*ptr == '\"' && in_quotes == 0) { - args[i]++; in_quotes = 1; + ptr++; } else if (*ptr == '\"' && in_quotes == 1) { - *ptr = 0; in_quotes = 0; + ptr++; + } + else + { + *lptr++ = *ptr++; } - ptr++; } + *lptr = 0; args[i+1] = NULL; if (args[0] == NULL || *args[0] == 0) From 23a9759fca0f27dfac8ac9a9ee6a0af5f6b88737 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Fri, 23 May 2014 09:08:02 +0100 Subject: [PATCH 10/11] Fixed a couple of memory leaks --- server/core/dcb.c | 10 ++++++++++ server/modules/routing/binlog/blr.c | 6 ++++++ 2 files changed, 16 insertions(+) diff --git a/server/core/dcb.c b/server/core/dcb.c index b187e9952..563ea6f8f 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -255,6 +255,8 @@ dcb_add_to_zombieslist(DCB *dcb) static void dcb_final_free(DCB *dcb) { +DCB_CALLBACK *cb; + CHK_DCB(dcb); ss_info_dassert(dcb->state == DCB_STATE_DISCONNECTED, "dcb not in DCB_STATE_DISCONNECTED state."); @@ -315,6 +317,14 @@ dcb_final_free(DCB *dcb) while ((queue = gwbuf_consume(queue, GWBUF_LENGTH(queue))) != NULL); } + spinlock_acquire(&dcb->cb_lock); + while ((cb = dcb->callbacks) != NULL) + { + dcb->callbacks = cb->next; + free(cb); + } + spinlock_release(&dcb->cb_lock); + bitmask_free(&dcb->memdata.bitmask); simple_mutex_done(&dcb->dcb_read_lock); simple_mutex_done(&dcb->dcb_write_lock); diff --git a/server/modules/routing/binlog/blr.c b/server/modules/routing/binlog/blr.c index 143722a25..6560bd609 100644 --- a/server/modules/routing/binlog/blr.c +++ b/server/modules/routing/binlog/blr.c @@ -398,6 +398,12 @@ int prev_val; router, prev_val-1))); + if (slave->hostname) + free(slave->hostname); + if (slave->user) + free(slave->user); + if (slave->passwd) + free(slave->passwd); free(slave); } From 7fe50a311f7d3de98754cfa6aeaa249a270d60b5 Mon Sep 17 00:00:00 2001 From: Mark Riddoch Date: Fri, 23 May 2014 13:29:58 +0100 Subject: [PATCH 11/11] Addition of developer and user modes to debugcli In order to be able to protect the interface so that mistyped argument do not endanger MaxScale yet still allow the developer access a router option has been added that gives the debugcli two modes. --- server/core/dcb.c | 28 +++++ server/core/monitor.c | 23 ++++ server/core/service.c | 28 +++++ server/core/session.c | 28 +++++ server/include/dcb.h | 1 + server/include/monitor.h | 2 + server/include/service.h | 1 + server/include/session.h | 1 + server/modules/include/debugcli.h | 6 + server/modules/routing/debugcli.c | 35 +++++- server/modules/routing/debugcmd.c | 176 ++++++++++++++++++++++-------- 11 files changed, 280 insertions(+), 49 deletions(-) diff --git a/server/core/dcb.c b/server/core/dcb.c index 563ea6f8f..52a9bbfc9 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -1606,3 +1606,31 @@ DCB_CALLBACK *cb, *nextcb; } spinlock_release(&dcb->cb_lock); } + +/** + * Check the passed DCB to ensure it is in the list of allDCBS + * + * @param DCB The DCB to check + * @return 1 if the DCB is in the list, otherwise 0 + */ +int +dcb_isvalid(DCB *dcb) +{ +DCB *ptr; +int rval = 0; + + spinlock_acquire(&dcbspin); + ptr = allDCBs; + while (ptr) + { + if (ptr == dcb) + { + rval = 1; + break; + } + ptr = ptr->next; + } + spinlock_release(&dcbspin); + + return rval; +} diff --git a/server/core/monitor.c b/server/core/monitor.c index 6c028cad6..cee2f2d9e 100644 --- a/server/core/monitor.c +++ b/server/core/monitor.c @@ -197,3 +197,26 @@ MONITOR *ptr; } spinlock_release(&monLock); } + +/** + * Find a monitor by name + * + * @param name The name of the monitor + * @return Pointer to the monitor or NULL + */ +MONITOR * +monitor_find(char *name) +{ +MONITOR *ptr; + + spinlock_acquire(&monLock); + ptr = allMonitors; + while (ptr) + { + if (!strcmp(ptr->name, name)) + break; + ptr = ptr->next; + } + spinlock_release(&monLock); + return ptr; +} diff --git a/server/core/service.c b/server/core/service.c index e44b9c697..93db01c83 100644 --- a/server/core/service.c +++ b/server/core/service.c @@ -29,6 +29,7 @@ * 25/02/14 Massimiliano Pinto Added: service refresh limit feature * 28/02/14 Massimiliano Pinto users_alloc moved from service_alloc to serviceStartPort (generic hashable for services) * 07/05/14 Massimiliano Pinto Added: version_string initialized to NULL + * 23/05/14 Mark Riddoch Addition of service validation call * * @endverbatim */ @@ -114,6 +115,33 @@ SERVICE *service; return service; } +/** + * Check to see if a service pointer is valid + * + * @param service The poitner to check + * @return 1 if the service is in the list of all services + */ +int +service_isvalid(SERVICE *service) +{ +SERVICE *ptr; +int rval = 0; + + spinlock_acquire(&service_spin); + ptr = allServices; + while (ptr) + { + if (ptr == service) + { + rval = 1; + break; + } + ptr = ptr->next; + } + spinlock_release(&service_spin); + return rval; +} + /** * Start an individual port/protocol pair * diff --git a/server/core/session.c b/server/core/session.c index 1e0d49771..bb039edf5 100644 --- a/server/core/session.c +++ b/server/core/session.c @@ -269,6 +269,34 @@ return_succp : return succp; } +/** + * Check to see if a session is valid, i.e. in the list of all sessions + * + * @param session Session to check + * @return 1 if the session is valid otherwise 0 + */ +int +session_isvalid(SESSION *session) +{ +SESSION *ptr; +int rval = 0; + + spinlock_acquire(&session_spin); + ptr = allSessions; + while (ptr) + { + if (ptr == session) + { + rval = 1; + break; + } + ptr = ptr->next; + } + spinlock_release(&session_spin); + + return rval; +} + /** * Print details of an individual session * diff --git a/server/include/dcb.h b/server/include/dcb.h index 625ae6026..6b9ef093d 100644 --- a/server/include/dcb.h +++ b/server/include/dcb.h @@ -273,6 +273,7 @@ int dcb_add_callback(DCB *, DCB_REASON, int (*)(struct dcb *, DCB_REASON, void void *); int dcb_remove_callback(DCB *, DCB_REASON, int (*)(struct dcb *, DCB_REASON), void *); +int dcb_isvalid(DCB *); /* Check the DCB is in the linked list */ bool dcb_set_state( DCB* dcb, diff --git a/server/include/monitor.h b/server/include/monitor.h index 6aa0f2430..6444fecd5 100644 --- a/server/include/monitor.h +++ b/server/include/monitor.h @@ -29,6 +29,7 @@ * Date Who Description * 07/07/13 Mark Riddoch Initial implementation * 25/07/13 Mark Riddoch Addition of diagnotics + * 23/05/14 Mark Riddoch Addition of routine to find monitors by name * * @endverbatim */ @@ -79,6 +80,7 @@ typedef struct monitor { extern MONITOR *monitor_alloc(char *, char *); extern void monitor_free(MONITOR *); +extern MONITOR *monitor_find(char *); extern void monitorAddServer(MONITOR *, SERVER *); extern void monitorAddUser(MONITOR *, char *, char *); extern void monitorStop(MONITOR *); diff --git a/server/include/service.h b/server/include/service.h index 85fe3972d..c7b9126f0 100644 --- a/server/include/service.h +++ b/server/include/service.h @@ -129,6 +129,7 @@ typedef struct service { extern SERVICE *service_alloc(char *, char *); extern int service_free(SERVICE *); extern SERVICE *service_find(char *); +extern int service_isvalid(SERVICE *); extern int serviceAddProtocol(SERVICE *, char *, char *, unsigned short); extern int serviceHasProtocol(SERVICE *, char *, unsigned short); extern void serviceAddBackend(SERVICE *, SERVER *); diff --git a/server/include/session.h b/server/include/session.h index 6cafa160d..c9f9f673c 100644 --- a/server/include/session.h +++ b/server/include/session.h @@ -87,6 +87,7 @@ typedef struct session { SESSION *session_alloc(struct service *, struct dcb *); bool session_free(SESSION *); +int session_isvalid(SESSION *); void printAllSessions(); void printSession(SESSION *); void dprintAllSessions(struct dcb *); diff --git a/server/modules/include/debugcli.h b/server/modules/include/debugcli.h index 0e7afcfe2..b373cae6b 100644 --- a/server/modules/include/debugcli.h +++ b/server/modules/include/debugcli.h @@ -41,6 +41,7 @@ struct cli_session; typedef struct cli_instance { SPINLOCK lock; /*< The instance spinlock */ SERVICE *service; /*< The debug cli service */ + int mode; /*< CLI interface mode */ struct cli_session *sessions; /*< Linked list of sessions within this instance */ struct cli_instance @@ -53,8 +54,13 @@ typedef struct cli_instance { */ typedef struct cli_session { char cmdbuf[80]; /*< The command buffer used to build up user commands */ + int mode; /*< The CLI Mode for this session */ SESSION *session; /*< The gateway session */ struct cli_session *next; /*< The next pointer for the list of sessions */ } CLI_SESSION; + +/* Command line interface modes */ +#define CLIM_USER 1 +#define CLIM_DEVELOPER 2 #endif diff --git a/server/modules/routing/debugcli.c b/server/modules/routing/debugcli.c index 66c02c98b..d6becdfda 100644 --- a/server/modules/routing/debugcli.c +++ b/server/modules/routing/debugcli.c @@ -45,7 +45,7 @@ extern int lm_enabled_logfiles_bitmask; -static char *version_str = "V1.0.1"; +static char *version_str = "V1.1.0"; /* The router entry points */ static ROUTER *createInstance(SERVICE *service, char **options); @@ -127,6 +127,7 @@ static ROUTER * createInstance(SERVICE *service, char **options) { CLI_INSTANCE *inst; +int i; if ((inst = malloc(sizeof(CLI_INSTANCE))) == NULL) return NULL; @@ -134,7 +135,29 @@ CLI_INSTANCE *inst; inst->service = service; spinlock_init(&inst->lock); inst->sessions = NULL; + inst->mode = CLIM_USER; + if (options) + { + for (i = 0; options[i]; i++) + { + if (!strcasecmp(options[i], "developer")) + { + inst->mode = CLIM_DEVELOPER; + } + else if (!strcasecmp(options[i], "user")) + { + inst->mode = CLIM_USER; + } + else + { + LOGIF(LE, (skygw_log_write( + LOGFILE_ERROR, + "Unknown option for CLI '%s'\n", + options[i]))); + } + } + } /* * We have completed the creation of the instance data, so now @@ -176,11 +199,15 @@ CLI_SESSION *client; spinlock_release(&inst->lock); session->state = SESSION_STATE_READY; + client->mode = inst->mode; dcb_printf(session->client, "Welcome the SkySQL MaxScale Debug Interface (%s).\n", version_str); - dcb_printf(session->client, "WARNING: This interface is meant for developer usage,\n"); - dcb_printf(session->client, "passing incorrect addresses to commands can endanger your MaxScale server.\n\n"); + if (client->mode == CLIM_DEVELOPER) + { + dcb_printf(session->client, "WARNING: This interface is meant for developer usage,\n"); + dcb_printf(session->client, "passing incorrect addresses to commands can endanger your MaxScale server.\n\n"); + } dcb_printf(session->client, "Type help for a list of available commands.\n\n"); return (void *)client; @@ -281,4 +308,4 @@ static uint8_t getCapabilities( void* router_session) { return 0; -} \ No newline at end of file +} diff --git a/server/modules/routing/debugcmd.c b/server/modules/routing/debugcmd.c index a4fda3bb5..b78620b09 100644 --- a/server/modules/routing/debugcmd.c +++ b/server/modules/routing/debugcmd.c @@ -39,6 +39,7 @@ * 09/08/2013 Massimiliano Pinto Added enable/disable commands (now only for log) * 20/05/14 Mark Riddoch Added ability to give server and service names rather * than simply addresses + * 23/05/14 Mark Riddoch Added support for developer and user modes * * @endverbatim */ @@ -73,6 +74,9 @@ #define ARG_TYPE_SERVICE 3 #define ARG_TYPE_SERVER 4 #define ARG_TYPE_DBUSERS 5 +#define ARG_TYPE_SESSION 6 +#define ARG_TYPE_DCB 7 +#define ARG_TYPE_MONITOR 8 /** * The subcommand structure * @@ -83,6 +87,7 @@ struct subcommand { int n_args; void (*fn)(); char *help; + char *devhelp; int arg_types[3]; }; @@ -91,33 +96,59 @@ static void telnetdShowUsers(DCB *); * The subcommands of the show command */ struct subcommand showoptions[] = { - { "dcbs", 0, dprintAllDCBs, "Show all descriptor control blocks (network connections)", + { "dcbs", 0, dprintAllDCBs, + "Show all descriptor control blocks (network connections)", + "Show all descriptor control blocks (network connections)", {0, 0, 0} }, - { "dcb", 1, dprintDCB, "Show a single descriptor control block e.g. show dcb 0x493340", - {ARG_TYPE_ADDRESS, 0, 0} }, - { "dbusers", 1, dcb_usersPrint, "Show statistics and user names for a service's user table.\n\t\tExample : show dbusers |", + { "dcb", 1, dprintDCB, + "Show a single descriptor control block e.g. show dcb 0x493340", + "Show a single descriptor control block e.g. show dcb 0x493340", + {ARG_TYPE_DCB, 0, 0} }, + { "dbusers", 1, dcb_usersPrint, + "Show statistics and user names for a service's user table.\n\t\tExample : show dbusers ", + "Show statistics and user names for a service's user table.\n\t\tExample : show dbusers |", {ARG_TYPE_DBUSERS, 0, 0} }, - { "epoll", 0, dprintPollStats, "Show the poll statistics", + { "epoll", 0, dprintPollStats, + "Show the poll statistics", + "Show the poll statistics", {0, 0, 0} }, - { "modules", 0, dprintAllModules, "Show all currently loaded modules", + { "modules", 0, dprintAllModules, + "Show all currently loaded modules", + "Show all currently loaded modules", {0, 0, 0} }, - { "monitors", 0, monitorShowAll, "Show the monitors that are configured", + { "monitors", 0, monitorShowAll, + "Show the monitors that are configured", + "Show the monitors that are configured", {0, 0, 0} }, - { "server", 1, dprintServer, "Show details for a server, e.g. show server 0x485390. The address may also be repalced with the server name form the configuration file", + { "server", 1, dprintServer, + "Show details for a named server, e.g. show server dbnode1", + "Show details for a server, e.g. show server 0x485390. The address may also be repalced with the server name from the configuration file", {ARG_TYPE_SERVER, 0, 0} }, - { "servers", 0, dprintAllServers, "Show all configured servers", + { "servers", 0, dprintAllServers, + "Show all configured servers", + "Show all configured servers", {0, 0, 0} }, - { "services", 0, dprintAllServices, "Show all configured services in MaxScale", + { "services", 0, dprintAllServices, + "Show all configured services in MaxScale", + "Show all configured services in MaxScale", {0, 0, 0} }, - { "service", 1, dprintService, "Show a single service in MaxScale, may be passed a service name or address of a service object", + { "service", 1, dprintService, + "Show a single service in MaxScale, may be passed a service name", + "Show a single service in MaxScale, may be passed a service name or address of a service object", {ARG_TYPE_SERVICE, 0, 0} }, - { "session", 1, dprintSession, "Show a single session in MaxScale, e.g. show session 0x284830", - {ARG_TYPE_ADDRESS, 0, 0} }, - { "sessions", 0, dprintAllSessions, "Show all active sessions in MaxScale", + { "session", 1, dprintSession, + "Show a single session in MaxScale, e.g. show session 0x284830", + "Show a single session in MaxScale, e.g. show session 0x284830", + {ARG_TYPE_SESSION, 0, 0} }, + { "sessions", 0, dprintAllSessions, + "Show all active sessions in MaxScale", + "Show all active sessions in MaxScale", {0, 0, 0} }, - { "users", 0, telnetdShowUsers, "Show statistics and user names for the debug interface", - {ARG_TYPE_ADDRESS, 0, 0} }, - { NULL, 0, NULL, NULL, + { "users", 0, telnetdShowUsers, + "Show statistics and user names for the debug interface", + "Show statistics and user names for the debug interface", + {0, 0, 0} }, + { NULL, 0, NULL, NULL, NULL, {0, 0, 0} } }; @@ -133,7 +164,7 @@ struct subcommand shutdownoptions[] = { 0, shutdown_server, "Shutdown MaxScale", - + "Shutdown MaxScale", {0, 0, 0} }, { @@ -141,12 +172,14 @@ struct subcommand shutdownoptions[] = { 1, shutdown_monitor, "Shutdown a monitor, e.g. shutdown monitor 0x48381e0", - {ARG_TYPE_ADDRESS, 0, 0} + "Shutdown a monitor, e.g. shutdown monitor 0x48381e0", + {ARG_TYPE_MONITOR, 0, 0} }, { "service", 1, shutdown_service, + "Shutdown a service, e.g. shutdown service \"Sales Database\"", "Shutdown a service, e.g. shutdown service 0x4838320 or shutdown service \"Sales Database\"", {ARG_TYPE_SERVICE, 0, 0} }, @@ -155,6 +188,7 @@ struct subcommand shutdownoptions[] = { 0, NULL, NULL, + NULL, {0, 0, 0} } }; @@ -166,11 +200,15 @@ static void restart_monitor(DCB *dcb, MONITOR *monitor); * The subcommands of the restart command */ struct subcommand restartoptions[] = { - { "monitor", 1, restart_monitor, "Restart a monitor, e.g. restart monitor 0x48181e0", - {ARG_TYPE_ADDRESS, 0, 0} }, - { "service", 1, restart_service, "Restart a service, e.g. restart service 0x4838320", + { "monitor", 1, restart_monitor, + "Restart a monitor, e.g. restart monitor 0x48181e0", + "Restart a monitor, e.g. restart monitor 0x48181e0", + {ARG_TYPE_MONITOR, 0, 0} }, + { "service", 1, restart_service, + "Restart a service, e.g. restart service \"Test Service\"", + "Restart a service, e.g. restart service 0x4838320", {ARG_TYPE_SERVICE, 0, 0} }, - { NULL, 0, NULL, NULL, + { NULL, 0, NULL, NULL, NULL, {0, 0, 0} } }; @@ -179,9 +217,11 @@ static void set_server(DCB *dcb, SERVER *server, char *bit); * The subcommands of the set command */ struct subcommand setoptions[] = { - { "server", 2, set_server, "Set the status of a server. E.g. set server 0x4838320 master", + { "server", 2, set_server, + "Set the status of a server. E.g. set server dbnode4 master", + "Set the status of a server. E.g. set server 0x4838320 master", {ARG_TYPE_SERVER, ARG_TYPE_STRING, 0} }, - { NULL, 0, NULL, NULL, + { NULL, 0, NULL, NULL, NULL, {0, 0, 0} } }; @@ -190,9 +230,11 @@ static void clear_server(DCB *dcb, SERVER *server, char *bit); * The subcommands of the clear command */ struct subcommand clearoptions[] = { - { "server", 2, clear_server, "Clear the status of a server. E.g. clear server 0x4838320 master", + { "server", 2, clear_server, + "Clear the status of a server. E.g. clear server dbnode2 master", + "Clear the status of a server. E.g. clear server 0x4838320 master", {ARG_TYPE_SERVER, ARG_TYPE_STRING, 0} }, - { NULL, 0, NULL, NULL, + { NULL, 0, NULL, NULL, NULL, {0, 0, 0} } }; @@ -203,11 +245,15 @@ static void reload_config(DCB *dcb); * The subcommands of the reload command */ struct subcommand reloadoptions[] = { - { "config", 0, reload_config, "Reload the configuration data for MaxScale.", + { "config", 0, reload_config, + "Reload the configuration data for MaxScale.", + "Reload the configuration data for MaxScale.", {0, 0, 0} }, - { "dbusers", 1, reload_dbusers, "Reload the dbuser data for a service. E.g. reload dbusers 0x849420", + { "dbusers", 1, reload_dbusers, + "Reload the dbuser data for a service. E.g. reload dbusers \"splitter service\"", + "Reload the dbuser data for a service. E.g. reload dbusers 0x849420", {ARG_TYPE_DBUSERS, 0, 0} }, - { NULL, 0, NULL, NULL, + { NULL, 0, NULL, NULL, NULL, {0, 0, 0} } }; @@ -224,6 +270,8 @@ struct subcommand enableoptions[] = { enable_log_action, "Enable Log options for MaxScale, options trace | error | " "message E.g. enable log message.", + "Enable Log options for MaxScale, options trace | error | " + "message E.g. enable log message.", {ARG_TYPE_STRING, 0, 0} }, { @@ -231,6 +279,7 @@ struct subcommand enableoptions[] = { 0, NULL, NULL, + NULL, {0, 0, 0} } }; @@ -246,6 +295,8 @@ struct subcommand disableoptions[] = { disable_log_action, "Disable Log for MaxScale, Options: debug | trace | error | message " "E.g. disable log debug", + "Disable Log for MaxScale, Options: debug | trace | error | message " + "E.g. disable log debug", {ARG_TYPE_STRING, 0, 0} }, { @@ -253,6 +304,7 @@ struct subcommand disableoptions[] = { 0, NULL, NULL, + NULL, {0, 0, 0} } }; @@ -271,6 +323,7 @@ struct subcommand failoptions[] = { 0, fail_backendfd, "Fail backend socket for next operation.", + "Fail backend socket for next operation.", {ARG_TYPE_STRING, 0, 0} }, { @@ -278,6 +331,7 @@ struct subcommand failoptions[] = { 0, fail_clientfd, "Fail client socket for next operation.", + "Fail client socket for next operation.", {ARG_TYPE_STRING, 0, 0} }, { @@ -285,6 +339,7 @@ struct subcommand failoptions[] = { 2, fail_accept, "Fail to accept next client connection.", + "Fail to accept next client connection.", {ARG_TYPE_STRING, ARG_TYPE_STRING, 0} }, { @@ -292,6 +347,7 @@ struct subcommand failoptions[] = { 0, NULL, NULL, + NULL, {0, 0, 0} } }; @@ -302,9 +358,11 @@ static void telnetdAddUser(DCB *, char *, char *); * The subcommands of the add command */ struct subcommand addoptions[] = { - { "user", 2, telnetdAddUser, "Add a new user for the debug interface. E.g. add user john today", + { "user", 2, telnetdAddUser, + "Add a new user for the debug interface. E.g. add user john today", + "Add a new user for the debug interface. E.g. add user john today", {ARG_TYPE_STRING, ARG_TYPE_STRING, 0} }, - { NULL, 0, NULL, NULL, + { NULL, 0, NULL, NULL, NULL, {0, 0, 0} } }; @@ -319,10 +377,11 @@ struct subcommand removeoptions[] = { 2, telnetdRemoveUser, "Remove existing maxscale user. Example : remove user john johnpwd", + "Remove existing maxscale user. Example : remove user john johnpwd", {ARG_TYPE_STRING, ARG_TYPE_STRING, 0} }, { - NULL, 0, NULL, NULL, {0, 0, 0} + NULL, 0, NULL, NULL, NULL, {0, 0, 0} } }; @@ -355,12 +414,13 @@ static struct { * Convert a string argument to a numeric, observing prefixes * for number bases, e.g. 0x for hex, 0 for octal * + * @param mode The CLI mode * @param arg The string representation of the argument * @param arg_type The target type for the argument * @return The argument as a long integer */ static unsigned long -convert_arg(char *arg, int arg_type) +convert_arg(int mode, char *arg, int arg_type) { unsigned long rval; SERVICE *service; @@ -372,15 +432,15 @@ SERVICE *service; case ARG_TYPE_STRING: return (unsigned long)arg; case ARG_TYPE_SERVICE: - if ((rval = (unsigned long)strtol(arg, NULL, 0)) == 0) + if (mode == CLIM_USER || (rval = (unsigned long)strtol(arg, NULL, 0)) == 0) rval = (unsigned long)service_find(arg); return rval; case ARG_TYPE_SERVER: - if ((rval = (unsigned long)strtol(arg, NULL, 0)) == 0) + if (mode == CLIM_USER || (rval = (unsigned long)strtol(arg, NULL, 0)) == 0) rval = (unsigned long)server_find_by_unique_name(arg); return rval; case ARG_TYPE_DBUSERS: - if ((rval = (unsigned long)strtol(arg, NULL, 0)) == 0) + if (mode == CLIM_USER || (rval = (unsigned long)strtol(arg, NULL, 0)) == 0) { service = service_find(arg); if (service) @@ -389,6 +449,20 @@ SERVICE *service; return 0; } return rval; + case ARG_TYPE_DCB: + rval = (unsigned long)strtol(arg, NULL, 0); + if (mode == CLIM_USER && dcb_isvalid((DCB *)rval) == 0) + rval = 0; + return rval; + case ARG_TYPE_SESSION: + rval = (unsigned long)strtol(arg, NULL, 0); + if (mode == CLIM_USER && session_isvalid((SESSION *)rval) == 0) + rval = 0; + return rval; + case ARG_TYPE_MONITOR: + if (mode == CLIM_USER || (rval = (unsigned long)strtol(arg, NULL, 0)) == 0) + rval = (unsigned long)monitor_find(arg); + return rval; } return 0; } @@ -486,11 +560,23 @@ char *ptr, *lptr; dcb_printf(dcb, "Available commands:\n"); for (i = 0; cmds[i].cmd; i++) { - for (j = 0; cmds[i].options[j].arg1; j++) + if (cmds[i].options[1].arg1 == NULL) + dcb_printf(dcb, " %s %s\n", cmds[i].cmd, cmds[i].options[0].arg1); + else { - dcb_printf(dcb, " %s %s\n", cmds[i].cmd, cmds[i].options[j].arg1); + dcb_printf(dcb, " %s [", cmds[i].cmd); + for (j = 0; cmds[i].options[j].arg1; j++) + { + dcb_printf(dcb, "%s%s", cmds[i].options[j].arg1, + cmds[i].options[j+1].arg1 ? "|" : ""); + } + dcb_printf(dcb, "]\n"); } } + dcb_printf(dcb, "\nType help command to see details of each command.\n"); + dcb_printf(dcb, "Where commands require names as arguments and these names contain\n"); + dcb_printf(dcb, "whitespace either the \\ character may be used to escape the whitespace\n"); + dcb_printf(dcb, "or the name may be enclosed in double quotes \".\n\n"); } else { @@ -544,7 +630,7 @@ char *ptr, *lptr; cmds[i].options[j].fn(dcb); break; case 1: - arg1 = convert_arg(args[2],cmds[i].options[j].arg_types[0]); + arg1 = convert_arg(cli->mode, args[2],cmds[i].options[j].arg_types[0]); if (arg1) cmds[i].options[j].fn(dcb, arg1); else @@ -552,8 +638,8 @@ char *ptr, *lptr; args[2]); break; case 2: - arg1 = convert_arg(args[2],cmds[i].options[j].arg_types[0]); - arg2 = convert_arg(args[3],cmds[i].options[j].arg_types[1]); + arg1 = convert_arg(cli->mode, args[2],cmds[i].options[j].arg_types[0]); + arg2 = convert_arg(cli->mode, args[3],cmds[i].options[j].arg_types[1]); if (arg1 && arg2) cmds[i].options[j].fn(dcb, arg1, arg2); else if (arg1 == 0) @@ -564,9 +650,9 @@ char *ptr, *lptr; args[3]); break; case 3: - arg1 = convert_arg(args[2],cmds[i].options[j].arg_types[0]); - arg2 = convert_arg(args[3],cmds[i].options[j].arg_types[1]); - arg3 = convert_arg(args[4],cmds[i].options[j].arg_types[2]); + arg1 = convert_arg(cli->mode, args[2],cmds[i].options[j].arg_types[0]); + arg2 = convert_arg(cli->mode, args[3],cmds[i].options[j].arg_types[1]); + arg3 = convert_arg(cli->mode, args[4],cmds[i].options[j].arg_types[2]); if (arg1 && arg2 && arg3) cmds[i].options[j].fn(dcb, arg1, arg2, arg3); else if (arg1 == 0)